summaryrefslogtreecommitdiffstats
path: root/2023/captions
diff options
context:
space:
mode:
Diffstat (limited to '2023/captions')
-rw-r--r--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.vtt14
-rw-r--r--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.vtt315
-rw-r--r--2023/captions/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--main--chapters.vtt23
-rw-r--r--2023/captions/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--main.vtt1176
-rw-r--r--2023/captions/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--main.vtt4664
-rw-r--r--2023/captions/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--main--chapters.vtt38
-rw-r--r--2023/captions/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--main.vtt803
-rw-r--r--2023/captions/emacsconf-2023-devel--emacs-development-updates--john-wiegley--main.vtt1652
-rw-r--r--2023/captions/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--answers.vtt593
-rw-r--r--2023/captions/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--main--chapters.vtt71
-rw-r--r--2023/captions/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--main.vtt2759
-rw-r--r--2023/captions/emacsconf-2023-eat--eat-and-eat-powered-eshell-fast-featureful-terminal-inside-emacs--akib-azmain-turja--main.vtt244
-rw-r--r--2023/captions/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--answers.vtt8261
-rw-r--r--2023/captions/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main--chapters.vtt53
-rw-r--r--2023/captions/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main.vtt1076
-rw-r--r--2023/captions/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--answers.vtt3803
-rw-r--r--2023/captions/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--main--chapters.vtt35
-rw-r--r--2023/captions/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--main.vtt1079
-rw-r--r--2023/captions/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--answers.vtt1829
-rw-r--r--2023/captions/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--main--chapters.vtt80
-rw-r--r--2023/captions/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--main.vtt2048
-rw-r--r--2023/captions/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--main--chapters.vtt20
-rw-r--r--2023/captions/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--main.vtt607
-rw-r--r--2023/captions/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--main.vtt755
-rw-r--r--2023/captions/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--answers.vtt1049
-rw-r--r--2023/captions/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--main.vtt1780
-rw-r--r--2023/captions/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--main.vtt4022
-rw-r--r--2023/captions/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--original.vtt4625
-rw-r--r--2023/captions/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--answers.vtt1595
-rw-r--r--2023/captions/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--main.vtt2274
-rw-r--r--2023/captions/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--main.vtt353
-rw-r--r--2023/captions/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--answers.vtt1910
-rw-r--r--2023/captions/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--main--chapters.vtt41
-rw-r--r--2023/captions/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--main.vtt1377
-rw-r--r--2023/captions/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--answers.vtt1019
-rw-r--r--2023/captions/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--main--chapters.vtt56
-rw-r--r--2023/captions/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--main.vtt1180
-rw-r--r--2023/captions/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--main--chapters.vtt17
-rw-r--r--2023/captions/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--main.vtt602
-rw-r--r--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.vtt4486
-rw-r--r--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.vtt696
-rw-r--r--2023/captions/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--answers.vtt680
-rw-r--r--2023/captions/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--main--chapters.vtt17
-rw-r--r--2023/captions/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--main.vtt767
-rw-r--r--2023/captions/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--answers.vtt1472
-rw-r--r--2023/captions/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--main--chapters.vtt38
-rw-r--r--2023/captions/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--main.vtt1102
-rw-r--r--2023/captions/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--answers.vtt638
-rw-r--r--2023/captions/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--main--chapters.vtt80
-rw-r--r--2023/captions/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--main.vtt1319
-rw-r--r--2023/captions/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--answers.vtt767
-rw-r--r--2023/captions/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main--chapters.vtt49
-rw-r--r--2023/captions/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main.vtt972
-rw-r--r--2023/captions/emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--original.vtt1973
-rw-r--r--2023/captions/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main--chapters.vtt20
-rw-r--r--2023/captions/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main.vtt808
-rw-r--r--2023/captions/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main--chapters.vtt44
-rw-r--r--2023/captions/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main.vtt3324
-rw-r--r--2023/captions/emacsconf-2023-sat-close--saturday-closing-remarks--main.vtt503
-rw-r--r--2023/captions/emacsconf-2023-sat-open--saturday-opening-remarks--main.vtt364
-rw-r--r--2023/captions/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--answers.vtt371
-rw-r--r--2023/captions/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--main--chapters.vtt68
-rw-r--r--2023/captions/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--main.vtt1044
-rw-r--r--2023/captions/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--answers.vtt1871
-rw-r--r--2023/captions/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--main--chapters.vtt26
-rw-r--r--2023/captions/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--main.vtt1148
-rw-r--r--2023/captions/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--answers.vtt1304
-rw-r--r--2023/captions/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--main--chapters.vtt41
-rw-r--r--2023/captions/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--main.vtt834
-rw-r--r--2023/captions/emacsconf-2023-steno--programming-with-steno--daniel-alejandro-tapia--main.vtt1033
-rw-r--r--2023/captions/emacsconf-2023-sun-open--sunday-opening-remarks--main.vtt355
-rw-r--r--2023/captions/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--main.vtt649
-rw-r--r--2023/captions/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--answers.vtt2654
-rw-r--r--2023/captions/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--main--chapters.vtt53
-rw-r--r--2023/captions/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--main.vtt1193
-rw-r--r--2023/captions/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--answers.vtt1406
-rw-r--r--2023/captions/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--main--chapters.vtt68
-rw-r--r--2023/captions/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--main.vtt1371
-rw-r--r--2023/captions/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--main.vtt788
-rw-r--r--2023/captions/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--answers.vtt1202
-rw-r--r--2023/captions/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--main--chapters.vtt47
-rw-r--r--2023/captions/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--main.vtt1557
-rw-r--r--2023/captions/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--answers.vtt3361
-rw-r--r--2023/captions/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main--chapters.vtt53
-rw-r--r--2023/captions/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main.vtt890
-rw-r--r--2023/captions/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--answers.vtt779
-rw-r--r--2023/captions/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--main--chapters.vtt38
-rw-r--r--2023/captions/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--main.vtt1629
-rw-r--r--2023/captions/emacsconf-2023-windows--windows-into-freedom--corwin-brust--answers.vtt1394
-rw-r--r--2023/captions/emacsconf-2023-windows--windows-into-freedom--corwin-brust--main.vtt2345
-rw-r--r--2023/captions/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--answers.vtt314
-rw-r--r--2023/captions/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--main--chapters.vtt56
-rw-r--r--2023/captions/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--main.vtt649
-rw-r--r--2023/captions/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--answers.vtt893
-rw-r--r--2023/captions/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--main--chapters.vtt26
-rw-r--r--2023/captions/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--main.vtt557
96 files changed, 106084 insertions, 0 deletions
diff --git a/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 b/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
new file mode 100644
index 00000000..24d868ec
--- /dev/null
+++ b/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
@@ -0,0 +1,14 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:01:01.199
+Introduction
+
+00:01:01.200 --> 00:03:33.359
+Demo
+
+00:03:33.360 --> 00:04:47.039
+emi-escape-12
+
+00:04:47.040 --> 00:06:03.281
+The rest of the game
diff --git a/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 b/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
new file mode 100644
index 00000000..ef19436d
--- /dev/null
+++ b/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
@@ -0,0 +1,315 @@
+WEBVTT captioned by sachac, checked by sachac
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:04.039
+Hi, I'm going to give you a little demo
+
+00:00:04.040 --> 00:00:06.439
+of a project that I'm working on
+
+00:00:06.440 --> 00:00:09.839
+which is called the `orgdungeon`.
+
+00:00:09.840 --> 00:00:16.039
+As you can see here, they are just a bunch of Org files
+
+00:00:16.040 --> 00:00:20.559
+and also an Emacs Lisp file.
+
+00:00:20.560 --> 00:00:26.799
+What I found is that if you have these Org files
+
+00:00:26.800 --> 00:00:30.919
+and then you have an Emacs Lisp file as a source
+
+00:00:30.920 --> 00:00:36.879
+to control how to progress from one file to another,
+
+00:00:36.880 --> 00:00:40.519
+it will give you a game-like experience.
+
+00:00:40.520 --> 00:00:43.479
+It's like the old game Myst.
+
+00:00:43.480 --> 00:00:46.119
+It was developed with the technology
+
+00:00:46.120 --> 00:00:48.759
+HyperCard for the Macintosh.
+
+00:00:48.760 --> 00:00:53.199
+Basically, it uses a similar technology,
+
+00:00:53.200 --> 00:00:57.559
+so a similar interface to the developer
+
+00:00:57.560 --> 00:01:01.199
+who was using that technology to develop the game.
+
+NOTE Demo
+
+00:01:01.200 --> 00:01:03.799
+Concretely, I'm going to give you
+
+00:01:03.800 --> 00:01:08.879
+a demo of how the game looks like.
+
+00:01:08.880 --> 00:01:14.839
+So, this is a very vanilla Emacs setup.
+
+00:01:14.840 --> 00:01:18.639
+Then I open up the first Org file.
+
+00:01:18.640 --> 00:01:22.839
+The Org file is just a bunch of text,
+
+00:01:22.840 --> 00:01:25.519
+but it tells you a story.
+
+00:01:25.520 --> 00:01:27.359
+So you wake up somewhere,
+
+00:01:27.360 --> 00:01:32.599
+and then there is a dog-like robot called Emi around you.
+
+00:01:32.600 --> 00:01:37.759
+And then it tells you what you should do.
+
+00:01:37.760 --> 00:01:40.799
+Following the instructions...
+
+00:01:40.800 --> 00:01:42.719
+For example, here it tells you
+
+00:01:42.720 --> 00:01:46.239
+down there is one thing called "code block,"
+
+00:01:46.240 --> 00:01:51.359
+and then you can evaluate it by pressing `C-c C-c`.
+
+00:01:51.360 --> 00:01:53.639
+Then we can just go there
+
+00:01:53.640 --> 00:01:55.239
+and then just evaluate the code block.
+
+00:01:55.240 --> 00:02:00.239
+So technically it just runs the Emacs Lisp file,
+
+00:02:00.240 --> 00:02:04.999
+because you can see here, if you load Emacs Lisp...
+
+00:02:05.000 --> 00:02:07.159
+It just evaluates that Emacs Lisp file.
+
+00:02:07.160 --> 00:02:09.799
+I can just say `C-c C-c`.
+
+00:02:09.800 --> 00:02:12.319
+Then for this one, I just say yes,
+
+00:02:12.320 --> 00:02:16.519
+and then it will jump to another file.
+
+00:02:16.520 --> 00:02:18.759
+But in the game, I call it the plane.
+
+00:02:18.760 --> 00:02:21.039
+So it jumps to another plane.
+
+00:02:21.040 --> 00:02:24.039
+Yeah, so...
+
+00:02:24.040 --> 00:02:26.399
+In the other one, it's just saying that
+
+00:02:26.400 --> 00:02:29.879
+there is a function called `emi-escape-10`.
+
+00:02:29.880 --> 00:02:33.479
+Assuming that you don't have any experience
+
+00:02:33.480 --> 00:02:34.759
+how to use Emacs,
+
+00:02:34.760 --> 00:02:38.759
+so you have no idea how to do that,
+
+00:02:38.760 --> 00:02:41.319
+but down there, it's saying that
+
+00:02:41.320 --> 00:02:44.319
+there is a key combination called `C-h f`,
+
+00:02:44.320 --> 00:02:48.399
+and it will bring up the help system.
+
+00:02:48.400 --> 00:02:52.559
+Then you can read the help file of `emi-escape-10`.
+
+00:02:52.560 --> 00:02:55.739
+So you can just do that. For example, `C-h f`
+
+00:02:55.740 --> 00:03:02.999
+and then `describe-function` `emi-escape-10` here.
+
+00:03:03.000 --> 00:03:06.319
+It will show you the help file.
+
+00:03:06.320 --> 00:03:10.919
+Then it's just saying that you can press `M-x`,
+
+00:03:10.920 --> 00:03:13.519
+and Meta usually mapped to Alt,
+
+00:03:13.520 --> 00:03:15.079
+and then yeah.
+
+00:03:15.080 --> 00:03:18.719
+Then you can just close this help file using `C-x 1`.
+
+00:03:18.720 --> 00:03:21.399
+I'm just going to do that. And then yeah...
+
+00:03:21.400 --> 00:03:31.479
+I'm just try that. `M-x` and then `emi-escape-10`.
+
+00:03:31.480 --> 00:03:33.359
+All right.
+
+NOTE emi-escape-12
+
+00:03:33.360 --> 00:03:36.039
+So I will jump to another file.
+
+00:03:36.040 --> 00:03:39.359
+Or in the game, you jump to another plane.
+
+00:03:39.360 --> 00:03:40.338
+And now you know that
+
+00:03:40.339 --> 00:03:44.839
+there is a function called `emi-escape-12`.
+
+00:03:44.840 --> 00:03:47.638
+And yeah, you can just do that `emi`,
+
+00:03:47.639 --> 00:03:50.399
+because you learned it previously, right.
+
+00:03:50.400 --> 00:03:52.079
+`emi-escape-12`.
+
+00:03:52.080 --> 00:03:55.119
+But this time, it asks you for a password,
+
+00:03:55.120 --> 00:03:57.799
+which you probably don't know, right?
+
+00:03:57.800 --> 00:03:59.839
+If you just type in anything,
+
+00:03:59.840 --> 00:04:02.719
+it will just say incorrect password.
+
+00:04:02.720 --> 00:04:06.359
+But yeah, it's part of the learning experience
+
+00:04:06.360 --> 00:04:07.279
+because previously you learned
+
+00:04:07.280 --> 00:04:10.319
+that you should use the help file,
+
+00:04:10.320 --> 00:04:16.199
+help system to read the help file of a function,
+
+00:04:16.200 --> 00:04:18.319
+so you can just use the help file
+
+00:04:18.320 --> 00:04:25.839
+to look for the help of `emi-escape-12`.
+
+00:04:25.840 --> 00:04:29.519
+Then, yeah, the help file will say that
+
+00:04:29.520 --> 00:04:31.239
+you should enter a password,
+
+00:04:31.240 --> 00:04:34.159
+and the password is `emi`.
+
+00:04:34.160 --> 00:04:36.439
+Right. So you can just do that.
+
+00:04:36.440 --> 00:04:42.239
+Write `emi-escape-12`,
+
+00:04:42.240 --> 00:04:47.039
+and then now you know the password is `emi`. Right.
+
+NOTE The rest of the game
+
+00:04:47.040 --> 00:04:51.839
+So you can progress along these different files,
+
+00:04:51.840 --> 00:04:53.519
+and then if you...
+
+00:04:53.520 --> 00:04:54.639
+Okay, it's like a game,
+
+00:04:54.640 --> 00:04:57.279
+but at the same time, it also teaches you
+
+00:04:57.280 --> 00:05:01.679
+something about how Emacs works.
+
+00:05:01.680 --> 00:05:04.599
+For example, like the previous one,
+
+00:05:04.600 --> 00:05:07.279
+you know how to use the help file, for example,
+
+00:05:07.280 --> 00:05:11.519
+but in the later part, you will learn how to
+
+00:05:11.520 --> 00:05:14.279
+evaluate some Emacs Lisp code
+
+00:05:14.280 --> 00:05:17.159
+and also how to write some Emacs Lisp code
+
+00:05:17.160 --> 00:05:19.559
+as well, and then you will learn
+
+00:05:19.560 --> 00:05:23.399
+the difference between interactive commands
+
+00:05:23.400 --> 00:05:27.239
+and also just ordinary functions, for example.
+
+00:05:27.240 --> 00:05:31.399
+Now, I just created a few Org files,
+
+00:05:31.400 --> 00:05:36.439
+but I'm actively adding more Org files
+
+00:05:36.440 --> 00:05:39.599
+so that we can have a complete kind of
+
+00:05:39.600 --> 00:05:42.559
+educational experience.
+
+00:05:42.560 --> 00:05:45.639
+If you want to follow along [with] this project,
+
+00:05:45.640 --> 00:05:51.359
+you can just go to my Github repository.
+
+00:05:51.360 --> 00:05:56.539
+I hope you enjoyed this little demo.
+
+00:05:56.540 --> 00:06:03.281
+Thank you.
diff --git a/2023/captions/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--main--chapters.vtt b/2023/captions/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--main--chapters.vtt
new file mode 100644
index 00000000..dca4982e
--- /dev/null
+++ b/2023/captions/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--main--chapters.vtt
@@ -0,0 +1,23 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:01:16.079
+Introduction
+
+00:01:16.080 --> 00:02:18.959
+Org Mode
+
+00:02:18.960 --> 00:06:27.839
+Working together
+
+00:06:27.840 --> 00:08:04.039
+Data cleaning
+
+00:08:04.040 --> 00:12:36.039
+Processing
+
+00:12:36.040 --> 00:14:01.759
+Visualization
+
+00:14:01.760 --> 00:19:07.280
+Preserve
diff --git a/2023/captions/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--main.vtt b/2023/captions/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--main.vtt
new file mode 100644
index 00000000..1dcc0b22
--- /dev/null
+++ b/2023/captions/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--main.vtt
@@ -0,0 +1,1176 @@
+WEBVTT captioned by amine, checked by sachac
+
+NOTE Introduction
+
+00:00.000 --> 00:00:01.874
+[Lukas]: Welcome to our presentation,
+
+00:00:01.875 --> 00:00:03.599
+Collaborative Data Processing
+
+00:03.600 --> 00:06.039
+and Documenting using org-babel.
+
+00:06.040 --> 00:07.759
+My name is Lukas Bossert, and I'm
+
+00:07.760 --> 00:00:09.740
+from the RWTH Aachen University
+
+00:00:09.741 --> 00:00:12.519
+in the city of Aachen, Germany.
+
+00:12.520 --> 00:14.839
+[Jonathan]: And my name is Jonathan Hartmann.
+
+00:14.840 --> 00:18.719
+I'm also from the IT Center here at RWTH Aachen.
+
+00:18.720 --> 00:19.239
+[Lukas]: Great.
+
+00:19.240 --> 00:21.679
+And we will show you today how you
+
+00:21.680 --> 00:25.399
+can use Org Mode for data processing.
+
+00:25.400 --> 00:27.999
+So you see a little workflow what we are going to do.
+
+00:28.000 --> 00:31.199
+First, we will give you a slight introduction to Org Mode.
+
+00:31.200 --> 00:34.639
+Then we will dive into the part of data preparing.
+
+00:34.640 --> 00:38.679
+First, you're going to query the data using the language SPARQL.
+
+00:38.680 --> 00:41.759
+Then we're going to clean it using a different language.
+
+00:41.760 --> 00:44.279
+And in the main part of our presentation,
+
+00:44.280 --> 00:48.119
+we're going to do the data processing, first aggregating
+
+00:48.120 --> 00:52.519
+using Python, later on counting items using Org,
+
+00:52.520 --> 00:56.360
+and even visualizing it using R. At the end,
+
+00:56.400 --> 00:58.959
+we're going to show you how to preserve
+
+00:58.960 --> 01:01.759
+the data and the document and its documentation,
+
+01:01.760 --> 01:06.599
+first doing in plain exporting, then adding some metadata,
+
+01:06.600 --> 01:09.759
+and showing you two different ways, first a manual export,
+
+01:09.760 --> 01:13.359
+and also then a batch-processed export.
+
+01:13.360 --> 01:14.239
+All right.
+
+01:14.240 --> 01:16.079
+Let's dive in to that.
+
+NOTE Org Mode
+
+01:16.080 --> 01:19.919
+Jonathan, can you give us an introduction about Org Mode?
+
+01:19.920 --> 01:20.439
+[Jonathan]: Of course.
+
+01:20.440 --> 01:23.079
+So in case anyone isn't familiar with it,
+
+01:23.080 --> 01:25.879
+Org Mode, in the words of Carsten Dominik,
+
+01:25.880 --> 01:28.559
+is back to the future for plain text.
+
+01:28.560 --> 01:31.439
+So this is just a module available for Emacs,
+
+01:31.440 --> 01:32.519
+plain-text base.
+
+01:32.520 --> 01:34.919
+It's been around since 2003, which
+
+01:34.920 --> 01:36.799
+makes it about 20 years old.
+
+01:36.800 --> 01:40.159
+And it's extensible and fully customizable.
+
+01:40.160 --> 01:43.999
+And especially, it's very convenient, very good
+
+01:44.000 --> 01:46.719
+for scientific text production and organization.
+
+01:46.720 --> 01:49.439
+So for example, you can do project management, agenda,
+
+01:49.440 --> 01:52.559
+diary, journaling, personal knowledge management,
+
+01:52.560 --> 01:53.359
+presentation.
+
+01:53.360 --> 01:55.520
+Even this is written in Org Mode.
+
+01:55.560 --> 01:57.439
+It's an Org Mode presentation.
+
+01:57.440 --> 01:59.199
+You can do single source publishing,
+
+01:59.200 --> 02:01.679
+which we will do later on, and also
+
+02:01.680 --> 02:06.479
+literate programming, which is the core of our talk.
+
+02:06.480 --> 02:06.999
+OK.
+
+02:07.000 --> 02:10.799
+[Lukas]: So let me stop this presentation here.
+
+02:10.800 --> 02:14.719
+So what you see here is the plain text underneath it.
+
+02:14.720 --> 02:18.959
+So this is Org Mode.
+
+NOTE Working together
+
+02:18.960 --> 02:21.919
+And Jonathan, since we kind of already
+
+02:21.920 --> 02:25.320
+did the introduction together, should we
+
+02:26.120 --> 00:02:28.760
+also do the working part together?
+
+00:02:28.761 --> 00:02:29.700
+[Jonathan]: Of course.
+
+00:02:29.701 --> 00:02:33.119
+So you see on the screen there on the right,
+
+00:02:33.120 --> 00:02:35.060
+that's my screen in Emacs.
+
+00:02:35.061 --> 00:02:39.520
+And Lukas, why don't you host a session using CRDT,
+
+00:02:39.521 --> 00:02:41.200
+and I'll connect to your buffer.
+
+00:02:41.201 --> 00:02:42.560
+[Lukas]: OK. Great.
+
+00:02:42.561 --> 00:02:43.280
+I do that.
+
+00:02:43.281 --> 00:02:46.180
+So what I do, I'm using Doom Emacs.
+
+00:02:46.181 --> 00:02:49.307
+And I can use the `SPC` and then the `l`
+
+00:02:49.308 --> 00:02:52.140
+for the live share/collab part.
+
+00:02:52.141 --> 02:57.999
+I can use the `s` for share current buffer.
+
+02:58.000 --> 00:03:01.559
+So when I do this, I'm getting asked for some settings.
+
+00:03:01.560 --> 00:03:04.439
+I'm going with the default settings here.
+
+00:03:04.440 --> 00:03:08.340
+So default port, no password, and my display name.
+
+00:03:08.341 --> 00:03:11.940
+And now Emacs is connecting.
+
+00:03:11.941 --> 00:03:15.179
+And once it's connected, which just takes a couple of seconds,
+
+00:03:15.180 --> 00:03:17.239
+I can get the URL.
+
+00:03:17.240 --> 03:20.800
+So I'm going back to this menu and using `y`
+
+03:21.160 --> 03:23.999
+for copying the URL of the current session.
+
+03:24.000 --> 03:27.799
+And this is the URL I'm going to send over to you, Jonathan,
+
+03:27.800 --> 03:29.079
+to pick that up.
+
+03:29.080 --> 03:29.599
+[Jonathan]: Right.
+
+03:29.600 --> 03:30.079
+OK.
+
+03:30.080 --> 00:03:36.999
+And now on my screen, I'm going to do a `SPC l c` for connect.
+
+00:03:37.000 --> 00:03:38.740
+And I'm going to paste the URL
+
+00:03:38.741 --> 00:03:40.040
+that Lukas just sent me in here.
+
+00:03:40.980 --> 03:43.719
+Default port, no password.
+
+03:43.720 --> 00:03:45.440
+And we're connecting now.
+
+00:03:45.700 --> 03:48.600
+So this takes a second just to get us synced up.
+
+03:51.600 --> 00:03:54.160
+So we can work on the same document at the same time.
+
+00:03:54.161 --> 03:56.639
+We can follow each other's cursors around.
+
+03:56.640 --> 03:58.839
+We can have multiple buffers open and work on them
+
+03:58.840 --> 04:00.999
+at the same time.
+
+04:01.000 --> 04:04.719
+And so here you see that we are both in the same document.
+
+04:04.720 --> 04:06.280
+You can see my cursor popping around.
+
+04:09.040 --> 04:13.279
+And you can see we're both editing the same item.
+
+04:13.280 --> 04:14.039
+Great.
+
+04:14.040 --> 04:18.039
+[Lukas]: So we also see who else is currently in our buffer
+
+04:18.040 --> 04:20.199
+with the user overview.
+
+04:20.200 --> 04:23.559
+So let me just delete that window.
+
+04:23.560 --> 04:26.079
+And that's going to work in our main one.
+
+04:26.080 --> 04:29.599
+So we said first part is about data retrieval.
+
+04:29.600 --> 04:32.720
+So we should give it a headline.
+
+04:37.080 --> 04:39.239
+We said prepare stage.
+
+04:39.240 --> 04:42.319
+So what are we going to do first, Jonathan?
+
+04:42.320 --> 00:04:43.940
+[Jonathan]: So what we're going to do,
+
+00:04:43.941 --> 00:04:45.399
+what this whole document is based upon,
+
+04:45.400 --> 04:50.119
+is we're going to pull data from Wikidata using a SPARQL query.
+
+04:50.120 --> 04:53.519
+The data we're going to pull is related to the NFDIs,
+
+04:53.520 --> 04:55.639
+which here in Germany is the National Forschungsdaten
+
+04:55.640 --> 05:00.679
+Infrastructure, which is a sort of collection of universities
+
+05:00.680 --> 05:03.399
+that work together on various research projects.
+
+05:03.400 --> 05:05.599
+And this is emblematic of the kind of data
+
+05:05.600 --> 05:09.239
+that we would be interested in working with here.
+
+05:09.240 --> 05:13.359
+So I'm going to paste a--forgive the pre-written code--
+
+05:13.360 --> 05:19.840
+I'm going to paste some text in here.
+
+05:20.040 --> 00:05:21.407
+[Lukas]: And while you are talking, I just
+
+00:05:21.408 --> 00:05:23.359
+keep on documenting what we do
+
+00:05:23.360 --> 00:05:25.880
+so we can split the work.
+
+05:27.360 --> 05:29.679
+[Jonathan]: In here, after a minor technical upset,
+
+05:29.680 --> 05:32.559
+is the raw dataset cell.
+
+05:32.560 --> 00:05:34.740
+And it's going to use SPARQL,
+
+00:05:34.741 --> 00:05:37.174
+which is how we have the syntax highlighting
+
+00:05:37.175 --> 00:05:37.940
+in our code here.
+
+00:05:37.941 --> 05:40.639
+It's going to go to the URL endpoint
+
+05:40.640 --> 05:43.639
+query.wikidata.org/sparql ,
+
+05:43.640 --> 05:46.799
+and it's going to return the data as a text CSV,
+
+05:46.800 --> 05:49.279
+and it's going to cache that data
+
+05:49.280 --> 05:51.439
+so that we don't constantly hammer the API every time
+
+05:51.440 --> 05:54.239
+we run this notebook.
+
+05:54.240 --> 00:05:57.360
+So I'm going to run that there.
+
+00:05:57.361 --> 05:58.799
+You can see down at the bottom of my screen,
+
+05:58.800 --> 06:00.840
+we're contacting the host query.wikidata.org .
+
+06:05.720 --> 06:07.319
+[Lukas]: And there's the result.
+
+06:07.320 --> 06:11.799
+[Jonathan]: Yeah, except I think that for our purposes here,
+
+06:11.800 --> 06:15.279
+we're just going to limit this to 50 results.
+
+06:15.280 --> 06:16.279
+[Lukas]: Oh, yeah.
+
+06:16.280 --> 06:18.679
+[Jonathan]: Just so it's a little easier for us to manage.
+
+06:18.680 --> 06:20.719
+I'm going to run that again.
+
+06:20.720 --> 06:21.519
+There we go.
+
+06:21.520 --> 00:06:22.319
+That looks a little better.
+
+00:06:22.320 --> 00:06:23.159
+[Lukas]: I think that's fine.
+
+00:06:23.160 --> 00:06:25.359
+50 items is fine.
+
+00:06:25.360 --> 06:27.839
+So what do we see here, Jonathan?
+
+NOTE Data cleaning
+
+06:27.840 --> 06:28.319
+[Jonathan]: Right.
+
+06:28.320 --> 06:31.239
+So the first thing we see when we look at this
+
+06:31.240 --> 00:06:33.307
+is a couple of Q codes at the top,
+
+00:06:33.308 --> 00:06:36.079
+which are an artifact of Wikidata.
+
+06:36.080 --> 06:39.519
+So these are pages which don't have
+
+06:39.520 --> 06:42.519
+the label for whichever institution they happen to be.
+
+06:42.520 --> 06:45.919
+For our purposes here, we're just going to exclude them.
+
+06:45.920 --> 06:48.199
+We could just go on Wikidata and edit them ourselves.
+
+06:48.200 --> 06:50.399
+But for now, it's a little more interesting
+
+06:50.400 --> 06:52.519
+if we go and remove them.
+
+06:52.520 --> 06:55.159
+So I'm going to create a new cell.
+
+06:55.160 --> 06:58.279
+Lukas, if you don't mind starting one for data cleaning.
+
+06:58.280 --> 06:58.879
+[Lukas]: Oh, yeah.
+
+06:58.880 --> 06:59.479
+Good point.
+
+06:59.480 --> 07:02.039
+Yeah, data cleaning.
+
+07:02.040 --> 07:03.439
+OK.
+
+07:03.440 --> 00:07:05.499
+How do you want to do that, Jonathan?
+
+00:07:05.500 --> 07:09.759
+[Jonathan]: I'm going to use a shell command.
+
+07:09.760 --> 07:11.119
+So let's see.
+
+07:11.120 --> 07:12.999
+There we go.
+
+07:13.000 --> 07:15.159
+And so you can see, here is another cell,
+
+07:15.160 --> 07:20.039
+that the cell is now using a shell,
+
+07:20.040 --> 00:07:23.799
+and that we have this thing `:var input=raw-dataset`,
+
+00:07:23.800 --> 00:07:25.840
+which is the name of the cell above
+
+00:07:25.841 --> 00:07:28.439
+where we got our data from Wikidata.
+
+07:28.440 --> 07:31.679
+This is going to run just a simple shell command.
+
+07:31.680 --> 07:33.959
+It's going to take the input and then run `sed` on it
+
+07:33.960 --> 00:07:37.039
+and exclude any records which have a Q
+
+00:07:37.040 --> 00:07:41.279
+followed by one or more digits afterwards.
+
+07:41.280 --> 07:43.960
+That should remove those from our data set.
+
+07:44.000 --> 07:45.400
+So I'm going to run that.
+
+07:48.640 --> 07:51.039
+That seems to have done the trick.
+
+07:51.040 --> 07:51.879
+[Lukas]: Great, yeah.
+
+07:51.880 --> 07:52.919
+That's really good.
+
+07:52.920 --> 07:55.399
+We got rid of all the Q items.
+
+07:55.400 --> 07:55.919
+Very good.
+
+07:55.920 --> 07:59.959
+So we just have two-column table: institutions
+
+07:59.960 --> 08:02.759
+and consortia.
+
+08:02.760 --> 08:04.039
+Very nice.
+
+NOTE Processing
+
+08:04.040 --> 08:08.719
+So let's come to our main part, doing some processing.
+
+08:08.720 --> 08:13.560
+Let me give you a headline here, process the data.
+
+08:13.640 --> 08:15.519
+What do you want to do first?
+
+08:15.520 --> 08:17.599
+[Jonathan]: This is not a very complicated data set,
+
+08:17.600 --> 08:19.439
+but let's just do some simple counts first.
+
+08:19.440 --> 08:22.199
+I'm going to start with Python,
+
+08:22.200 --> 08:25.239
+and we're just going to do some aggregation with Python.
+
+08:25.240 --> 08:30.039
+Again, I've got some pre-written code here.
+
+08:30.040 --> 08:34.999
+You can see that we've started a cell using Python.
+
+08:35.000 --> 08:37.879
+The variable `clean_df` now is equal to `clean-dataset`.
+
+08:37.880 --> 00:08:39.707
+So we're going to take that data
+
+00:08:39.708 --> 00:08:41.039
+that we retrieved from the SPARQL query,
+
+08:41.040 --> 08:42.680
+we're going to run it through the cleaning cell,
+
+08:42.720 --> 08:45.239
+and then we're going to import it into this cell.
+
+08:45.240 --> 08:47.839
+This is just going to do some simple Python aggregation.
+
+08:47.840 --> 00:08:49.007
+We're going to import `pandas`,
+
+00:08:49.008 --> 00:08:51.307
+which is the Python data science library,
+
+00:08:51.308 --> 00:08:54.839
+create a data frame out of our input,
+
+08:54.840 --> 08:57.479
+and then aggregate it, grouping on `wLabel`,
+
+08:57.480 --> 08:59.959
+and getting a count from that and returning it.
+
+08:59.960 --> 09:01.640
+So if we execute that cell...
+
+09:05.040 --> 09:08.879
+[Lukas]: Nice, we get institutions and a count.
+
+09:08.880 --> 09:14.119
+But what about not ordering it by the alphabet,
+
+09:14.120 --> 09:17.079
+but more like ordering by counts?
+
+09:17.080 --> 09:18.439
+[Jonathan]: Sure.
+
+09:18.440 --> 09:22.839
+So let's do this... `sort_values()`, I think, as the Python.
+
+09:22.840 --> 09:24.919
+How does that look?
+
+09:24.920 --> 00:09:27.640
+[Lukas]: Better, but I would like to
+
+00:09:27.641 --> 00:09:29.239
+have the highest number first
+
+09:29.240 --> 09:32.239
+and then ascending.
+
+09:32.240 --> 09:34.719
+Well, not ascending, descending.
+
+09:34.720 --> 09:37.600
+[Jonathan]: Right, so we can do `ascending=False`.
+
+09:39.880 --> 09:42.559
+[Lukas]: This is perfect, I'd say.
+
+09:42.560 --> 09:43.079
+[Jonathan]: Great.
+
+09:43.080 --> 09:44.079
+[Lukas]: Very good.
+
+09:44.080 --> 00:09:46.799
+OK, that's nice.
+
+00:09:46.800 --> 09:47.999
+We get a good overview here.
+
+09:48.000 --> 09:50.079
+But can we also do something else,
+
+09:50.080 --> 09:56.079
+like counting how many institutions are
+
+09:56.080 --> 09:57.799
+involved in one consortium?
+
+09:57.800 --> 10:00.879
+And also using this later on in the text?
+
+10:00.880 --> 00:10:00.880
+[Jonathan]: Sure, so I'm going to put a new...
+
+00:10:00.881 --> 00:10:05.040
+If you give me another heading down here
+
+00:10:05.041 --> 00:10:08.320
+for institutions per consortium...
+
+10:12.080 --> 10:16.799
+And here we're going to use awk code just to spice things up
+
+10:16.800 --> 10:18.959
+and add yet another language in here.
+
+10:18.960 --> 10:22.439
+So you can see this is awk.
+
+10:22.440 --> 10:26.279
+We're using standard in instead of defining a variable.
+
+10:26.280 --> 10:28.359
+But the really interesting thing about this cell
+
+10:28.360 --> 00:10:33.399
+is that we have this `:var consortium="NFDI4Memory"`.
+
+10:33.400 --> 00:10:35.640
+And what this code is doing is
+
+00:10:35.641 --> 00:10:38.040
+it's counting any time it sees
+
+00:10:38.041 --> 00:10:40.279
+that particular consortium name
+
+10:40.280 --> 10:41.759
+and keeping track of that.
+
+10:41.760 --> 00:10:43.907
+So if we execute this,
+
+00:10:43.908 --> 00:10:45.919
+Lukas, why don't you execute this one?
+
+10:45.920 --> 10:49.399
+[Lukas]: OK, I'm going to enter it.
+
+10:49.400 --> 10:52.439
+And I get a result, NFDI4Memory,
+
+10:52.440 --> 10:58.239
+because this is our default value for this variable.
+
+10:58.240 --> 10:59.439
+And we get the count.
+
+10:59.440 --> 00:11:01.640
+So it's five institutions are involved
+
+00:11:01.641 --> 00:11:04.639
+in the NFDI4memory consortium.
+
+11:04.640 --> 11:07.839
+Great, but the very nice thing, what I think,
+
+11:07.840 --> 11:12.519
+is here that we can use this code snippet within our text.
+
+11:12.520 --> 11:14.279
+So, blended in seamlessly.
+
+11:14.280 --> 11:16.199
+Let me give you an example.
+
+11:16.200 --> 11:18.919
+I'm writing out the text.
+
+11:18.920 --> 11:27.599
+Now we know how many institutions are in...
+
+11:27.600 --> 11:29.239
+Give me an example.
+
+11:29.240 --> 11:31.480
+I would like to know how many institutions are
+
+11:31.560 --> 11:35.079
+involved in NFDI4Objects, which is a consortium.
+
+11:35.080 --> 11:39.239
+So I'm writing `call_` and using
+
+11:39.240 --> 00:11:42.607
+the name of this snippet here, of this cell,
+
+00:11:42.608 --> 00:11:46.607
+which is `inst-count(`,
+
+00:11:46.608 --> 00:11:51.719
+and writing my value, `NFDI4Objects`.
+
+11:51.720 --> 11:57.999
+As soon as I evaluate this using `C-c C-c`,
+
+11:58.000 --> 12:00.279
+I get the result back here.
+
+12:00.280 --> 12:05.159
+I can do this even for more.
+
+12:05.160 --> 12:14.039
+Or in writing, `call_inst-count`, go with `NFDI4Earth`,
+
+12:14.040 --> 12:16.799
+which is another consortium.
+
+12:16.800 --> 12:20.559
+`C-c C-c`, it's three institutions.
+
+12:20.560 --> 12:23.439
+This can be used throughout your text,
+
+12:23.440 --> 12:26.639
+and as soon as the data set changes from in the beginning,
+
+12:26.640 --> 12:30.399
+maybe different results requiring Wikidata,
+
+12:30.400 --> 12:35.079
+this also will be updated once it's exported.
+
+12:35.080 --> 12:36.039
+Very nice, Jonathan.
+
+NOTE Visualization
+
+12:36.040 --> 00:12:38.974
+But I think we did a lot of analysis
+
+00:12:38.975 --> 00:12:41.079
+on text and counting things.
+
+12:41.080 --> 12:43.679
+Can we also do something more visual?
+
+12:43.680 --> 12:45.199
+Show me something.
+
+12:45.200 --> 12:45.759
+[Jonathan]: Sure.
+
+12:45.760 --> 12:48.639
+So what we can do with this, because we just
+
+12:48.640 --> 12:51.399
+have two columns here that are sort of related,
+
+12:51.400 --> 12:53.759
+we can build a little network plot out of it.
+
+12:53.760 --> 12:56.999
+So let's make a network visualization.
+
+12:57.000 --> 12:59.599
+We're going to use the `igraph` library from R
+
+12:59.600 --> 13:02.559
+and just plot the edges that we see here.
+
+13:02.560 --> 13:04.239
+There we go.
+
+13:04.240 --> 13:11.879
+There's my little heading and space.
+
+13:11.880 --> 13:13.479
+Here is our code.
+
+13:13.480 --> 13:16.039
+Again, just to be fancy and keep using
+
+13:16.040 --> 13:19.719
+different languages in here, we set a variable called
+
+13:19.720 --> 13:21.560
+`NFDI_edges` equal to `clean-dataset`.
+
+13:21.600 --> 13:23.399
+So this, again, is sort of cascading
+
+13:23.400 --> 00:13:25.740
+through the original data
+
+00:13:25.741 --> 00:13:28.807
+that we pulled from the Wikidata endpoint,
+
+00:13:28.808 --> 00:13:30.959
+cleaning that data, and now it's being inserted
+
+13:30.960 --> 13:32.959
+into this cell as well.
+
+13:32.960 --> 13:34.239
+But you see the difference here.
+
+13:34.240 --> 13:36.839
+Instead of exporting a table, what we're saying
+
+13:36.840 --> 13:39.239
+is that there will be a graphics file,
+
+13:39.240 --> 13:44.639
+and it will be called network-plot.png.
+
+13:44.640 --> 13:45.119
+All right.
+
+13:45.120 --> 13:47.959
+And so Lukas, why don't you execute this one?
+
+13:47.960 --> 13:48.759
+[Lukas]: There you go.
+
+13:48.760 --> 13:52.919
+I can click `C-c C-c`
+
+13:52.920 --> 13:59.159
+and I get a nice plot of the network below our cell.
+
+13:59.160 --> 14:01.759
+So this is very nice indeed.
+
+NOTE Preserve
+
+14:01.760 --> 14:05.199
+So I think it's about time to wrap it up and to export
+
+14:05.200 --> 14:07.959
+and to preserve the data and the documentation
+
+14:07.960 --> 14:13.079
+that we have in our very last step, calling preserve.
+
+14:13.080 --> 14:16.239
+So I would like to do it in two steps.
+
+14:16.240 --> 14:18.600
+First, maybe manually exporting it,
+
+14:18.800 --> 14:22.239
+but then also doing it in a batch process.
+
+14:22.240 --> 14:27.119
+Giving you some insights how to do that manual export.
+
+14:27.120 --> 14:30.559
+For example, you can do a LaTeX export.
+
+14:30.560 --> 14:34.279
+Let me write down the key combination to do that here.
+
+14:34.280 --> 14:44.560
+So you press `SPC m e l o`.
+
+14:44.600 --> 14:49.159
+Let me show you how this is done.
+
+14:49.160 --> 14:51.439
+So I'm pressing `SPC`.
+
+14:51.440 --> 14:55.679
+I'm pressing `m`, which is my local leader.
+
+14:55.680 --> 15:01.279
+I'm pressing `e`, which is now the `org-export-dispatch`.
+
+15:01.280 --> 15:03.519
+And now I have different options I can choose from.
+
+15:03.520 --> 15:07.119
+I want to do a LaTeX export because I want to get in PDF.
+
+15:07.120 --> 00:15:08.674
+So I'm pressing `l`.
+
+00:15:08.675 --> 00:15:11.479
+Now I've got different options available.
+
+15:11.480 --> 15:17.399
+So I'm pressing `o` for a PDF file and open that.
+
+15:17.400 --> 15:21.119
+Let's see now the code.
+
+15:21.120 --> 15:25.639
+Now this is exporting document.
+
+15:25.640 --> 00:15:29.674
+And what we have here is PDF,
+
+00:15:29.675 --> 00:15:31.974
+which contains our workflow in the beginning,
+
+00:15:31.975 --> 00:15:35.707
+our bullet points we have here,
+
+00:15:35.708 --> 00:15:37.919
+and also the code snippet
+
+15:37.920 --> 15:41.120
+that we use for querying the data.
+
+15:41.280 --> 15:43.599
+And we have the result below that.
+
+15:43.600 --> 15:46.999
+So this is our table with all the data sets.
+
+15:47.000 --> 15:51.879
+But as you can see, this is running out of the page.
+
+15:51.880 --> 15:55.679
+So this is not very nice using the default settings.
+
+15:55.680 --> 16:00.239
+But everything is in this PDF.
+
+16:00.240 --> 16:02.759
+I guess we can now show you a way
+
+16:02.760 --> 16:06.519
+how to improve this result.
+
+16:06.520 --> 16:07.039
+[Jonathan]: Right.
+
+16:07.040 --> 16:09.399
+So we have, of course, a version of this
+
+16:09.400 --> 00:16:10.774
+that we prepared ahead of time,
+
+00:16:10.775 --> 00:16:14.279
+which is more or less identical to the one we just made,
+
+16:14.280 --> 16:17.839
+but it has a little more text, a little more explanation,
+
+16:17.840 --> 16:20.559
+a little more documentation along with the code.
+
+16:20.560 --> 16:23.879
+You can see we have some metadata up at the top,
+
+16:23.880 --> 16:26.879
+the title, the authors, a bibliography,
+
+16:26.880 --> 16:31.679
+and most importantly, the `custom-export.setup` file,
+
+16:31.680 --> 16:36.879
+which lists specifically the sort of LaTeX commands
+
+16:36.880 --> 16:43.599
+that we're using and the HTML styles that we're going to use.
+
+16:43.600 --> 16:45.919
+And then down at the bottom of this file,
+
+16:45.920 --> 16:49.119
+we have our automatic batch process.
+
+16:49.120 --> 16:51.719
+Here is one more language we're including in here.
+
+16:51.720 --> 16:53.439
+So this is Lisp.
+
+16:53.440 --> 16:57.359
+And you can see here we are exporting to HTML, ASCII,
+
+16:57.360 --> 16:58.079
+and PDF.
+
+16:58.080 --> 17:01.359
+The nice thing about this is that this is a document.
+
+17:01.360 --> 00:17:03.307
+It's a sort of document that we have a couple of
+
+00:17:03.308 --> 00:17:08.639
+that we can have running automatically and building.
+
+17:08.640 --> 17:12.919
+It will export a HTML, an ASCII file, and a PDF file
+
+17:12.920 --> 00:17:14.674
+every time it's run based off of
+
+00:17:14.675 --> 00:17:17.319
+the most recent data available on Wikidata.
+
+17:17.320 --> 17:19.719
+So it's self-documenting.
+
+17:19.720 --> 00:17:22.440
+We have, of course, our data retrieval steps,
+
+00:17:22.441 --> 00:17:25.159
+our data cleaning steps, our data preparation steps,
+
+17:25.160 --> 17:28.359
+and our preservation steps all listed at the same time.
+
+17:28.360 --> 17:30.239
+And then you can see over on the right,
+
+17:30.240 --> 17:34.320
+there's an example of the HTML file that we get out of this.
+
+17:34.360 --> 17:37.639
+We also get a very nicely formatted PDF file,
+
+17:37.640 --> 17:39.239
+which doesn't have that little issue
+
+17:39.240 --> 17:41.719
+with the overflow of the table.
+
+17:41.720 --> 17:43.559
+It's very nicely put together.
+
+17:43.560 --> 17:46.199
+And we even have an ASCII file.
+
+17:46.200 --> 17:47.879
+And I should also point out very quickly,
+
+17:47.880 --> 17:51.799
+while you have this one up, Lukas, after the awk code,
+
+17:51.800 --> 17:56.079
+you can see the text for the number of consortia,
+
+17:56.080 --> 17:57.839
+or the number of institutions per consortia
+
+17:57.840 --> 18:00.519
+is actually printed inline.
+
+18:00.520 --> 18:01.799
+[Lukas]: Yeah, you're very right.
+
+18:01.800 --> 18:06.119
+So this is what we had as code,
+
+18:06.120 --> 18:10.719
+and now this is nicely integrated into our text.
+
+18:10.720 --> 18:15.279
+So we got the consortium and number of institutions.
+
+18:15.280 --> 18:19.199
+You can't tell a difference between code and text.
+
+18:19.200 --> 18:20.719
+[Jonathan]: And those are automatically updated.
+
+18:20.720 --> 18:23.879
+So if another institution joins NFDI4Earth,
+
+18:23.880 --> 18:26.319
+then the next time this runs, we update the text right here.
+
+18:26.320 --> 18:28.519
+It's nothing we have to worry about.
+
+18:28.520 --> 18:30.400
+We just pull it directly out of Wikidata.
+
+18:31.840 --> 18:34.679
+[Lukas]: And for the sake of completeness,
+
+18:34.680 --> 18:37.879
+this is the ASCII file.
+
+18:37.880 --> 18:39.320
+That's in the export format.
+
+18:42.760 --> 18:46.440
+It contains also everything, code and data.
+
+18:48.360 --> 18:51.680
+Yeah, so this is what we wanted to show you,
+
+18:53.240 --> 18:56.639
+how to do some data processing,
+
+18:56.640 --> 18:58.679
+some collaborative work,
+
+18:58.680 --> 19:01.119
+documenting using org-babel.
+
+19:01.120 --> 19:03.960
+Thanks for listening.
+
+19:05.720 --> 19:07.280
+[Jonathan]: Thank you all, have a good day.
diff --git a/2023/captions/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--main.vtt b/2023/captions/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--main.vtt
new file mode 100644
index 00000000..2d7cd23d
--- /dev/null
+++ b/2023/captions/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--main.vtt
@@ -0,0 +1,4664 @@
+WEBVTT
+
+
+00:00:02.540 --> 00:00:03.840
+All right. Hi again, everyone.
+
+00:00:03.840 --> 00:00:04.839
+It's been a while. Well,
+
+00:00:04.839 --> 00:00:06.980
+actually, it's been like 2 minutes tops.
+
+00:00:07.819 --> 00:00:09.099
+We were just with John Wheatley,
+
+00:00:09.099 --> 00:00:11.019
+and now we are with Stefan Krangas.
+
+00:00:11.120 --> 00:00:15.900
+Hi. Hi. So as we said before,
+
+00:00:16.160 --> 00:00:20.600
+Stefan is co-maintainer now of Is it the
+
+00:00:20.600 --> 00:00:22.920
+entire Emacs project? How do you describe
+
+00:00:22.920 --> 00:00:26.260
+this? Yeah, co-maintainer of GNU Emacs.
+
+00:00:27.439 --> 00:00:29.380
+Right, perfect. So you know what?
+
+00:00:29.380 --> 00:00:31.760
+Because I'm sure everyone is dying to hear
+
+00:00:32.420 --> 00:00:33.840
+everything you've got to say in your
+
+00:00:33.840 --> 00:00:36.040
+presentation I'm just going to shut up now
+
+00:00:36.040 --> 00:00:37.640
+and leave the floor to you.
+
+00:00:37.640 --> 00:00:39.440
+Do you need to share your screen or anything?
+
+00:00:40.080 --> 00:00:45.239
+No. Okay great well I'll just cut my webcam
+
+00:00:45.239 --> 00:00:47.059
+off I'll still be in the background so do not
+
+00:00:47.059 --> 00:00:48.940
+hesitate if you've got any problem I'm still
+
+00:00:48.940 --> 00:00:52.560
+around And I'll see you just beacon whenever
+
+00:00:52.560 --> 00:00:53.940
+you're done. And I'll show up with the
+
+00:00:53.940 --> 00:00:56.120
+questions. All right? Thank you,
+
+00:00:56.120 --> 00:00:58.739
+Leo. And thank you, everyone,
+
+00:00:58.739 --> 00:01:02.379
+for being here. I'm Stefan Kangas.
+
+00:01:02.739 --> 00:01:06.660
+So as Leo explained, I am recently appointed
+
+00:01:06.680 --> 00:01:09.660
+as a co-maintainer of GNU Emacs,
+
+00:01:10.960 --> 00:01:13.400
+which a role that I'm fulfilling currently
+
+00:01:13.780 --> 00:01:17.460
+with Eli Sretsky, who's been co-maintainer
+
+00:01:18.840 --> 00:01:23.320
+for quite some time. So I got the question to
+
+00:01:23.320 --> 00:01:26.780
+be a co-maintainer from Richard in August
+
+00:01:26.780 --> 00:01:29.280
+this year. And of course,
+
+00:01:29.600 --> 00:01:31.460
+when you get a question like that,
+
+00:01:31.840 --> 00:01:34.020
+I couldn't not say yes.
+
+00:01:34.360 --> 00:01:39.440
+So here we are. I can't tell you how excited
+
+00:01:39.920 --> 00:01:45.060
+I am to have this opportunity to address the
+
+00:01:45.060 --> 00:01:47.380
+community in this way.
+
+00:01:47.640 --> 00:01:49.800
+I'm really humbled, of course,
+
+00:01:50.380 --> 00:01:55.040
+to be part of it, and to be able to serve the
+
+00:01:55.040 --> 00:01:59.080
+community in this capacity.
+
+00:02:00.080 --> 00:02:04.080
+I've used Emacs, I think many of you might
+
+00:02:04.080 --> 00:02:06.820
+also have used Emacs for quite some time,
+
+00:02:06.820 --> 00:02:11.100
+but I'm going on 2 decades as an Emacs user.
+
+00:02:11.120 --> 00:02:14.280
+My involvement in Emacs Lisp development is,
+
+00:02:14.280 --> 00:02:16.160
+I mean, almost as long,
+
+00:02:16.660 --> 00:02:19.680
+but my core development goes back only 4,
+
+00:02:19.960 --> 00:02:26.700
+5 years. I have to also thank the EmacsConf
+
+00:02:27.180 --> 00:02:28.840
+organizers who are doing,
+
+00:02:29.100 --> 00:02:31.960
+I think, a tremendous job and have done a
+
+00:02:31.960 --> 00:02:34.820
+tremendous job over the years in really
+
+00:02:34.820 --> 00:02:37.800
+building and strengthening what I think is
+
+00:02:38.300 --> 00:02:42.180
+this fantastic community of users and
+
+00:02:42.180 --> 00:02:46.120
+developers and people interested in Emacs.
+
+00:02:46.620 --> 00:02:50.100
+I actually had the chance to meet up with Eli
+
+00:02:50.100 --> 00:02:53.700
+Sretzky, as well as another Emacs hacker,
+
+00:02:53.960 --> 00:02:57.080
+Andrea Corallo, when I was at the GNU
+
+00:02:57.980 --> 00:03:00.460
+project's 40 years celebration,
+
+00:03:00.800 --> 00:03:04.340
+40 years since the GNU project was announced.
+
+00:03:05.280 --> 00:03:08.540
+And it was very inspiring in general to meet
+
+00:03:09.660 --> 00:03:12.780
+people. And I think EmacsConf should also,
+
+00:03:12.980 --> 00:03:18.360
+I think, serve to inspire and sort of help
+
+00:03:19.020 --> 00:03:22.120
+bring something to the type of work that many
+
+00:03:22.120 --> 00:03:24.340
+of us are doing to improve Emacs,
+
+00:03:24.340 --> 00:03:26.200
+whether it's in package development or in
+
+00:03:26.200 --> 00:03:29.680
+core, to bring out the new and exciting ideas
+
+00:03:29.800 --> 00:03:34.040
+and get people enthusiastic about Emacs,
+
+00:03:34.080 --> 00:03:37.580
+about hacking on Emacs.
+
+00:03:38.560 --> 00:03:45.400
+This is my little attempt to contribute with
+
+00:03:45.600 --> 00:03:49.440
+let's say 2 things. I will first try to
+
+00:03:49.600 --> 00:03:54.400
+present how we do Emacs core development and
+
+00:03:54.400 --> 00:03:58.360
+why we've done some of the choices that we
+
+00:03:58.360 --> 00:04:02.060
+have, because We have seen at times that
+
+00:04:02.280 --> 00:04:06.500
+perhaps people aren't always clear on this or
+
+00:04:06.500 --> 00:04:08.660
+that aspect. So maybe this will be
+
+00:04:08.960 --> 00:04:12.260
+enlightening. I will also try to present some
+
+00:04:12.260 --> 00:04:17.860
+kind of vision for what Emacs could be with
+
+00:04:18.060 --> 00:04:21.680
+your help. Emacs is already very good,
+
+00:04:21.820 --> 00:04:26.880
+as we all know, but we could be even better.
+
+00:04:27.040 --> 00:04:29.940
+That's the reality of any type of software
+
+00:04:30.060 --> 00:04:35.100
+development. So the overall idea of this talk
+
+00:04:35.220 --> 00:04:38.380
+is to tell you, if you're an Emacs list
+
+00:04:38.380 --> 00:04:40.460
+package developer today,
+
+00:04:40.760 --> 00:04:44.200
+why you should become an Emacs core
+
+00:04:44.440 --> 00:04:47.300
+developer, and the sort of steps that you
+
+00:04:47.300 --> 00:04:49.340
+might want to take to do that,
+
+00:04:49.340 --> 00:04:52.100
+or how you can help Emacs core development.
+
+00:04:52.120 --> 00:04:54.320
+Even if you're just a user and you found a
+
+00:04:54.320 --> 00:04:57.340
+bug, report it. Perhaps you have a feature
+
+00:04:57.340 --> 00:04:58.820
+request that you'd like to discuss.
+
+00:04:58.820 --> 00:05:02.680
+I think we need more interaction in general
+
+00:05:02.900 --> 00:05:04.900
+between Emacs core developers,
+
+00:05:05.080 --> 00:05:06.440
+typically on emacsdevil.gnu.org,
+
+00:05:08.440 --> 00:05:12.420
+the mailing list that we use to coordinate
+
+00:05:12.840 --> 00:05:14.880
+our development efforts,
+
+00:05:15.860 --> 00:05:19.520
+between Emacs devil package developers and
+
+00:05:19.520 --> 00:05:22.460
+users, Because there is so much great stuff
+
+00:05:22.500 --> 00:05:24.740
+really going on in the community.
+
+00:05:25.520 --> 00:05:28.620
+But I think sometimes the step to core
+
+00:05:28.740 --> 00:05:32.500
+development seems big and perhaps even a
+
+00:05:32.500 --> 00:05:35.440
+little bit scary. So I'm hoping to be able to
+
+00:05:35.440 --> 00:05:38.720
+help bridge that gap, even if just a little
+
+00:05:38.720 --> 00:05:43.000
+bit. We need more people contributing to
+
+00:05:43.000 --> 00:05:46.740
+Emacs itself. And also a small disclaimer
+
+00:05:46.840 --> 00:05:49.920
+here, in this talk I will only be able to
+
+00:05:49.920 --> 00:05:53.700
+speak for myself, not for GNU or the Emacs
+
+00:05:53.760 --> 00:05:56.100
+project, even if it's like a little bit more
+
+00:05:56.500 --> 00:05:58.780
+official, but I will also try to give the
+
+00:05:58.780 --> 00:06:01.720
+view of the project where it makes sense to
+
+00:06:01.720 --> 00:06:04.200
+do so. Keep in mind, I'm only 1 of the
+
+00:06:04.200 --> 00:06:06.820
+maintainers, the co-maintainer together with
+
+00:06:06.820 --> 00:06:09.820
+Eli, and I can't just make decisions
+
+00:06:09.880 --> 00:06:11.400
+arbitrarily. In a sense,
+
+00:06:11.680 --> 00:06:14.180
+I'm as a co-maintainer and trusted as a
+
+00:06:14.180 --> 00:06:15.420
+steward and trusted by,
+
+00:06:15.420 --> 00:06:16.680
+of course, the GNU project,
+
+00:06:16.680 --> 00:06:22.000
+but also by the community That we really
+
+00:06:22.580 --> 00:06:24.180
+can't just take decisions,
+
+00:06:24.440 --> 00:06:27.380
+I think, arbitrarily. Even if it sometimes
+
+00:06:27.380 --> 00:06:30.560
+perhaps may seem so, or it may feel that way,
+
+00:06:31.100 --> 00:06:35.080
+we really have to realize that we can't just
+
+00:06:35.080 --> 00:06:39.200
+push too much of just a personal agenda to
+
+00:06:39.200 --> 00:06:41.520
+the extent that it doesn't line up with what
+
+00:06:41.520 --> 00:06:45.260
+is best for eMacs going forward,
+
+00:06:47.500 --> 00:06:50.320
+and the more overall picture of that.
+
+00:06:50.320 --> 00:06:52.640
+So there are limitations that come with the
+
+00:06:52.640 --> 00:06:59.940
+job, if you like. So 1 question I often,
+
+00:07:00.040 --> 00:07:02.280
+I actually got this week when I started a new
+
+00:07:02.280 --> 00:07:04.500
+assignment at work, and I got the question
+
+00:07:06.280 --> 00:07:08.720
+when I said I'm involved in Emacs
+
+00:07:08.720 --> 00:07:10.400
+development. And then someone asked,
+
+00:07:10.400 --> 00:07:12.480
+oh, is Emacs still developed?
+
+00:07:12.720 --> 00:07:16.400
+Isn't it done almost? And I answered to that,
+
+00:07:16.400 --> 00:07:17.880
+yes, we are still around.
+
+00:07:17.880 --> 00:07:21.940
+We're going on 40 years now as a software
+
+00:07:21.940 --> 00:07:25.940
+project. Not many projects actually can claim
+
+00:07:26.120 --> 00:07:29.020
+that type of longevity.
+
+00:07:29.540 --> 00:07:33.900
+But Emacs is among those few that can.
+
+00:07:33.900 --> 00:07:36.340
+And of course, we have had some very exciting
+
+00:07:36.340 --> 00:07:38.000
+developments in recent versions.
+
+00:07:38.000 --> 00:07:41.600
+I think John just gave you an update on that.
+
+00:07:41.980 --> 00:07:46.160
+But we had just some highlights out of many
+
+00:07:46.160 --> 00:07:47.940
+highlights that you could give,
+
+00:07:48.580 --> 00:07:50.920
+really, we got the TreeSetter support in
+
+00:07:50.920 --> 00:07:54.320
+Emacs 29 that we now need to sort of extend
+
+00:07:54.320 --> 00:07:56.340
+and develop. We have merged EGLOT,
+
+00:07:56.380 --> 00:07:59.440
+so we have LSP support out of the box,
+
+00:07:59.440 --> 00:08:00.980
+I think is a huge improvement.
+
+00:08:01.400 --> 00:08:02.960
+Native compilation, of course,
+
+00:08:02.960 --> 00:08:06.520
+a big feature. I mean,
+
+00:08:06.580 --> 00:08:08.900
+that was Andrea's job,
+
+00:08:08.900 --> 00:08:11.260
+really, for performance.
+
+00:08:11.460 --> 00:08:14.020
+And it turns out that in many types of
+
+00:08:14.020 --> 00:08:15.720
+workloads and the types of stuff that people
+
+00:08:15.720 --> 00:08:17.580
+are doing, it often matters.
+
+00:08:18.080 --> 00:08:21.180
+And we're hoping to make that the default,
+
+00:08:21.480 --> 00:08:24.960
+perhaps already in Emacs 30.
+
+00:08:24.960 --> 00:08:26.840
+So there are things that are happening that
+
+00:08:26.840 --> 00:08:31.680
+fundamentally make Emacs better at a very
+
+00:08:32.200 --> 00:08:37.360
+core level. So, of course,
+
+00:08:37.360 --> 00:08:41.679
+why wouldn't you want to be involved in such
+
+00:08:41.679 --> 00:08:43.440
+an exciting and, I think,
+
+00:08:43.440 --> 00:08:51.240
+dynamic project? How is Emacs developed?
+
+00:08:51.660 --> 00:08:53.000
+Well, this is, I think,
+
+00:08:53.000 --> 00:08:54.180
+perhaps to some people,
+
+00:08:54.200 --> 00:08:56.300
+a little bit more of a threshold,
+
+00:08:56.520 --> 00:08:59.100
+if you like, because I think all of us know
+
+00:08:59.100 --> 00:09:02.640
+really that there is exciting and cool stuff
+
+00:09:02.980 --> 00:09:06.560
+that is going on in Emacs and has been going
+
+00:09:06.560 --> 00:09:08.260
+on over the last couple of years and we'll
+
+00:09:08.260 --> 00:09:10.040
+see even more of that,
+
+00:09:10.040 --> 00:09:11.180
+I think, going forward.
+
+00:09:12.600 --> 00:09:16.580
+1 thing is that communication still takes
+
+00:09:16.580 --> 00:09:20.340
+place over a mailing list in 2023.
+
+00:09:21.240 --> 00:09:23.800
+So we have emacsdevil at gnu.org,
+
+00:09:24.440 --> 00:09:26.140
+and that's where we develop Emacs.
+
+00:09:26.680 --> 00:09:30.140
+We use, we send patches back and forth,
+
+00:09:30.140 --> 00:09:31.360
+we comment on patches.
+
+00:09:32.700 --> 00:09:36.420
+And actually this workflow is very good,
+
+00:09:36.700 --> 00:09:39.580
+if you're used to it. Because guess what?
+
+00:09:39.580 --> 00:09:42.200
+As Emacs users, we like doing everything we
+
+00:09:42.200 --> 00:09:45.220
+can in Emacs, especially the core tasks that
+
+00:09:45.220 --> 00:09:49.980
+we're doing, such as developing Emacs itself.
+
+00:09:50.140 --> 00:09:52.860
+Of course, you want to do that fully within
+
+00:09:52.960 --> 00:09:55.440
+Emacs. So we hack Emacs Lisp in Emacs,
+
+00:09:55.440 --> 00:09:58.840
+we hack C in Emacs, we respond to emails also
+
+00:10:00.240 --> 00:10:02.700
+from Emacs, respond to bug reports,
+
+00:10:02.700 --> 00:10:05.040
+manage bug reports. We do all that stuff
+
+00:10:05.460 --> 00:10:07.840
+very, very smoothly. And it doesn't really
+
+00:10:07.840 --> 00:10:10.540
+matter in a sense, what is the medium?
+
+00:10:10.560 --> 00:10:12.080
+It happens to be email.
+
+00:10:12.180 --> 00:10:14.160
+Technically it could be anything,
+
+00:10:14.440 --> 00:10:16.720
+but email really has that type of staying
+
+00:10:16.720 --> 00:10:19.640
+power where we've been able to use it for a
+
+00:10:19.640 --> 00:10:21.260
+long time. And this is how,
+
+00:10:22.360 --> 00:10:24.000
+and we're still able to use it.
+
+00:10:24.000 --> 00:10:25.800
+And this is how free software was always
+
+00:10:25.800 --> 00:10:26.640
+developed in the past.
+
+00:10:26.640 --> 00:10:28.380
+Only in the last, let's say 10,
+
+00:10:28.380 --> 00:10:32.440
+15 years, We've had more development taking
+
+00:10:32.440 --> 00:10:35.560
+place perhaps on forges like GitHub,
+
+00:10:35.580 --> 00:10:39.160
+GitLab, whatever. But we are 1 of the
+
+00:10:39.160 --> 00:10:40.680
+holdouts. I mean, there are others,
+
+00:10:40.680 --> 00:10:42.560
+of course, like the Linux kernel has mailing
+
+00:10:42.560 --> 00:10:44.340
+lists. They're not trying to do that scale
+
+00:10:44.340 --> 00:10:47.580
+development on GitHub.
+
+00:10:49.280 --> 00:10:51.360
+And this is not just because we're Luddites
+
+00:10:51.760 --> 00:10:53.560
+that refuse to change.
+
+00:10:53.560 --> 00:10:55.380
+We just have to do it in the old way,
+
+00:10:55.380 --> 00:10:57.120
+because it is the old way,
+
+00:10:57.120 --> 00:10:58.680
+and that's the way it should be.
+
+00:10:58.780 --> 00:11:00.420
+No, it's actually because we,
+
+00:11:01.220 --> 00:11:03.460
+as core developers, the core development team
+
+00:11:03.460 --> 00:11:05.460
+and the people already involved and doing
+
+00:11:05.460 --> 00:11:08.560
+tremendous, I mean large amounts of work in
+
+00:11:08.560 --> 00:11:12.480
+Emacs has very efficient workflows built up
+
+00:11:12.720 --> 00:11:15.620
+based on this. So of course,
+
+00:11:15.620 --> 00:11:17.780
+I mean moving to something else is something
+
+00:11:18.320 --> 00:11:20.180
+that we might like to do,
+
+00:11:20.580 --> 00:11:24.400
+but we're not yet clear on how to do it
+
+00:11:24.400 --> 00:11:26.100
+exactly and what to move to.
+
+00:11:26.320 --> 00:11:28.380
+So these are the types of discussions that
+
+00:11:28.380 --> 00:11:30.280
+we're looking at. Can we still support a
+
+00:11:30.280 --> 00:11:34.040
+mailing, an email type workflow while moving
+
+00:11:34.040 --> 00:11:36.100
+to something else? That would be 1 of the big
+
+00:11:36.100 --> 00:11:38.400
+ones. I think another thing that trips people
+
+00:11:38.400 --> 00:11:40.840
+up is that we used a bug tracker that,
+
+00:11:40.840 --> 00:11:42.620
+I mean, maybe some people,
+
+00:11:42.620 --> 00:11:45.560
+I've heard people say it's archaic.
+
+00:11:47.020 --> 00:11:49.900
+It's called Debugs. I think maybe Debugs gets
+
+00:11:49.900 --> 00:11:52.000
+a bit of a bad rap. I think that bugs is a
+
+00:11:52.000 --> 00:11:53.100
+good piece of software.
+
+00:11:53.520 --> 00:11:55.160
+It wasn't developed in 2023.
+
+00:11:55.580 --> 00:11:57.540
+I mean, that's much as clear.
+
+00:11:57.660 --> 00:11:58.880
+It's a little bit older,
+
+00:11:59.060 --> 00:12:01.320
+but it really is a workhorse of the Debian
+
+00:12:01.320 --> 00:12:03.820
+project, which is obviously a project that's
+
+00:12:03.960 --> 00:12:09.400
+developed in a very different way than Emacs
+
+00:12:09.400 --> 00:12:11.880
+is. It's on a completely different scale,
+
+00:12:11.880 --> 00:12:12.840
+of course, much bigger,
+
+00:12:12.840 --> 00:12:14.980
+many more developers, and so on.
+
+00:12:15.040 --> 00:12:17.800
+But I think the developers did a good job for
+
+00:12:17.800 --> 00:12:20.240
+the time. But it might be showing its age,
+
+00:12:20.920 --> 00:12:23.160
+perhaps, in places. Perhaps,
+
+00:12:23.440 --> 00:12:25.120
+again, it's the email workflow.
+
+00:12:25.260 --> 00:12:27.720
+And people see that as a little bit of a
+
+00:12:27.720 --> 00:12:30.180
+threshold. It seems alien.
+
+00:12:30.180 --> 00:12:31.300
+It's a little bit strange,
+
+00:12:32.220 --> 00:12:34.980
+the types of workflows that you have there.
+
+00:12:35.220 --> 00:12:38.860
+So we are seeing some limitations with that
+
+00:12:38.860 --> 00:12:40.940
+box. And again, how do you report bugs?
+
+00:12:41.020 --> 00:12:42.600
+Well, in a sense, it's easy.
+
+00:12:42.600 --> 00:12:46.660
+You send an email to bug-gnu-emacs at gnu.org
+
+00:12:47.620 --> 00:12:51.340
+and you copy in whatever you get from,
+
+00:12:51.340 --> 00:12:53.300
+you know, report the EMAX bug or if you have,
+
+00:12:53.300 --> 00:12:55.120
+you know, send mail set up locally,
+
+00:12:55.580 --> 00:12:58.700
+just hit control C, control C and it's sent
+
+00:12:58.700 --> 00:13:01.720
+to the bug tracker and that's fine.
+
+00:13:03.840 --> 00:13:08.680
+But also I have to mention that there is this
+
+00:13:08.680 --> 00:13:10.600
+very good package on GNU Elpas.
+
+00:13:10.600 --> 00:13:13.540
+If you're ever trying to read the Emacs bug
+
+00:13:13.540 --> 00:13:16.500
+tracker or following along in Emacs
+
+00:13:16.500 --> 00:13:19.000
+development, I really recommend install the
+
+00:13:19.000 --> 00:13:21.300
+package devbugs from GNU Elpa.
+
+00:13:22.120 --> 00:13:24.140
+It's so good. And again,
+
+00:13:24.140 --> 00:13:26.580
+it's built on GNU, it's all integrated in
+
+00:13:26.580 --> 00:13:30.040
+Emacs, it's so much better than using the web
+
+00:13:30.660 --> 00:13:33.220
+and so on. And if you really want to get into
+
+00:13:33.220 --> 00:13:38.040
+it, you can download the bug tracker archives
+
+00:13:38.140 --> 00:13:39.500
+and the mailing list archives,
+
+00:13:39.720 --> 00:13:41.260
+and you can put them locally,
+
+00:13:41.260 --> 00:13:42.380
+you can have them searchable,
+
+00:13:42.740 --> 00:13:44.440
+and you can have whatever experience you
+
+00:13:44.440 --> 00:13:47.340
+like. So, I mean, it's really a flexible
+
+00:13:48.240 --> 00:13:51.240
+workflow, but it's a bit strange,
+
+00:13:51.260 --> 00:13:52.620
+perhaps, to some people.
+
+00:13:53.460 --> 00:13:58.120
+So we also think supporting only this
+
+00:13:58.120 --> 00:14:00.140
+workflow might be a little bit too limiting.
+
+00:14:00.660 --> 00:14:04.200
+So we do want to move over to something like
+
+00:14:04.440 --> 00:14:06.760
+GitLab, perhaps Sourcehat or something
+
+00:14:06.760 --> 00:14:10.460
+similar. We've had a couple of discussions
+
+00:14:10.760 --> 00:14:14.000
+about that over the last couple of years.
+
+00:14:14.480 --> 00:14:15.820
+I think even before that,
+
+00:14:15.820 --> 00:14:18.940
+but that's how far back I've been involved,
+
+00:14:18.940 --> 00:14:21.800
+and definitely it's come up occasionally.
+
+00:14:23.100 --> 00:14:27.900
+I think we are less far away than perhaps
+
+00:14:27.940 --> 00:14:30.560
+ever is how I would express that,
+
+00:14:30.720 --> 00:14:36.680
+and in the sense that the remaining blockers
+
+00:14:36.960 --> 00:14:38.640
+for just making the shift,
+
+00:14:38.640 --> 00:14:40.200
+let's say, are I think,
+
+00:14:40.200 --> 00:14:42.120
+I mean, first of all, we're talking about
+
+00:14:42.120 --> 00:14:44.020
+limitations, perhaps in the software,
+
+00:14:44.020 --> 00:14:46.420
+they're well defined, and they're not as
+
+00:14:46.420 --> 00:14:49.060
+amountable. I don't think they have to be in
+
+00:14:49.060 --> 00:14:50.840
+any case. We should be able to make some
+
+00:14:50.840 --> 00:14:54.660
+progress. The main thing that we're lacking
+
+00:14:54.720 --> 00:14:58.480
+now is not more discussion or more people
+
+00:15:00.800 --> 00:15:03.120
+prodding us to just please switch over.
+
+00:15:03.120 --> 00:15:04.580
+No, we're looking for volunteers.
+
+00:15:05.980 --> 00:15:08.380
+If you think that you,
+
+00:15:08.400 --> 00:15:10.960
+you know, have what it takes to sort of come
+
+00:15:10.960 --> 00:15:14.060
+in and help us do something like that and
+
+00:15:14.060 --> 00:15:15.040
+work together with us,
+
+00:15:15.040 --> 00:15:16.840
+you know, to see what can be done,
+
+00:15:16.840 --> 00:15:20.200
+perhaps some, a few things would need to be
+
+00:15:20.200 --> 00:15:23.220
+changed in GitLab. I don't think anything
+
+00:15:23.220 --> 00:15:26.120
+huge, but maybe there are some patches to be
+
+00:15:26.120 --> 00:15:27.880
+written and sent upstream,
+
+00:15:27.980 --> 00:15:30.280
+or maybe we need to do some local hacks or
+
+00:15:30.280 --> 00:15:33.140
+whatever. If you wanna do that,
+
+00:15:33.140 --> 00:15:34.860
+please contact us, emacsdevil.
+
+00:15:35.460 --> 00:15:38.940
+We'll be very happy to talk to you.
+
+00:15:38.940 --> 00:15:40.460
+And then we can start making progress.
+
+00:15:40.520 --> 00:15:42.740
+So I'm really hoping that that sound like
+
+00:15:42.740 --> 00:15:46.620
+will come into place. But we need to,
+
+00:15:46.780 --> 00:15:52.340
+if we do switch over, we need to preserve the
+
+00:15:52.340 --> 00:15:54.820
+good parts of our email-based workflows.
+
+00:15:54.820 --> 00:15:57.140
+So there are requirements there so that we
+
+00:15:57.140 --> 00:16:00.180
+can continue to do our job as maintainers,
+
+00:16:01.720 --> 00:16:04.900
+if you like. Another thing is that we've
+
+00:16:04.900 --> 00:16:08.340
+sometimes seen that there's a bit of a
+
+00:16:08.340 --> 00:16:11.380
+different culture perhaps on mailing lists
+
+00:16:11.380 --> 00:16:15.060
+and on Emacs devil than what many people are
+
+00:16:15.060 --> 00:16:17.580
+used to, especially like you've used perhaps,
+
+00:16:17.800 --> 00:16:20.540
+many people might be in university and
+
+00:16:20.540 --> 00:16:23.500
+they've started using Emacs,
+
+00:16:23.720 --> 00:16:25.820
+maybe got into a little bit of package
+
+00:16:25.840 --> 00:16:29.060
+development and starting to get the ropes of
+
+00:16:29.060 --> 00:16:32.540
+that and are very used to working on places
+
+00:16:32.560 --> 00:16:35.460
+like GitLab or something like that,
+
+00:16:35.460 --> 00:16:38.000
+then the type of culture and way of
+
+00:16:38.000 --> 00:16:42.040
+communicating that we use in Emacs might be a
+
+00:16:42.040 --> 00:16:44.440
+little bit different. And of course,
+
+00:16:44.540 --> 00:16:47.360
+it's different in the sense that mailing
+
+00:16:47.380 --> 00:16:49.900
+lists have always, I mean,
+
+00:16:49.900 --> 00:16:51.060
+let's say hacker culture,
+
+00:16:51.060 --> 00:16:52.120
+whatever you want to call it,
+
+00:16:52.120 --> 00:16:54.400
+have always communicated in a particular way
+
+00:16:54.720 --> 00:16:58.340
+using mailing lists. So it's like succinct to
+
+00:16:58.340 --> 00:17:00.320
+the point, perhaps I'm skipping a few
+
+00:17:00.320 --> 00:17:03.340
+pleasantries. And the idea is that you should
+
+00:17:03.340 --> 00:17:08.000
+just use it in as effective way as possible,
+
+00:17:08.359 --> 00:17:11.099
+so that also the archives are usable.
+
+00:17:11.319 --> 00:17:13.660
+And the other thing is that generally people
+
+00:17:13.660 --> 00:17:16.500
+involved in developing free software has to
+
+00:17:16.500 --> 00:17:19.660
+deal with a lot of incoming traffic,
+
+00:17:19.780 --> 00:17:25.900
+emails. They don't have the bandwidth if it's
+
+00:17:25.900 --> 00:17:28.220
+too much noise. You really need to be strict
+
+00:17:28.220 --> 00:17:31.840
+to keep the signal to noise ratio high.
+
+00:17:31.840 --> 00:17:35.280
+We have some weird terminology on the Emacs
+
+00:17:35.280 --> 00:17:38.040
+devil. People tell us,
+
+00:17:38.200 --> 00:17:40.680
+we say sometimes install patches which
+
+00:17:40.680 --> 00:17:44.180
+basically means push to master or merge pull
+
+00:17:44.180 --> 00:17:46.720
+requests because we've used other version
+
+00:17:46.720 --> 00:17:48.600
+control systems in the past where it might
+
+00:17:48.600 --> 00:17:50.700
+have made more sense to say install patches.
+
+00:17:51.000 --> 00:17:52.540
+And then you sort of, I don't know,
+
+00:17:52.540 --> 00:17:54.380
+I say it. Don't ask me why.
+
+00:17:54.380 --> 00:17:56.040
+But it feels natural after a while.
+
+00:17:56.040 --> 00:17:57.720
+You install a patch. It's clear what you
+
+00:17:57.720 --> 00:18:02.280
+mean. You don't have to worry about which
+
+00:18:02.280 --> 00:18:05.940
+branch it's on. So it's a little bit
+
+00:18:06.600 --> 00:18:10.120
+historical there. So there is some of that
+
+00:18:10.120 --> 00:18:11.960
+culture going on. It might be different.
+
+00:18:11.960 --> 00:18:14.200
+We don't use emojis that much.
+
+00:18:14.220 --> 00:18:16.680
+That's another thing. There is no like,
+
+00:18:16.840 --> 00:18:20.900
+you can click the little like button at the
+
+00:18:20.900 --> 00:18:25.080
+bottom of a comment or an email as you could
+
+00:18:25.080 --> 00:18:27.740
+on GitHub. But there are exceptions and it's
+
+00:18:27.740 --> 00:18:29.600
+not like someone will send you angry emails
+
+00:18:29.600 --> 00:18:31.480
+if you use an emoji or something like that.
+
+00:18:31.480 --> 00:18:34.200
+But it can come off as perhaps Because people
+
+00:18:34.200 --> 00:18:37.180
+are pressed for time also when replying to
+
+00:18:37.260 --> 00:18:39.400
+all these emails. So it might come off as a
+
+00:18:39.400 --> 00:18:42.880
+little bit short, but that's just how it is.
+
+00:18:43.440 --> 00:18:46.880
+And I think We have heard this comment before
+
+00:18:46.880 --> 00:18:50.680
+that mailing lists are scary or Emacs devil
+
+00:18:50.720 --> 00:18:54.380
+is scary or core development is scary.
+
+00:18:54.780 --> 00:18:58.180
+And I've touched a few of these points a
+
+00:18:58.180 --> 00:18:59.620
+little bit already. I think,
+
+00:18:59.620 --> 00:19:01.500
+yeah, maybe a little bit.
+
+00:19:02.320 --> 00:19:05.740
+For example, we don't use emojis very short
+
+00:19:06.820 --> 00:19:10.940
+in the communication. And we always use
+
+00:19:10.940 --> 00:19:13.240
+correct grammar and spelling.
+
+00:19:13.380 --> 00:19:15.920
+We take that seriously because it's important
+
+00:19:15.920 --> 00:19:19.060
+for being clear in your written communication
+
+00:19:19.200 --> 00:19:21.540
+when all you have is written communication.
+
+00:19:22.680 --> 00:19:23.740
+It's really important.
+
+00:19:26.760 --> 00:19:31.400
+But it's not like If you come in there and
+
+00:19:31.400 --> 00:19:33.580
+you don't know all these cultural rules and
+
+00:19:33.580 --> 00:19:36.380
+all these patterns, then you know you will We
+
+00:19:36.380 --> 00:19:37.900
+won't talk to you No Actually,
+
+00:19:37.900 --> 00:19:41.100
+we try to be as welcoming as we can and and
+
+00:19:41.100 --> 00:19:44.600
+be mindful and you know people not Everyone
+
+00:19:44.600 --> 00:19:46.700
+has English as their native language,
+
+00:19:47.080 --> 00:19:49.200
+for example. So perhaps someone says
+
+00:19:49.200 --> 00:19:51.360
+something, and it might come off as rude,
+
+00:19:51.360 --> 00:19:53.200
+but maybe it's just a direct translation.
+
+00:19:53.200 --> 00:19:56.520
+So we're trying to give a lot of whatever the
+
+00:19:56.520 --> 00:19:59.760
+native language is. So we try to give a lot
+
+00:19:59.760 --> 00:20:01.780
+of leeway and just be a little bit,
+
+00:20:01.780 --> 00:20:03.580
+you know, flexible and focus on,
+
+00:20:03.580 --> 00:20:04.920
+you know, the key, key points,
+
+00:20:04.920 --> 00:20:06.580
+which are the technical things,
+
+00:20:06.580 --> 00:20:07.760
+the technical decisions,
+
+00:20:07.840 --> 00:20:09.280
+technical arguments, rather than,
+
+00:20:09.280 --> 00:20:11.920
+you know, getting bogged down in a lot of,
+
+00:20:11.920 --> 00:20:15.360
+you know, personal, you know,
+
+00:20:15.360 --> 00:20:19.220
+discussions and flame wars.
+
+00:20:19.300 --> 00:20:21.260
+So, I mean, there are these things to be
+
+00:20:21.260 --> 00:20:23.160
+aware of, you know, it's just a little bit
+
+00:20:23.160 --> 00:20:24.980
+different. I don't think it's anything huge.
+
+00:20:25.080 --> 00:20:26.620
+And I wouldn't be, you know,
+
+00:20:28.440 --> 00:20:30.480
+I think it would be sad if people felt too
+
+00:20:30.480 --> 00:20:32.320
+intimidated by that. It just is what it is.
+
+00:20:32.320 --> 00:20:33.540
+And if you spend some time there,
+
+00:20:33.540 --> 00:20:35.960
+you'll see how people generally communicate.
+
+00:20:38.400 --> 00:20:41.260
+Sometimes, there are a lot of people on
+
+00:20:41.260 --> 00:20:43.600
+EmacsDevil. It's a public mailing list.
+
+00:20:43.660 --> 00:20:46.240
+A lot of people just sign up to follow Emacs
+
+00:20:46.240 --> 00:20:48.860
+development. Sometimes they chime in.
+
+00:20:48.940 --> 00:20:50.820
+And I think this is in general a good thing.
+
+00:20:50.820 --> 00:20:53.300
+I think it should be a public mailing list.
+
+00:20:53.680 --> 00:21:00.220
+Sometimes this leads to weird situations from
+
+00:21:00.480 --> 00:21:03.400
+just a point of view as an Emacs maintainer,
+
+00:21:03.480 --> 00:21:07.080
+right? I mean, I try to say something and it
+
+00:21:07.080 --> 00:21:08.240
+doesn't always say, oh,
+
+00:21:08.240 --> 00:21:10.020
+he's the maintainer or whatever.
+
+00:21:10.080 --> 00:21:11.200
+So when I say something,
+
+00:21:11.200 --> 00:21:13.380
+it should carry a little bit more weight than
+
+00:21:13.380 --> 00:21:16.160
+some unknown person from the internet who has
+
+00:21:16.160 --> 00:21:18.300
+an opinion and decided to send it to
+
+00:21:18.740 --> 00:21:21.020
+EmacsDevil. So it's good to be a little bit
+
+00:21:21.020 --> 00:21:23.160
+aware of who is a little bit more involved
+
+00:21:23.160 --> 00:21:25.280
+with the project. I would check out the
+
+00:21:25.280 --> 00:21:27.100
+maintainers file. I would check,
+
+00:21:27.380 --> 00:21:31.000
+see in the Git log, do these people actually
+
+00:21:31.000 --> 00:21:33.300
+have any anything in core?
+
+00:21:33.580 --> 00:21:35.260
+And if not, maybe, you know,
+
+00:21:35.860 --> 00:21:38.660
+there, we won't really,
+
+00:21:39.100 --> 00:21:41.000
+even if they express an opinion very
+
+00:21:41.000 --> 00:21:42.720
+strongly, even if they're a little bit rude,
+
+00:21:42.720 --> 00:21:44.700
+maybe they're not even involved in Emacs
+
+00:21:44.760 --> 00:21:46.340
+development. I mean, often,
+
+00:21:46.680 --> 00:21:48.460
+that's the case we have some people,
+
+00:21:48.460 --> 00:21:49.900
+unfortunately, at times,
+
+00:21:50.340 --> 00:21:52.720
+we have random people from the internet come
+
+00:21:52.720 --> 00:21:54.720
+in on the mailing list and they're just a
+
+00:21:54.720 --> 00:21:56.780
+little bit rude, or they say an opinion
+
+00:21:57.740 --> 00:21:59.620
+that's not exactly helpful.
+
+00:22:00.060 --> 00:22:02.320
+And I think you need to be aware.
+
+00:22:02.320 --> 00:22:04.340
+I mean, these things happen in any forum,
+
+00:22:04.340 --> 00:22:07.740
+but it happens on EmacsDevO as well.
+
+00:22:07.800 --> 00:22:10.680
+So just be a little bit aware of who you're
+
+00:22:10.680 --> 00:22:13.540
+talking to, what people are doing.
+
+00:22:13.700 --> 00:22:15.880
+It can help to Check the archives,
+
+00:22:16.240 --> 00:22:18.460
+see who writes what, and so on.
+
+00:22:20.320 --> 00:22:23.080
+But it's not something that I think is a huge
+
+00:22:23.080 --> 00:22:24.220
+problem. It is just, again,
+
+00:22:24.220 --> 00:22:25.780
+something to be aware of.
+
+00:22:25.900 --> 00:22:28.040
+We have the new kind of communication
+
+00:22:28.180 --> 00:22:30.820
+guidelines in place, which basically says
+
+00:22:30.820 --> 00:22:33.740
+that you should be nice to people and stay
+
+00:22:33.740 --> 00:22:36.060
+focused on the technical problem,
+
+00:22:36.060 --> 00:22:38.300
+try to see things from another person's point
+
+00:22:38.300 --> 00:22:39.360
+of view, this kind of stuff.
+
+00:22:39.360 --> 00:22:42.140
+So we're really trying to be as inclusive as
+
+00:22:42.140 --> 00:22:46.820
+possible and just stay correct in general.
+
+00:22:46.820 --> 00:22:48.380
+And sometimes, I mean,
+
+00:22:48.380 --> 00:22:50.060
+not everyone, it's a public list.
+
+00:22:50.060 --> 00:22:52.440
+We moderate it, but not to a huge extent,
+
+00:22:52.440 --> 00:22:57.840
+right? So sometimes people get away with a
+
+00:22:57.840 --> 00:23:02.260
+little bit of perhaps stretching the
+
+00:23:02.260 --> 00:23:04.700
+boundaries of what might be included in the
+
+00:23:04.700 --> 00:23:06.500
+kind communication guidelines,
+
+00:23:08.040 --> 00:23:10.940
+sort of the fences and limitations of that.
+
+00:23:11.460 --> 00:23:13.940
+But I would just ignore that.
+
+00:23:13.940 --> 00:23:15.700
+Sometimes it happens that we,
+
+00:23:15.860 --> 00:23:17.160
+as happens in any forum,
+
+00:23:17.160 --> 00:23:19.440
+by the way, you just, we have these very big
+
+00:23:19.440 --> 00:23:21.760
+threads. We start discussing something else.
+
+00:23:21.760 --> 00:23:24.300
+Perhaps you send us a patch and it just
+
+00:23:24.320 --> 00:23:26.360
+devolves into us discussing something
+
+00:23:26.360 --> 00:23:28.680
+completely different. And of course I partake
+
+00:23:28.680 --> 00:23:30.440
+in that, not better than anyone else,
+
+00:23:30.440 --> 00:23:32.940
+but it just happens. I mean,
+
+00:23:32.960 --> 00:23:34.800
+it's not your fault. It's just what happens
+
+00:23:34.800 --> 00:23:37.200
+sometimes in forums, and don't mind that.
+
+00:23:37.200 --> 00:23:39.120
+And it's a little bit easier to do that in
+
+00:23:39.120 --> 00:23:41.680
+emails, because you just change the subject,
+
+00:23:41.680 --> 00:23:43.580
+and now it's supposed to be a different
+
+00:23:43.580 --> 00:23:45.780
+thread, but it comes as replies usually to
+
+00:23:45.780 --> 00:23:48.480
+you, which wouldn't happen perhaps in a
+
+00:23:48.480 --> 00:23:49.960
+different workflow. So it's something to be
+
+00:23:49.960 --> 00:23:53.300
+aware of as well. Another thing is that,
+
+00:23:53.300 --> 00:23:54.680
+of course, in written communication,
+
+00:23:55.080 --> 00:23:56.620
+tone doesn't always come across.
+
+00:23:57.980 --> 00:23:59.240
+If someone sounds negative,
+
+00:23:59.240 --> 00:24:01.280
+sometimes it's just them being neutral.
+
+00:24:01.460 --> 00:24:05.400
+Sometimes you get no replies.
+
+00:24:05.500 --> 00:24:07.120
+You send something, you get no replies.
+
+00:24:07.120 --> 00:24:09.220
+And this could mean, actually it could mean,
+
+00:24:09.880 --> 00:24:11.500
+yeah, what you said was uncontroversial.
+
+00:24:11.720 --> 00:24:12.980
+We think it was a good idea.
+
+00:24:13.660 --> 00:24:16.360
+No 1 replied to it because either someone
+
+00:24:16.360 --> 00:24:18.960
+else would reply or just there was no need to
+
+00:24:18.960 --> 00:24:20.640
+reply because, yeah, why not?
+
+00:24:21.580 --> 00:24:24.060
+So but if you do send a patch and you don't
+
+00:24:24.060 --> 00:24:26.280
+get an answer, wait. I mean,
+
+00:24:26.280 --> 00:24:29.380
+don't wait 1, 2 days. Maybe we're busy or
+
+00:24:29.380 --> 00:24:30.520
+we're sick or whatever.
+
+00:24:30.840 --> 00:24:32.800
+Wait 2 weeks. It's fine to just send it
+
+00:24:32.800 --> 00:24:34.940
+again. If you send the patch to EmacsDevil,
+
+00:24:35.660 --> 00:24:37.040
+send it to the bug mailing list,
+
+00:24:37.040 --> 00:24:39.260
+because we lose track of stuff on EmacsDevil.
+
+00:24:39.800 --> 00:24:41.560
+That's just the reality of it.
+
+00:24:43.440 --> 00:24:46.080
+So if you propose making a change and no 1
+
+00:24:46.080 --> 00:24:48.340
+commented, feel free to ask us again if a
+
+00:24:48.340 --> 00:24:51.080
+patch would be welcome and we will clarify.
+
+00:24:53.480 --> 00:24:54.720
+Bug reports, unfortunately,
+
+00:24:54.780 --> 00:24:56.280
+if you get no answer, I mean,
+
+00:24:56.280 --> 00:24:59.740
+we do have a limited amount of time to work
+
+00:24:59.860 --> 00:25:02.360
+on bugs. If you're looking to get started in
+
+00:25:02.360 --> 00:25:05.520
+Emacs development, this is an excellent way
+
+00:25:05.740 --> 00:25:07.320
+to start getting involved.
+
+00:25:07.480 --> 00:25:09.960
+What I'd recommend is start looking into
+
+00:25:09.960 --> 00:25:11.420
+bugs. I'd install that bug,
+
+00:25:11.420 --> 00:25:13.860
+I'd see about the mailing workflow and set
+
+00:25:13.860 --> 00:25:15.800
+that up a little bit, or not.
+
+00:25:16.160 --> 00:25:17.960
+It's up to you. You can reply to an email
+
+00:25:17.960 --> 00:25:20.160
+without setting any of that stuff up.
+
+00:25:20.600 --> 00:25:22.480
+But just help us try out your bugs,
+
+00:25:22.540 --> 00:25:24.720
+send patches, do that type of stuff.
+
+00:25:24.720 --> 00:25:26.280
+I mean, that's an excellent way,
+
+00:25:26.280 --> 00:25:27.740
+and extremely welcome.
+
+00:25:27.740 --> 00:25:30.360
+We're so happy to see when people pick up bug
+
+00:25:30.360 --> 00:25:32.500
+reports that have been left by the wayside
+
+00:25:32.640 --> 00:25:34.580
+and just fix them, send us a patch,
+
+00:25:36.040 --> 00:25:37.520
+and we can just apply it.
+
+00:25:37.920 --> 00:25:40.360
+So that's really your starting point if you
+
+00:25:40.360 --> 00:25:43.600
+want to get involved in Emacs core
+
+00:25:44.440 --> 00:25:50.580
+development. I also want to say that be aware
+
+00:25:50.580 --> 00:25:54.020
+that you know Emacs is the editor of the GNU
+
+00:25:54.280 --> 00:25:56.820
+operating system and this makes the project
+
+00:25:56.820 --> 00:25:58.700
+political a little bit whether you like it or
+
+00:25:58.700 --> 00:26:01.380
+not. Luckily the you know the politics are
+
+00:26:01.560 --> 00:26:03.400
+limited enough that we can find broad
+
+00:26:03.400 --> 00:26:05.520
+agreement on it. So we want to promote,
+
+00:26:05.780 --> 00:26:08.420
+we want to create free software.
+
+00:26:08.860 --> 00:26:10.960
+That's sort of it. That's it.
+
+00:26:11.400 --> 00:26:13.740
+And there shouldn't be too much more to it,
+
+00:26:13.740 --> 00:26:15.600
+right? We want to rid the world of
+
+00:26:15.600 --> 00:26:19.700
+proprietary software as an evil thing.
+
+00:26:19.700 --> 00:26:21.920
+Ideally, all software should be free.
+
+00:26:23.000 --> 00:26:25.160
+But these are just the goals of the free
+
+00:26:25.160 --> 00:26:27.440
+software movement. So we're very strict with
+
+00:26:27.440 --> 00:26:29.660
+some things. We don't recommend non-free
+
+00:26:30.060 --> 00:26:31.320
+proprietary software. Of course,
+
+00:26:31.320 --> 00:26:33.180
+we have no problem mentioning Microsoft
+
+00:26:33.260 --> 00:26:35.140
+Windows because everyone knows that there's
+
+00:26:35.140 --> 00:26:39.280
+this obscure operating system developed in
+
+00:26:39.280 --> 00:26:41.760
+California that some people insist on using.
+
+00:26:42.040 --> 00:26:45.000
+We use, many of us use GNU plus Linux.
+
+00:26:45.060 --> 00:26:47.380
+Actually, some core developers happen to use
+
+00:26:47.440 --> 00:26:50.820
+exactly, you know, not GNU plus Linux,
+
+00:26:50.820 --> 00:26:52.600
+but that's fine as well,
+
+00:26:52.600 --> 00:26:54.820
+right? We take a little bit of a pragmatic
+
+00:26:54.860 --> 00:26:56.840
+view, but we don't wanna do,
+
+00:26:56.840 --> 00:26:59.020
+what we don't wanna do is promote like this
+
+00:26:59.020 --> 00:27:04.780
+small, unknown piece of non-free software and
+
+00:27:04.780 --> 00:27:08.400
+sort of help the non-free software in that
+
+00:27:08.400 --> 00:27:11.620
+way. That's where we try to draw the line,
+
+00:27:12.440 --> 00:27:15.760
+you know, in just expressing just a few
+
+00:27:15.760 --> 00:27:18.060
+words. So that's 1 thing.
+
+00:27:18.200 --> 00:27:21.620
+We're, I think, very pragmatic on this point,
+
+00:27:21.620 --> 00:27:24.900
+but we do try to follow the principle.
+
+00:27:25.240 --> 00:27:27.180
+We also require copyright assignment.
+
+00:27:27.700 --> 00:27:30.040
+And I think in general,
+
+00:27:30.620 --> 00:27:34.740
+the argument is that we require a copyright
+
+00:27:34.780 --> 00:27:38.940
+assignment, because that makes it easier to
+
+00:27:39.280 --> 00:27:43.440
+defend the legal status of the GNU Emacs
+
+00:27:43.640 --> 00:27:45.920
+source code. So if there's ever a legal
+
+00:27:45.920 --> 00:27:48.280
+battle, the idea is that if it's only 1
+
+00:27:48.280 --> 00:27:50.260
+copyright holder and you have a GPL
+
+00:27:50.320 --> 00:27:54.140
+violation, i.e. Someone might change Emacs
+
+00:27:54.140 --> 00:27:55.820
+and then distribute it as proprietary
+
+00:27:56.100 --> 00:27:58.040
+software or something nasty like that,
+
+00:27:58.040 --> 00:28:00.620
+then we have an easier way of defending it in
+
+00:28:00.620 --> 00:28:02.780
+court if there is only 1 copyright holder.
+
+00:28:02.780 --> 00:28:04.840
+So we assigned copyright to the Free Software
+
+00:28:04.840 --> 00:28:09.460
+Foundation. And I think there,
+
+00:28:09.720 --> 00:28:12.600
+I mean, sometimes people oppose this for
+
+00:28:12.600 --> 00:28:13.660
+various reasons, you know,
+
+00:28:13.660 --> 00:28:15.720
+people see it as, you know,
+
+00:28:15.720 --> 00:28:16.880
+maybe some people might say,
+
+00:28:16.880 --> 00:28:17.860
+you know, it's ideological,
+
+00:28:18.040 --> 00:28:19.340
+you know, who goes, you know,
+
+00:28:19.340 --> 00:28:21.360
+the FSF goes too far with this.
+
+00:28:21.700 --> 00:28:23.860
+And, and, I mean, that's fine.
+
+00:28:23.860 --> 00:28:25.580
+You that's, that's an opinion.
+
+00:28:25.640 --> 00:28:28.320
+And the there, then other people are more
+
+00:28:28.320 --> 00:28:30.040
+practical, you know, it's just,
+
+00:28:30.040 --> 00:28:31.360
+It's a hassle, basically,
+
+00:28:31.360 --> 00:28:33.220
+we don't want to sign these papers.
+
+00:28:33.640 --> 00:28:35.580
+And I'm not really here to tell anyone that
+
+00:28:35.580 --> 00:28:37.160
+they're wrong. I've expressed my views on
+
+00:28:37.160 --> 00:28:40.780
+this in the past. But just for now,
+
+00:28:40.960 --> 00:28:43.660
+I'm just very practical for the purposes of
+
+00:28:43.660 --> 00:28:46.500
+this talk. So I signed the papers.
+
+00:28:46.580 --> 00:28:49.280
+It's Maybe it didn't take me many minutes.
+
+00:28:49.280 --> 00:28:51.900
+And in most cases, it shouldn't really.
+
+00:28:52.580 --> 00:28:55.000
+And it's something that I found worth doing,
+
+00:28:55.000 --> 00:28:58.580
+because that way I could focus on continuing
+
+00:28:58.580 --> 00:29:01.360
+to improve Emacs instead of discussing the
+
+00:29:01.360 --> 00:29:03.220
+finer points of copyright law.
+
+00:29:03.480 --> 00:29:05.280
+You could write patches and stuff,
+
+00:29:05.280 --> 00:29:06.680
+that kind of thing. So,
+
+00:29:06.680 --> 00:29:08.480
+I mean, this is something that trips people
+
+00:29:08.480 --> 00:29:11.100
+up and, you know, it's fine that people have
+
+00:29:11.320 --> 00:29:14.200
+different opinions on it and so on,
+
+00:29:14.200 --> 00:29:19.280
+but I think for now that's just something to
+
+00:29:19.280 --> 00:29:23.000
+be aware of. So that's,
+
+00:29:23.000 --> 00:29:26.120
+I think, I mean, there's much more that could
+
+00:29:26.120 --> 00:29:27.880
+be said. Ideally, I would like to have a
+
+00:29:27.880 --> 00:29:31.060
+practical part to this talk as well.
+
+00:29:32.020 --> 00:29:34.440
+But I wanted to say something about the
+
+00:29:34.440 --> 00:29:37.159
+packages in Emacs. Because as we know,
+
+00:29:37.159 --> 00:29:40.440
+I mean, Emacs is the, I can't remember what
+
+00:29:40.440 --> 00:29:41.740
+it says, it's like a visual,
+
+00:29:42.260 --> 00:29:43.780
+there's in the manual it says,
+
+00:29:43.780 --> 00:29:45.900
+oh, Emacs is an advanced text editor.
+
+00:29:46.180 --> 00:29:47.980
+It's visual, which, I mean,
+
+00:29:47.980 --> 00:29:50.280
+it's not ed, the whole Unix ed,
+
+00:29:50.280 --> 00:29:52.700
+so that's cool. It's also customizable,
+
+00:29:53.300 --> 00:29:56.180
+right? So that's always been a thing.
+
+00:29:57.800 --> 00:29:59.980
+And what makes Emacs so amazing.
+
+00:30:00.040 --> 00:30:01.820
+And some people described it as,
+
+00:30:01.920 --> 00:30:03.880
+I can't remember who said that there has been
+
+00:30:03.880 --> 00:30:09.440
+a Cambrian explosion of packages in Emacs.
+
+00:30:09.440 --> 00:30:10.440
+And I think that's true.
+
+00:30:10.440 --> 00:30:12.400
+I mean, if you look at something like Melpa,
+
+00:30:12.400 --> 00:30:13.760
+I think they have over 5,000
+
+00:30:13.940 --> 00:30:16.220
+packages now. It's like truly impressive,
+
+00:30:16.460 --> 00:30:18.760
+just an immense amount of work and immense
+
+00:30:18.760 --> 00:30:22.320
+amount of packages. And really,
+
+00:30:22.860 --> 00:30:24.340
+this shows the strength,
+
+00:30:24.340 --> 00:30:26.600
+I think, of the Emacs community,
+
+00:30:26.680 --> 00:30:28.780
+of Emacs itself as an idea.
+
+00:30:29.060 --> 00:30:31.240
+And I think it's also just tremendous work
+
+00:30:31.240 --> 00:30:33.580
+that's been done by the maintainers.
+
+00:30:33.960 --> 00:30:36.040
+And they do get a lot of recognition for
+
+00:30:36.040 --> 00:30:38.900
+that. And rightly so, in my opinion.
+
+00:30:39.620 --> 00:30:41.920
+It's done so much, I think,
+
+00:30:41.920 --> 00:30:44.260
+for our community. The other package archive
+
+00:30:44.260 --> 00:30:46.340
+that we have is GNU-ELPA.
+
+00:30:46.620 --> 00:30:49.640
+And that's been enabled since when packages
+
+00:30:49.640 --> 00:30:51.000
+first got introduced back in,
+
+00:30:51.000 --> 00:30:53.160
+I think, Emacs, was it 23?
+
+00:30:55.520 --> 00:30:59.200
+And probably, I mean, the main thing why a
+
+00:30:59.200 --> 00:31:01.860
+package goes onto GNU Elpa is,
+
+00:31:01.860 --> 00:31:04.040
+you know, it should be installable out of the
+
+00:31:04.040 --> 00:31:07.580
+box. So, I mean, that's a big benefit in a
+
+00:31:07.580 --> 00:31:10.960
+sense. It's also a requirement for GNU Alpa
+
+00:31:10.960 --> 00:31:12.240
+that the copyright, again,
+
+00:31:12.240 --> 00:31:14.540
+just as GNU Emacs, the copyright is assigned
+
+00:31:15.480 --> 00:31:17.020
+to the Free Software Foundation.
+
+00:31:17.080 --> 00:31:19.940
+And some very hugely popular packages,
+
+00:31:20.020 --> 00:31:21.420
+like YaSnippet, for example,
+
+00:31:21.420 --> 00:31:25.060
+is on GNU Alpa. And we were discussing this
+
+00:31:25.160 --> 00:31:30.040
+just 2 months back. And Joe Tavora,
+
+00:31:30.060 --> 00:31:31.780
+I can't say his name, G-O-A-O,
+
+00:31:33.280 --> 00:31:36.100
+Tavora. He made the point that he's never
+
+00:31:36.140 --> 00:31:40.280
+seen a problem in any of his packages with
+
+00:31:40.280 --> 00:31:42.100
+copyright assignment in particular.
+
+00:31:42.100 --> 00:31:44.540
+It's never been a problem to get people to be
+
+00:31:44.540 --> 00:31:46.560
+involved in the development of those packages
+
+00:31:46.560 --> 00:31:48.220
+just because of the copyright assignment
+
+00:31:49.160 --> 00:31:50.640
+requirements. So I mean,
+
+00:31:51.180 --> 00:31:53.840
+that's his perspective on that.
+
+00:31:54.320 --> 00:32:00.480
+And I think it was worth relating his
+
+00:32:00.480 --> 00:32:06.500
+experience here. So we also have this new
+
+00:32:06.500 --> 00:32:08.500
+package archive called non-GNU-alpha,
+
+00:32:08.920 --> 00:32:12.880
+which is now enabled by default as well.
+
+00:32:12.920 --> 00:32:14.440
+I think for practical purposes,
+
+00:32:14.540 --> 00:32:16.880
+you could get into it a little bit more,
+
+00:32:16.960 --> 00:32:18.840
+you know, why we created non-NUELPA,
+
+00:32:19.940 --> 00:32:22.320
+and perhaps that's something we can discuss
+
+00:32:23.360 --> 00:32:26.240
+in the Q&A section. For practical purposes,
+
+00:32:26.380 --> 00:32:28.280
+the main thing to be aware of is,
+
+00:32:28.280 --> 00:32:30.980
+yes, we don't promote non-free software on
+
+00:32:30.980 --> 00:32:36.780
+there, And we also don't have the copyright
+
+00:32:36.780 --> 00:32:39.060
+assignment requirement.
+
+00:32:41.400 --> 00:32:43.820
+I think this is probably for new packages.
+
+00:32:43.940 --> 00:32:48.180
+It's generally better if they go to GNU Elpa,
+
+00:32:48.180 --> 00:32:51.220
+if there is any type of idea or ambition
+
+00:32:51.280 --> 00:32:53.460
+that, you know, at some point it would be
+
+00:32:53.460 --> 00:32:56.740
+good or it might be good to eventually have
+
+00:32:56.740 --> 00:32:58.900
+some type of functionality like this shipped
+
+00:32:58.900 --> 00:33:01.200
+with Emacs itself. So I think this is
+
+00:33:01.200 --> 00:33:04.020
+something that perhaps package authors could
+
+00:33:04.020 --> 00:33:07.340
+also be aware of, that occasionally we do
+
+00:33:07.340 --> 00:33:09.780
+bring in functionality from GNU Elpa into
+
+00:33:09.780 --> 00:33:12.180
+core Emacs because we feel that it should be
+
+00:33:12.440 --> 00:33:15.560
+better integrated with Emacs itself.
+
+00:33:16.420 --> 00:33:18.480
+So if I could give any type of
+
+00:33:18.480 --> 00:33:19.400
+recommendation, of course,
+
+00:33:19.400 --> 00:33:22.120
+you do. These are your packages,
+
+00:33:22.120 --> 00:33:25.520
+right? In an ideal world,
+
+00:33:25.520 --> 00:33:28.680
+we would only use this for legacy packages
+
+00:33:28.680 --> 00:33:30.240
+where people contributed in the past,
+
+00:33:30.240 --> 00:33:32.120
+but you didn't worry about the copyright
+
+00:33:32.120 --> 00:33:34.200
+assignment. But where possible,
+
+00:33:34.200 --> 00:33:37.480
+I think there is benefit in putting it on GNU
+
+00:33:37.540 --> 00:33:42.900
+Elpa. And I wanted to end a little bit on a
+
+00:33:42.900 --> 00:33:45.140
+more, you know, the more opinionated perhaps
+
+00:33:45.380 --> 00:33:47.260
+part of my talk and not just talk about
+
+00:33:47.260 --> 00:33:49.160
+processes. I see that I'm running out of
+
+00:33:49.160 --> 00:33:51.700
+time. So I will say Emacs is hackable.
+
+00:33:51.760 --> 00:33:54.520
+And I think that's a blessing and a curse.
+
+00:33:54.520 --> 00:33:56.340
+And if you think about something like,
+
+00:33:59.060 --> 00:34:01.100
+the types of choices that you can make,
+
+00:34:01.100 --> 00:34:03.040
+perhaps when you implement something,
+
+00:34:03.160 --> 00:34:06.680
+There are choices, different choices between
+
+00:34:06.680 --> 00:34:07.740
+something like common list,
+
+00:34:07.740 --> 00:34:09.440
+which is like bigger, more batteries
+
+00:34:09.440 --> 00:34:11.320
+included, and something like scheme,
+
+00:34:11.320 --> 00:34:12.239
+which is more minimal.
+
+00:34:12.239 --> 00:34:13.679
+And I think we have some of those,
+
+00:34:13.679 --> 00:34:16.280
+you know, this kind of tension also in the
+
+00:34:16.280 --> 00:34:18.159
+Emacs itself. What should be in Emacs core?
+
+00:34:18.159 --> 00:34:19.699
+Should we have a lean Emacs core?
+
+00:34:19.699 --> 00:34:21.800
+Should we have more stuff in Emacs core?
+
+00:34:22.360 --> 00:34:26.320
+And I think these are good discussions to
+
+00:34:26.320 --> 00:34:29.380
+have. And there are various challenges that
+
+00:34:29.380 --> 00:34:31.940
+are associated with each of those choices.
+
+00:34:32.540 --> 00:34:35.320
+I think what will never change is that Emacs
+
+00:34:35.320 --> 00:34:37.280
+is hackable. Emacs is customizable.
+
+00:34:37.500 --> 00:34:38.800
+This is the key strength.
+
+00:34:38.860 --> 00:34:40.960
+This is why we love and use Emacs.
+
+00:34:40.960 --> 00:34:41.820
+I think fundamentally,
+
+00:34:42.380 --> 00:34:44.280
+whether you do it a lot or not,
+
+00:34:44.380 --> 00:34:47.260
+this is what at core is bringing you that
+
+00:34:47.320 --> 00:34:49.179
+amazing user experience.
+
+00:34:50.739 --> 00:34:53.199
+However, the flip side of that sometimes is
+
+00:34:53.199 --> 00:34:56.280
+that it's so easy to hack Emacs so that we
+
+00:34:56.280 --> 00:34:58.520
+hack around bugs instead of fixing them.
+
+00:34:58.520 --> 00:35:00.540
+We do some tweak and our customers say,
+
+00:35:00.540 --> 00:35:01.720
+okay, this is a little bit broken,
+
+00:35:01.720 --> 00:35:03.560
+Let me just fix it. I'll put an advice on
+
+00:35:03.560 --> 00:35:05.700
+this function. I'll do this customization.
+
+00:35:06.500 --> 00:35:09.040
+Or we accept limitations in Emacs core.
+
+00:35:09.340 --> 00:35:12.100
+And I think it's fine.
+
+00:35:12.380 --> 00:35:13.760
+I mean, this will never change.
+
+00:35:13.760 --> 00:35:16.560
+That will always be core to what Emacs is,
+
+00:35:16.560 --> 00:35:20.140
+right? However, I think that the flip side of
+
+00:35:20.140 --> 00:35:22.500
+that is that I think sometimes we could be
+
+00:35:22.500 --> 00:35:26.760
+better at just taking those few extra steps
+
+00:35:26.820 --> 00:35:29.260
+to also make Emacs better itself and solve
+
+00:35:29.260 --> 00:35:31.680
+this for all users. And I think if we can
+
+00:35:31.680 --> 00:35:33.680
+build a little bit more of a culture like
+
+00:35:33.680 --> 00:35:35.460
+that, I mean, we already have that culture to
+
+00:35:35.460 --> 00:35:37.200
+a large extent, don't get me wrong,
+
+00:35:37.200 --> 00:35:39.620
+we do, but if we can get a little bit more of
+
+00:35:39.620 --> 00:35:41.320
+that culture, let's get that into core,
+
+00:35:41.320 --> 00:35:43.760
+let's get that problem fixed,
+
+00:35:43.980 --> 00:35:46.140
+that frustration. I can tell you that,
+
+00:35:47.040 --> 00:35:48.940
+I just started a new assignment at work,
+
+00:35:48.940 --> 00:35:51.420
+I already told you, so I'm going to write a
+
+00:35:51.420 --> 00:35:54.140
+lot of Python, okay? So I need to keep track
+
+00:35:54.140 --> 00:35:55.740
+of something called virtual environments,
+
+00:35:56.040 --> 00:35:58.260
+and that's just a way to install these
+
+00:35:58.440 --> 00:36:01.640
+dependencies just locally per directory or
+
+00:36:01.640 --> 00:36:03.420
+per repository kind of thing.
+
+00:36:03.900 --> 00:36:05.740
+And I've used various packages for that.
+
+00:36:05.740 --> 00:36:07.860
+There are like 4 packages,
+
+00:36:07.940 --> 00:36:10.560
+5 packages, maybe. And 1 is called VM,
+
+00:36:10.560 --> 00:36:11.740
+and 1 is called VirtualM,
+
+00:36:11.820 --> 00:36:13.640
+and 1 is called Python-VM.
+
+00:36:15.420 --> 00:36:16.980
+And now I'm using, you know,
+
+00:36:16.980 --> 00:36:18.100
+I'm using a different 1.
+
+00:36:18.100 --> 00:36:19.620
+And it's just a little bit,
+
+00:36:20.080 --> 00:36:22.160
+why doesn't this work out of the box in
+
+00:36:22.160 --> 00:36:25.680
+Emacs? Why? I don't think there's a really
+
+00:36:25.680 --> 00:36:28.640
+good fundamental good reason why something
+
+00:36:28.640 --> 00:36:30.460
+like that doesn't work in Emacs.
+
+00:36:30.480 --> 00:36:31.980
+So I think that's really,
+
+00:36:32.220 --> 00:36:35.220
+I mean, I'm sure there are other things like
+
+00:36:35.220 --> 00:36:37.280
+that, other fundamental features.
+
+00:36:37.740 --> 00:36:39.920
+Why is it that for the last 20 years,
+
+00:36:39.920 --> 00:36:43.740
+we've shipped Emacs with no PHP support out
+
+00:36:43.740 --> 00:36:47.660
+of the box? I mean, I'm not a PHP programmer.
+
+00:36:47.660 --> 00:36:51.020
+I don't really have a lot of love for PHP,
+
+00:36:51.020 --> 00:36:56.020
+let's say. To me, it's a very funny-looking
+
+00:36:57.180 --> 00:37:00.060
+language, but okay, still it's been very
+
+00:37:00.060 --> 00:37:02.060
+popular. Why haven't we supported it?
+
+00:37:02.120 --> 00:37:03.280
+I mean, it's just strange.
+
+00:37:03.280 --> 00:37:05.040
+You install Emacs on some machine,
+
+00:37:05.220 --> 00:37:07.260
+you open a PHP file, you get fundamental
+
+00:37:07.280 --> 00:37:09.160
+mode. It's not the best user experience,
+
+00:37:09.160 --> 00:37:12.600
+in my opinion. So I think there are some
+
+00:37:12.600 --> 00:37:15.480
+things where we really could do a little bit
+
+00:37:15.480 --> 00:37:20.200
+better. And I'm seeing this all the time.
+
+00:37:20.200 --> 00:37:22.500
+Just this week, this new assignment was
+
+00:37:22.500 --> 00:37:24.640
+interesting. There was this Emacs user.
+
+00:37:24.720 --> 00:37:26.980
+Turns out we have the exact same hack in both
+
+00:37:26.980 --> 00:37:29.860
+of our init files. So we had created the
+
+00:37:29.860 --> 00:37:32.140
+exact same mode for DIRED,
+
+00:37:32.140 --> 00:37:33.920
+actually, to hide dot files.
+
+00:37:33.920 --> 00:37:36.720
+You know, dot something is supposed to be
+
+00:37:36.720 --> 00:37:39.440
+hidden on a Unix system.
+
+00:37:40.240 --> 00:37:43.940
+So we had DERED hide dot files mode to just
+
+00:37:43.940 --> 00:37:47.100
+hide them. And why isn't that in DERED?
+
+00:37:47.100 --> 00:37:48.420
+Or should it be in DERED?
+
+00:37:48.480 --> 00:37:50.860
+Should it be a package on the new Elpa?
+
+00:37:51.000 --> 00:37:53.000
+Where should it be? Why is it just local
+
+00:37:53.000 --> 00:37:54.680
+hack? Should it be on a wiki somewhere?
+
+00:37:54.680 --> 00:37:56.740
+I mean, sometimes that's the correct answer.
+
+00:37:56.980 --> 00:37:59.060
+Sometimes the correct answer is,
+
+00:37:59.060 --> 00:38:00.420
+yes, it should be a package.
+
+00:38:00.780 --> 00:38:02.360
+Sometimes the correct answer is,
+
+00:38:02.360 --> 00:38:04.140
+yes, it should really be in core.
+
+00:38:04.280 --> 00:38:06.420
+So what I want to promote is more like,
+
+00:38:06.480 --> 00:38:08.900
+let's just take a step back and just ask
+
+00:38:08.900 --> 00:38:11.180
+yourself, what's the best solution if we look
+
+00:38:11.180 --> 00:38:12.240
+at the overall picture?
+
+00:38:12.240 --> 00:38:13.920
+Should I hack this into my configuration?
+
+00:38:14.600 --> 00:38:16.840
+In many cases, yes, that's the right thing to
+
+00:38:16.840 --> 00:38:19.540
+do. We don't want to proliferate just random
+
+00:38:19.840 --> 00:38:22.160
+solutions all over Emacs for no reason.
+
+00:38:22.540 --> 00:38:24.760
+But sometimes we want to fix it once and for
+
+00:38:24.760 --> 00:38:27.700
+all. We want to do that in core.
+
+00:38:27.880 --> 00:38:30.200
+So you could send stuff like that to us as
+
+00:38:30.200 --> 00:38:31.480
+patches or as packages.
+
+00:38:31.560 --> 00:38:34.340
+And we can discuss a little bit about where
+
+00:38:34.340 --> 00:38:36.420
+should we solve this? What's the right level
+
+00:38:37.280 --> 00:38:41.100
+of abstraction? I'm seeing that I'm running
+
+00:38:41.100 --> 00:38:43.620
+out of time. I had an Emacs wish list.
+
+00:38:43.620 --> 00:38:46.880
+Maybe we can take more of that in the Q&A.
+
+00:38:47.170 --> 00:38:49.226
+But I want to say, like,
+
+00:38:49.226 --> 00:38:50.460
+in VS Code, you just start VS Code.
+
+00:38:50.460 --> 00:38:51.660
+You open a Python file,
+
+00:38:51.660 --> 00:38:53.040
+and you get, like, hey,
+
+00:38:53.040 --> 00:38:54.560
+are you trying to use Python?
+
+00:38:54.840 --> 00:38:56.280
+Click here, install Python.
+
+00:38:56.280 --> 00:38:58.700
+You get all the nice things out of the box.
+
+00:38:59.180 --> 00:39:01.560
+And my argument is, why can't we have more of
+
+00:39:01.560 --> 00:39:03.880
+that in Emacs? I don't think it's necessarily
+
+00:39:04.000 --> 00:39:06.360
+hard, but it does take a little bit of work.
+
+00:39:06.960 --> 00:39:09.060
+The challenges here are more social,
+
+00:39:09.060 --> 00:39:10.880
+I think, than technical.
+
+00:39:10.900 --> 00:39:12.780
+And I think it's worth doing,
+
+00:39:12.780 --> 00:39:14.060
+because it's not just Python.
+
+00:39:14.060 --> 00:39:16.640
+It's just There are always these small things
+
+00:39:16.640 --> 00:39:18.900
+where it just really should work,
+
+00:39:18.900 --> 00:39:20.900
+and that would be a much better experience.
+
+00:39:20.900 --> 00:39:23.360
+And then you could customize not that thing
+
+00:39:23.360 --> 00:39:24.600
+that should just work,
+
+00:39:24.640 --> 00:39:27.140
+but you could customize more fun and
+
+00:39:27.140 --> 00:39:29.620
+exploratory things instead of people
+
+00:39:29.620 --> 00:39:31.720
+reinventing the wheel over and over again.
+
+00:39:31.720 --> 00:39:33.420
+So I'm very excited about what's happening in
+
+00:39:33.420 --> 00:39:35.280
+Emacs. I think we should be proud of what
+
+00:39:35.280 --> 00:39:37.360
+we've accomplished. It's so many things to
+
+00:39:37.360 --> 00:39:38.360
+many different people,
+
+00:39:38.360 --> 00:39:39.660
+an environment for hacking,
+
+00:39:40.040 --> 00:39:41.620
+just a productivity system.
+
+00:39:41.880 --> 00:39:44.020
+Other sees us as a different way of looking
+
+00:39:44.020 --> 00:39:45.360
+at computing, you know,
+
+00:39:45.360 --> 00:39:47.440
+the embodiment of the ideal of the Lisp
+
+00:39:47.440 --> 00:39:49.280
+machine if you want to talk big words and
+
+00:39:49.280 --> 00:39:50.660
+stuff like that. And of course,
+
+00:39:50.660 --> 00:39:53.320
+Emacs are all those things and so many more.
+
+00:39:53.320 --> 00:39:55.440
+And that's what makes Emacs so amazing.
+
+00:39:56.280 --> 00:40:00.780
+And in some sense, we should be care that
+
+00:40:00.780 --> 00:40:03.040
+people are satisfied with using lesser text
+
+00:40:03.040 --> 00:40:05.600
+editors. How could they be happy running
+
+00:40:05.600 --> 00:40:07.440
+that? I mean, I'm sure it's fine,
+
+00:40:07.440 --> 00:40:09.800
+but it sure as hell isn't Emacs.
+
+00:40:09.800 --> 00:40:12.340
+So don't we owe it to the world and to them
+
+00:40:12.340 --> 00:40:14.440
+and to ourselves to make a great Emacs.
+
+00:40:14.760 --> 00:40:16.120
+That will be my ending words.
+
+00:40:16.120 --> 00:40:18.020
+And I hope to see you all in the Q&A.
+
+00:40:18.120 --> 00:40:22.560
+Thank you all. And thank you so much,
+
+00:40:22.560 --> 00:40:24.360
+Stefan. That was a wonderful presentation.
+
+00:40:24.800 --> 00:40:27.280
+And I just want to give you the opportunity.
+
+00:40:27.340 --> 00:40:29.940
+You said that you perhaps had,
+
+00:40:30.480 --> 00:40:31.400
+Not the practical stuff,
+
+00:40:31.400 --> 00:40:33.280
+but you wanted to do a demo or something like
+
+00:40:33.280 --> 00:40:34.780
+this? What did you mention exactly?
+
+00:40:36.180 --> 00:40:38.460
+Yeah, we didn't have time really.
+
+00:40:38.740 --> 00:40:42.040
+Yes, I'm not sure. I didn't prepare anything
+
+00:40:42.040 --> 00:40:43.580
+so that we can do it live.
+
+00:40:43.620 --> 00:40:44.800
+But maybe for next time,
+
+00:40:44.800 --> 00:40:48.620
+I will do a demo. Don't hold me to it.
+
+00:40:49.920 --> 00:40:51.100
+Or someone else could.
+
+00:40:51.100 --> 00:40:52.540
+That would be really amazing.
+
+00:40:53.260 --> 00:40:54.020
+Right. Well, thank you,
+
+00:40:54.020 --> 00:40:56.820
+Stéphane. You've been already into so much
+
+00:40:56.820 --> 00:41:00.560
+detail of so many... So much of the intricacy
+
+00:41:01.780 --> 00:41:05.100
+of the maintenance. And as someone who's been
+
+00:41:05.460 --> 00:41:07.980
+95% of the time developing for Melpa,
+
+00:41:08.260 --> 00:41:11.040
+I feel like this talk was very geared to a
+
+00:41:11.040 --> 00:41:13.980
+lot of us who tend to experiment in this
+
+00:41:13.980 --> 00:41:16.400
+Cambrian stage of Emacs evolution,
+
+00:41:16.400 --> 00:41:19.620
+where we get to deploy a lot of creativity
+
+00:41:20.600 --> 00:41:24.020
+whilst also feeling pretty agile in a way we
+
+00:41:24.020 --> 00:41:25.580
+come up with solutions to problems.
+
+00:41:25.640 --> 00:41:29.240
+But you've won me over with your discussion
+
+00:41:29.240 --> 00:41:31.360
+about potentially moving some of this stuff
+
+00:41:31.360 --> 00:41:33.220
+to core. And I think this particularly
+
+00:41:33.280 --> 00:41:36.140
+resonated at the end with this tension that
+
+00:41:36.140 --> 00:41:38.660
+you feel about problems that you encounter.
+
+00:41:39.160 --> 00:41:40.760
+Do you fix them in Melpa?
+
+00:41:40.760 --> 00:41:42.040
+Do you fix them in core?
+
+00:41:42.040 --> 00:41:43.780
+Is it not something that is supposed to be an
+
+00:41:43.780 --> 00:41:46.560
+option? I love this tension and it's
+
+00:41:46.560 --> 00:41:48.040
+something that we've been exploring for the
+
+00:41:48.040 --> 00:41:49.780
+last 3 edition of Emacs Cons.
+
+00:41:49.780 --> 00:41:52.480
+It's really what is to be the interaction
+
+00:41:52.600 --> 00:41:55.660
+between this pool of very clever developers
+
+00:41:55.680 --> 00:41:58.100
+who are on Melpa but who are perhaps a little
+
+00:41:58.100 --> 00:42:00.880
+bit afraid of joining Core and the wonderful
+
+00:42:00.920 --> 00:42:02.860
+job that you do that, yes,
+
+00:42:02.980 --> 00:42:05.640
+seems archaic from the outside,
+
+00:42:05.860 --> 00:42:07.840
+but as you've been at length today in your
+
+00:42:07.840 --> 00:42:09.480
+presentation, is actually just a better way
+
+00:42:09.480 --> 00:42:11.780
+to work, a very pragmatic way to get a lot of
+
+00:42:11.780 --> 00:42:13.320
+work done. So, thank you so much for your
+
+00:42:13.320 --> 00:42:15.240
+presentation. Thank you,
+
+00:42:15.240 --> 00:42:20.740
+Leo. So, we have about 12 minutes now to go
+
+00:42:20.740 --> 00:42:22.950
+through as many questions as possible.
+
+00:42:22.950 --> 00:42:26.000
+You have obviously had a lot of questions
+
+00:42:26.000 --> 00:42:27.180
+throughout your presentation.
+
+00:42:27.660 --> 00:42:28.940
+Do you have access to the pad,
+
+00:42:28.940 --> 00:42:30.400
+or do you want me to share the question and
+
+00:42:30.400 --> 00:42:32.660
+feed them to you? Yes,
+
+00:42:32.660 --> 00:42:34.200
+could you start with sharing them?
+
+00:42:34.200 --> 00:42:36.000
+I'll see if I can get it on my screen.
+
+00:42:36.280 --> 00:42:39.640
+Sure, I'll do that. Please let me know if my
+
+00:42:39.720 --> 00:42:42.980
+microphone is clipping because my OBS setup
+
+00:42:42.980 --> 00:42:44.440
+sometimes is a little bit janky.
+
+00:42:44.440 --> 00:42:46.080
+But I'm going to try to read the questions
+
+00:42:46.080 --> 00:42:47.780
+for now. It's tipping,
+
+00:42:48.080 --> 00:42:51.980
+I can hear you okay. Okay,
+
+00:42:51.980 --> 00:42:54.400
+so bear with the clicking,
+
+00:42:54.400 --> 00:42:56.480
+we'll switch as soon as possible to Stefan
+
+00:42:56.480 --> 00:42:58.080
+reading the question, but I'll read the first
+
+00:42:58.080 --> 00:43:02.820
+1. Can you tell us some about your,
+
+00:43:02.860 --> 00:43:04.340
+can you tell us some more I assume,
+
+00:43:04.340 --> 00:43:06.160
+about your background with Emacs development
+
+00:43:06.160 --> 00:43:07.500
+and programming in general,
+
+00:43:07.580 --> 00:43:09.220
+your professional work possibly?
+
+00:43:11.400 --> 00:43:15.440
+Yeah, sure. Okay, I studied computer science
+
+00:43:15.440 --> 00:43:19.960
+at university. I started programming on a
+
+00:43:19.960 --> 00:43:23.960
+Commodore 64. I started with BASIC and then I
+
+00:43:23.960 --> 00:43:26.880
+did a couple of versions of BASIC as a kid.
+
+00:43:27.380 --> 00:43:31.540
+But then really things took off when I
+
+00:43:31.540 --> 00:43:34.240
+started using GNU Linux.
+
+00:43:34.300 --> 00:43:35.580
+I can't remember which year,
+
+00:43:35.580 --> 00:43:37.440
+maybe it was early 2000,
+
+00:43:38.480 --> 00:43:39.740
+something like that, late.
+
+00:43:39.840 --> 00:43:42.080
+No, it must've been before that actually,
+
+00:43:42.380 --> 00:43:44.120
+because I remember I was 14.
+
+00:43:44.340 --> 00:43:46.020
+Yeah, okay, so let's say 1999,
+
+00:43:46.500 --> 00:43:48.720
+1998, somewhere there around.
+
+00:43:48.840 --> 00:43:50.200
+Then I started with Perl,
+
+00:43:50.200 --> 00:43:52.620
+and I did Perl for a good long while.
+
+00:43:52.700 --> 00:43:55.460
+I learned C++, I learned C,
+
+00:43:55.680 --> 00:43:56.960
+I did all kinds of stuff,
+
+00:43:56.960 --> 00:43:58.640
+and then I went to university,
+
+00:43:59.440 --> 00:44:01.700
+computer science, and I've been working,
+
+00:44:01.700 --> 00:44:03.980
+you know, in various roles.
+
+00:44:04.160 --> 00:44:06.300
+Right now, I'm coding Python.
+
+00:44:06.980 --> 00:44:09.640
+Up until last Friday, I was writing firmware
+
+00:44:09.940 --> 00:44:12.319
+in C for a small microcontroller,
+
+00:44:12.440 --> 00:44:15.600
+which is pretty different than writing
+
+00:44:15.600 --> 00:44:17.060
+Python, that's for sure.
+
+00:44:17.220 --> 00:44:19.600
+So yeah, so that's a little bit about me.
+
+00:44:19.600 --> 00:44:21.860
+I got interested in free software,
+
+00:44:22.300 --> 00:44:24.720
+you know, also at a very young age.
+
+00:44:24.720 --> 00:44:26.320
+So, I mean, I've been following these,
+
+00:44:26.320 --> 00:44:29.120
+you know, ideological discussions and
+
+00:44:29.120 --> 00:44:31.560
+debates, read all this stuff by Richard
+
+00:44:31.560 --> 00:44:33.940
+Stallman and so on and so forth.
+
+00:44:33.940 --> 00:44:37.760
+But yeah, that's it. Great,
+
+00:44:37.760 --> 00:44:41.120
+thank you. I'll move on to the next question.
+
+00:44:41.120 --> 00:44:42.980
+You'll have to listen to me because if I
+
+00:44:42.980 --> 00:44:45.020
+start sharing my screen again,
+
+00:44:45.020 --> 00:44:46.320
+we're going to get some clicks.
+
+00:44:48.140 --> 00:44:50.680
+So the question. Do you think that 1 day
+
+00:44:50.680 --> 00:44:53.930
+there will be a native I'll start again,
+
+00:44:53.930 --> 00:44:54.079
+sorry. Do you think that 1 day there will be
+
+00:44:54.079 --> 00:44:54.440
+a native... I'll start again,
+
+00:44:54.440 --> 00:44:56.480
+sorry. Do you think that 1 day there will be
+
+00:44:56.480 --> 00:44:59.020
+a native graphical web browser in Emacs or is
+
+00:44:59.020 --> 00:45:00.540
+it kind of against its philosophy and
+
+00:45:00.540 --> 00:45:03.820
+architecture? So will we stick just with EWW
+
+00:45:04.200 --> 00:45:06.800
+and EAF or similar workaround tricks?
+
+00:45:08.640 --> 00:45:11.200
+So if, I don't know if people have seen,
+
+00:45:11.200 --> 00:45:12.740
+there is a talk by, I think,
+
+00:45:13.440 --> 00:45:15.080
+Perry Metzger, is that the name?
+
+00:45:15.080 --> 00:45:16.800
+Sorry if I got the name wrong.
+
+00:45:17.080 --> 00:45:18.360
+Perry Metzger, I think.
+
+00:45:18.720 --> 00:45:20.800
+It's like, he marks a text editor for the
+
+00:45:20.800 --> 00:45:22.640
+next 40 years. He makes an excellent point
+
+00:45:22.640 --> 00:45:24.720
+there that 1 of the things that we need to do
+
+00:45:24.720 --> 00:45:27.840
+is really get a proper HTML rendering in
+
+00:45:27.840 --> 00:45:30.260
+Emacs. It's like a dream at this point.
+
+00:45:30.260 --> 00:45:32.200
+No 1 is actively working on something like
+
+00:45:32.200 --> 00:45:34.240
+that. I think that, you know,
+
+00:45:34.240 --> 00:45:36.380
+there, first of all, you'd need to rewrite
+
+00:45:36.380 --> 00:45:39.520
+the display engine. So that's a big job.
+
+00:45:39.920 --> 00:45:41.140
+It is. I'm not saying,
+
+00:45:41.140 --> 00:45:42.540
+you know, it can't be done,
+
+00:45:43.040 --> 00:45:44.660
+but you need to start there.
+
+00:45:44.660 --> 00:45:47.560
+Right? Second of all, you need to think
+
+00:45:47.560 --> 00:45:50.460
+about, you know, with all the Emacs Lisp code
+
+00:45:50.460 --> 00:45:52.090
+out there, is really assuming,
+
+00:45:52.090 --> 00:45:54.960
+you know, 1 paradigm, which is that you have
+
+00:45:54.960 --> 00:45:57.720
+a square, and basically you have columns and
+
+00:45:57.720 --> 00:45:59.760
+you have rows, and everything is in there,
+
+00:45:59.760 --> 00:46:02.360
+even images, is basically in a column,
+
+00:46:02.540 --> 00:46:04.740
+you know, in a column on a row somewhere.
+
+00:46:05.380 --> 00:46:07.360
+Whereas, you know, when you just start doing
+
+00:46:07.360 --> 00:46:09.780
+the more web stuff and web rendering,
+
+00:46:10.120 --> 00:46:12.020
+you already have like a seaplane.
+
+00:46:12.040 --> 00:46:14.500
+You have different types of geometries that
+
+00:46:14.500 --> 00:46:16.880
+are possible. And what does it mean to go to
+
+00:46:16.880 --> 00:46:19.370
+the logical next line in that kind of sense?
+
+00:46:19.370 --> 00:46:21.420
+I mean these types of things I'm not saying
+
+00:46:21.420 --> 00:46:23.440
+it can't be done. I'm saying there are there
+
+00:46:23.440 --> 00:46:27.440
+are definitely some challenges there It would
+
+00:46:27.440 --> 00:46:30.280
+be amazing I mean, but we need someone with
+
+00:46:30.280 --> 00:46:33.020
+you know, the inclination and talent I think
+
+00:46:33.320 --> 00:46:37.680
+to work on that's a job posting if I've ever
+
+00:46:37.680 --> 00:46:40.200
+had 1. So good luck to whoever's willing to
+
+00:46:40.200 --> 00:46:42.100
+apply for this 1. I think it's a tough 1.
+
+00:46:43.180 --> 00:46:46.440
+It is, yes. Go on. Okay,
+
+00:46:46.560 --> 00:46:48.040
+do you happen to have the questions in front
+
+00:46:48.040 --> 00:46:50.320
+of you? Can I just read them to you so that
+
+00:46:50.320 --> 00:46:52.660
+you can also have a feedback in front of you?
+
+00:46:54.780 --> 00:46:56.680
+Yes, I have the pad here.
+
+00:46:57.260 --> 00:46:58.860
+Okay, cool. So I'll read the next question
+
+00:46:58.860 --> 00:47:00.260
+and this way I don't have to worry too much
+
+00:47:00.260 --> 00:47:02.320
+about me butchering every word in the
+
+00:47:02.320 --> 00:47:04.540
+sentence. So, Emacs development and
+
+00:47:04.540 --> 00:47:06.460
+communication still is very much focused on
+
+00:47:06.460 --> 00:47:08.640
+email mailing lists. I like this,
+
+00:47:08.640 --> 00:47:10.380
+but what do you think about introducing other
+
+00:47:10.380 --> 00:47:12.320
+channels for talking to users,
+
+00:47:12.440 --> 00:47:15.140
+like the Emacs project community could set up
+
+00:47:15.140 --> 00:47:17.120
+a master on instance of its own,
+
+00:47:17.120 --> 00:47:20.280
+for instance? I think from the point of view
+
+00:47:20.280 --> 00:47:21.760
+of the Emacs core team,
+
+00:47:21.760 --> 00:47:23.860
+we don't really have a lot of resources or
+
+00:47:23.860 --> 00:47:25.960
+people inclined to be working on stuff like
+
+00:47:25.960 --> 00:47:27.880
+that. But I mean, there is so much going on.
+
+00:47:27.880 --> 00:47:29.360
+Emacs is a very, you know,
+
+00:47:30.420 --> 00:47:32.580
+It's a big community, frankly,
+
+00:47:32.580 --> 00:47:34.500
+right? So people working on emacs.com,
+
+00:47:34.760 --> 00:47:37.400
+there are people in the IRC channel,
+
+00:47:37.500 --> 00:47:39.200
+the emacs IRC channel,
+
+00:47:39.400 --> 00:47:40.820
+there's the emacs subreddit.
+
+00:47:40.960 --> 00:47:43.280
+And I mean, people are doing an incredible
+
+00:47:43.380 --> 00:47:45.480
+job. And I think if people wanna do more
+
+00:47:45.480 --> 00:47:46.400
+stuff like that, I mean,
+
+00:47:46.400 --> 00:47:48.840
+Don't wait for Argo, just go for it.
+
+00:47:52.000 --> 00:47:54.340
+Great. Moving on to the next question.
+
+00:47:54.340 --> 00:47:56.520
+Sorry, I'm not commenting anymore because we
+
+00:47:56.520 --> 00:47:58.180
+have so many questions and I'd love for you
+
+00:47:58.180 --> 00:48:00.260
+to answer as many people as possible because
+
+00:48:00.260 --> 00:48:02.540
+we have about 6 minutes technically,
+
+00:48:02.640 --> 00:48:04.820
+but we can go perhaps a little bit over.
+
+00:48:05.080 --> 00:48:06.220
+If you have the time, Stefan,
+
+00:48:06.220 --> 00:48:08.680
+though. Yeah. Okay, great.
+
+00:48:09.340 --> 00:48:11.140
+What are some features or packages you'd like
+
+00:48:11.140 --> 00:48:12.540
+to see developed by the community?
+
+00:48:12.560 --> 00:48:15.560
+We've already talked about the native HTTP
+
+00:48:15.920 --> 00:48:17.620
+display, but do you have any others?
+
+00:48:19.540 --> 00:48:22.080
+So, I mean, developed by the community,
+
+00:48:22.360 --> 00:48:23.240
+it depends what you mean.
+
+00:48:23.240 --> 00:48:27.720
+So do you mean sending stuff that people
+
+00:48:27.720 --> 00:48:29.720
+could be working on in general?
+
+00:48:30.480 --> 00:48:33.320
+I think for now, like let's say the roadmap,
+
+00:48:33.420 --> 00:48:35.140
+I'll just give some of the things that I
+
+00:48:35.140 --> 00:48:36.940
+think should happen right now and that I
+
+00:48:36.940 --> 00:48:39.060
+would love for people to send patches for.
+
+00:48:39.060 --> 00:48:41.120
+That's what I'm gonna be answering because
+
+00:48:41.120 --> 00:48:42.860
+that's what I think I can answer.
+
+00:48:43.280 --> 00:48:45.220
+Tree-sitter is a new thing,
+
+00:48:45.280 --> 00:48:48.620
+right? Improving and working on new modes
+
+00:48:48.860 --> 00:48:50.040
+for, you know, TreeSitter,
+
+00:48:50.200 --> 00:48:52.860
+it's not very hard. I think many people get
+
+00:48:52.900 --> 00:48:55.560
+into it and make sure to integrate them in
+
+00:48:55.560 --> 00:48:57.540
+Emacs core. I think that would be,
+
+00:48:58.140 --> 00:49:00.140
+I mean, on my wishlist.
+
+00:49:00.140 --> 00:49:01.960
+The other thing that is that we've asked for
+
+00:49:01.960 --> 00:49:03.740
+someone perhaps with a little bit more
+
+00:49:03.740 --> 00:49:05.940
+experience, I think, but working on
+
+00:49:05.940 --> 00:49:09.080
+refactoring capabilities in Emacs and a more
+
+00:49:09.080 --> 00:49:11.320
+general framework, I think,
+
+00:49:11.320 --> 00:49:13.680
+for that. There are probably many more ideas
+
+00:49:13.780 --> 00:49:15.300
+that I could give people,
+
+00:49:15.300 --> 00:49:17.720
+but those would be the 2 big ones,
+
+00:49:17.720 --> 00:49:20.140
+I think, that are also very uncontroversial.
+
+00:49:22.360 --> 00:49:23.960
+It's funny because for me,
+
+00:49:24.400 --> 00:49:26.760
+I don't think refactoring would count as a
+
+00:49:26.760 --> 00:49:29.760
+feature, but it's so vital to allowing
+
+00:49:30.360 --> 00:49:31.780
+further features to be developed.
+
+00:49:31.780 --> 00:49:34.160
+Otherwise, I remember the way Org Mode used
+
+00:49:34.160 --> 00:49:36.300
+to be before we had Org Element and stuff
+
+00:49:36.300 --> 00:49:38.940
+like this. It was really complicated to write
+
+00:49:38.940 --> 00:49:41.200
+any kind of parsing stuff for it.
+
+00:49:41.200 --> 00:49:42.340
+And now that we've got it,
+
+00:49:42.340 --> 00:49:44.080
+it just opened up a world of possibility
+
+00:49:44.180 --> 00:49:46.160
+where parsing an Org Mode file is just made
+
+00:49:46.160 --> 00:49:48.280
+so much easier. So I think that's a wonderful
+
+00:49:48.280 --> 00:49:49.620
+answer because it goes,
+
+00:49:49.760 --> 00:49:52.080
+it's multi-layered as you would expect from
+
+00:49:52.080 --> 00:49:53.920
+something that concerns the whole of Emacs.
+
+00:49:55.800 --> 00:49:57.160
+Moving on to the next question.
+
+00:49:57.440 --> 00:49:59.960
+What is the hardest decision being made
+
+00:49:59.960 --> 00:50:02.480
+within Emacs dev for the last 3 years.
+
+00:50:02.480 --> 00:50:04.960
+I'm not sure, is it the decision in the last
+
+00:50:04.960 --> 00:50:07.480
+3 years or I'll let you interpret the
+
+00:50:07.480 --> 00:50:08.760
+question however you want.
+
+00:50:09.280 --> 00:50:10.960
+Okay, well, I'll say this.
+
+00:50:11.640 --> 00:50:14.220
+I started in August and I haven't had any
+
+00:50:14.220 --> 00:50:16.920
+really hard decisions so far.
+
+00:50:16.920 --> 00:50:20.540
+So good news. Maybe Eli will have more for
+
+00:50:20.540 --> 00:50:22.820
+the last 3 years. Keep it simple.
+
+00:50:25.240 --> 00:50:28.660
+Thanks. Cool. Next question.
+
+00:50:28.860 --> 00:50:31.920
+Any plans to integrate XWM into core?
+
+00:50:31.940 --> 00:50:34.400
+Emacs is a really good Winters manager.
+
+00:50:34.780 --> 00:50:38.080
+That's super cool. I think EXWM is cool.
+
+00:50:38.100 --> 00:50:40.140
+I think they need to upgrade to Wayland
+
+00:50:40.260 --> 00:50:41.880
+somehow and that's not clear yet,
+
+00:50:41.880 --> 00:50:44.880
+but you know, we don't have any current plans
+
+00:50:44.880 --> 00:50:48.900
+to integrate it, no. Right,
+
+00:50:49.020 --> 00:50:51.600
+Next question. Do you think it is a good idea
+
+00:50:51.600 --> 00:50:53.540
+to choose Org Mode for writing documentation
+
+00:50:53.680 --> 00:50:57.740
+instead of tech info? I think that whatever
+
+00:50:57.740 --> 00:50:59.680
+we do, it should be the people that are
+
+00:50:59.680 --> 00:51:01.760
+working on the documentation that should make
+
+00:51:01.760 --> 00:51:03.420
+that choice. Currently we have,
+
+00:51:03.420 --> 00:51:05.920
+I think, Modus themes and Org Mode itself is
+
+00:51:05.920 --> 00:51:08.060
+writing their documentation in Org Mode,
+
+00:51:08.080 --> 00:51:10.940
+that's fine by me. It has some drawbacks,
+
+00:51:10.960 --> 00:51:13.440
+it has some benefits, but most documentation
+
+00:51:13.580 --> 00:51:14.840
+is still in tech info.
+
+00:51:15.240 --> 00:51:17.360
+Maybe we'd need to replace that at some
+
+00:51:17.360 --> 00:51:19.840
+point, I don't know. But for now,
+
+00:51:19.840 --> 00:51:22.280
+that's what people know and use.
+
+00:51:22.280 --> 00:51:24.280
+And if you find that as a barrier to
+
+00:51:24.280 --> 00:51:25.600
+contribute to Emacs, I mean,
+
+00:51:25.600 --> 00:51:27.420
+just really write it as plain text.
+
+00:51:27.540 --> 00:51:29.380
+We'll be happy to help you with the markup.
+
+00:51:29.380 --> 00:51:30.280
+It's a little bit, you know,
+
+00:51:30.280 --> 00:51:31.760
+finicky and stuff like that.
+
+00:51:33.340 --> 00:51:35.060
+Great. Thanks for that.
+
+00:51:35.620 --> 00:51:38.000
+Next question. What do you plan to work on in
+
+00:51:38.000 --> 00:51:39.360
+Emacs Core in the future?
+
+00:51:40.460 --> 00:51:42.660
+I'm a little bit hesitant to reply to that.
+
+00:51:42.660 --> 00:51:43.740
+Of course I have ideas.
+
+00:51:43.740 --> 00:51:45.760
+Of course there are projects that I'm working
+
+00:51:45.760 --> 00:51:47.640
+on. However, if I say it here,
+
+00:51:47.640 --> 00:51:48.480
+I feel like, you know,
+
+00:51:48.480 --> 00:51:51.240
+then you'll hold me to it later and come ask,
+
+00:51:51.300 --> 00:51:52.480
+where is that feature?
+
+00:51:52.640 --> 00:51:55.180
+So I'll just say there is plenty of stuff
+
+00:51:55.180 --> 00:51:57.340
+that I'm working on, and if you want to know
+
+00:51:57.340 --> 00:51:58.780
+some of the stuff that I have been working
+
+00:51:58.780 --> 00:52:00.040
+on, check the Git log.
+
+00:52:00.060 --> 00:52:02.400
+I think that's just really as much as I want
+
+00:52:02.400 --> 00:52:05.040
+to say about that right now.
+
+00:52:05.660 --> 00:52:07.360
+You've added folks to just look at the path
+
+00:52:07.360 --> 00:52:09.620
+with the changelog and that's all you need.
+
+00:52:11.600 --> 00:52:13.340
+All right, moving on to the next question.
+
+00:52:14.020 --> 00:52:16.120
+What do you use Emacs for in your life other
+
+00:52:16.120 --> 00:52:17.580
+than working on Emacs itself?
+
+00:52:18.080 --> 00:52:21.060
+Oh shit. So the big thing is programming,
+
+00:52:21.140 --> 00:52:24.020
+right? Now I work as a programmer.
+
+00:52:27.040 --> 00:52:29.280
+But in general, I use org mode heavily.
+
+00:52:29.340 --> 00:52:30.780
+I use it for all my writing.
+
+00:52:30.820 --> 00:52:33.460
+I use it to write, prepare this talk.
+
+00:52:33.480 --> 00:52:35.360
+I use it as a productivity system.
+
+00:52:35.380 --> 00:52:41.980
+I use it for emails. I use it as an RSS
+
+00:52:41.980 --> 00:52:44.480
+reader. I do most of my computing.
+
+00:52:44.760 --> 00:52:47.040
+I also have Firefox. So it's like Emacs and
+
+00:52:47.040 --> 00:52:48.820
+Firefox for some reason.
+
+00:52:48.900 --> 00:52:51.900
+I do read documentation in Emacs as well in
+
+00:52:51.900 --> 00:52:58.440
+you, but yeah. Great. I'm still,
+
+00:52:59.180 --> 00:53:00.720
+I do very much the same thing with you.
+
+00:53:00.720 --> 00:53:02.040
+Like You've described exactly what I do.
+
+00:53:02.040 --> 00:53:02.960
+I work as a programmer,
+
+00:53:02.960 --> 00:53:04.640
+I use Augment for a lot of stuff,
+
+00:53:04.640 --> 00:53:06.340
+and I think that describes a whole lot of
+
+00:53:06.340 --> 00:53:08.100
+people currently watching the stream.
+
+00:53:09.380 --> 00:53:10.680
+Moving on to the next question.
+
+00:53:10.840 --> 00:53:12.740
+What could we do in order to make Emacs more
+
+00:53:12.740 --> 00:53:14.280
+attractive for younger users?
+
+00:53:14.820 --> 00:53:17.940
+This is an amazing question and I feel wholly
+
+00:53:18.480 --> 00:53:20.720
+unprepared to answer this.
+
+00:53:21.180 --> 00:53:24.180
+Probably more introductory material aimed at
+
+00:53:24.320 --> 00:53:26.580
+that age group. What do you mean by younger
+
+00:53:26.580 --> 00:53:28.740
+users? You know what would be really cool if
+
+00:53:28.740 --> 00:53:30.740
+you had an Emacs for kids project?
+
+00:53:31.020 --> 00:53:32.060
+That would be amazing.
+
+00:53:32.680 --> 00:53:34.920
+I'm not sure if that's what people are
+
+00:53:34.920 --> 00:53:36.880
+thinking about, but yeah,
+
+00:53:37.200 --> 00:53:39.780
+that's about what I can say for now.
+
+00:53:40.380 --> 00:53:43.320
+Good question. It is a very good question,
+
+00:53:43.320 --> 00:53:45.880
+like it comes back always to a key topic in
+
+00:53:45.880 --> 00:53:47.720
+EmacsConf, which is, how do we get more
+
+00:53:47.720 --> 00:53:49.360
+people to join us? Because it's a wonderful
+
+00:53:49.360 --> 00:53:51.760
+community. And how do we onboard people who
+
+00:53:51.760 --> 00:53:54.220
+are not programmers or people who are younger
+
+00:53:54.400 --> 00:53:56.720
+than the average Joe coming in those
+
+00:53:57.120 --> 00:54:01.560
+meetings? There's this Excellent article by
+
+00:54:01.560 --> 00:54:05.960
+Paul Graham, I think, where he was describing
+
+00:54:06.140 --> 00:54:09.140
+how they used Emacs as the sort of customer
+
+00:54:09.320 --> 00:54:11.520
+service system. They built the customer
+
+00:54:11.520 --> 00:54:13.940
+service system for the early days of Amazon
+
+00:54:14.700 --> 00:54:17.200
+in Emacs Lisp. And then they switched and all
+
+00:54:17.200 --> 00:54:18.680
+the employees were sad.
+
+00:54:18.680 --> 00:54:21.680
+So definitely there's more stuff that could
+
+00:54:21.680 --> 00:54:25.160
+be done in Emacs and be done better in Emacs.
+
+00:54:25.240 --> 00:54:27.440
+So for sure, if people want to explore more
+
+00:54:27.440 --> 00:54:28.880
+stuff like that, that's amazing.
+
+00:54:29.720 --> 00:54:32.040
+Yeah. And for people who weren't around
+
+00:54:32.040 --> 00:54:33.740
+earlier today, we've had a presentation about
+
+00:54:33.740 --> 00:54:36.820
+how to get computer science students to use
+
+00:54:36.860 --> 00:54:41.100
+Emacs and trying to provide as much
+
+00:54:41.100 --> 00:54:43.500
+information and as much tutorial as needed
+
+00:54:43.500 --> 00:54:45.480
+for them to understand what is the philosophy
+
+00:54:45.480 --> 00:54:48.420
+behind Emacs and how it influences the way
+
+00:54:48.420 --> 00:54:49.540
+you work and so forth.
+
+00:54:49.540 --> 00:54:51.420
+So you might want to revisit this discussion.
+
+00:54:51.420 --> 00:54:53.400
+And we also have plenty of talks talking
+
+00:54:53.400 --> 00:54:57.720
+about this issue. And I can just add that I
+
+00:54:57.720 --> 00:55:00.320
+think it's very important for us as a
+
+00:55:00.320 --> 00:55:03.120
+community to just be enthusiastic to get more
+
+00:55:03.120 --> 00:55:04.640
+people involved. Because I mean,
+
+00:55:04.640 --> 00:55:06.660
+look, there's this meme where it's like,
+
+00:55:06.660 --> 00:55:08.620
+I use Arch Linux, by the way,
+
+00:55:08.620 --> 00:55:10.020
+I use Arch, by the way.
+
+00:55:10.080 --> 00:55:12.380
+And for some reason, people using Arch keep
+
+00:55:12.380 --> 00:55:14.080
+telling you that they're using Arch.
+
+00:55:14.600 --> 00:55:16.160
+That's fine. Use whatever you want.
+
+00:55:16.160 --> 00:55:18.260
+It's free software, I don't care.
+
+00:55:20.140 --> 00:55:21.900
+I think if you look at Vim users,
+
+00:55:21.900 --> 00:55:23.440
+they're very almost militant,
+
+00:55:23.540 --> 00:55:25.780
+oh, we're Vim, and Vim is the thing.
+
+00:55:25.920 --> 00:55:27.480
+And Emacs users sometimes,
+
+00:55:27.700 --> 00:55:29.960
+and it's fine. We take a bit of a more
+
+00:55:29.960 --> 00:55:31.160
+laid-back approach. We're like,
+
+00:55:31.160 --> 00:55:32.720
+yeah, I use Emacs, you use Vim,
+
+00:55:32.720 --> 00:55:35.320
+whatever. And that's fine.
+
+00:55:35.320 --> 00:55:36.820
+I mean, that's the correct approach,
+
+00:55:36.820 --> 00:55:38.480
+I think. You should respect what people want
+
+00:55:38.480 --> 00:55:40.840
+to use. I don't care that people use VS Code
+
+00:55:40.840 --> 00:55:42.540
+or whatever. I'm not going to use that
+
+00:55:42.540 --> 00:55:43.940
+because it's too limiting.
+
+00:55:43.940 --> 00:55:45.780
+It's not really a workable environment.
+
+00:55:46.400 --> 00:55:48.620
+But I think it's OK to be enthusiastic.
+
+00:55:48.740 --> 00:55:51.360
+I think it's okay to talk about that type of
+
+00:55:51.360 --> 00:55:54.100
+enthusiasm and anything that can help
+
+00:55:54.400 --> 00:55:56.880
+increase the enthusiasm around Emacs can only
+
+00:55:56.880 --> 00:56:01.100
+help the longevity of Emacs.
+
+00:56:02.520 --> 00:56:04.280
+I agree and that's also 1 of the key
+
+00:56:04.280 --> 00:56:05.340
+objectives of EmacsConf.
+
+00:56:05.460 --> 00:56:07.660
+It's about bringing a lot of amazing people
+
+00:56:07.660 --> 00:56:09.100
+to come talk, like you,
+
+00:56:09.140 --> 00:56:11.400
+about stuff that is very dear to you.
+
+00:56:11.400 --> 00:56:14.180
+And it's very tangible how much you care,
+
+00:56:14.180 --> 00:56:15.920
+all of you, about what you're presenting.
+
+00:56:15.920 --> 00:56:18.560
+And it's amazing to put all of you people on
+
+00:56:18.560 --> 00:56:20.800
+just 48 hours talking about all of this and
+
+00:56:20.800 --> 00:56:22.920
+then creating so much content for people to
+
+00:56:22.920 --> 00:56:24.480
+watch. And I think it's really helping the
+
+00:56:24.480 --> 00:56:28.140
+enthusiasm to live on and to gather a little
+
+00:56:28.140 --> 00:56:29.660
+more snow as it comes down.
+
+00:56:29.920 --> 00:56:31.720
+Yeah, I watch you Max Conf every year.
+
+00:56:31.720 --> 00:56:33.460
+I think it's a lot of fun.
+
+00:56:34.300 --> 00:56:37.360
+Thank you. I'll take the compliment for
+
+00:56:37.360 --> 00:56:38.620
+everyone else in the team.
+
+00:56:39.620 --> 00:56:41.120
+We're going to go a little bit longer with
+
+00:56:41.120 --> 00:56:42.800
+the Q&A because we still have a lot of
+
+00:56:42.800 --> 00:56:44.480
+questions and if Stéphane is still willing to
+
+00:56:44.480 --> 00:56:48.160
+answer, I'm still willing to not go too bad
+
+00:56:48.160 --> 00:56:49.740
+to hear a lot more of it.
+
+00:56:49.740 --> 00:56:50.580
+Yeah, for me it's fine.
+
+00:56:50.580 --> 00:56:55.760
+I have time. Great. So I think I've done this
+
+00:56:55.760 --> 00:56:57.460
+question. So, all right.
+
+00:56:58.080 --> 00:57:00.060
+How are we going to make sure that a cool
+
+00:57:00.060 --> 00:57:01.960
+idea is going to pass it through for the next
+
+00:57:01.960 --> 00:57:04.100
+generation, let's say 20 years later,
+
+00:57:04.120 --> 00:57:05.860
+the generation still have the good knowledge
+
+00:57:05.860 --> 00:57:09.940
+we have today. Yeah, so I mean,
+
+00:57:09.940 --> 00:57:12.840
+if you think about what does EMAX need to
+
+00:57:12.840 --> 00:57:15.180
+have staying power, so in general,
+
+00:57:15.180 --> 00:57:17.020
+they say, you know, if if when you start a
+
+00:57:17.020 --> 00:57:19.340
+company, if you have a company for 1 year,
+
+00:57:19.340 --> 00:57:20.220
+then in all likelihood,
+
+00:57:20.220 --> 00:57:21.820
+you're going to have it for 2 years because,
+
+00:57:21.820 --> 00:57:23.680
+you know, it's just so if you've had Emacs
+
+00:57:23.680 --> 00:57:25.840
+for 4 years, I'm saying that we're going to
+
+00:57:25.840 --> 00:57:27.980
+have Emacs for the next 4 years as well.
+
+00:57:27.980 --> 00:57:30.540
+Just based on that, I'm not sure the logic
+
+00:57:30.540 --> 00:57:32.200
+holds up, but you know,
+
+00:57:32.440 --> 00:57:34.320
+how does Emacs stay relevant?
+
+00:57:34.340 --> 00:57:35.500
+I think is the question.
+
+00:57:35.500 --> 00:57:38.400
+Well, I think we need to continue working on
+
+00:57:38.520 --> 00:57:41.840
+all the types of exploratory work that people
+
+00:57:41.840 --> 00:57:43.820
+are doing in the community.
+
+00:57:43.820 --> 00:57:45.720
+I think there is fundamental stuff that needs
+
+00:57:45.720 --> 00:57:47.720
+to be done. I mean, if people want to work
+
+00:57:47.720 --> 00:57:49.400
+on, you know, web rendering and Emacs,
+
+00:57:49.400 --> 00:57:50.240
+maybe that's the next,
+
+00:57:50.240 --> 00:57:53.240
+you know, revolutionary step that we need
+
+00:57:53.240 --> 00:57:55.320
+that could, you know, really showcase what
+
+00:57:55.320 --> 00:57:57.640
+Emacs, you know, as, you know,
+
+00:57:57.640 --> 00:58:00.620
+an idea, even if not Emacs as a software
+
+00:58:00.620 --> 00:58:01.960
+could be and, you know,
+
+00:58:01.960 --> 00:58:05.000
+Because there is huge potential in the idea
+
+00:58:05.000 --> 00:58:07.100
+as such. So maybe that's something.
+
+00:58:07.960 --> 00:58:09.600
+But I mean, from the point of view of core
+
+00:58:09.600 --> 00:58:11.840
+development, I think we need to just continue
+
+00:58:11.840 --> 00:58:15.040
+working on the fundamental technologies.
+
+00:58:15.260 --> 00:58:17.980
+1 thing that I would like to eventually see
+
+00:58:17.980 --> 00:58:19.700
+is a better garbage collector.
+
+00:58:19.900 --> 00:58:22.280
+We've talked about that for a long time,
+
+00:58:22.280 --> 00:58:25.140
+but I mean, we need someone to do the job
+
+00:58:25.380 --> 00:58:27.980
+really. It's not very easy.
+
+00:58:27.980 --> 00:58:29.780
+It's very hard, actually.
+
+00:58:31.100 --> 00:58:34.000
+So just continues working on stuff like that,
+
+00:58:34.000 --> 00:58:35.180
+continue with the exploration,
+
+00:58:35.800 --> 00:58:40.260
+continue using and being excited about Emacs.
+
+00:58:40.260 --> 00:58:43.180
+I think that's the best guarantee that we
+
+00:58:43.180 --> 00:58:45.800
+have. Yeah, and perhaps to echo something
+
+00:58:45.800 --> 00:58:46.780
+that you said earlier,
+
+00:58:46.840 --> 00:58:47.960
+the tools that you're using,
+
+00:58:47.960 --> 00:58:49.920
+like the emails, they've been around forever,
+
+00:58:49.920 --> 00:58:51.100
+they will be around forever.
+
+00:58:51.500 --> 00:58:53.480
+This pragmatic stance on the tools that
+
+00:58:53.480 --> 00:58:56.240
+you're using, they might look stayed from the
+
+00:58:56.240 --> 00:58:58.880
+outside, but ultimately they are what permits
+
+00:58:59.220 --> 00:59:02.280
+a sense of longevity to any kind of project
+
+00:59:03.300 --> 00:59:05.460
+you embark upon. Also,
+
+00:59:05.460 --> 00:59:07.260
+in a sense, I think that the expectations
+
+00:59:07.740 --> 00:59:09.320
+might be changing in the sense that,
+
+00:59:09.320 --> 00:59:12.820
+you know, when I started using GNU Linux,
+
+00:59:12.980 --> 00:59:15.060
+you know what the first thing I did was,
+
+00:59:15.060 --> 00:59:16.960
+because I couldn't get Xorg to run.
+
+00:59:16.960 --> 00:59:19.040
+So the first thing you had to do was you had
+
+00:59:19.040 --> 00:59:20.820
+to compile your own Linux kernel.
+
+00:59:20.820 --> 00:59:22.960
+So you sit there and make manuconfig and
+
+00:59:22.960 --> 00:59:24.880
+you'll like, try to read it and you've never
+
+00:59:24.880 --> 00:59:26.320
+done anything like this before.
+
+00:59:26.320 --> 00:59:27.800
+You know, I was just a kid.
+
+00:59:27.800 --> 00:59:29.540
+I had never been at this kind of,
+
+00:59:29.540 --> 00:59:31.560
+you know, whatever. So I had to start with
+
+00:59:31.560 --> 00:59:34.200
+that. And then you have to write the X or
+
+00:59:34.200 --> 00:59:36.100
+configuration file. And I had the patience
+
+00:59:36.100 --> 00:59:37.100
+for that. But nowadays,
+
+00:59:37.200 --> 00:59:38.600
+people have different expectations.
+
+00:59:38.740 --> 00:59:40.460
+You just install something,
+
+00:59:40.640 --> 00:59:42.720
+and it works. And we need to keep that in
+
+00:59:42.720 --> 00:59:45.280
+mind as well. So that's why I keep pushing as
+
+00:59:45.280 --> 00:59:48.720
+1 of my big things. We need to build a more
+
+00:59:48.740 --> 00:59:51.180
+cohesive experience out of the box.
+
+00:59:51.180 --> 00:59:52.540
+Of course, that can be customizable.
+
+00:59:52.940 --> 00:59:55.240
+You shouldn't shoehorn anything in just for
+
+00:59:55.240 --> 00:59:58.760
+the sake of it. But you could get some things
+
+00:59:58.940 --> 01:00:00.920
+a little bit more for free.
+
+01:00:01.220 --> 01:00:03.080
+And maybe some of us that have our own
+
+01:00:03.080 --> 01:00:04.780
+configs and we've been doing this for you
+
+01:00:04.780 --> 01:00:07.720
+know, 2, 05:10, even 20 years,
+
+01:00:08.480 --> 01:00:09.660
+we could also see, you know,
+
+01:00:09.660 --> 01:00:11.640
+from the point of view of a new user that
+
+01:00:11.640 --> 01:00:13.780
+just installs VS Code and then they click,
+
+01:00:13.780 --> 01:00:15.680
+yes I use Python, yes I use that,
+
+01:00:15.680 --> 01:00:18.840
+and then it just automatically works.
+
+01:00:19.200 --> 01:00:20.600
+You know what I mean? I mean,
+
+01:00:20.600 --> 01:00:24.140
+then could we get closer to that perhaps a
+
+01:00:24.140 --> 01:00:26.060
+little bit? I think that would also help.
+
+01:00:26.760 --> 01:00:28.700
+Yeah, I think that's what we call the
+
+01:00:28.700 --> 01:00:30.580
+configuration wizard. And we were talking
+
+01:00:30.580 --> 01:00:32.520
+about this, I think, a couple of years ago at
+
+01:00:32.520 --> 01:00:34.200
+EmacsConf. I can't remember if it was with
+
+01:00:34.200 --> 01:00:35.740
+Adam in the chat. Adam,
+
+01:00:35.740 --> 01:00:38.240
+I mean Alpha Papa, or if it was with Bastien,
+
+01:00:38.240 --> 01:00:40.440
+but I remember the idea cropping off.
+
+01:00:40.440 --> 01:00:42.520
+Like, it's either you get a tutorial for
+
+01:00:42.520 --> 01:00:43.520
+Emacs, a proper tutorial,
+
+01:00:43.520 --> 01:00:45.640
+or you get a wizard, or you get both,
+
+01:00:45.640 --> 01:00:47.520
+and then all is right for the world.
+
+01:00:47.520 --> 01:00:49.420
+But definitely cool ideas being evoked.
+
+01:00:50.280 --> 01:00:52.280
+I'm gonna say I need to decree the time when
+
+01:00:52.280 --> 01:00:54.440
+we finish because for me it is 11.15
+
+01:00:55.080 --> 01:00:59.300
+p.m. And I think my co-organizers are also
+
+01:00:59.300 --> 01:01:01.680
+willing to end the day and go rest because
+
+01:01:01.680 --> 01:01:03.540
+we've got another day to go tomorrow.
+
+01:01:03.760 --> 01:01:06.280
+So how about we take 3 minutes and 30 seconds
+
+01:01:06.280 --> 01:01:08.300
+to try to answer a little bit more succinctly
+
+01:01:08.560 --> 01:01:09.780
+the questions we've got left.
+
+01:01:09.780 --> 01:01:10.940
+How does that sound, Stefan?
+
+01:01:11.320 --> 01:01:15.200
+Sounds great. Cool, so I'll start reading the
+
+01:01:15.200 --> 01:01:17.140
+questions then that we've got left.
+
+01:01:18.340 --> 01:01:20.840
+So this 1 we've got. If you're willing to
+
+01:01:20.840 --> 01:01:22.360
+discuss it, what do you think about the
+
+01:01:22.360 --> 01:01:24.720
+recent controversy about use of CLLib in
+
+01:01:24.720 --> 01:01:29.980
+Emacs call code? Am I willing to discuss
+
+01:01:29.980 --> 01:01:35.960
+that? I have said my opinion on Emacs,
+
+01:01:36.420 --> 01:01:40.580
+Devel, I think. And I think I understand,
+
+01:01:40.680 --> 01:01:44.820
+I think, the viewpoints of both sides in that
+
+01:01:44.820 --> 01:01:46.720
+discussion. It is true that some things,
+
+01:01:46.720 --> 01:01:49.280
+I mean, we have to think about that.
+
+01:01:49.280 --> 01:01:50.340
+There is a real problem,
+
+01:01:50.340 --> 01:01:53.520
+I think, when we have 3 different APIs for
+
+01:01:53.520 --> 01:01:55.140
+doing the same thing in Emacs.
+
+01:01:55.320 --> 01:01:57.080
+And can we make that a little bit better?
+
+01:01:57.280 --> 01:01:59.280
+I mean, perhaps we could,
+
+01:01:59.760 --> 01:02:04.040
+right? So that's about as much as I'd like to
+
+01:02:04.040 --> 01:02:06.940
+say. Fair enough. I would have also accepted
+
+01:02:06.940 --> 01:02:09.160
+that CL loops are ugly to write and they
+
+01:02:09.160 --> 01:02:10.320
+don't feel very lispy.
+
+01:02:10.320 --> 01:02:12.040
+But I'll take your answer as well.
+
+01:02:13.260 --> 01:02:15.360
+Yeah, some people think that.
+
+01:02:15.660 --> 01:02:18.400
+I understand that position as well.
+
+01:02:19.200 --> 01:02:21.220
+Right. Okay, next question.
+
+01:02:21.260 --> 01:02:23.100
+When we find a bug in our Emacs,
+
+01:02:23.100 --> 01:02:25.200
+do we need to try to replicate it on our side
+
+01:02:25.200 --> 01:02:26.780
+version, on our SID version,
+
+01:02:26.780 --> 01:02:29.340
+sorry, then update all the usual list package
+
+01:02:29.340 --> 01:02:31.480
+we use, and if we succeed to replicate the
+
+01:02:31.480 --> 01:02:33.340
+bug in this version, only then go to
+
+01:02:33.340 --> 01:02:35.420
+development version 30 and do the same.
+
+01:02:35.660 --> 01:02:37.580
+Then only ask for assistance in reporting the
+
+01:02:37.580 --> 01:02:40.260
+bug we found. So I believe when they
+
+01:02:40.260 --> 01:02:43.540
+encounter a bug, are people supposed to go to
+
+01:02:43.540 --> 01:02:47.500
+master to pull main and just to make sure
+
+01:02:47.500 --> 01:02:48.740
+that they are on the latest version.
+
+01:02:48.740 --> 01:02:49.980
+Is this something that you require?
+
+01:02:50.660 --> 01:02:51.860
+We don't require that,
+
+01:02:51.860 --> 01:02:54.940
+but we do try to encourage you to reproduce
+
+01:02:54.960 --> 01:02:57.380
+it on master if we think that it matters.
+
+01:02:57.720 --> 01:03:00.920
+Yeah, so if you can, that's even better.
+
+01:03:01.620 --> 01:03:03.940
+But if the bug is there in Emacs 29,
+
+01:03:03.940 --> 01:03:06.000
+maybe we want to fix it in Emacs 29.2.
+
+01:03:06.340 --> 01:03:09.820
+So the latest point release is also fine.
+
+01:03:10.400 --> 01:03:12.940
+Bugs in Emacs 28 at this point,
+
+01:03:12.940 --> 01:03:14.780
+like the previous major version,
+
+01:03:15.060 --> 01:03:17.720
+we might ask you to try to reproduce it on
+
+01:03:17.720 --> 01:03:19.600
+Emacs 29 because we're not planning more
+
+01:03:19.600 --> 01:03:21.600
+releases of old major versions.
+
+01:03:21.600 --> 01:03:23.660
+So that's the fundamental reason for that.
+
+01:03:24.480 --> 01:03:25.820
+Great. Thank you for your answer.
+
+01:03:25.900 --> 01:03:27.680
+All right. Moving on to the next question.
+
+01:03:27.840 --> 01:03:29.280
+On branching off sub-threads,
+
+01:03:29.680 --> 01:03:31.840
+I note that they are less visible compared to
+
+01:03:31.840 --> 01:03:33.380
+starting a new thread in practice.
+
+01:03:33.520 --> 01:03:35.680
+I am wondering if it is just my impression or
+
+01:03:35.680 --> 01:03:37.400
+something devs also observe.
+
+01:03:37.920 --> 01:03:39.780
+Yeah, it's true. That's correct.
+
+01:03:41.400 --> 01:03:42.840
+I don't know what to do about it.
+
+01:03:42.840 --> 01:03:44.160
+If you want more visibility,
+
+01:03:44.180 --> 01:03:45.920
+I guess just start a new thread.
+
+01:03:47.080 --> 01:03:48.960
+I don't know. I can only agree,
+
+01:03:48.960 --> 01:03:50.880
+really. I concur. That's true.
+
+01:03:51.720 --> 01:03:54.260
+Okay. Next question. What about rewriting
+
+01:03:54.340 --> 01:03:57.100
+Emacs in Rust? Use Guile instead of Elisp.
+
+01:03:57.260 --> 01:03:59.580
+Multi-threaded Emacs. Make Emacs prettier and
+
+01:03:59.580 --> 01:04:01.760
+shiny. And of course, same defaults.
+
+01:04:02.220 --> 01:04:04.440
+Just kidding. We are spoiled children because
+
+01:04:04.440 --> 01:04:07.780
+you and Eli, Lars, and etc do an impressive
+
+01:04:08.420 --> 01:04:10.620
+work. I live in Emacs since 2001.
+
+01:04:11.040 --> 01:04:14.220
+Thanks. That was a good 1.
+
+01:04:14.220 --> 01:04:17.880
+Sane defaults. Okay, Well,
+
+01:04:18.900 --> 01:04:20.580
+thank you. Thanks for that comment.
+
+01:04:20.580 --> 01:04:23.440
+That made me chuckle. Next question by the
+
+01:04:23.440 --> 01:04:24.520
+same person, I assume.
+
+01:04:24.520 --> 01:04:26.580
+The only downside I see with copyright
+
+01:04:26.580 --> 01:04:28.900
+assignment is that 1 has to disclose their
+
+01:04:28.900 --> 01:04:31.240
+real identity. Would it be a possibility to
+
+01:04:31.240 --> 01:04:32.860
+assign a copyright under a nickname?
+
+01:04:33.160 --> 01:04:34.840
+Yeah, you don't have to say a real name.
+
+01:04:34.840 --> 01:04:37.260
+Just register some pseudonym.
+
+01:04:37.360 --> 01:04:39.440
+The FSF does need your real name,
+
+01:04:39.440 --> 01:04:41.420
+but that's kept private only.
+
+01:04:41.500 --> 01:04:45.920
+So feel free to reach out to assign at
+
+01:04:45.920 --> 01:04:48.360
+gnu.org and ask more about that.
+
+01:04:49.860 --> 01:04:51.680
+Right. All right, next question.
+
+01:04:51.820 --> 01:04:53.400
+Do you think it is possible to reach an
+
+01:04:53.400 --> 01:04:55.240
+agreement on sane defaults for better
+
+01:04:55.240 --> 01:04:57.220
+out-of-the-box experience?
+
+01:04:57.800 --> 01:05:00.040
+Yeah, so your sane is not my sane
+
+01:05:00.060 --> 01:05:01.760
+necessarily. So that's the fundamental
+
+01:05:01.780 --> 01:05:02.960
+problem that we're discussing here.
+
+01:05:02.960 --> 01:05:03.960
+I think it's a social,
+
+01:05:03.960 --> 01:05:05.240
+not a technical problem.
+
+01:05:05.380 --> 01:05:07.580
+We do change defaults sometimes,
+
+01:05:07.640 --> 01:05:09.880
+but I mean, there is also some staying power.
+
+01:05:09.880 --> 01:05:12.260
+So it's understandable that,
+
+01:05:12.260 --> 01:05:13.940
+you know, it's, we can't just change them
+
+01:05:13.940 --> 01:05:15.920
+willy nilly and then flip flop between,
+
+01:05:15.920 --> 01:05:18.340
+you know, 1 or the other kind of thing.
+
+01:05:18.340 --> 01:05:20.060
+So it does take a little bit more time.
+
+01:05:20.060 --> 01:05:22.860
+But yeah, sure, we can.
+
+01:05:23.000 --> 01:05:25.860
+We do change defaults at times.
+
+01:05:26.380 --> 01:05:29.780
+But it's perhaps more slower than what some
+
+01:05:29.780 --> 01:05:31.420
+people would prefer, for sure.
+
+01:05:31.640 --> 01:05:36.000
+So that's, yeah. Right,
+
+01:05:36.000 --> 01:05:37.620
+all right. We have 2 more questions.
+
+01:05:37.920 --> 01:05:40.020
+So will XWidgets have a future?
+
+01:05:40.120 --> 01:05:42.180
+Seeing the new bugs popping up in the latest
+
+01:05:42.740 --> 01:05:45.280
+XWidget dev. Not sure if there was the rest
+
+01:05:45.280 --> 01:05:46.640
+of the question, But on XWidgets,
+
+01:05:46.640 --> 01:05:47.940
+can you tell us a little more?
+
+01:05:48.740 --> 01:05:50.580
+I'm not really following now.
+
+01:05:50.580 --> 01:05:52.400
+I mean, I'm not seeing a lot of development
+
+01:05:52.500 --> 01:05:54.180
+on XWidgets currently.
+
+01:05:54.480 --> 01:05:57.100
+Some people have done work in fixing up a few
+
+01:05:57.100 --> 01:06:00.320
+bugs, but I think that feature really needs
+
+01:06:00.380 --> 01:06:02.180
+more love. So I think we need,
+
+01:06:02.180 --> 01:06:03.600
+you know, help is welcome,
+
+01:06:03.600 --> 01:06:05.920
+patch is welcome. That's what I can say about
+
+01:06:05.920 --> 01:06:11.180
+that. All right, and our final question of
+
+01:06:11.180 --> 01:06:13.140
+the day. Have you voted for Emacs as the
+
+01:06:13.140 --> 01:06:15.140
+software of the year on the Tuxes by Jupyter
+
+01:06:15.140 --> 01:06:17.480
+Broadcasting? I did because Emacs 29 is
+
+01:06:17.480 --> 01:06:19.300
+great. Thank you. Okay,
+
+01:06:19.300 --> 01:06:20.580
+well, good job voting.
+
+01:06:20.580 --> 01:06:22.960
+I didn't know, I don't know what Tuxy is on
+
+01:06:22.960 --> 01:06:25.680
+Jupyter broadcasting, but look it up and go
+
+01:06:25.680 --> 01:06:28.040
+vote. So I wish I could tell you,
+
+01:06:28.040 --> 01:06:29.500
+I assume with Tux, it might be something
+
+01:06:29.500 --> 01:06:32.900
+related to Linux, but that's as much as I can
+
+01:06:32.900 --> 01:06:34.840
+say. All right, well, Stefan,
+
+01:06:34.960 --> 01:06:36.600
+thank you so much for taking the time not
+
+01:06:36.600 --> 01:06:38.000
+only to do a wonderful presentation,
+
+01:06:38.000 --> 01:06:39.640
+but also for answering all the questions of
+
+01:06:39.640 --> 01:06:41.240
+the community. Do you have anything else to
+
+01:06:41.240 --> 01:06:45.360
+add? Just really thanks for all the questions
+
+01:06:45.360 --> 01:06:46.760
+and thanks for staying.
+
+01:06:47.780 --> 01:06:49.600
+It's been a long day, a long conference,
+
+01:06:49.600 --> 01:06:51.180
+so thanks for staying and listening to my
+
+01:06:51.180 --> 01:06:52.540
+talk as well. Really appreciate it.
+
+01:06:52.540 --> 01:06:54.280
+Appreciate the good work you guys are doing
+
+01:06:54.280 --> 01:06:55.460
+behind the scenes, organizing,
+
+01:06:55.520 --> 01:06:56.740
+setting everything up.
+
+01:06:57.040 --> 01:07:00.420
+And really humbled to be a part of this
+
+01:07:00.420 --> 01:07:02.060
+community. So thank you all.
+
+01:07:02.680 --> 01:07:05.860
+Well I can assure you that no 1 either in the
+
+01:07:05.860 --> 01:07:08.040
+organization team or the people watching now
+
+01:07:08.040 --> 01:07:10.900
+felt like it was tiring to stay and listen to
+
+01:07:10.900 --> 01:07:12.760
+your answers. So thank you so much Stefan.
diff --git a/2023/captions/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--main--chapters.vtt b/2023/captions/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--main--chapters.vtt
new file mode 100644
index 00000000..2c46c976
--- /dev/null
+++ b/2023/captions/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--main--chapters.vtt
@@ -0,0 +1,38 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:01:35.399
+Introduction
+
+00:01:35.400 --> 00:02:01.159
+Cubing in Emacs
+
+00:02:01.160 --> 00:02:32.039
+Prior art
+
+00:02:32.040 --> 00:03:16.519
+The name
+
+00:03:16.520 --> 00:03:49.239
+What's in wca-prep
+
+00:03:49.240 --> 00:04:03.080
+Demo
+
+00:05:15.340 --> 00:07:09.219
+Challenges: Representing the cube
+
+00:07:09.220 --> 00:08:09.499
+Scrambling
+
+00:08:09.500 --> 00:08:56.419
+Visualization
+
+00:08:56.420 --> 00:09:55.579
+UI with Transient
+
+00:09:55.580 --> 00:11:12.579
+Book-keeping with SQLite
+
+00:11:12.580 --> 00:13:30.860
+Conclusion
diff --git a/2023/captions/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--main.vtt b/2023/captions/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--main.vtt
new file mode 100644
index 00000000..db303c95
--- /dev/null
+++ b/2023/captions/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--main.vtt
@@ -0,0 +1,803 @@
+WEBVTT captioned by sachac, checked by sachac
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:08.359
+Hello, everyone, and welcome to Speedcubing in Emacs.
+
+00:00:08.360 --> 00:00:10.119
+First of all, a little bit about myself.
+
+00:00:10.120 --> 00:00:13.679
+My name is Vasilij Schneidermann. Online, I go by wasamasa.
+
+00:00:13.680 --> 00:00:18.039
+I'm 31 years old. I work in information security,
+
+00:00:18.040 --> 00:00:20.479
+and I do consulting and hacking
+
+00:00:20.480 --> 00:00:22.479
+and stuff like figuring out
+
+00:00:22.480 --> 00:00:25.279
+how to break into other people's computers
+
+00:00:25.280 --> 00:00:29.359
+and how to secure their systems basically.
+
+00:00:29.360 --> 00:00:31.439
+You can reach me by email.
+
+00:00:31.440 --> 00:00:36.639
+I do have a self-hosted code repository thingy going on.
+
+00:00:36.640 --> 00:00:40.399
+I have a blog, and you can find me
+
+00:00:40.400 --> 00:00:45.919
+in some other places online, like IRC for example.
+
+00:00:45.920 --> 00:00:48.679
+So about the talk itself,
+
+00:00:48.680 --> 00:00:52.839
+I used to be into the Rubik's cube when I was in school.
+
+00:00:52.840 --> 00:00:54.039
+I forgot about it, though,
+
+00:00:54.040 --> 00:00:56.279
+because these cubes were not very good.
+
+00:00:56.280 --> 00:01:02.279
+Recently I did find some cheap looking cube at a shop.
+
+00:01:02.280 --> 00:01:04.119
+Did not pay terribly much for it.
+
+00:01:04.120 --> 00:01:07.039
+It was so, so much better than my old cube,
+
+00:01:07.040 --> 00:01:08.639
+it was unreal.
+
+00:01:08.640 --> 00:01:11.479
+This motivated me to get back into
+
+00:01:11.480 --> 00:01:13.559
+this really weird kind of hobby.
+
+00:01:13.560 --> 00:01:17.999
+For this, you need to be good at producing
+
+00:01:18.000 --> 00:01:19.399
+a truly random scramble
+
+00:01:19.400 --> 00:01:22.319
+and timing your attempts to get any better at it.
+
+00:01:22.320 --> 00:01:23.719
+There is, of course, existing software
+
+00:01:23.720 --> 00:01:26.239
+to do the scrambling for you and the recording
+
+00:01:26.240 --> 00:01:28.079
+and the timekeeping and such,
+
+00:01:28.080 --> 00:01:31.239
+but all the good options seem to be either web or mobile,
+
+00:01:31.240 --> 00:01:33.239
+for example the cstimer software
+
+00:01:33.240 --> 00:01:35.399
+or the twisty-timer app on Android.
+
+
+NOTE Cubing in Emacs
+
+00:01:35.400 --> 00:01:39.319
+To my surprise, I did not find a single decent option
+
+00:01:39.320 --> 00:01:41.959
+inside Emacs, so this is basically a case study
+
+00:01:41.960 --> 00:01:44.999
+how to do better. For this, I wanted to make use of
+
+00:01:45.000 --> 00:01:47.799
+all the cool new Emacs features that appeared,
+
+00:01:47.800 --> 00:01:50.879
+like the SVG library; Transient,
+
+00:01:50.880 --> 00:01:53.599
+the library used for the Magit-style interfaces;
+
+00:01:53.600 --> 00:01:56.439
+and the recently added sqlite-mode.
+
+00:01:56.440 --> 00:02:01.159
+And most importantly it was about having fun.
+
+NOTE Prior art
+
+00:02:01.160 --> 00:02:02.759
+So here's a full list of prior art,
+
+00:02:02.760 --> 00:02:04.279
+I will not go into detail about this,
+
+00:02:04.280 --> 00:02:06.239
+but basically we have things solving
+
+00:02:06.240 --> 00:02:08.039
+very different parts of this,
+
+00:02:08.040 --> 00:02:10.759
+but not all of it. For example: we have several,
+
+00:02:10.760 --> 00:02:14.239
+we have a timer. We have several solvers.
+
+00:02:14.240 --> 00:02:16.039
+We have some scramblers.
+
+00:02:16.040 --> 00:02:19.359
+We have some whole-cube simulators, including a 3D one.
+
+00:02:19.360 --> 00:02:20.759
+We have something for making it easier
+
+00:02:20.760 --> 00:02:23.119
+to enter your algorithms in the notation.
+
+00:02:23.120 --> 00:02:25.919
+But nothing that does all of those things in one package,
+
+00:02:25.920 --> 00:02:28.119
+which kind of surprised me.
+
+00:02:28.120 --> 00:02:32.039
+So I present the `wca-prep` package.
+
+NOTE The name
+
+00:02:32.040 --> 00:02:35.559
+So the name, I found it difficult
+
+00:02:35.560 --> 00:02:39.959
+to come up with a good name and so I looked
+
+00:02:39.960 --> 00:02:42.559
+and I saw, well there's this World Cube Association
+
+00:02:42.560 --> 00:02:46.039
+that holds these competitions where you compete.
+
+00:02:46.040 --> 00:02:47.759
+They do this for the Rubik's cube
+
+00:02:47.760 --> 00:02:48.919
+but also a few others,
+
+00:02:48.920 --> 00:02:50.799
+so there's like a standardized list
+
+00:02:50.800 --> 00:02:52.639
+of events they have for this.
+
+00:02:52.640 --> 00:02:55.159
+There is a standard notation for this
+
+00:02:55.160 --> 00:02:56.519
+and rules and everything.
+
+00:02:56.520 --> 00:02:58.199
+And the goal of my package is basically
+
+00:02:58.200 --> 00:03:01.279
+to help prepare myself for such a competition
+
+00:03:01.280 --> 00:03:03.679
+and in fact a week ago I went to my first one
+
+00:03:03.680 --> 00:03:06.719
+which was wild, but pretty cool.
+
+00:03:06.720 --> 00:03:10.919
+So for this reason I chose this name wca-prep,
+
+00:03:10.920 --> 00:03:13.639
+because it helps me prepare for this kind of competition
+
+00:03:13.640 --> 00:03:16.519
+and this limited the scope significantly,
+
+NOTE What's in wca-prep
+
+00:03:16.520 --> 00:03:18.999
+I have a scrambler, visualization of the scramble,
+
+00:03:19.000 --> 00:03:23.319
+timer, and statistics.
+
+00:03:23.320 --> 00:03:25.559
+I excluded pretty much everything else I've seen.
+
+00:03:25.560 --> 00:03:28.788
+For this reason, I only tried to focus on
+
+00:03:28.789 --> 00:03:32.199
+some very basic puzzles I can solve comfortably,
+
+00:03:32.200 --> 00:03:34.839
+and did not want to do anything else
+
+00:03:34.840 --> 00:03:36.439
+that may complicate things significantly.
+
+00:03:36.440 --> 00:03:40.479
+No other kinds of puzzles, no simulation, no solving,
+
+00:03:40.480 --> 00:03:43.919
+no exotic events, and no specialized scrambles
+
+00:03:43.920 --> 00:03:49.239
+that are only good for practicing specific algorithms.
+
+NOTE Demo
+
+00:03:49.240 --> 00:03:54.199
+So at this point the organizer should hopefully show
+
+00:03:54.200 --> 00:03:57.999
+a small video I've prepared, a one minute video showing how
+
+00:03:58.000 --> 00:05:15.239
+I actually use this to solve a cube and to time my solve.
+
+NOTE Challenges: Representing the cube
+
+00:05:15.240 --> 00:05:18.508
+Okay, so building this thing, there were several challenges.
+
+00:05:18.509 --> 00:05:20.508
+The first one was how do I even represent
+
+00:05:20.509 --> 00:05:22.468
+the state of a Rubik's cube.
+
+00:05:22.469 --> 00:05:25.508
+For this there are many possible representations,
+
+00:05:25.509 --> 00:05:27.708
+no obvious best solution.
+
+00:05:27.709 --> 00:05:29.628
+I did not, well, what helped me was that
+
+00:05:29.629 --> 00:05:31.988
+I did not have to programmatically solve this thing,
+
+00:05:31.989 --> 00:05:35.188
+so I picked the easiest possible representation
+
+00:05:35.189 --> 00:05:38.268
+which is just an array of every single facelet.
+
+00:05:38.269 --> 00:05:42.508
+For a 3x3 cube you have 9 facelets on one side,
+
+00:05:42.509 --> 00:05:47.268
+so times 6 sides you would have 54 elements in this array.
+
+00:05:47.269 --> 00:05:49.708
+So with this representation, it's very simple,
+
+00:05:49.709 --> 00:05:52.388
+but it's kind of weird to do scrambles with this.
+
+00:05:52.389 --> 00:05:54.908
+But otherwise, it worked very, very well.
+
+00:05:54.909 --> 00:05:57.268
+In the future, I plan to learn some group theory,
+
+00:05:57.269 --> 00:05:58.748
+pick a better representation
+
+00:05:58.749 --> 00:06:01.188
+and do this in a much, much more elegant way
+
+00:06:01.189 --> 00:06:07.868
+without compromising speed too much.
+
+00:06:07.869 --> 00:06:10.708
+Yes. Once I had the representation,
+
+00:06:10.709 --> 00:06:13.628
+the scrambling itself should not be too hard.
+
+00:06:13.629 --> 00:06:17.748
+For this, it's important to consider that basically
+
+00:06:17.749 --> 00:06:19.148
+if you do a face turn
+
+00:06:19.149 --> 00:06:22.428
+you end up swapping some facelets with other facelets,
+
+00:06:22.429 --> 00:06:26.028
+that's the easiest way to think about this.
+
+00:06:26.029 --> 00:06:29.268
+To determine which one goes into which one's position,
+
+00:06:29.269 --> 00:06:32.470
+it was pretty confusing to figure this out.
+
+00:06:32.471 --> 00:06:34.308
+For this I went through a few papers,
+
+00:06:34.309 --> 00:06:36.028
+and I found one which suggested
+
+00:06:36.029 --> 00:06:37.948
+to just build a cube out of paper,
+
+00:06:37.949 --> 00:06:40.028
+number every facelet, and turn it
+
+00:06:40.029 --> 00:06:44.348
+and keep track of which facelet moved into which position.
+
+00:06:44.349 --> 00:06:47.508
+And programmatically, the `cl-rotatef` macro
+
+00:06:47.509 --> 00:06:49.388
+was very, very useful for doing this kind of
+
+00:06:49.389 --> 00:06:51.628
+in-place swapping you need for this operation.
+
+00:06:51.629 --> 00:06:54.868
+So in the future, group theory would hopefully
+
+00:06:54.869 --> 00:06:57.988
+make this a bit less awkward.
+
+00:06:57.989 --> 00:07:00.108
+Here's a photo of this paper cube I made
+
+00:07:00.109 --> 00:07:03.868
+along with a real cube. As you can see
+
+00:07:03.869 --> 00:07:07.348
+mathematically speaking, they are the same thing,
+
+00:07:07.349 --> 00:07:09.268
+they just look very, very different.
+
+NOTE Scrambling
+
+00:07:09.269 --> 00:07:14.308
+So the scramble algorithm itself,
+
+00:07:14.309 --> 00:07:19.428
+I pondered how this would even be done. In the competitions,
+
+00:07:19.429 --> 00:07:21.588
+They do this in a very, very elaborate way.
+
+00:07:21.589 --> 00:07:22.748
+They generate a random cube,
+
+00:07:22.749 --> 00:07:25.388
+they try to solve it, and if it's solvable
+
+00:07:25.389 --> 00:07:28.548
+they use these solution moves
+
+00:07:28.549 --> 00:07:30.828
+to turn into a scramble basically.
+
+00:07:30.829 --> 00:07:34.948
+And they also make sure to canonicalize the moves,
+
+00:07:34.949 --> 00:07:38.548
+so if you have subsequent moves that can be simplified,
+
+00:07:38.549 --> 00:07:40.588
+they do simplify these as much as possible.
+
+00:07:40.589 --> 00:07:41.228
+For example,
+
+00:07:41.229 --> 00:07:43.748
+if you have two subsequent rotations in one direction,
+
+00:07:43.749 --> 00:07:46.668
+it's turned into a different kind of rotation,
+
+00:07:46.669 --> 00:07:49.388
+so 90 and 90 equals 180.
+
+00:07:49.389 --> 00:07:53.308
+And the other Elisp scramblers I looked at,
+
+00:07:53.309 --> 00:07:55.108
+they generate random moves.
+
+00:07:55.109 --> 00:07:57.508
+Some of them do canonicalize. Not all of them.
+
+00:07:57.509 --> 00:08:00.908
+This one tries to do the best low-fi thing,
+
+00:08:00.909 --> 00:08:02.388
+that is, generating random moves,
+
+00:08:02.389 --> 00:08:04.028
+canonicalizing and repeating
+
+00:08:04.029 --> 00:08:09.548
+until enough have been generated.
+
+NOTE Visualization
+
+00:08:09.549 --> 00:08:13.148
+For the visualization I had to figure out
+
+00:08:13.149 --> 00:08:14.508
+something else too complicated.
+
+00:08:14.509 --> 00:08:17.228
+For this, I tried to figure out
+
+00:08:17.229 --> 00:08:19.868
+where every facelift would end up in the puzzle view
+
+00:08:19.869 --> 00:08:21.428
+when you would unfold it.
+
+00:08:21.429 --> 00:08:25.668
+And for this, I did not consider the facelet orientation.
+
+00:08:25.669 --> 00:08:29.268
+This may be important later for some other puzzles
+
+00:08:29.269 --> 00:08:31.148
+where you can end up with very twisted faces,
+
+00:08:31.149 --> 00:08:33.028
+but for simple cubes, it's not a problem.
+
+00:08:33.029 --> 00:08:36.308
+My initial prototype used colored text,
+
+00:08:36.309 --> 00:08:38.748
+but later, I used the SVG library.
+
+00:08:38.749 --> 00:08:41.588
+It turned out to be easy enough to use, actually.
+
+00:08:41.589 --> 00:08:46.108
+Currently, I have hard-coded face-color mappings,
+
+00:08:46.109 --> 00:08:49.108
+but I plan to replace this so that theming is possible.
+
+00:08:49.109 --> 00:08:51.588
+For example, if you happen to have a cube
+
+00:08:51.589 --> 00:08:54.689
+that does not have the same color mappings as I do,
+
+00:08:54.690 --> 00:08:56.468
+then you should be able to fix this.
+
+NOTE UI with Transient
+
+00:08:56.469 --> 00:09:01.428
+Next challenge was to build
+
+00:09:01.429 --> 00:09:03.948
+a beautiful intuitive UI with Transient.
+
+00:09:03.949 --> 00:09:06.868
+The reason why I chose this is
+
+00:09:06.869 --> 00:09:10.348
+because it would be self-documenting and Magit-style,
+
+00:09:10.349 --> 00:09:12.348
+and everyone knows how Magit works basically.
+
+00:09:12.349 --> 00:09:15.308
+Since Transient has become part of Emacs,
+
+00:09:15.309 --> 00:09:17.228
+there is really no reason to not try it out.
+
+00:09:17.229 --> 00:09:21.668
+The problem was documentation is difficult to understand.
+
+00:09:21.669 --> 00:09:23.388
+It's very abstract and high level,
+
+00:09:23.389 --> 00:09:25.868
+and it's hard to figure out. "Okay,
+
+00:09:25.869 --> 00:09:26.788
+I want to do something,
+
+00:09:26.789 --> 00:09:28.908
+how am I supposed to do this?"
+
+00:09:28.909 --> 00:09:33.348
+I did find transient-showcase, which has lots of examples,
+
+00:09:33.349 --> 00:09:35.628
+but they don't really feel finished
+
+00:09:35.629 --> 00:09:39.068
+and not realistic enough.
+
+00:09:39.069 --> 00:09:40.748
+When I tried to use the package,
+
+00:09:40.749 --> 00:09:42.908
+I got plenty of unhelpful error messages
+
+00:09:42.909 --> 00:09:44.108
+when using it incorrectly.
+
+00:09:44.109 --> 00:09:45.948
+I did manage to figure it out,
+
+00:09:45.949 --> 00:09:50.588
+but I plan to find more actual examples of it,
+
+00:09:50.589 --> 00:09:53.428
+to have an executable reference basically
+
+00:09:53.429 --> 00:09:55.628
+and try to improve my use of it.
+
+NOTE Book-keeping with SQLite
+
+00:09:55.629 --> 00:10:01.548
+For the book-keeping, I used SQLite.
+
+00:10:01.549 --> 00:10:04.548
+This is a very recent addition to Emacs,
+
+00:10:04.549 --> 00:10:07.308
+it only appeared in the current major version.
+
+00:10:07.309 --> 00:10:09.388
+It's still very early days.
+
+00:10:09.389 --> 00:10:13.028
+I found some oddities, one of them turned out to be
+
+00:10:13.029 --> 00:10:14.828
+a bug in the transaction macro.
+
+00:10:14.829 --> 00:10:17.588
+Like basically, if you do an SQL transaction
+
+00:10:17.589 --> 00:10:20.188
+and an error happens, then every helper I found
+
+00:10:20.189 --> 00:10:20.948
+does a rollback on an error.
+
+00:10:20.949 --> 00:10:26.748
+But this one did not. It actually committed on an error,
+
+00:10:26.749 --> 00:10:29.868
+and this was very weird to figure out.
+
+00:10:29.869 --> 00:10:34.308
+I reported a bug. Eli was nice enough to send me a patch.
+
+00:10:34.309 --> 00:10:35.428
+We did some patch review,
+
+00:10:35.429 --> 00:10:37.988
+and he ended up fixing it properly.
+
+00:10:37.989 --> 00:10:45.668
+So yes, there's still a lot to be done there, and yeah,
+
+00:10:45.669 --> 00:10:46.908
+the API is very basic.
+
+00:10:46.909 --> 00:10:48.908
+You don't have convenience helpers
+
+00:10:48.909 --> 00:10:51.308
+like fetch the first row or fetch the first value
+
+00:10:51.309 --> 00:10:54.429
+or anything, but they're easy enough to write yourself.
+
+00:10:54.430 --> 00:10:56.369
+And the biggest challenge with this bookkeeping part
+
+00:10:56.370 --> 00:10:58.028
+was figuring out a decent schema,
+
+00:10:58.029 --> 00:11:00.148
+like how to organize data correctly
+
+00:11:00.149 --> 00:11:02.348
+so that it would not be awkward to manipulate.
+
+00:11:02.349 --> 00:11:05.748
+And with this, you can finally build a package
+
+00:11:05.749 --> 00:11:07.388
+that remembers its state properly
+
+00:11:07.389 --> 00:11:10.468
+and don't have to run into foot guns
+
+00:11:10.469 --> 00:11:12.628
+with Lisp-style serialization, deserialization.
+
+NOTE Conclusion
+
+00:11:12.629 --> 00:11:18.188
+So yes, that concludes it so far.
+
+00:11:18.189 --> 00:11:22.188
+So what did I learn from this exercise?
+
+00:11:22.189 --> 00:11:24.508
+Well, there are still plenty of packages
+
+00:11:24.509 --> 00:11:25.588
+for Emacs to be written.
+
+00:11:25.589 --> 00:11:28.908
+If you think everything you can think of
+
+00:11:28.909 --> 00:11:31.348
+or you need has already been written, well, guess what?
+
+00:11:31.349 --> 00:11:31.788
+No.
+
+00:11:31.789 --> 00:11:34.044
+These are still plenty of specialized things
+
+00:11:34.045 --> 00:11:36.788
+that could need your help.
+
+00:11:36.789 --> 00:11:39.788
+These cubes do not require advanced mathematics,
+
+00:11:39.789 --> 00:11:41.148
+contrary to what you may think.
+
+00:11:41.149 --> 00:11:44.708
+Yes, you can apply advanced mathematics to them
+
+00:11:44.709 --> 00:11:47.468
+if you want to, but you don't have to.
+
+00:11:47.469 --> 00:11:50.988
+What surprised me about this is basically group theory.
+
+00:11:50.989 --> 00:11:52.068
+I've heard of it before.
+
+00:11:52.069 --> 00:11:53.828
+It seemed to be a meme, basically,
+
+00:11:53.829 --> 00:11:56.468
+because it has been like mostly Haskell people
+
+00:11:56.469 --> 00:11:58.188
+being very excited about this
+
+00:11:58.189 --> 00:12:02.508
+and it seemed kind of, like, divorced from reality, basically.
+
+00:12:02.509 --> 00:12:05.948
+But this puzzle, it actually proves that yes,
+
+00:12:05.949 --> 00:12:06.948
+it has its use.
+
+00:12:06.949 --> 00:12:08.428
+It definitely has.
+
+00:12:08.429 --> 00:12:11.388
+You just have to find the right problem matching it,
+
+00:12:11.389 --> 00:12:13.468
+and yeah.
+
+00:12:13.469 --> 00:12:15.388
+So yeah, once I understand it better,
+
+00:12:15.389 --> 00:12:18.548
+the topic, I expect to write better code.
+
+00:12:18.549 --> 00:12:24.468
+These new Emacs features, they work well enough.
+
+00:12:24.469 --> 00:12:25.908
+There are some rough edges.
+
+00:12:25.909 --> 00:12:27.428
+They definitely need more testing.
+
+00:12:27.429 --> 00:12:30.668
+So please, please, everyone,
+
+00:12:30.669 --> 00:12:34.548
+if you write Elisp, please try SQLite or Transient
+
+00:12:34.549 --> 00:12:36.708
+or anything else that looks cool and shiny.
+
+00:12:36.709 --> 00:12:38.468
+Report bugs.
+
+00:12:38.469 --> 00:12:41.588
+Find ways to improve them, anything. And yeah,
+
+00:12:41.589 --> 00:12:44.868
+I'm sure that if we do this,
+
+00:12:44.869 --> 00:12:47.668
+then Emacs will continue to get even better.
+
+00:12:47.669 --> 00:12:51.788
+So yeah, what's next for this package?
+
+00:12:51.789 --> 00:12:55.988
+Well, I could... There are lots of obvious UI improvements
+
+00:12:55.989 --> 00:12:57.348
+and testing to be done.
+
+00:12:57.349 --> 00:12:59.708
+I basically want to reach feature parity
+
+00:12:59.709 --> 00:13:02.428
+with the twisty-timer app, which this is very much inspired by.
+
+00:13:02.429 --> 00:13:06.668
+I want nice-looking stats like graphical ones
+
+00:13:06.669 --> 00:13:08.788
+instead of just a simple list of times.
+
+00:13:08.789 --> 00:13:11.228
+And I want support for more puzzles, of course,
+
+00:13:11.229 --> 00:13:12.548
+not just the simple cubes,
+
+00:13:12.549 --> 00:13:14.588
+but as I progress learning these puzzles,
+
+00:13:14.589 --> 00:13:18.068
+I want to have Emacs supporting me for this.
+
+00:13:18.069 --> 00:13:22.428
+But generally, it's a very open-ended package.
+
+00:13:22.429 --> 00:13:26.628
+And this concludes the talk.
+
+00:13:26.629 --> 00:13:30.909
+Thank you very much.
diff --git a/2023/captions/emacsconf-2023-devel--emacs-development-updates--john-wiegley--main.vtt b/2023/captions/emacsconf-2023-devel--emacs-development-updates--john-wiegley--main.vtt
new file mode 100644
index 00000000..7a93ee4c
--- /dev/null
+++ b/2023/captions/emacsconf-2023-devel--emacs-development-updates--john-wiegley--main.vtt
@@ -0,0 +1,1652 @@
+WEBVTT
+
+
+00:00:02.419 --> 00:00:08.480
+2 seconds. All right. I think we are live.
+
+00:00:08.480 --> 00:00:10.280
+Yes. So, hi again, everyone.
+
+00:00:10.580 --> 00:00:13.620
+I have the pleasure to welcome John Wiegley
+
+00:00:13.620 --> 00:00:15.440
+in person to this EmacsConf.
+
+00:00:15.700 --> 00:00:17.260
+Hi, John. Hello there.
+
+00:00:17.680 --> 00:00:18.820
+How are you doing, Leo?
+
+00:00:18.820 --> 00:00:21.100
+I am doing fantastic, and even more now that
+
+00:00:21.100 --> 00:00:23.540
+I am in a room with you because we've been,
+
+00:00:24.279 --> 00:00:25.640
+we were reminiscing with Sacha.
+
+00:00:25.640 --> 00:00:30.860
+So you had been there in person in 2013 And
+
+00:00:30.860 --> 00:00:32.680
+since we started doing those online,
+
+00:00:32.680 --> 00:00:35.020
+Juan, since 2019, I think you've always been
+
+00:00:35.020 --> 00:00:38.460
+online, right? Usually it's a pre-recorded
+
+00:00:38.520 --> 00:00:40.440
+video. I think this will be the first 1 I do
+
+00:00:40.440 --> 00:00:42.540
+live in a long time. You're right.
+
+00:00:42.540 --> 00:00:44.239
+I'm saying we are online right now,
+
+00:00:44.239 --> 00:00:45.920
+but I just meant pre-recorded video.
+
+00:00:45.920 --> 00:00:48.400
+So it's good to have you almost in person or
+
+00:00:48.400 --> 00:00:50.900
+at least live and we are excited to hear
+
+00:00:50.900 --> 00:00:52.360
+about some of the Emacs news.
+
+00:00:52.360 --> 00:00:54.780
+So the floor is yours.
+
+00:00:55.080 --> 00:00:56.900
+All right, well welcome everybody.
+
+00:00:57.260 --> 00:01:00.239
+This is the yearly state of the Emacs union,
+
+00:01:00.239 --> 00:01:02.860
+I guess, about how Emacs development is
+
+00:01:02.860 --> 00:01:05.379
+going. Just to note, I am not currently a
+
+00:01:05.379 --> 00:01:07.760
+maintainer of Emacs. So what I do to get
+
+00:01:07.760 --> 00:01:09.920
+these notes is I call up my friend,
+
+00:01:09.920 --> 00:01:12.040
+Eli Zaretsky, 1 of the current Emacs
+
+00:01:12.040 --> 00:01:13.820
+maintainers, and he and I sit down for an
+
+00:01:13.820 --> 00:01:17.160
+hour, and he just gives me his dump of what's
+
+00:01:17.160 --> 00:01:19.400
+been going on. So I'm sort of just the
+
+00:01:19.400 --> 00:01:22.200
+messenger here. But thanks to Eli for these
+
+00:01:22.200 --> 00:01:24.400
+notes and all of the efforts that he
+
+00:01:24.400 --> 00:01:27.400
+contributes. So what he's been telling me is
+
+00:01:27.400 --> 00:01:30.060
+that this Emacs 29 release that we had
+
+00:01:30.060 --> 00:01:31.720
+recently looks to have been very,
+
+00:01:31.720 --> 00:01:33.580
+very successful, which is some good news,
+
+00:01:33.580 --> 00:01:35.420
+because there were a lot of new features,
+
+00:01:35.660 --> 00:01:37.360
+and some of those features were actually
+
+00:01:37.360 --> 00:01:39.520
+quite radical. So far,
+
+00:01:39.520 --> 00:01:40.680
+it's been quite a success,
+
+00:01:40.680 --> 00:01:42.440
+no serious problems with it,
+
+00:01:42.440 --> 00:01:44.080
+and we have Emacs 29.2
+
+00:01:45.140 --> 00:01:46.740
+will be released very soon.
+
+00:01:47.260 --> 00:01:50.020
+They are thinking now about starting the
+
+00:01:50.020 --> 00:01:53.080
+Emacs 30 release cycle soon after 29.2
+
+00:01:53.520 --> 00:01:55.880
+is released, where the release branch,
+
+00:01:55.880 --> 00:01:58.120
+which is called Emacs-30 usually,
+
+00:01:59.060 --> 00:02:01.400
+will be cut and then development will become
+
+00:02:01.400 --> 00:02:03.960
+frozen with only bug fixes going into that
+
+00:02:03.960 --> 00:02:07.200
+branch. That may take quite some time until
+
+00:02:07.200 --> 00:02:09.639
+it actually comes to fruition as a release,
+
+00:02:09.639 --> 00:02:11.660
+but at least it means that the release is
+
+00:02:11.660 --> 00:02:13.860
+going to start taking shape in that branch
+
+00:02:13.860 --> 00:02:17.720
+soon. So, for now, Emacs 30 looks like maybe
+
+00:02:17.720 --> 00:02:19.540
+it's going to be a little less interesting
+
+00:02:19.600 --> 00:02:23.160
+than Emacs 29 was, meaning not a huge number
+
+00:02:23.160 --> 00:02:25.120
+of changing features. But there are still
+
+00:02:25.120 --> 00:02:26.820
+some new things going in.
+
+00:02:26.980 --> 00:02:29.960
+So 1 of them is that Emacs 30 is going to
+
+00:02:29.960 --> 00:02:32.300
+have Android support. So you will be able to
+
+00:02:32.300 --> 00:02:34.900
+run Emacs 30 on your Android devices.
+
+00:02:35.140 --> 00:02:37.120
+So if you've ever wanted to have native Emacs
+
+00:02:37.120 --> 00:02:39.500
+on a tablet, which I know I've always wanted,
+
+00:02:40.140 --> 00:02:42.940
+that will become possible with Emacs 30.
+
+00:02:43.140 --> 00:02:45.480
+There's also going to be much better support
+
+00:02:45.480 --> 00:02:46.780
+for touchscreen devices,
+
+00:02:47.440 --> 00:02:50.260
+coincidentally, both laptops and tablets.
+
+00:02:50.740 --> 00:02:53.240
+So that'll enhance that Android support.
+
+00:02:54.860 --> 00:02:57.180
+There will be some recently gained support
+
+00:02:57.240 --> 00:03:01.720
+for LLDB in GUD.dl. So if you're on a Mac OS
+
+00:03:01.720 --> 00:03:05.580
+machine or a machine that uses just LLVM as
+
+00:03:05.580 --> 00:03:07.060
+part of the compilation process,
+
+00:03:07.400 --> 00:03:10.180
+then you probably are familiar with LLDB as
+
+00:03:10.180 --> 00:03:11.380
+the command line debugger.
+
+00:03:11.720 --> 00:03:14.940
+And that support for using LLDB through a GUD
+
+00:03:15.040 --> 00:03:17.320
+will become possible in Emacs 30.
+
+00:03:17.320 --> 00:03:19.000
+I'm looking forward to this actually quite a
+
+00:03:19.000 --> 00:03:22.620
+bit as well. C Perl mode is being deprecated,
+
+00:03:23.200 --> 00:03:25.920
+and all future work now is only being put
+
+00:03:25.920 --> 00:03:30.660
+towards C Perl mode. Another 1 is that there
+
+00:03:30.660 --> 00:03:33.000
+are going to be some new major modes based on
+
+00:03:33.000 --> 00:03:35.780
+TreeSitter. They will be for the languages
+
+00:03:35.860 --> 00:03:38.160
+Lua, Elixir, and HTML.
+
+00:03:38.800 --> 00:03:39.980
+And if you're not familiar,
+
+00:03:40.160 --> 00:03:42.620
+I think TreeSitter was introduced in Emacs
+
+00:03:42.620 --> 00:03:46.660
+29. It's a library that allows you to specify
+
+00:03:47.460 --> 00:03:49.900
+the grammar of a programming language as a
+
+00:03:49.900 --> 00:03:53.300
+BNF file, and I think using JavaScript,
+
+00:03:53.540 --> 00:03:56.600
+and then with that file as input to Emacs,
+
+00:03:56.600 --> 00:03:59.840
+it is then able to do syntax highlighting,
+
+00:04:00.940 --> 00:04:03.080
+syntax discovery, all of those things within
+
+00:04:03.080 --> 00:04:06.140
+Emacs without having to use elisp and regexps
+
+00:04:06.460 --> 00:04:08.300
+to discover the structure of the language.
+
+00:04:08.300 --> 00:04:10.440
+It defers the structure gathering to
+
+00:04:10.440 --> 00:04:13.420
+TreeSitter and then uses that information to
+
+00:04:13.420 --> 00:04:14.560
+navigate the language.
+
+00:04:15.200 --> 00:04:17.300
+So, As time goes on, you'll see more and more
+
+00:04:17.300 --> 00:04:19.540
+languages taking on TreeSetter support.
+
+00:04:19.540 --> 00:04:21.160
+So the next 3 coming up,
+
+00:04:21.160 --> 00:04:22.660
+Lua, Elixir, and HTML.
+
+00:04:24.060 --> 00:04:26.680
+And then the last feature for Emacs 30 is
+
+00:04:26.680 --> 00:04:29.860
+that the byte compiler will now detect and
+
+00:04:29.860 --> 00:04:32.920
+warn about many more questionable constructs.
+
+00:04:33.340 --> 00:04:35.300
+Things like empty macro bodies,
+
+00:04:35.740 --> 00:04:37.160
+missing lexical constructs,
+
+00:04:37.580 --> 00:04:40.220
+or say, condition case without any handlers.
+
+00:04:40.580 --> 00:04:43.340
+Just silly stuff that might litter the code,
+
+00:04:43.340 --> 00:04:45.180
+but now you'll get a warning about it from
+
+00:04:45.180 --> 00:04:46.920
+the byte compiler to help you clean up the
+
+00:04:46.920 --> 00:04:49.160
+code and get rid of those potential sites of
+
+00:04:49.160 --> 00:04:52.740
+error. So this is the main thing that will be
+
+00:04:52.740 --> 00:04:55.160
+worked on for Emacs 30 and what's looked like
+
+00:04:55.160 --> 00:04:56.400
+shaping up for the release.
+
+00:04:56.680 --> 00:04:58.940
+And also, he wanted me to announce that
+
+00:04:58.940 --> 00:05:01.340
+Stefan Kongas is now a new co-maintainer.
+
+00:05:01.980 --> 00:05:03.260
+And Stefan is, I believe,
+
+00:05:03.260 --> 00:05:05.500
+here with us in the conference and he'll be
+
+00:05:05.500 --> 00:05:07.940
+able, I hope, to help me answer any questions
+
+00:05:08.080 --> 00:05:10.120
+about future Emacs development because I'm
+
+00:05:10.120 --> 00:05:12.240
+not in the heat of it and don't have all
+
+00:05:12.240 --> 00:05:13.600
+those answers at the moment.
+
+00:05:14.580 --> 00:05:17.180
+So That is all there is as far as a
+
+00:05:17.180 --> 00:05:18.840
+development update for now.
+
+00:05:19.340 --> 00:05:21.980
+And I am available to take any questions.
+
+00:05:24.860 --> 00:05:26.200
+All right. Thank you so much,
+
+00:05:26.200 --> 00:05:29.340
+Sean, for being the messenger of all this
+
+00:05:29.340 --> 00:05:31.820
+good news. I mean, you did start by saying
+
+00:05:31.820 --> 00:05:33.480
+this would not be as exciting,
+
+00:05:33.600 --> 00:05:36.280
+perhaps, as prior releases of Emacs,
+
+00:05:36.280 --> 00:05:38.980
+but you then proceeded to say a lot of stuff
+
+00:05:38.980 --> 00:05:40.760
+that it felt very exciting to me.
+
+00:05:40.760 --> 00:05:43.620
+So good, good. Glad to hear that.
+
+00:05:44.540 --> 00:05:47.180
+Right. So we do have questions coming in
+
+00:05:47.180 --> 00:05:50.380
+already and again people the link is on IRC
+
+00:05:50.380 --> 00:05:52.120
+and also on the talks page if you want to
+
+00:05:52.120 --> 00:05:53.260
+start asking questions.
+
+00:05:53.480 --> 00:05:54.840
+So John what I'm going to do I'm going to
+
+00:05:54.840 --> 00:05:56.580
+read you the questions and then you can
+
+00:05:56.580 --> 00:05:58.300
+answer them. Is that okay with you?
+
+00:05:58.320 --> 00:06:01.620
+Absolutely. So starting with the first
+
+00:06:01.620 --> 00:06:04.440
+question which changes in recent Emacs
+
+00:06:04.440 --> 00:06:06.540
+releases are you enjoying using?
+
+00:06:08.360 --> 00:06:11.820
+I have really liked the visual line mode.
+
+00:06:13.140 --> 00:06:15.060
+I'm not sure how recent that is.
+
+00:06:15.060 --> 00:06:16.820
+Some of these features I only discovered
+
+00:06:16.840 --> 00:06:19.580
+quite late, the new display line number
+
+00:06:19.700 --> 00:06:21.380
+functionality, where it's much,
+
+00:06:21.380 --> 00:06:23.040
+much, much faster, and of course,
+
+00:06:23.040 --> 00:06:25.320
+native compilation. Native compilation has
+
+00:06:25.320 --> 00:06:27.360
+been quite brilliant for some of the larger
+
+00:06:27.360 --> 00:06:29.480
+packages that I use. I do a lot of stuff in
+
+00:06:29.480 --> 00:06:31.820
+Emacs. I use GNU's, I use E-Shell,
+
+00:06:31.820 --> 00:06:33.540
+I use Org Mode quite a lot.
+
+00:06:33.580 --> 00:06:36.100
+So native compilation has brought the user
+
+00:06:36.100 --> 00:06:39.960
+experience much closer to a modern app than
+
+00:06:39.960 --> 00:06:42.180
+some of the lagging and slowness that I might
+
+00:06:42.180 --> 00:06:43.580
+have experienced in the past.
+
+00:06:44.340 --> 00:06:47.180
+Definitely. Moving on to the next question.
+
+00:06:47.260 --> 00:06:49.200
+What do you think the future in the area of
+
+00:06:49.200 --> 00:06:51.040
+artificial intelligence from the developer
+
+00:06:51.060 --> 00:06:53.580
+point of view? Could you say that 1 more
+
+00:06:53.580 --> 00:06:54.876
+time? Your voice broke up a little bit.
+
+00:06:54.876 --> 00:06:55.025
+Oh, sorry. What do you think the future in
+
+00:06:55.025 --> 00:06:55.141
+the area of artificial intelligence from the
+
+00:06:55.141 --> 00:06:55.208
+developer point of view?
+
+00:06:55.208 --> 00:06:55.324
+Could you say that 1 more time?
+
+00:06:55.324 --> 00:06:55.440
+Your voice broke up a little bit.
+
+00:06:55.440 --> 00:06:58.100
+Oh, sorry. What do you think the future in
+
+00:06:58.100 --> 00:07:00.580
+the area of artificial intelligence from the
+
+00:07:00.580 --> 00:07:01.560
+developer point of view?
+
+00:07:01.560 --> 00:07:02.860
+It's also a shaky question,
+
+00:07:02.860 --> 00:07:04.500
+I think, but you get the point.
+
+00:07:04.960 --> 00:07:09.220
+I do use chat-gpt-shell inside of Emacs quite
+
+00:07:09.220 --> 00:07:10.920
+a bit, actually, when doing development in
+
+00:07:10.920 --> 00:07:12.440
+other languages. Just the other day,
+
+00:07:12.440 --> 00:07:15.200
+I was working on my Ledger accounting
+
+00:07:15.220 --> 00:07:18.080
+program, and I haven't done a lot of C++ in
+
+00:07:18.080 --> 00:07:21.180
+recent years. So I had forgotten how to
+
+00:07:21.180 --> 00:07:23.760
+exactly compare 2 strings only up to the
+
+00:07:23.760 --> 00:07:25.020
+length of the shortest string.
+
+00:07:25.020 --> 00:07:26.940
+I know I could have cranked that out just
+
+00:07:26.940 --> 00:07:28.740
+writing it C style, but I didn't remember
+
+00:07:28.740 --> 00:07:30.800
+what the current state of the art is for C++
+
+00:07:30.940 --> 00:07:33.460
+and the STL. So I just asked chatGPT.
+
+00:07:33.680 --> 00:07:36.140
+I asked the exact question that I just said
+
+00:07:36.140 --> 00:07:38.220
+to you and sure enough it popped out the
+
+00:07:38.220 --> 00:07:40.080
+one-liner that was exactly what I needed.
+
+00:07:40.080 --> 00:07:42.240
+So I think in terms of developer assistance,
+
+00:07:42.800 --> 00:07:45.820
+not having to keep all of standard libraries
+
+00:07:45.860 --> 00:07:47.460
+or common idioms in memory.
+
+00:07:47.520 --> 00:07:49.460
+I don't know if other people are familiar
+
+00:07:49.480 --> 00:07:51.080
+with Rosetta Stone projects.
+
+00:07:51.460 --> 00:07:53.680
+They're projects where you have say a hundred
+
+00:07:53.680 --> 00:07:55.780
+different languages and there's a particular
+
+00:07:55.860 --> 00:07:58.640
+question, say, how do I read a file and copy
+
+00:07:58.640 --> 00:07:59.720
+it to another location?
+
+00:07:59.820 --> 00:08:01.880
+And then it has an instance of doing that
+
+00:08:01.880 --> 00:08:03.820
+activity for every 1 of those languages.
+
+00:08:04.180 --> 00:08:05.140
+That's a great database,
+
+00:08:05.140 --> 00:08:07.160
+and I've used them quite a bit in the past
+
+00:08:07.160 --> 00:08:09.260
+for remembering how to do certain things,
+
+00:08:09.440 --> 00:08:12.540
+say, converting a string to UTF-8.
+
+00:08:13.280 --> 00:08:15.660
+I think that AI does a great job of
+
+00:08:15.660 --> 00:08:17.780
+completely replacing the need for databases
+
+00:08:17.900 --> 00:08:19.920
+like that because you can just ask how do I
+
+00:08:19.920 --> 00:08:21.980
+copy a convert a string to UTF-8.
+
+00:08:23.760 --> 00:08:27.440
+Yeah exactly and you know especially with
+
+00:08:27.440 --> 00:08:30.480
+languages which are tried well tried you know
+
+00:08:30.480 --> 00:08:32.360
+it's very easy to get an answer that is
+
+00:08:32.360 --> 00:08:34.940
+correct. But sometimes what I find bothersome
+
+00:08:34.940 --> 00:08:37.460
+with this type of coding,
+
+00:08:37.460 --> 00:08:39.840
+I think it's AI-aided coding,
+
+00:08:39.840 --> 00:08:40.820
+but it's still coding,
+
+00:08:41.120 --> 00:08:43.140
+is that, especially with C languages,
+
+00:08:43.140 --> 00:08:44.240
+sometimes you're going to end up with
+
+00:08:44.240 --> 00:08:45.860
+undefined behaviors and stuff like this just
+
+00:08:45.860 --> 00:08:47.900
+because other people have been doing it,
+
+00:08:47.900 --> 00:08:50.860
+not because the algorithm or the model was
+
+00:08:50.860 --> 00:08:53.680
+trained with data that dates back to 10 years
+
+00:08:53.680 --> 00:09:00.060
+ago. At the time, C++ was a little different.
+
+00:09:00.060 --> 00:09:01.400
+Anyway, I'm not here to talk,
+
+00:09:01.400 --> 00:09:03.960
+you are here to talk. Moving on to the next
+
+00:09:03.960 --> 00:09:06.560
+question. People already get to hear my voice
+
+00:09:06.560 --> 00:09:09.640
+plenty, whereas yours are much sparser.
+
+00:09:10.520 --> 00:09:13.580
+All right. So, what is the future of Emacs on
+
+00:09:13.580 --> 00:09:16.080
+macOS? I understand that there are too few
+
+00:09:16.080 --> 00:09:17.420
+developers for the platform.
+
+00:09:17.440 --> 00:09:21.600
+Is that still true? That's a good question.
+
+00:09:21.600 --> 00:09:23.620
+I don't know what the current statistics are.
+
+00:09:23.620 --> 00:09:27.040
+I've been a user of Emacs on Mac OS for
+
+00:09:27.040 --> 00:09:29.920
+decades now. It feels like the,
+
+00:09:30.140 --> 00:09:33.480
+There's also that Mac port version of Emacs,
+
+00:09:33.480 --> 00:09:35.920
+which builds Emacs more directly using the
+
+00:09:35.920 --> 00:09:37.860
+GUI libraries on the platform.
+
+00:09:38.300 --> 00:09:40.320
+That continues to be updated with every
+
+00:09:40.320 --> 00:09:42.040
+single new release that comes out.
+
+00:09:42.620 --> 00:09:45.220
+So I'd say that the support may not be as
+
+00:09:45.220 --> 00:09:47.540
+great as it is on Linux and other platforms,
+
+00:09:47.640 --> 00:09:50.500
+but to this day I haven't suffered from being
+
+00:09:50.500 --> 00:09:55.220
+a Mac user. Great. The only thing I remember
+
+00:09:55.240 --> 00:10:00.480
+about Emacs on macOS was that emojis made it
+
+00:10:00.480 --> 00:10:03.540
+inside the GUI first before they did it
+
+00:10:03.540 --> 00:10:05.820
+anywhere else. That's the 1 anecdote that I
+
+00:10:05.820 --> 00:10:09.520
+have on MacOS. Right. And historically that
+
+00:10:09.520 --> 00:10:12.720
+feature was removed in order to prevent Mac
+
+00:10:12.720 --> 00:10:14.840
+from having features that Linux did not.
+
+00:10:15.160 --> 00:10:16.860
+I didn't want to go into that point.
+
+00:10:16.860 --> 00:10:18.340
+I just wanted to mention the beginning of the
+
+00:10:18.340 --> 00:10:19.840
+anecdote and people can find it out.
+
+00:10:19.840 --> 00:10:22.040
+But yes, that's also what it led to.
+
+00:10:24.020 --> 00:10:25.340
+Moving on to the next question.
+
+00:10:25.640 --> 00:10:28.120
+Why aren't you contributing to Emacs anymore?
+
+00:10:28.140 --> 00:10:29.360
+Lack of time, I guess?
+
+00:10:30.240 --> 00:10:31.840
+Lack of time, primarily.
+
+00:10:32.300 --> 00:10:33.840
+Work has been very consuming.
+
+00:10:33.900 --> 00:10:36.020
+There are a lot of other projects and things
+
+00:10:36.020 --> 00:10:39.000
+that I like doing. I still find Emacs Lisp
+
+00:10:39.000 --> 00:10:40.460
+very, very fun to write.
+
+00:10:40.840 --> 00:10:43.260
+Just the other day, I was hacking up some
+
+00:10:43.260 --> 00:10:45.760
+extension macros for myself for org mode.
+
+00:10:45.920 --> 00:10:48.900
+But to have the time needed to sit down and
+
+00:10:48.900 --> 00:10:51.580
+design a whole new mode and work on it.
+
+00:10:51.580 --> 00:10:53.660
+I've been spending a lot of my time now in
+
+00:10:53.660 --> 00:10:55.580
+functional languages, especially theorem
+
+00:10:55.580 --> 00:10:57.840
+provers. I just find that so intellectually
+
+00:10:58.100 --> 00:10:59.620
+satisfying and interesting.
+
+00:11:00.400 --> 00:11:01.860
+Plus it pays a lot better.
+
+00:11:01.860 --> 00:11:03.680
+Never had a paying job as an Emacs list
+
+00:11:03.680 --> 00:11:06.420
+developer. So when it comes to now just being
+
+00:11:06.420 --> 00:11:08.380
+a fun language or a hobby language,
+
+00:11:08.420 --> 00:11:10.680
+it is relegated to the time that I have free
+
+00:11:10.680 --> 00:11:13.680
+when it's available. Right.
+
+00:11:13.700 --> 00:11:15.420
+Well, the good thing is that it's kind of
+
+00:11:15.420 --> 00:11:16.360
+like riding a bicycle,
+
+00:11:16.360 --> 00:11:17.980
+you know, writing a major mode,
+
+00:11:17.980 --> 00:11:20.160
+it comes back relatively quickly and still
+
+00:11:20.160 --> 00:11:22.600
+enjoyable. You know, the other day,
+
+00:11:22.600 --> 00:11:25.200
+actually, I took notes on a mode that I
+
+00:11:25.200 --> 00:11:28.100
+wanted to write. There's an app I use on the
+
+00:11:28.100 --> 00:11:30.060
+Mac called drafts, and I really love it.
+
+00:11:30.060 --> 00:11:31.460
+I use it all the time.
+
+00:11:31.720 --> 00:11:34.600
+I wanted to mimic the interface of this app
+
+00:11:34.600 --> 00:11:37.620
+in Emacs. So I could use Emacs as my drafts
+
+00:11:37.680 --> 00:11:40.060
+application rather than this separate 1.
+
+00:11:40.440 --> 00:11:42.720
+So I noted down all the different user
+
+00:11:42.720 --> 00:11:44.580
+parameters and how it should function and
+
+00:11:44.580 --> 00:11:47.240
+everything to describe the app to myself as
+
+00:11:47.240 --> 00:11:50.320
+sort of notes to get me started on that work
+
+00:11:50.320 --> 00:11:52.460
+when I did have free time to work on it.
+
+00:11:52.540 --> 00:11:54.760
+Somebody out there on the internet just saw
+
+00:11:54.760 --> 00:11:57.040
+these notes, because I keep a lot of my stuff
+
+00:11:57.040 --> 00:11:59.680
+on GitHub. They fed it to chat GPT,
+
+00:12:00.280 --> 00:12:01.960
+going back to your AI question.
+
+00:12:02.220 --> 00:12:04.540
+And they actually sent back to me a mode that
+
+00:12:04.540 --> 00:12:06.640
+implemented everything that I had said,
+
+00:12:06.820 --> 00:12:07.740
+which was effectively,
+
+00:12:08.200 --> 00:12:10.960
+chat GPT, seeing that what I had described
+
+00:12:10.960 --> 00:12:14.500
+was clear enough for it to derive most of the
+
+00:12:14.500 --> 00:12:16.560
+code that I would have wanted to write.
+
+00:12:16.560 --> 00:12:19.200
+So maybe, maybe another thing that AI can do
+
+00:12:19.200 --> 00:12:20.880
+is it can increase the value,
+
+00:12:21.340 --> 00:12:23.400
+the efficiency of my free time.
+
+00:12:24.360 --> 00:12:26.820
+Exactly. I think that's a wonderful point.
+
+00:12:27.120 --> 00:12:29.540
+And phrasing it as efficiency of free time is
+
+00:12:29.540 --> 00:12:31.360
+great because you still have the expertise,
+
+00:12:31.360 --> 00:12:33.420
+obviously, that you're mobilizing into the
+
+00:12:33.420 --> 00:12:35.560
+design that you're formulating to charge DPT,
+
+00:12:35.860 --> 00:12:37.680
+but then this expertise is turned into
+
+00:12:37.680 --> 00:12:39.060
+something that actually works.
+
+00:12:40.080 --> 00:12:41.780
+Perhaps we're all going to become software
+
+00:12:41.780 --> 00:12:42.980
+architects at some point,
+
+00:12:42.980 --> 00:12:45.800
+and then the busy work of actually coding the
+
+00:12:45.800 --> 00:12:48.760
+library and the software will be relegated to
+
+00:12:48.760 --> 00:12:51.000
+AI. That's an interesting future where we
+
+00:12:51.000 --> 00:12:55.240
+still, however, need to acquire the skills to
+
+00:12:55.240 --> 00:12:56.660
+know what is code, I suppose.
+
+00:12:56.660 --> 00:12:58.880
+But that's an interesting future to think of.
+
+00:13:00.940 --> 00:13:02.060
+A fairly long question.
+
+00:13:02.060 --> 00:13:04.280
+So 1 of the tricky things about running Emacs
+
+00:13:04.280 --> 00:13:06.900
+on Android is do you use anything that
+
+00:13:06.900 --> 00:13:08.320
+requires extra packages?
+
+00:13:08.420 --> 00:13:11.600
+Example like PDF tools with new PDF or going
+
+00:13:11.600 --> 00:13:13.820
+with a database, playing music or video with
+
+00:13:13.820 --> 00:13:15.840
+MPD or MPV on Bonga, LFeed.
+
+00:13:16.320 --> 00:13:17.900
+Do you run Emacs Termex,
+
+00:13:18.040 --> 00:13:20.200
+Emacs APK, Emacs in virtual machine?
+
+00:13:20.200 --> 00:13:22.420
+This is also the case on Emacs for Windows to
+
+00:13:22.420 --> 00:13:23.980
+a lesser degree. So summarizing,
+
+00:13:24.280 --> 00:13:27.240
+how do you make Emacs work on Android if you
+
+00:13:27.240 --> 00:13:30.040
+do not have the synergy of stuff that you
+
+00:13:30.040 --> 00:13:32.560
+usually find on Linux systems like MPV and
+
+00:13:32.560 --> 00:13:34.420
+all the fancy applications like this?
+
+00:13:35.340 --> 00:13:38.380
+It's a good question. Since I'm not an
+
+00:13:38.380 --> 00:13:40.460
+Android user and I've never tried running
+
+00:13:40.460 --> 00:13:42.020
+Emacs on Android platforms,
+
+00:13:42.100 --> 00:13:44.920
+I'm not sure what's available out there to
+
+00:13:44.920 --> 00:13:46.440
+plug Emacs into. I mean,
+
+00:13:46.440 --> 00:13:48.160
+effectively, that question comes down to
+
+00:13:48.160 --> 00:13:50.420
+external dependencies and system support.
+
+00:13:50.940 --> 00:13:53.320
+That would be a great question for Stefan or
+
+00:13:53.320 --> 00:13:55.740
+somebody who has tried using Emacs,
+
+00:13:56.200 --> 00:13:58.600
+the development version of Emacs on Android.
+
+00:14:00.660 --> 00:14:03.980
+Great. We'll put a pin in this for Stéphane
+
+00:14:04.540 --> 00:14:07.580
+afterwards. Great, so moving on to the next
+
+00:14:07.580 --> 00:14:09.860
+question. Will Org Tech someday become the
+
+00:14:09.860 --> 00:14:11.320
+default tech mode in Emacs?
+
+00:14:11.320 --> 00:14:14.880
+And if so, when? Will Org what become?
+
+00:14:15.240 --> 00:14:17.980
+Org Tech, you know, the LaTeX mode.
+
+00:14:19.120 --> 00:14:24.840
+I do not know. It's been a while since I've
+
+00:14:24.840 --> 00:14:26.880
+done LaTeX. It must have been like 4 years,
+
+00:14:26.880 --> 00:14:30.280
+but it was a pretty, the major mode for
+
+00:14:30.280 --> 00:14:32.560
+editing documents, like the state of the art
+
+00:14:32.560 --> 00:14:34.840
+for editing latex documents in Emacs.
+
+00:14:34.940 --> 00:14:36.320
+And apparently it's not default.
+
+00:14:36.340 --> 00:14:38.360
+I assume there's latex mode or something that
+
+00:14:38.360 --> 00:14:41.580
+is doing it. So were you saying octech,
+
+00:14:41.760 --> 00:14:45.020
+like A-U-C tech? Oh, did I not pronounce the
+
+00:14:45.020 --> 00:14:48.140
+C? Octech, yes. I thought you said org tech.
+
+00:14:48.140 --> 00:14:49.620
+I wasn't familiar with that.
+
+00:14:50.280 --> 00:14:52.540
+Octech is the only 1 I've ever used.
+
+00:14:52.640 --> 00:14:55.360
+I know there is a built-in LaTeX mode,
+
+00:14:55.580 --> 00:14:57.240
+but I've never used it.
+
+00:14:57.240 --> 00:14:59.140
+I always just download whatever the latest
+
+00:14:59.140 --> 00:15:01.160
+version of Org Tech is and use that.
+
+00:15:01.280 --> 00:15:03.840
+I don't know why it's not a standard package.
+
+00:15:03.840 --> 00:15:07.360
+Becoming a standard package has its own costs
+
+00:15:07.360 --> 00:15:09.860
+for the development cycle because it slows
+
+00:15:09.860 --> 00:15:11.740
+down release cycle quite a bit.
+
+00:15:12.120 --> 00:15:14.680
+It's now you have to create PRs that are
+
+00:15:14.680 --> 00:15:17.240
+reviewed by the Emacs Devel mailing list.
+
+00:15:17.620 --> 00:15:19.340
+It is a little more inertia.
+
+00:15:19.340 --> 00:15:21.680
+Of course, it gets you more distribution
+
+00:15:21.940 --> 00:15:24.020
+because it's a default package now,
+
+00:15:24.020 --> 00:15:26.100
+and everybody can be using that.
+
+00:15:26.140 --> 00:15:28.600
+But it's not something every developer
+
+00:15:28.660 --> 00:15:31.400
+decides to do. It took a few years,
+
+00:15:31.400 --> 00:15:34.620
+in fact, to get usePackage into Emacs core.
+
+00:15:34.660 --> 00:15:37.200
+And that only happened after it was so stable
+
+00:15:37.200 --> 00:15:39.360
+that it really wasn't receiving many changes
+
+00:15:39.360 --> 00:15:44.760
+anymore. Yeah, yeah it's it's the thing when
+
+00:15:44.760 --> 00:15:46.720
+you move into core you lose a lot of your
+
+00:15:46.720 --> 00:15:49.280
+agility in terms of how you're writing the
+
+00:15:49.280 --> 00:15:50.940
+code or how you expand code.
+
+00:15:51.300 --> 00:15:54.220
+That's why you have this vibrant community on
+
+00:15:54.220 --> 00:15:57.680
+Melpa compared to core but you know it
+
+00:15:57.740 --> 00:15:59.480
+doesn't necessarily ought to be this way it
+
+00:15:59.480 --> 00:16:02.320
+could be a little different you know And it
+
+00:16:02.320 --> 00:16:04.580
+feels like there's this repetition between
+
+00:16:04.760 --> 00:16:06.820
+repartition, sorry, between people developing
+
+00:16:06.820 --> 00:16:08.600
+for the core of Emacs and people developing
+
+00:16:08.600 --> 00:16:10.760
+on Melpa, but at the end of the day those 2
+
+00:16:10.760 --> 00:16:13.020
+groups are constantly talking to 1 another
+
+00:16:13.180 --> 00:16:15.240
+and taking cues from 1 another as well.
+
+00:16:15.240 --> 00:16:17.540
+So that's great. And there's of course...
+
+00:16:18.820 --> 00:16:21.880
+May I jump in about this particular question
+
+00:16:21.900 --> 00:16:25.080
+because I think I mean You know,
+
+00:16:25.080 --> 00:16:27.540
+Org Mode doesn't really have any problems
+
+00:16:27.540 --> 00:16:29.380
+with releases Correct.
+
+00:16:29.380 --> 00:16:32.820
+Just because it's distributed with Emacs so
+
+00:16:32.860 --> 00:16:35.020
+there is a difference between being in the
+
+00:16:35.020 --> 00:16:37.960
+core proper and being distributed with Emacs.
+
+00:16:38.520 --> 00:16:40.080
+And for something like use packages,
+
+00:16:40.080 --> 00:16:42.280
+it's really necessary to be in the core.
+
+00:16:42.600 --> 00:16:44.840
+But for something like major mode,
+
+00:16:45.060 --> 00:16:48.740
+it's a bit easier. That's a very very good
+
+00:16:48.740 --> 00:16:50.400
+point. Yeah, I'd forgotten about that
+
+00:16:50.400 --> 00:16:53.000
+distinction. Org mode does advance pretty
+
+00:16:53.000 --> 00:16:55.900
+rapidly and then it makes releases into the
+
+00:16:55.900 --> 00:16:59.640
+core distribution. Gianni,
+
+00:16:59.640 --> 00:17:01.480
+I believe you also wanted to say something
+
+00:17:01.480 --> 00:17:03.840
+before someone started jumped in with a
+
+00:17:03.840 --> 00:17:08.700
+question do you happen to remember okay
+
+00:17:08.700 --> 00:17:12.020
+that's fine I lost her to lost to their time
+
+00:17:12.560 --> 00:17:14.560
+I'll be moving on to the next question then
+
+00:17:15.700 --> 00:17:17.460
+and by the way feel free to interrupt us you
+
+00:17:17.460 --> 00:17:19.619
+know The whole point of this discussion is
+
+00:17:19.619 --> 00:17:21.140
+for you to ask questions to John Wheatley.
+
+00:17:21.140 --> 00:17:23.520
+So whether it be via the other pad or via
+
+00:17:23.520 --> 00:17:26.180
+BBB, choose your weapon.
+
+00:17:27.260 --> 00:17:28.820
+All right, moving on to the next question in
+
+00:17:28.820 --> 00:17:30.520
+the meantime. And we have about 7 minutes
+
+00:17:30.520 --> 00:17:32.760
+left of Q&A and then we'll be moving on to
+
+00:17:32.760 --> 00:17:35.780
+Stéphane. So, do you use other IDEs for
+
+00:17:35.780 --> 00:17:38.040
+theorem proving work, notably VS Code for
+
+00:17:38.040 --> 00:17:42.340
+Lean? Which languages and provers can or do
+
+00:17:42.340 --> 00:17:45.920
+you use Emacs for? I've only used Emacs.
+
+00:17:46.120 --> 00:17:49.840
+I've used Emacs for working with ACL 2,
+
+00:17:49.960 --> 00:17:53.480
+Coq, Agda, and Lean, and I really love
+
+00:17:53.480 --> 00:17:55.680
+Proof-General. Coq is my favorite language to
+
+00:17:55.680 --> 00:17:57.740
+be working in. Agda has really great support
+
+00:17:57.740 --> 00:17:59.540
+as well, has a very nice Emacs mode.
+
+00:17:59.540 --> 00:18:02.920
+I'm only just now starting to get into Lean
+
+00:18:02.920 --> 00:18:05.140
+4. So I have everything installed,
+
+00:18:05.280 --> 00:18:07.240
+but I haven't really started coding in
+
+00:18:07.240 --> 00:18:08.800
+earnest. I'm still reading a lot of the
+
+00:18:08.800 --> 00:18:10.920
+tutorials and learning a bit about the
+
+00:18:10.920 --> 00:18:13.440
+language. There was a while there where I
+
+00:18:13.440 --> 00:18:17.540
+used a IDE for ACL 2 that was outside of
+
+00:18:17.540 --> 00:18:19.920
+Emacs, only because it was the same IDE all
+
+00:18:19.920 --> 00:18:22.040
+my co-workers were using and it was easier to
+
+00:18:22.040 --> 00:18:24.240
+share tips and tricks with them.
+
+00:18:24.520 --> 00:18:28.240
+But yeah, no, I found Emacs to be a great
+
+00:18:28.240 --> 00:18:29.860
+home for doing theorem proving.
+
+00:18:32.120 --> 00:18:36.580
+Right. Next question. Can we see that AI
+
+00:18:36.580 --> 00:18:40.760
+generated draft? You know what you mentioned
+
+00:18:40.760 --> 00:18:43.420
+before about the draft that you then fed into
+
+00:18:43.420 --> 00:18:45.480
+ChargPT? Do you happen to have this draft
+
+00:18:45.480 --> 00:18:51.440
+anywhere? Let me see if it's still on GitHub.
+
+00:18:51.760 --> 00:18:54.300
+Just take me 1 second to take a look here.
+
+00:18:55.260 --> 00:18:59.820
+Take your time. The problem is I don't quite
+
+00:18:59.820 --> 00:19:01.820
+remember where I made the note.
+
+00:19:04.700 --> 00:19:07.260
+But no, I don't see it on GitHub,
+
+00:19:07.340 --> 00:19:09.840
+so I don't have it readily at hand.
+
+00:19:10.580 --> 00:19:13.240
+Well, that's fine. We'll be able to...
+
+00:19:13.520 --> 00:19:15.060
+Well, if you happen to find it,
+
+00:19:15.060 --> 00:19:17.280
+we'll make sure to add it on the pad and then
+
+00:19:17.280 --> 00:19:20.940
+on the talks page. And I think we would all
+
+00:19:20.940 --> 00:19:22.440
+be interested to see what this design
+
+00:19:22.440 --> 00:19:27.160
+document that actually made something work
+
+00:19:27.160 --> 00:19:28.980
+afterwards in JudgeDPT with Elisp.
+
+00:19:28.980 --> 00:19:30.720
+I'm very interested to see what it would do
+
+00:19:30.720 --> 00:19:32.720
+because I tend to be very interested about
+
+00:19:32.720 --> 00:19:34.780
+this type of stuff I had generated but I
+
+00:19:34.780 --> 00:19:36.860
+never thought about doing it with Elisp
+
+00:19:37.040 --> 00:19:39.000
+because somehow it feels like 2 different
+
+00:19:39.000 --> 00:19:41.020
+worlds, like Elisp is kind of from the past,
+
+00:19:41.260 --> 00:19:44.040
+don't going me wrong, I love it and I use it
+
+00:19:44.140 --> 00:19:46.920
+every day But it's 2 different parts of my
+
+00:19:46.920 --> 00:19:48.820
+brain that I didn't think about linking.
+
+00:19:48.820 --> 00:19:51.100
+So I'd be very excited to see this as well.
+
+00:19:53.040 --> 00:19:54.640
+Moving on to the next question.
+
+00:19:54.640 --> 00:19:56.980
+Oh, go on, please. I did find it.
+
+00:19:57.260 --> 00:20:01.080
+I'm gonna have to give it to you as a link
+
+00:20:01.080 --> 00:20:03.380
+here. Sure, you can do it on the blue button
+
+00:20:03.380 --> 00:20:05.900
+and I'll put it on the pad.
+
+00:20:10.160 --> 00:20:12.540
+I put it into the public chat for Bibi.
+
+00:20:12.960 --> 00:20:15.920
+Yes. So if anyone is interested,
+
+00:20:15.920 --> 00:20:18.280
+I'm putting it right in the answer to the
+
+00:20:18.280 --> 00:20:20.200
+question right here on my screen.
+
+00:20:20.200 --> 00:20:22.120
+So feel free to click on it and explore it.
+
+00:20:22.120 --> 00:20:23.680
+I'm kind of curious, so I'm gonna...
+
+00:20:23.680 --> 00:20:25.560
+Can I click it on stream and can we look at
+
+00:20:25.560 --> 00:20:26.620
+it a little bit together?
+
+00:20:26.740 --> 00:20:29.020
+Sure, sure. I haven't tried running it,
+
+00:20:29.020 --> 00:20:31.680
+I can't say for its fitness,
+
+00:20:31.680 --> 00:20:34.220
+but it's definitely enough of the groundwork
+
+00:20:34.400 --> 00:20:36.660
+done that it's absolutely an assistance.
+
+00:20:38.100 --> 00:20:40.260
+Right. Okay, so it's loading up right now?
+
+00:20:41.540 --> 00:20:42.620
+You can see my webcam,
+
+00:20:42.620 --> 00:20:45.680
+right? I can see your browser attempting to
+
+00:20:45.680 --> 00:20:47.360
+load. There we go. Okay,
+
+00:20:47.360 --> 00:20:50.060
+cool. So I'm not sure what GitHub is doing.
+
+00:20:50.060 --> 00:20:51.460
+Let me give it a little more room.
+
+00:20:51.460 --> 00:20:54.360
+The reactive setup is not working too well.
+
+00:20:57.260 --> 00:20:58.840
+Oh, I see. You're viewing the...
+
+00:20:59.540 --> 00:21:02.220
+I see. Can I see the file then?
+
+00:21:02.220 --> 00:21:04.020
+I should be able to see the file.
+
+00:21:06.460 --> 00:21:09.060
+I think he just mentions the code in that
+
+00:21:09.060 --> 00:21:11.640
+comment. So if there's a way to view only the
+
+00:21:11.640 --> 00:21:14.897
+comment it would make it clear.
+
+00:21:14.897 --> 00:21:16.660
+Right. Okay. I'm loading the file separately.
+
+00:21:17.320 --> 00:21:18.500
+I'm checking the time.
+
+00:21:18.740 --> 00:21:21.340
+We have about 3 minutes left and I think we
+
+00:21:21.340 --> 00:21:22.900
+have a question. In the meantime,
+
+00:21:22.900 --> 00:21:25.760
+whilst I show this, I'm gonna launch another
+
+00:21:25.760 --> 00:21:28.820
+question, which was about Drafts.
+
+00:21:29.440 --> 00:21:30.740
+You are carrying, you're talking about
+
+00:21:30.740 --> 00:21:32.480
+Drafts, but does that mean you're not using
+
+00:21:32.480 --> 00:21:35.920
+org anymore? Oh, no, I use org all the time.
+
+00:21:35.920 --> 00:21:38.100
+In fact, the way that I've configured drafts
+
+00:21:38.160 --> 00:21:40.580
+is that after I type the thing in the note
+
+00:21:40.580 --> 00:21:43.260
+into drafts, I hit a key and it creates an
+
+00:21:43.260 --> 00:21:45.420
+org mode capture item for it.
+
+00:21:45.540 --> 00:21:48.560
+The reason why I use Drafts instead of Emacs
+
+00:21:48.560 --> 00:21:50.660
+is because it's always available.
+
+00:21:51.100 --> 00:21:53.960
+If Emacs is currently doing some job for me,
+
+00:21:53.960 --> 00:21:56.340
+say I'm running some long-running subshell
+
+00:21:57.060 --> 00:21:59.440
+and the UI is frozen up whatnot,
+
+00:21:59.700 --> 00:22:02.360
+Drafts is always 100% of the time instantly
+
+00:22:02.360 --> 00:22:04.900
+available. So that's why I tend to then lean
+
+00:22:04.900 --> 00:22:07.920
+on it a bit, but all of the destination of
+
+00:22:07.920 --> 00:22:10.240
+that data is still Org Mode and everything
+
+00:22:10.240 --> 00:22:12.460
+that I do gets tracked through Org Mode.
+
+00:22:13.080 --> 00:22:16.160
+That's also why I wanted to implement the UI
+
+00:22:16.160 --> 00:22:18.800
+scheme of drafts in Emacs so that I could
+
+00:22:18.800 --> 00:22:20.860
+drop the use of this external application.
+
+00:22:21.540 --> 00:22:23.160
+And then, I mean, I would still have the
+
+00:22:23.160 --> 00:22:25.580
+problem of sometimes Emacs being unavailable,
+
+00:22:26.060 --> 00:22:30.040
+but I would pay that price in order to have
+
+00:22:30.040 --> 00:22:32.700
+that good UI of drafts inside Emacs.
+
+00:22:34.640 --> 00:22:37.700
+Great. I think we have,
+
+00:22:38.420 --> 00:22:39.720
+we might be too tight on time.
+
+00:22:39.720 --> 00:22:41.640
+We only have about 2 minutes and I need to
+
+00:22:41.640 --> 00:22:44.180
+jump room to go into Stephane's room as well.
+
+00:22:44.440 --> 00:22:47.380
+So John, where I get to thank you so much for
+
+00:22:47.380 --> 00:22:53.160
+taking the time to answer our questions,
+
+00:22:53.260 --> 00:22:55.040
+but also doing a little bit of reporting on
+
+00:22:55.040 --> 00:22:58.380
+the state of Emacs. And now we'll get to
+
+00:22:58.380 --> 00:22:59.280
+continue this with Stéphane.
+
+00:22:59.280 --> 00:23:01.300
+So do you have any last words for everyone,
+
+00:23:01.300 --> 00:23:03.660
+John? No, no. I look forward to hearing
+
+00:23:03.660 --> 00:23:06.420
+Stéphane speak. Okay, great.
+
+00:23:06.420 --> 00:23:07.360
+And we'll look forward,
+
+00:23:07.360 --> 00:23:09.300
+potentially, to having you again next year,
+
+00:23:10.520 --> 00:23:12.680
+potentially still doing news like this,
+
+00:23:12.980 --> 00:23:15.920
+and, fingers crossed, maybe having you live
+
+00:23:15.920 --> 00:23:18.660
+again. Maybe, maybe let's see what happens.
+
+00:23:19.700 --> 00:23:20.860
+All right, John. Thank you so much.
+
+00:23:20.860 --> 00:23:22.280
+Bye bye. Bye bye.
diff --git a/2023/captions/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--answers.vtt b/2023/captions/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--answers.vtt
new file mode 100644
index 00000000..28d655f0
--- /dev/null
+++ b/2023/captions/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--answers.vtt
@@ -0,0 +1,593 @@
+WEBVTT
+
+
+00:00:03.639 --> 00:00:04.019
+[Speaker 0]: Well, we have about, I think,
+
+00:00:06.339 --> 00:00:06.839
+10 or 15 minutes of on-stream Q&A time.
+
+00:00:10.320 --> 00:00:10.559
+But if there's more questions than that,
+
+00:00:11.420 --> 00:00:11.920
+people are welcome to stay.
+
+00:00:14.200 --> 00:00:14.639
+If Mike has the time to answer some more,
+
+00:00:15.060 --> 00:00:15.560
+then Awesome.
+
+00:00:20.920 --> 00:00:21.060
+[Speaker 1]: Yeah, I will be around for the rest of the
+
+00:00:22.440 --> 00:00:22.940
+conference. So I am spudpnds,
+
+00:00:26.580 --> 00:00:27.080
+which is spud upside down on IRC,
+
+00:00:29.640 --> 00:00:30.140
+if you want to hit me up on IRC.
+
+00:00:30.860 --> 00:00:31.360
+Nice.
+
+00:00:42.800 --> 00:00:43.300
+[Speaker 0]: I see we already have a question on the pad,
+
+00:00:45.920 --> 00:00:46.080
+and it is, did you develop a variant of your
+
+00:00:46.920 --> 00:00:47.420
+document for CentOS?
+
+00:00:52.840 --> 00:00:53.239
+[Speaker 1]: I did not. I have not messed with any other
+
+00:00:56.120 --> 00:00:56.620
+Red Hat distributions other than Fedora.
+
+00:00:59.960 --> 00:01:00.460
+I would like to expand the document out to
+
+00:01:05.740 --> 00:01:05.860
+Windows and to Mac OS as I think a lot of
+
+00:01:07.720 --> 00:01:07.960
+people really want to build Emacs on those
+
+00:01:09.840 --> 00:01:10.340
+platforms because it's much harder to get
+
+00:01:13.080 --> 00:01:13.580
+Emacs binaries running on those platforms.
+
+00:01:15.860 --> 00:01:16.080
+Although they're around on the internet it's
+
+00:01:17.320 --> 00:01:17.440
+not as bad as it used to be,
+
+00:01:19.280 --> 00:01:19.760
+but building Emacs is very,
+
+00:01:21.000 --> 00:01:21.160
+a very fun thing to do.
+
+00:01:22.760 --> 00:01:23.260
+And I encourage everybody to do that.
+
+00:01:46.160 --> 00:01:46.440
+[Speaker 0]: Right. We're also getting comments from folks
+
+00:01:46.800 --> 00:01:47.300
+here on BigBlueButton.
+
+00:01:49.640 --> 00:01:49.900
+EXC or Matt saying, great talk,
+
+00:01:51.140 --> 00:01:51.640
+good demonstration of what's possible.
+
+00:01:53.940 --> 00:01:54.240
+And Aaron thanking Mike,
+
+00:01:54.760 --> 00:01:55.260
+saying awesome presentation.
+
+00:01:56.880 --> 00:01:57.040
+And they missed the first few minutes and
+
+00:01:59.540 --> 00:01:59.720
+have to rewatch to get the portion that they
+
+00:01:59.720 --> 00:02:00.220
+missed.
+
+00:02:03.400 --> 00:02:03.700
+[Speaker 1]: I had a hard time cramming the entire talk
+
+00:02:08.220 --> 00:02:08.720
+into 40 minutes. So I spoke quickly.
+
+00:02:10.639 --> 00:02:10.919
+I have a feeling I may have left some folks
+
+00:02:12.540 --> 00:02:13.040
+behind who weren't paying close attention.
+
+00:02:16.020 --> 00:02:16.520
+So rewatching might help.
+
+00:02:18.920 --> 00:02:19.420
+[Speaker 0]: Oh, nice.
+
+00:02:24.920 --> 00:02:25.340
+[Speaker 1]: I noticed Matt said that he helps maintain
+
+00:02:27.440 --> 00:02:27.700
+the shell functionality or Babel and last
+
+00:02:30.240 --> 00:02:30.580
+March they added async evaluation into
+
+00:02:32.920 --> 00:02:33.340
+session code blocks. Very cool,
+
+00:02:34.680 --> 00:02:34.840
+especially when you're doing something that
+
+00:02:36.420 --> 00:02:36.820
+takes a long time. It would be nice if Emacs
+
+00:02:38.920 --> 00:02:39.060
+wasn't locked up. I will definitely have to
+
+00:02:50.220 --> 00:02:50.460
+check that out. I use this technique at work
+
+00:02:53.220 --> 00:02:53.360
+a lot, like when I write documents to how to
+
+00:02:55.900 --> 00:02:56.400
+explain things to coworkers and such.
+
+00:03:00.060 --> 00:03:00.300
+And 1 of the things I had to explain was how
+
+00:03:05.220 --> 00:03:05.720
+to build AWS MySQL databases and replicas,
+
+00:03:07.760 --> 00:03:08.260
+and how to build them with very specific
+
+00:03:09.960 --> 00:03:10.240
+parameters to work with the system called
+
+00:03:13.060 --> 00:03:13.320
+Vitesse. And when I was running that
+
+00:03:15.660 --> 00:03:16.160
+document, building these kinds of MySQL
+
+00:03:20.280 --> 00:03:20.640
+databases in AWS with lockup Emacs for 20,
+
+00:03:22.300 --> 00:03:22.800
+25 minutes at a time. So,
+
+00:03:26.060 --> 00:03:26.540
+yeah, I'm really excited about async
+
+00:03:26.540 --> 00:03:27.040
+evaluation.
+
+00:04:03.780 --> 00:04:04.020
+Totally. Oh yeah, Python mode I think has had
+
+00:04:05.600 --> 00:04:06.100
+async for shell blocks for a while.
+
+00:04:09.220 --> 00:04:09.720
+I think there's a third-party package at Elba
+
+00:04:11.260 --> 00:04:11.760
+that adds async support for that.
+
+00:04:16.360 --> 00:04:16.620
+But yeah, I explicitly wanted to make sure
+
+00:04:18.620 --> 00:04:18.959
+that it would work with super vanilla stuff.
+
+00:04:20.060 --> 00:04:20.560
+Oh, it's built in. I see.
+
+00:04:24.140 --> 00:04:24.280
+Yeah, I didn't realize it was built in for
+
+00:04:25.920 --> 00:04:26.420
+Python blocks. I'll have to check that out.
+
+00:04:27.800 --> 00:04:28.300
+There's so much Emacs.
+
+00:04:32.080 --> 00:04:32.240
+It's hard to wrap your head even around a
+
+00:04:34.900 --> 00:04:35.400
+tiny portion of it. It's such a deep topic.
+
+00:04:47.660 --> 00:04:48.160
+Looks like somebody in IRC said,
+
+00:04:50.220 --> 00:04:50.440
+I can't wait to add some of this stuff to my
+
+00:04:52.680 --> 00:04:53.180
+documents. And that really makes me happy.
+
+00:04:55.400 --> 00:04:55.640
+I hope people go out and write literate Org
+
+00:04:57.180 --> 00:04:57.680
+Mode documents that do amazing things.
+
+00:05:25.640 --> 00:05:26.040
+When's the next talk? We have like,
+
+00:05:30.900 --> 00:05:31.080
+[Speaker 0]: let's see. I think we have about 4 or 5
+
+00:05:32.960 --> 00:05:33.460
+minutes live on stream for Q&A.
+
+00:05:35.860 --> 00:05:36.360
+[Speaker 1]: Yeah, okay. Oh, here's the question.
+
+00:05:39.160 --> 00:05:39.320
+Blaine asks, are you running Emacs from the
+
+00:05:41.420 --> 00:05:41.760
+host machine? And yeah,
+
+00:05:43.940 --> 00:05:44.180
+so I'm running Emacs on the exact same
+
+00:05:46.560 --> 00:05:47.060
+machine that I'm building Emacs on.
+
+00:05:50.580 --> 00:05:50.900
+And I had first thought about doing that over
+
+00:05:53.440 --> 00:05:53.720
+Tramp. And I thought that would be a very
+
+00:05:55.360 --> 00:05:55.560
+cool demo to show how you could do that
+
+00:05:57.980 --> 00:05:58.180
+remotely on Tramp so you didn't need Emacs on
+
+00:06:03.160 --> 00:06:03.280
+the host machine. But I decided it would be a
+
+00:06:05.640 --> 00:06:05.780
+lot easier, and as I ran into a deadline to
+
+00:06:06.360 --> 00:06:06.860
+get the talk completed,
+
+00:06:08.900 --> 00:06:09.140
+I abandoned that notion for the
+
+00:06:09.880 --> 00:06:10.380
+straightforward approach.
+
+00:06:13.260 --> 00:06:13.760
+But ideally, I would spin up virtual machines
+
+00:06:16.980 --> 00:06:17.140
+and then using the Org Mode document and
+
+00:06:18.960 --> 00:06:19.440
+having Org Mode reach out to those machines
+
+00:06:20.440 --> 00:06:20.940
+via SSH and Tramp.
+
+00:06:33.400 --> 00:06:33.540
+Oh yeah, there's also a little bit of
+
+00:06:38.200 --> 00:06:38.440
+discussion on IRC about org macros and how
+
+00:06:39.720 --> 00:06:40.160
+they made their way into the document.
+
+00:06:42.540 --> 00:06:42.900
+And I remember when I first discovered org
+
+00:06:44.480 --> 00:06:44.980
+macros by reading the org mode documentation,
+
+00:06:47.360 --> 00:06:47.500
+I was really excited because I thought I
+
+00:06:49.860 --> 00:06:50.040
+could limit a lot of the boilerplate I end up
+
+00:06:51.900 --> 00:06:52.360
+typing. But as we discussed,
+
+00:06:54.760 --> 00:06:55.260
+ORD macros, I think, only work in 1 context
+
+00:06:56.380 --> 00:06:56.780
+in your ORD mode document,
+
+00:06:58.280 --> 00:06:58.780
+and I think that's in the pros section.
+
+00:07:03.740 --> 00:07:04.080
+So You can't resolve a macro inside a header
+
+00:07:06.600 --> 00:07:07.100
+arg, for example, or inside an options block.
+
+00:07:09.560 --> 00:07:09.960
+It would be awesome if macros worked
+
+00:07:12.280 --> 00:07:12.780
+everywhere, but I'm happy to have them just
+
+00:07:13.500 --> 00:07:14.000
+as they are now.
+
+00:07:22.960 --> 00:07:23.460
+[Speaker 0]: Indeed, they're very convenient.
+
+00:07:32.020 --> 00:07:32.260
+[Speaker 1]: And Blaine also says, thank you for showing
+
+00:07:33.420 --> 00:07:33.920
+what's possible with literate documentation.
+
+00:07:35.380 --> 00:07:35.660
+This is mind-blowing. Yeah,
+
+00:07:39.400 --> 00:07:39.640
+I think so too. I first saw this technique in
+
+00:07:41.020 --> 00:07:41.520
+Howard's video, Literate DevOps,
+
+00:07:44.720 --> 00:07:44.900
+and I remember I was just picking up parts of
+
+00:07:46.720 --> 00:07:47.040
+my mind after it exploded after having
+
+00:07:49.740 --> 00:07:49.860
+watched that video. So I wanted to do some of
+
+00:07:51.820 --> 00:07:52.040
+it myself, and that's where I came up with a
+
+00:07:54.020 --> 00:07:54.520
+couple different approaches to that.
+
+00:07:57.600 --> 00:07:57.800
+It's not just for, you know,
+
+00:07:59.060 --> 00:07:59.560
+making literate Emacs configurations.
+
+00:08:04.680 --> 00:08:04.920
+[Speaker 0]: For Sure. We have another remark slash
+
+00:08:07.260 --> 00:08:07.580
+question on the pad. Someone saying great
+
+00:08:09.800 --> 00:08:10.300
+presentation. The preparation is outstanding.
+
+00:08:12.520 --> 00:08:13.020
+And for someone like me that never touched
+
+00:08:14.040 --> 00:08:14.540
+the org-mux side of Emacs,
+
+00:08:17.040 --> 00:08:17.200
+What do you feel is the more complex part to
+
+00:08:19.120 --> 00:08:19.540
+tackle? You made it seem simple,
+
+00:08:20.500 --> 00:08:21.000
+but the complexity there.
+
+00:08:25.840 --> 00:08:26.340
+[Speaker 1]: Yeah. Just getting all of the configuration
+
+00:08:30.800 --> 00:08:31.300
+set up the way you want it is the hardest
+
+00:08:34.780 --> 00:08:35.280
+part. So some of the defaults are,
+
+00:08:37.120 --> 00:08:37.280
+you know, they don't look good when you
+
+00:08:39.320 --> 00:08:39.820
+render them out in LaTeX and finally PDF.
+
+00:08:42.039 --> 00:08:42.380
+And there's a lot of work to be done to tweak
+
+00:08:45.380 --> 00:08:45.780
+the LaTeX environment so it looks as pretty
+
+00:08:48.620 --> 00:08:48.940
+as you might want it. And then just Org Mode
+
+00:08:50.800 --> 00:08:51.300
+has a lot of knobs that you can tune,
+
+00:08:53.720 --> 00:08:54.020
+and they have a pretty large impact on how
+
+00:08:55.520 --> 00:08:56.020
+your document is exported.
+
+00:09:00.360 --> 00:09:00.680
+So I think the hardest part is just knowing
+
+00:09:03.820 --> 00:09:03.960
+what's possible and knowing where all the
+
+00:09:05.200 --> 00:09:05.700
+knobs are to tune and twist.
+
+00:09:10.240 --> 00:09:10.440
+[Speaker 0]: Got another question on the pad.
+
+00:09:12.040 --> 00:09:12.180
+And I think we have about a minute or so on
+
+00:09:13.740 --> 00:09:13.920
+the stream. So I'll read this question as
+
+00:09:15.160 --> 00:09:15.660
+well. But folks, you're welcome to continue
+
+00:09:17.560 --> 00:09:18.040
+on the pad or just come join here on BBB
+
+00:09:20.200 --> 00:09:20.320
+after myself and the stream move on to the
+
+00:09:23.100 --> 00:09:23.480
+next talk. Yeah, and the next question is,
+
+00:09:24.320 --> 00:09:24.720
+how do you normally debug,
+
+00:09:26.640 --> 00:09:27.100
+for example, view the logs or see failed
+
+00:09:29.440 --> 00:09:29.720
+statuses when the commands in the source
+
+00:09:32.020 --> 00:09:32.280
+blocks fail, especially if they output lots
+
+00:09:34.640 --> 00:09:34.780
+and lots of logs, and you need to see the
+
+00:09:35.640 --> 00:09:36.140
+full history of the build.
+
+00:09:39.520 --> 00:09:40.020
+[Speaker 1]: Yeah, so I see it in the messages buffer
+
+00:09:42.080 --> 00:09:42.580
+whenever I export a document.
+
+00:09:44.540 --> 00:09:44.700
+If there's a failure, that's typically where
+
+00:09:47.460 --> 00:09:47.640
+it's written to. And I will actually kill the
+
+00:09:49.960 --> 00:09:50.440
+messages buffer before I export so I know
+
+00:09:52.840 --> 00:09:53.200
+that only the messages in the buffer are for
+
+00:09:55.800 --> 00:09:55.960
+my given export and I mentioned that
+
+00:09:58.580 --> 00:09:58.780
+debugging trick where you name all of your
+
+00:10:00.720 --> 00:10:00.960
+org-mode source blocks So if there is a
+
+00:10:02.320 --> 00:10:02.820
+problem in 1 of the blocks,
+
+00:10:06.560 --> 00:10:07.060
+it'll actually tell you what the block,
+
+00:10:09.140 --> 00:10:09.640
+the name of the block the error occurred in.
+
+00:10:13.160 --> 00:10:13.360
+If you don't do that, it just gives you a
+
+00:10:14.800 --> 00:10:15.300
+position number in the buffer.
+
+00:10:18.620 --> 00:10:18.820
+And whenever I tried to convert those
+
+00:10:21.400 --> 00:10:21.540
+position numbers to actual places where the
+
+00:10:23.600 --> 00:10:23.760
+error occurred, it was never exactly where I
+
+00:10:24.640 --> 00:10:25.020
+suspected it would be.
+
+00:10:26.680 --> 00:10:27.180
+So I found that very difficult in debugging.
+
+00:10:29.800 --> 00:10:30.040
+So the only real debugging tip I have is name
+
+00:10:32.840 --> 00:10:33.120
+your source blocks, even if you don't refer
+
+00:10:33.480 --> 00:10:33.980
+to them later.
+
+00:10:39.860 --> 00:10:40.020
+[Speaker 0]: I think that's all the time we have on
+
+00:10:41.320 --> 00:10:41.520
+stream. And I also have to drop as well.
+
+00:10:42.540 --> 00:10:42.880
+But thanks again so much,
+
+00:10:46.160 --> 00:10:46.660
+Mike. And folks are welcome to come here and
+
+00:10:47.980 --> 00:10:48.480
+continue discussion here.
+
+00:10:52.600 --> 00:10:53.100
+Thanks again.
+
+00:21:45.060 --> 00:21:45.560
+[Speaker 1]: You
+
+00:22:00.060 --> 00:22:00.560
+Thank
+
+00:22:15.060 --> 00:22:15.560
+[Speaker 0]: you
+
+00:22:28.400 --> 00:22:28.900
+[Speaker 1]: for
+
+00:22:45.060 --> 00:22:45.560
+watching. You
+
+00:23:00.260 --> 00:23:00.760
+you
diff --git a/2023/captions/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--main--chapters.vtt b/2023/captions/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--main--chapters.vtt
new file mode 100644
index 00000000..33f318c5
--- /dev/null
+++ b/2023/captions/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--main--chapters.vtt
@@ -0,0 +1,71 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:57.760
+Introduction
+
+00:00:57.760 --> 00:02:14.080
+Org Babel and literate programming
+
+00:02:14.080 --> 00:04:53.479
+This presentation
+
+00:04:53.480 --> 00:06:55.779
+Getting started
+
+00:06:55.780 --> 00:07:23.499
+README
+
+00:07:23.500 --> 00:08:10.459
+Writing a code block
+
+00:08:10.460 --> 00:08:40.319
+:results none
+
+00:08:40.320 --> 00:10:36.959
+Confirmation
+
+00:10:36.960 --> 00:13:52.600
+Running blocks automatically
+
+00:13:53.000 --> 00:16:05.699
+Export options
+
+00:16:05.700 --> 00:17:25.739
+Substituting constants
+
+00:17:25.740 --> 00:20:02.960
+Getting the properties
+
+00:20:03.060 --> 00:21:05.239
+Macros
+
+00:21:05.240 --> 00:22:09.019
+Properties in practice
+
+00:22:09.020 --> 00:23:42.009
+Using a prefix
+
+00:23:42.010 --> 00:27:14.149
+Switching distributions
+
+00:27:14.150 --> 00:30:16.199
+A tour
+
+00:30:16.200 --> 00:31:09.249
+TeX and LaTeX
+
+00:31:09.250 --> 00:32:00.059
+Other prerequisites
+
+00:32:00.060 --> 00:36:20.609
+Caching
+
+00:36:20.610 --> 00:39:29.439
+Looking at the PDF
+
+00:39:29.440 --> 00:42:31.989
+Errors
+
+00:42:31.990 --> 00:42:45.200
+Final thoughts
diff --git a/2023/captions/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--main.vtt b/2023/captions/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--main.vtt
new file mode 100644
index 00000000..71fa30f7
--- /dev/null
+++ b/2023/captions/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--main.vtt
@@ -0,0 +1,2759 @@
+WEBVTT captioned by jc, checked by sachac
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:04.320
+Hello, everyone.
+
+00:00:04.320 --> 00:00:07.280
+This talk is on literate documentation
+
+00:00:07.280 --> 00:00:10.320
+with Emacs and org-mode.
+
+00:00:10.320 --> 00:00:12.080
+I'm going to take just a moment here
+
+00:00:12.080 --> 00:00:14.279
+to unpack what I just said.
+
+00:00:14.280 --> 00:00:17.800
+Emacs, as most of us probably already know,
+
+00:00:17.800 --> 00:00:21.360
+is a powerful text editor and list programming environment
+
+00:00:21.360 --> 00:00:23.480
+from the 1970s.
+
+00:00:23.480 --> 00:00:25.800
+Chances are, if you're attending this talk,
+
+00:00:25.800 --> 00:00:28.819
+you already know a bit about Emacs.
+
+00:00:28.820 --> 00:00:32.640
+org-mode is an Emacs major mode and authoring tool
+
+00:00:32.640 --> 00:00:36.360
+that helps you write documents in a plain text markup
+
+00:00:36.360 --> 00:00:37.739
+language called Org.
+
+00:00:37.740 --> 00:00:40.200
+These Org documents can be exported
+
+00:00:40.200 --> 00:00:42.520
+to a number of different document formats,
+
+00:00:42.520 --> 00:00:48.520
+like HTML, PDF, ODT, Markdown, and more.
+
+00:00:48.520 --> 00:00:51.160
+org-mode has a lot of features.
+
+00:00:51.160 --> 00:00:54.240
+It can be an outliner, a to-do list manager,
+
+00:00:54.240 --> 00:00:57.760
+an agenda, organizer, and much more.
+
+NOTE Org Babel and literate programming
+
+00:00:57.760 --> 00:00:59.600
+Today, we're going to be demonstrating
+
+00:00:59.600 --> 00:01:03.360
+what I consider to be org-mode's killer feature called
+
+00:01:03.360 --> 00:01:04.840
+Org Babel.
+
+00:01:04.840 --> 00:01:07.879
+Babel allows you to take human language prose,
+
+00:01:07.880 --> 00:01:11.400
+computer language source code blocks, and their outputs
+
+00:01:11.400 --> 00:01:13.840
+and weave them together seamlessly
+
+00:01:13.840 --> 00:01:16.160
+to form a cohesive document.
+
+00:01:16.160 --> 00:01:19.080
+It is seriously cool.
+
+00:01:19.080 --> 00:01:21.880
+Literate documentation is a play on the term
+
+00:01:21.880 --> 00:01:25.280
+literate programming, popularized by Donald Knuth
+
+00:01:25.280 --> 00:01:27.379
+in the early 1980s.
+
+00:01:27.380 --> 00:01:29.280
+Knuth's literate programming idea
+
+00:01:29.280 --> 00:01:31.920
+was that computer programs could be
+
+00:01:31.920 --> 00:01:34.880
+expressed in a natural language and be
+
+00:01:34.880 --> 00:01:38.800
+human-readable documents rather than written exclusively
+
+00:01:38.800 --> 00:01:40.799
+for machines to read.
+
+00:01:40.800 --> 00:01:43.000
+In a traditional program, you might
+
+00:01:43.000 --> 00:01:45.680
+have a bunch of machine-readable source code
+
+00:01:45.680 --> 00:01:48.560
+and a handful of human-readable comments,
+
+00:01:48.560 --> 00:01:51.600
+which attempt to describe what the program is doing.
+
+00:01:51.600 --> 00:01:54.360
+Literate programming flips this on its head.
+
+00:01:54.360 --> 00:01:56.680
+A literate program is a document that
+
+00:01:56.680 --> 00:02:01.160
+describes how the program works with machine-readable source
+
+00:02:01.160 --> 00:02:02.880
+code blocks inside of it.
+
+00:02:02.880 --> 00:02:04.800
+These source code blocks are later
+
+00:02:04.800 --> 00:02:08.440
+tangled out of the document and submitted to the machine
+
+00:02:08.440 --> 00:02:14.080
+either to be compiled or interpreted and ultimately run.
+
+NOTE This presentation
+
+00:02:14.080 --> 00:02:15.600
+Throughout this presentation, you'll
+
+00:02:15.600 --> 00:02:19.400
+see my browser window here on the left side of the screen.
+
+00:02:19.400 --> 00:02:22.240
+And on the right side, I've got a terminal session
+
+00:02:22.240 --> 00:02:23.960
+running tmux.
+
+00:02:23.960 --> 00:02:28.039
+This allows us to have a virtual terminal window connected
+
+00:02:28.040 --> 00:02:35.040
+to two separate Linux machines, one running Ubuntu Server 2204
+
+00:02:35.040 --> 00:02:39.720
+and another running Fedora Server 38.
+
+00:02:39.720 --> 00:02:43.240
+I've specifically chosen these two distributions for my demo
+
+00:02:43.440 --> 00:02:46.720
+because they are representative of the two dominant flavors
+
+00:02:46.720 --> 00:02:49.880
+of GNU Linux, Debian and RedHat.
+
+00:02:49.880 --> 00:02:53.120
+In both cases, these are bare-bones server additions
+
+00:02:53.120 --> 00:02:55.440
+with the stock packages installed.
+
+00:02:55.440 --> 00:03:00.200
+I've manually installed a few packages like Git, emacs-noex
+
+00:03:00.200 --> 00:03:04.000
+to get the terminal version of emacs, and tmux.
+
+00:03:04.000 --> 00:03:06.000
+But otherwise, these Linux installs
+
+00:03:06.000 --> 00:03:08.719
+are what you'd get right out of the box.
+
+00:03:08.720 --> 00:03:12.480
+For this demo, I've created a literate org-mode document
+
+00:03:12.480 --> 00:03:16.360
+that describes how to build GNU Emacs from its source code
+
+00:03:16.360 --> 00:03:19.939
+on both Debian and RedHat-based systems.
+
+00:03:19.940 --> 00:03:22.920
+While both operating systems are very similar,
+
+00:03:22.920 --> 00:03:25.440
+they differ substantially on which packages
+
+00:03:25.440 --> 00:03:29.080
+are installed out of the box, how optional packages are
+
+00:03:29.080 --> 00:03:32.600
+named, searched, and installed, and of course,
+
+00:03:32.600 --> 00:03:34.240
+the distributions have different names,
+
+00:03:34.240 --> 00:03:36.800
+like Ubuntu or Fedora.
+
+00:03:36.800 --> 00:03:39.200
+I chose building Emacs from source
+
+00:03:39.200 --> 00:03:41.640
+as a topic for this demonstration
+
+00:03:41.640 --> 00:03:43.800
+because while the process is largely
+
+00:03:43.800 --> 00:03:46.880
+the same on both RedHat and Debian,
+
+00:03:46.880 --> 00:03:49.360
+there are a lot of minor little differences
+
+00:03:49.360 --> 00:03:52.680
+that need to be accounted for, which really prohibits you
+
+00:03:52.680 --> 00:03:57.120
+from hard coding names of packages and package management
+
+00:03:57.120 --> 00:04:01.200
+tools and distributions into your document.
+
+00:04:01.200 --> 00:04:05.320
+I suppose you could create two versions of the same document,
+
+00:04:05.320 --> 00:04:09.960
+one specifically for RedHat and one specifically for Debian,
+
+00:04:09.960 --> 00:04:13.280
+but that would be really tedious to maintain.
+
+00:04:13.280 --> 00:04:16.280
+Like if, for example, you updated some prose
+
+00:04:16.280 --> 00:04:18.720
+in one document, you'd have to remember
+
+00:04:18.720 --> 00:04:20.280
+to do it in the other one too.
+
+00:04:20.280 --> 00:04:22.920
+And if you weren't careful, the two documents
+
+00:04:22.920 --> 00:04:25.259
+could drift out of sync.
+
+00:04:25.260 --> 00:04:27.720
+In this demo, I'll show you techniques
+
+00:04:27.720 --> 00:04:30.960
+for creating dynamic, literate documents that
+
+00:04:30.960 --> 00:04:34.619
+can change based on parameters and constants embedded
+
+00:04:34.620 --> 00:04:38.439
+into the non-exported regions of the document.
+
+00:04:38.440 --> 00:04:41.800
+I'll show how with a single org-mode source document,
+
+00:04:41.800 --> 00:04:44.800
+you can press a couple of keys to configure
+
+00:04:44.800 --> 00:04:48.720
+it to export a RedHat-specific version of my building
+
+00:04:48.720 --> 00:04:53.479
+Emacs from source essay or a Debian-specific version.
+
+NOTE Getting started
+
+00:04:53.480 --> 00:04:55.320
+All right, let's get started.
+
+00:04:55.320 --> 00:04:58.720
+We'll begin by firing up a new terminal Emacs session
+
+00:04:58.720 --> 00:05:00.639
+on my Ubuntu machine.
+
+00:05:00.640 --> 00:05:04.600
+Now, I installed Emacs on this machine using apt-get.
+
+00:05:04.600 --> 00:05:07.960
+And doing that, you get version 27.1,
+
+00:05:07.960 --> 00:05:10.640
+which is, hey, only two major versions
+
+00:05:10.640 --> 00:05:13.010
+behind the current version of Emacs.
+
+00:05:13.011 --> 00:05:15.000
+This is another reason why I thought
+
+00:05:15.000 --> 00:05:18.080
+writing a guide on how to build Emacs from source code
+
+00:05:18.080 --> 00:05:19.719
+might be a good idea.
+
+00:05:19.720 --> 00:05:22.720
+You can get a much newer version of Emacs on Ubuntu
+
+00:05:22.720 --> 00:05:25.800
+if you install it via Snap, but, uh, Snaps.
+
+00:05:25.800 --> 00:05:28.239
+Don't get me started.
+
+00:05:28.240 --> 00:05:30.921
+Now, I wanted to use a completely vanilla
+
+00:05:30.922 --> 00:05:34.619
+terminal mode install of Emacs for this demonstration
+
+00:05:34.620 --> 00:05:38.040
+because my personal Emacs config has a ton of packages
+
+00:05:38.040 --> 00:05:41.199
+installed and is heavily modified.
+
+00:05:41.200 --> 00:05:43.640
+I want folks to be able to follow along
+
+00:05:43.640 --> 00:05:47.579
+with a bog-standard, out-of-the-box Emacs config.
+
+00:05:47.580 --> 00:05:49.520
+The Emacs config on this Ubuntu machine
+
+00:05:49.520 --> 00:05:51.200
+has just two settings.
+
+00:05:51.200 --> 00:05:55.240
+I require org-tempo because my fingers are hardwired
+
+00:05:55.240 --> 00:05:58.719
+to use some of the handy shortcuts that it provides.
+
+00:05:58.720 --> 00:06:00.520
+And I also turn off the menu bar
+
+00:06:00.520 --> 00:06:03.139
+because I just can't stand to look at it.
+
+00:06:03.140 --> 00:06:07.040
+Let's begin by opening a file called buildemacs.org,
+
+00:06:07.040 --> 00:06:08.480
+which will be the source code
+
+00:06:08.480 --> 00:06:11.079
+for our literate org-mode document.
+
+00:06:11.080 --> 00:06:12.840
+Now, in preparation for this talk,
+
+00:06:12.840 --> 00:06:14.960
+I've already written this document,
+
+00:06:14.960 --> 00:06:17.979
+and we'll take a look at the finished product
+
+00:06:17.980 --> 00:06:19.160
+here in a bit, but let's first take a look
+
+00:06:19.160 --> 00:06:22.408
+at how we might approach this task.
+
+00:06:22.409 --> 00:06:24.400
+We'll start at the top of the document
+
+00:06:24.400 --> 00:06:27.119
+by filling out some export keywords.
+
+00:06:27.120 --> 00:06:30.520
+These keywords are something that every backend exporter,
+
+00:06:30.520 --> 00:06:35.000
+be it LaTeX or plain text or ODT or whatever, understands,
+
+00:06:35.000 --> 00:06:38.120
+and they're essentially document metadata.
+
+00:06:38.120 --> 00:06:42.120
+As you can see, I'm typing `#+`
+
+00:06:42.120 --> 00:06:43.760
+followed by a couple characters
+
+00:06:43.760 --> 00:06:45.880
+and then `M-TAB` to auto-complete.
+
+00:06:45.880 --> 00:06:50.360
+If you hit #+ by itself and then M-TAB,
+
+00:06:50.360 --> 00:06:53.119
+you can see all the possible completions.
+
+00:06:53.120 --> 00:06:55.779
+And as you can see, there's a lot.
+
+NOTE README
+
+00:06:55.780 --> 00:06:58.520
+The next thing we're gonna do is make a README section
+
+00:06:58.520 --> 00:06:59.760
+at the top of this document.
+
+00:06:59.760 --> 00:07:02.240
+This section is intended for folks
+
+00:07:02.240 --> 00:07:04.280
+who are looking at the org-mode document,
+
+00:07:04.280 --> 00:07:06.679
+trying to figure out what it's for.
+
+00:07:06.680 --> 00:07:09.600
+We don't want to actually export the section heading,
+
+00:07:09.600 --> 00:07:13.859
+so we're gonna tag it with the :noexport: tag.
+
+00:07:13.860 --> 00:07:15.640
+And then here, we just write something quick
+
+00:07:15.640 --> 00:07:17.760
+to let folks know that this document
+
+00:07:17.760 --> 00:07:19.800
+can potentially execute code
+
+00:07:19.800 --> 00:07:23.499
+and just a little something about what the document is for.
+
+NOTE Writing a code block
+
+00:07:23.500 --> 00:07:26.059
+Okay, so now that we've written some text,
+
+00:07:26.060 --> 00:07:29.599
+let's try our hand at writing a code block.
+
+00:07:29.600 --> 00:07:31.288
+I'm getting pretty sick of looking at
+
+00:07:31.289 --> 00:07:32.939
+the default Emacs theme.
+
+00:07:32.940 --> 00:07:35.440
+All that blue and purple in the document
+
+00:07:35.440 --> 00:07:37.879
+makes it look bruised.
+
+00:07:37.880 --> 00:07:40.320
+Let's make an Emacs Lisp code block
+
+00:07:40.320 --> 00:07:41.400
+that switches the theme
+
+00:07:41.400 --> 00:07:44.560
+to one of my favorite built-in themes, Leuven.
+
+00:07:44.560 --> 00:07:48.400
+Leuven was created by my man, Fabrice Niessen,
+
+00:07:48.400 --> 00:07:52.120
+who I personally have learned a ton of org-mode stuff about
+
+00:07:52.120 --> 00:07:54.039
+just by studying his work.
+
+00:07:54.040 --> 00:07:56.360
+Now, if we cruise back up to the code block,
+
+00:07:56.360 --> 00:07:58.840
+we should be able to hit `C-c C-c`,
+
+00:07:58.840 --> 00:08:00.379
+and have it execute.
+
+00:08:00.380 --> 00:08:03.880
+And there you have it, a high-contrast color theme
+
+00:08:03.880 --> 00:08:06.979
+that was designed to look great in org-mode.
+
+00:08:06.980 --> 00:08:08.080
+So that's great and all,
+
+00:08:08.080 --> 00:08:10.459
+but there are a couple of things I don't like.
+
+NOTE :results none
+
+00:08:10.460 --> 00:08:13.599
+First of all, we don't need to see a #+RESULTS block here,
+
+00:08:13.600 --> 00:08:15.280
+and that's because we're not really interested
+
+00:08:15.280 --> 00:08:18.720
+in what the Emacs Lisp function `load-theme` returns.
+
+00:08:18.720 --> 00:08:22.200
+I mean, it's great it returned t and all to indicate success,
+
+00:08:22.200 --> 00:08:23.720
+we just don't need to see it.
+
+00:08:23.720 --> 00:08:26.560
+We can slap a `:results none` header arg
+
+00:08:26.560 --> 00:08:30.039
+on the code block to keep things nice and clean.
+
+00:08:30.040 --> 00:08:32.560
+There are a lot of different header args,
+
+00:08:32.560 --> 00:08:35.360
+and I often confuse and misremember them.
+
+00:08:35.360 --> 00:08:38.920
+So I'll always refer back to the org-mode manual
+
+00:08:38.920 --> 00:08:40.319
+when working with them.
+
+NOTE Confirmation
+
+00:08:40.320 --> 00:08:42.160
+The second thing I don't like is that
+
+00:08:42.160 --> 00:08:45.999
+when we hit C-c C-c to execute the block,
+
+00:08:46.000 --> 00:08:49.600
+Emacs prompted us if we really wanted to run the block.
+
+00:08:49.600 --> 00:08:52.040
+Emacs Lisp is Emacs' mother tongue,
+
+00:08:52.040 --> 00:08:53.920
+and I don't wanna be hassled when speaking
+
+00:08:53.920 --> 00:08:55.379
+my native language.
+
+00:08:55.380 --> 00:08:57.520
+There's a variable that controls this
+
+00:08:57.520 --> 00:09:00.680
+called `org-confirm-babel-evaluate`.
+
+00:09:00.680 --> 00:09:03.960
+And this can be either set to t or nil
+
+00:09:03.960 --> 00:09:06.840
+to either always confirm or never confirm.
+
+00:09:06.840 --> 00:09:10.920
+If however, you provided a lambda, an anonymous function,
+
+00:09:10.920 --> 00:09:14.560
+Org will call your function with the name of the language
+
+00:09:14.560 --> 00:09:16.840
+and the source block that it's about to run.
+
+00:09:16.840 --> 00:09:19.080
+And your function can make the decision
+
+00:09:19.080 --> 00:09:24.200
+about if Emacs should ask you for confirmation or not.
+
+00:09:24.200 --> 00:09:27.840
+What I'm doing here is setting `org-confirm-babel-evaluate`
+
+00:09:27.840 --> 00:09:30.539
+as a "file local variable".
+
+00:09:30.540 --> 00:09:33.320
+This means whenever the file is opened by Emacs,
+
+00:09:33.320 --> 00:09:38.059
+it'll set this variable to be a lambda that returns nil,
+
+00:09:38.060 --> 00:09:42.859
+meaning don't confirm, on Elisp code blocks.
+
+00:09:42.860 --> 00:09:45.920
+As you can see, the variable is currently set
+
+00:09:45.920 --> 00:09:50.879
+to its default value of t, meaning always confirm.
+
+00:09:50.880 --> 00:09:53.640
+Now if we save the buffer, exit Emacs,
+
+00:09:53.640 --> 00:09:55.040
+and pop back in again,
+
+00:09:55.040 --> 00:10:00.120
+`org-confirm-babel-evaluate` should be set how we like it.
+
+00:10:00.120 --> 00:10:02.640
+We were however prompted for confirmation
+
+00:10:02.640 --> 00:10:04.400
+on setting the file-local variable,
+
+00:10:04.400 --> 00:10:06.280
+which controls if we're prompted
+
+00:10:06.280 --> 00:10:09.699
+for Elisp source code block evaluation.
+
+00:10:09.700 --> 00:10:12.679
+I feel like there's a Yo Dawg joke here somewhere.
+
+00:10:12.680 --> 00:10:15.240
+When we were prompted, we hit the exclamation mark,
+
+00:10:15.240 --> 00:10:18.400
+which automatically marks this variable as being safe.
+
+00:10:18.400 --> 00:10:21.520
+So you won't be bothered the next time you open this file.
+
+00:10:21.520 --> 00:10:26.760
+This variable is called `safe-local-variable-values`
+
+00:10:26.760 --> 00:10:29.560
+and if we pop over to our .emacs file,
+
+00:10:29.560 --> 00:10:32.520
+you can see that Emacs' customize tooling
+
+00:10:32.520 --> 00:10:36.959
+helpfully updated this variable in our config file for us.
+
+NOTE Running blocks automatically
+
+00:10:36.960 --> 00:10:38.120
+Now that's great and all,
+
+00:10:38.120 --> 00:10:42.120
+but I really don't like having to hit `C-c C-c`
+
+00:10:42.120 --> 00:10:45.160
+on that source block every time I open this document
+
+00:10:45.160 --> 00:10:47.739
+just to bring up the Leuven theme.
+
+00:10:47.740 --> 00:10:50.520
+Let's have this source block run automatically
+
+00:10:50.520 --> 00:10:53.179
+every time the document is opened.
+
+00:10:53.180 --> 00:10:54.999
+Now I know what you're thinking.
+
+00:10:55.000 --> 00:10:57.640
+Shouldn't you just put all of this configuration stuff
+
+00:10:57.640 --> 00:11:01.159
+in your .emacs file and keep it out of the document?
+
+00:11:01.160 --> 00:11:04.760
+Well, that's what I've done with my personal Emacs config,
+
+00:11:04.760 --> 00:11:08.160
+but we want this document to be able to be used by folks
+
+00:11:08.160 --> 00:11:11.040
+with a completely vanilla Emacs setup,
+
+00:11:11.040 --> 00:11:13.440
+or even a completely tricked out Emacs setup,
+
+00:11:13.440 --> 00:11:16.059
+so we can't assume anything.
+
+00:11:16.060 --> 00:11:19.800
+The idea is if the Emacs user who opens the document
+
+00:11:19.800 --> 00:11:22.400
+agrees to setting all of the variables
+
+00:11:22.400 --> 00:11:24.359
+and running all of the code within,
+
+00:11:24.360 --> 00:11:26.560
+they'll be able to export the document
+
+00:11:26.560 --> 00:11:28.840
+as well as run all of the code blocks inside of it
+
+00:11:28.840 --> 00:11:30.799
+just as we intended.
+
+00:11:30.800 --> 00:11:33.880
+And the differences in base Emacs configuration
+
+00:11:33.880 --> 00:11:35.979
+will be completely minimized.
+
+00:11:35.980 --> 00:11:39.080
+Now it's worth pointing out that the file-local variables
+
+00:11:39.080 --> 00:11:43.023
+we're setting here are local, in this case, buffer-local.
+
+00:11:43.024 --> 00:11:45.280
+The configuration we use in this document
+
+00:11:45.280 --> 00:11:48.280
+won't override someone's carefully constructed
+
+00:11:48.280 --> 00:11:49.499
+org-mode setup.
+
+00:11:49.500 --> 00:11:50.800
+The first thing we're gonna wanna do
+
+00:11:51.000 --> 00:11:53.080
+in order to make this block execute
+
+00:11:53.080 --> 00:11:55.988
+when the document is loaded is to give it a name.
+
+00:11:55.989 --> 00:11:58.800
+It's always a good idea to give every source block
+
+00:11:58.800 --> 00:12:01.337
+you create in your document a unique name,
+
+00:12:01.338 --> 00:12:03.400
+even if you don't refer to it elsewhere.
+
+00:12:03.700 --> 00:12:06.960
+I do this because when I'm debugging my documents,
+
+00:12:07.160 --> 00:12:10.019
+Emacs will prompt me about running a block.
+
+00:12:10.020 --> 00:12:12.960
+If the block has a name, Emacs mentions it,
+
+00:12:12.960 --> 00:12:15.960
+and I know there's a problem with the result caching
+
+00:12:15.960 --> 00:12:17.840
+or something with the "foo" block.
+
+00:12:17.840 --> 00:12:20.280
+But if the block doesn't have a name,
+
+00:12:20.280 --> 00:12:22.160
+it can be really hard to figure out
+
+00:12:22.160 --> 00:12:24.579
+which block Emacs is complaining about.
+
+00:12:24.580 --> 00:12:27.459
+So I always name my blocks.
+
+00:12:27.460 --> 00:12:30.360
+Now we're gonna add another file local variable,
+
+00:12:30.360 --> 00:12:32.115
+but this one is special.
+
+00:12:32.116 --> 00:12:34.360
+If your "variable"
+
+00:12:34.360 --> 00:12:36.320
+just happens to be named "eval",
+
+00:12:36.320 --> 00:12:38.760
+it means that Emacs should evaluate
+
+00:12:38.760 --> 00:12:40.800
+the Lisp expression that follows.
+
+00:12:40.800 --> 00:12:43.240
+Here we'll use the progn function
+
+00:12:43.240 --> 00:12:46.040
+to sequentially run two elisp functions
+
+00:12:46.040 --> 00:12:48.760
+and return the value of the last one executed.
+
+00:12:48.760 --> 00:12:53.320
+The first function is `org-babel-goto-named-source-block`,
+
+00:12:53.320 --> 00:12:55.440
+which jumps us to the startup block.
+
+00:12:55.440 --> 00:12:59.280
+The second one is `org-babel-execute-src-block`,
+
+00:12:59.280 --> 00:13:02.092
+which executes the current source block.
+
+00:13:02.093 --> 00:13:03.630
+That should get the job done.
+
+00:13:03.631 --> 00:13:05.840
+Now all we have to do is save the document,
+
+00:13:05.840 --> 00:13:08.199
+exit Emacs, jump back in,
+
+00:13:08.200 --> 00:13:10.280
+and once we've confirmed that we're willing
+
+00:13:10.280 --> 00:13:14.239
+to run the new "eval" line in our file local variables,
+
+00:13:14.240 --> 00:13:15.859
+we're good to go.
+
+00:13:15.860 --> 00:13:18.480
+Now if we want to add new configuration stuff
+
+00:13:18.480 --> 00:13:21.839
+to the document, we can just add it to the startup block
+
+00:13:21.840 --> 00:13:24.880
+and not have to muck about with confirmations
+
+00:13:24.880 --> 00:13:28.679
+or adding new file-local variables or whatever.
+
+00:13:28.680 --> 00:13:31.960
+And just like before, we'll let Emacs' customize system
+
+00:13:31.960 --> 00:13:34.939
+save this decision to our .emacs file.
+
+00:13:34.940 --> 00:13:37.760
+Now that all that business with confirmations,
+
+00:13:37.760 --> 00:13:40.080
+file-local variables, and the startup block
+
+00:13:40.080 --> 00:13:41.120
+are out of the way,
+
+00:13:41.120 --> 00:13:44.120
+we can get on with writing our introduction.
+
+00:13:44.120 --> 00:13:47.880
+We'll create a new top level headline called introduction
+
+00:13:47.880 --> 00:13:51.440
+and explain to the reader of the exported document
+
+00:13:51.440 --> 00:13:52.600
+what this is all about.
+
+NOTE Export options
+
+00:13:53.000 --> 00:13:55.640
+Now as you can see, we've actually hard-coded
+
+00:13:55.640 --> 00:13:58.280
+the name of the Linux distro in our prose.
+
+00:13:58.280 --> 00:14:00.880
+I promised you a single document that could be
+
+00:14:00.880 --> 00:14:03.720
+for either RedHat or Debian distros,
+
+00:14:03.720 --> 00:14:05.319
+so we can't have this.
+
+00:14:05.320 --> 00:14:08.840
+Astute members in the audience have probably been uneasy
+
+00:14:08.840 --> 00:14:11.280
+ever since I hard coded the name "Debian"
+
+00:14:11.280 --> 00:14:13.859
+in the README section above.
+
+00:14:13.860 --> 00:14:17.520
+One way of solving this problem is by using exclude tags.
+
+00:14:17.520 --> 00:14:21.960
+Let's add the `#+EXCLUDE_TAGS` export keyword to our document.
+
+00:14:21.960 --> 00:14:24.200
+This keyword tells the exporter,
+
+00:14:24.200 --> 00:14:27.959
+"Hey, if you see a headline tagged with any of these tags,
+
+00:14:27.960 --> 00:14:29.600
+don't export it."
+
+00:14:29.600 --> 00:14:33.559
+By default, the tag `:noexport:` is excluded.
+
+00:14:33.560 --> 00:14:36.480
+And if you'll notice, we tagged our README section
+
+00:14:36.480 --> 00:14:38.360
+with that tag, so it doesn't show up
+
+00:14:38.360 --> 00:14:40.339
+in the exported document.
+
+00:14:40.340 --> 00:14:42.280
+We'll keep this tag in the list,
+
+00:14:42.280 --> 00:14:47.080
+but we'll also add the tag `:redhat:` as a tag to exclude.
+
+00:14:47.080 --> 00:14:50.400
+Now it's just a matter of creating two introduction
+
+00:14:50.400 --> 00:14:53.960
+sections, one for Debian, one for RedHat.
+
+00:14:53.960 --> 00:14:56.520
+And if you want the RedHat version of the document,
+
+00:14:56.520 --> 00:14:59.200
+you can just modify the `#+EXCLUDE_TAGS` line
+
+00:14:59.200 --> 00:15:00.440
+at the top of the document.
+
+00:15:00.440 --> 00:15:02.339
+Awesome, right?
+
+00:15:02.340 --> 00:15:03.539
+Right?
+
+00:15:03.540 --> 00:15:05.544
+OK, this is not that great.
+
+00:15:05.545 --> 00:15:07.387
+Well, it does work.
+
+00:15:07.388 --> 00:15:10.081
+And you can see if we export the document,
+
+00:15:10.082 --> 00:15:12.840
+we'll get something that only references Debian,
+
+00:15:12.840 --> 00:15:15.188
+and the `:noexport:` and `:redhat:`
+
+00:15:15.189 --> 00:15:17.450
+tagged headlines are omitted.
+
+00:15:17.451 --> 00:15:19.319
+This strategy would work great
+
+00:15:19.320 --> 00:15:22.120
+when the RedHat- and Debian-specific sections
+
+00:15:22.120 --> 00:15:24.400
+are substantially different, but that's not
+
+00:15:24.400 --> 00:15:26.198
+the case with the introduction.
+
+00:15:26.199 --> 00:15:28.640
+We definitely don't want to have to maintain
+
+00:15:28.640 --> 00:15:30.824
+two distinct introductions.
+
+00:15:30.825 --> 00:15:34.080
+I also noticed that the export tags are included
+
+00:15:34.080 --> 00:15:36.519
+in the exported document.
+
+00:15:36.520 --> 00:15:38.720
+That's a terrible default. We'll fix that,
+
+00:15:38.720 --> 00:15:42.040
+and we'll also ensure that my email address appears
+
+00:15:42.040 --> 00:15:43.371
+at the top of the document.
+
+00:15:43.372 --> 00:15:45.440
+Let's also take this opportunity to get rid
+
+00:15:45.440 --> 00:15:47.354
+of the table of contents.
+
+00:15:47.355 --> 00:15:48.867
+We don't need it.
+
+00:15:48.868 --> 00:15:51.120
+These are all export option settings
+
+00:15:51.120 --> 00:15:53.800
+and can be modified using the options keyword
+
+00:15:53.800 --> 00:15:55.508
+at the top of the doc.
+
+00:15:55.509 --> 00:15:57.480
+The manual is really your friend here,
+
+00:15:57.480 --> 00:16:00.979
+as there are a ton of export options.
+
+00:16:00.980 --> 00:16:03.120
+Now when we export the document again,
+
+00:16:03.120 --> 00:16:05.699
+it should look a lot better.
+
+NOTE Substituting constants
+
+00:16:05.700 --> 00:16:09.059
+Now that we've cleaned up the look of the exported document,
+
+00:16:09.060 --> 00:16:10.640
+we'll take a look at a better way
+
+00:16:10.640 --> 00:16:13.377
+of solving the problem with the introduction.
+
+00:16:13.378 --> 00:16:15.518
+Thinking like a programmer for a moment,
+
+00:16:15.519 --> 00:16:19.734
+what I really want here is a way of specifying a constant.
+
+00:16:19.735 --> 00:16:22.640
+Rather than hard-coding the name "Debian" or "RedHat"
+
+00:16:22.640 --> 00:16:24.569
+or whatever into my document,
+
+00:16:24.570 --> 00:16:28.234
+I want to substitute that text with a symbolic constant,
+
+00:16:28.235 --> 00:16:31.960
+named something like "distro", that can dynamically change
+
+00:16:31.960 --> 00:16:36.120
+to "Debian" or "RedHat" or "Slackware" or whatever,
+
+00:16:36.120 --> 00:16:38.689
+depending on how the document is configured.
+
+00:16:38.690 --> 00:16:41.640
+In the past, I've come up with some pretty cumbersome ways
+
+00:16:41.640 --> 00:16:44.640
+of doing this, but eventually I stumbled upon the idea
+
+00:16:44.640 --> 00:16:46.639
+of using Org-mode properties
+
+00:16:46.640 --> 00:16:49.409
+as a way of storing these constants.
+
+00:16:49.410 --> 00:16:53.059
+Like it says in the docs, properties are key-value pairs
+
+00:16:53.060 --> 00:16:55.169
+that are associated with an entry
+
+00:16:55.170 --> 00:16:58.379
+and they live in a collapsible properties drawer.
+
+00:16:58.380 --> 00:17:00.699
+Let's do a bit of cleanup on our document
+
+00:17:00.700 --> 00:17:02.600
+and we'll put things into sections.
+
+00:17:02.600 --> 00:17:14.000
+We'll also add a section for document constants.
+
+00:17:14.000 --> 00:17:19.560
+And that's where we'll put the properties drawer
+
+00:17:19.560 --> 00:17:25.739
+with the "distro" property.
+
+NOTE Getting the properties
+
+00:17:25.740 --> 00:17:27.120
+Now the question is,
+
+00:17:27.120 --> 00:17:30.099
+how do we reference these properties in the document?
+
+00:17:30.100 --> 00:17:32.520
+It turns out there's an Elisp function
+
+00:17:32.520 --> 00:17:35.440
+called `org-property-values`, which does what we want.
+
+00:17:35.440 --> 00:17:38.840
+If we run it and give it the name of our property,
+
+00:17:38.840 --> 00:17:42.679
+it returns a list with the string "Debian" in it.
+
+00:17:42.680 --> 00:17:45.919
+It's worth noting that this function is named
+
+00:17:45.920 --> 00:17:49.989
+`org-property-values` with values being plural.
+
+00:17:49.990 --> 00:17:52.889
+In org-mode, there could be a property named "foo"
+
+00:17:52.890 --> 00:17:55.880
+that has different values depending on which heading level
+
+00:17:55.880 --> 00:17:57.609
+you're at in the document,
+
+00:17:57.610 --> 00:17:59.720
+which is why the function returns a list.
+
+00:17:59.720 --> 00:18:01.289
+For our purposes though,
+
+00:18:01.290 --> 00:18:04.480
+we can just pull off the first value in the list with car
+
+00:18:04.480 --> 00:18:05.680
+and we're good to go.
+
+00:18:05.680 --> 00:18:10.040
+Now we'll make an Emacs Lisp list function called `get_prop`
+
+00:18:10.040 --> 00:18:11.440
+that does just that.
+
+00:18:11.440 --> 00:18:14.160
+This function takes one argument called `prop`,
+
+00:18:14.160 --> 00:18:15.920
+which is the property to look up
+
+00:18:15.920 --> 00:18:18.519
+and we'll give it a default value of "distro".
+
+00:18:18.520 --> 00:18:20.960
+So we can hit `C-c C-c` on the block
+
+00:18:20.960 --> 00:18:23.149
+to verify that it works.
+
+00:18:23.150 --> 00:18:25.480
+Now we just have to make an inline call
+
+00:18:25.480 --> 00:18:26.920
+to our `get_prop` function
+
+00:18:26.920 --> 00:18:29.559
+within the prose of the introduction section.
+
+00:18:29.560 --> 00:18:31.659
+And that should get us much closer
+
+00:18:31.660 --> 00:18:35.619
+to not hard coding distro names into our document.
+
+00:18:35.620 --> 00:18:36.869
+But before we do that,
+
+00:18:36.870 --> 00:18:39.849
+I need to clean up something that's been bothering me.
+
+00:18:39.850 --> 00:18:42.909
+By default, Emacs' `fill-column` variable
+
+00:18:42.910 --> 00:18:44.989
+is set to 70 characters,
+
+00:18:44.990 --> 00:18:47.720
+which may have been appropriate for 1970,
+
+00:18:47.720 --> 00:18:51.319
+but it's not great for 2023.
+
+00:18:51.320 --> 00:18:53.920
+We'll just cruise up to our startup block
+
+00:18:53.920 --> 00:18:56.539
+and set the variable there.
+
+00:18:56.540 --> 00:18:58.800
+We'll hit `C-c C-c`,
+
+00:18:58.800 --> 00:19:02.289
+and now our document will wrap at 100 columns,
+
+00:19:02.290 --> 00:19:05.829
+which for our purposes, I think is much more reasonable.
+
+00:19:05.830 --> 00:19:09.320
+The org-mode syntax for making an inline function call
+
+00:19:09.320 --> 00:19:13.059
+within the prose of your document is `call_`,
+
+00:19:13.060 --> 00:19:15.000
+followed by the name of the function,
+
+00:19:15.000 --> 00:19:17.040
+some optional header arguments,
+
+00:19:17.040 --> 00:19:19.719
+and then the function arguments.
+
+00:19:19.720 --> 00:19:21.680
+Now, when we export the document,
+
+00:19:21.680 --> 00:19:26.049
+we see that it's replaced our previously hard coded "Debian"
+
+00:19:26.050 --> 00:19:29.409
+with the value from the property. Huzzah!
+
+00:19:29.410 --> 00:19:32.959
+Now this is close to, but not exactly what we want.
+
+00:19:32.960 --> 00:19:36.720
+You can see that "Debian" is surrounded by a backtick
+
+00:19:36.720 --> 00:19:37.800
+and a single quote,
+
+00:19:37.800 --> 00:19:40.320
+which is the plain text exporters way
+
+00:19:40.320 --> 00:19:43.029
+of showing you verbatim text.
+
+00:19:43.030 --> 00:19:45.600
+In more sophisticated document backends,
+
+00:19:45.600 --> 00:19:49.379
+verbatim text is rendered in monospace.
+
+00:19:49.380 --> 00:19:54.080
+We can fix that by adding a ":results raw" header argument
+
+00:19:54.080 --> 00:19:56.459
+to the inline call.
+
+00:19:56.460 --> 00:19:58.239
+Now, when we export the document,
+
+00:19:58.240 --> 00:20:00.289
+it looks like what we'd expect.
+
+00:20:00.290 --> 00:20:02.960
+Now this is getting better, but it's still not great.
+
+NOTE Macros
+
+00:20:03.060 --> 00:20:05.840
+The `call_` syntax is pretty cumbersome,
+
+00:20:05.840 --> 00:20:08.560
+and it's a lot to type every time we want
+
+00:20:08.560 --> 00:20:09.849
+to reference a constant
+
+00:20:09.850 --> 00:20:13.219
+and not have it be marked up as verbatim.
+
+00:20:13.220 --> 00:20:17.169
+This is where org-mode macros come to our rescue.
+
+00:20:17.170 --> 00:20:19.469
+If we head to the top of the document,
+
+00:20:19.470 --> 00:20:21.480
+we can create a couple of macros
+
+00:20:21.480 --> 00:20:24.699
+using the `#+MACRO:` export keyword.
+
+00:20:24.700 --> 00:20:27.600
+We'll define two macros with short names.
+
+00:20:27.600 --> 00:20:30.240
+One named "p" for "property",
+
+00:20:30.240 --> 00:20:34.640
+and the other one named "pr" for "property raw".
+
+00:20:34.640 --> 00:20:39.160
+Org-mode macros are expanded when the document is exported,
+
+00:20:39.160 --> 00:20:41.640
+and any positional arguments provided
+
+00:20:41.640 --> 00:20:43.559
+are referenced by their number.
+
+00:20:43.860 --> 00:20:45.160
+Now in the introduction,
+
+00:20:45.160 --> 00:20:47.880
+we can use the macro replacement syntax,
+
+00:20:47.880 --> 00:20:49.800
+which is three curly braces,
+
+00:20:49.800 --> 00:20:52.760
+followed by the macro name and any arguments,
+
+00:20:52.760 --> 00:20:55.559
+and then three ending curly braces.
+
+00:20:55.560 --> 00:20:58.699
+You see why I kept the macro name short.
+
+00:20:58.700 --> 00:21:01.280
+That's six curly braces in total we're typing,
+
+00:21:01.280 --> 00:21:05.239
+which still takes up a fair amount of space.
+
+NOTE Properties in practice
+
+00:21:05.240 --> 00:21:07.120
+Now let's take a look at how we might use
+
+00:21:07.120 --> 00:21:09.159
+these properties in practice.
+
+00:21:09.160 --> 00:21:10.920
+Debian and RedHat distros differ
+
+00:21:11.120 --> 00:21:12.929
+on how they install packages.
+
+00:21:12.930 --> 00:21:16.120
+So we're gonna want an "install" property,
+
+00:21:16.120 --> 00:21:24.579
+where in Debian we use `sudo apt-get install -qq`,
+
+00:21:24.580 --> 00:21:26.939
+and on RedHat we'll use something like
+
+00:21:26.940 --> 00:21:33.119
+`sudo dnf install -y`.
+
+00:21:33.120 --> 00:21:35.329
+Now development packages
+
+00:21:35.330 --> 00:21:38.049
+also have a different naming convention.
+
+00:21:38.050 --> 00:21:40.760
+For example, the `ncurses` library on Debian
+
+00:21:40.760 --> 00:21:43.520
+is called `libncurses-dev`,
+
+00:21:43.520 --> 00:21:48.259
+where on RedHat it's called `ncurses-devel`.
+
+00:21:48.260 --> 00:21:49.640
+There are likely going to be
+
+00:21:49.640 --> 00:21:52.120
+many more little differences like this
+
+00:21:52.120 --> 00:21:55.339
+that we'll need to solve with properties.
+
+00:21:55.340 --> 00:21:58.609
+Now I already don't like where this is going.
+
+00:21:58.610 --> 00:22:00.880
+Switching between the Debian and RedHat
+
+00:22:00.880 --> 00:22:03.160
+versions of the document is gonna mean
+
+00:22:03.160 --> 00:22:05.200
+commenting and uncommenting out
+
+00:22:05.200 --> 00:22:06.989
+a bunch of different properties,
+
+00:22:06.990 --> 00:22:09.019
+which is pretty janky.
+
+NOTE Using a prefix
+
+00:22:09.020 --> 00:22:11.079
+Luckily we can solve this problem
+
+00:22:11.080 --> 00:22:14.439
+with a little bit of Emacs Lisp.
+
+00:22:14.440 --> 00:22:16.879
+We'll start by modifying our properties,
+
+00:22:16.880 --> 00:22:19.140
+so their property names are prefixed
+
+00:22:19.141 --> 00:22:23.119
+with either `deb_` or `rh_`
+
+00:22:23.120 --> 00:22:27.719
+to signify which distro the property applies to.`
+
+00:22:27.720 --> 00:22:31.160
+We'll also create a single property called "prefix",
+
+00:22:31.160 --> 00:22:34.589
+which will be prepended to the property name
+
+00:22:34.590 --> 00:22:36.529
+by the `get_prop` function
+
+00:22:36.530 --> 00:22:39.509
+if the requested property is not found.
+
+00:22:39.510 --> 00:22:42.200
+This way, when we want to switch between
+
+00:22:42.200 --> 00:22:45.349
+the Debian and RedHat versions of the document,
+
+00:22:45.350 --> 00:22:49.029
+we just need to change the prefix property.
+
+00:22:49.030 --> 00:22:51.379
+So now we'll change the Elisp code.
+
+00:22:51.380 --> 00:22:55.209
+So we'll use a let expression with two bound variables.
+
+00:22:55.210 --> 00:22:56.919
+The first one is called ret,
+
+00:22:56.920 --> 00:22:59.160
+which determines if the initial call
+
+00:22:59.160 --> 00:23:01.949
+to `org-property-values` succeeds.
+
+00:23:01.950 --> 00:23:04.039
+The second variable is called prefix,
+
+00:23:04.040 --> 00:23:06.219
+which is the prefix property.
+
+00:23:06.220 --> 00:23:09.120
+If the first call to `org-property-values` succeeds,
+
+00:23:09.120 --> 00:23:11.159
+we return it as normal.
+
+00:23:11.160 --> 00:23:14.249
+If not, we concatenate the property value
+
+00:23:14.250 --> 00:23:15.920
+that was passed into the function
+
+00:23:15.920 --> 00:23:18.969
+onto the prefix and try again.
+
+00:23:18.970 --> 00:23:23.800
+Now when we call the `get_prop` function with "distro"
+
+00:23:23.800 --> 00:23:26.360
+as the prop argument, it won't be found.
+
+00:23:26.360 --> 00:23:29.689
+So the code will slap our prefix tag on the front,
+
+00:23:29.690 --> 00:23:33.249
+making it something like `rh_distro`,
+
+00:23:33.250 --> 00:23:35.329
+and it will be found and returned.
+
+00:23:35.330 --> 00:23:39.999
+Let's see that in action.
+
+00:23:40.000 --> 00:23:42.009
+All right, now we're talking.
+
+NOTE Switching distributions
+
+00:23:42.010 --> 00:23:44.419
+This setup is starting to look pretty good,
+
+00:23:44.420 --> 00:23:46.040
+but there are just a few things
+
+00:23:46.040 --> 00:23:48.659
+that I want to add before we move on.
+
+00:23:48.660 --> 00:23:51.240
+First of all, I think the document should have a subtitle,
+
+00:23:51.240 --> 00:23:53.960
+something that tells you if you're looking at the RedHat
+
+00:23:53.960 --> 00:23:56.160
+or the Debian version of the document.
+
+00:23:56.160 --> 00:23:57.880
+I also think it would be great
+
+00:23:57.880 --> 00:24:00.520
+if the file name of the exported document
+
+00:24:00.520 --> 00:24:04.999
+reflected the distribution as well.
+
+00:24:05.000 --> 00:24:08.040
+I also want to add a quick Debian only section
+
+00:24:08.040 --> 00:24:11.799
+to the document that explains how it got its name.
+
+00:24:11.800 --> 00:24:17.739
+Now let's see what happens when we export the document.
+
+00:24:17.740 --> 00:24:20.439
+This did not work out as we wanted.
+
+00:24:20.440 --> 00:24:23.360
+As you can see, the macro we used in the subtitles
+
+00:24:23.360 --> 00:24:24.959
+didn't expand properly,
+
+00:24:24.960 --> 00:24:28.640
+and as a result, our subtitle didn't render right.
+
+00:24:28.640 --> 00:24:30.640
+Sadly, you can't use macros
+
+00:24:30.640 --> 00:24:32.909
+or inline function calls everywhere.
+
+00:24:32.910 --> 00:24:34.680
+And one place where they don't work
+
+00:24:34.680 --> 00:24:37.189
+is inside of certain export keywords.
+
+00:24:37.190 --> 00:24:43.219
+So we're gonna have to hard code them here.
+
+00:24:43.220 --> 00:24:46.320
+Another mistake that we made is we forgot to update
+
+00:24:46.320 --> 00:24:49.099
+the `#+EXCLUDE_TAGS` export keyword,
+
+00:24:49.100 --> 00:24:51.439
+because with the RedHat version of the document,
+
+00:24:51.440 --> 00:24:54.509
+we want to exclude the Debian tag.
+
+00:24:54.510 --> 00:24:56.400
+Now when we export the document,
+
+00:24:56.400 --> 00:24:57.839
+everything should be correct.
+
+00:24:57.840 --> 00:25:00.619
+The word RedHat should appear in the subtitle,
+
+00:25:00.620 --> 00:25:04.799
+and the Debian fun fact section should not be present.
+
+00:25:04.800 --> 00:25:06.960
+Now we just need to add a section to the README
+
+00:25:06.960 --> 00:25:09.280
+that explains the steps you need to take
+
+00:25:09.280 --> 00:25:11.000
+in order to switch the document
+
+00:25:11.000 --> 00:25:12.759
+from RedHat to Debian.
+
+00:25:12.760 --> 00:25:14.000
+Okay, let's see here.
+
+00:25:14.000 --> 00:25:18.309
+We have to change `#+SUBTITLE`, change the `#+EXCLUDE_TAGS`,
+
+00:25:18.310 --> 00:25:20.429
+change the `#+EXPORT_FILE_NAME`,
+
+00:25:20.430 --> 00:25:23.289
+and change the `prefix` property.
+
+00:25:23.290 --> 00:25:26.289
+This is OK, but it's not great.
+
+00:25:26.290 --> 00:25:29.429
+Emacs Lisp can once again come to our rescue.
+
+00:25:29.430 --> 00:25:32.080
+What we'll do is make an Elisp code block
+
+00:25:32.080 --> 00:25:35.480
+that will invite the user to hit `C-c C-c` on.
+
+00:25:35.480 --> 00:25:39.520
+And the code block will essentially make all these changes
+
+00:25:39.520 --> 00:25:40.919
+in the document for them.
+
+00:25:40.920 --> 00:25:43.280
+This code block, which we'll call `switch_distro`,
+
+00:25:43.280 --> 00:25:45.680
+takes one argument called `os`,
+
+00:25:45.680 --> 00:25:48.689
+which by default is set to "Debian".
+
+00:25:48.690 --> 00:25:50.760
+It starts out with a let expression
+
+00:25:50.760 --> 00:25:53.029
+that defines three bound variables.
+
+00:25:53.030 --> 00:25:55.969
+The `debian` variable is a boolean that is true
+
+00:25:55.970 --> 00:25:58.699
+if the distro we're switching to is Debian.
+
+00:25:58.700 --> 00:26:00.360
+Based on the value of this boolean,
+
+00:26:00.360 --> 00:26:04.169
+we'll set the `noexport` and `prefix` variables accordingly.
+
+00:26:04.170 --> 00:26:06.720
+The `save-excursion` block tells Emacs
+
+00:26:06.720 --> 00:26:09.199
+that we're going to be moving around in the document
+
+00:26:09.200 --> 00:26:11.680
+and to remember to put our point back where we started
+
+00:26:11.680 --> 00:26:13.429
+when the block finishes.
+
+00:26:13.430 --> 00:26:16.249
+After that, we essentially go to the top of the document
+
+00:26:16.250 --> 00:26:19.839
+and search and replace the subtitle, `exclude_tags`,
+
+00:26:19.840 --> 00:26:22.499
+`export_file_name`, and the `prefix`.
+
+00:26:22.500 --> 00:26:23.389
+Pretty cool.
+
+00:26:23.390 --> 00:26:25.029
+Let's see this in action.
+
+00:26:25.030 --> 00:26:27.869
+If we hit `C-c C-c` on this block,
+
+00:26:27.870 --> 00:26:30.480
+we should see the document automatically change a bit.
+
+00:26:30.480 --> 00:26:32.320
+And now when we export it,
+
+00:26:32.320 --> 00:26:36.089
+we get the Debian version of the doc.
+
+00:26:36.090 --> 00:26:37.629
+If we want to change it back,
+
+00:26:37.630 --> 00:26:39.880
+we can just head back over to the code block
+
+00:26:39.880 --> 00:26:43.149
+and change the default value for the os variable
+
+00:26:43.150 --> 00:26:47.619
+from "Debian" to "RedHat" and hit `C-c C-c` again.
+
+00:26:47.620 --> 00:26:49.919
+And now when we re-export,
+
+00:26:49.920 --> 00:26:52.909
+we're looking at the RedHat version of the document.
+
+00:26:52.910 --> 00:26:55.859
+Just as an aside, if you ever thought to yourself,
+
+00:26:55.860 --> 00:26:58.159
+"I should learn Emacs Lisp someday"
+
+00:26:58.160 --> 00:27:01.289
+Make it someday soon. You'll be happy you did.
+
+00:27:01.290 --> 00:27:03.769
+Not only is it a fun programming language,
+
+00:27:03.770 --> 00:27:06.679
+but you can do powerful things with it in Emacs,
+
+00:27:06.680 --> 00:27:12.149
+which I hope is a point that folks take away from this talk.
+
+00:27:12.150 --> 00:27:14.149
+All right, that was a lot.
+
+NOTE A tour
+
+00:27:14.150 --> 00:27:16.840
+Now that we've spent the past 20 minutes or so
+
+00:27:16.840 --> 00:27:19.409
+digging into some of the tips and tricks I used
+
+00:27:19.410 --> 00:27:22.879
+when creating my build Emacs from source document,
+
+00:27:22.880 --> 00:27:26.279
+we'll say goodbye to this document we've been working on
+
+00:27:26.280 --> 00:27:27.480
+and we'll start a tour
+
+00:27:27.480 --> 00:27:29.960
+of the actual literate document I wrote.
+
+00:27:29.960 --> 00:27:33.080
+A document that I'll demonstrate actually downloading
+
+00:27:33.080 --> 00:27:35.659
+and building a new Emacs when I export it
+
+00:27:35.660 --> 00:27:38.959
+on both my Ubuntu and RedHat virtual machines.
+
+00:27:38.960 --> 00:27:41.689
+I'll also show you how org-mode can generate
+
+00:27:41.690 --> 00:27:44.519
+slick professional looking PDF files
+
+00:27:44.520 --> 00:27:46.579
+through the power of LaTeX.
+
+00:27:46.580 --> 00:27:49.619
+We'll start here at the orgdemo2 directory,
+
+00:27:49.620 --> 00:27:51.229
+which I've cloned from GitLab.
+
+00:27:51.230 --> 00:27:55.599
+This repository has all the source materials for this talk.
+
+00:27:55.600 --> 00:27:59.040
+The buildemacs.org file is where most of the good stuff is.
+
+00:27:59.040 --> 00:28:01.479
+So that's where we'll start.
+
+00:28:01.480 --> 00:28:03.360
+There's a lot of file-local variables
+
+00:28:03.360 --> 00:28:04.800
+that we'll need to confirm.
+
+00:28:04.800 --> 00:28:06.439
+So we'll do that too.
+
+00:28:06.440 --> 00:28:07.560
+So the first thing we're gonna do
+
+00:28:07.560 --> 00:28:10.080
+is hit `C-u TAB` twice,
+
+00:28:10.780 --> 00:28:13.360
+which will give us a top-level overview
+
+00:28:13.360 --> 00:28:15.139
+of all of our headings.
+
+00:28:15.140 --> 00:28:16.600
+As you can see, we've got a lot
+
+00:28:16.600 --> 00:28:20.119
+of the same familiar export keywords we had before.
+
+00:28:20.120 --> 00:28:23.099
+`#+TITLE`, `#+SUBTITLE`, `#+AUTHOR`, `#+EMAIL`,
+
+00:28:23.100 --> 00:28:25.359
+plus a few we haven't seen before.
+
+00:28:25.360 --> 00:28:27.720
+For example, I've squirreled away
+
+00:28:27.720 --> 00:28:30.619
+a lot of the `#+LATEX_HEADER` export keywords
+
+00:28:30.620 --> 00:28:33.539
+in this file called latex.setup.
+
+00:28:33.540 --> 00:28:36.539
+And I did this just so they don't clutter up the document.
+
+00:28:36.540 --> 00:28:38.320
+Much of the LaTeX magic
+
+00:28:38.320 --> 00:28:40.909
+that makes the exported document look good
+
+00:28:40.910 --> 00:28:42.589
+is in these headers.
+
+00:28:42.590 --> 00:28:45.119
+LaTeX commands begin with a backslash.
+
+00:28:45.120 --> 00:28:49.679
+And a common one we use a lot here is `\usepackage`.
+
+00:28:49.680 --> 00:28:52.200
+This lets us bring in packages like geometry,
+
+00:28:52.200 --> 00:28:56.539
+svg for the cool SeaGL SVG logo,
+
+00:28:56.540 --> 00:28:58.440
+`fancyhdr` and fancy verbatim [`fancyvrb`]
+
+00:28:58.440 --> 00:29:00.689
+to keep things looking pretty fancy.
+
+00:29:00.690 --> 00:29:03.200
+Using a scalable vector image format
+
+00:29:03.200 --> 00:29:05.720
+makes it possible for us to do really cool things
+
+00:29:05.720 --> 00:29:09.269
+like having a scaled-down version of the SeaGL logo
+
+00:29:09.270 --> 00:29:11.979
+appear in the fancy footer below.
+
+00:29:11.980 --> 00:29:15.360
+I also include some macros in a separate file
+
+00:29:15.360 --> 00:29:18.120
+just to help keep things tidy in the main document.
+
+00:29:18.120 --> 00:29:20.600
+Here I've got the familiar macros
+
+00:29:20.600 --> 00:29:23.399
+we've seen before for `get_prop`.
+
+00:29:23.400 --> 00:29:25.520
+But here I use different permutations
+
+00:29:25.520 --> 00:29:28.160
+depending on if I want results raw
+
+00:29:28.160 --> 00:29:31.869
+or raw verbatim or just verbatim.
+
+00:29:31.870 --> 00:29:35.069
+I also have a couple of macros here at the top of the file
+
+00:29:35.070 --> 00:29:40.280
+that are for pulling strings out of results blocks
+
+00:29:40.280 --> 00:29:41.920
+and then trimming them
+
+00:29:41.920 --> 00:29:44.719
+so there's no white space on either side.
+
+00:29:44.720 --> 00:29:46.440
+Like in the version of the document
+
+00:29:46.440 --> 00:29:48.429
+we worked on at the start of this talk,
+
+00:29:48.430 --> 00:29:51.079
+the real document also has a README section
+
+00:29:51.080 --> 00:29:53.469
+marked with the `:noexport:` tag.
+
+00:29:53.470 --> 00:29:55.400
+It also has a section about choosing
+
+00:29:55.400 --> 00:29:57.909
+which version of the document to export
+
+00:29:57.910 --> 00:30:00.599
+and a code block on how to switch between them.
+
+00:30:00.600 --> 00:30:03.000
+It's also got a lot of helpful information in it
+
+00:30:03.000 --> 00:30:05.819
+like what OS and Emacs versions
+
+00:30:05.820 --> 00:30:09.559
+the document has been tested to "run" on,
+
+00:30:09.560 --> 00:30:12.329
+a section on the LaTeX prerequisites
+
+00:30:12.330 --> 00:30:14.080
+and the section on executing
+
+00:30:14.080 --> 00:30:16.199
+the document's various code blocks.
+
+NOTE TeX and LaTeX
+
+00:30:16.200 --> 00:30:19.199
+The latter two sections we'll take a look at now.
+
+00:30:19.200 --> 00:30:22.579
+Out of the box on Fedora and Ubuntu server distros,
+
+00:30:22.580 --> 00:30:24.709
+the TeX typesetting system
+
+00:30:24.710 --> 00:30:27.669
+also by noted computer scientist Donald Knuth
+
+00:30:27.670 --> 00:30:28.859
+is not installed.
+
+00:30:28.860 --> 00:30:31.719
+So we'll need to install some packages.
+
+00:30:31.720 --> 00:30:34.449
+Starting out we'll need the `texlive` package
+
+00:30:34.450 --> 00:30:37.459
+which gets you a fully featured TeX setup.
+
+00:30:37.460 --> 00:30:39.289
+This also gets you LaTeX
+
+00:30:39.290 --> 00:30:42.789
+which can be viewed as a distribution of TeX macros.
+
+00:30:42.790 --> 00:30:44.899
+You'll also need XeTeX.
+
+00:30:44.900 --> 00:30:49.779
+This gets you Unicode support and lets you use modern fonts.
+
+00:30:49.780 --> 00:30:52.809
+We'll also want to install pdfTeX.
+
+00:30:52.810 --> 00:30:57.209
+This gets us the ability to generate PDFs from TeX sources.
+
+00:30:57.210 --> 00:31:01.299
+And finally, we're gonna need to install latexmk
+
+00:31:01.300 --> 00:31:02.400
+which is a Perl script
+
+00:31:02.400 --> 00:31:05.139
+that knows how to run LaTeX multiple times
+
+00:31:05.140 --> 00:31:09.249
+in order to properly deal with intra-document links.
+
+NOTE Other prerequisites
+
+00:31:09.250 --> 00:31:11.069
+But wait, there's more.
+
+00:31:11.070 --> 00:31:12.960
+We're also gonna need Inkscape
+
+00:31:12.960 --> 00:31:15.520
+to rasterize our SeaGL vector logo
+
+00:31:15.520 --> 00:31:17.339
+at different resolutions.
+
+00:31:17.340 --> 00:31:20.360
+And we're gonna need the JetBrains Mono font
+
+00:31:20.360 --> 00:31:23.059
+to make our source code look snazzy.
+
+00:31:23.060 --> 00:31:24.680
+We'll also need the Inter font
+
+00:31:24.680 --> 00:31:28.039
+to make our prose look snazzy as well.
+
+00:31:28.040 --> 00:31:31.299
+I've helpfully added a bash code block in the README
+
+00:31:31.300 --> 00:31:35.739
+that you can hit C-c C-c on to install.
+
+00:31:35.740 --> 00:31:38.520
+This really does lock up Emacs for a few minutes
+
+00:31:38.520 --> 00:31:40.329
+and it's sort of annoying.
+
+00:31:40.330 --> 00:31:43.040
+When we export the document and turn off all caching
+
+00:31:43.040 --> 00:31:45.599
+and it actually builds Emacs for real,
+
+00:31:45.600 --> 00:31:48.769
+Emacs can be locked up for tens of minutes.
+
+00:31:48.770 --> 00:31:50.880
+There's a package called ob-async
+
+00:31:50.880 --> 00:31:54.259
+that I've been meaning to check out that might help here.
+
+00:31:54.260 --> 00:31:55.760
+But since I wanted this document
+
+00:31:55.760 --> 00:31:58.000
+to work on bog-standard Emacs setups,
+
+00:31:58.000 --> 00:32:00.059
+I didn't get around to it.
+
+NOTE Caching
+
+00:32:00.060 --> 00:32:03.139
+Before we get into talking about running the document,
+
+00:32:03.140 --> 00:32:06.449
+let's talk briefly about results caching.
+
+00:32:06.450 --> 00:32:08.839
+We'll take a look at the section of the document
+
+00:32:08.840 --> 00:32:13.139
+where we talk about Git tags for an example.
+
+00:32:13.140 --> 00:32:15.760
+The `num_tags` bash code block determines
+
+00:32:15.760 --> 00:32:19.039
+how many tags there are in the Emacs Git repo.
+
+00:32:19.040 --> 00:32:21.600
+And when I hit C-c C-c on that block
+
+00:32:21.600 --> 00:32:25.059
+several days ago, when I was first creating the document,
+
+00:32:25.060 --> 00:32:28.019
+that number was 183.
+
+00:32:28.020 --> 00:32:32.169
+That result has remained cached in the document since then.
+
+00:32:32.170 --> 00:32:34.899
+And you can see a snippet of the SHA1 hash
+
+00:32:34.900 --> 00:32:38.389
+of the contents of the source block below.
+
+00:32:38.390 --> 00:32:40.800
+You can see where I referenced the result
+
+00:32:40.800 --> 00:32:44.960
+using the `sr` for string raw macro in the prose below,
+
+00:32:44.960 --> 00:32:50.509
+and how it gets rendered in the exported PDF document.
+
+00:32:50.510 --> 00:32:52.880
+All the source blocks in the exported sections
+
+00:32:52.880 --> 00:32:56.559
+of the document include cached results like this.
+
+00:32:56.560 --> 00:33:01.389
+If I export the document now, it won't take that long to do
+
+00:33:01.390 --> 00:33:03.800
+because while there are a ton of code blocks
+
+00:33:03.800 --> 00:33:09.069
+in the exported sections, they're all cached.
+
+00:33:09.070 --> 00:33:11.560
+Now let's get back to the section of the README
+
+00:33:11.560 --> 00:33:14.909
+that explains how to execute the code in the document.
+
+00:33:14.910 --> 00:33:17.640
+Here I explain that if you want to build Emacs
+
+00:33:17.640 --> 00:33:20.189
+on your computer using this document,
+
+00:33:20.190 --> 00:33:22.019
+you've got a couple of options.
+
+00:33:22.020 --> 00:33:25.649
+The first option is to manually invalidate the caches
+
+00:33:25.650 --> 00:33:28.960
+and take C-c C-c on every code block
+
+00:33:28.960 --> 00:33:30.959
+in the main document.
+
+00:33:30.960 --> 00:33:33.160
+This lets you supervise the entire process,
+
+00:33:33.160 --> 00:33:36.939
+and it also creates new cached result blocks,
+
+00:33:36.940 --> 00:33:39.239
+but it's time consuming.
+
+00:33:39.240 --> 00:33:43.440
+There is also an internal link to the main document here,
+
+00:33:43.440 --> 00:33:47.379
+and you can jump to it with C-c C-o.
+
+00:33:47.380 --> 00:33:50.040
+This is one of those intra-document links
+
+00:33:50.040 --> 00:33:52.999
+that is really tricky to get right with LaTeX,
+
+00:33:53.000 --> 00:33:56.989
+and is why we opted to use the latexmk Perl script
+
+00:33:56.990 --> 00:34:00.049
+to build the PDF version of the document.
+
+00:34:00.050 --> 00:34:01.920
+I'm mentioning it specifically here
+
+00:34:01.920 --> 00:34:05.629
+because it took me forever to figure this out.
+
+00:34:05.630 --> 00:34:07.269
+The second option you've got
+
+00:34:07.270 --> 00:34:09.280
+is to change the default header arg
+
+00:34:09.280 --> 00:34:13.739
+from `:cache yes` to `:cache no` at the top of the document.
+
+00:34:13.740 --> 00:34:16.269
+If we cruise up to the top of the document,
+
+00:34:16.270 --> 00:34:19.129
+you can see that this header argument property
+
+00:34:19.130 --> 00:34:22.440
+basically says that unless a code block
+
+00:34:22.440 --> 00:34:24.160
+explicitly says otherwise,
+
+00:34:24.160 --> 00:34:27.118
+it's by default supposed to be cached.
+
+00:34:27.119 --> 00:34:29.440
+That's how we were able to export the document
+
+00:34:29.440 --> 00:34:31.558
+before so quickly.
+
+00:34:31.559 --> 00:34:34.819
+The code block named `no_cache_no_confirm`
+
+00:34:34.820 --> 00:34:38.618
+uses the `save-excursion` and regex replace trick
+
+00:34:38.619 --> 00:34:40.348
+that I demonstrated earlier
+
+00:34:40.349 --> 00:34:42.819
+to munch the default cache header arg
+
+00:34:42.820 --> 00:34:45.409
+from "cache yes" to "cache no".
+
+00:34:45.410 --> 00:34:49.299
+And it also turns off confirmations on bash code blocks.
+
+00:34:49.300 --> 00:34:51.939
+Let's do that now.
+
+00:34:51.940 --> 00:34:54.559
+Now we'll export the document to PDF,
+
+00:34:54.560 --> 00:34:57.439
+which will ignore the cache result blocks
+
+00:34:57.440 --> 00:35:00.319
+and clone the Git repository on Savannah,
+
+00:35:00.320 --> 00:35:01.760
+create a branch that points
+
+00:35:01.760 --> 00:35:05.459
+to the most recently tagged version of Emacs 29,
+
+00:35:05.460 --> 00:35:07.759
+run configure a handful of times,
+
+00:35:07.760 --> 00:35:10.720
+installing packages to fix missing dependencies
+
+00:35:10.720 --> 00:35:12.399
+along the way,
+
+00:35:12.400 --> 00:35:16.099
+build Emacs, install Emacs in our home directory,
+
+00:35:16.100 --> 00:35:19.339
+verify that it has successfully built a binary,
+
+00:35:19.340 --> 00:35:22.549
+run it in batch mode with some sample Elisp
+
+00:35:22.550 --> 00:35:26.869
+and show the file sizes and dates of the generated files.
+
+00:35:26.870 --> 00:35:28.339
+This is gonna take a while.
+
+00:35:28.340 --> 00:35:32.829
+And while it's running, we'll pop over to our Fedora box.
+
+00:35:32.830 --> 00:35:34.680
+All right, now we'll fire up Emacs,
+
+00:35:34.680 --> 00:35:39.280
+hit `C-c C-c` on the `configure_document` code block
+
+00:35:39.280 --> 00:35:41.849
+to configure the document for RedHat
+
+00:35:41.850 --> 00:35:45.709
+since Fedora here is a RedHat based distro.
+
+00:35:45.710 --> 00:35:47.040
+Then what we'll do is we'll pop down
+
+00:35:47.040 --> 00:35:49.589
+and hit `C-c C-c`
+
+00:35:49.590 --> 00:35:53.699
+on the `rh_install_latex` code block
+
+00:35:53.700 --> 00:35:56.229
+to install the LaTeX prerequisites
+
+00:35:56.230 --> 00:35:58.459
+for this Fedora virtual machine.
+
+00:35:58.460 --> 00:36:02.589
+Finally, we'll execute the `no_cache_no_confirm` block
+
+00:36:02.590 --> 00:36:05.049
+and then kick off the export.
+
+00:36:05.050 --> 00:36:07.280
+Then we'll go and check back on what's happening
+
+00:36:07.280 --> 00:36:09.529
+on the Ubuntu box.
+
+00:36:09.530 --> 00:36:11.240
+Ooh, top looks pretty quiet.
+
+00:36:11.240 --> 00:36:14.039
+I think the export is complete.
+
+00:36:14.040 --> 00:36:17.559
+Ooh, those are the words I love to see in the status area,
+
+00:36:17.560 --> 00:36:20.609
+PDF file produced!
+
+NOTE Looking at the PDF
+
+00:36:20.610 --> 00:36:22.600
+Now I can't use my web browser
+
+00:36:22.600 --> 00:36:24.959
+to take a look at this PDF file
+
+00:36:24.960 --> 00:36:27.080
+because I haven't set up a web server
+
+00:36:27.080 --> 00:36:30.759
+or anything like that on the Ubuntu virtual machine.
+
+00:36:30.760 --> 00:36:34.439
+I can, however, use TRAMP with the ssh method
+
+00:36:34.440 --> 00:36:36.560
+to poke around on the ubuntu host
+
+00:36:36.560 --> 00:36:39.120
+on my personal version of Emacs.
+
+00:36:39.120 --> 00:36:40.939
+So let's do that.
+
+00:36:40.940 --> 00:36:44.809
+Okay, so now if we go into the source directory
+
+00:36:44.810 --> 00:36:48.039
+and then we hop into the orgdemo2 directory
+
+00:36:48.040 --> 00:36:51.619
+and then we look at the deb version of the PDF,
+
+00:36:51.620 --> 00:36:54.149
+there she blows.
+
+00:36:54.150 --> 00:36:58.160
+Now, if we go down to the Building Emacs section,
+
+00:36:58.160 --> 00:37:00.129
+we can see that it built.
+
+00:37:00.130 --> 00:37:03.839
+And if we look in the bin directory,
+
+00:37:03.840 --> 00:37:06.779
+we can see that at 17:01,
+
+00:37:06.780 --> 00:37:11.379
+that's when all of those files got created.
+
+00:37:11.380 --> 00:37:15.589
+Also the file creation date on the PDF is 17:01.
+
+00:37:15.590 --> 00:37:18.720
+So all of this code executed roughly the same time
+
+00:37:18.720 --> 00:37:21.159
+the PDF was created.
+
+00:37:21.160 --> 00:37:25.339
+All right, so now let's head back over to the Fedora box
+
+00:37:25.340 --> 00:37:27.920
+and then we'll navigate to the source directory,
+
+00:37:27.920 --> 00:37:30.119
+the orgdemo2 directory,
+
+00:37:30.120 --> 00:37:35.719
+and there is our RedHat version of the built Emacs PDF.
+
+00:37:35.720 --> 00:37:38.219
+And Bob's your uncle.
+
+00:37:38.220 --> 00:37:42.549
+And you can see it is the RedHat version of the document
+
+00:37:42.550 --> 00:37:44.939
+because this is a RedHat box.
+
+00:37:44.940 --> 00:37:51.639
+And if we go over to the What did we install? section,
+
+00:37:51.640 --> 00:37:56.049
+you can see that these binaries were built at 17:35.
+
+00:37:56.050 --> 00:37:58.699
+And now if we pop open dired
+
+00:37:58.700 --> 00:38:00.739
+and we take a look at the PDF,
+
+00:38:00.740 --> 00:38:07.329
+we can see it also was created at 17:35.
+
+00:38:07.330 --> 00:38:10.039
+All right, in the couple minutes remaining,
+
+00:38:10.040 --> 00:38:11.640
+I thought it would be a good idea
+
+00:38:11.640 --> 00:38:15.739
+just to take a look at the document
+
+00:38:15.740 --> 00:38:19.000
+and maybe just go through some of what it actually does
+
+00:38:19.000 --> 00:38:22.579
+in explaining how to build Emacs from source.
+
+00:38:22.580 --> 00:38:27.139
+We'll look at the RedHat version since we're here.
+
+00:38:27.140 --> 00:38:28.160
+And the first thing you do is
+
+00:38:28.160 --> 00:38:31.539
+you have to get access to the source code.
+
+00:38:31.540 --> 00:38:32.840
+And before you can do anything,
+
+00:38:32.840 --> 00:38:35.419
+this is a RedHat-specific section
+
+00:38:35.420 --> 00:38:38.299
+where you need to install some development tools.
+
+00:38:38.300 --> 00:38:41.539
+And this development tools group actually has Git.
+
+00:38:41.540 --> 00:38:44.640
+Now I installed Git earlier, but if you didn't do that,
+
+00:38:44.640 --> 00:38:46.939
+that would be the first thing that you need to do.
+
+00:38:46.940 --> 00:38:50.039
+We create a source directory, we cd into it,
+
+00:38:50.040 --> 00:38:53.059
+we clone the repo from Savannah.
+
+00:38:53.060 --> 00:38:56.059
+And then we start to take a look at some of the Git tags.
+
+00:38:56.060 --> 00:38:58.560
+And we showed this before where we check out
+
+00:38:58.560 --> 00:39:00.369
+how many different tags there are.
+
+00:39:00.370 --> 00:39:02.400
+And then we run this kind of funky Git command
+
+00:39:02.400 --> 00:39:06.040
+to sort of list all the tags that begin with 'emacs-29',
+
+00:39:06.040 --> 00:39:08.759
+and we sort them by when they were tagged.
+
+00:39:08.760 --> 00:39:12.400
+So we can see that Emacs 29.1.pretest
+
+00:39:12.400 --> 00:39:14.439
+is the most recent version.
+
+00:39:14.440 --> 00:39:15.880
+So that's the one we grab
+
+00:39:15.880 --> 00:39:18.659
+and that's the one we decide to build.
+
+00:39:18.660 --> 00:39:22.779
+And then we create a branch that is based on this tag.
+
+00:39:22.780 --> 00:39:27.479
+And this is dynamically generated based on what we saw here.
+
+00:39:27.480 --> 00:39:29.439
+So that's what we use here.
+
+NOTE Errors
+
+00:39:29.440 --> 00:39:32.920
+In this case, we're piping standard error
+
+00:39:32.920 --> 00:39:35.099
+to where standard out goes.
+
+00:39:35.100 --> 00:39:36.069
+That's another trick.
+
+00:39:36.070 --> 00:39:39.559
+If you want to actually see an error get created,
+
+00:39:39.560 --> 00:39:44.119
+org-mode will capture any errors that code blocks produce,
+
+00:39:44.120 --> 00:39:46.819
+and it will show you the error message in a buffer.
+
+00:39:46.820 --> 00:39:49.240
+So if you actually wanna show what it looks like
+
+00:39:49.240 --> 00:39:53.059
+when something errors out, this is the trick you have to use.
+
+00:39:53.060 --> 00:39:56.200
+And then what we do is we look for a configure script
+
+00:39:56.200 --> 00:39:57.419
+and there isn't one.
+
+00:39:57.420 --> 00:39:58.599
+And then we realize,
+
+00:39:58.600 --> 00:40:00.909
+uh-oh, we're gonna have to deal with autotools.
+
+00:40:00.910 --> 00:40:05.560
+So, you know, we run the autogen script and it complains
+
+00:40:05.560 --> 00:40:08.679
+because we're missing some prerequisites.
+
+00:40:08.680 --> 00:40:11.349
+So we have to install autoconf,
+
+00:40:11.350 --> 00:40:13.019
+and then we run it again,
+
+00:40:13.020 --> 00:40:15.959
+and finally it generates a configure script.
+
+00:40:15.960 --> 00:40:19.019
+And this is another case where I pull this number
+
+00:40:19.020 --> 00:40:21.979
+right here into the actual prose.
+
+00:40:21.980 --> 00:40:24.840
+And I can see it's, oh, it's, you know, this how many bytes.
+
+00:40:24.840 --> 00:40:26.800
+When was the last time you wrote a shell script
+
+00:40:26.800 --> 00:40:29.579
+that was this many bytes long?
+
+00:40:29.580 --> 00:40:31.320
+And then we configure the build process.
+
+00:40:31.320 --> 00:40:33.760
+And, you know, it's not gonna work right away
+
+00:40:33.760 --> 00:40:36.699
+because we don't have GNU Texinfo installed.
+
+00:40:36.700 --> 00:40:41.439
+So we gotta do that, which we do with `dnf install` here.
+
+00:40:41.440 --> 00:40:44.320
+And then there's this section that is either RedHat-
+
+00:40:44.320 --> 00:40:48.919
+or Debian-specific that talks about, like,
+
+00:40:48.920 --> 00:40:51.240
+if you don't know the name of a package
+
+00:40:51.240 --> 00:40:55.160
+that contains a given file name, how do you query it?
+
+00:40:55.160 --> 00:40:59.519
+And in the RedHat world, you use `dnf provides makeinfo`.
+
+00:40:59.520 --> 00:41:02.289
+In the Debian world, you do something entirely different.
+
+00:41:02.290 --> 00:41:06.639
+And then we have to install the `ncurses` binary.
+
+00:41:06.640 --> 00:41:10.299
+And finally we get like a minimal configuration
+
+00:41:10.300 --> 00:41:13.699
+and you can see that there's a whole bunch of nos here.
+
+00:41:13.700 --> 00:41:15.200
+So, you know, we don't have cairo,
+
+00:41:15.200 --> 00:41:18.799
+we don't have imagemagick, we don't have dbus,
+
+00:41:18.800 --> 00:41:20.600
+you know, there's a whole bunch of stuff we don't have.
+
+00:41:20.600 --> 00:41:23.880
+We don't have X, we don't have libjansson, no tree-sitter.
+
+00:41:23.880 --> 00:41:25.960
+This is really a bare-bones Emacs
+
+00:41:25.960 --> 00:41:28.639
+that is strictly terminal mode.
+
+00:41:28.640 --> 00:41:30.800
+Then we actually build Emacs, which is, you know,
+
+00:41:30.800 --> 00:41:33.259
+kind of boring, we're just gonna type make
+
+00:41:33.260 --> 00:41:35.259
+and then make is gonna run successfully.
+
+00:41:35.260 --> 00:41:37.880
+And make is gonna spew a ton of output, right?
+
+00:41:37.880 --> 00:41:41.099
+So here's where I do that /dev/null trick,
+
+00:41:41.100 --> 00:41:42.600
+where I pipe everything to /dev/null
+
+00:41:42.600 --> 00:41:45.819
+and then I, or I pipe standard output to /dev/null
+
+00:41:45.820 --> 00:41:47.520
+and then I pipe standard error
+
+00:41:47.520 --> 00:41:50.239
+to wherever standard output's going.
+
+00:41:50.240 --> 00:41:52.799
+And then at the end to say that it ran successfully,
+
+00:41:52.800 --> 00:41:55.379
+I say "Make ran successfully!"
+
+00:41:55.380 --> 00:41:57.799
+Then we take a look at the Emacs binary
+
+00:41:57.800 --> 00:41:59.879
+and you know, it's an elf binary.
+
+00:41:59.880 --> 00:42:01.720
+And, you know, because this is running on my Mac,
+
+00:42:01.720 --> 00:42:06.619
+this is an ARM-based machine, this virtual machine is.
+
+00:42:06.620 --> 00:42:10.519
+Oops, and this is a bug.
+
+00:42:10.520 --> 00:42:12.200
+This really should be a macro call,
+
+00:42:12.200 --> 00:42:14.800
+but I think I have the wrong number of curly braces
+
+00:42:14.800 --> 00:42:16.159
+or something in there.
+
+00:42:16.160 --> 00:42:19.129
+I need to figure out why that's not right.
+
+00:42:19.130 --> 00:42:21.109
+I'll look into that later.
+
+00:42:21.110 --> 00:42:23.979
+And then we install Emacs and then we kind of show
+
+00:42:23.980 --> 00:42:27.719
+like the file sizes of everything in the home directory.
+
+00:42:27.720 --> 00:42:31.989
+And then we, you know, show the binaries that got installed.
+
+NOTE Final thoughts
+
+00:42:31.990 --> 00:42:35.599
+Anyway, so this is the final thoughts section.
+
+00:42:35.600 --> 00:42:39.219
+And my final thoughts are, is I hope you enjoyed this talk
+
+00:42:39.220 --> 00:42:42.379
+and I hope you actually learned a thing or two.
+
+00:42:42.380 --> 00:42:43.360
+All right, thanks everybody.
+
+00:42:43.360 --> 00:42:45.200
+And I'll see you all next time.
diff --git a/2023/captions/emacsconf-2023-eat--eat-and-eat-powered-eshell-fast-featureful-terminal-inside-emacs--akib-azmain-turja--main.vtt b/2023/captions/emacsconf-2023-eat--eat-and-eat-powered-eshell-fast-featureful-terminal-inside-emacs--akib-azmain-turja--main.vtt
new file mode 100644
index 00000000..ccc2126f
--- /dev/null
+++ b/2023/captions/emacsconf-2023-eat--eat-and-eat-powered-eshell-fast-featureful-terminal-inside-emacs--akib-azmain-turja--main.vtt
@@ -0,0 +1,244 @@
+WEBVTT captioned by sachac
+
+NOTE Intro
+
+00:00:00.000 --> 00:00:04.199
+Hello everyone. Welcome to my talk.
+
+00:00:04.200 --> 00:00:09.359
+I am Akib Azmain Turja and my talk is titled
+
+00:00:09.360 --> 00:00:11.519
+"Eat and Eat-powered Eshell:
+
+00:00:11.520 --> 00:00:15.439
+Fast, featureful terminal inside Emacs."
+
+NOTE Benchmarking
+
+00:00:15.440 --> 00:00:22.839
+So I just claimed that Eat is a fast terminal emulator.
+
+00:00:22.840 --> 00:00:33.279
+Let me show you that. I will print a 1-megabyte sized file
+
+00:00:33.280 --> 00:00:39.039
+in the terminal using this command.
+
+00:00:39.040 --> 00:00:47.359
+It takes 0.76 seconds. Now let's benchmark term-mode.
+
+00:00:47.360 --> 00:00:54.799
+I will be in term -mode. I use the same command,
+
+00:00:54.800 --> 00:01:06.599
+and it's clearly the loser.
+
+00:01:06.600 --> 00:01:18.319
+It took 12 seconds, more than an order of magnitude slower.
+
+00:01:18.320 --> 00:01:27.279
+Let's also measure the speed of return.
+
+00:01:27.280 --> 00:01:33.479
+And it took 0.79 seconds.
+
+00:01:33.480 --> 00:01:36.159
+But this is actually a little bit slower than Eat.
+
+00:01:36.160 --> 00:01:41.799
+Why? That shouldn't happen.
+
+00:01:41.800 --> 00:01:49.719
+Anyway, hopefully that shows how fast Eat is.
+
+NOTE Running programs
+
+00:01:49.720 --> 00:01:54.439
+So let's run some extra programs in Eat,
+
+00:01:54.440 --> 00:02:05.639
+like top. You can also run htop or even btop.
+
+00:02:05.640 --> 00:02:08.559
+There is a fancy version of top.
+
+00:02:08.560 --> 00:02:20.239
+And obviously you can run Emacs in it.
+
+00:02:20.240 --> 00:02:33.879
+There is mouse support, and there is true color support.
+
+00:02:33.880 --> 00:02:38.799
+You can show any color in the terminal
+
+00:02:38.800 --> 00:02:47.079
+as long as your main display supports it.
+
+NOTE Shell integration
+
+00:02:47.080 --> 00:02:50.359
+And then there is shell integration.
+
+00:02:50.360 --> 00:02:52.399
+For example, directory tracking.
+
+00:02:52.400 --> 00:03:07.479
+Like, I can switch to some other directory
+
+00:03:07.480 --> 00:03:11.919
+and Emacs follows the shell directory.
+
+NOTE Prompt annotation
+
+00:03:11.920 --> 00:03:16.439
+Then there is prompt annotation,
+
+00:03:16.440 --> 00:03:20.319
+this column. These zeros indicate
+
+00:03:20.320 --> 00:03:27.079
+that the command has executed successfully.
+
+00:03:27.080 --> 00:03:37.679
+Then you can navigate between commands like this.
+
+NOTE Message passing
+
+00:03:37.680 --> 00:03:39.399
+There is message passing.
+
+00:03:39.400 --> 00:03:44.119
+By message passing, I mean sending something
+
+00:03:44.120 --> 00:03:46.959
+from the terminal to the host Emacs.
+
+00:03:46.960 --> 00:03:52.119
+By host Emacs, I mean Emacs running the terminal.
+
+00:03:52.120 --> 00:03:57.439
+For example I can say "hi" and it's showing "hi"
+
+00:03:57.440 --> 00:04:03.519
+in this echo area of my Emacs.
+
+NOTE Shell integration
+
+00:04:03.520 --> 00:04:08.679
+Then let's show you the killer feature of Eat,
+
+00:04:08.680 --> 00:04:20.239
+Eat's shell integration.
+
+00:04:20.240 --> 00:04:37.839
+You can run any program in it. For example: top, btop,
+
+00:04:37.840 --> 00:04:52.159
+and obviously Emacs itself.
+
+NOTE Input modes
+
+00:04:52.160 --> 00:05:03.159
+So let's discuss how to use Eat. There are four input modes.
+
+00:05:03.160 --> 00:05:07.319
+The first one is semi-char mode. That is the default mode.
+
+00:05:07.320 --> 00:05:10.919
+This is like vterm. All keys are the same to your terminal
+
+00:05:10.920 --> 00:05:17.879
+except these keys: C-c, C-x, C-g, M-x, etc.
+
+00:05:17.880 --> 00:05:20.599
+And then there is char-mode, where all keys
+
+00:05:20.600 --> 00:05:26.919
+are same to your terminal, except this M-RET key
+
+00:05:26.920 --> 00:05:29.679
+which takes you back to the semi-char mode.
+
+00:05:29.680 --> 00:05:34.559
+Then there is Emacs mode where you can select
+
+00:05:34.560 --> 00:05:39.719
+and copy from the terminal buffer.
+
+00:05:39.720 --> 00:05:42.679
+And finally, there is line mode.
+
+00:05:42.680 --> 00:05:49.199
+You can use it to use your terminal like a comint buffer.
+
+00:05:49.200 --> 00:05:55.999
+All these input modes are available in both Eat
+
+00:05:56.000 --> 00:06:05.879
+and eat-eshell mode, except this line mode--
+
+00:06:05.880 --> 00:06:10.439
+it's only available on Eat.
+
+00:06:10.440 --> 00:06:13.959
+By "on Eat", I mean the terminal you get
+
+00:06:13.960 --> 00:06:20.159
+by this eat command. By eshell, I mean
+
+00:06:20.160 --> 00:06:23.144
+when eat-eshell integration is enabled
+
+00:06:23.145 --> 00:06:28.446
+inside the eshell buffer.
+
+NOTE Documentation
+
+00:06:33.760 --> 00:06:36.719
+There is an info manual,
+
+00:06:36.720 --> 00:06:51.599
+And also the README is quite informative
+
+00:06:51.600 --> 00:06:54.999
+for you to get started.
+
+00:06:55.000 --> 00:07:13.519
+If you hit any problem,
+
+00:07:13.520 --> 00:07:22.959
+there is a dedicated chapter for debugging that,
+
+00:07:22.960 --> 00:07:26.119
+a common problems chapter.
+
+00:07:26.120 --> 00:07:27.999
+If your problem is still not fixed,
+
+00:07:28.000 --> 00:07:29.519
+please report it to me.
+
+00:07:29.520 --> 00:07:36.119
+This helps me improve it for everyone.
+
+00:07:36.120 --> 00:07:40.359
+When you report, please read this chapter
+
+00:07:40.360 --> 00:07:53.159
+so that you can make a better bug report.
+
+00:07:53.160 --> 00:07:57.639
+I am really looking forward to how people use it
+
+00:07:57.640 --> 00:07:59.079
+in their workflow.
+
+00:07:59.080 --> 00:08:03.479
+I am excited about that.
+
+00:08:03.480 --> 00:08:10.759
+Hopefully you enjoyed my talk. That was all.
+
+00:08:10.760 --> 00:08:12.720
+Enjoy EmacsConf. Goodbye.
diff --git a/2023/captions/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--answers.vtt b/2023/captions/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--answers.vtt
new file mode 100644
index 00000000..ecfdd018
--- /dev/null
+++ b/2023/captions/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--answers.vtt
@@ -0,0 +1,8261 @@
+WEBVTT
+
+
+00:00:53.489 --> 00:00:53.989
+[Speaker 0]: All right. I have unmuted.
+
+00:00:59.860 --> 00:01:00.180
+It's been a while since I've actually done an
+
+00:01:05.360 --> 00:01:05.860
+actual presentation. Hi.
+
+00:01:08.979 --> 00:01:09.380
+Okay. I'm going to deafen myself and mumble
+
+00:01:12.540 --> 00:01:13.040
+so that I don't get distracted by backstage
+
+00:01:16.400 --> 00:01:16.900
+chatter. Hello, everyone! Okay,
+
+00:01:17.980 --> 00:01:18.480
+so where are we? Questions,
+
+00:01:20.800 --> 00:01:21.300
+questions, questions. Okay,
+
+00:01:23.400 --> 00:01:23.600
+how easy would it be for someone else to
+
+00:01:25.960 --> 00:01:26.120
+reuse the Emacs conf strips and config to do
+
+00:01:29.380 --> 00:01:29.640
+a conf of their own? Like everything else,
+
+00:01:32.220 --> 00:01:32.560
+I have no idea if things actually work until
+
+00:01:35.140 --> 00:01:35.600
+somebody does it for, you know,
+
+00:01:37.500 --> 00:01:37.680
+to get everything to run on a computer that
+
+00:01:40.080 --> 00:01:40.200
+isn't my computer and with assumptions that
+
+00:01:40.640 --> 00:01:41.120
+aren't my assumptions.
+
+00:01:42.840 --> 00:01:43.340
+So, I have no idea. But optimistically,
+
+00:01:46.000 --> 00:01:46.480
+I have put most of the EmacsConf things,
+
+00:01:48.760 --> 00:01:49.200
+like EmacsConf, the name of the conference
+
+00:01:50.120 --> 00:01:50.620
+and things like that in variables.
+
+00:01:53.160 --> 00:01:53.320
+So if theoretically someone were to run an
+
+00:01:56.040 --> 00:01:56.320
+org mode conference or something like that,
+
+00:01:58.440 --> 00:01:58.940
+it might be possible to reuse all this code.
+
+00:02:01.960 --> 00:02:02.080
+We'll see. I don't know if it's going to be
+
+00:02:03.480 --> 00:02:03.560
+easy. I don't even know if it's going to be
+
+00:02:04.760 --> 00:02:05.260
+possible, but it might be fun to try.
+
+00:02:09.840 --> 00:02:10.199
+What tools would I like to exist in Emacs
+
+00:02:11.720 --> 00:02:12.220
+land to help with preparing the conference
+
+00:02:15.880 --> 00:02:16.320
+next time? Well, I've already been thinking
+
+00:02:18.420 --> 00:02:18.600
+about adjustments that I want to make to
+
+00:02:21.220 --> 00:02:21.720
+sub-eds so that the audio synchronization
+
+00:02:24.340 --> 00:02:24.560
+issues that we sometimes have with FFmpeg can
+
+00:02:26.600 --> 00:02:27.040
+be something that I can flag and maybe fix
+
+00:02:29.060 --> 00:02:29.560
+even while I'm watching a video.
+
+00:02:32.960 --> 00:02:33.340
+But also as much as possible,
+
+00:02:36.820 --> 00:02:37.020
+I like to leave the actual FFMPEG audio and
+
+00:02:39.220 --> 00:02:39.440
+visual tinkering with to other people like
+
+00:02:41.320 --> 00:02:41.520
+Leo, whose patience is slightly more than
+
+00:02:44.680 --> 00:02:45.180
+mine, because audio is,
+
+00:02:47.080 --> 00:02:47.260
+I still don't have the patience to sit for
+
+00:02:48.620 --> 00:02:48.900
+it. You can tell I talk really,
+
+00:02:50.540 --> 00:02:50.860
+really quickly. I'm still trying to squeeze
+
+00:02:53.000 --> 00:02:53.160
+everything into however little focus time I
+
+00:02:56.140 --> 00:02:56.280
+actually have. So it would be kind of nice to
+
+00:03:00.820 --> 00:03:01.320
+use that. Emacs is already doing quite a ton
+
+00:03:04.740 --> 00:03:04.900
+and stuffing more multimedia processing and
+
+00:03:06.180 --> 00:03:06.300
+other fun things into it might be
+
+00:03:07.000 --> 00:03:07.260
+interesting. Who knows?
+
+00:03:09.280 --> 00:03:09.440
+Oh, the other thing that I would really love
+
+00:03:12.280 --> 00:03:12.720
+to have that people always ask for is a way
+
+00:03:15.360 --> 00:03:15.860
+from Emacs to interact with the Etherpad.
+
+00:03:18.900 --> 00:03:19.340
+The Etherpad API, it seems very granular.
+
+00:03:21.120 --> 00:03:21.180
+Like, you can set the HTML of a pad,
+
+00:03:22.920 --> 00:03:23.100
+but you can't actually just append stuff to
+
+00:03:24.640 --> 00:03:24.960
+it. And I was trying to get something that
+
+00:03:26.820 --> 00:03:26.980
+could take questions from IRC and
+
+00:03:28.480 --> 00:03:28.980
+automatically push them into the pad,
+
+00:03:30.920 --> 00:03:31.400
+even from an ERC bot or whatever,
+
+00:03:34.400 --> 00:03:34.900
+but no go. If someone were to figure out some
+
+00:03:38.860 --> 00:03:39.160
+CRDT thing where we can collaboratively edit
+
+00:03:41.280 --> 00:03:41.500
+the document, that I think is the number 1
+
+00:03:42.720 --> 00:03:43.140
+request that people always have around
+
+00:03:46.560 --> 00:03:46.760
+EmacsConf. That would be really cool to do
+
+00:03:48.900 --> 00:03:49.320
+more of the conference itself from within
+
+00:03:53.240 --> 00:03:53.740
+Emacs. I don't know if actually,
+
+00:03:55.360 --> 00:03:55.860
+well, we have an org file now that launches
+
+00:03:59.440 --> 00:03:59.940
+the MPV from Emacs. But if you want to have
+
+00:04:01.960 --> 00:04:02.300
+an ex-widget or something else watching the
+
+00:04:03.740 --> 00:04:04.240
+conference from within Emacs itself.
+
+00:04:05.640 --> 00:04:06.140
+I think that will also be really cool.
+
+00:04:09.480 --> 00:04:09.980
+Yes. And then other fun stuff.
+
+00:04:12.980 --> 00:04:13.220
+OK, how can speakers and viewers help make
+
+00:04:15.280 --> 00:04:15.540
+preparing for next year's Emacs Conf even
+
+00:04:16.300 --> 00:04:16.800
+more fun for the organizers?
+
+00:04:20.440 --> 00:04:20.899
+Well, I love it when not only do the speakers
+
+00:04:24.280 --> 00:04:24.780
+do all that work to prepare their talk,
+
+00:04:27.620 --> 00:04:28.040
+but lately people have actually even been
+
+00:04:29.780 --> 00:04:30.280
+volunteering to caption their own talks.
+
+00:04:33.600 --> 00:04:33.740
+And that's great because then they know the
+
+00:04:36.000 --> 00:04:36.500
+words that they use. And if I can show them
+
+00:04:39.140 --> 00:04:39.280
+the workflow that we have so that they can do
+
+00:04:41.920 --> 00:04:42.420
+it very efficiently, because there's all
+
+00:04:44.620 --> 00:04:44.860
+these wonderful things that I do now with
+
+00:04:48.340 --> 00:04:48.580
+Subweb Waveform and Aeneas for like the
+
+00:04:49.900 --> 00:04:50.400
+forced alignment so we can get timestamps
+
+00:04:53.100 --> 00:04:53.360
+from text and all these other fun things that
+
+00:04:55.520 --> 00:04:55.680
+make getting a transcript or editing the
+
+00:04:57.380 --> 00:04:57.880
+captions fun and easy.
+
+00:05:00.780 --> 00:05:01.000
+That makes it easier for not only speakers to
+
+00:05:02.800 --> 00:05:03.280
+contribute captions for their own talks,
+
+00:05:05.220 --> 00:05:05.720
+but also interested volunteers who,
+
+00:05:07.760 --> 00:05:07.920
+as mentioned, get early access to all the
+
+00:05:09.140 --> 00:05:09.640
+talks and can watch them at leisure.
+
+00:05:12.540 --> 00:05:12.800
+And it's, you know, nice prick there.
+
+00:05:13.700 --> 00:05:14.200
+Definitely should try that.
+
+00:05:19.400 --> 00:05:19.600
+I do have some sample videos of how we use
+
+00:05:21.500 --> 00:05:22.000
+subed. But of course, in the process of
+
+00:05:24.280 --> 00:05:24.780
+shoving like 30 or 40 talks,
+
+00:05:26.600 --> 00:05:27.100
+maybe 30 talks through it for EmacsConf,
+
+00:05:29.440 --> 00:05:29.640
+this is like the stress test season for
+
+00:05:30.340 --> 00:05:30.760
+subed, which is great,
+
+00:05:31.880 --> 00:05:32.380
+I ended up adding more features.
+
+00:05:36.260 --> 00:05:36.500
+So 1 of my big to-dos afterwards is I have to
+
+00:05:38.300 --> 00:05:38.600
+document the different workflows for things
+
+00:05:40.260 --> 00:05:40.760
+like, okay, you've got a script.
+
+00:05:43.520 --> 00:05:43.700
+You can use WDiff to get word diffs so you
+
+00:05:45.600 --> 00:05:45.760
+can take the subtitles and compare them with
+
+00:05:47.540 --> 00:05:47.720
+the original script and see where the
+
+00:05:48.880 --> 00:05:49.380
+misrecognized words are.
+
+00:05:52.960 --> 00:05:53.360
+And that's great. Or you can use SubWeb
+
+00:05:54.960 --> 00:05:55.440
+Waveform to start adjusting things.
+
+00:05:56.820 --> 00:05:57.320
+Or for example, if there's a synchronization
+
+00:06:01.320 --> 00:06:01.820
+issue, I can now middle click on a subtitle
+
+00:06:03.680 --> 00:06:04.000
+where I want the subtitle to actually start
+
+00:06:06.500 --> 00:06:06.680
+and then move all the subtitles to start at
+
+00:06:09.020 --> 00:06:09.280
+that point. So it's getting to be a really
+
+00:06:10.860 --> 00:06:11.000
+elaborate tool. And I definitely need to
+
+00:06:15.220 --> 00:06:15.520
+document that and stick all the blog post
+
+00:06:17.860 --> 00:06:18.040
+links into the readme so that people can find
+
+00:06:20.560 --> 00:06:20.740
+this in the future. So it's very,
+
+00:06:23.080 --> 00:06:23.320
+very nifty. And the reason why we do this is
+
+00:06:24.720 --> 00:06:25.220
+because, well, personally,
+
+00:06:26.820 --> 00:06:27.160
+I have a hard time sitting and watching
+
+00:06:28.940 --> 00:06:29.080
+videos. I like to be able to just jump to the
+
+00:06:31.540 --> 00:06:31.780
+interesting parts or watch it at 3 times
+
+00:06:33.400 --> 00:06:33.900
+speed, which MPV lets me do.
+
+00:06:36.160 --> 00:06:36.660
+And the text makes it a lot more searchable,
+
+00:06:38.960 --> 00:06:39.460
+which is fantastic. And also because,
+
+00:06:41.000 --> 00:06:41.480
+you know, if you've got all these interesting
+
+00:06:44.220 --> 00:06:44.720
+variable names and key bindings and whatever,
+
+00:06:47.360 --> 00:06:47.520
+and the automatic subtitles just don't do the
+
+00:06:49.540 --> 00:06:49.740
+right thing. So it's nice that people do the
+
+00:06:53.360 --> 00:06:53.480
+captioning. So, yeah, so that's 1 thing that
+
+00:06:55.080 --> 00:06:55.380
+people can help with. Captioning is always
+
+00:06:57.160 --> 00:06:57.280
+very interesting. And the other thing that
+
+00:07:00.600 --> 00:07:00.780
+people can do is take the inspiration that
+
+00:07:02.860 --> 00:07:03.340
+you get from EmacsConf and from the ideas
+
+00:07:04.640 --> 00:07:05.140
+that you have when you're working with Emacs,
+
+00:07:07.280 --> 00:07:07.780
+and suggest talks for next year's EmacsConf.
+
+00:07:09.760 --> 00:07:10.260
+And it doesn't have to be a super fancy,
+
+00:07:13.740 --> 00:07:14.060
+nobody else needs to go out and do a really
+
+00:07:14.920 --> 00:07:15.420
+professional-looking video.
+
+00:07:17.480 --> 00:07:17.640
+Even though Howard has set the bar this you
+
+00:07:19.640 --> 00:07:19.840
+know it's pretty high you don't have to do
+
+00:07:22.540 --> 00:07:22.660
+that kind of thing it can be just you in a
+
+00:07:24.860 --> 00:07:25.240
+screen or even just a screen and you talking
+
+00:07:27.340 --> 00:07:27.400
+about this cool thing that you learned and
+
+00:07:29.040 --> 00:07:29.340
+they could be a video or it could be a blog
+
+00:07:31.560 --> 00:07:31.940
+post it could be something else and that
+
+00:07:34.780 --> 00:07:35.020
+those those things are fantastic because they
+
+00:07:36.960 --> 00:07:37.200
+inspire people to see what's possible with
+
+00:07:39.440 --> 00:07:39.620
+Emacs. So that's another big thing that
+
+00:07:40.800 --> 00:07:41.300
+people can do to help.
+
+00:07:44.080 --> 00:07:44.480
+And then there's sharing the word about it.
+
+00:07:46.360 --> 00:07:46.840
+So if you saw something that you really like,
+
+00:07:48.760 --> 00:07:49.080
+if you write a blog post about it or a tweet
+
+00:07:51.220 --> 00:07:51.480
+or a toot or whatever else you want to do,
+
+00:07:52.480 --> 00:07:52.980
+you make a reaction video,
+
+00:07:55.280 --> 00:07:55.780
+that helps other people discover that stuff
+
+00:07:57.800 --> 00:07:58.080
+not just today, not just next week,
+
+00:08:00.340 --> 00:08:00.540
+but you know even later as they search for
+
+00:08:04.640 --> 00:08:05.140
+these words that as people search for ideas
+
+00:08:07.360 --> 00:08:07.760
+using words that are not necessarily the ones
+
+00:08:10.320 --> 00:08:10.560
+in the video, you describing things in other
+
+00:08:11.980 --> 00:08:12.400
+ways helps with the search engine
+
+00:08:13.500 --> 00:08:13.740
+optimization, you're not really,
+
+00:08:15.200 --> 00:08:15.700
+it's just people finding stuff,
+
+00:08:17.220 --> 00:08:17.500
+which is amazing. So yes,
+
+00:08:19.000 --> 00:08:19.500
+please write about the cool things that
+
+00:08:22.840 --> 00:08:23.040
+you've seen and what you'd like to tell other
+
+00:08:25.920 --> 00:08:26.280
+people about. Suggesting ideas for talks.
+
+00:08:30.040 --> 00:08:30.340
+Yes. Making talks. All sorts of wonderful
+
+00:08:35.220 --> 00:08:35.380
+things. OK. Could you elaborate on the
+
+00:08:37.080 --> 00:08:37.320
+workflow that goes on in your mind for when
+
+00:08:38.080 --> 00:08:38.320
+approaching these things?
+
+00:08:40.260 --> 00:08:40.460
+Do you start with an Emacs org solution right
+
+00:08:42.240 --> 00:08:42.340
+off the bat at this point when faced with a
+
+00:08:44.059 --> 00:08:44.340
+task? Are there some conscious steps involved
+
+00:08:46.200 --> 00:08:46.460
+from early ideas to automation of the kind
+
+00:08:48.740 --> 00:08:49.080
+you just showed? Mostly it starts with,
+
+00:08:50.740 --> 00:08:51.040
+okay, we got to do this thing.
+
+00:08:53.720 --> 00:08:54.220
+So I have this to-do. And sometimes,
+
+00:08:55.860 --> 00:08:56.200
+like in the week before the conference,
+
+00:08:57.440 --> 00:08:57.720
+I have to think, okay,
+
+00:09:00.740 --> 00:09:01.000
+is this a top priority thing that I can do
+
+00:09:01.460 --> 00:09:01.960
+before the conference,
+
+00:09:03.480 --> 00:09:03.980
+or is it something that I can,
+
+00:09:05.800 --> 00:09:06.160
+I, I, like we can still do the conference
+
+00:09:08.200 --> 00:09:08.360
+without doing so I have to just postpone it
+
+00:09:09.860 --> 00:09:10.360
+until afterwards? So some prioritization
+
+00:09:12.160 --> 00:09:12.280
+happens. But a lot of times it's like,
+
+00:09:13.140 --> 00:09:13.320
+okay, you know, like this,
+
+00:09:14.620 --> 00:09:14.820
+there's a thing that I need to do here.
+
+00:09:15.920 --> 00:09:16.360
+I don't know how to figure it out,
+
+00:09:18.840 --> 00:09:19.080
+let me start an org Babble block and start
+
+00:09:19.760 --> 00:09:20.240
+sketching out something,
+
+00:09:22.120 --> 00:09:22.620
+you know, custom function or whatever else,
+
+00:09:23.980 --> 00:09:24.200
+and then say okay, you know,
+
+00:09:25.380 --> 00:09:25.760
+hey, that looks kind of useful,
+
+00:09:27.180 --> 00:09:27.600
+let me see if I can generalize that,
+
+00:09:29.440 --> 00:09:29.640
+and then let me stick it into the library so
+
+00:09:30.820 --> 00:09:31.320
+that I can find it next year.
+
+00:09:33.200 --> 00:09:33.520
+And that's basically how it goes.
+
+00:09:35.500 --> 00:09:36.000
+It just goes, it just like,
+
+00:09:37.540 --> 00:09:38.040
+I have a thing that I need to do.
+
+00:09:40.080 --> 00:09:40.280
+If it's, if I'm going to do it more than
+
+00:09:42.440 --> 00:09:42.720
+once, or actually even if I'm going to do it,
+
+00:09:44.640 --> 00:09:44.800
+you know, once I tried to automate it just so
+
+00:09:46.000 --> 00:09:46.500
+that I can understand it and,
+
+00:09:47.700 --> 00:09:48.100
+and then I can, I can,
+
+00:09:50.280 --> 00:09:50.440
+I can squeeze it into like the 15 minutes I
+
+00:09:54.140 --> 00:09:54.280
+actually have and I can pause and I can pick
+
+00:09:56.240 --> 00:09:56.380
+it up again and the code is still there and
+
+00:09:57.160 --> 00:09:57.660
+my notes are still there?
+
+00:10:00.600 --> 00:10:00.760
+And then every little bit of the,
+
+00:10:03.540 --> 00:10:04.040
+every little step like that builds up.
+
+00:10:05.740 --> 00:10:06.100
+So I can write a short function today,
+
+00:10:07.680 --> 00:10:07.820
+and then tomorrow when the kid was asleep,
+
+00:10:09.240 --> 00:10:09.740
+I can write a little bit more of that.
+
+00:10:11.160 --> 00:10:11.660
+And so it just goes on from there.
+
+00:10:14.260 --> 00:10:14.760
+And then I just stuff that all in there.
+
+00:10:17.660 --> 00:10:17.900
+How well does this approach allow for other
+
+00:10:19.960 --> 00:10:20.140
+organisers to do individual customisations to
+
+00:10:21.500 --> 00:10:21.640
+their liking while still being able to
+
+00:10:22.120 --> 00:10:22.620
+collaborate effectively?
+
+00:10:25.960 --> 00:10:26.460
+We've actually split things up fairly neatly
+
+00:10:28.020 --> 00:10:28.260
+in the sense that for this year,
+
+00:10:30.620 --> 00:10:30.940
+for example, most everyone else was super
+
+00:10:34.400 --> 00:10:34.900
+busy, so I did all the heavy lifting up until
+
+00:10:37.420 --> 00:10:37.540
+people were available and then they jumped in
+
+00:10:38.240 --> 00:10:38.740
+with the audio normalization.
+
+00:10:39.600 --> 00:10:39.840
+Thank you very much, Leo,
+
+00:10:41.280 --> 00:10:41.780
+for doing all of that stuff and the hosting
+
+00:10:42.840 --> 00:10:43.340
+and all the other things.
+
+00:10:45.720 --> 00:10:46.040
+So I tend to do most of the Emacs list
+
+00:10:48.080 --> 00:10:48.360
+fiddling with and the shell scripting and
+
+00:10:49.960 --> 00:10:50.460
+stuff like that, aside from the FFmpeg
+
+00:10:53.100 --> 00:10:53.520
+incantations, which are too arcane for me to
+
+00:10:56.860 --> 00:10:57.040
+even think about. And then in the course of
+
+00:10:57.980 --> 00:10:58.180
+watching me deal with like,
+
+00:10:59.440 --> 00:10:59.640
+oh, no, this video is not playing.
+
+00:11:01.080 --> 00:11:01.280
+And then they see the commands that I'm
+
+00:11:04.240 --> 00:11:04.640
+using, like play and then,
+
+00:11:05.740 --> 00:11:06.240
+you know, play a world,
+
+00:11:08.760 --> 00:11:08.920
+which is the ideas of the talk that we were
+
+00:11:10.440 --> 00:11:10.940
+having a hard time with or MPD or whatever.
+
+00:11:13.520 --> 00:11:13.740
+Then the other organizers kind of just pick
+
+00:11:15.320 --> 00:11:15.480
+that up by osmosis, because We didn't even
+
+00:11:17.160 --> 00:11:17.360
+have time to do dry runs for training this
+
+00:11:20.540 --> 00:11:20.740
+year. So it's just there's not much
+
+00:11:22.500 --> 00:11:22.660
+collaboration in the sense that I'm just
+
+00:11:24.400 --> 00:11:24.740
+basically saying, OK, these are the scripts
+
+00:11:25.760 --> 00:11:26.260
+that I'm going to write for myself.
+
+00:11:28.980 --> 00:11:29.480
+And you all figure out how to work with that.
+
+00:11:34.780 --> 00:11:35.280
+What was the hardest problem you encountered
+
+00:11:37.040 --> 00:11:37.180
+in organizing or running the conference this
+
+00:11:38.540 --> 00:11:39.040
+year and how do you deal with it?
+
+00:11:40.680 --> 00:11:40.840
+Oh, the constant, constant problem with
+
+00:11:43.340 --> 00:11:43.820
+e-mails. There's so many amazing ideas.
+
+00:11:45.660 --> 00:11:46.160
+I want to fit into the time.
+
+00:11:46.920 --> 00:11:47.420
+And then afterwards, like,
+
+00:11:49.740 --> 00:11:49.960
+Sasha, do not mess with production the day
+
+00:11:50.440 --> 00:11:50.860
+before the conference.
+
+00:11:52.480 --> 00:11:52.680
+You're going to save that for after the
+
+00:11:54.440 --> 00:11:54.920
+conference, right? So that's the hardest
+
+00:11:56.140 --> 00:11:56.420
+part, is just saying, OK,
+
+00:11:58.620 --> 00:11:58.780
+yes, that's an idea. I'm going to put that in
+
+00:12:01.400 --> 00:12:01.680
+the inbox. We're going to maybe get to that
+
+00:12:03.120 --> 00:12:03.620
+next year. But right now,
+
+00:12:05.400 --> 00:12:05.560
+these are the things that I need to do in
+
+00:12:07.200 --> 00:12:07.700
+order to get the conference off the ground
+
+00:12:14.820 --> 00:12:15.320
+reasonably in a reasonable amount of time.
+
+00:12:17.140 --> 00:12:17.640
+So earlier in the conference,
+
+00:12:19.240 --> 00:12:19.740
+then I can be like, OK,
+
+00:12:21.900 --> 00:12:22.360
+what if we do this? What if we run everything
+
+00:12:24.360 --> 00:12:24.640
+off a crontab instead of using Emacs tramp
+
+00:12:25.680 --> 00:12:26.180
+timers? Wouldn't that be great?
+
+00:12:28.380 --> 00:12:28.840
+And then I can explore all those crazy ideas.
+
+00:12:30.440 --> 00:12:30.720
+But then as we get closer and closer to date,
+
+00:12:32.440 --> 00:12:32.720
+I'm like, okay, fine. I'm going to like just
+
+00:12:34.200 --> 00:12:34.700
+capture the idea and deal with it later.
+
+00:12:36.080 --> 00:12:36.580
+So that's really, really hard for me.
+
+00:12:39.520 --> 00:12:39.800
+Year to your growth in attendance and after
+
+00:12:40.760 --> 00:12:41.260
+the conference video watching.
+
+00:12:46.240 --> 00:12:46.740
+The growth, well, first thing,
+
+00:12:51.110 --> 00:12:51.610
+there is like absolute growth in the kind of
+
+00:12:53.520 --> 00:12:53.720
+the quantity of things that people are
+
+00:12:56.820 --> 00:12:57.180
+sharing. I have a blog post about this that
+
+00:12:59.440 --> 00:12:59.820
+talks about a number of minutes of talks,
+
+00:13:02.160 --> 00:13:02.360
+and it's going up. Last year,
+
+00:13:03.740 --> 00:13:03.960
+we did 2 tracks because I couldn't fit
+
+00:13:05.460 --> 00:13:05.720
+everything in 1 day. And this year,
+
+00:13:07.000 --> 00:13:07.240
+we did 2 tracks, but even then,
+
+00:13:08.000 --> 00:13:08.360
+everything was kind of squished,
+
+00:13:09.880 --> 00:13:10.040
+and I was trying to find space in the
+
+00:13:11.940 --> 00:13:12.160
+schedule. And if you make it so that next
+
+00:13:13.500 --> 00:13:14.000
+year, we have to figure out 3 tracks,
+
+00:13:15.760 --> 00:13:16.000
+I think We have another host now,
+
+00:13:16.840 --> 00:13:17.340
+so it might be doable,
+
+00:13:19.540 --> 00:13:19.820
+which is great. Who knows?
+
+00:13:23.600 --> 00:13:23.860
+We'll see. And the other interesting thing
+
+00:13:25.320 --> 00:13:25.520
+that I'm seeing in terms of growth is that
+
+00:13:27.440 --> 00:13:27.720
+people are starting to refer to the talks
+
+00:13:29.800 --> 00:13:30.300
+from previous conferences that inspired them.
+
+00:13:32.980 --> 00:13:33.220
+So the evil plan is working in that it is
+
+00:13:35.000 --> 00:13:35.160
+getting people to get cool stuff out of their
+
+00:13:37.020 --> 00:13:37.200
+heads and into videos that have like
+
+00:13:39.560 --> 00:13:39.720
+searchable transcripts and that people can
+
+00:13:41.980 --> 00:13:42.280
+refer to as for inspiration and for showing
+
+00:13:42.980 --> 00:13:43.200
+other people, hey, look,
+
+00:13:44.060 --> 00:13:44.560
+this is what it can do.
+
+00:13:46.360 --> 00:13:46.860
+So that is fantastic growth.
+
+00:13:49.400 --> 00:13:49.540
+The actual numbers, I'm intense to look at
+
+00:13:51.160 --> 00:13:51.660
+the number of simultaneous viewers.
+
+00:13:53.860 --> 00:13:53.980
+And every so often, it's kind of nice to go
+
+00:13:55.960 --> 00:13:56.360
+through the YouTube stats or whatever.
+
+00:13:57.560 --> 00:13:57.980
+But that's not so much as a,
+
+00:14:01.120 --> 00:14:01.320
+like, I don't really keep that in mind as
+
+00:14:05.060 --> 00:14:05.560
+much, just because as long as people are
+
+00:14:07.660 --> 00:14:07.880
+connecting to the ideas and getting stuff out
+
+00:14:13.120 --> 00:14:13.440
+there and being inspired to think around
+
+00:14:16.220 --> 00:14:16.720
+more, then it's doing the thing.
+
+00:14:21.300 --> 00:14:21.460
+Cognizant is working. So where are we now for
+
+00:14:22.640 --> 00:14:23.140
+questions? Ooh, I can actually,
+
+00:14:25.320 --> 00:14:25.820
+I have ERC here. I can find eventually.
+
+00:14:28.200 --> 00:14:28.700
+1 of my screens has Dev in it.
+
+00:14:30.780 --> 00:14:31.260
+Okay, here we are. What are the other
+
+00:14:34.900 --> 00:14:35.400
+questions? Probably, Probably an IRC.
+
+00:14:39.120 --> 00:14:39.520
+Where's IRC? Dove, dove,
+
+00:14:45.700 --> 00:14:46.200
+dove. I did try to record things more slowly,
+
+00:14:47.200 --> 00:14:47.520
+and I tried several times,
+
+00:14:49.920 --> 00:14:50.020
+but I really just speak very quickly when I
+
+00:14:53.300 --> 00:14:53.480
+get excited and Emacs is very fun so it is
+
+00:14:59.960 --> 00:15:00.460
+tough oh yes okay so 1 in once yes automated
+
+00:15:04.440 --> 00:15:04.540
+present workflows oh yeah okay so where are
+
+00:15:05.660 --> 00:15:05.840
+we now for time? Oh look,
+
+00:15:07.440 --> 00:15:07.900
+it's 4.30, should we do our closing remarks
+
+00:15:09.280 --> 00:15:09.440
+or like how are things going over in the
+
+00:15:11.840 --> 00:15:12.340
+other stream? I should find out.
+
+00:15:14.760 --> 00:15:14.860
+[Speaker 1]: Yeah, I've been keeping a close eye on the
+
+00:15:16.400 --> 00:15:16.900
+other 1, but yeah, I believe that-
+
+00:15:19.800 --> 00:15:20.300
+[Speaker 0]: Yay, look at that, good timing.
+
+00:15:22.880 --> 00:15:23.300
+Okay, I have managed to zoom through the
+
+00:15:26.660 --> 00:15:26.980
+questions and we can switch over to the
+
+00:15:31.240 --> 00:15:31.740
+closing remarks how do we do this yes okay
+
+00:15:35.060 --> 00:15:35.400
+okay we're gonna oh wait people okay people
+
+00:15:37.580 --> 00:15:37.760
+who wanted to ask questions how do you want
+
+00:15:39.120 --> 00:15:39.360
+to do this? Because there are a lot of people
+
+00:15:42.040 --> 00:15:42.240
+in this 1 here too. You want to go to the
+
+00:15:48.820 --> 00:15:49.320
+other 1? 0 no, they aren't done yet.
+
+00:15:51.180 --> 00:15:51.600
+Sorry, I forgot to turn on the con tab
+
+00:15:52.500 --> 00:15:53.000
+because of course I got excited.
+
+00:15:54.840 --> 00:15:55.200
+Okay, so Jacob is still answering questions,
+
+00:15:56.940 --> 00:15:57.440
+which means I get to still answer questions.
+
+00:15:59.880 --> 00:16:00.060
+Now I'll try to be quiet and let people in
+
+00:16:01.720 --> 00:16:02.220
+the BBB room speak up if we want to.
+
+00:16:12.040 --> 00:16:12.540
+Okay that means
+
+00:16:13.585 --> 00:16:13.650
+[Speaker 3]: are going to hear.
+
+00:16:13.715 --> 00:16:13.780
+[Speaker 1]: Some more
+
+00:16:15.660 --> 00:16:16.100
+[Speaker 2]: people in the chat ideas I had on the Emacs
+
+00:16:17.500 --> 00:16:18.000
+conferences you could have like a little
+
+00:16:21.300 --> 00:16:21.660
+Emacs starter config just for like the Emacs
+
+00:16:26.720 --> 00:16:27.040
+conference where you have emms playlist and
+
+00:16:29.540 --> 00:16:29.780
+IRC help cheer function to help get you into
+
+00:16:35.200 --> 00:16:35.320
+IRC into ERC and then the to-do states that I
+
+00:16:36.060 --> 00:16:36.560
+was talking about before.
+
+00:16:40.200 --> 00:16:40.380
+So you can say, I'm watching this 1,
+
+00:16:41.320 --> 00:16:41.480
+I want to re-watch this 1,
+
+00:16:42.780 --> 00:16:43.080
+but I'm going to skip it because I'm watching
+
+00:16:52.820 --> 00:16:53.220
+something else. I used the HyperBowl package
+
+00:16:55.680 --> 00:16:55.860
+to go straight to the web pages to all the
+
+00:16:59.600 --> 00:16:59.860
+either pads but you can also have some quick
+
+00:17:04.540 --> 00:17:04.960
+functions to go into a CRDT buffer hosted
+
+00:17:07.400 --> 00:17:07.900
+buffer, where all the org mode Etherpad
+
+00:17:14.220 --> 00:17:14.440
+documents would be. And then that would get
+
+00:17:15.280 --> 00:17:15.780
+everybody using Emacs,
+
+00:17:17.680 --> 00:17:17.839
+and then they could all be chatting with each
+
+00:17:23.480 --> 00:17:23.980
+other with CRDT, with controlling Emacs.
+
+00:17:25.440 --> 00:17:25.680
+I don't know how the sub stuff,
+
+00:17:27.160 --> 00:17:27.339
+I don't know if you can get the sub stuff in
+
+00:17:29.720 --> 00:17:30.060
+there working, but yeah,
+
+00:17:32.900 --> 00:17:33.160
+It could be a good way of getting it all
+
+00:17:34.920 --> 00:17:35.420
+wrapped up together. And also,
+
+00:17:38.040 --> 00:17:38.400
+Mkron, if you ever looked at that versus
+
+00:17:40.800 --> 00:17:41.300
+Kron, Mkron is configured in Elisp.
+
+00:17:43.320 --> 00:17:43.740
+Then you can also write some custom functions
+
+00:17:44.620 --> 00:17:45.120
+in the middle of your Kron.
+
+00:17:46.800 --> 00:17:47.280
+So maybe you could make some like conditional
+
+00:17:48.960 --> 00:17:49.460
+things where you can start or stop it.
+
+00:17:56.320 --> 00:17:56.440
+And like 1 of the differences is if your
+
+00:17:58.860 --> 00:17:59.100
+computer reboots, it can start up and say,
+
+00:18:01.780 --> 00:18:02.160
+oh, I'm supposed to run this cron job at this
+
+00:18:04.960 --> 00:18:05.200
+time and then just Do the correct thing
+
+00:18:08.100 --> 00:18:08.600
+rather than losing the state Randomly because
+
+00:18:10.440 --> 00:18:10.940
+your computer lost power
+
+00:18:15.700 --> 00:18:15.900
+[Speaker 0]: Thanks for those recommendations I will add
+
+00:18:17.640 --> 00:18:18.140
+mcron to my list of things to check out.
+
+00:18:23.640 --> 00:18:24.020
+And yeah, we finally remembered to publish
+
+00:18:25.160 --> 00:18:25.400
+all those schedules as org,
+
+00:18:27.540 --> 00:18:27.840
+and I decided to just spam all the time zones
+
+00:18:28.520 --> 00:18:29.020
+with them, which was fantastic.
+
+00:18:30.480 --> 00:18:30.620
+And other people have mentioned that this is
+
+00:18:32.720 --> 00:18:32.960
+useful. We get to figure out how to use this
+
+00:18:35.740 --> 00:18:35.900
+to teach people more about what you can do
+
+00:18:36.620 --> 00:18:37.120
+with org. As you mentioned,
+
+00:18:40.920 --> 00:18:41.280
+encouraging them to tag the stuff with things
+
+00:18:43.360 --> 00:18:43.860
+that they want to attend gives us the ability
+
+00:18:45.920 --> 00:18:46.240
+to set up an agenda view for them that has
+
+00:18:47.840 --> 00:18:48.340
+the talks that are tagged with those tags.
+
+00:18:48.580 --> 00:18:48.600
+[Speaker 3]: So I
+
+00:18:49.280 --> 00:18:49.780
+[Speaker 0]: was like, okay, let's,
+
+00:18:53.880 --> 00:18:54.340
+let's teach org mode and lisp in the process
+
+00:18:58.120 --> 00:18:58.380
+of doing things. Okay,
+
+00:19:00.860 --> 00:19:01.000
+there was a question about any chance of an
+
+00:19:02.720 --> 00:19:03.220
+in person EmacsConf again someday.
+
+00:19:05.580 --> 00:19:06.000
+And I was actually at the very first EMAX
+
+00:19:11.040 --> 00:19:11.400
+Conf, which was 2013 and organized in London
+
+00:19:12.980 --> 00:19:13.080
+to take advantage of the fact that I had a
+
+00:19:15.920 --> 00:19:16.160
+business shift there. It was fantastic being
+
+00:19:18.760 --> 00:19:19.120
+in a room with 100 other people who are all
+
+00:19:19.960 --> 00:19:20.460
+really interested in Emacs,
+
+00:19:23.400 --> 00:19:23.560
+but I'm not traveling like any time for the
+
+00:19:25.560 --> 00:19:25.680
+foreseeable future, so if other people are
+
+00:19:27.500 --> 00:19:27.800
+interested in organizing something like that,
+
+00:19:29.260 --> 00:19:29.760
+I am totally happy to spread the word.
+
+00:19:31.440 --> 00:19:31.860
+It doesn't fit with my current lifestyle,
+
+00:19:32.860 --> 00:19:33.360
+but it might fit somebody's.
+
+00:19:37.080 --> 00:19:37.580
+I don't know. We're still just here.
+
+00:19:38.800 --> 00:19:39.300
+And I like the virtual conference.
+
+00:19:41.880 --> 00:19:42.120
+I really like the fact that we can bring
+
+00:19:43.780 --> 00:19:44.280
+together people from all over the world.
+
+00:19:46.720 --> 00:19:46.840
+I can take a look at my schedule with all the
+
+00:19:47.540 --> 00:19:47.720
+time constraints. Okay,
+
+00:19:49.000 --> 00:19:49.300
+I need to put this person in the morning
+
+00:19:50.720 --> 00:19:50.800
+because they're in Australia and I need to
+
+00:19:52.160 --> 00:19:52.360
+put this person in the afternoon because
+
+00:19:56.120 --> 00:19:56.360
+they're from Vancouver or from somewhere else
+
+00:19:58.020 --> 00:19:58.520
+in the Pacific time zone.
+
+00:20:01.420 --> 00:20:01.920
+And it's just this breadth of people.
+
+00:20:04.140 --> 00:20:04.300
+But the other thing that I would love for
+
+00:20:06.220 --> 00:20:06.420
+people to start thinking about is if we could
+
+00:20:08.300 --> 00:20:08.560
+have a virtual conference in other time
+
+00:20:11.320 --> 00:20:11.580
+zones, so that's easier for people in Asia
+
+00:20:12.720 --> 00:20:13.220
+Pacific or Europe to attend.
+
+00:20:16.080 --> 00:20:16.580
+And as we're getting the hang of this,
+
+00:20:17.840 --> 00:20:18.080
+this crontab-based thing,
+
+00:20:20.140 --> 00:20:20.320
+I think we might almost be at the point where
+
+00:20:22.320 --> 00:20:22.540
+I can set it up to run even when I'm
+
+00:20:24.720 --> 00:20:25.080
+sleeping. And then other people can figure
+
+00:20:26.120 --> 00:20:26.520
+out, you know, the exception handling,
+
+00:20:27.780 --> 00:20:27.900
+oh, you know, this talk needs to be
+
+00:20:30.420 --> 00:20:30.780
+restarted. Okay, just play it again and scrub
+
+00:20:31.800 --> 00:20:32.300
+around to find the right part,
+
+00:20:34.500 --> 00:20:35.000
+which means we could have replays,
+
+00:20:37.060 --> 00:20:37.560
+or we can have like the Asia Pacific
+
+00:20:39.140 --> 00:20:39.440
+Alternate Event that we had the other time
+
+00:20:45.600 --> 00:20:45.780
+where some speakers came back online and did
+
+00:20:48.840 --> 00:20:49.040
+another Q&A session just for that kind of
+
+00:20:51.360 --> 00:20:51.660
+event. So those are other cool,
+
+00:20:52.960 --> 00:20:53.460
+fun things that would love to be,
+
+00:20:57.700 --> 00:20:58.140
+would be great. Satellite events,
+
+00:20:59.480 --> 00:20:59.980
+someone mentioned in the etherpad.
+
+00:21:03.280 --> 00:21:03.520
+Some people have been organizing these,
+
+00:21:05.020 --> 00:21:05.280
+which are great. Basically a bunch of people
+
+00:21:07.800 --> 00:21:08.080
+get together in a room or 2 rooms now because
+
+00:21:10.320 --> 00:21:10.820
+of the tracks and watch Emacs Conf together.
+
+00:21:12.940 --> 00:21:13.140
+So if you have a physical meetup or if you'd
+
+00:21:15.360 --> 00:21:15.760
+like to start 1, It's basically,
+
+00:21:17.860 --> 00:21:17.960
+you know, do this, maybe have stickers if you
+
+00:21:19.900 --> 00:21:20.200
+have stickers. You know,
+
+00:21:22.540 --> 00:21:22.800
+it's just have everyone come over and hang
+
+00:21:24.440 --> 00:21:24.680
+out and meet people. I don't know.
+
+00:21:27.540 --> 00:21:27.660
+It's a thing. Specifically how to do it,
+
+00:21:29.200 --> 00:21:29.700
+I have no idea how to organize these things.
+
+00:21:32.080 --> 00:21:32.580
+But Alain does. So talk to him.
+
+00:21:35.280 --> 00:21:35.580
+[Speaker 2]: Another way of adding multiple tracks is
+
+00:21:37.640 --> 00:21:38.140
+changing it to doing it like 2 times a year,
+
+00:21:39.760 --> 00:21:40.260
+in max confidence.
+
+00:21:44.340 --> 00:21:44.640
+[Speaker 0]: Yeah, yeah, people have mentioned something
+
+00:21:50.080 --> 00:21:50.320
+like that. Or the fact that org often has
+
+00:21:51.860 --> 00:21:52.280
+like a full day of talks by itself,
+
+00:21:53.800 --> 00:21:53.980
+and actually a little bit more than a day
+
+00:21:55.440 --> 00:21:55.640
+now, because I've been squeezing things into
+
+00:21:58.260 --> 00:21:58.760
+other tracks. There has been some potential
+
+00:22:00.060 --> 00:22:00.560
+interest in having an org conf.
+
+00:22:03.240 --> 00:22:03.480
+It could be a thing. And I'd love to see
+
+00:22:05.760 --> 00:22:06.240
+also, we'd love to experiment with other
+
+00:22:08.900 --> 00:22:09.240
+formats. So there could be a bug hunting
+
+00:22:13.740 --> 00:22:13.900
+session or let's use the breakout rooms to
+
+00:22:15.920 --> 00:22:16.120
+split up into little mentoring groups and see
+
+00:22:18.040 --> 00:22:18.240
+how that works. So lots of things that we can
+
+00:22:21.460 --> 00:22:21.760
+do. They've actually finished over in the Gen
+
+00:22:24.360 --> 00:22:24.620
+track so I don't know if people want to very
+
+00:22:26.480 --> 00:22:26.920
+quickly ask questions here or if we go there.
+
+00:22:31.000 --> 00:22:31.260
+Leo has come over here instead so okay he's
+
+00:22:32.560 --> 00:22:33.060
+joining over here on the other side.
+
+00:22:35.680 --> 00:22:36.180
+Okay, hello.
+
+00:22:38.060 --> 00:22:38.560
+[Speaker 3]: I
+
+00:22:43.260 --> 00:22:43.440
+[Speaker 1]: have 1 thing to add. Yeah,
+
+00:22:46.480 --> 00:22:46.720
+[Speaker 4]: No, no, no, I was just about to say I am not
+
+00:22:48.420 --> 00:22:48.680
+hosting anymore. You 2 do a wonderful job,
+
+00:22:49.640 --> 00:22:50.140
+and I'm happy to just watch.
+
+00:22:53.860 --> 00:22:54.000
+[Speaker 1]: go ahead. Cool. Yeah, I was going to add 1
+
+00:22:56.520 --> 00:22:56.660
+quick note about any potential suggestions or
+
+00:22:58.080 --> 00:22:58.240
+recommendations for hosting Emacs on
+
+00:23:00.160 --> 00:23:00.240
+satellites. Is that, I mean,
+
+00:23:01.800 --> 00:23:02.300
+given that we are an event centered around
+
+00:23:07.360 --> 00:23:07.440
+Emacs, and Emacs is backed by the Free
+
+00:23:09.160 --> 00:23:09.320
+Software Foundation, if you do reach out to
+
+00:23:11.180 --> 00:23:11.680
+them, they're usually pretty helpful in terms
+
+00:23:14.340 --> 00:23:14.840
+of sending goodies and stickers and such.
+
+00:23:16.880 --> 00:23:17.040
+So yeah, if you give them a heads up and
+
+00:23:17.900 --> 00:23:18.400
+reach out to them in advance,
+
+00:23:20.800 --> 00:23:20.880
+you might well end up with a whole bunch of
+
+00:23:22.800 --> 00:23:23.000
+swag on your hands that you could give out
+
+00:23:24.860 --> 00:23:25.360
+during the satellite. So that's the thing.
+
+00:23:35.500 --> 00:23:36.000
+[Speaker 5]: Well, I just wanted to note it felt kind of
+
+00:23:37.640 --> 00:23:37.840
+even smoother. I mean,
+
+00:23:39.720 --> 00:23:40.160
+you guys always run a nice conference,
+
+00:23:43.180 --> 00:23:43.460
+but it felt smoother this year than ever
+
+00:23:45.600 --> 00:23:45.980
+before, which listening to your talk,
+
+00:23:48.480 --> 00:23:48.900
+Sasha, All the automation that you're doing
+
+00:23:52.400 --> 00:23:52.740
+is pretty incredible. So I think it's paying
+
+00:23:52.740 --> 00:23:53.240
+off.
+
+00:23:58.180 --> 00:23:58.320
+[Speaker 0]: Yay! You know, it is very amusing to hear the
+
+00:23:59.240 --> 00:23:59.440
+host say, okay, you know,
+
+00:24:00.720 --> 00:24:01.000
+but we've got to wrap up in the next 30
+
+00:24:02.960 --> 00:24:03.040
+seconds because Sasha's contact is going to
+
+00:24:03.240 --> 00:24:03.740
+go yoink!
+
+00:24:12.800 --> 00:24:12.980
+[Speaker 5]: I have a person I work with who keeps the
+
+00:24:15.360 --> 00:24:15.860
+trains running on time shall we say and like
+
+00:24:18.940 --> 00:24:19.140
+cuts off every meeting like the second that
+
+00:24:21.140 --> 00:24:21.320
+it's supposed to end while somebody's in
+
+00:24:24.860 --> 00:24:25.080
+mid-sentence and I hope we don't get to that
+
+00:24:25.380 --> 00:24:25.880
+point here.
+
+00:24:34.560 --> 00:24:34.740
+[Speaker 0]: So do we have any more,
+
+00:24:36.080 --> 00:24:36.360
+[Speaker 4]: oh sorry I'm reverting to the hosting,
+
+00:24:37.440 --> 00:24:37.900
+Do we have any more questions for MaxConf?
+
+00:24:39.760 --> 00:24:39.960
+Although maybe we want to switch to the other
+
+00:24:41.580 --> 00:24:41.760
+room so that we don't struggle too much to
+
+00:24:44.340 --> 00:24:44.840
+find... Organize the stuff on BBB afterwards.
+
+00:24:46.360 --> 00:24:46.620
+[Speaker 0]: Oh, the recording. Well,
+
+00:24:48.340 --> 00:24:48.640
+this is a way to make sure the recording gets
+
+00:24:54.240 --> 00:24:54.640
+online. But we could do that too.
+
+00:24:55.760 --> 00:24:56.260
+I don't know. What do y'all think?
+
+00:25:00.580 --> 00:25:00.900
+[Speaker 4]: I'm personally fine. If we want to stay here
+
+00:25:02.720 --> 00:25:03.220
+right now, the development track is currently
+
+00:25:05.280 --> 00:25:05.780
+streaming this BBB room.
+
+00:25:08.760 --> 00:25:08.940
+So are we on Jen. So we're going to leave it
+
+00:25:10.760 --> 00:25:10.840
+at is and move into closing remarks if we
+
+00:25:10.840 --> 00:25:11.340
+want.
+
+00:25:14.720 --> 00:25:15.060
+[Speaker 1]: Oh, yeah, just, I guess,
+
+00:25:17.720 --> 00:25:17.920
+make sure that every 1 of the organizers are
+
+00:25:20.740 --> 00:25:21.060
+here. I see Flo here. Let's see,
+
+00:25:23.480 --> 00:25:23.860
+Corbyn, are you here? Can you maybe speak
+
+00:25:24.280 --> 00:25:24.780
+here on BBB?
+
+00:25:32.860 --> 00:25:33.000
+[Speaker 4]: We'll give some time for Corbyn to figure it
+
+00:25:33.840 --> 00:25:34.280
+out. He did figure it out eventually
+
+00:25:36.260 --> 00:25:36.420
+yesterday, so surely today will go
+
+00:25:36.420 --> 00:25:36.920
+swimmingly.
+
+00:25:47.420 --> 00:25:47.720
+Right. We're getting everything ready,
+
+00:25:47.720 --> 00:25:48.220
+folks.
+
+00:25:57.100 --> 00:25:57.600
+[Speaker 0]: Okay. So while we sort out Corwin,
+
+00:25:58.980 --> 00:25:59.280
+can someone tell him on mumble,
+
+00:26:00.480 --> 00:26:00.980
+I guess? Because I'm not sure if he's...
+
+00:26:05.060 --> 00:26:05.420
+Anyway. I also want to say that in the Emacs
+
+00:26:06.580 --> 00:26:06.740
+conference channel, people have been
+
+00:26:08.880 --> 00:26:09.060
+mentioning that the remote stuff has been
+
+00:26:10.840 --> 00:26:10.920
+working for them. And I really do like the
+
+00:26:12.720 --> 00:26:12.880
+way that this means we can have all the
+
+00:26:13.980 --> 00:26:14.480
+videos, you know, all prepared,
+
+00:26:16.020 --> 00:26:16.220
+they're captioned, you know,
+
+00:26:17.160 --> 00:26:17.580
+We can send them to people,
+
+00:26:19.000 --> 00:26:19.500
+we can post them on the website afterwards.
+
+00:26:21.540 --> 00:26:22.020
+We can bring all these people together who
+
+00:26:23.440 --> 00:26:23.880
+might not be able to convince their companies
+
+00:26:25.240 --> 00:26:25.680
+to fly them somewhere for an Emacs
+
+00:26:29.640 --> 00:26:29.760
+conference. And also I can do this kind of
+
+00:26:32.120 --> 00:26:32.620
+prep while having my now seven-year-old still
+
+00:26:34.480 --> 00:26:34.980
+be able to wander by and whatever.
+
+00:26:36.820 --> 00:26:37.320
+Travelling is really tough.
+
+00:26:39.220 --> 00:26:39.600
+So, this is fine. This is cool.
+
+00:26:40.760 --> 00:26:41.260
+I like this. We'll keep doing it.
+
+00:26:44.240 --> 00:26:44.740
+[Speaker 4]: It's definitely playing into the low-cost
+
+00:26:46.360 --> 00:26:46.820
+conference. To do it online,
+
+00:26:48.160 --> 00:26:48.400
+So many people can just access it very
+
+00:26:53.760 --> 00:26:54.220
+easily. All right, so we've messaged Colwyn.
+
+00:26:55.760 --> 00:26:56.040
+I guess we can get started with Dalim.
+
+00:26:57.720 --> 00:26:57.900
+It should maybe take a minute or 2 to join
+
+00:27:01.400 --> 00:27:01.640
+us. Should I get started with the Final words
+
+00:27:04.540 --> 00:27:04.900
+of the day? All right,
+
+00:27:05.740 --> 00:27:06.240
+cool. All right, folks,
+
+00:27:08.220 --> 00:27:08.440
+we made it. We are at the end of the second
+
+00:27:10.320 --> 00:27:10.820
+day of EmacsConf, the second of 2 days.
+
+00:27:12.620 --> 00:27:13.040
+And the first thing I want to say is first,
+
+00:27:15.360 --> 00:27:15.660
+thank you so much for joining us for this new
+
+00:27:19.020 --> 00:27:19.200
+edition. It's personally my fourth year doing
+
+00:27:22.000 --> 00:27:22.500
+the EmacsConf, but if you go to emacsconf-org
+
+00:27:24.660 --> 00:27:25.080
+and you see the different sessions,
+
+00:27:27.380 --> 00:27:27.660
+you will realize that the first 1 was in
+
+00:27:29.820 --> 00:27:30.300
+2013, which happens to be 10 years ago.
+
+00:27:33.340 --> 00:27:33.480
+So we are obviously very excited about all of
+
+00:27:35.420 --> 00:27:35.680
+this and we'll tell you perhaps a little more
+
+00:27:38.100 --> 00:27:38.300
+about what has changed over the last 10
+
+00:27:41.760 --> 00:27:42.260
+years. As usual, you know the pre-recorded
+
+00:27:44.540 --> 00:27:44.800
+talks are available right now on the talk
+
+00:27:46.640 --> 00:27:46.800
+page, at least for all those which were
+
+00:27:48.620 --> 00:27:48.760
+pre-recorded. All the ones which happened on
+
+00:27:50.200 --> 00:27:50.320
+the Google button, it will take us a little
+
+00:27:52.360 --> 00:27:52.780
+bit of time to figure out how to,
+
+00:27:54.320 --> 00:27:54.820
+well, when to put them available.
+
+00:27:56.480 --> 00:27:56.880
+We need to do subtitles and all this jazzy
+
+00:27:59.060 --> 00:27:59.440
+stuff. And we'll also upload them to YouTube
+
+00:28:01.500 --> 00:28:02.000
+and other places once we check the audio,
+
+00:28:02.700 --> 00:28:03.200
+especially for the Q&As.
+
+00:28:05.140 --> 00:28:05.280
+We need to clean up some of the audios and
+
+00:28:08.300 --> 00:28:08.680
+make sure that we do not publish any personal
+
+00:28:13.040 --> 00:28:13.220
+stuff. All the live talks and Q&As will do
+
+00:28:14.200 --> 00:28:14.700
+this in the weeks to come.
+
+00:28:16.680 --> 00:28:16.800
+Usually, it takes us about 1 to 2 months to
+
+00:28:17.480 --> 00:28:17.640
+try to get everything out,
+
+00:28:18.280 --> 00:28:18.680
+but if it takes longer,
+
+00:28:19.540 --> 00:28:20.040
+it's fine. Eventually,
+
+00:28:20.900 --> 00:28:21.180
+everything will be there.
+
+00:28:23.360 --> 00:28:23.860
+The 1 thing we can say is that by EmacsConf
+
+00:28:26.160 --> 00:28:26.660
+2024, when it comes around,
+
+00:28:28.680 --> 00:28:28.840
+everything should have been uploaded at some
+
+00:28:30.100 --> 00:28:30.600
+point. So that's a wide window.
+
+00:28:34.340 --> 00:28:34.700
+So again, and as usual,
+
+00:28:35.980 --> 00:28:36.480
+feel free to spread the word about EmacsConf
+
+00:28:38.860 --> 00:28:38.940
+because, you know, we've been doing this for
+
+00:28:42.100 --> 00:28:42.280
+a while and every year more people show up to
+
+00:28:43.980 --> 00:28:44.440
+these events and more people watch the videos
+
+00:28:46.620 --> 00:28:47.120
+on YouTube and it's wonderful to see,
+
+00:28:49.940 --> 00:28:50.220
+you know, our main goal which is to get cool
+
+00:28:51.400 --> 00:28:51.900
+ideas out of the head of people,
+
+00:28:53.860 --> 00:28:54.280
+shared and viewed by so many people.
+
+00:28:56.660 --> 00:28:57.160
+It's always amazing. Also,
+
+00:28:58.180 --> 00:28:58.680
+I would like to ask you personally,
+
+00:28:59.700 --> 00:29:00.060
+what did you like about this conference?
+
+00:29:01.780 --> 00:29:01.980
+Or what do you like, what do you feel was
+
+00:29:02.640 --> 00:29:02.860
+better than last year,
+
+00:29:05.440 --> 00:29:05.840
+because the feedback is very useful to us.
+
+00:29:07.340 --> 00:29:07.540
+We'd also like to know if you've got any
+
+00:29:08.940 --> 00:29:09.440
+ideas for making things even better.
+
+00:29:11.680 --> 00:29:12.180
+And we've got a general conference discussion
+
+00:29:13.900 --> 00:29:14.400
+slash notes slash community message board,
+
+00:29:14.920 --> 00:29:15.420
+which is pad.emaxconf.org
+
+00:29:19.280 --> 00:29:19.640
+slash 2023. And you can also just mention
+
+00:29:22.120 --> 00:29:22.300
+them. You know, we might open this room for
+
+00:29:24.080 --> 00:29:24.520
+people to join us and chat,
+
+00:29:25.480 --> 00:29:25.960
+although Flowy and myself,
+
+00:29:27.340 --> 00:29:27.540
+your up team, needs to go to bed.
+
+00:29:28.480 --> 00:29:28.680
+So please be mindful of this.
+
+00:29:29.760 --> 00:29:30.160
+If you ask a very interesting question,
+
+00:29:32.260 --> 00:29:32.560
+We will both have to make sacrifices to stay
+
+00:29:34.300 --> 00:29:34.680
+a while longer because you're too damn
+
+00:29:38.620 --> 00:29:39.080
+interesting. Now we'd like to move into
+
+00:29:41.000 --> 00:29:41.500
+thanking all the people who make EmacsConf
+
+00:29:42.660 --> 00:29:43.080
+possible. And obviously,
+
+00:29:45.060 --> 00:29:45.560
+first, we have to thank all the speakers,
+
+00:29:46.960 --> 00:29:47.460
+all the volunteers, the participants,
+
+00:29:49.960 --> 00:29:50.240
+and to all those other people in our lives
+
+00:29:51.660 --> 00:29:51.820
+who make it possible through time and
+
+00:29:53.920 --> 00:29:54.060
+support, thank you so much for allowing us to
+
+00:29:55.760 --> 00:29:55.960
+run EmacsCount. It wouldn't happen without
+
+00:29:57.160 --> 00:29:57.440
+you, and without us, I suppose,
+
+00:29:58.540 --> 00:29:59.040
+because we are included in this.
+
+00:30:01.720 --> 00:30:02.220
+This year's conference hosts are myself,
+
+00:30:03.400 --> 00:30:03.900
+Leo Vivier, Amine Bendali,
+
+00:30:05.860 --> 00:30:06.100
+and joining our team of hosts for the first
+
+00:30:07.080 --> 00:30:07.540
+time this year, Flobby Coder.
+
+00:30:08.200 --> 00:30:08.360
+Thank you so much, Flobby.
+
+00:30:09.340 --> 00:30:09.840
+You did a wonderful job.
+
+00:30:11.600 --> 00:30:12.100
+It's right there. No, dammit.
+
+00:30:15.180 --> 00:30:15.360
+No, I can't. I can never remember if BBB is
+
+00:30:17.120 --> 00:30:17.360
+flipping stuff, so either 1 of those
+
+00:30:19.600 --> 00:30:20.020
+directions. The streams this year,
+
+00:30:21.760 --> 00:30:22.200
+as last year, were managed by Sasha Schwa,
+
+00:30:24.400 --> 00:30:24.820
+obviously. And the check-ins by Flobby Coder,
+
+00:30:27.400 --> 00:30:27.740
+and I'm in with Miscellaneous running around
+
+00:30:30.020 --> 00:30:30.520
+by Corwin Brust, who will be joining us
+
+00:30:32.000 --> 00:30:32.500
+momentarily. Apparently,
+
+00:30:34.920 --> 00:30:35.140
+all his USB failed, so he will be with us as
+
+00:30:38.140 --> 00:30:38.640
+[Speaker 3]: Roost. Rhymes with Roost.
+
+00:30:41.040 --> 00:30:41.380
+Do I have audio now? Alright,
+
+00:30:42.380 --> 00:30:42.800
+I'll go to work on my camera.
+
+00:30:43.820 --> 00:30:44.320
+Hi. Hello?
+
+00:30:45.540 --> 00:30:45.980
+[Speaker 4]: soon as he can. It's Lovely.
+
+00:30:46.640 --> 00:30:47.140
+Okay, I'll keep going.
+
+00:30:49.120 --> 00:30:49.460
+I also need to thank, well,
+
+00:30:51.100 --> 00:30:51.480
+need, no, I want to thank all the captioning
+
+00:30:53.040 --> 00:30:53.400
+volunteers, the captioners as we call them.
+
+00:30:54.380 --> 00:30:54.880
+You've got Daniel Molina,
+
+00:30:57.160 --> 00:30:57.660
+Bala Ramadoui, Durai, sorry,
+
+00:30:59.140 --> 00:30:59.640
+Bhavin Gandhi, Amin Zayed,
+
+00:31:02.220 --> 00:31:02.440
+Yoni Rapkin, who presented 1 of the talk
+
+00:31:04.240 --> 00:31:04.740
+earlier, Daniel Alejandro Tapia,
+
+00:31:06.060 --> 00:31:06.560
+Hannah Miller, Ken Huang,
+
+00:31:07.200 --> 00:31:07.700
+Jean-Christophe Ellary,
+
+00:31:10.440 --> 00:31:10.800
+and James Howell. Also thanking
+
+00:31:11.320 --> 00:31:11.760
+Jean-Christophe Ellary,
+
+00:31:13.220 --> 00:31:13.680
+Colwyn, Quiliro, Kern,
+
+00:31:15.420 --> 00:31:15.800
+and Amin Bendali for helping with the early
+
+00:31:18.120 --> 00:31:18.620
+acceptance process. Sasha,
+
+00:31:21.180 --> 00:31:21.600
+do I read this 1? It's weird to think myself.
+
+00:31:22.740 --> 00:31:23.080
+I'm gonna pat myself on the back,
+
+00:31:24.780 --> 00:31:25.280
+I guess. Go on, Sasha.
+
+00:31:26.720 --> 00:31:26.920
+I'll do it. I'll do it.
+
+00:31:29.160 --> 00:31:29.340
+It's fine. Thanks to myself for fiddling with
+
+00:31:30.900 --> 00:31:31.400
+the audio to get things nicely synced,
+
+00:31:34.120 --> 00:31:34.340
+And thanks to myself again and other people,
+
+00:31:36.840 --> 00:31:37.340
+we kept the mailing list free from spam.
+
+00:31:39.320 --> 00:31:39.440
+Because I'm not sure what happened since May,
+
+00:31:41.820 --> 00:31:42.180
+but we've been receiving about 3 to 4 spam
+
+00:31:44.760 --> 00:31:45.040
+emails. And it just happened all of a sudden,
+
+00:31:46.400 --> 00:31:46.900
+and I was really weirded out by this process.
+
+00:31:51.380 --> 00:31:51.880
+Where was I? OK, thanks to Andrew Ducurty for
+
+00:31:53.000 --> 00:31:53.500
+helping with whisper processing.
+
+00:31:55.840 --> 00:31:56.200
+Thanks to Ashki Ghekwad for design
+
+00:31:57.540 --> 00:31:58.040
+contribution. Thanks to Yoshin,
+
+00:31:59.900 --> 00:32:00.040
+our grand changro for all the music that
+
+00:32:01.840 --> 00:32:01.960
+we've been using for the last 3 years at this
+
+00:32:04.740 --> 00:32:04.840
+point, I think. Also thanks to Rye for the
+
+00:32:06.820 --> 00:32:07.020
+server that we're using for OBS streaming and
+
+00:32:07.720 --> 00:32:08.220
+for processing videos.
+
+00:32:10.440 --> 00:32:10.800
+And also thanks to the free software
+
+00:32:12.540 --> 00:32:13.040
+foundation for obviously Emacs itself,
+
+00:32:14.340 --> 00:32:14.840
+the mailing list that we use,
+
+00:32:15.340 --> 00:32:15.840
+and the media.emacsconf-org
+
+00:32:19.540 --> 00:32:19.780
+server where all of the presentations are
+
+00:32:22.200 --> 00:32:22.580
+currently hosted. We'd also like to thank
+
+00:32:23.520 --> 00:32:24.020
+BigBlueButton, Etherpad,
+
+00:32:25.920 --> 00:32:26.420
+IceCast, OBS, The Lounge,
+
+00:32:28.480 --> 00:32:28.980
+Libre.chat, FFmpeg, OpenAI,
+
+00:32:31.300 --> 00:32:31.800
+Whisper, the E-N-E-S force alignment tool,
+
+00:32:34.640 --> 00:32:35.000
+Site Transfer, SubD, and contributors to all
+
+00:32:36.900 --> 00:32:37.020
+of the tools and services we used in the
+
+00:32:37.600 --> 00:32:38.000
+making of this conference.
+
+00:32:39.520 --> 00:32:39.960
+And obviously, all of them are free,
+
+00:32:41.480 --> 00:32:41.880
+as Sasha obviously told you,
+
+00:32:44.080 --> 00:32:44.260
+and as we will be telling you again for many
+
+00:32:47.700 --> 00:32:48.060
+years to come. We'd also like again to thank
+
+00:32:49.780 --> 00:32:50.140
+everyone for attending the conference and
+
+00:32:51.820 --> 00:32:52.320
+making EmacsConf what it is.
+
+00:32:54.000 --> 00:32:54.280
+And for those who were on the general track,
+
+00:32:56.540 --> 00:32:56.720
+you know Sasha did it in parallel to the last
+
+00:32:58.980 --> 00:32:59.340
+talk we had today. She did a wonderful talk
+
+00:33:01.680 --> 00:33:02.180
+on how EmacsConf is actually run.
+
+00:33:05.620 --> 00:33:06.060
+So there's her talk, there's also an entire
+
+00:33:07.760 --> 00:33:08.260
+page on our wiki about the infrastructure
+
+00:33:09.920 --> 00:33:10.400
+that we use. So if you're interested,
+
+00:33:11.880 --> 00:33:12.380
+especially in running an event of your own,
+
+00:33:14.340 --> 00:33:14.540
+you've got as much information as you want,
+
+00:33:15.600 --> 00:33:15.940
+and as Sacha probably told you,
+
+00:33:17.600 --> 00:33:18.100
+we are available for sharing the knowledge
+
+00:33:20.820 --> 00:33:20.940
+and enabling your dreams of making a
+
+00:33:24.220 --> 00:33:24.340
+conference. Amint, do you want to take it
+
+00:33:25.680 --> 00:33:26.180
+over with the fiscal sponsorship
+
+00:33:29.320 --> 00:33:29.480
+[Speaker 1]: Yeah, sure. Let's see.
+
+00:33:30.980 --> 00:33:31.480
+Can you please scroll down a little bit?
+
+00:33:33.520 --> 00:33:34.020
+Whoever is kindly sharing the screen.
+
+00:33:34.460 --> 00:33:34.960
+[Speaker 4]: announcements? Okay. Oh,
+
+00:33:36.140 --> 00:33:36.360
+I was scrolling on my end.
+
+00:33:36.360 --> 00:33:36.860
+Sorry.
+
+00:33:41.380 --> 00:33:41.780
+[Speaker 1]: Thanks, Sasha. Yeah, so kind of super excited
+
+00:33:43.080 --> 00:33:43.300
+to finally get into this.
+
+00:33:45.220 --> 00:33:45.300
+And this is something that we've been kind of
+
+00:33:46.960 --> 00:33:47.200
+hoping to get worked out for a long time
+
+00:33:48.280 --> 00:33:48.780
+actually and it's finally here.
+
+00:33:52.900 --> 00:33:53.140
+So people might have already seen this but as
+
+00:33:57.620 --> 00:33:58.120
+of this last Thursday we're actually fiscally
+
+00:33:59.440 --> 00:33:59.940
+sponsored by the Free Software Foundation.
+
+00:34:03.480 --> 00:34:03.740
+So we joined their Working Together for Free
+
+00:34:07.720 --> 00:34:07.840
+Software program. And DFSF published the
+
+00:34:08.540 --> 00:34:08.940
+announcement on their website.
+
+00:34:11.000 --> 00:34:11.500
+You're welcome to go and check it out there.
+
+00:34:14.060 --> 00:34:14.280
+But I just want to quickly get into a little
+
+00:34:17.900 --> 00:34:18.040
+bit about what it means and some of the
+
+00:34:21.719 --> 00:34:22.000
+benefits, I guess. So as part of this working
+
+00:34:23.300 --> 00:34:23.800
+together for a free software fund,
+
+00:34:26.580 --> 00:34:26.679
+the FSF provides fiscal sponsorship for a
+
+00:34:29.060 --> 00:34:29.320
+number of important free software and new
+
+00:34:30.900 --> 00:34:31.239
+technical projects, such as the new tool
+
+00:34:33.679 --> 00:34:33.840
+chain and Replicant, which is a free fork of
+
+00:34:36.340 --> 00:34:36.540
+Android. And starting this year,
+
+00:34:38.360 --> 00:34:38.800
+EmacsConf has joined the program as well.
+
+00:34:40.960 --> 00:34:41.440
+And as a fiscal sponsor,
+
+00:34:43.520 --> 00:34:44.020
+DFSF can assist us by providing services
+
+00:34:46.500 --> 00:34:46.940
+required by a legal entity,
+
+00:34:49.300 --> 00:34:49.460
+like signing contracts and receiving and
+
+00:34:53.080 --> 00:34:53.360
+processing payments. So to provide some
+
+00:34:56.820 --> 00:34:57.040
+context, eMAXConf is and always has been an
+
+00:34:58.740 --> 00:34:58.940
+independent initiative organized by a very
+
+00:34:59.700 --> 00:35:00.140
+small number of people,
+
+00:35:02.120 --> 00:35:02.560
+a small team of people without any corporate
+
+00:35:05.980 --> 00:35:06.220
+sponsors. And that's important in part
+
+00:35:08.880 --> 00:35:09.380
+because I believe part of our message is that
+
+00:35:11.860 --> 00:35:12.040
+we want to showcase that everybody can do
+
+00:35:14.200 --> 00:35:14.380
+this and organize a conference like this no
+
+00:35:17.200 --> 00:35:17.560
+matter how small your team is and how modest
+
+00:35:19.540 --> 00:35:19.900
+your resources are, which we will actually
+
+00:35:21.260 --> 00:35:21.560
+get into a little bit later in the closing
+
+00:35:25.760 --> 00:35:25.900
+remarks. But yeah, so now having the FSF as
+
+00:35:27.780 --> 00:35:28.020
+our fiscal sponsor, we're in a better
+
+00:35:30.200 --> 00:35:30.680
+position to accept donations as 1 potential
+
+00:35:33.360 --> 00:35:33.860
+way to contribute or help the conference.
+
+00:35:36.360 --> 00:35:36.860
+And just to clarify, we're currently not
+
+00:35:39.360 --> 00:35:39.520
+struggling at all to cover these costs of the
+
+00:35:41.000 --> 00:35:41.240
+servers and such, which we will get into
+
+00:35:44.720 --> 00:35:45.060
+again. But this is just 1 extra avenue if
+
+00:35:46.720 --> 00:35:46.880
+people are feeling generous and would like to
+
+00:35:47.880 --> 00:35:48.380
+help, it's much appreciated.
+
+00:35:54.400 --> 00:35:54.620
+And yeah, so having a 501c3 nonprofit like
+
+00:35:57.160 --> 00:35:57.660
+the FSF, as a fiscal sponsor,
+
+00:36:00.060 --> 00:36:00.340
+many donors will receive tax benefits that
+
+00:36:02.180 --> 00:36:02.360
+they otherwise wouldn't receive if they were
+
+00:36:04.540 --> 00:36:04.680
+to like donate to like individuals running a
+
+00:36:07.500 --> 00:36:07.720
+project directly. And also donors can know
+
+00:36:08.860 --> 00:36:09.140
+that, you know, the funds that they're
+
+00:36:10.920 --> 00:36:11.420
+donating are being handled by an accountable
+
+00:36:14.060 --> 00:36:14.540
+institution. And also importantly,
+
+00:36:16.020 --> 00:36:16.520
+when donating through the FSF,
+
+00:36:19.960 --> 00:36:20.460
+Let's see, text changing.
+
+00:36:23.320 --> 00:36:23.560
+Okay, yeah. People can donate without having
+
+00:36:24.600 --> 00:36:25.100
+to run any non-free JavaScript,
+
+00:36:27.380 --> 00:36:27.880
+which is nice. Because unfortunately,
+
+00:36:29.440 --> 00:36:29.540
+usually these days on the web when you do
+
+00:36:30.600 --> 00:36:30.880
+want to buy something or spend money,
+
+00:36:31.840 --> 00:36:32.340
+you have to run non-free JavaScript,
+
+00:36:35.020 --> 00:36:35.220
+which isn't the case when donating through
+
+00:36:37.720 --> 00:36:38.160
+the FSF. Yeah, so we just joined,
+
+00:36:39.000 --> 00:36:39.500
+as I said, on Thursday,
+
+00:36:43.020 --> 00:36:43.220
+and we've already received our very first
+
+00:36:45.400 --> 00:36:45.640
+donation, so we'd like to extend our thanks
+
+00:36:46.800 --> 00:36:47.300
+and gratitude to Scott Ranby,
+
+00:36:49.480 --> 00:36:49.980
+who is actually our first ever kind donor.
+
+00:36:51.820 --> 00:36:52.320
+They agreed to be thanked publicly.
+
+00:36:55.900 --> 00:36:56.200
+So thank you, Scott. And yeah,
+
+00:36:57.040 --> 00:36:57.540
+so this is a recent development.
+
+00:36:59.800 --> 00:36:59.980
+And we plan to add much more information and
+
+00:37:01.880 --> 00:37:02.020
+details about this whole situation to the
+
+00:37:04.200 --> 00:37:04.700
+wiki, including links to the announcements,
+
+00:37:06.280 --> 00:37:06.780
+some more information about the program,
+
+00:37:08.040 --> 00:37:08.540
+and our donation page of course,
+
+00:37:12.880 --> 00:37:13.140
+in the new future. And in the meantime I'm
+
+00:37:15.080 --> 00:37:15.240
+also happy to help answer any questions as
+
+00:37:17.900 --> 00:37:18.400
+best as I can, So feel free to ping me on IRC
+
+00:37:19.640 --> 00:37:20.140
+or just email me at bandalia.guinard.org.
+
+00:37:26.140 --> 00:37:26.640
+[Speaker 3]: Which gives me a chance to jump in and just
+
+00:37:29.060 --> 00:37:29.560
+point out 1 question that we know people have
+
+00:37:32.680 --> 00:37:32.960
+is just about how much of the money goes to
+
+00:37:35.660 --> 00:37:35.860
+FSF when you make a contribution through the
+
+00:37:36.860 --> 00:37:37.360
+fund toward EmacsConf?
+
+00:37:40.560 --> 00:37:40.760
+[Speaker 1]: Right, exactly. Yeah, and the answer to that
+
+00:37:44.540 --> 00:37:44.720
+is that it's 10%, which is for supporting the
+
+00:37:46.720 --> 00:37:46.960
+operation of the Working Together program and
+
+00:37:48.800 --> 00:37:49.300
+also the shared GNU infrastructure,
+
+00:37:52.040 --> 00:37:52.540
+which we as EmacsConf use and depend on,
+
+00:37:54.920 --> 00:37:55.420
+along with several hundred GNU packages.
+
+00:37:59.860 --> 00:38:00.060
+So, yeah, and it covers things like
+
+00:38:03.060 --> 00:38:03.480
+transaction costs that the FSF's payment
+
+00:38:04.000 --> 00:38:04.500
+processor charges?
+
+00:38:10.040 --> 00:38:10.240
+[Speaker 3]: And then again I'll come back to say this is
+
+00:38:12.280 --> 00:38:12.780
+a real fair price. I have some experience
+
+00:38:15.300 --> 00:38:15.540
+with working with payment processing and
+
+00:38:19.120 --> 00:38:19.440
+things like this and like 10% that's a that's
+
+00:38:22.440 --> 00:38:22.940
+something that you see in Bigger businesses
+
+00:38:25.900 --> 00:38:26.380
+that have a model around making money on that
+
+00:38:29.160 --> 00:38:29.280
+Transaction so to be able to do that as a
+
+00:38:31.400 --> 00:38:31.760
+nonprofit. We're taking advantage of a really
+
+00:38:32.400 --> 00:38:32.900
+awesome thing there.
+
+00:38:35.860 --> 00:38:36.060
+[Speaker 1]: Yeah, exactly. And yeah,
+
+00:38:36.820 --> 00:38:37.120
+just for a quick plug,
+
+00:38:38.860 --> 00:38:39.060
+the FSF is actually doing an end of year
+
+00:38:41.780 --> 00:38:42.020
+fundraiser right now. So if you want to go
+
+00:38:44.220 --> 00:38:44.700
+donate to them, or if you donate to us,
+
+00:38:47.760 --> 00:38:48.260
+a part of it will go to the FSF to support
+
+00:38:51.400 --> 00:38:51.900
+their work on free software,
+
+00:38:53.000 --> 00:38:53.500
+helping grow the movement,
+
+00:38:56.000 --> 00:38:56.120
+and spread the word about it.
+
+00:39:02.080 --> 00:39:02.360
+So, thank you. And I guess now is a good time
+
+00:39:05.380 --> 00:39:05.800
+for me to pass the baton to the next
+
+00:39:08.160 --> 00:39:08.320
+organizer who wants to talk about some of the
+
+00:39:11.040 --> 00:39:11.540
+specs of the servers that we use right now.
+
+00:39:14.720 --> 00:39:14.860
+[Speaker 0]: We actually don't have to go about this in
+
+00:39:16.560 --> 00:39:16.840
+detail. I just put it in there in case people
+
+00:39:19.280 --> 00:39:19.540
+were curious about how much it takes to run
+
+00:39:20.740 --> 00:39:21.240
+something like this. Not a lot.
+
+00:39:22.900 --> 00:39:23.100
+It's just really, you know,
+
+00:39:26.100 --> 00:39:26.260
+2 days of computing is not that expensive in
+
+00:39:29.060 --> 00:39:29.480
+today's world, and all the rest is just
+
+00:39:32.220 --> 00:39:32.640
+volunteer time and a heck of a lot of Emacs
+
+00:39:34.080 --> 00:39:34.280
+lists as previously discussed in our
+
+00:39:41.020 --> 00:39:41.180
+presentation. So, we'll just skip through
+
+00:39:42.280 --> 00:39:42.440
+that instead of reading all of it.
+
+00:39:43.580 --> 00:39:43.840
+Unless people are specifically curious,
+
+00:39:44.640 --> 00:39:45.140
+you can ask questions afterwards.
+
+00:39:46.320 --> 00:39:46.820
+But yes, happy birthday,
+
+00:39:49.200 --> 00:39:49.440
+EmacsConf, and here's another wonderful 10
+
+00:39:49.440 --> 00:39:49.940
+years.
+
+00:39:56.820 --> 00:39:57.040
+[Speaker 4]: All right, I think we are at the end of the
+
+00:39:58.820 --> 00:39:59.320
+closing remarks. Have I forgotten anything?
+
+00:40:00.060 --> 00:40:00.380
+We haven't had Flowy yet,
+
+00:40:03.340 --> 00:40:03.560
+I believe. Sorry for putting you on the spot
+
+00:40:03.560 --> 00:40:04.060
+again.
+
+00:40:07.940 --> 00:40:08.400
+[Speaker 6]: I guess I have nothing really to say besides
+
+00:40:09.280 --> 00:40:09.780
+what you have already said.
+
+00:40:12.560 --> 00:40:13.060
+So thank everybody to make a presentation,
+
+00:40:15.360 --> 00:40:15.640
+to do anything here. Thanks for all of you
+
+00:40:16.880 --> 00:40:17.080
+that I could be a part of it.
+
+00:40:17.880 --> 00:40:18.380
+I have to admit it also.
+
+00:40:21.020 --> 00:40:21.520
+So thank you all. And yeah,
+
+00:40:22.540 --> 00:40:23.040
+nothing to say probably.
+
+00:40:25.560 --> 00:40:25.840
+[Speaker 1]: And I also want to send the thanks to Flowy
+
+00:40:27.260 --> 00:40:27.380
+for, you know, stepping in.
+
+00:40:29.340 --> 00:40:29.480
+We kind of like throw this on you like at the
+
+00:40:31.560 --> 00:40:31.720
+last second, but Flowy actually stepped in
+
+00:40:33.840 --> 00:40:34.160
+and hosted graciously a couple of the talks
+
+00:40:34.920 --> 00:40:35.140
+on the Dev track today.
+
+00:40:36.880 --> 00:40:37.200
+So, which I think went very well.
+
+00:40:38.480 --> 00:40:38.980
+So congrats and thank you.
+
+00:40:39.720 --> 00:40:40.220
+[Speaker 6]: Thank you.
+
+00:40:41.420 --> 00:40:41.920
+[Speaker 4]: Speaking of which we were not monsters.
+
+00:40:43.420 --> 00:40:43.660
+We kindly asked Floey yesterday because
+
+00:40:44.540 --> 00:40:44.760
+everything was going so well.
+
+00:40:45.520 --> 00:40:45.600
+And now we can say it,
+
+00:40:46.840 --> 00:40:47.240
+you know, I can say things are going well.
+
+00:40:48.760 --> 00:40:48.880
+Usually it's a bad thing when you're doing a
+
+00:40:50.500 --> 00:40:50.740
+broadcast to say things are going well right
+
+00:40:53.080 --> 00:40:53.300
+now because it tends to backfires at some
+
+00:40:56.980 --> 00:40:57.480
+[Speaker 3]: Hours of notice, hours of notice.
+
+00:40:58.900 --> 00:40:59.400
+That, that's planning.
+
+00:41:02.420 --> 00:41:02.920
+[Speaker 4]: point. But yesterday- So hours of notice,
+
+00:41:04.840 --> 00:41:05.340
+Flowy didn't sleep all that much because we
+
+00:41:06.500 --> 00:41:06.980
+tasked him with hosting,
+
+00:41:08.440 --> 00:41:08.720
+so he was turning in his bed all night
+
+00:41:09.960 --> 00:41:10.460
+thinking, oh, I'm going to host MaxCons.
+
+00:41:13.660 --> 00:41:13.860
+But Flowy, you did a wonderful job and I am
+
+00:41:15.720 --> 00:41:15.940
+so glad that not only you were able to join
+
+00:41:17.760 --> 00:41:17.900
+us again this year, but that also you were
+
+00:41:19.760 --> 00:41:20.140
+able to host. Because last year,
+
+00:41:20.900 --> 00:41:21.140
+had we asked you to host,
+
+00:41:21.820 --> 00:41:22.320
+you would have said no.
+
+00:41:25.120 --> 00:41:25.580
+First time we asked you this year was yes,
+
+00:41:27.100 --> 00:41:27.600
+but give me some time to think about it.
+
+00:41:30.100 --> 00:41:30.600
+[Speaker 6]: Next year it is yes completely.
+
+00:41:32.780 --> 00:41:32.940
+[Speaker 4]: If we've done a good job,
+
+00:41:33.560 --> 00:41:34.060
+it will be yes directly.
+
+00:41:38.000 --> 00:41:38.080
+All right, so since we are at the end of the
+
+00:41:41.140 --> 00:41:41.320
+thankings and I did say europe team needs to
+
+00:41:43.580 --> 00:41:43.700
+go to bed in about 12 minutes that leaves us
+
+00:41:45.940 --> 00:41:46.440
+about 12 minutes to try to answer as many
+
+00:41:47.840 --> 00:41:48.340
+points as you'd like to raise.
+
+00:41:50.640 --> 00:41:50.940
+Sasha, I think the Q&A room is still open
+
+00:41:52.680 --> 00:41:53.100
+because we are technically still in the Emacs
+
+00:41:53.560 --> 00:41:54.020
+conference room currently.
+
+00:41:56.480 --> 00:41:56.660
+So, if you... We're going to put the link
+
+00:41:57.840 --> 00:41:58.000
+again if you need to find it.
+
+00:41:59.800 --> 00:42:00.300
+Otherwise, scroll up and find the 1 on there.
+
+00:42:04.400 --> 00:42:04.900
+[Speaker 0]: I think I can change the redirect.
+
+00:42:07.240 --> 00:42:07.740
+Maybe. I will go figure this out.
+
+00:42:08.600 --> 00:42:09.100
+Keep talking in the background.
+
+00:42:12.160 --> 00:42:12.280
+[Speaker 4]: Right. So, whilst we figure this out in the
+
+00:42:13.740 --> 00:42:13.860
+background, it would be nice if you could
+
+00:42:14.640 --> 00:42:15.040
+join us and ask questions,
+
+00:42:15.900 --> 00:42:16.020
+either by dropping them.
+
+00:42:18.080 --> 00:42:18.340
+I see plenty of people have already left some
+
+00:42:19.440 --> 00:42:19.840
+comments. We have 2 places,
+
+00:42:21.820 --> 00:42:22.240
+right now it's more about a chitchatting
+
+00:42:23.000 --> 00:42:23.360
+about the end of the conference.
+
+00:42:24.160 --> 00:42:24.660
+If you've got general feedback,
+
+00:42:26.160 --> 00:42:26.400
+we've mentioned it at the top,
+
+00:42:28.580 --> 00:42:28.780
+but if you want to write your general
+
+00:42:30.920 --> 00:42:31.080
+feedback here, it will find its way at some
+
+00:42:32.960 --> 00:42:33.160
+point in the years of the relevant people who
+
+00:42:33.920 --> 00:42:34.280
+can make things change.
+
+00:42:35.920 --> 00:42:36.040
+So don't worry too much about where you put
+
+00:42:37.120 --> 00:42:37.540
+your feedback, it'll be fine.
+
+00:42:40.240 --> 00:42:40.440
+But now, how about we start reading some of
+
+00:42:42.700 --> 00:42:43.080
+the notes that people have said or questions
+
+00:42:43.080 --> 00:42:43.260
+that
+
+00:42:47.094 --> 00:42:47.151
+[Speaker 3]: have been asked. So here's 1 for Amin.
+
+00:42:48.460 --> 00:42:48.820
+Do you have any stats on how many people
+
+00:42:52.200 --> 00:42:52.700
+watched for an IRC and BBB over the 2 days?
+
+00:42:58.140 --> 00:42:58.620
+[Speaker 1]: Right, yeah, so I guess for IceCast,
+
+00:43:00.040 --> 00:43:00.540
+which I can answer more readily,
+
+00:43:03.760 --> 00:43:04.260
+I think yesterday we were averaging around
+
+00:43:08.120 --> 00:43:08.620
+240, 250 concurrent viewers at a time.
+
+00:43:12.760 --> 00:43:13.260
+And today, so today it varied.
+
+00:43:16.300 --> 00:43:16.740
+I think the maximum was again like around 200
+
+00:43:19.600 --> 00:43:19.820
+to 20-ish with the average being more around
+
+00:43:24.960 --> 00:43:25.460
+180, 190 viewers. We've had a lot of hits to
+
+00:43:28.700 --> 00:43:29.180
+the actual web pages for the Emacs Conf Wiki
+
+00:43:31.720 --> 00:43:31.960
+or the pad, which are all being served on 1
+
+00:43:34.740 --> 00:43:35.140
+server. I pulled some numbers.
+
+00:43:36.140 --> 00:43:36.640
+I'm not sure if they're correct.
+
+00:43:38.480 --> 00:43:38.900
+So I'm like a little bit hesitant to discuss
+
+00:43:41.760 --> 00:43:41.980
+them. Safe to say they're easily in the tens
+
+00:43:44.380 --> 00:43:44.580
+of thousands, maybe in the hundreds of
+
+00:43:47.960 --> 00:43:48.420
+thousands of total visits over the past,
+
+00:43:52.540 --> 00:43:53.040
+[Speaker 0]: Maybe the pad makes a lot of small requests.
+
+00:43:53.940 --> 00:43:54.400
+[Speaker 1]: I guess, 48 hours. Right,
+
+00:43:57.040 --> 00:43:57.200
+okay. So, yeah, that's why I'm hesitant to
+
+00:43:59.240 --> 00:43:59.380
+say. But yeah, easily in the thousands or
+
+00:44:01.860 --> 00:44:02.020
+[Speaker 3]: You know
+
+00:44:02.980 --> 00:44:03.260
+[Speaker 4]: who you are anyway, the crowd,
+
+00:44:04.080 --> 00:44:04.240
+you know how many you are,
+
+00:44:05.340 --> 00:44:05.840
+you do not need exact numbers
+
+00:44:08.720 --> 00:44:09.220
+[Speaker 1]: tens of thousands. Yeah,
+
+00:44:11.000 --> 00:44:11.200
+so I don't have the exact numbers but I guess
+
+00:44:13.260 --> 00:44:13.460
+it's always kind of fun to maybe try to pull
+
+00:44:15.700 --> 00:44:15.840
+some numbers and look at it that way but you
+
+00:44:18.080 --> 00:44:18.580
+know of course we all know that what we do,
+
+00:44:19.720 --> 00:44:20.220
+every single person counts.
+
+00:44:24.320 --> 00:44:24.660
+So I don't know, trying to look at turning
+
+00:44:27.900 --> 00:44:28.400
+people into abstract numbers isn't,
+
+00:44:30.480 --> 00:44:30.820
+I don't know, inspiring to me very much,
+
+00:44:31.840 --> 00:44:32.340
+but it's cool. So.
+
+00:44:36.020 --> 00:44:36.140
+[Speaker 4]: All right. So how about we go into the
+
+00:44:37.640 --> 00:44:38.140
+questions. So Sasha is now in the viewport
+
+00:44:39.480 --> 00:44:39.780
+where we can see some questions.
+
+00:44:41.200 --> 00:44:41.700
+So how about we take some of them.
+
+00:44:43.900 --> 00:44:44.060
+I can read them or if anyone of the
+
+00:44:45.020 --> 00:44:45.520
+organizers wants to do this,
+
+00:44:46.720 --> 00:44:47.040
+feel free, especially those who haven't
+
+00:44:48.040 --> 00:44:48.540
+talked to a whole lot this year.
+
+00:44:53.000 --> 00:44:53.480
+Cohen, do you want to try it?
+
+00:44:54.760 --> 00:44:55.260
+[Speaker 3]: I didn't make my motive clear.
+
+00:44:59.220 --> 00:44:59.500
+I did and I'm done. I took the first
+
+00:45:01.120 --> 00:45:01.320
+question, I picked the bottom question off
+
+00:45:02.920 --> 00:45:03.120
+the list because I knew exactly who it was
+
+00:45:05.140 --> 00:45:05.500
+going for. The person who wants to answer or
+
+00:45:07.080 --> 00:45:07.580
+direct the next question is welcome.
+
+00:45:10.520 --> 00:45:10.760
+Sorry, I could have given a little better
+
+00:45:11.400 --> 00:45:11.680
+stage direction there.
+
+00:45:13.660 --> 00:45:14.160
+I'm not prepared to answer how many emaxers
+
+00:45:16.080 --> 00:45:16.560
+are from Nordic countries other than to say
+
+00:45:17.680 --> 00:45:18.180
+definitely yes and several.
+
+00:45:21.900 --> 00:45:22.080
+And I haven't looked close enough at the
+
+00:45:22.580 --> 00:45:23.080
+suggestion yet.
+
+00:45:27.280 --> 00:45:27.720
+[Speaker 4]: Right, okay. I can take the question about
+
+00:45:30.020 --> 00:45:30.060
+the BBB limitations. So it's the second 1,
+
+00:45:31.560 --> 00:45:32.060
+the red 1. Small suggestion,
+
+00:45:33.120 --> 00:45:33.520
+likely out of your control,
+
+00:45:36.340 --> 00:45:36.660
+but anyway, the blue button seems to work
+
+00:45:38.300 --> 00:45:38.560
+very well, but it would be a bit more
+
+00:45:40.680 --> 00:45:40.840
+watchable if the webcam frames were lined up
+
+00:45:42.660 --> 00:45:42.920
+vertically on 1 side, because it would allow
+
+00:45:44.760 --> 00:45:44.920
+the screen share frames to be larger and
+
+00:45:47.080 --> 00:45:47.560
+would make much better use of the viewable
+
+00:45:49.740 --> 00:45:50.240
+space. Maybe worth a bug report to upstream.
+
+00:45:53.080 --> 00:45:53.420
+And I agree, BBB has been really good.
+
+00:45:54.400 --> 00:45:54.900
+Amine, did you want to say something?
+
+00:45:55.120 --> 00:45:55.240
+[Speaker 3]: I'm going
+
+00:45:56.760 --> 00:45:56.880
+[Speaker 1]: to continue and then I'll add something at
+
+00:45:56.960 --> 00:45:57.460
+the end.
+
+00:45:59.960 --> 00:46:00.100
+[Speaker 4]: Okay, sure. So BBB has been really good for
+
+00:46:04.440 --> 00:46:04.940
+us. It allows us to have many parallel rooms
+
+00:46:07.700 --> 00:46:07.800
+which are all recording service side at the
+
+00:46:09.920 --> 00:46:10.120
+same time. And it's wonderful for us because
+
+00:46:11.260 --> 00:46:11.580
+we can gather. At some point,
+
+00:46:13.520 --> 00:46:13.820
+I think last year, we had 4 concurrent talks
+
+00:46:15.220 --> 00:46:15.360
+being recorded because people were just so
+
+00:46:17.040 --> 00:46:17.540
+interested in what was going on in rooms.
+
+00:46:19.040 --> 00:46:19.540
+And you know, we only,
+
+00:46:21.660 --> 00:46:22.160
+like this year, the co-organizers,
+
+00:46:23.720 --> 00:46:23.940
+it's the 5 people you see in a room
+
+00:46:26.760 --> 00:46:26.880
+currently. And if we had all of us to be in a
+
+00:46:28.440 --> 00:46:28.580
+separate room, having to record on the
+
+00:46:29.340 --> 00:46:29.640
+machine, it wouldn't work.
+
+00:46:32.120 --> 00:46:32.280
+So we are able to demultiply the amount of
+
+00:46:33.560 --> 00:46:34.060
+content that we produce thanks to BBB,
+
+00:46:37.540 --> 00:46:37.700
+but sadly, we are also quite limited by the
+
+00:46:39.560 --> 00:46:39.720
+interface of BBB. Another problem that is
+
+00:46:43.860 --> 00:46:44.360
+dear to me is that audio tends to be fairly
+
+00:46:46.240 --> 00:46:46.740
+bad at some points depending on the speakers
+
+00:46:50.080 --> 00:46:50.580
+because BBB has really funky audio correction
+
+00:46:51.500 --> 00:46:51.820
+stuff going in the background,
+
+00:46:52.540 --> 00:46:52.900
+and sometimes it works,
+
+00:46:53.760 --> 00:46:54.260
+sometimes it doesn't work,
+
+00:46:55.480 --> 00:46:55.980
+and especially on my machine,
+
+00:46:58.320 --> 00:46:58.480
+the specs are above in the document if you're
+
+00:47:02.040 --> 00:47:02.220
+interested, but BBB and OBS do not play well
+
+00:47:04.640 --> 00:47:04.820
+at all. You might have heard me speaking with
+
+00:47:06.120 --> 00:47:06.500
+some clicks in my voice at some point.
+
+00:47:07.600 --> 00:47:08.100
+That's another problem of BBB.
+
+00:47:09.240 --> 00:47:09.520
+Anyway, I mean, you wanted to add something
+
+00:47:09.720 --> 00:47:10.220
+as well.
+
+00:47:14.060 --> 00:47:14.340
+[Speaker 1]: Right, yeah, I kind of empathize and also
+
+00:47:17.220 --> 00:47:17.640
+emphasize the problems with audio on BBB
+
+00:47:19.860 --> 00:47:20.360
+sometimes, but about the specific suggestion
+
+00:47:22.540 --> 00:47:22.760
+here of like lighting things up at least
+
+00:47:24.780 --> 00:47:24.960
+visually, I think that's like much more
+
+00:47:26.940 --> 00:47:27.440
+doable even if you don't open a bug upstream.
+
+00:47:30.140 --> 00:47:30.520
+I believe the Free Software Foundation for
+
+00:47:31.360 --> 00:47:31.860
+their LibrePlanet conference,
+
+00:47:33.740 --> 00:47:34.200
+either last year or the year before,
+
+00:47:36.500 --> 00:47:36.760
+they had some custom, like clients signed
+
+00:47:38.000 --> 00:47:38.500
+into browser, custom CSS,
+
+00:47:40.520 --> 00:47:40.720
+where it would do exactly something like
+
+00:47:44.440 --> 00:47:44.820
+that. It would like enlarge the shared screen
+
+00:47:46.840 --> 00:47:47.000
+on the 1 side and then stack up all of the
+
+00:47:48.000 --> 00:47:48.280
+webcam feeds on 1 side.
+
+00:47:50.280 --> 00:47:50.440
+So we might be able to use something like
+
+00:47:50.440 --> 00:47:50.940
+that.
+
+00:47:53.040 --> 00:47:53.540
+[Speaker 3]: So I'll tack on to that.
+
+00:47:56.760 --> 00:47:56.880
+And now I feel like a heel as soon as I
+
+00:47:59.340 --> 00:47:59.500
+opened my mouth, because I think I almost get
+
+00:48:01.480 --> 00:48:01.720
+the sense Floyd wants to jump in here and
+
+00:48:03.680 --> 00:48:03.840
+we're all talking, everyone except Sasha who
+
+00:48:06.420 --> 00:48:06.660
+actually wrote OBS, you know,
+
+00:48:10.680 --> 00:48:10.920
+the OBS WebSocket plugin that is probably the
+
+00:48:12.100 --> 00:48:12.600
+answer to all the different questions
+
+00:48:13.360 --> 00:48:13.480
+everyone is bringing up.
+
+00:48:15.060 --> 00:48:15.420
+So I guess I'll leave my input at that And
+
+00:48:16.680 --> 00:48:16.800
+Chloe, did you have anything to say,
+
+00:48:17.720 --> 00:48:18.220
+or can we pick on Sasha?
+
+00:48:20.460 --> 00:48:20.960
+[Speaker 6]: Nothing to say.
+
+00:48:25.120 --> 00:48:25.320
+[Speaker 0]: I need to update the OBS WebSocket plugin for
+
+00:48:27.260 --> 00:48:27.440
+the protocol change, because I think the
+
+00:48:29.040 --> 00:48:29.540
+protocol change was from 4 to 5.
+
+00:48:32.080 --> 00:48:32.300
+It's 1 of those things that I haven't gotten
+
+00:48:35.280 --> 00:48:35.580
+[Speaker 1]: Cool. But
+
+00:48:37.120 --> 00:48:37.280
+[Speaker 0]: around to. yeah, so we'll try to solve it in
+
+00:48:41.240 --> 00:48:41.380
+CSS. So if I can tinker with the CSS or if
+
+00:48:44.160 --> 00:48:44.380
+somebody else would like to volunteer to move
+
+00:48:45.720 --> 00:48:46.220
+things around, then that would be fantastic
+
+00:48:48.040 --> 00:48:48.540
+because front-end should be things.
+
+00:48:53.480 --> 00:48:53.600
+Okay, oh, what order of magnitude hours do
+
+00:48:55.360 --> 00:48:55.520
+you each of you think you devote to the
+
+00:48:58.260 --> 00:48:58.580
+conference yearly? I have I expected someone
+
+00:48:59.540 --> 00:49:00.040
+would ask this question.
+
+00:49:07.840 --> 00:49:08.120
+So I have I have my the past 11 years of time
+
+00:49:11.000 --> 00:49:11.400
+analysis. This is my Emacs category,
+
+00:49:12.780 --> 00:49:13.280
+so it also includes Emacs news.
+
+00:49:15.660 --> 00:49:16.160
+So this is my Emacs hours by month and year.
+
+00:49:17.920 --> 00:49:18.420
+So you can see last year,
+
+00:49:21.140 --> 00:49:21.640
+it spiked up a lot. But this year,
+
+00:49:23.100 --> 00:49:23.440
+it has taken less time.
+
+00:49:26.260 --> 00:49:26.760
+So last month, it was about 93 hours.
+
+00:49:29.020 --> 00:49:29.520
+And the month before that was just about 87
+
+00:49:31.400 --> 00:49:31.880
+hours of prep. And this actually includes
+
+00:49:33.240 --> 00:49:33.740
+things like captioning and,
+
+00:49:36.260 --> 00:49:36.340
+and coordination. And then you can see a
+
+00:49:38.560 --> 00:49:38.940
+little bit of time here like the EMAX news
+
+00:49:42.040 --> 00:49:42.440
+and and harvesting q&a and adding chapter
+
+00:49:43.780 --> 00:49:44.280
+index indices and things like that.
+
+00:49:47.960 --> 00:49:48.460
+So I, I like it, it's it's my form of fun.
+
+00:49:50.540 --> 00:49:50.640
+And Otherwise, I'm mostly just,
+
+00:49:52.960 --> 00:49:53.460
+you know, helping the kiddo go to play dates
+
+00:49:54.320 --> 00:49:54.820
+and carrying things around.
+
+00:49:57.280 --> 00:49:57.500
+And, you know, so this is the stuff that I do
+
+00:49:58.260 --> 00:49:58.760
+to keep my brain happy.
+
+00:50:00.060 --> 00:50:00.320
+And if you're wondering,
+
+00:50:01.360 --> 00:50:01.860
+okay, well, do you sleep?
+
+00:50:03.520 --> 00:50:03.820
+That's the next question I expected people
+
+00:50:04.840 --> 00:50:05.060
+ask. The answer is yes,
+
+00:50:06.420 --> 00:50:06.660
+we still actually do manage to sleep,
+
+00:50:09.640 --> 00:50:09.800
+or at least I do. Less so now that I have a
+
+00:50:10.760 --> 00:50:11.260
+kid, this is like 2016,
+
+00:50:13.100 --> 00:50:13.260
+had a kiddo, and then suddenly much less
+
+00:50:14.640 --> 00:50:14.800
+sleep, but still a reasonable amount of
+
+00:50:16.780 --> 00:50:17.280
+sleep. So Emacs stuff happens,
+
+00:50:19.600 --> 00:50:20.100
+I can still sleep, and it's a lot of fun.
+
+00:50:23.260 --> 00:50:23.760
+[Speaker 4]: Now that's data for you folks.
+
+00:50:26.960 --> 00:50:27.460
+[Speaker 1]: Yeah, we can't top that at all.
+
+00:50:30.420 --> 00:50:30.820
+[Speaker 0]: It's a blog post also,
+
+00:50:30.820 --> 00:50:31.320
+yeah.
+
+00:50:33.160 --> 00:50:33.340
+[Speaker 4]: Especially, you start like this,
+
+00:50:36.540 --> 00:50:37.040
+how do you expect all of us to say anything
+
+00:50:38.680 --> 00:50:38.740
+after this? Whatever we say is not going to
+
+00:50:40.560 --> 00:50:40.680
+be backed up by data, it's not going to be as
+
+00:50:42.360 --> 00:50:42.520
+many hours, and it's not going to be as
+
+00:50:43.180 --> 00:50:43.680
+qualitative in general.
+
+00:50:53.640 --> 00:50:53.900
+I can remark on something because for me it's
+
+00:50:56.040 --> 00:50:56.540
+my fourth year helping to organize EmacsConf
+
+00:50:59.280 --> 00:50:59.780
+and there's a definite change this year.
+
+00:51:02.480 --> 00:51:02.980
+I did spend, usually I get into EmacsConf
+
+00:51:05.640 --> 00:51:06.040
+mode in late September when I start worrying
+
+00:51:07.900 --> 00:51:08.080
+about the CFP, the call for proposal is
+
+00:51:09.720 --> 00:51:10.080
+finishing, and then we need to start running
+
+00:51:12.580 --> 00:51:12.780
+after speakers to secure the proposals to
+
+00:51:13.860 --> 00:51:14.360
+make sure, oh, can you do this?
+
+00:51:16.500 --> 00:51:16.680
+Can you do maybe a 10-minute format instead
+
+00:51:17.400 --> 00:51:17.560
+of a 20-minute format,
+
+00:51:18.760 --> 00:51:19.260
+you know, all this jazzy stuff.
+
+00:51:21.820 --> 00:51:22.020
+And usually it kind of looks like Sasha for
+
+00:51:22.940 --> 00:51:23.400
+me in terms of involvement,
+
+00:51:24.900 --> 00:51:25.400
+or at least it did for the previous year.
+
+00:51:28.920 --> 00:51:29.300
+But this year, now that I've been gainfully
+
+00:51:30.220 --> 00:51:30.720
+employed as a software developer,
+
+00:51:33.760 --> 00:51:33.900
+I found it much harder to find the time to
+
+00:51:36.500 --> 00:51:36.660
+invest into MaxComp. But 1 of the things that
+
+00:51:39.520 --> 00:51:39.800
+allowed me to still stay efficient at my day
+
+00:51:42.100 --> 00:51:42.260
+job is the fact that I knew that Sasha and
+
+00:51:43.680 --> 00:51:44.180
+all the work that we did in previous years
+
+00:51:46.240 --> 00:51:46.560
+would come to help us organize this year's
+
+00:51:48.160 --> 00:51:48.560
+conference. And I'm not kidding,
+
+00:51:49.900 --> 00:51:50.140
+this year, I've been keeping an eye,
+
+00:51:51.300 --> 00:51:51.480
+obviously, and we've been chatting with all
+
+00:51:53.860 --> 00:51:54.340
+the organizers, but it's mostly been Sasha
+
+00:51:56.880 --> 00:51:57.080
+holding the fort from the end of the CFP in
+
+00:52:00.060 --> 00:52:00.560
+September to right about end of November.
+
+00:52:02.220 --> 00:52:02.720
+So I'll use the opportunity,
+
+00:52:04.780 --> 00:52:05.160
+as well my fellow co-organizers will,
+
+00:52:07.300 --> 00:52:07.480
+to thank you Sasha for putting so much time
+
+00:52:09.720 --> 00:52:09.900
+and energy into this. Not only Sasha from
+
+00:52:11.680 --> 00:52:11.920
+this year, but also Sasha from last year,
+
+00:52:12.840 --> 00:52:13.340
+and last year, and last year.
+
+00:52:19.920 --> 00:52:20.160
+And I will not be able to give you a figure
+
+00:52:20.840 --> 00:52:21.000
+of how much time it takes.
+
+00:52:22.920 --> 00:52:23.220
+I can tell you that the 2 days of Emacs Con
+
+00:52:28.180 --> 00:52:28.380
+are a bloody marathon because we cannot share
+
+00:52:31.060 --> 00:52:31.220
+our screens with you, but Sasha has given you
+
+00:52:32.220 --> 00:52:32.580
+a little bit of pointers about,
+
+00:52:34.080 --> 00:52:34.580
+you know, how much stuff we need to monitor.
+
+00:52:36.560 --> 00:52:36.820
+Sasha just switches constantly between
+
+00:52:38.860 --> 00:52:39.320
+workspaces. I just put everything on 1
+
+00:52:41.400 --> 00:52:41.900
+workspace and my screen looks absolutely
+
+00:52:44.480 --> 00:52:44.920
+mental. And then I wonder why my microphone
+
+00:52:46.020 --> 00:52:46.520
+is clipping on BVB, I suppose.
+
+00:52:47.400 --> 00:52:47.540
+All right, that's all for me.
+
+00:52:48.900 --> 00:52:49.040
+Anyone wants to say anything about how much
+
+00:52:49.920 --> 00:52:50.420
+time it takes? Sasha, please.
+
+00:52:52.800 --> 00:52:53.000
+[Speaker 0]: I have a nice setup this year because I
+
+00:52:55.840 --> 00:52:55.960
+actually have a Matthew Lent donated a
+
+00:52:57.440 --> 00:52:57.660
+computer to me that can handle the big
+
+00:53:00.240 --> 00:53:00.420
+monitor and I'm stealing my husband's big
+
+00:53:01.100 --> 00:53:01.280
+monitor over there. See,
+
+00:53:02.240 --> 00:53:02.740
+So this is my setup today.
+
+00:53:05.600 --> 00:53:06.020
+It's got like conference stuff on my laptop
+
+00:53:08.800 --> 00:53:09.240
+and then just IOC on the other big screen and
+
+00:53:10.640 --> 00:53:11.000
+the 480p so I can see,
+
+00:53:12.340 --> 00:53:12.840
+I can make sure it doesn't fall down.
+
+00:53:14.900 --> 00:53:15.400
+Yes, so I have a nice setup today.
+
+00:53:22.260 --> 00:53:22.400
+[Speaker 4]: Anyone wants to comment about how much time
+
+00:53:24.160 --> 00:53:24.360
+it takes for them to organize the MaxCon for
+
+00:53:25.440 --> 00:53:25.940
+2, you know, including everything,
+
+00:53:26.580 --> 00:53:27.080
+be it the brainstorming,
+
+00:53:28.940 --> 00:53:29.440
+the answering volunteers and stuff like this?
+
+00:53:31.320 --> 00:53:31.640
+Or we can move to another question,
+
+00:53:31.800 --> 00:53:32.300
+of course.
+
+00:53:34.600 --> 00:53:34.960
+[Speaker 1]: I mean, I know for myself,
+
+00:53:36.180 --> 00:53:36.580
+I kind of dropped the ball this year,
+
+00:53:38.940 --> 00:53:39.440
+somewhat unintentionally or unintentionally.
+
+00:53:41.640 --> 00:53:42.040
+Well, yeah, I didn't have any other choice,
+
+00:53:44.280 --> 00:53:44.780
+basically, at least in like September through
+
+00:53:46.940 --> 00:53:47.440
+like early November or mid November.
+
+00:53:51.100 --> 00:53:51.500
+But I think like, it sort of differs,
+
+00:53:52.480 --> 00:53:52.820
+I guess, from year to year.
+
+00:53:53.520 --> 00:53:54.020
+Sometimes life happens,
+
+00:53:57.900 --> 00:53:58.400
+and no matter how much you would love to put
+
+00:53:59.540 --> 00:53:59.880
+a ton of time into something,
+
+00:54:01.620 --> 00:54:01.820
+you just can't. And maybe next year you can
+
+00:54:04.340 --> 00:54:04.540
+do a lot more. So I'm optimistic I'll be able
+
+00:54:07.080 --> 00:54:07.260
+to put in much more time into things for
+
+00:54:09.580 --> 00:54:10.080
+EmacsConf next year, but that's just me.
+
+00:54:12.360 --> 00:54:12.560
+[Speaker 4]: I just want to say something before Robin
+
+00:54:13.900 --> 00:54:14.400
+drops in. Sasha, go please first.
+
+00:54:18.800 --> 00:54:19.120
+[Speaker 0]: And I think people shouldn't like feel bad
+
+00:54:20.280 --> 00:54:20.780
+about having those. I think designing
+
+00:54:24.120 --> 00:54:24.280
+conference systems or processes so that they
+
+00:54:26.800 --> 00:54:27.300
+can take advantage of little pockets of time
+
+00:54:30.460 --> 00:54:30.680
+is the way to go. I love the fact that we now
+
+00:54:33.200 --> 00:54:33.360
+have a system where hosts can show up on the
+
+00:54:35.280 --> 00:54:35.680
+day of and just rock it,
+
+00:54:36.880 --> 00:54:37.380
+right? So this is great.
+
+00:54:41.580 --> 00:54:42.080
+It is good that we can get by with less time
+
+00:54:43.940 --> 00:54:44.120
+throughout the process and just take
+
+00:54:45.660 --> 00:54:46.160
+advantage of whatever time people have.
+
+00:54:46.960 --> 00:54:47.180
+Whether it's, you know,
+
+00:54:49.120 --> 00:54:49.280
+they've got 2 hours, they want to caption a
+
+00:54:51.560 --> 00:54:52.040
+talk, that sort of stuff is already totally
+
+00:54:52.040 --> 00:54:52.540
+awesome.
+
+00:54:57.480 --> 00:54:57.980
+[Speaker 3]: And yeah, you both, thank you.
+
+00:55:00.820 --> 00:55:01.020
+Yeah, you both stole my Thunder and then put
+
+00:55:03.880 --> 00:55:04.120
+a quarterback in me. I couldn't agree more
+
+00:55:04.920 --> 00:55:05.280
+with everything you said.
+
+00:55:09.020 --> 00:55:09.220
+That's something that just typifies what is
+
+00:55:10.360 --> 00:55:10.860
+amazing about this conference,
+
+00:55:12.340 --> 00:55:12.840
+right? It's a kind of accessibility,
+
+00:55:17.120 --> 00:55:17.500
+isn't it? Having some work I can give you
+
+00:55:19.380 --> 00:55:19.880
+that helps you give back to your community
+
+00:55:21.340 --> 00:55:21.840
+that is at your level,
+
+00:55:23.300 --> 00:55:23.800
+that fits your time budget,
+
+00:55:26.960 --> 00:55:27.120
+that is something that you're willing to go
+
+00:55:28.280 --> 00:55:28.780
+care about because it intersects,
+
+00:55:31.400 --> 00:55:31.780
+you know, the world you live in in some
+
+00:55:34.240 --> 00:55:34.540
+practical way and therefore you can make time
+
+00:55:37.360 --> 00:55:37.860
+for it. We all live in a lot of different
+
+00:55:40.520 --> 00:55:40.600
+trenches and making them intersect is 1 of
+
+00:55:42.500 --> 00:55:43.000
+the things Emacs does in a technical way
+
+00:55:43.820 --> 00:55:44.020
+[Speaker 5]: and
+
+00:55:47.260 --> 00:55:47.580
+[Speaker 3]: through this conference at least in a very
+
+00:55:51.100 --> 00:55:51.340
+community way. Okay, and it brings me back
+
+00:55:52.360 --> 00:55:52.680
+also on the OBS front.
+
+00:55:54.080 --> 00:55:54.240
+And I think that's what really excited me
+
+00:55:56.260 --> 00:55:56.580
+too. When I think about the potential that's
+
+00:55:59.440 --> 00:55:59.940
+out there and getting a bunch of people
+
+00:56:01.960 --> 00:56:02.080
+looking at the work you've already done with
+
+00:56:03.960 --> 00:56:04.440
+OBS WebSocket and thinking about,
+
+00:56:06.660 --> 00:56:06.960
+you know, oh, we want more timers that count
+
+00:56:09.280 --> 00:56:09.340
+things down and we want each organizer to be
+
+00:56:10.680 --> 00:56:11.040
+able to have a little palette of them,
+
+00:56:12.780 --> 00:56:12.940
+some of which are gonna be handed to you by
+
+00:56:14.620 --> 00:56:14.760
+the conference director and some of which you
+
+00:56:16.800 --> 00:56:17.240
+can add yourself because they help you and
+
+00:56:19.600 --> 00:56:20.020
+that's right. And, you know,
+
+00:56:21.780 --> 00:56:22.120
+have, you know, keeping things really fast
+
+00:56:24.120 --> 00:56:24.620
+and loose so we can make the artistic
+
+00:56:26.880 --> 00:56:27.340
+decisions on the fly that make our conference
+
+00:56:30.340 --> 00:56:30.840
+what it is, but then making,
+
+00:56:33.480 --> 00:56:33.740
+you know, a simple automated tool chain that
+
+00:56:36.380 --> 00:56:36.560
+anyone can learn and that we know how to
+
+00:56:37.700 --> 00:56:38.200
+execute the steps of manually.
+
+00:56:41.000 --> 00:56:41.280
+That's the actual design pattern that you've
+
+00:56:42.980 --> 00:56:43.480
+implemented here that's working so well.
+
+00:56:47.460 --> 00:56:47.580
+So the
+
+00:56:50.080 --> 00:56:50.540
+[Speaker 4]: 1 thing I wanted to ask about Amin saying,
+
+00:56:51.600 --> 00:56:52.100
+oh, I've dropped the ball this year.
+
+00:56:53.600 --> 00:56:53.940
+Amin's, just to be clear with everyone,
+
+00:56:55.380 --> 00:56:55.520
+Amin's definition of dropping the ball is
+
+00:56:56.940 --> 00:56:57.360
+securing a sponsorship with the FSF.
+
+00:56:58.680 --> 00:56:59.180
+So that's dropping the ball for you.
+
+00:57:02.320 --> 00:57:02.720
+[Speaker 3]: Well attending a weekly meeting,
+
+00:57:04.480 --> 00:57:04.640
+We take 1 week off a month where we
+
+00:57:08.400 --> 00:57:08.720
+coordinate infrastructure issues between this
+
+00:57:13.200 --> 00:57:13.440
+and other FSF supported projects using quote
+
+00:57:14.320 --> 00:57:14.820
+unquote GNU infrastructure.
+
+00:57:16.860 --> 00:57:17.360
+That's kind of a, GNU is really an umbrella
+
+00:57:19.220 --> 00:57:19.720
+term once you get kind of close to it.
+
+00:57:22.220 --> 00:57:22.400
+You know, it's like GNU is all of the
+
+00:57:25.020 --> 00:57:25.240
+volunteers helping with this vision we have
+
+00:57:25.840 --> 00:57:26.340
+of user rights.
+
+00:57:31.380 --> 00:57:31.560
+[Speaker 4]: 1 last thing I wanted to add about how much
+
+00:57:32.220 --> 00:57:32.480
+time we spend on this.
+
+00:57:33.900 --> 00:57:34.400
+It's just the fact that we've experimented
+
+00:57:36.180 --> 00:57:36.380
+over the 4 years I've been part of this.
+
+00:57:38.480 --> 00:57:38.760
+You know, the first year we had so many
+
+00:57:40.720 --> 00:57:40.840
+meetings because we thought this would be the
+
+00:57:42.640 --> 00:57:42.800
+way to know 1 another and this would be the
+
+00:57:44.280 --> 00:57:44.780
+way to create qualitative notes.
+
+00:57:46.520 --> 00:57:46.560
+And we've come back to this.
+
+00:57:48.180 --> 00:57:48.340
+[Speaker 3]: That is what I saw. I can't help but
+
+00:57:49.940 --> 00:57:50.440
+interrupt you again. This is all I do.
+
+00:57:52.080 --> 00:57:52.580
+Leo This is why I keep off the microphone
+
+00:57:54.060 --> 00:57:54.440
+until the last 20 minutes of the conference
+
+00:57:56.580 --> 00:57:56.760
+once everybody already wants to hang up Then
+
+00:57:58.940 --> 00:57:59.080
+I know you'll be honest with me But I have to
+
+00:58:01.880 --> 00:58:02.240
+say when I looked at that table of data all I
+
+00:58:05.280 --> 00:58:05.440
+saw was 200 hours of Sasha's life that she
+
+00:58:06.940 --> 00:58:07.240
+spent talking to the, you know,
+
+00:58:08.360 --> 00:58:08.680
+all many of us were involved.
+
+00:58:10.960 --> 00:58:11.320
+It's not just the 4 or 5 of us that,
+
+00:58:13.160 --> 00:58:13.460
+you know, that have done this last 2 years
+
+00:58:14.440 --> 00:58:14.940
+convention, right? It's,
+
+00:58:17.120 --> 00:58:17.260
+you know, there's been many people that have
+
+00:58:19.340 --> 00:58:19.780
+come in, shared wise thoughts,
+
+00:58:22.120 --> 00:58:22.420
+helping us form the, I don't know,
+
+00:58:24.400 --> 00:58:24.620
+ethos or all of the things that we're
+
+00:58:26.680 --> 00:58:27.180
+carrying forward into 2024.
+
+00:58:31.460 --> 00:58:31.960
+Sorry, Leo.
+
+00:58:32.640 --> 00:58:32.880
+[Speaker 1]: No, no,
+
+00:58:33.560 --> 00:58:33.940
+[Speaker 4]: you're fine, You're fine.
+
+00:58:35.980 --> 00:58:36.060
+I mean, you pretty much continued with what I
+
+00:58:37.500 --> 00:58:38.000
+was going to talk about.
+
+00:58:41.040 --> 00:58:41.540
+So I'm looking at the time and I've already
+
+00:58:44.640 --> 00:58:44.700
+extended by 5 minutes the amount of time I
+
+00:58:46.640 --> 00:58:46.800
+was supposed to stay and Flowy is looking at
+
+00:58:50.320 --> 00:58:50.660
+me with very teary eyes because he's thinking
+
+00:58:51.900 --> 00:58:52.280
+about the meeting he's going to have at 9am
+
+00:58:53.440 --> 00:58:53.940
+tomorrow, as will I by the way.
+
+00:58:54.720 --> 00:58:54.920
+Yeah, don't you have to
+
+00:58:56.380 --> 00:58:56.760
+[Speaker 3]: be commuting like right now Flowy?
+
+00:58:58.200 --> 00:58:58.700
+I mean aren't you supposed to be...
+
+00:59:01.560 --> 00:59:01.840
+I hope you get to sleep before work.
+
+00:59:04.820 --> 00:59:04.960
+Thank you so much for your awesome work this
+
+00:59:04.960 --> 00:59:05.460
+year.
+
+00:59:07.360 --> 00:59:07.680
+[Speaker 6]: I mean, I didn't do so much at the Emojis
+
+00:59:09.100 --> 00:59:09.600
+Conference, so I'm just here like from
+
+00:59:13.180 --> 00:59:13.320
+Friday. At first, I was looking at the
+
+00:59:14.760 --> 00:59:15.060
+website, which talks we're having,
+
+00:59:17.860 --> 00:59:18.040
+So it's all fine. So maybe next year or the
+
+00:59:19.740 --> 00:59:19.960
+coming year, I can do a little bit more
+
+00:59:19.960 --> 00:59:20.460
+privacy.
+
+00:59:23.260 --> 00:59:23.760
+[Speaker 4]: A little more, like again,
+
+00:59:25.920 --> 00:59:26.420
+like with Amin, Flowy's definition of doing,
+
+00:59:30.240 --> 00:59:30.400
+not having done much is hosting 1 of many of
+
+00:59:34.120 --> 00:59:34.240
+the Dev talks. So you could be kind of
+
+00:59:35.680 --> 00:59:36.140
+worried about it. All right,
+
+00:59:38.480 --> 00:59:38.720
+folks, considering the question that we have
+
+00:59:40.440 --> 00:59:40.640
+right now, we still see people adding
+
+00:59:42.260 --> 00:59:42.620
+questions, but I think we are all pretty
+
+00:59:44.960 --> 00:59:45.060
+tired and we need to get on with the rest of
+
+00:59:46.280 --> 00:59:46.780
+our weekends or nights.
+
+00:59:49.740 --> 00:59:50.080
+So do I go into parting words now everyone?
+
+00:59:50.720 --> 00:59:51.220
+Are we okay with this?
+
+00:59:55.280 --> 00:59:55.680
+I'll take this for a yes.
+
+00:59:56.780 --> 00:59:57.280
+I'll ask Sasha, yeah?
+
+01:00:00.780 --> 01:00:01.080
+[Speaker 0]: Oh I think I basically have until the kiddo
+
+01:00:03.560 --> 01:00:03.760
+yells at me to come for dinner so I can hang
+
+01:00:04.440 --> 01:00:04.940
+out with people after.
+
+01:00:09.240 --> 01:00:09.740
+and do the wrapping up.
+
+01:00:09.920 --> 01:00:10.080
+[Speaker 3]: But I
+
+01:00:10.080 --> 01:00:10.440
+[Speaker 4]: All right, splendid. Go ahead know,
+
+01:00:12.100 --> 01:00:12.600
+right, I'll do the wrapping up for the
+
+01:00:13.860 --> 01:00:14.040
+perhaps the stream. We might leave it up
+
+01:00:16.360 --> 01:00:16.700
+because there's no impetus for us to close
+
+01:00:20.100 --> 01:00:20.280
+it. But at least to officially close while
+
+01:00:22.340 --> 01:00:22.840
+we're still there, EmacsConf 2023,
+
+01:00:25.480 --> 01:00:25.900
+I will have again to thank everyone,
+
+01:00:28.200 --> 01:00:28.700
+all the speakers, all my co-organizers for
+
+01:00:31.020 --> 01:00:31.160
+making this possible. You've seen all the
+
+01:00:32.120 --> 01:00:32.260
+care that we put into it,
+
+01:00:34.900 --> 01:00:35.320
+and we are glad every year that all this work
+
+01:00:37.940 --> 01:00:38.440
+is doing something in terms of community
+
+01:00:41.420 --> 01:00:41.600
+building, in terms of leading more people to
+
+01:00:42.880 --> 01:00:43.380
+join us every year as speakers,
+
+01:00:45.040 --> 01:00:45.540
+or just join us as a user of Emacs.
+
+01:00:49.940 --> 01:00:50.100
+And it's always a pleasure to organize the
+
+01:00:51.140 --> 01:00:51.640
+conference, to host it,
+
+01:00:53.360 --> 01:00:53.620
+and to work with everyone in the room
+
+01:00:56.840 --> 01:00:57.340
+currently. Corwin and I are constantly joking
+
+01:00:59.640 --> 01:01:00.140
+when we are backstage making jokes.
+
+01:01:03.540 --> 01:01:03.840
+I think it's Corwin we said last year during
+
+01:01:06.620 --> 01:01:06.900
+the closing remarks that there was no other
+
+01:01:09.000 --> 01:01:09.500
+place they'd rather be than in the backstage.
+
+01:01:12.800 --> 01:01:12.940
+And for me, even though many things have
+
+01:01:15.040 --> 01:01:15.360
+changed in my life over the last year,
+
+01:01:16.240 --> 01:01:16.740
+many good things have happened,
+
+01:01:19.640 --> 01:01:19.860
+it's good to come back to Emacs Cons as this
+
+01:01:22.080 --> 01:01:22.580
+milestone and say, oh yeah,
+
+01:01:23.960 --> 01:01:24.220
+I'm exactly where I want to be,
+
+01:01:25.320 --> 01:01:25.820
+with the people I want to be with,
+
+01:01:29.020 --> 01:01:29.220
+and I see myself and I cannot wait to see
+
+01:01:30.660 --> 01:01:31.080
+myself again in the situation next year.
+
+01:01:32.080 --> 01:01:32.580
+So thank you so much everyone.
+
+01:01:34.440 --> 01:01:34.640
+If you want to join us,
+
+01:01:36.100 --> 01:01:36.180
+ask questions, we'll still be here for a
+
+01:01:37.360 --> 01:01:37.640
+while. Floey might drop out,
+
+01:01:39.520 --> 01:01:40.020
+I might drop out, Sasha might drop out,
+
+01:01:41.600 --> 01:01:41.880
+but we'll be here to answer as many questions
+
+01:01:43.140 --> 01:01:43.640
+as you want for as long as we can.
+
+01:01:46.120 --> 01:01:46.280
+Bye bye everyone and let's get started with
+
+01:01:46.800 --> 01:01:47.300
+the after show now.
+
+01:01:51.540 --> 01:01:52.040
+[Speaker 0]: Bye Leo, bye Chloe! I'll drop out eventually
+
+01:01:53.000 --> 01:01:53.500
+when the kiddo yells at me.
+
+01:01:56.200 --> 01:01:56.440
+[Speaker 3]: I can't tell you how much fun this is,
+
+01:01:58.260 --> 01:01:58.440
+yeah. The way to remember what I said,
+
+01:02:00.400 --> 01:02:00.700
+Leo, it's 100% true. Oh man,
+
+01:02:01.380 --> 01:02:01.640
+turning off your lights,
+
+01:02:02.880 --> 01:02:03.220
+I'm doing it. I'm doing it too.
+
+01:02:04.600 --> 01:02:04.900
+Sorry y'all. Oh, yeah,
+
+01:02:05.380 --> 01:02:05.880
+bye-bye lights
+
+01:02:10.440 --> 01:02:10.760
+[Speaker 4]: Yeah, that's every year that's how we finish
+
+01:02:12.340 --> 01:02:12.500
+we just turn off the the big lights that we
+
+01:02:14.240 --> 01:02:14.440
+have in our faces all the day especially the
+
+01:02:14.440 --> 01:02:14.940
+hosts
+
+01:02:19.120 --> 01:02:19.460
+[Speaker 3]: and Tell me if there's too much back chatter
+
+01:02:22.700 --> 01:02:23.200
+[Speaker 5]: get off my headphones,
+
+01:02:24.280 --> 01:02:24.720
+too, so I can
+
+01:02:25.260 --> 01:02:25.760
+[Speaker 3]: when I hear you in the room.
+
+01:02:28.860 --> 01:02:29.360
+Can I hear you now? Yeah.
+
+01:02:31.960 --> 01:02:32.460
+Is it feeding back pretty bad?
+
+01:02:34.480 --> 01:02:34.980
+[Speaker 1]: Hello? there is some echo.
+
+01:02:37.460 --> 01:02:37.960
+[Speaker 4]: Yeah, there is some echo.
+
+01:02:41.200 --> 01:02:41.380
+[Speaker 3]: I think Okay. Fine. I can live with my
+
+01:02:42.160 --> 01:02:42.660
+headset a little longer.
+
+01:02:44.860 --> 01:02:45.360
+I give 1 ear a break at a time.
+
+01:02:47.140 --> 01:02:47.640
+[Speaker 1]: Thanks for your sacrifice.
+
+01:02:50.060 --> 01:02:50.560
+[Speaker 3]: Oh, well, you know, it's a small,
+
+01:02:53.080 --> 01:02:53.360
+small, small price to pay to get to smooth
+
+01:02:56.600 --> 01:02:56.820
+with y'all. Yeah, I was just looking at that
+
+01:02:58.580 --> 01:02:58.820
+chart and I was thinking about all of those
+
+01:03:01.360 --> 01:03:01.560
+meetings that we had like 18 months we were
+
+01:03:05.900 --> 01:03:06.400
+just on this death march to organize this and
+
+01:03:09.240 --> 01:03:09.520
+it's just such an amazing accomplishment that
+
+01:03:11.960 --> 01:03:12.140
+you you have here Sasha like I'm sorry to
+
+01:03:14.540 --> 01:03:14.760
+pick on you personally but the work that you
+
+01:03:16.680 --> 01:03:17.180
+put in keep being able to keep it the whole
+
+01:03:18.760 --> 01:03:19.260
+technical project in your mind,
+
+01:03:21.580 --> 01:03:21.760
+all the way down to presenting it at this
+
+01:03:24.100 --> 01:03:24.480
+year's conference and like kind of spoon
+
+01:03:26.380 --> 01:03:26.520
+feeding it to people that want to run off in
+
+01:03:27.900 --> 01:03:28.260
+their own damn direction and then handing
+
+01:03:31.480 --> 01:03:31.880
+them an org is the 1 that people keep bugging
+
+01:03:33.440 --> 01:03:33.940
+us about. So if you're looking for a project,
+
+01:03:37.340 --> 01:03:37.840
+here it is. Just really well done.
+
+01:03:43.540 --> 01:03:43.980
+I no longer feel like we wasted a lot of time
+
+01:03:46.460 --> 01:03:46.680
+there. I mean, you remember I enjoyed so much
+
+01:03:48.600 --> 01:03:49.100
+all of our check ins and all of that stuff.
+
+01:03:51.420 --> 01:03:51.920
+But we had so many ideas,
+
+01:03:53.480 --> 01:03:53.980
+you can imagine that I wondered,
+
+01:03:56.980 --> 01:03:57.160
+you know, I wondered if we should have had
+
+01:03:58.520 --> 01:03:58.700
+more focused meetings and all that.
+
+01:04:01.100 --> 01:04:01.360
+And I was glad when we stopped having like
+
+01:04:04.240 --> 01:04:04.540
+weekly meetings, because you know what I mean
+
+01:04:06.980 --> 01:04:07.120
+To keep this much power in the room once a
+
+01:04:08.160 --> 01:04:08.660
+week, it feels creepy.
+
+01:04:10.560 --> 01:04:11.060
+This much intellectual power.
+
+01:04:18.525 --> 01:04:18.820
+Anyway, that's it. I think that's it for me.
+
+01:04:19.600 --> 01:04:19.760
+[Speaker 1]: Yeah, and I'll say, I mean,
+
+01:04:22.280 --> 01:04:22.540
+I can't obviously speak for Sash or anyone
+
+01:04:24.840 --> 01:04:24.940
+else. Yeah, the regular meetings were a
+
+01:04:26.980 --> 01:04:27.180
+little bit intense than we had the year
+
+01:04:29.540 --> 01:04:29.680
+before, but I'm kind of also super glad that
+
+01:04:31.840 --> 01:04:32.040
+we did do them. And, you know,
+
+01:04:34.840 --> 01:04:34.960
+in a way, it did help us sort of connect and
+
+01:04:38.180 --> 01:04:38.360
+get to know each other much more regularly or
+
+01:04:41.200 --> 01:04:41.440
+much more which is great and I see thumbs up
+
+01:04:44.900 --> 01:04:45.060
+from Leo and Corwin so yeah happy we did
+
+01:04:49.080 --> 01:04:49.280
+them. Might want to have some kind of
+
+01:04:51.820 --> 01:04:52.040
+actually irregular ones every once in a while
+
+01:04:53.400 --> 01:04:53.860
+if we have to decide on something.
+
+01:04:55.240 --> 01:04:55.520
+But if like this year,
+
+01:04:57.400 --> 01:04:57.600
+everything can be worked out pretty much ad
+
+01:04:58.780 --> 01:04:59.020
+hoc, whenever needs be,
+
+01:05:00.480 --> 01:05:00.980
+like over asynchronous communications.
+
+01:05:03.640 --> 01:05:04.140
+I see Sasha nodding very excitedly.
+
+01:05:07.820 --> 01:05:08.320
+This also works. So yeah.
+
+01:05:10.920 --> 01:05:11.420
+And I also see some questions coming in here
+
+01:05:14.580 --> 01:05:15.040
+in BBB. If other folks want to join,
+
+01:05:16.280 --> 01:05:16.780
+please feel free to do that as well.
+
+01:05:18.800 --> 01:05:19.300
+Yeah, I don't think we have an issue tracker
+
+01:05:22.440 --> 01:05:22.860
+right now, but our whole website is a wiki.
+
+01:05:24.780 --> 01:05:25.280
+So if you wanna like create a new page or
+
+01:05:26.180 --> 01:05:26.480
+there might be a page,
+
+01:05:28.640 --> 01:05:28.780
+I don't know. You can of course go in and
+
+01:05:29.760 --> 01:05:30.260
+edit it to your heart's content.
+
+01:05:36.540 --> 01:05:37.040
+[Speaker 3]: Yeah. Hilarious, I couldn't,
+
+01:05:39.440 --> 01:05:39.600
+like I almost managed to type that as fast as
+
+01:05:40.760 --> 01:05:41.260
+you could say it, you know.
+
+01:05:43.840 --> 01:05:43.940
+That's fine. I get the same answer in the
+
+01:05:46.620 --> 01:05:46.800
+chat. Yep. Our website's a wiki and we
+
+01:05:48.060 --> 01:05:48.260
+definitely use ideas here.
+
+01:05:50.280 --> 01:05:50.540
+If you want to implement them or you know
+
+01:05:53.100 --> 01:05:53.440
+document them enough that even Corwin can
+
+01:05:55.240 --> 01:05:55.740
+code it then you know I'll do that.
+
+01:05:58.220 --> 01:05:58.380
+[Speaker 0]: Also I'll go through all the etherpads at
+
+01:06:00.240 --> 01:06:00.480
+some point to harvest them and I think I have
+
+01:06:02.240 --> 01:06:02.480
+yeah I have an Emacs list function that does
+
+01:06:05.020 --> 01:06:05.280
+this for me. So that I can go through that
+
+01:06:06.820 --> 01:06:07.280
+thing and include that in our organizers
+
+01:06:09.060 --> 01:06:09.280
+notebooks, lessons learned and ideas for next
+
+01:06:09.280 --> 01:06:09.780
+year.
+
+01:06:11.120 --> 01:06:11.620
+[Speaker 3]: Yeah.
+
+01:06:15.010 --> 01:06:15.060
+[Speaker 4]: Yeah, because something that you know,
+
+01:06:16.280 --> 01:06:16.720
+We were talking about the different models
+
+01:06:18.680 --> 01:06:18.840
+between having many, many meetings and how it
+
+01:06:20.280 --> 01:06:20.760
+paid off eventually. The thing is,
+
+01:06:22.160 --> 01:06:22.660
+this year we had no meetings.
+
+01:06:27.440 --> 01:06:27.660
+We met Friday morning on Mumble and we were
+
+01:06:29.540 --> 01:06:29.720
+ready to go. We did chat things up a little
+
+01:06:30.180 --> 01:06:30.660
+bit on ISE, obviously,
+
+01:06:31.780 --> 01:06:32.120
+but no meeting this year.
+
+01:06:33.420 --> 01:06:33.640
+So I'm tempted to say that,
+
+01:06:34.800 --> 01:06:35.080
+yes, we could have off-hand meetings,
+
+01:06:36.360 --> 01:06:36.480
+but I think it's mostly because we want to
+
+01:06:38.240 --> 01:06:38.680
+see 1 another, not because we need
+
+01:06:40.680 --> 01:06:41.160
+necessarily for those meetings to prepare
+
+01:06:45.480 --> 01:06:45.660
+Emacs cons. But what I wanted to say as well
+
+01:06:49.740 --> 01:06:50.200
+is that I think it's a testament to the bets
+
+01:06:52.940 --> 01:06:53.140
+that Sasha took last year to automatize a lot
+
+01:06:54.520 --> 01:06:54.720
+of things. I mean, we'd already been
+
+01:06:55.760 --> 01:06:56.120
+automatizing a lot of stuff,
+
+01:06:58.260 --> 01:06:58.760
+like writing scripts for every single thing
+
+01:07:02.220 --> 01:07:02.600
+in ESPire, but last year we made a big bet to
+
+01:07:04.600 --> 01:07:04.920
+say, what if we had OBS in the cloud?
+
+01:07:06.580 --> 01:07:06.760
+What if we had a streaming platform that was
+
+01:07:08.680 --> 01:07:08.860
+running on a machine? And this is what
+
+01:07:11.660 --> 01:07:12.100
+allowed us to very smoothly have 2 tracks,
+
+01:07:13.380 --> 01:07:13.880
+the general track and the dev track.
+
+01:07:16.640 --> 01:07:16.980
+And I think the beauty of this system is
+
+01:07:19.680 --> 01:07:19.840
+that, obviously, because we get more and more
+
+01:07:20.720 --> 01:07:21.220
+speakers submitting talks,
+
+01:07:22.800 --> 01:07:23.100
+we are starting to think maybe we actually
+
+01:07:26.480 --> 01:07:26.740
+need a third track or something and no 1 is
+
+01:07:28.580 --> 01:07:29.080
+stressed in the room when Sasha says this.
+
+01:07:31.100 --> 01:07:31.360
+You know, there's not the reaction that's
+
+01:07:32.320 --> 01:07:32.540
+like, oh no it's gonna be tough,
+
+01:07:33.200 --> 01:07:33.620
+we're gonna need more hosts,
+
+01:07:34.480 --> 01:07:34.980
+organizers, it's just a calm...
+
+01:07:37.580 --> 01:07:38.040
+[Speaker 3]: Now, point of order, Now Flowy is stressed
+
+01:07:39.000 --> 01:07:39.500
+when Sasha says this.
+
+01:07:44.640 --> 01:07:45.060
+[Speaker 4]: That was just a-
+
+01:07:46.640 --> 01:07:46.800
+[Speaker 0]: I didn't know, Colin, we could put you in the
+
+01:07:47.720 --> 01:07:47.880
+spot next year. You'd be like,
+
+01:07:49.200 --> 01:07:49.400
+you know, hey, Colin, what do you feel about
+
+01:07:49.400 --> 01:07:49.900
+hosting?
+
+01:07:53.300 --> 01:07:53.800
+[Speaker 3]: You know, I'm happy to do it.
+
+01:07:56.960 --> 01:07:57.260
+And I feel, I mean, just to jump in there and
+
+01:07:59.540 --> 01:08:00.040
+say, yes, exactly. No,
+
+01:08:01.400 --> 01:08:01.560
+there's no concern on the part of the
+
+01:08:03.220 --> 01:08:03.720
+organizer committee that we could expand
+
+01:08:06.000 --> 01:08:06.180
+this. If you said we needed to expand to 4
+
+01:08:08.400 --> 01:08:08.900
+tracks, I think we would gulp and consider
+
+01:08:10.080 --> 01:08:10.360
+it, you know, from there,
+
+01:08:11.040 --> 01:08:11.540
+it gets a little crazy,
+
+01:08:13.980 --> 01:08:14.260
+but strictly because there aren't that many
+
+01:08:16.399 --> 01:08:16.899
+people that we know want to commit.
+
+01:08:18.120 --> 01:08:18.399
+What did we see there?
+
+01:08:20.600 --> 01:08:20.939
+80 hours of potential work that,
+
+01:08:23.000 --> 01:08:23.200
+you know, that could go into organizing next
+
+01:08:25.439 --> 01:08:25.580
+year's conference if you find that it's a
+
+01:08:26.979 --> 01:08:27.399
+rabbit hole for you and being a streamer
+
+01:08:28.979 --> 01:08:29.140
+means you want to read every email and
+
+01:08:31.500 --> 01:08:31.819
+respond to every, as Sasha has done this last
+
+01:08:34.439 --> 01:08:34.819
+year, right? So when I look at her numbers
+
+01:08:35.359 --> 01:08:35.859
+for total participation,
+
+01:08:38.000 --> 01:08:38.500
+that's really a high watermark.
+
+01:08:43.439 --> 01:08:43.939
+Sasha really took care of this convention,
+
+01:08:46.680 --> 01:08:47.180
+you know, like a producer might.
+
+01:08:52.240 --> 01:08:52.660
+And the fact that what used to take 200 hours
+
+01:08:56.000 --> 01:08:56.260
+before, I mean, I can't harp enough on the
+
+01:08:57.720 --> 01:08:57.979
+story that that's telling you,
+
+01:09:00.399 --> 01:09:00.800
+right? And as I think about it with a project
+
+01:09:01.800 --> 01:09:02.080
+manager hat on, right?
+
+01:09:02.960 --> 01:09:03.160
+I'm saying, okay, well,
+
+01:09:07.080 --> 01:09:07.580
+that's, you know, that work can potentially
+
+01:09:09.800 --> 01:09:09.960
+be amplified to many thousands of hours of
+
+01:09:11.800 --> 01:09:11.920
+work, considering the automation and the
+
+01:09:13.279 --> 01:09:13.439
+potential for bringing people in.
+
+01:09:14.540 --> 01:09:14.800
+So if you thought about it as a money-making
+
+01:09:16.319 --> 01:09:16.520
+thing, If we were trying to make money by
+
+01:09:16.960 --> 01:09:17.460
+having these conventions,
+
+01:09:19.040 --> 01:09:19.540
+you would think we have a very profitable
+
+01:09:23.760 --> 01:09:24.000
+business here because we can amplify the
+
+01:09:25.640 --> 01:09:25.939
+talent that walks in the door really
+
+01:09:28.140 --> 01:09:28.640
+effectively, if that makes sense,
+
+01:09:29.800 --> 01:09:30.300
+through the tools and the training.
+
+01:09:33.800 --> 01:09:33.960
+[Speaker 0]: So we should clarify that if anyone wants to
+
+01:09:35.920 --> 01:09:36.180
+volunteer as a host or just check in,
+
+01:09:38.300 --> 01:09:38.380
+let's just talk host. It's really just a
+
+01:09:40.080 --> 01:09:40.580
+matter of showing up, making sure your BVB
+
+01:09:42.160 --> 01:09:42.439
+works so you can talk.
+
+01:09:43.260 --> 01:09:43.620
+If you want to share your webcam,
+
+01:09:44.899 --> 01:09:45.040
+you can. You can skip it if you don't want
+
+01:09:46.359 --> 01:09:46.859
+to. You can share the screen with the pad.
+
+01:09:48.640 --> 01:09:48.800
+And then you just sit there and you chat with
+
+01:09:51.260 --> 01:09:51.399
+a speaker and you read the questions off the
+
+01:09:53.240 --> 01:09:53.399
+pad in case they don't read the questions off
+
+01:09:56.740 --> 01:09:57.240
+themselves. So it can be a very low effort,
+
+01:09:59.440 --> 01:09:59.940
+low stress way to get into it and just there
+
+01:10:02.840 --> 01:10:03.000
+kind of helping the speaker have somebody to
+
+01:10:05.540 --> 01:10:05.820
+talk to. It doesn't have to take 80 hours.
+
+01:10:08.220 --> 01:10:08.720
+It can take 2 hours and that's cool.
+
+01:10:10.680 --> 01:10:10.840
+[Speaker 3]: And the same, and that's just like the
+
+01:10:11.820 --> 01:10:12.040
+transcription task. Yeah,
+
+01:10:13.700 --> 01:10:13.980
+sorry, I probably missed the lead there,
+
+01:10:16.080 --> 01:10:16.360
+right? Every individual part of this is
+
+01:10:19.160 --> 01:10:19.660
+really easy. So it's an open-ended commitment
+
+01:10:22.360 --> 01:10:22.860
+to come and kind of meet a part of the
+
+01:10:24.840 --> 01:10:25.340
+committee, a part of the community,
+
+01:10:27.040 --> 01:10:27.540
+right? To come in and say,
+
+01:10:29.440 --> 01:10:29.940
+maybe you're really excited about org,
+
+01:10:33.420 --> 01:10:33.600
+you could review talks and just review the
+
+01:10:35.420 --> 01:10:35.660
+org ones. There's not an obligation that says
+
+01:10:37.440 --> 01:10:37.800
+you're going to look at every talk that's
+
+01:10:40.520 --> 01:10:40.640
+submitted, right? Share your thoughts on the
+
+01:10:42.500 --> 01:10:42.660
+talks that you have a chance to review the
+
+01:10:44.440 --> 01:10:44.900
+proposals. That's the submissions review
+
+01:10:48.040 --> 01:10:48.540
+part, right? So there's a way to help with
+
+01:10:51.820 --> 01:10:52.120
+almost any appetite for I'd like a little
+
+01:10:54.520 --> 01:10:54.780
+extra work in the Emacs department here like
+
+01:10:56.480 --> 01:10:56.640
+if you want to feel like you're part of the
+
+01:10:59.600 --> 01:10:59.800
+team this this team is really easy to get
+
+01:11:02.440 --> 01:11:02.710
+[Speaker 7]: think that's
+
+01:11:03.680 --> 01:11:03.840
+[Speaker 3]: involved with. I I mean,
+
+01:11:04.280 --> 01:11:04.440
+please. Go ahead,
+
+01:11:06.820 --> 01:11:07.320
+[Speaker 4]: No, no, please. I've talked enough.
+
+01:11:08.940 --> 01:11:09.100
+[Speaker 1]: sort of the... Leo. Well,
+
+01:11:10.380 --> 01:11:10.660
+I don't get tired of hearing you talk,
+
+01:11:13.000 --> 01:11:13.500
+but yeah, I was going to say,
+
+01:11:16.920 --> 01:11:17.320
+Yeah, I feel like that's the general message
+
+01:11:19.600 --> 01:11:19.920
+here is that we're all just a bunch of people
+
+01:11:21.360 --> 01:11:21.860
+who are interested in this.
+
+01:11:24.060 --> 01:11:24.560
+And of course, being humans,
+
+01:11:26.120 --> 01:11:26.280
+each of us have different kinds of lives and
+
+01:11:27.560 --> 01:11:27.720
+different kinds of availabilities and
+
+01:11:28.260 --> 01:11:28.760
+different kinds of interests.
+
+01:11:29.860 --> 01:11:30.360
+And there is something for everybody,
+
+01:11:34.300 --> 01:11:34.540
+both in terms of the kinds of tasks that you
+
+01:11:37.480 --> 01:11:37.760
+need doing, but also in terms of the amount
+
+01:11:39.980 --> 01:11:40.480
+of time that you want or are able to put in.
+
+01:11:43.780 --> 01:11:44.080
+So yes, if you do think this is something
+
+01:11:46.240 --> 01:11:46.700
+that you might be interested in helping with
+
+01:11:47.980 --> 01:11:48.400
+for future additions and such,
+
+01:11:51.140 --> 01:11:51.340
+or even some of the post-conference work that
+
+01:11:52.300 --> 01:11:52.800
+needs doing after this year.
+
+01:11:55.800 --> 01:11:55.960
+Please reach out there's something for
+
+01:11:57.440 --> 01:11:57.940
+everybody and I would love to have
+
+01:12:03.020 --> 01:12:03.360
+[Speaker 6]: you. I can confirm there was an easy access
+
+01:12:06.260 --> 01:12:06.500
+so I came here last year just doing some
+
+01:12:08.600 --> 01:12:09.100
+checking in and the process of getting,
+
+01:12:10.840 --> 01:12:11.120
+it's called a trained in was really,
+
+01:12:12.520 --> 01:12:12.620
+really short. There was a lot of
+
+01:12:13.700 --> 01:12:14.200
+documentation how to do something.
+
+01:12:17.720 --> 01:12:17.920
+I mean, there's a pad that gets sent and what
+
+01:12:20.540 --> 01:12:20.660
+to do, when to do, and what to ask is like
+
+01:12:22.160 --> 01:12:22.660
+really incredible. So thank you for that.
+
+01:12:26.320 --> 01:12:26.820
+Just come here, write an email,
+
+01:12:28.860 --> 01:12:29.200
+join us. It's really, really cool.
+
+01:12:30.920 --> 01:12:31.420
+And it's a great experience to be honest.
+
+01:12:35.680 --> 01:12:35.900
+[Speaker 4]: Thank you. And while Sasha is speaking about
+
+01:12:36.820 --> 01:12:37.280
+the update of the wiki,
+
+01:12:38.320 --> 01:12:38.820
+oh Coleman did you want to say something?
+
+01:12:41.140 --> 01:12:41.600
+[Speaker 3]: No I was just I was just gonna embarrass
+
+01:12:44.240 --> 01:12:44.740
+Floey Coder further but you go ahead.
+
+01:12:51.000 --> 01:12:51.200
+I was just gonna say I think you're pretty
+
+01:12:52.420 --> 01:12:52.900
+quick, you're pretty quick,
+
+01:12:55.320 --> 01:12:55.820
+you took to it really quickly or you show
+
+01:12:57.240 --> 01:12:57.740
+just kind of a reflexive calm.
+
+01:12:59.340 --> 01:12:59.720
+Like you know how to not talk over people.
+
+01:13:01.200 --> 01:13:01.700
+You're already better at it than I am.
+
+01:13:06.500 --> 01:13:07.000
+Now, you know, I think,
+
+01:13:09.000 --> 01:13:09.280
+yeah, I hope you're enjoying the new stuff
+
+01:13:10.600 --> 01:13:10.720
+that you're starting to take on because you
+
+01:13:12.040 --> 01:13:12.540
+seem to be doing great with it.
+
+01:13:14.220 --> 01:13:14.500
+And yeah, I hope you're not sitting there
+
+01:13:15.720 --> 01:13:16.080
+thinking that you're taking,
+
+01:13:17.960 --> 01:13:18.340
+you know, that you're coming on,
+
+01:13:19.700 --> 01:13:19.920
+that you're not taking on enough
+
+01:13:21.420 --> 01:13:21.680
+responsibility or anything like that,
+
+01:13:23.100 --> 01:13:23.600
+or I don't know, maybe.
+
+01:13:26.040 --> 01:13:26.240
+I picked up like a little undercurrent of
+
+01:13:28.100 --> 01:13:28.380
+like, I don't do that much,
+
+01:13:31.440 --> 01:13:31.940
+and I hope you don't feel that way because I
+
+01:13:33.719 --> 01:13:34.219
+just enjoyed really having your help the last
+
+01:13:38.680 --> 01:13:39.180
+couple of years. Thank you very much.
+
+01:13:47.640 --> 01:13:47.720
+[Speaker 4]: Yeah, that's how they get you,
+
+01:13:48.560 --> 01:13:48.680
+you know, they just tell you,
+
+01:13:49.340 --> 01:13:49.840
+oh, could you do check-ins?
+
+01:13:51.820 --> 01:13:52.180
+Like I showed up for 4 years ago saying,
+
+01:13:54.660 --> 01:13:55.080
+oh, I'd like to help and look at me now.
+
+01:13:56.780 --> 01:13:57.040
+I think I did I host on the first year?
+
+01:13:57.800 --> 01:13:58.300
+I'm pretty sure I did.
+
+01:14:00.020 --> 01:14:00.420
+Like it took 2 months basically of onboarding
+
+01:14:02.960 --> 01:14:03.160
+to convince me to do some of the hosting and
+
+01:14:06.820 --> 01:14:07.000
+back then oh it was so tough for us to do the
+
+01:14:08.440 --> 01:14:08.680
+hosting because we didn't have all the fancy
+
+01:14:10.320 --> 01:14:10.680
+setup we have this year and we were
+
+01:14:13.680 --> 01:14:14.180
+struggling with OBS with bid rates with
+
+01:14:18.160 --> 01:14:18.340
+sharing scenes I'm glad we are where we are
+
+01:14:20.460 --> 01:14:20.760
+today, where I don't have to worry as much
+
+01:14:21.880 --> 01:14:22.120
+about this. But it's also nice,
+
+01:14:24.440 --> 01:14:24.580
+it's also 1 thing, we do have a culture of
+
+01:14:25.760 --> 01:14:26.260
+documentation as Sasha exemplified,
+
+01:14:28.140 --> 01:14:28.640
+and like Flo mentioned,
+
+01:14:29.540 --> 01:14:29.820
+documentation on the roles.
+
+01:14:33.060 --> 01:14:33.560
+Yes, We did do this to help people join us.
+
+01:14:39.360 --> 01:14:39.840
+But really, I'm the host of General,
+
+01:14:41.660 --> 01:14:41.840
+but it could be just anyone else because we
+
+01:14:43.780 --> 01:14:44.020
+have so much documentation on how to do
+
+01:14:46.560 --> 01:14:46.780
+things. Obviously, when a co-organizer is
+
+01:14:48.740 --> 01:14:48.900
+doing a role, we tend to have an eye on how
+
+01:14:49.740 --> 01:14:50.160
+the infrastructure is going.
+
+01:14:51.820 --> 01:14:52.320
+But really, if you want to join us,
+
+01:14:54.720 --> 01:14:54.940
+we will make sure that the jobs that you
+
+01:14:57.240 --> 01:14:57.500
+have, first, you like them and it's something
+
+01:14:59.440 --> 01:14:59.640
+that interests you, and we will also make
+
+01:15:04.180 --> 01:15:04.400
+sure that on our end, everything goes well
+
+01:15:06.140 --> 01:15:06.640
+for you. Like we'll be monitoring the streams
+
+01:15:08.540 --> 01:15:09.040
+and every time we have a new person join us,
+
+01:15:13.500 --> 01:15:14.000
+it is as much energy and mental availability
+
+01:15:17.780 --> 01:15:18.220
+to invest into, oh, maybe we could do this.
+
+01:15:19.800 --> 01:15:19.940
+Oh, 0, we have a fire going out because the
+
+01:15:21.320 --> 01:15:21.820
+speaker hasn't checked in yet.
+
+01:15:24.060 --> 01:15:24.560
+So it's all about sharing expertise,
+
+01:15:27.180 --> 01:15:27.260
+it's all about making people level up in
+
+01:15:28.520 --> 01:15:29.020
+terms of skills that are really useful.
+
+01:15:34.120 --> 01:15:34.280
+I will attribute a lot of my success in
+
+01:15:35.920 --> 01:15:36.120
+public speaking to the work I do with
+
+01:15:38.620 --> 01:15:39.120
+EmacsConf, and I'm sure plenty of people
+
+01:15:43.420 --> 01:15:43.620
+would gain from joining us and learning these
+
+01:15:47.440 --> 01:15:47.940
+skills. All right, It's about 30 minutes past
+
+01:15:49.740 --> 01:15:49.920
+the official time. Do we want to go a little
+
+01:15:51.180 --> 01:15:51.680
+longer? Are we still available to go?
+
+01:15:55.180 --> 01:15:55.680
+All right, well, let's keep going.
+
+01:16:00.443 --> 01:16:00.486
+I don't see any more people joining us on the
+
+01:16:00.660 --> 01:16:00.703
+[Speaker 1]: We have Bob,
+
+01:16:01.240 --> 01:16:01.720
+[Speaker 4]: Blue Button. who was 1 of the speakers today
+
+01:16:03.940 --> 01:16:04.200
+in the room. Bob, do you want to maybe unmute
+
+01:16:05.400 --> 01:16:05.900
+yourself and ask us some questions?
+
+01:16:08.420 --> 01:16:08.720
+Or just thank us. I mean,
+
+01:16:09.480 --> 01:16:09.840
+I'm just begging for something.
+
+01:16:10.920 --> 01:16:11.420
+But I know you've been very helpful.
+
+01:16:15.340 --> 01:16:15.720
+[Speaker 5]: Yes. How are you? No, I've really had fun.
+
+01:16:18.340 --> 01:16:18.600
+No, I'm exhausted. I'm exhausted for you,
+
+01:16:22.800 --> 01:16:23.300
+I think. So I learned something.
+
+01:16:25.040 --> 01:16:25.460
+Everybody wants to record their videos,
+
+01:16:26.460 --> 01:16:26.940
+which of course, is great,
+
+01:16:28.380 --> 01:16:28.480
+and then you have the subtitles and
+
+01:16:31.560 --> 01:16:32.040
+everything. But I saved a lot of time by
+
+01:16:35.600 --> 01:16:35.740
+doing it live this year and not going in and
+
+01:16:38.040 --> 01:16:38.200
+tweaking and doing all the editing and
+
+01:16:39.440 --> 01:16:39.860
+spending all the time that we do.
+
+01:16:42.480 --> 01:16:42.720
+And it was kind of fun to do it that way too.
+
+01:16:44.900 --> 01:16:45.400
+So just a little note there.
+
+01:16:48.340 --> 01:16:48.640
+But I look forward to seeing 1 of my talks
+
+01:16:53.760 --> 01:16:53.940
+subtitled someday. So no,
+
+01:16:55.240 --> 01:16:55.740
+I love what you do. It's fun.
+
+01:16:57.660 --> 01:16:57.900
+I've only seen part of Sasha's talk,
+
+01:17:00.660 --> 01:17:01.000
+so I'll go and review that about how you're
+
+01:17:03.840 --> 01:17:04.340
+automating all this. You know,
+
+01:17:06.560 --> 01:17:06.680
+it's a little sad for me personally that of
+
+01:17:09.080 --> 01:17:09.580
+course, Org gets all the attention,
+
+01:17:14.060 --> 01:17:14.340
+but you know, we're exposing hyperbole more
+
+01:17:16.820 --> 01:17:17.240
+now and There's definitely a growing interest
+
+01:17:18.800 --> 01:17:19.020
+on Reddit and you know,
+
+01:17:20.140 --> 01:17:20.640
+I think it's kind of like EmacsConf.
+
+01:17:23.680 --> 01:17:23.900
+Give it a few years. We went away for a long
+
+01:17:24.840 --> 01:17:25.340
+time and then we came back.
+
+01:17:30.420 --> 01:17:30.880
+We'll start to see it permeate the Emacs
+
+01:17:33.160 --> 01:17:33.660
+first. But I was thinking that,
+
+01:17:36.720 --> 01:17:36.960
+you know, I think people who like Emacs and
+
+01:17:38.340 --> 01:17:38.840
+stuff, they read things online,
+
+01:17:40.920 --> 01:17:41.420
+they come to this conference,
+
+01:17:43.620 --> 01:17:43.940
+but we're always hearing about,
+
+01:17:44.620 --> 01:17:45.120
+well, the next generation.
+
+01:17:47.260 --> 01:17:47.500
+We have to deal with that.
+
+01:17:50.000 --> 01:17:50.160
+And I think a lot of people get exposed to
+
+01:17:52.900 --> 01:17:53.120
+Emacs in college. Now a professor turns them
+
+01:17:55.080 --> 01:17:55.460
+on to it and makes them use it,
+
+01:17:57.100 --> 01:17:57.600
+and then they go out into the real world,
+
+01:17:59.720 --> 01:18:00.220
+and there's no encouragement anymore,
+
+01:18:01.460 --> 01:18:01.960
+and they just drop it.
+
+01:18:05.600 --> 01:18:05.980
+And with all of what you're putting together
+
+01:18:09.280 --> 01:18:09.720
+here, it seems like if there was some reach
+
+01:18:14.120 --> 01:18:14.620
+out to universities and college students,
+
+01:18:18.600 --> 01:18:19.100
+You know, we might get a whole new big crowd
+
+01:18:22.360 --> 01:18:22.580
+of people coming in. You know,
+
+01:18:25.200 --> 01:18:25.320
+just as I think OREG has really attracted a
+
+01:18:26.840 --> 01:18:27.340
+lot of people in the sciences,
+
+01:18:30.060 --> 01:18:30.440
+since that's what it was originally developed
+
+01:18:32.500 --> 01:18:32.860
+for. So just a thought,
+
+01:18:35.740 --> 01:18:35.900
+you know, maybe if you get any volunteers who
+
+01:18:38.440 --> 01:18:38.940
+can help in the reach out or just,
+
+01:18:40.320 --> 01:18:40.560
+you know, sending things around to
+
+01:18:43.780 --> 01:18:44.020
+universities that might really extend who
+
+01:18:45.060 --> 01:18:45.560
+gets exposed to this stuff.
+
+01:18:49.240 --> 01:18:49.480
+[Speaker 1]: Yeah, I think that's a great and very
+
+01:18:51.960 --> 01:18:52.020
+interesting idea. And it sort of touches on a
+
+01:18:52.600 --> 01:18:53.000
+couple of different things.
+
+01:18:53.640 --> 01:18:54.140
+Sort of like you mentioned,
+
+01:18:56.180 --> 01:18:56.400
+well, with org, it sort of really drew into
+
+01:19:00.060 --> 01:19:00.560
+sciences, folks. It would be interesting to
+
+01:19:03.280 --> 01:19:03.780
+see other parts of Emacs doing that for other
+
+01:19:05.740 --> 01:19:06.240
+kinds of communities, but also specifically,
+
+01:19:08.920 --> 01:19:09.420
+I guess, for colleges and universities.
+
+01:19:14.220 --> 01:19:14.680
+Yeah, it would be cool if we had local groups
+
+01:19:17.140 --> 01:19:17.300
+or local meetups, because so far right now,
+
+01:19:20.140 --> 01:19:20.420
+I think the most common ones are like by city
+
+01:19:22.280 --> 01:19:22.440
+like for example a Toronto Emacs meetup or
+
+01:19:25.320 --> 01:19:25.760
+something like that yeah if you could maybe
+
+01:19:28.820 --> 01:19:29.320
+encourage or help foster a university level
+
+01:19:32.200 --> 01:19:32.520
+type of thing you know University of blah
+
+01:19:35.360 --> 01:19:35.860
+blah Emacs group or something like that and
+
+01:19:39.860 --> 01:19:40.080
+you know seeing what their needs would be or
+
+01:19:42.860 --> 01:19:43.360
+trying to think also what features of Emacs
+
+01:19:46.260 --> 01:19:46.560
+would be very useful in an academic slash
+
+01:19:48.680 --> 01:19:48.920
+educational setting. Yeah,
+
+01:19:50.460 --> 01:19:50.840
+lots of food for thought there.
+
+01:19:52.120 --> 01:19:52.620
+So thank you for mentioning this.
+
+01:20:02.420 --> 01:20:02.920
+[Speaker 5]: Sure. And I guess, yeah,
+
+01:20:04.400 --> 01:20:04.900
+OBS is coming up here.
+
+01:20:06.820 --> 01:20:07.040
+I worked with that a bit,
+
+01:20:08.920 --> 01:20:09.240
+yes, last year. You know,
+
+01:20:12.040 --> 01:20:12.540
+another powerful piece of software with a
+
+01:20:15.240 --> 01:20:15.740
+sort of, I think, a weak user interface,
+
+01:20:20.080 --> 01:20:20.540
+you know, for the newbies coming along on it.
+
+01:20:23.200 --> 01:20:23.700
+And maybe, you know, if there's,
+
+01:20:25.920 --> 01:20:26.420
+if that's kind of what people use,
+
+01:20:29.540 --> 01:20:29.700
+figuring out or putting some information in
+
+01:20:32.740 --> 01:20:33.240
+the wiki about how to do that,
+
+01:20:34.900 --> 01:20:35.400
+you know, work with it or...
+
+01:20:36.300 --> 01:20:36.800
+[Speaker 4]: Oh, good idea.
+
+01:20:43.140 --> 01:20:43.340
+[Speaker 3]: I can comment. It is definitely the
+
+01:20:46.420 --> 01:20:46.920
+preeminent streamer software out there,
+
+01:20:49.120 --> 01:20:49.620
+well beyond the free software community.
+
+01:20:54.120 --> 01:20:54.500
+It's used by most streamers on Twitch and
+
+01:20:59.680 --> 01:20:59.960
+other like commercial for-profit things but
+
+01:21:01.780 --> 01:21:02.220
+of course those companies are making money
+
+01:21:04.480 --> 01:21:04.700
+off people trying to give money to the
+
+01:21:07.200 --> 01:21:07.440
+streamers. Those streamers aren't getting any
+
+01:21:10.160 --> 01:21:10.660
+software help. So actually most of them are
+
+01:21:13.900 --> 01:21:14.400
+dependent for their income on free software
+
+01:21:18.680 --> 01:21:18.900
+like OBS and OBS in specific or by some kind
+
+01:21:23.100 --> 01:21:23.600
+of forked brand name is the primary tool.
+
+01:21:28.660 --> 01:21:28.820
+[Speaker 4]: If I'm not mistaken I believe Stefan has
+
+01:21:29.860 --> 01:21:30.360
+joined us right now in the room.
+
+01:21:33.240 --> 01:21:33.420
+I'm putting you on the spot,
+
+01:21:34.480 --> 01:21:34.760
+if you want to stay muted you can.
+
+01:21:35.640 --> 01:21:36.140
+Oh, you have unmuted yourself.
+
+01:21:38.400 --> 01:21:38.900
+[Speaker 7]: I managed to click the unmute button.
+
+01:21:41.180 --> 01:21:41.680
+Yes, I'm here. How are you guys doing?
+
+01:21:43.840 --> 01:21:44.200
+[Speaker 4]: Doing good, surviving here.
+
+01:21:44.200 --> 01:21:44.700
+[Speaker 1]: Congratulations.
+
+01:21:45.480 --> 01:21:45.980
+[Speaker 4]: Late in your time.
+
+01:21:50.040 --> 01:21:50.220
+[Speaker 7]: Really amazing work organizing the
+
+01:21:51.960 --> 01:21:52.460
+conference. I really have to congratulate
+
+01:21:56.120 --> 01:21:56.480
+everyone. So I just hopped on here to sort of
+
+01:21:58.140 --> 01:21:58.640
+say that I'm extremely impressed.
+
+01:22:04.240 --> 01:22:04.540
+And I think this is an example to follow for
+
+01:22:07.040 --> 01:22:07.440
+other conferences and for Emacs in general.
+
+01:22:09.400 --> 01:22:09.900
+I think we need more of this community-type
+
+01:22:12.940 --> 01:22:13.380
+organizing and just getting people interested
+
+01:22:15.960 --> 01:22:16.240
+and involved on all kinds of levels can only
+
+01:22:20.200 --> 01:22:20.340
+help Emacs. Because we are in this for the
+
+01:22:22.540 --> 01:22:23.040
+long haul. That's it.
+
+01:22:25.280 --> 01:22:25.780
+[Speaker 3]: Oh, what a great point.
+
+01:22:28.500 --> 01:22:28.740
+If I can comment, that's 1 of the things that
+
+01:22:30.720 --> 01:22:31.020
+drew me to trying to contribute to free
+
+01:22:32.580 --> 01:22:32.960
+software when I was a kid,
+
+01:22:35.580 --> 01:22:36.080
+like we're talking now 30 plus years ago,
+
+01:22:38.360 --> 01:22:38.860
+the idea like, and I recognized it from
+
+01:22:42.180 --> 01:22:42.620
+Stallman's initial manifestos on the topic,
+
+01:22:45.060 --> 01:22:45.360
+right? He was clearly in this for the long
+
+01:22:47.040 --> 01:22:47.540
+haul. Like I am building the library of
+
+01:22:50.500 --> 01:22:50.740
+Alexandria here and like linking the work
+
+01:22:52.420 --> 01:22:52.580
+that we're trying to do to community that I
+
+01:22:54.640 --> 01:22:54.900
+don't know how you could touch my heart you
+
+01:22:57.620 --> 01:22:57.840
+know more surely because that's that's
+
+01:22:59.440 --> 01:22:59.940
+exactly what we want to do not necessarily
+
+01:23:03.800 --> 01:23:04.300
+any given talk or comment but the idea that
+
+01:23:07.960 --> 01:23:08.460
+we have to get together and share our ideas
+
+01:23:10.900 --> 01:23:11.400
+and the place that we do that has to be just
+
+01:23:14.380 --> 01:23:14.880
+has to be a buffet and not a crucible.
+
+01:23:17.620 --> 01:23:17.800
+[Speaker 7]: And look, we're standing on the shoulders of
+
+01:23:19.400 --> 01:23:19.840
+giants, really, when we're looking at Emacs
+
+01:23:21.100 --> 01:23:21.600
+and sort of what we have achieved.
+
+01:23:24.680 --> 01:23:24.840
+And the galaxy of talent that exists in the
+
+01:23:27.040 --> 01:23:27.540
+Emacs community is also like truly
+
+01:23:30.800 --> 01:23:31.300
+impressive, I think. So There's a lot of work
+
+01:23:34.280 --> 01:23:34.780
+to be done, but we've also achieved some
+
+01:23:37.120 --> 01:23:37.480
+pretty impressive things so far.
+
+01:23:38.620 --> 01:23:39.120
+So let's just keep at it.
+
+01:23:43.200 --> 01:23:43.700
+I'm sure we'll have a fantastic future for
+
+01:23:44.180 --> 01:23:44.680
+Emacs.
+
+01:23:52.540 --> 01:23:53.040
+[Speaker 5]: You know, I'm kind of interested in what
+
+01:23:56.540 --> 01:23:57.040
+Stefan's here. You know,
+
+01:24:00.400 --> 01:24:00.900
+just the common tropes that go around.
+
+01:24:05.320 --> 01:24:05.740
+I just hear it so much on the net,
+
+01:24:07.540 --> 01:24:08.040
+you know, is Emacs still alive?
+
+01:24:09.960 --> 01:24:10.460
+Do people still use it?
+
+01:24:11.120 --> 01:24:11.480
+You know, and of course,
+
+01:24:13.620 --> 01:24:14.100
+it's like you have an older piece of software
+
+01:24:15.200 --> 01:24:15.700
+that started so long ago,
+
+01:24:17.540 --> 01:24:17.720
+people don't realize that it's still up,
+
+01:24:20.320 --> 01:24:20.820
+but it's also because of the trends,
+
+01:24:22.900 --> 01:24:23.400
+right? You know, we've got the electron-based
+
+01:24:28.580 --> 01:24:28.740
+development and Visual Studio is slick out of
+
+01:24:32.720 --> 01:24:33.220
+the box. So what's in the core Emacs
+
+01:24:36.260 --> 01:24:36.540
+developers realm, obviously you guys are
+
+01:24:38.160 --> 01:24:38.660
+taking this longer term perspective,
+
+01:24:44.060 --> 01:24:44.380
+which makes sense, but what do you think
+
+01:24:48.480 --> 01:24:48.980
+about this issue, the shorter term and how to
+
+01:24:52.200 --> 01:24:52.540
+alleviate those concerns that some people
+
+01:24:52.540 --> 01:24:53.040
+represent?
+
+01:24:54.820 --> 01:24:55.040
+[Speaker 7]: Of course, yes. I mean,
+
+01:24:55.840 --> 01:24:56.160
+this is something that,
+
+01:24:59.340 --> 01:24:59.600
+I mean, clearly people are discussing and as
+
+01:25:01.480 --> 01:25:01.800
+you say, It's almost like a trope at this
+
+01:25:04.200 --> 01:25:04.700
+point. And it's been discussed on EmacsDevil,
+
+01:25:07.800 --> 01:25:07.960
+what can we do to promote Emacs more and to
+
+01:25:10.240 --> 01:25:10.740
+what extent should we care about that?
+
+01:25:15.100 --> 01:25:15.600
+And I mean, my reply to that is usually just,
+
+01:25:19.120 --> 01:25:19.620
+the rumors of my death are very accurate.
+
+01:25:24.720 --> 01:25:25.220
+And I think this is true also for Emacs.
+
+01:25:29.240 --> 01:25:29.700
+So we are very much here.
+
+01:25:31.960 --> 01:25:32.460
+I think what has happened also is reflective
+
+01:25:34.960 --> 01:25:35.220
+of basically that there are just more
+
+01:25:36.580 --> 01:25:37.080
+programmers on the planet,
+
+01:25:38.040 --> 01:25:38.240
+[Speaker 3]: And we
+
+01:25:39.920 --> 01:25:40.420
+[Speaker 7]: right? haven't been able to sort of catch
+
+01:25:41.960 --> 01:25:42.460
+that segment as it's been growing,
+
+01:25:44.680 --> 01:25:45.060
+but also we have more Emacs users I think
+
+01:25:47.500 --> 01:25:47.860
+today than probably ever before.
+
+01:25:48.420 --> 01:25:48.920
+We have more packages,
+
+01:25:50.540 --> 01:25:51.040
+we have more stuff going on.
+
+01:25:55.580 --> 01:25:55.980
+So I think it's a challenge as well,
+
+01:25:58.200 --> 01:25:58.440
+like to what extent do we wanna be like a
+
+01:26:00.260 --> 01:26:00.420
+niche and to what extent do we wanna be the
+
+01:26:03.280 --> 01:26:03.780
+text editor for programmers.
+
+01:26:06.420 --> 01:26:06.720
+And I think there's a tension there because
+
+01:26:09.780 --> 01:26:09.960
+we want to stay true to what Emacs is and to
+
+01:26:12.440 --> 01:26:12.940
+its sort of core values of what makes Emacs
+
+01:26:16.720 --> 01:26:16.880
+great, but can we still make some changes to
+
+01:26:18.340 --> 01:26:18.760
+sort of stay relevant.
+
+01:26:21.060 --> 01:26:21.340
+And I think that's a huge win.
+
+01:26:24.800 --> 01:26:24.960
+And clearly these discussions are going on on
+
+01:26:26.980 --> 01:26:27.280
+the Emacs level and in the minds of core
+
+01:26:29.340 --> 01:26:29.640
+developers, I think, every day.
+
+01:26:32.040 --> 01:26:32.540
+Even though, I mean, most of our work is just
+
+01:26:35.320 --> 01:26:35.820
+trying to keep adding new features,
+
+01:26:38.220 --> 01:26:38.720
+make sure that we have that sort of core
+
+01:26:40.060 --> 01:26:40.400
+infrastructure in place,
+
+01:26:42.280 --> 01:26:42.500
+which is part of the reason why I gave the
+
+01:26:44.260 --> 01:26:44.680
+talk I did yesterday, to invite more people
+
+01:26:46.920 --> 01:26:46.960
+to come on board. Because I see a lot of
+
+01:26:48.200 --> 01:26:48.700
+people have opinions about Emacs,
+
+01:26:50.700 --> 01:26:51.200
+which is amazing, and we need more of that.
+
+01:26:54.160 --> 01:26:54.660
+But I think, let's say,
+
+01:26:56.280 --> 01:26:56.780
+patches speak louder than words.
+
+01:27:01.300 --> 01:27:01.780
+Software. And it's definitely true in Emacs
+
+01:27:01.780 --> 01:27:02.280
+development.
+
+01:27:04.680 --> 01:27:04.960
+[Speaker 3]: I want to just piggyback on,
+
+01:27:06.820 --> 01:27:06.940
+like attack the premise of the question a
+
+01:27:09.800 --> 01:27:09.960
+little bit, right? Remember that we are sort
+
+01:27:11.880 --> 01:27:12.380
+of in a trench warfare with commercial
+
+01:27:15.160 --> 01:27:15.660
+interests that are dependent on dominating
+
+01:27:20.660 --> 01:27:21.160
+software ecosystems in order to exploit users
+
+01:27:24.600 --> 01:27:24.760
+for money. Like that is a necessary thing to
+
+01:27:26.020 --> 01:27:26.420
+a lot of people's business model.
+
+01:27:30.060 --> 01:27:30.560
+And so we live in a world where software is
+
+01:27:32.760 --> 01:27:33.260
+more than tools. It is clothing.
+
+01:27:38.480 --> 01:27:38.840
+And so when I put on my Mac and I put on my
+
+01:27:42.860 --> 01:27:43.180
+UI skin, I'm not just choosing whether I like
+
+01:27:46.640 --> 01:27:46.960
+sliders or radio buttons or check boxes or
+
+01:27:49.840 --> 01:27:50.340
+the other UI mechanics that give that
+
+01:27:53.920 --> 01:27:54.160
+heuristic and make it make me think it's easy
+
+01:27:55.440 --> 01:27:55.940
+to use, easy to learn to use,
+
+01:27:59.160 --> 01:27:59.340
+right? I'm also choosing a whole line of
+
+01:28:02.080 --> 01:28:02.580
+implementation detail that I'm being actively
+
+01:28:06.040 --> 01:28:06.540
+trained not to try to understand by,
+
+01:28:08.720 --> 01:28:09.020
+you know, kind of the dark side of the force
+
+01:28:11.780 --> 01:28:12.100
+over here. So when I think about,
+
+01:28:14.380 --> 01:28:14.880
+you know, make Emacs more like Toaster,
+
+01:28:18.860 --> 01:28:19.060
+[Speaker 1]: you know,
+
+01:28:21.340 --> 01:28:21.560
+[Speaker 3]: I, 1 of my responses is every time that
+
+01:28:22.740 --> 01:28:22.960
+question asks, you know,
+
+01:28:24.160 --> 01:28:24.480
+an angel grows, gets asked,
+
+01:28:25.440 --> 01:28:25.720
+an angel grows its wings.
+
+01:28:27.040 --> 01:28:27.540
+A developer submits a patch,
+
+01:28:30.040 --> 01:28:30.240
+a bug gets opened that we can,
+
+01:28:31.840 --> 01:28:32.320
+you know, with enough information to actually
+
+01:28:33.240 --> 01:28:33.740
+do something about it,
+
+01:28:34.920 --> 01:28:35.280
+the ecosystem gets better,
+
+01:28:38.100 --> 01:28:38.600
+right? Whether a new user comes or not,
+
+01:28:40.680 --> 01:28:41.040
+like somebody's actually asking a question
+
+01:28:42.780 --> 01:28:42.900
+that's going to lead them someday to pick a
+
+01:28:43.260 --> 01:28:43.760
+better tool.
+
+01:28:47.620 --> 01:28:48.120
+[Speaker 7]: Yeah, it's true. I mean,
+
+01:28:50.000 --> 01:28:50.280
+we have powerful enemies and they are not
+
+01:28:52.540 --> 01:28:52.720
+working for us. And when they are working on
+
+01:28:54.960 --> 01:28:55.160
+improving VS code, you can't be under any
+
+01:28:56.640 --> 01:28:56.720
+illusion that they are doing that in the
+
+01:28:57.340 --> 01:28:57.660
+interest of the users.
+
+01:28:59.760 --> 01:29:00.060
+They're doing that in their interest of the
+
+01:29:02.620 --> 01:29:02.780
+corporate owners. So this is the reality that
+
+01:29:04.640 --> 01:29:04.900
+we have to face and Emacs is just not like
+
+01:29:07.920 --> 01:29:08.040
+that. And this is of course part of the
+
+01:29:09.960 --> 01:29:10.460
+reason why it's so important that we continue
+
+01:29:14.040 --> 01:29:14.260
+this work for the future of being able to do
+
+01:29:17.640 --> 01:29:17.800
+computing in a free way and in a way that is
+
+01:29:20.220 --> 01:29:20.380
+actually, you know, supports the types of
+
+01:29:21.740 --> 01:29:22.240
+workflows that we know and love.
+
+01:29:26.720 --> 01:29:26.920
+[Speaker 4]: Something that I'd like to add to this is
+
+01:29:29.680 --> 01:29:30.060
+that, you know, you've mentioned we need more
+
+01:29:30.640 --> 01:29:31.140
+programmers in the world.
+
+01:29:33.240 --> 01:29:33.340
+And in light of what we're doing with
+
+01:29:35.140 --> 01:29:35.220
+EmacsConf, perhaps we need more people to be
+
+01:29:36.580 --> 01:29:36.960
+at EmacsConf talking, not necessarily
+
+01:29:38.100 --> 01:29:38.600
+programmers, but just people apprehending
+
+01:29:40.520 --> 01:29:40.940
+Emacs and talking about it.
+
+01:29:42.720 --> 01:29:43.180
+It feels like we've got different missions
+
+01:29:44.440 --> 01:29:44.700
+that we're trying to accomplish with this.
+
+01:29:45.820 --> 01:29:46.320
+We are... Okay, you...
+
+01:29:47.780 --> 01:29:48.280
+Go ahead, Colin.
+
+01:29:49.600 --> 01:29:49.940
+[Speaker 3]: I can't leave that alone.
+
+01:29:52.120 --> 01:29:52.420
+I almost came in there on the previous point.
+
+01:29:55.020 --> 01:29:55.240
+Yeah, I actually Completely agree with that
+
+01:29:58.900 --> 01:29:59.140
+Leo. That's something that and I mean to be
+
+01:30:02.780 --> 01:30:03.240
+fair. I owe a good I owe dev al a good email
+
+01:30:05.800 --> 01:30:06.160
+on this topic, but we desperately need more
+
+01:30:07.840 --> 01:30:08.340
+project managers, more solutions architect,
+
+01:30:10.380 --> 01:30:10.880
+more business process analysts,
+
+01:30:12.660 --> 01:30:13.160
+more systems analysts,
+
+01:30:15.100 --> 01:30:15.560
+more, you know, and the best tech,
+
+01:30:17.900 --> 01:30:18.400
+you know, some of the best threads start with
+
+01:30:23.100 --> 01:30:23.420
+quite a bit of an analytical work done on the
+
+01:30:24.940 --> 01:30:25.440
+part of an engineer who's come along.
+
+01:30:29.320 --> 01:30:29.680
+But actually, Larry Wall has this quote,
+
+01:30:31.640 --> 01:30:32.140
+right? Where he says, consider 3 solutions
+
+01:30:34.120 --> 01:30:34.300
+and build 1. And I think we struggle with
+
+01:30:36.760 --> 01:30:37.260
+that as a community because getting a patch
+
+01:30:39.920 --> 01:30:40.120
+is a lot of work and a lot to ask for
+
+01:30:42.900 --> 01:30:43.080
+somebody. So asking 3 people to submit a
+
+01:30:45.200 --> 01:30:45.260
+patch means you're saying no to a lot of
+
+01:30:47.280 --> 01:30:47.560
+blood, sweat and tears on the part of like 2
+
+01:30:48.960 --> 01:30:49.460
+people, maybe 2 teams of people.
+
+01:30:55.520 --> 01:30:56.020
+[Speaker 5]: And 1 thing I think is a big expansion is
+
+01:31:02.020 --> 01:31:02.520
+usability and user experience design.
+
+01:31:05.560 --> 01:31:05.900
+I think, and not in the sense like,
+
+01:31:08.260 --> 01:31:08.760
+you know, CUA mode or,
+
+01:31:12.440 --> 01:31:12.560
+you know, people don't realize that Emacs key
+
+01:31:13.680 --> 01:31:14.180
+bindings are actually ergonomic,
+
+01:31:16.720 --> 01:31:17.220
+but more, you know, like for myself,
+
+01:31:20.240 --> 01:31:20.740
+I did a lot of work in sort of bringing out
+
+01:31:24.480 --> 01:31:24.880
+Emacs features and did a lot of things
+
+01:31:26.240 --> 01:31:26.740
+creating this info doc,
+
+01:31:28.940 --> 01:31:29.100
+you know, which is sort of like Space Max or
+
+01:31:30.300 --> 01:31:30.800
+something in the old days.
+
+01:31:33.900 --> 01:31:34.200
+But the process, yeah,
+
+01:31:38.600 --> 01:31:39.100
+kept a lot of that from ever making it into
+
+01:31:40.460 --> 01:31:40.680
+CoreDMX and, you know,
+
+01:31:44.180 --> 01:31:44.680
+just a lack of time on my part to follow up.
+
+01:31:46.560 --> 01:31:47.060
+But if you had somebody,
+
+01:31:51.220 --> 01:31:51.500
+you know, who sort of coalesced all the
+
+01:31:52.820 --> 01:31:53.260
+technical work on like,
+
+01:31:56.280 --> 01:31:56.480
+here's how we can put it together and make it
+
+01:32:01.320 --> 01:32:01.820
+more accessible, I've seen that go a long way
+
+01:32:02.800 --> 01:32:03.300
+in certain environments.
+
+01:32:06.100 --> 01:32:06.340
+And I imagine, you know,
+
+01:32:08.160 --> 01:32:08.660
+it's just not the experience of,
+
+01:32:11.180 --> 01:32:11.680
+you know, most people on the core team.
+
+01:32:14.620 --> 01:32:15.060
+[Speaker 7]: Yeah, for sure. I mean,
+
+01:32:16.160 --> 01:32:16.560
+We don't have, I mean,
+
+01:32:18.760 --> 01:32:18.900
+we're mostly a bunch, we're a bunch of
+
+01:32:20.080 --> 01:32:20.280
+programmers. That's what we are,
+
+01:32:22.640 --> 01:32:22.800
+right? We don't have graphical signers or any
+
+01:32:24.320 --> 01:32:24.620
+of the stuff that you're talking about.
+
+01:32:28.380 --> 01:32:28.580
+So we don't have really any UX experts on
+
+01:32:30.380 --> 01:32:30.800
+board. So perhaps that would be welcome.
+
+01:32:35.460 --> 01:32:35.960
+But then again, how do you even fit the EMAX
+
+01:32:38.880 --> 01:32:39.280
+paradigm into what is typically taught and
+
+01:32:40.840 --> 01:32:41.120
+discussed in UX? I mean,
+
+01:32:43.220 --> 01:32:43.380
+maybe there is a way. I'm sure there are
+
+01:32:45.640 --> 01:32:45.920
+general principles and a lot that we could
+
+01:32:47.880 --> 01:32:48.380
+learn, But then there is also like this,
+
+01:32:52.240 --> 01:32:52.440
+we have to stay true to what Emacs is to some
+
+01:32:53.940 --> 01:32:54.400
+extent and what does that look like
+
+01:32:56.320 --> 01:32:56.580
+concretely. There are discussions to be had
+
+01:32:58.620 --> 01:32:59.120
+for sure, but we would definitely benefit
+
+01:33:02.900 --> 01:33:03.400
+from that type of specific input.
+
+01:33:04.360 --> 01:33:04.480
+[Speaker 3]: Well, I
+
+01:33:06.940 --> 01:33:07.240
+[Speaker 5]: mean, like a simple example today is I looked
+
+01:33:09.720 --> 01:33:09.900
+at the conference guidelines I always stay in
+
+01:33:13.160 --> 01:33:13.420
+dark mode and it said well use light mode for
+
+01:33:16.220 --> 01:33:16.420
+your presentation so okay I'll switch to
+
+01:33:19.280 --> 01:33:19.480
+light mode let me load a theme so I go into
+
+01:33:21.280 --> 01:33:21.780
+all the default themes and,
+
+01:33:23.900 --> 01:33:24.400
+you know, start going through the light ones
+
+01:33:28.080 --> 01:33:28.580
+and then I check all the faces and,
+
+01:33:31.120 --> 01:33:31.620
+you know, there are at least 3 to 5 faces
+
+01:33:35.160 --> 01:33:35.600
+that have nearly invisible text as a result
+
+01:33:38.480 --> 01:33:38.980
+of the background highlighting on them.
+
+01:33:40.080 --> 01:33:40.460
+And I'm like, you know,
+
+01:33:43.380 --> 01:33:43.680
+so there's low hanging fruit like that where
+
+01:33:46.840 --> 01:33:47.020
+people would deal with the structure of the
+
+01:33:49.400 --> 01:33:49.900
+menus, the actual faces,
+
+01:33:53.120 --> 01:33:53.620
+the themes, that don't have to do anything
+
+01:33:57.840 --> 01:33:58.060
+affecting core Emacs except make the
+
+01:33:59.960 --> 01:34:00.460
+presentation much better.
+
+01:34:03.380 --> 01:34:03.640
+[Speaker 7]: Yeah, definitely. If people want to send such
+
+01:34:06.160 --> 01:34:06.660
+polishing patches for various aspects,
+
+01:34:09.280 --> 01:34:09.520
+I spent some time making a new help screen.
+
+01:34:10.520 --> 01:34:10.960
+I don't know if you noticed,
+
+01:34:12.740 --> 01:34:13.040
+I don't know how many people press Control H,
+
+01:34:14.160 --> 01:34:14.660
+Control H on their keyboards,
+
+01:34:17.540 --> 01:34:17.720
+But it's like with new sections and it's
+
+01:34:18.480 --> 01:34:18.980
+sorted a little bit better.
+
+01:34:20.500 --> 01:34:20.640
+It didn't take much. I mean,
+
+01:34:21.660 --> 01:34:22.060
+it took a time obviously,
+
+01:34:23.940 --> 01:34:24.440
+but it's not like it required some fantastic
+
+01:34:28.140 --> 01:34:28.260
+technical knowledge or deep expertise in
+
+01:34:29.200 --> 01:34:29.700
+Emacs Lisp to do that.
+
+01:34:31.480 --> 01:34:31.980
+It's Basically anyone can do stuff like that.
+
+01:34:34.200 --> 01:34:34.340
+So definitely if you're interested in doing
+
+01:34:37.440 --> 01:34:37.680
+that type of work, start discussing with us.
+
+01:34:41.040 --> 01:34:41.440
+Let's talk about what we can do and get doing
+
+01:34:41.820 --> 01:34:42.320
+it, really.
+
+01:34:44.960 --> 01:34:45.140
+[Speaker 4]: Yeah, this is exactly in line with your
+
+01:34:45.800 --> 01:34:46.240
+presentation from yesterday,
+
+01:34:47.720 --> 01:34:47.920
+Stefan, as well, because you were just
+
+01:34:50.160 --> 01:34:50.320
+inviting people who are not contributing to
+
+01:34:51.380 --> 01:34:51.740
+the core of Emacs to do so.
+
+01:34:53.200 --> 01:34:53.360
+You were talking to package developer on
+
+01:34:55.120 --> 01:34:55.440
+MailPub, but you were also talking just about
+
+01:34:58.200 --> 01:34:58.380
+the average Joe or Jane just doing their own
+
+01:34:59.580 --> 01:35:00.080
+things or encountering a problem.
+
+01:35:01.120 --> 01:35:01.280
+Now, yes, we talked about,
+
+01:35:02.800 --> 01:35:02.960
+oh, you need to build master and all this,
+
+01:35:03.920 --> 01:35:04.420
+but at the end of the day,
+
+01:35:06.680 --> 01:35:06.960
+low-hanging fruits like the ones Bob just
+
+01:35:09.840 --> 01:35:10.120
+described. If everyone does this at the end,
+
+01:35:11.280 --> 01:35:11.780
+you end up with something that is extremely
+
+01:35:13.520 --> 01:35:13.620
+polished. Perhaps you do not need to have a
+
+01:35:14.900 --> 01:35:15.140
+UX specialist to tell you that,
+
+01:35:18.220 --> 01:35:18.340
+oh, those 2 colors are actually very close to
+
+01:35:21.220 --> 01:35:21.600
+1 another. I think it's kind of a discussion
+
+01:35:23.580 --> 01:35:24.020
+about same defaults as well that you had
+
+01:35:25.080 --> 01:35:25.580
+yesterday. Ultimately,
+
+01:35:27.340 --> 01:35:27.600
+we do not need... Yes,
+
+01:35:28.780 --> 01:35:29.040
+we need more programmers in the world.
+
+01:35:30.480 --> 01:35:30.980
+We want more people to use Emacs.
+
+01:35:33.740 --> 01:35:34.240
+But you don't know. Like,
+
+01:35:36.220 --> 01:35:36.500
+is it going to be someone in computer science
+
+01:35:38.420 --> 01:35:38.620
+that's going to be the next giant on whose
+
+01:35:39.580 --> 01:35:39.880
+shoulders we're going to stand?
+
+01:35:41.003 --> 01:35:41.010
+[Speaker 3]: computer science? Is it going to be someone
+
+01:35:41.066 --> 01:35:41.074
+in computer science that's going to be the
+
+01:35:41.082 --> 01:35:41.090
+next giant
+
+01:35:41.137 --> 01:35:41.145
+[Speaker 1]: on whose shoulders we're going to stand?
+
+01:35:41.184 --> 01:35:41.192
+Is it someone who did not
+
+01:35:41.192 --> 01:35:41.200
+[Speaker 4]: Is it someone who did not study study
+
+01:35:42.660 --> 01:35:42.980
+computer science? Is it going to be someone
+
+01:35:44.060 --> 01:35:44.560
+who did something completely different?
+
+01:35:46.960 --> 01:35:47.120
+We do not know the prototypical user of
+
+01:35:49.280 --> 01:35:49.640
+Emacs. We have some idea about the fact that
+
+01:35:51.760 --> 01:35:51.940
+they might be using you know,
+
+01:35:52.580 --> 01:35:53.080
+Emacs for their programming,
+
+01:35:55.560 --> 01:35:55.680
+but more and more, and as is evidenced by the
+
+01:35:56.420 --> 01:35:56.920
+talks we received with EmacsConf,
+
+01:36:01.020 --> 01:36:01.360
+it's just people doing writing or taking
+
+01:36:01.920 --> 01:36:02.420
+notes for their classes.
+
+01:36:06.340 --> 01:36:06.540
+So it's really interesting to see how and to
+
+01:36:09.400 --> 01:36:09.480
+explore for us how we can give back to the
+
+01:36:11.180 --> 01:36:11.600
+core of Emacs in a way that is mutually
+
+01:36:12.360 --> 01:36:12.700
+constructive because again,
+
+01:36:14.440 --> 01:36:14.940
+to go back to the philosophy or the political
+
+01:36:17.400 --> 01:36:17.640
+agenda that we have is for more people to use
+
+01:36:19.700 --> 01:36:20.200
+software that is not the liberties.
+
+01:36:20.500 --> 01:36:21.000
+Exactly.
+
+01:36:24.140 --> 01:36:24.280
+[Speaker 3]: So right. Yeah. I mean,
+
+01:36:25.840 --> 01:36:26.100
+that's a good spot for me to come right back
+
+01:36:27.380 --> 01:36:27.720
+in. And that's exactly where I do.
+
+01:36:30.200 --> 01:36:30.420
+Right. Because that's that's what it's all
+
+01:36:33.040 --> 01:36:33.540
+about. In the In terms of a tool user,
+
+01:36:36.600 --> 01:36:37.100
+you know, the evolution of using tools as,
+
+01:36:38.620 --> 01:36:39.120
+you know, these creatures have fought,
+
+01:36:42.820 --> 01:36:43.220
+Emacs is fire. Emacs is the ability to learn
+
+01:36:45.920 --> 01:36:46.320
+languages, the ability to manipulate other
+
+01:36:48.140 --> 01:36:48.640
+tools. I mean, it's almost like,
+
+01:36:50.680 --> 01:36:51.140
+you know, God Emperor of Dune level,
+
+01:36:53.720 --> 01:36:54.140
+you know, some Frank Herbert type of powers
+
+01:36:56.480 --> 01:36:56.680
+that you have over your computer and you are
+
+01:36:58.460 --> 01:36:58.740
+not required to understand how all those
+
+01:37:02.440 --> 01:37:02.940
+things work. So from a support standpoint
+
+01:37:04.540 --> 01:37:04.840
+that puts us in a challenging position,
+
+01:37:06.300 --> 01:37:06.720
+right? I spend a lot of time on Pound Emacs
+
+01:37:07.760 --> 01:37:08.040
+and the questions that go by there,
+
+01:37:09.840 --> 01:37:09.960
+I feel bad for people that feel like they
+
+01:37:12.600 --> 01:37:12.720
+have to answer every question that goes by in
+
+01:37:14.060 --> 01:37:14.500
+the channel because no 1 could.
+
+01:37:16.640 --> 01:37:17.080
+No 1 can give an intelligent answer to the,
+
+01:37:18.040 --> 01:37:18.540
+you know, everything from,
+
+01:37:21.260 --> 01:37:21.440
+Hey, how do I change my default font on this
+
+01:37:23.520 --> 01:37:24.020
+operating system? You've never heard of to,
+
+01:37:26.140 --> 01:37:26.480
+you know, how do you know this list code?
+
+01:37:28.040 --> 01:37:28.340
+That's 40 lines long doesn't work.
+
+01:37:30.040 --> 01:37:30.260
+And I think it was a recent change that was
+
+01:37:31.720 --> 01:37:32.220
+made to the P case macro.
+
+01:37:39.480 --> 01:37:39.980
+Do you agree? Right? And as deep as that,
+
+01:37:42.740 --> 01:37:43.240
+well is, if you turn it 90 degrees,
+
+01:37:45.040 --> 01:37:45.200
+the Emacs is that kind of tool to the
+
+01:37:46.080 --> 01:37:46.400
+operating system level.
+
+01:37:48.800 --> 01:37:49.280
+It's letting me walk across to other systems,
+
+01:37:51.360 --> 01:37:51.780
+multi-hop, become the super user,
+
+01:37:55.120 --> 01:37:55.620
+right? And, you know, the just the power,
+
+01:37:57.600 --> 01:37:58.020
+the amplification of power there,
+
+01:38:02.320 --> 01:38:02.820
+it's like the lever combined with the magnet,
+
+01:38:08.140 --> 01:38:08.640
+etc, etc. I mean, just,
+
+01:38:14.760 --> 01:38:14.960
+yeah, I don't know. So I guess where we kind
+
+01:38:16.260 --> 01:38:16.640
+of jump off, where that gets stuck,
+
+01:38:18.580 --> 01:38:18.740
+right, is trying to change something like the
+
+01:38:19.760 --> 01:38:20.260
+defaults in the user experience.
+
+01:38:22.740 --> 01:38:23.240
+So I imagine, you know,
+
+01:38:26.580 --> 01:38:26.920
+we don't get 1 great idea about user
+
+01:38:28.020 --> 01:38:28.520
+experience, we'll get 3,
+
+01:38:30.240 --> 01:38:30.480
+right? And then Once again,
+
+01:38:32.980 --> 01:38:33.400
+we have to send our brave developers off to
+
+01:38:36.220 --> 01:38:36.440
+build 1 to 3 patches, some of which won't see
+
+01:38:41.040 --> 01:38:41.140
+the light of day. I think that's where the
+
+01:38:41.920 --> 01:38:42.420
+breakthrough is needed.
+
+01:38:46.680 --> 01:38:47.180
+Another evolution in the packaging thought,
+
+01:38:48.620 --> 01:38:49.120
+or maybe it's not packaging.
+
+01:38:50.920 --> 01:38:51.380
+Maybe it's the compilation step.
+
+01:38:52.800 --> 01:38:53.220
+Maybe it's the distribution step.
+
+01:38:56.120 --> 01:38:56.280
+Maybe we want the Debians of the world to
+
+01:38:59.220 --> 01:38:59.540
+deliver Emacs as 2 different pieces now.
+
+01:39:03.540 --> 01:39:03.700
+And there's a UX piece that we want you to
+
+01:39:05.280 --> 01:39:05.780
+package each 1 that you package,
+
+01:39:09.060 --> 01:39:09.240
+each 1 per window manager that you support or
+
+01:39:11.380 --> 01:39:11.660
+at the intersection of each window manager
+
+01:39:12.940 --> 01:39:13.300
+and display manager you port.
+
+01:39:15.200 --> 01:39:15.300
+And the other one's just the server and you
+
+01:39:17.040 --> 01:39:17.280
+don't even have to package that if I'm only
+
+01:39:19.680 --> 01:39:20.020
+offering the CLI or there's a you know like
+
+01:39:21.960 --> 01:39:22.280
+I'm making all this up and I can't code a
+
+01:39:23.760 --> 01:39:24.260
+single thing like what I just said,
+
+01:39:26.920 --> 01:39:27.420
+but I think that there's a technical
+
+01:39:31.640 --> 01:39:32.140
+opportunity. Pretty high level for technical
+
+01:39:35.020 --> 01:39:35.520
+there of just thinking about a way to accept
+
+01:39:40.560 --> 01:39:40.680
+contributions of experience with maybe a
+
+01:39:43.780 --> 01:39:44.280
+little less rigor and a little less ground
+
+01:39:44.900 --> 01:39:45.400
+into the marble.
+
+01:39:50.400 --> 01:39:50.800
+[Speaker 5]: Yeah it makes me think of somebody at work
+
+01:39:54.220 --> 01:39:54.340
+just brought up pair programming and he's in
+
+01:39:58.080 --> 01:39:58.580
+love with it. He wants to pair up and do it,
+
+01:40:01.120 --> 01:40:01.620
+which is not true of all programmers.
+
+01:40:05.800 --> 01:40:06.300
+But I said, okay, so you spearhead that.
+
+01:40:10.680 --> 01:40:10.900
+If we, I think it is a very high barrier to
+
+01:40:13.580 --> 01:40:13.780
+get your patches in because of course they
+
+01:40:15.420 --> 01:40:15.860
+need to meet the quality standard of Emacs.
+
+01:40:20.800 --> 01:40:21.300
+So if people who are doing day-to-day
+
+01:40:24.200 --> 01:40:24.700
+understand that process and can do it well,
+
+01:40:28.200 --> 01:40:28.540
+could work with some of the people who can't
+
+01:40:30.040 --> 01:40:30.540
+quite contribute at that level,
+
+01:40:35.020 --> 01:40:35.240
+but have ideas that are on the level that
+
+01:40:39.780 --> 01:40:40.280
+should go in, pairing them up could really
+
+01:40:41.420 --> 01:40:41.920
+move a lot of that forward.
+
+01:40:46.000 --> 01:40:46.500
+Like Lars, I don't know what his,
+
+01:40:50.000 --> 01:40:50.500
+I get the feeling maybe he's retired.
+
+01:40:54.960 --> 01:40:55.380
+So, you know, maybe he has some time,
+
+01:40:58.300 --> 01:40:58.640
+you know, and he's really good at going back
+
+01:41:00.320 --> 01:41:00.480
+in and saying, you know,
+
+01:41:02.400 --> 01:41:02.480
+these areas haven't gotten attention in a
+
+01:41:05.660 --> 01:41:05.900
+while, so I'm going to go kill some bugs and
+
+01:41:08.160 --> 01:41:08.660
+look at them and fix them up.
+
+01:41:13.640 --> 01:41:13.840
+So I would think he would be good to do that
+
+01:41:15.340 --> 01:41:15.480
+with someone. But you know,
+
+01:41:22.400 --> 01:41:22.740
+Again, I've got years of code that would just
+
+01:41:25.320 --> 01:41:25.760
+require somebody to work through it to update
+
+01:41:28.340 --> 01:41:28.660
+to the latest code base and diff against it.
+
+01:41:30.080 --> 01:41:30.480
+But it does things like,
+
+01:41:32.960 --> 01:41:33.420
+I mean, like if anybody used RMAIL anymore,
+
+01:41:36.200 --> 01:41:36.700
+I made the summary mode of RMAIL exactly
+
+01:41:40.080 --> 01:41:40.580
+compatible key-wise with the main buffer,
+
+01:41:43.140 --> 01:41:43.260
+which it never was, and fixed a number of
+
+01:41:46.120 --> 01:41:46.620
+other features. Dured made operations
+
+01:41:49.340 --> 01:41:49.480
+reversible, where you mark something and you
+
+01:41:51.420 --> 01:41:51.920
+unmark it, and you can go up and down.
+
+01:41:53.160 --> 01:41:53.480
+And there are all these little
+
+01:41:56.260 --> 01:41:56.760
+incompatibilities that kind of add up across
+
+01:42:00.120 --> 01:42:00.620
+time, and they never seem to get addressed.
+
+01:42:06.180 --> 01:42:06.480
+We could just fix them and people would start
+
+01:42:09.400 --> 01:42:09.640
+to say, oh, this is smoother and they are
+
+01:42:12.580 --> 01:42:12.820
+getting more of that experience because it
+
+01:42:15.060 --> 01:42:15.560
+feels like the systems maybe 80,
+
+01:42:20.740 --> 01:42:21.240
+85% of the way there in a lot of thoughtful
+
+01:42:26.040 --> 01:42:26.200
+design. But that last 15% could be the
+
+01:42:29.640 --> 01:42:30.100
+difference between an iPhone and an Android
+
+01:42:32.260 --> 01:42:32.760
+phone of usability-wise.
+
+01:42:38.720 --> 01:42:38.940
+So that's a thought. That's a
+
+01:42:41.100 --> 01:42:41.240
+[Speaker 3]: brilliant idea, and it probably can be
+
+01:42:42.840 --> 01:42:43.340
+applied far wider than emacs.
+
+01:42:46.060 --> 01:42:46.320
+That's something that that FSF should
+
+01:42:48.480 --> 01:42:48.980
+consider suggesting across,
+
+01:42:49.920 --> 01:42:50.420
+you know, GNU packages,
+
+01:42:54.280 --> 01:42:54.600
+for example, like a matchmaking project seems
+
+01:42:56.520 --> 01:42:56.880
+like something that FSF community teams
+
+01:43:04.020 --> 01:43:04.110
+should think about. Yeah,
+
+01:43:04.360 --> 01:43:04.520
+I was going
+
+01:43:04.920 --> 01:43:05.420
+[Speaker 1]: That's so... to say also,
+
+01:43:08.080 --> 01:43:08.140
+I noticed that the name Debian came up a
+
+01:43:09.840 --> 01:43:10.260
+while ago and now we were talking about
+
+01:43:14.540 --> 01:43:15.040
+programming and such and Mentoring maybe and
+
+01:43:17.960 --> 01:43:18.320
+Debian has this service or part of their site
+
+01:43:19.600 --> 01:43:20.100
+or community called Mentors.
+
+01:43:22.120 --> 01:43:22.620
+They have a website, mentors.debian.net,
+
+01:43:26.920 --> 01:43:27.100
+where the idea is that people who want to get
+
+01:43:28.100 --> 01:43:28.480
+into contributing to Debian,
+
+01:43:29.580 --> 01:43:30.080
+for example, to package things,
+
+01:43:33.200 --> 01:43:33.480
+but obviously don't have upload rights right
+
+01:43:35.720 --> 01:43:36.000
+away. This is where they can go to,
+
+01:43:38.460 --> 01:43:38.760
+and this is separate from their mailing list
+
+01:43:42.340 --> 01:43:42.580
+or bug trackers. They can basically build
+
+01:43:44.760 --> 01:43:45.260
+their changed packages and upload them here,
+
+01:43:48.220 --> 01:43:48.480
+and then Debian developers who have commit or
+
+01:43:51.380 --> 01:43:51.620
+upload rights to the Debian archive can go
+
+01:43:55.960 --> 01:43:56.120
+and review and give them feedback or ask them
+
+01:43:57.620 --> 01:43:58.120
+to change something or if it's good,
+
+01:44:01.620 --> 01:44:01.920
+then just easily upload the package right
+
+01:44:04.200 --> 01:44:04.440
+from there. And I wonder if it might make
+
+01:44:07.760 --> 01:44:08.000
+sense to have something kind of like that in
+
+01:44:10.360 --> 01:44:10.840
+like the context of Emacs or the GNU project
+
+01:44:13.360 --> 01:44:13.660
+as a whole, where we have like some kind of
+
+01:44:15.520 --> 01:44:16.020
+a, like loosely defined mentoring thing,
+
+01:44:18.840 --> 01:44:19.120
+where we could pair up people who are more
+
+01:44:20.500 --> 01:44:21.000
+experienced, who, for example,
+
+01:44:22.540 --> 01:44:22.740
+have commit rights in the Emacs core
+
+01:44:27.080 --> 01:44:27.240
+repository to match them up with someone who
+
+01:44:29.080 --> 01:44:29.260
+is just making your very first patches or
+
+01:44:31.640 --> 01:44:31.960
+contributions to Emacs or whatever other GNU
+
+01:44:34.000 --> 01:44:34.200
+package. Just some food for thought,
+
+01:44:38.040 --> 01:44:38.540
+[Speaker 5]: Yeah, sounds good.
+
+01:44:44.340 --> 01:44:44.600
+[Speaker 1]: I guess. Yeah, and then I guess 1 feature of
+
+01:44:47.360 --> 01:44:47.860
+such a system which would be nice is that it,
+
+01:44:49.200 --> 01:44:49.340
+at least in terms of, you know,
+
+01:44:50.380 --> 01:44:50.580
+the mentors that Debbie and that,
+
+01:44:52.200 --> 01:44:52.700
+that it has a web UI, which,
+
+01:44:56.040 --> 01:44:56.200
+is nice because mailing lists might be
+
+01:44:58.140 --> 01:44:58.380
+intimidating for someone who is just getting
+
+01:44:59.340 --> 01:44:59.840
+started, like in these communities.
+
+01:45:03.960 --> 01:45:04.200
+Or, you know, just making patches like that,
+
+01:45:05.440 --> 01:45:05.940
+or just have a series of concrete
+
+01:45:08.100 --> 01:45:08.320
+instructions. Like with mentors at
+
+01:45:11.100 --> 01:45:11.200
+Devian.net, I feel like you can't go wrong in
+
+01:45:13.820 --> 01:45:14.240
+terms of finding the steps of figuring out
+
+01:45:16.260 --> 01:45:16.500
+what you need to do to put together some
+
+01:45:19.040 --> 01:45:19.240
+change. Which I think the same idea could
+
+01:45:20.280 --> 01:45:20.740
+apply to Emacs, for example,
+
+01:45:20.860 --> 01:45:21.360
+as well.
+
+01:45:24.560 --> 01:45:24.960
+[Speaker 7]: I think this is a good point about lowering
+
+01:45:27.440 --> 01:45:27.620
+barriers, and how email is a barrier to
+
+01:45:28.860 --> 01:45:29.240
+people. I mean, so on the 1 hand,
+
+01:45:31.100 --> 01:45:31.320
+you have us guys on Emacs level,
+
+01:45:32.860 --> 01:45:33.360
+we're very used to the email workflow.
+
+01:45:35.140 --> 01:45:35.500
+Like we're not just using it for fun.
+
+01:45:37.040 --> 01:45:37.160
+You know what I mean? Like this is a
+
+01:45:38.320 --> 01:45:38.820
+workhorse. It really is.
+
+01:45:41.400 --> 01:45:41.840
+And it's tried, it's battled,
+
+01:45:42.900 --> 01:45:43.300
+tested. It has some quirks,
+
+01:45:45.140 --> 01:45:45.340
+but we know them extremely well on the other
+
+01:45:48.060 --> 01:45:48.380
+hand. So, but still we want more people
+
+01:45:50.700 --> 01:45:50.880
+involved, right? And we realized that,
+
+01:45:52.760 --> 01:45:52.960
+you know, times are changing as well.
+
+01:45:54.720 --> 01:45:54.900
+And people are more used to doing stuff from
+
+01:45:55.640 --> 01:45:56.140
+the web browser, perhaps.
+
+01:46:00.040 --> 01:46:00.320
+So we do want to move to a forge,
+
+01:46:01.920 --> 01:46:02.420
+or at least start looking into that.
+
+01:46:03.560 --> 01:46:04.060
+But there are some obstacles.
+
+01:46:06.060 --> 01:46:06.280
+So we are looking for volunteers to do that
+
+01:46:07.360 --> 01:46:07.580
+work. I'm not just saying it,
+
+01:46:08.640 --> 01:46:09.140
+like we are very serious.
+
+01:46:11.660 --> 01:46:11.760
+I'm very seriously asking people in the
+
+01:46:12.520 --> 01:46:13.020
+community to consider,
+
+01:46:14.920 --> 01:46:15.280
+hey, could you dedicate some time?
+
+01:46:18.660 --> 01:46:18.900
+I mean, it will take some dedication for sure
+
+01:46:20.600 --> 01:46:20.820
+it will take some time and it will take some
+
+01:46:23.040 --> 01:46:23.300
+describe probably even you know Be prepared
+
+01:46:24.760 --> 01:46:25.260
+to be frustrated at times right,
+
+01:46:26.980 --> 01:46:27.180
+but if you're serious about doing that type
+
+01:46:28.040 --> 01:46:28.260
+of work, okay now
+
+01:46:32.520 --> 01:46:32.900
+[Speaker 3]: I believe you Well, I'm just I'm just teasing
+
+01:46:35.900 --> 01:46:36.140
+but but but yes exactly any I mean it's it's
+
+01:46:38.560 --> 01:46:39.060
+not even a joke right Any serious undertaking
+
+01:46:41.420 --> 01:46:41.920
+having to do with any free software project,
+
+01:46:45.300 --> 01:46:45.600
+just because we are open to the entire world
+
+01:46:47.760 --> 01:46:48.160
+and we pride ourselves on trying to take
+
+01:46:50.020 --> 01:46:50.460
+seriously all input. And if it's a logical
+
+01:46:51.940 --> 01:46:52.040
+argument, then we'll go ahead and take the
+
+01:46:53.000 --> 01:46:53.200
+time to combat with you,
+
+01:46:54.960 --> 01:46:55.180
+even though the maintainer has 300 other
+
+01:46:57.260 --> 01:46:57.760
+things to do. Like, man,
+
+01:46:58.280 --> 01:46:58.740
+this
+
+01:47:00.020 --> 01:47:00.280
+[Speaker 7]: is just the way it is,
+
+01:47:02.840 --> 01:47:03.160
+right? It just, It's not like Emacs is way
+
+01:47:06.960 --> 01:47:07.460
+harder to change than any other project of
+
+01:47:08.680 --> 01:47:09.180
+its longevity and size.
+
+01:47:10.800 --> 01:47:11.100
+It's just these things take time.
+
+01:47:13.420 --> 01:47:13.920
+Try getting a change into Debian.
+
+01:47:15.060 --> 01:47:15.460
+That's an uphill battle.
+
+01:47:16.960 --> 01:47:17.460
+I don't even know where to start with that.
+
+01:47:19.540 --> 01:47:20.040
+That's huge, right? And I have tremendous
+
+01:47:21.640 --> 01:47:21.820
+respect for the people doing that type of
+
+01:47:22.760 --> 01:47:23.260
+work because it takes dedication,
+
+01:47:26.280 --> 01:47:26.440
+it takes effort. So we really need someone to
+
+01:47:27.180 --> 01:47:27.600
+step up from the community,
+
+01:47:29.760 --> 01:47:30.060
+I think, to be a champion for something like
+
+01:47:33.160 --> 01:47:33.600
+this and work together with us on Emacs Devil
+
+01:47:37.800 --> 01:47:38.200
+and off Emacs Devil, probably with me and Eli
+
+01:47:40.320 --> 01:47:40.600
+and perhaps some other people that could be
+
+01:47:41.820 --> 01:47:42.280
+in the mail thread, and we could coordinate
+
+01:47:44.620 --> 01:47:44.960
+this type of work. I would be super excited
+
+01:47:46.560 --> 01:47:47.060
+if someone wanted to get the ball rolling.
+
+01:47:48.480 --> 01:47:48.980
+I can't do everything.
+
+01:47:51.100 --> 01:47:51.340
+I wish I could. Like, I thought about it.
+
+01:47:52.840 --> 01:47:53.000
+Should I just put everything to the side and
+
+01:47:53.860 --> 01:47:54.000
+do this? But then, I mean,
+
+01:47:54.800 --> 01:47:55.080
+there are some, there are other
+
+01:47:56.040 --> 01:47:56.400
+responsibilities as well.
+
+01:47:57.740 --> 01:47:58.040
+So we need someone to step up.
+
+01:47:58.520 --> 01:47:59.020
+We need help here.
+
+01:48:03.220 --> 01:48:03.460
+[Speaker 3]: you're gonna speak. I was totally gonna pick
+
+01:48:04.120 --> 01:48:04.620
+on you. Go ahead.
+
+01:48:05.540 --> 01:48:05.820
+[Speaker 1]: Yeah, so. Oh, good, Thanks,
+
+01:48:06.540 --> 01:48:06.860
+yeah, I was just gonna say,
+
+01:48:08.460 --> 01:48:08.960
+yeah, I echo Stefan's sentiments.
+
+01:48:11.680 --> 01:48:11.960
+And that, yeah, in terms of like maybe
+
+01:48:14.020 --> 01:48:14.080
+experimenting with a different Forge or a
+
+01:48:15.280 --> 01:48:15.600
+better Forge and like,
+
+01:48:16.124 --> 01:48:16.296
+you know, supplementing Savannah.
+
+01:48:16.640 --> 01:48:17.140
+And supplementing Savannah.
+
+01:48:20.860 --> 01:48:20.920
+I actually did some initial work a couple of
+
+01:48:23.240 --> 01:48:23.740
+months ago to get a SourceFed instance
+
+01:48:24.860 --> 01:48:25.360
+installed for the new project.
+
+01:48:28.440 --> 01:48:28.660
+And I've done some work on and off,
+
+01:48:29.340 --> 01:48:29.760
+but then life happens,
+
+01:48:32.140 --> 01:48:32.640
+especially from September onwards.
+
+01:48:35.240 --> 01:48:35.500
+But even from earlier in the year,
+
+01:48:36.460 --> 01:48:36.960
+the project has been semi-dormant,
+
+01:48:38.740 --> 01:48:39.240
+but I have been meaning to get to that.
+
+01:48:42.740 --> 01:48:42.900
+So I'm like 1 such person who's interested in
+
+01:48:44.760 --> 01:48:44.960
+that type of work and driving it forward and
+
+01:48:47.640 --> 01:48:47.880
+I would love you know if anyone's and anyone
+
+01:48:50.820 --> 01:48:50.980
+else has the kind of time and energy and the
+
+01:48:52.760 --> 01:48:53.260
+interest to help with something like that.
+
+01:48:55.280 --> 01:48:55.780
+Yes, please reach out to all of us,
+
+01:48:56.880 --> 01:48:57.380
+to Emacs core developers,
+
+01:48:58.100 --> 01:48:58.600
+of course, and to myself.
+
+01:49:01.840 --> 01:49:02.340
+This is something that could be very useful,
+
+01:49:04.960 --> 01:49:05.460
+not just for GNU Emacs and Emacs developers,
+
+01:49:09.760 --> 01:49:10.240
+but also for any other GNU package as well.
+
+01:49:13.040 --> 01:49:13.480
+So yeah, that's 1 area of potential
+
+01:49:15.660 --> 01:49:16.060
+contribution and 1 thing that we sort of,
+
+01:49:17.860 --> 01:49:18.340
+I guess, regularly meet with the FSF
+
+01:49:20.140 --> 01:49:20.640
+sysadmins to discuss these kinds of projects
+
+01:49:22.120 --> 01:49:22.620
+and things as Corwin would know.
+
+01:49:24.520 --> 01:49:24.720
+[Speaker 3]: Yeah, that's kind of, I mean,
+
+01:49:26.280 --> 01:49:26.420
+you knew exactly where I was going to,
+
+01:49:27.960 --> 01:49:28.420
+and I'm glad that you volunteered yourself
+
+01:49:30.040 --> 01:49:30.540
+personally because that's the best choice.
+
+01:49:32.320 --> 01:49:32.820
+If you're hearing this and you're thinking,
+
+01:49:35.760 --> 01:49:36.260
+you know, maybe I should do some sysop stuff,
+
+01:49:38.200 --> 01:49:38.700
+literally reach out to Amin.
+
+01:49:41.040 --> 01:49:41.420
+And because it's complicated,
+
+01:49:43.040 --> 01:49:43.320
+there are a lot of projects to volunteer for.
+
+01:49:44.120 --> 01:49:44.620
+They're all very worthy.
+
+01:49:48.760 --> 01:49:49.020
+And it's sort of political to figure out what
+
+01:49:52.760 --> 01:49:53.000
+we're gonna try to change for whom first to
+
+01:49:55.940 --> 01:49:56.260
+demonstrate we can do all the things we wanna
+
+01:49:58.320 --> 01:49:58.440
+do to make it better without losing all the
+
+01:50:00.340 --> 01:50:00.540
+things that are important about how it is
+
+01:50:04.040 --> 01:50:04.480
+today. And we'll do it in a measured way like
+
+01:50:06.500 --> 01:50:06.760
+everybody's just like room full of rocking
+
+01:50:09.640 --> 01:50:09.780
+chairs everybody's got a long tail it's a
+
+01:50:12.340 --> 01:50:12.620
+hard project but you will do something that
+
+01:50:15.380 --> 01:50:15.540
+just a lot like as a Savannah hacker which I
+
+01:50:17.920 --> 01:50:18.240
+am with Amin So that's how I know about his
+
+01:50:20.080 --> 01:50:20.340
+work on that project. We worked together on
+
+01:50:22.300 --> 01:50:22.800
+the Savannah Forge. I'm aware of his work
+
+01:50:26.660 --> 01:50:26.980
+piloting SourceHut recently and just with a
+
+01:50:29.020 --> 01:50:29.240
+working group there to look at the next
+
+01:50:30.540 --> 01:50:31.040
+generation of forges for GNU.
+
+01:50:34.160 --> 01:50:34.340
+Emacs of course as a GNU package could go do
+
+01:50:36.540 --> 01:50:36.820
+its own thing. FFS would most likely give
+
+01:50:38.360 --> 01:50:38.560
+cash to go do its own thing,
+
+01:50:39.720 --> 01:50:39.860
+even if it didn't like it.
+
+01:50:41.140 --> 01:50:41.520
+We know, you know, as a,
+
+01:50:42.800 --> 01:50:43.260
+like if I put on, I'm not FSF,
+
+01:50:44.260 --> 01:50:44.600
+but if I put on that hat,
+
+01:50:45.800 --> 01:50:46.300
+I imagine that we must know.
+
+01:50:50.020 --> 01:50:50.200
+Emacs is a flagship thing that people in the
+
+01:50:52.420 --> 01:50:52.800
+real world depend on. If I get this ancient
+
+01:50:55.320 --> 01:50:55.820
+computer, I get a working Linux distribution
+
+01:50:59.340 --> 01:50:59.500
+and Emacs. Maybe it's not Microsoft Word as a
+
+01:51:00.800 --> 01:51:01.300
+word processor, but you guys,
+
+01:51:03.080 --> 01:51:03.580
+you can learn a language on it for sure,
+
+01:51:05.600 --> 01:51:05.800
+you know And you can do your homework on it
+
+01:51:08.300 --> 01:51:08.680
+and you know It's it makes your you can edit
+
+01:51:10.580 --> 01:51:10.960
+things and then you can edit your system
+
+01:51:13.900 --> 01:51:14.340
+files and teach yourself how to manage a GNU
+
+01:51:17.860 --> 01:51:18.040
+system and you can You know so Emacs is
+
+01:51:19.540 --> 01:51:19.840
+really powerful as a practical tool.
+
+01:51:21.560 --> 01:51:21.720
+Like I keep coming back to that point when I
+
+01:51:25.040 --> 01:51:25.320
+think about Emacs, like I really put it as
+
+01:51:27.380 --> 01:51:27.880
+like, it's an important tool on the like
+
+01:51:31.780 --> 01:51:32.080
+humans inventing tools level just because it
+
+01:51:35.080 --> 01:51:35.280
+lets me make this editor into whatever I need
+
+01:51:37.580 --> 01:51:38.080
+it to be to get my actual work done.
+
+01:51:39.520 --> 01:51:39.860
+Whether that's getting the length,
+
+01:51:41.460 --> 01:51:41.600
+maybe that's making the font big enough that
+
+01:51:43.260 --> 01:51:43.380
+I can see it, or making it easy enough to
+
+01:51:44.760 --> 01:51:45.060
+change from this font to that font,
+
+01:51:45.920 --> 01:51:46.420
+changing the background colors,
+
+01:51:47.960 --> 01:51:48.460
+like your basic vision,
+
+01:51:49.960 --> 01:51:50.460
+accessibility issues, right?
+
+01:51:52.740 --> 01:51:53.120
+All, you know, solved,
+
+01:51:55.080 --> 01:51:55.320
+I can bake that customization in and I can
+
+01:51:56.320 --> 01:51:56.580
+pretty much depend on,
+
+01:51:57.900 --> 01:51:58.400
+no matter what we change in Emacs,
+
+01:51:59.760 --> 01:52:00.140
+I'm gonna accept the new version,
+
+01:52:01.920 --> 01:52:02.220
+it's gonna be on the next computer I get,
+
+01:52:03.840 --> 01:52:04.000
+I'm going to install the package and my
+
+01:52:05.920 --> 01:52:06.100
+configuration that sets all that up will be
+
+01:52:10.960 --> 01:52:11.100
+there for me. Right? It's like back to
+
+01:52:13.300 --> 01:52:13.780
+Stefan's point, what, 6 and a half hours ago,
+
+01:52:16.120 --> 01:52:16.620
+I mean, you know, 20 minutes ago about
+
+01:52:23.680 --> 01:52:24.180
+just... Oh gosh, I lost it.
+
+01:52:27.980 --> 01:52:28.260
+Boy, I really thought I had handed that
+
+01:52:29.020 --> 01:52:29.520
+neatly back to you.
+
+01:52:36.040 --> 01:52:36.220
+[Speaker 1]: No problem, Yeah, I think we're in general in
+
+01:52:36.220 --> 01:52:36.720
+agreement.
+
+01:52:41.980 --> 01:52:42.480
+[Speaker 4]: If we are now in the realm of Concord,
+
+01:52:44.800 --> 01:52:44.960
+of harmony, and the realm of midnight in
+
+01:52:47.560 --> 01:52:47.720
+Europe, Should we bring this discussion to a
+
+01:52:49.200 --> 01:52:49.460
+close or we could go all night,
+
+01:52:51.180 --> 01:52:51.500
+but I'll need to explain to my employer why
+
+01:52:52.720 --> 01:52:53.220
+my eyes are barely open tomorrow.
+
+01:52:56.600 --> 01:52:57.100
+[Speaker 1]: Yeah, I think that's probably a good idea.
+
+01:52:59.960 --> 01:53:00.460
+I see some folks starting to slowly sign off.
+
+01:53:02.740 --> 01:53:03.060
+[Speaker 0]: Yeah, also, you know, Leo,
+
+01:53:04.680 --> 01:53:05.180
+you could leave and just miss out.
+
+01:53:05.460 --> 01:53:05.960
+What?
+
+01:53:13.620 --> 01:53:13.820
+[Speaker 7]: Hey, Sasha, can I say something like what an
+
+01:53:15.880 --> 01:53:16.020
+amazing job with everything you're doing in
+
+01:53:16.960 --> 01:53:17.300
+the community over the years?
+
+01:53:18.820 --> 01:53:19.240
+I'm so impressed with Emacs News.
+
+01:53:22.020 --> 01:53:22.160
+What a great resource to stay up to date in
+
+01:53:24.720 --> 01:53:24.760
+Emacs. Just really hats off to you for a
+
+01:53:25.080 --> 01:53:25.580
+whole lot.
+
+01:53:26.680 --> 01:53:26.880
+[Speaker 3]: Thank you
+
+01:53:29.440 --> 01:53:29.700
+[Speaker 0]: very much. It actually turned out to be quite
+
+01:53:31.840 --> 01:53:32.220
+timely that John Wheatley had suggested it
+
+01:53:35.020 --> 01:53:35.140
+back when he was maintainer because when I
+
+01:53:36.980 --> 01:53:37.200
+had the kiddo, I suddenly had 0 time to
+
+01:53:38.000 --> 01:53:38.440
+actually write new things.
+
+01:53:39.560 --> 01:53:39.840
+But reading things is fine.
+
+01:53:41.820 --> 01:53:42.040
+I can just speed read all the Reddit things
+
+01:53:43.160 --> 01:53:43.660
+and put the links together.
+
+01:53:45.800 --> 01:53:46.300
+So I'm very glad that Emacs news is helpful.
+
+01:53:49.080 --> 01:53:49.580
+[Speaker 7]: it really is, yeah.
+
+01:53:55.380 --> 01:53:55.880
+[Speaker 3]: It is, So, okay, now let's try to go for our
+
+01:54:00.040 --> 01:54:00.480
+closing thoughts here while Leo's still here.
+
+01:54:01.740 --> 01:54:02.140
+And then if we wanna keep rolling,
+
+01:54:04.760 --> 01:54:05.260
+even after Leo drops, we won't tell him,
+
+01:54:06.420 --> 01:54:06.920
+we'll tell him we're stuck.
+
+01:54:12.380 --> 01:54:12.540
+[Speaker 4]: I guess that was a beacon to me to perhaps go
+
+01:54:14.140 --> 01:54:14.440
+for the second close of the day I've already
+
+01:54:18.080 --> 01:54:18.380
+done it I can do it again But I will prove
+
+01:54:19.300 --> 01:54:19.480
+Sasha wrong this time.
+
+01:54:21.020 --> 01:54:21.520
+I will miss out if need be because really,
+
+01:54:24.160 --> 01:54:24.660
+I have been very impressed with the sleep
+
+01:54:28.700 --> 01:54:29.120
+record that you had and I am very envious
+
+01:54:32.040 --> 01:54:32.220
+right now of your past ability to sleep more
+
+01:54:33.160 --> 01:54:33.380
+than 9 hours per night.
+
+01:54:35.440 --> 01:54:35.560
+And I wish I would be able to go back to
+
+01:54:37.300 --> 01:54:37.800
+this. But anyway, folks,
+
+01:54:38.560 --> 01:54:39.060
+I'm going to drop out.
+
+01:54:40.520 --> 01:54:40.680
+People might hang out for a little while
+
+01:54:42.360 --> 01:54:42.520
+longer. Bear in mind that Sasha might get
+
+01:54:44.480 --> 01:54:44.980
+called at any point to go take care of Kido.
+
+01:54:47.220 --> 01:54:47.720
+So this might wrap up very fast afterwards.
+
+01:54:49.780 --> 01:54:49.920
+But at any rate, it was my pleasure to be the
+
+01:54:51.420 --> 01:54:51.820
+host today. Stefan, thank you for joining.
+
+01:54:53.520 --> 01:54:54.020
+Bob, thank you for joining and interacting
+
+01:54:56.040 --> 01:54:56.320
+with us and making this a little more
+
+01:54:58.860 --> 01:54:59.020
+interactive and more plural than just the
+
+01:55:01.260 --> 01:55:01.760
+co-organizers. And on that note,
+
+01:55:03.640 --> 01:55:03.900
+I will be leaving. So have a wonderful night,
+
+01:55:05.860 --> 01:55:06.020
+everyone. And we'll see you next year for the
+
+01:55:06.740 --> 01:55:07.240
+next edition, potentially.
+
+01:55:09.560 --> 01:55:10.060
+[Speaker 3]: Thank you, Leo. You're my hero.
+
+01:55:11.580 --> 01:55:12.040
+I take everything I said on mumble back.
+
+01:55:12.280 --> 01:55:12.780
+You're amazing.
+
+01:55:14.840 --> 01:55:15.340
+[Speaker 4]: bye everyone.
+
+01:55:16.400 --> 01:55:16.680
+[Speaker 1]: All right, Thank you all.
+
+01:55:17.960 --> 01:55:18.220
+Take care. Bye. I will
+
+01:55:20.200 --> 01:55:20.580
+[Speaker 6]: also say bye bye. I also need to go to bed.
+
+01:55:22.200 --> 01:55:22.700
+Thank you all for this cool conference and
+
+01:55:24.920 --> 01:55:25.080
+hopefully we're here through the year and at
+
+01:55:25.900 --> 01:55:26.400
+least in 1 year.
+
+01:55:30.900 --> 01:55:31.400
+[Speaker 3]: You've probably made the rest of the rest of
+
+01:55:34.440 --> 01:55:34.700
+the victorious. You really stepped up.
+
+01:55:38.300 --> 01:55:38.800
+[Speaker 5]: your contributions.
+
+01:55:38.980 --> 01:55:39.220
+[Speaker 3]: Thanks so much for Yeah,
+
+01:55:40.580 --> 01:55:40.960
+[Speaker 1]: thanks so much for being a part of it,
+
+01:55:41.720 --> 01:55:42.100
+specifically you, Floey,
+
+01:55:43.480 --> 01:55:43.980
+and just everyone. Thank you all.
+
+01:55:48.180 --> 01:55:48.420
+[Speaker 6]: Have a nice day or night and we'll hear each
+
+01:55:48.740 --> 01:55:49.240
+other. Bye!
+
+01:55:51.220 --> 01:55:51.420
+[Speaker 1]: See you. Okay, well,
+
+01:55:51.880 --> 01:55:52.360
+[Speaker 3]: Thanks, Zen. I'll go next.
+
+01:55:53.800 --> 01:55:54.300
+I'm the next newest, I think.
+
+01:55:59.640 --> 01:56:00.140
+Well, I want to say also,
+
+01:56:01.800 --> 01:56:02.300
+you know, Bob and Stefan,
+
+01:56:03.660 --> 01:56:03.760
+thank you so much for jumping in and
+
+01:56:04.860 --> 01:56:05.360
+participating in the closing remarks.
+
+01:56:06.700 --> 01:56:07.200
+I too think it's a lot of,
+
+01:56:08.560 --> 01:56:08.960
+like, it's fun to just,
+
+01:56:10.760 --> 01:56:11.260
+like, share the buzz after the convention.
+
+01:56:13.260 --> 01:56:13.460
+We've got all these millions of ideas and
+
+01:56:16.120 --> 01:56:16.480
+then to have a group, a little group think
+
+01:56:18.960 --> 01:56:19.460
+about what we're walking away from that with.
+
+01:56:22.360 --> 01:56:22.540
+What is the temperature of the fire in your
+
+01:56:24.360 --> 01:56:24.860
+belly? And it's just...
+
+01:56:28.440 --> 01:56:28.740
+I mean, this is 1 of the highlights of my
+
+01:56:30.200 --> 01:56:30.700
+year in a way that it's just...
+
+01:56:31.780 --> 01:56:31.970
+I don't think other people...
+
+01:56:33.880 --> 01:56:34.120
+I don't think I dare explain it to other
+
+01:56:35.880 --> 01:56:36.020
+people. I think my wife understands and I
+
+01:56:40.600 --> 01:56:40.860
+will do. So thank you very much for this
+
+01:56:42.340 --> 01:56:42.840
+conference and the opportunity to participate
+
+01:56:45.540 --> 01:56:46.040
+in it. You know, just the conversation,
+
+01:56:48.540 --> 01:56:49.040
+how vibrant the chat is on IRC,
+
+01:56:52.080 --> 01:56:52.580
+how the variety of talks,
+
+01:56:54.140 --> 01:56:54.640
+some of the talks that look like television
+
+01:56:59.380 --> 01:56:59.540
+content to me and others that look a lot like
+
+01:57:03.840 --> 01:57:03.960
+my talk. And working through your slides and
+
+01:57:06.100 --> 01:57:06.280
+doing it live and you know I appreciate that
+
+01:57:10.240 --> 01:57:10.380
+we make a place for all those levels and and
+
+01:57:12.720 --> 01:57:13.220
+show people how to improve our craft as well.
+
+01:57:26.140 --> 01:57:26.460
+I'm not actually dropping or going anywhere.
+
+01:57:29.040 --> 01:57:29.220
+I'll continue to talk about eMAX until I get
+
+01:57:30.860 --> 01:57:31.000
+the dinner time bell. I've probably got an
+
+01:57:40.240 --> 01:57:40.580
+hour here. I'll tell you what will happen
+
+01:57:42.040 --> 01:57:42.160
+though is I'm guaranteed to light a
+
+01:57:43.780 --> 01:57:43.940
+cigarette. You can already see me kind of
+
+01:57:45.860 --> 01:57:46.160
+hovering about my room because I'm trying to
+
+01:57:47.440 --> 01:57:47.780
+avoid like smoking on camera.
+
+01:57:49.300 --> 01:57:49.540
+I don't know where that came from.
+
+01:57:52.360 --> 01:57:52.860
+I'm giving it up in approximately 5 seconds.
+
+01:57:58.980 --> 01:57:59.480
+[Speaker 7]: Yeah I'm gonna hop off.
+
+01:58:00.800 --> 01:58:01.300
+It's possibly right here.
+
+01:58:02.220 --> 01:58:02.720
+I'll work tomorrow.
+
+01:58:06.200 --> 01:58:06.380
+[Speaker 3]: I took the next 2 days off.
+
+01:58:07.320 --> 01:58:07.820
+I'm actually going camping,
+
+01:58:11.040 --> 01:58:11.280
+Stefan. I know I've learned that this
+
+01:58:12.800 --> 01:58:13.300
+conference leaves me completely emotionally
+
+01:58:16.360 --> 01:58:16.860
+exhausted. I just like,
+
+01:58:18.700 --> 01:58:19.140
+I don't know, I watch all,
+
+01:58:20.820 --> 01:58:21.320
+I feel like I just connect with all the,
+
+01:58:23.440 --> 01:58:23.640
+like it's this time where I connect with all
+
+01:58:25.260 --> 01:58:25.580
+these people that spend as much time thinking
+
+01:58:26.580 --> 01:58:27.080
+about Emacs as I do.
+
+01:58:31.480 --> 01:58:31.760
+[Speaker 0]: All right, so maybe we should wrap up before
+
+01:58:32.440 --> 01:58:32.940
+you have like, you know,
+
+01:58:35.380 --> 01:58:35.880
+that overflow error and just...
+
+01:58:38.000 --> 01:58:38.500
+[Speaker 3]: In buster thrill, okay.
+
+01:58:41.720 --> 01:58:41.980
+Thank you
+
+01:58:45.200 --> 01:58:45.440
+[Speaker 0]: so much, everyone. Let us actually wrap up
+
+01:58:47.360 --> 01:58:47.440
+then. Everyone can find the recordings if you
+
+01:58:48.640 --> 01:58:49.140
+want to keep the conversation going.
+
+01:58:51.900 --> 01:58:52.120
+There are meetups, there are people's blog
+
+01:58:54.240 --> 01:58:54.520
+posts and video channels and mailing lists
+
+01:58:55.320 --> 01:58:55.820
+and all those other things.
+
+01:58:58.820 --> 01:58:59.180
+I often I list a lot of meetups in Emacs news
+
+01:59:00.680 --> 01:59:01.080
+so that's another great way to stay connected
+
+01:59:02.560 --> 01:59:03.060
+through the year and we hope to see everybody
+
+01:59:04.740 --> 01:59:05.240
+next year at EmacsConf 2024.
+
+01:59:11.260 --> 01:59:11.420
+[Speaker 4]: Thanks Sasha for the send off and goodbye to
+
+01:59:16.740 --> 01:59:16.940
+everyone. Oh Sasha I think you were muted but
+
+01:59:18.340 --> 01:59:18.520
+yes I was still there I assume that's what
+
+01:59:21.220 --> 01:59:21.720
+you just said. I lied.
+
+01:59:23.680 --> 01:59:23.920
+I was staying around like Corwin was.
+
+01:59:25.440 --> 01:59:25.580
+I just said goodbye, but then I wait in the
+
+01:59:26.520 --> 01:59:27.020
+bushes, waiting for the ambush.
+
+01:59:29.340 --> 01:59:29.840
+[Speaker 3]: Well I'm personally surprised,
+
+01:59:32.780 --> 01:59:33.040
+speaking for myself. I wouldn't have guessed
+
+01:59:36.040 --> 01:59:36.340
+that would happen. All right,
+
+01:59:36.340 --> 01:59:36.580
+[Speaker 4]: The perfect moment. well,
+
+01:59:37.360 --> 01:59:37.680
+I guess that's a wrap then.
+
+01:59:39.060 --> 01:59:39.560
+Thank you, everyone, and see you next year.
+
+01:59:43.440 --> 01:59:43.740
+[Speaker 3]: I thought we were clear like 10 minutes ago.
+
+01:59:45.340 --> 01:59:45.840
+Are we not? We are, right?
+
+01:59:47.400 --> 01:59:47.780
+We're definitely clear.
+
+01:59:48.040 --> 01:59:48.220
+[Speaker 5]: OK, I'm
+
+01:59:49.240 --> 01:59:49.440
+[Speaker 3]: hanging up now. Good night.
+
+01:59:50.640 --> 01:59:51.140
+It was wonderful to meet you.
+
+01:59:51.900 --> 01:59:52.400
+[Speaker 7]: Take care Corwin
+
+01:59:56.520 --> 01:59:57.020
+[Speaker 4]: Bye Stefan. Bye. Bye all
diff --git a/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 b/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
new file mode 100644
index 00000000..2a53cea7
--- /dev/null
+++ b/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
@@ -0,0 +1,53 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:16.579
+Intro
+
+00:00:16.580 --> 00:01:09.399
+Reasons
+
+00:01:09.400 --> 00:02:09.159
+Information
+
+00:02:09.160 --> 00:03:53.119
+Properties
+
+00:03:53.120 --> 00:04:29.719
+Timezones
+
+00:04:29.720 --> 00:05:41.779
+Scheduling
+
+00:05:41.780 --> 00:06:48.399
+Templates
+
+00:06:48.400 --> 00:08:04.379
+Wiki
+
+00:08:04.380 --> 00:08:28.199
+Etherpad
+
+00:08:28.200 --> 00:09:05.919
+E-mail
+
+00:09:05.920 --> 00:10:08.120
+BigBlueButton web conferences
+
+00:10:08.121 --> 00:10:36.699
+Shortcuts
+
+00:10:36.700 --> 00:11:03.679
+Logbook
+
+00:11:03.680 --> 00:12:13.219
+Captions
+
+00:12:13.220 --> 00:13:11.279
+Crontabs and playing the talks
+
+00:13:11.280 --> 00:13:49.879
+Transitions
+
+00:13:49.880 --> 00:15:05.200
+Wrapping up
diff --git a/2023/captions/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main.vtt b/2023/captions/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main.vtt
new file mode 100644
index 00000000..cbec1bb1
--- /dev/null
+++ b/2023/captions/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main.vtt
@@ -0,0 +1,1076 @@
+WEBVTT captioned by sachac, checked by sachac
+
+NOTE Intro
+
+00:00:00.000 --> 00:00:04.839
+Hi, I'm Sacha Chua. This presentation is a quick tour
+
+00:00:04.840 --> 00:00:07.959
+of some of the things we do to run EmacsConf.
+
+00:00:07.960 --> 00:00:12.239
+Since 2019, we've run it as an entirely online conference,
+
+00:00:12.240 --> 00:00:14.699
+and we do as much of the organization as possible
+
+00:00:14.700 --> 00:00:16.579
+within Emacs itself.
+
+NOTE Reasons
+
+00:00:16.580 --> 00:00:19.759
+I have three reasons for making this presentation.
+
+00:00:19.760 --> 00:00:22.759
+The first is entirely selfish: I need to figure out
+
+00:00:22.760 --> 00:00:25.359
+all the stuff I built for last year's EmacsConf,
+
+00:00:25.360 --> 00:00:28.079
+since it was a bit of a crazy scramble.
+
+00:00:28.080 --> 00:00:30.159
+The second is that I want to show people
+
+00:00:30.160 --> 00:00:33.239
+the process of thinking about a complex project,
+
+00:00:33.240 --> 00:00:35.879
+looking for little things to automate in Emacs,
+
+00:00:35.880 --> 00:00:38.439
+and building things up from small pieces.
+
+00:00:38.440 --> 00:00:39.799
+Maybe you'll get some ideas
+
+00:00:39.800 --> 00:00:42.759
+and start building tools for yourself, too.
+
+00:00:42.760 --> 00:00:47.039
+The third is that you find any of these little tools interesting,
+
+00:00:47.040 --> 00:00:49.439
+I want to point you to blog posts and source code
+
+00:00:49.440 --> 00:00:51.239
+where you can find out more.
+
+00:00:51.240 --> 00:00:52.559
+That way, you don't need to try
+
+00:00:52.560 --> 00:00:55.399
+to read and understand everything quickly.
+
+00:00:55.400 --> 00:00:57.719
+You can find this presentation and other links
+
+00:00:57.720 --> 00:01:04.439
+on the talk page at emacsconf.org/2023/talks/emacsconf.
+
+00:01:04.440 --> 00:01:06.319
+There are a lot of different parts,
+
+00:01:06.320 --> 00:01:09.399
+so I'll try to use this map to help make sense of it all.
+
+NOTE Information
+
+00:01:09.400 --> 00:01:11.199
+There's so much information to work with,
+
+00:01:11.200 --> 00:01:14.919
+so it probably doesn't surprise you that we use Org Mode a lot.
+
+00:01:14.920 --> 00:01:17.999
+Most of the conference coordination happens over e-mail,
+
+00:01:18.000 --> 00:01:20.639
+which I can quickly search with notmuch.
+
+00:01:20.640 --> 00:01:22.359
+Some of the information is private,
+
+00:01:22.360 --> 00:01:24.519
+like emergency contact numbers.
+
+00:01:24.520 --> 00:01:28.079
+We store the talk information in a private Org file.
+
+00:01:28.080 --> 00:01:30.079
+I try to put as much as possible
+
+00:01:30.080 --> 00:01:32.319
+into our public organizers' notebook
+
+00:01:32.320 --> 00:01:35.359
+so that processes and decisions are documented.
+
+00:01:35.360 --> 00:01:36.919
+We need a public website.
+
+00:01:36.920 --> 00:01:39.039
+We use Ikiwiki to make the webpages
+
+00:01:39.040 --> 00:01:41.119
+because we can work with plain text files
+
+00:01:41.120 --> 00:01:42.599
+in a Git repository.
+
+00:01:42.600 --> 00:01:45.399
+We also make a few static HTML pages
+
+00:01:45.400 --> 00:01:48.119
+for things where Ikiwiki is a little awkward.
+
+00:01:48.120 --> 00:01:50.519
+We post announcements to mailing lists.
+
+00:01:50.520 --> 00:01:53.159
+We also receive submissions in a private mailing list
+
+00:01:53.160 --> 00:01:55.639
+so that a number of people can review them.
+
+00:01:55.640 --> 00:01:56.839
+We have a backstage area
+
+00:01:56.840 --> 00:01:59.959
+for sharing files with volunteers and speakers.
+
+00:01:59.960 --> 00:02:03.119
+We share those files publicly when the talk goes live.
+
+00:02:03.120 --> 00:02:06.319
+And there's all the other stuff that goes into running EmacsConf,
+
+00:02:06.320 --> 00:02:09.159
+like shell scripts and configuration files.
+
+NOTE Properties
+
+00:02:09.160 --> 00:02:12.319
+First, speakers propose a talk by sending an e-mail.
+
+00:02:12.320 --> 00:02:15.799
+We take the info from that e-mail and store it in Org properties
+
+00:02:15.800 --> 00:02:18.199
+so that we can work with it later.
+
+00:02:18.200 --> 00:02:20.599
+Every talk is identified with an ID,
+
+00:02:20.600 --> 00:02:24.119
+but since `:ID:` and `:CUSTOM_ID:` have special meanings for Org,
+
+00:02:24.120 --> 00:02:25.399
+I use `:SLUG:` as the keyword.
+
+00:02:25.600 --> 00:02:27.759
+Speakers' names go into the `:NAME:` property,
+
+00:02:27.760 --> 00:02:29.799
+and a short version goes into `:NAME_SHORT:`
+
+00:02:29.800 --> 00:02:32.199
+so that we can include that in a greeting.
+
+00:02:32.200 --> 00:02:34.439
+If people follow the template closely...
+
+00:02:34.440 --> 00:02:38.039
+...we can even automatically fill in the Org subtree for their talk.
+
+00:02:38.040 --> 00:02:40.799
+We can use regular expressions to recognize the text
+
+00:02:40.800 --> 00:02:42.879
+and extract the properties.
+
+00:02:42.880 --> 00:02:45.359
+Other properties need to be set by hand.
+
+00:02:45.360 --> 00:02:47.559
+I often mess things up when I retype them.
+
+00:02:47.560 --> 00:02:51.039
+To avoid typos, I have a function that sets a property
+
+00:02:51.040 --> 00:02:56.039
+based on the current region. I bind that to `C-c C-x p`.
+
+00:02:56.040 --> 00:02:58.599
+That makes it much easier to set properties
+
+00:02:58.600 --> 00:03:01.239
+that couldn't automatically be recognized.
+
+00:03:01.240 --> 00:03:04.519
+Sometimes it makes sense to dynamically generate a property
+
+00:03:04.520 --> 00:03:07.679
+and then edit it, like with filenames.
+
+00:03:07.680 --> 00:03:10.399
+We like to name all the talk files the same way,
+
+00:03:10.400 --> 00:03:14.439
+but sometimes special characters in talk titles or speaker names
+
+00:03:14.440 --> 00:03:17.839
+need a little tweaking. I'll put that in a `:FILE_PREFIX:` property
+
+00:03:17.840 --> 00:03:19.439
+so I can edit it.
+
+00:03:19.440 --> 00:03:22.799
+An Org property match can map over all the talk entries
+
+00:03:22.800 --> 00:03:25.439
+that don't have `:FILE_PREFIX:` defined.
+
+00:03:25.440 --> 00:03:29.199
+We can use that `:FILE_PREFIX:` to rename files from Emacs.
+
+00:03:29.200 --> 00:03:32.639
+With that property, we can then rename files using that prefix,
+
+00:03:32.640 --> 00:03:35.639
+some extra text, and the file extension.
+
+00:03:35.640 --> 00:03:38.879
+Sometimes it's easier to work with the data outside Emacs,
+
+00:03:38.880 --> 00:03:42.119
+like when I want to rename files with a shell script.
+
+00:03:42.120 --> 00:03:45.319
+If I export a subset of the data as JSON
+
+00:03:45.320 --> 00:03:48.959
+or JavaScript Object Notation, using `json-encode`...
+
+00:03:48.960 --> 00:03:51.119
+... then I can extract the data with `jq`
+
+00:03:51.120 --> 00:03:53.119
+and use it in shell scripts.
+
+NOTE Timezones
+
+00:03:53.120 --> 00:03:55.639
+Another example of semi-structured information
+
+00:03:55.640 --> 00:03:57.299
+is speaker availability.
+
+00:03:57.300 --> 00:03:59.619
+We have speakers from all over the world,
+
+00:03:59.620 --> 00:04:03.019
+so we try to schedule live Q&A sessions when they're around.
+
+00:04:03.020 --> 00:04:05.019
+That means working with timezones.
+
+00:04:05.020 --> 00:04:08.439
+Completion makes it much easier to set the timezone property
+
+00:04:08.440 --> 00:04:10.599
+without worrying about typos.
+
+00:04:10.600 --> 00:04:14.359
+We can take advantage of the timezone list from the tzc package,
+
+00:04:14.360 --> 00:04:17.159
+which works with Unix timezone definitions.
+
+00:04:17.160 --> 00:04:19.919
+Then we can convert times using Emacs.
+
+00:04:19.920 --> 00:04:22.639
+Using a standard format to encode the availability
+
+00:04:22.640 --> 00:04:24.399
+makes it easier to parse.
+
+00:04:24.400 --> 00:04:27.439
+I can use those availability constraints to report errors
+
+00:04:27.440 --> 00:04:29.719
+when I'm experimenting with the schedule.
+
+NOTE Scheduling
+
+00:04:29.720 --> 00:04:31.679
+Now that I have the availability information,
+
+00:04:31.680 --> 00:04:33.940
+I can think about scheduling.
+
+00:04:33.941 --> 00:04:38.239
+When we were planning EmacsConf 2022, the schedule was so full,
+
+00:04:38.240 --> 00:04:40.839
+I wanted to see if we could make it more manageable
+
+00:04:40.840 --> 00:04:43.039
+by splitting it up into two tracks.
+
+00:04:43.040 --> 00:04:45.919
+It was hard to think about times with just a table.
+
+00:04:45.920 --> 00:04:48.199
+I was able to turn the schedule information
+
+00:04:48.200 --> 00:04:51.279
+into an SVG to convince the other organizers
+
+00:04:51.280 --> 00:04:53.359
+to get on board with this crazy plan.
+
+00:04:53.360 --> 00:04:54.959
+And the nice thing about SVGs is that
+
+00:04:54.960 --> 00:04:57.519
+they can even be clickable on the wiki.
+
+00:04:57.520 --> 00:05:00.639
+Being able to quickly make SVGs of different schedules
+
+00:05:00.640 --> 00:05:04.199
+also helped me test scheduling ideas and think out loud.
+
+00:05:04.200 --> 00:05:06.879
+I could change the time between talks, the order of the talks,
+
+00:05:06.880 --> 00:05:08.939
+and even what tracks the talks were in.
+
+00:05:08.940 --> 00:05:10.719
+This was helpful when I needed to include
+
+00:05:10.720 --> 00:05:13.239
+some late submissions or availability changes
+
+00:05:13.240 --> 00:05:15.599
+and I wanted to ask speakers what they thought.
+
+00:05:15.600 --> 00:05:18.799
+They could see the different schedule options themselves.
+
+00:05:18.800 --> 00:05:22.679
+It's really nice to have Emacs Lisp support for working with SVGs.
+
+00:05:22.680 --> 00:05:25.399
+I also love how I can have an Emacs Lisp block
+
+00:05:25.400 --> 00:05:28.599
+in an Org Mode document that updates an SVG
+
+00:05:28.600 --> 00:05:31.999
+that I can view right there in my text editor.
+
+00:05:32.000 --> 00:05:34.799
+Setting the timezone lets me automatically translate times
+
+00:05:34.800 --> 00:05:37.819
+to the speaker's local timezone when I e-mail them.
+
+00:05:37.820 --> 00:05:41.779
+That's mostly a matter of using `format-time-string` with a timezone.
+
+NOTE Templates
+
+00:05:41.780 --> 00:05:43.159
+There's a lot of text to work with,
+
+00:05:43.160 --> 00:05:45.699
+which means templates are super handy.
+
+00:05:45.700 --> 00:05:48.119
+There are a number of templating functions for Emacs Lisp,
+
+00:05:48.120 --> 00:05:52.959
+like the built-in `tempo.el` or `s-lex-format` from `s.el`.
+
+00:05:52.960 --> 00:05:54.439
+I ended up writing something
+
+00:05:54.440 --> 00:05:58.019
+that works with property lists (plists) instead,
+
+00:05:58.020 --> 00:06:02.199
+since we use plists all over the emacsconf-el library.
+
+00:06:02.200 --> 00:06:03.999
+All it does is replace `${variable}`
+
+00:06:04.000 --> 00:06:05.519
+with the value from a property list.
+
+00:06:05.520 --> 00:06:07.559
+I use this mostly because I have a hard time
+
+00:06:07.560 --> 00:06:11.079
+keeping track of which `%s` is which when I use `format`,
+
+00:06:11.080 --> 00:06:14.299
+and it's hard to get an overall view if I just use `concat`.
+
+00:06:14.300 --> 00:06:17.599
+The code looks for the properties and replaces them with the values.
+
+00:06:17.600 --> 00:06:21.299
+I just find it a little easier to think about sometimes.
+
+00:06:21.300 --> 00:06:24.079
+Getting all the information is just a matter of going over
+
+00:06:24.080 --> 00:06:27.399
+all the talk entries using `org-map-entries`.
+
+00:06:27.400 --> 00:06:30.699
+This builds the talk info by running a bunch of functions.
+
+00:06:30.700 --> 00:06:33.819
+Some functions get the information from the Org file.
+
+00:06:33.820 --> 00:06:36.959
+Other functions use the info already collected.
+
+00:06:36.960 --> 00:06:39.259
+This can take a while to do again and again.
+
+00:06:39.260 --> 00:06:41.739
+It's useful to `memoize` this function
+
+00:06:41.740 --> 00:06:43.499
+when I know I'll be using it a lot,
+
+00:06:43.500 --> 00:06:45.959
+like when I export the organizers notebook.
+
+00:06:45.960 --> 00:06:48.399
+Memoize caches recent values.
+
+NOTE Wiki
+
+00:06:48.400 --> 00:06:50.239
+We combine this templating function
+
+00:06:50.240 --> 00:06:51.479
+with the talk information
+
+00:06:51.480 --> 00:06:53.439
+to fill in the conference wiki,
+
+00:06:53.440 --> 00:06:56.479
+since that's a matter of writing templated strings to files.
+
+00:06:56.480 --> 00:06:58.279
+The talk pages are generated once
+
+00:06:58.280 --> 00:07:00.279
+and then left alone for manual editing,
+
+00:07:00.280 --> 00:07:02.399
+while the navigation is regenerated
+
+00:07:02.400 --> 00:07:04.659
+every time we change the details.
+
+00:07:04.660 --> 00:07:05.799
+Here are some examples
+
+00:07:05.800 --> 00:07:07.919
+of how we fill in the conference wiki.
+
+00:07:07.920 --> 00:07:10.959
+We put in the format of the talk, how Q&A works,
+
+00:07:10.960 --> 00:07:12.319
+and what the status is.
+
+00:07:12.320 --> 00:07:14.959
+Once the talk is live, we include the video
+
+00:07:14.960 --> 00:07:17.079
+and the links to the files, too.
+
+00:07:17.080 --> 00:07:18.719
+The code is a little bit long,
+
+00:07:18.720 --> 00:07:20.079
+but the important part is that
+
+00:07:20.080 --> 00:07:22.879
+we fill in a plist with the values we calculate,
+
+00:07:22.880 --> 00:07:26.379
+and then we can use `emacsconf-replace-plist-in-string`
+
+00:07:26.380 --> 00:07:28.019
+to put that all together.
+
+00:07:28.020 --> 00:07:30.279
+The schedule is a little more complicated.
+
+00:07:30.280 --> 00:07:32.079
+I wrote an Ikiwiki directive
+
+00:07:32.080 --> 00:07:34.019
+so that the markup is more manageable,
+
+00:07:34.020 --> 00:07:36.519
+and the Emacs Lisp function uses that.
+
+00:07:36.520 --> 00:07:40.619
+The Ikiwiki directive takes all the data and turns it into HTML...
+
+00:07:40.620 --> 00:07:42.959
+...so we can use Emacs Lisp to iterate over
+
+00:07:42.960 --> 00:07:44.819
+a slightly smaller property list
+
+00:07:44.820 --> 00:07:47.779
+and put them into the format Ikiwiki expects.
+
+00:07:47.780 --> 00:07:50.079
+It's nice to be able to navigate between talks
+
+00:07:50.080 --> 00:07:52.839
+without going back to the schedule page each time.
+
+00:07:52.840 --> 00:07:55.579
+This is handled by keeping two extra copies of the list:
+
+00:07:55.580 --> 00:07:57.559
+one with the first talk popped off,
+
+00:07:57.560 --> 00:08:00.359
+and one with an extra element added to the beginning.
+
+00:08:00.360 --> 00:08:02.439
+Then we can use the heads of those lists
+
+00:08:02.440 --> 00:08:04.379
+for next/previous links.
+
+NOTE Etherpad
+
+00:08:04.380 --> 00:08:06.679
+Links to the next talks are also handy
+
+00:08:06.680 --> 00:08:08.639
+on the collaborative Etherpad documents
+
+00:08:08.640 --> 00:08:12.039
+that we use for collecting questions, answers, and notes
+
+00:08:12.040 --> 00:08:12.839
+during each talk.
+
+00:08:12.840 --> 00:08:15.299
+Etherpad has an API...
+
+00:08:15.300 --> 00:08:17.319
+...so I can start the pads off with a template
+
+00:08:17.320 --> 00:08:18.939
+before the conference.
+
+00:08:18.940 --> 00:08:21.239
+I don't want to accidentally overwrite a pad
+
+00:08:21.240 --> 00:08:22.939
+that has been manually edited.
+
+00:08:22.940 --> 00:08:25.719
+We can save the timestamp of the last modification
+
+00:08:25.720 --> 00:08:28.199
+and then compare it before overwriting.
+
+NOTE E-mail
+
+00:08:28.200 --> 00:08:31.239
+Templates are also very handy when it comes to e-mail.
+
+00:08:31.240 --> 00:08:33.599
+Sometimes we send e-mails one at a time,
+
+00:08:33.600 --> 00:08:35.199
+like when we let a speaker know
+
+00:08:35.200 --> 00:08:36.879
+that we've received their proposal.
+
+00:08:36.880 --> 00:08:39.559
+That's mostly a matter of plugging the talk's properties
+
+00:08:39.560 --> 00:08:41.559
+into the right places in the template.
+
+00:08:41.560 --> 00:08:45.019
+Sometimes we send e-mails to lots of speakers at the same time,
+
+00:08:45.020 --> 00:08:48.299
+like when we send them instructions for uploading their files.
+
+00:08:48.300 --> 00:08:51.619
+Instead of sending one e-mail and Bcc-ing everyone,
+
+00:08:51.620 --> 00:08:53.479
+or sending people multiple e-mails
+
+00:08:53.480 --> 00:08:55.139
+because they have multiple talks,
+
+00:08:55.140 --> 00:08:57.559
+I like to draft these as individual e-mails
+
+00:08:57.560 --> 00:08:59.799
+to each speaker (or group of speakers,
+
+00:08:59.800 --> 00:09:02.599
+if more than one person is associated with a talk).
+
+00:09:02.600 --> 00:09:05.919
+That gives me an opportunity to personalize it further.
+
+NOTE BigBlueButton web conferences
+
+00:09:05.920 --> 00:09:08.119
+Many speakers answer questions live
+
+00:09:08.120 --> 00:09:10.039
+in BigBlueButton web conference rooms.
+
+00:09:10.440 --> 00:09:12.639
+Setting up one room per group of speakers
+
+00:09:12.640 --> 00:09:15.199
+makes it easy to give the speakers the details
+
+00:09:15.400 --> 00:09:18.719
+and associate the recorded video with the talk afterwards.
+
+00:09:18.720 --> 00:09:20.599
+For EmacsConf 2023,
+
+00:09:20.600 --> 00:09:25.079
+I used Spookfox to control Mozilla Firefox from Emacs
+
+00:09:25.080 --> 00:09:27.479
+so that I could automate creating the rooms
+
+00:09:27.480 --> 00:09:30.919
+and adding the URLs to the talk properties in my Org file.
+
+00:09:30.957 --> 00:09:33.959
+Then I can use mail merge to send each speaker
+
+00:09:33.960 --> 00:09:36.899
+the check-in instructions for their specific room.
+
+00:09:36.900 --> 00:09:39.139
+Some speakers will take questions by e-mail
+
+00:09:39.140 --> 00:09:41.619
+after the conference instead of attending live,
+
+00:09:41.620 --> 00:09:43.359
+so we send them shorter instructions
+
+00:09:43.360 --> 00:09:45.539
+just in case they want to drop by.
+
+00:09:45.540 --> 00:09:47.799
+[Live Q&A sessions]: After the first rush of questions,
+
+00:09:47.800 --> 00:09:50.579
+we can open it up for other people to join.
+
+00:09:50.580 --> 00:09:53.039
+This is handled by changing the public page
+
+00:09:53.040 --> 00:09:55.119
+from one that just refreshes in a loop
+
+00:09:55.120 --> 00:09:58.820
+to one that redirects to the actual web conference room.
+
+00:09:58.821 --> 00:10:00.079
+Just in case, we also
+
+00:10:00.080 --> 00:10:02.159
+generate static copies of those redirects
+
+00:10:02.160 --> 00:10:04.299
+so that we can copy them if needed.
+
+00:10:04.300 --> 00:10:06.679
+That way, I don't have to count on Emacs being able to
+
+00:10:06.680 --> 00:10:08.120
+publish them over TRAMP.
+
+NOTE Shortcuts
+
+00:10:08.121 --> 00:10:11.659
+During the conference, I'm often jumping from talk to talk.
+
+00:10:11.660 --> 00:10:13.199
+Instead of going to the Org file
+
+00:10:13.200 --> 00:10:14.519
+and then searching for the talk,
+
+00:10:14.520 --> 00:10:17.239
+I've made a little Hydra with keyboard shortcuts.
+
+00:10:17.240 --> 00:10:19.079
+One of these shortcuts lets me
+
+00:10:19.080 --> 00:10:20.959
+jump to a talk with completion
+
+00:10:20.960 --> 00:10:24.259
+so that I can just type in part of the talk ID,
+
+00:10:24.260 --> 00:10:26.399
+title, or speaker name.
+
+00:10:26.400 --> 00:10:28.679
+I've also defined some Embark actions
+
+00:10:28.680 --> 00:10:32.079
+so that I can act on a talk right from the completion menu.
+
+00:10:32.080 --> 00:10:35.079
+For example, I might want to jump to the wiki page
+
+00:10:35.080 --> 00:10:36.699
+or e-mail the speaker.
+
+NOTE Logbook
+
+00:10:36.700 --> 00:10:40.099
+I can also add notes to a talk while looking at an email,
+
+00:10:40.100 --> 00:10:41.639
+like when a speaker lets me know
+
+00:10:41.640 --> 00:10:43.279
+that their video will be late.
+
+00:10:43.280 --> 00:10:45.799
+Making it easy to add a note turns Emacs into
+
+00:10:45.800 --> 00:10:49.959
+a very basic contact relationship management system, or CRM.
+
+00:10:49.960 --> 00:10:52.439
+The way this works is that we have a function
+
+00:10:52.440 --> 00:10:55.459
+that lists all the email addresses associated with a talk.
+
+00:10:55.460 --> 00:10:57.919
+We can then map that over the list of talks,
+
+00:10:57.920 --> 00:10:59.959
+look up the author of the current email,
+
+00:10:59.960 --> 00:11:03.679
+prompt the user for the talk to add the note to, and add the note.
+
+NOTE Captions
+
+00:11:03.680 --> 00:11:04.679
+On to captions.
+
+00:11:04.680 --> 00:11:07.239
+We've been doing captions for the last couple of years,
+
+00:11:07.240 --> 00:11:10.419
+and now we have a small army of volunteer captioners.
+
+00:11:10.420 --> 00:11:12.679
+They get early access to the recorded talks
+
+00:11:12.680 --> 00:11:16.159
+and fix up misrecognized words, format keyboard shortcuts
+
+00:11:16.160 --> 00:11:19.579
+to follow Emacs conventions, spell names correctly,
+
+00:11:19.580 --> 00:11:21.839
+and do all sorts of other wonderful things.
+
+00:11:21.840 --> 00:11:24.399
+One of our evil plans with EmacsConf
+
+00:11:24.400 --> 00:11:28.359
+is to get cool stuff out of people's heads into videos
+
+00:11:28.360 --> 00:11:32.039
+and also make captions so that those videos can be searched.
+
+00:11:32.040 --> 00:11:34.999
+To make that possible, we first need a backstage area
+
+00:11:35.000 --> 00:11:36.919
+where volunteers can get the files.
+
+00:11:36.920 --> 00:11:39.839
+This is just a simple password-protected directory
+
+00:11:39.840 --> 00:11:43.739
+with a static HTML page that lists the talks by status
+
+00:11:43.740 --> 00:11:46.379
+and shows the files related to each talk.
+
+00:11:46.380 --> 00:11:49.899
+As a talk moves through the process, I update its TODO state
+
+00:11:49.900 --> 00:11:51.359
+and republish this index.
+
+00:11:51.360 --> 00:11:54.519
+Talks that are ready to be captioned show up in that section,
+
+00:11:54.520 --> 00:11:58.179
+and volunteers can call dibs on the talk they're interested in.
+
+00:11:58.180 --> 00:12:00.979
+That's all done with a function that formats the information
+
+00:12:00.980 --> 00:12:04.319
+and uses TRAMP to save the file directly to the server.
+
+00:12:04.320 --> 00:12:06.679
+You can find more details on our captioning process
+
+00:12:06.680 --> 00:12:09.039
+at emacsconf.org/captioning.
+
+00:12:09.040 --> 00:12:13.219
+I like using subed to edit subtitles within Emacs.
+
+NOTE Crontabs and playing the talks
+
+00:12:13.220 --> 00:12:16.059
+Let's talk about actually playing the talks.
+
+00:12:16.060 --> 00:12:19.559
+For EmacsConf 2022, we tried using Emacs timers
+
+00:12:19.560 --> 00:12:20.939
+to run the talks.
+
+00:12:20.940 --> 00:12:24.079
+It turns out that you can't call TRAMP from a timer
+
+00:12:24.080 --> 00:12:26.719
+when you're already using TRAMP from another timer
+
+00:12:26.720 --> 00:12:27.799
+at the same time.
+
+00:12:27.800 --> 00:12:29.719
+I thought about just tweaking the schedule
+
+00:12:29.720 --> 00:12:31.799
+so that we always start things at different times,
+
+00:12:31.800 --> 00:12:35.119
+but I figured there's probably a more elegant way to do this.
+
+00:12:35.120 --> 00:12:37.519
+This year, I'm planning to experiment with using cron
+
+00:12:37.520 --> 00:12:39.599
+to start talks on autopilot.
+
+00:12:39.600 --> 00:12:42.479
+The shell scripts will take care of playing the videos...
+
+00:12:42.480 --> 00:12:44.839
+... figuring out the appropriate Q&A...
+
+00:12:44.840 --> 00:12:47.579
+... and joining the web conference if needed.
+
+00:12:47.580 --> 00:12:49.599
+We just need to format the information...
+
+00:12:49.600 --> 00:12:52.219
+...and install it as the track's crontab.
+
+00:12:52.220 --> 00:12:54.079
+It's useful to be able to switch tracks
+
+00:12:54.080 --> 00:12:55.879
+to manual mode independently,
+
+00:12:55.880 --> 00:12:57.899
+just in case things go haywire.
+
+00:12:57.900 --> 00:13:00.119
+Then we can start everything manually.
+
+00:13:00.120 --> 00:13:02.799
+I can also manually update a talk's status,
+
+00:13:02.800 --> 00:13:06.519
+like when the host tells me that it's okay to open up the Q&A.
+
+00:13:06.520 --> 00:13:08.719
+The shell scripts we run from the crontab
+
+00:13:08.720 --> 00:13:11.279
+can also update the talk status themselves.
+
+NOTE Transitions
+
+00:13:11.280 --> 00:13:14.319
+Then a bunch of things automatically happen based on
+
+00:13:14.320 --> 00:13:15.599
+the talk status changes.
+
+00:13:15.600 --> 00:13:18.959
+This uses `org-after-todo-state-change-hook`.
+
+00:13:18.960 --> 00:13:20.359
+We get the talk information
+
+00:13:20.360 --> 00:13:22.519
+and pass it to a list of functions.
+
+00:13:22.520 --> 00:13:26.279
+Internet Relay Chat or IRC is an easy way for people
+
+00:13:26.280 --> 00:13:29.139
+to join the conversation around EmacsConf.
+
+00:13:29.140 --> 00:13:31.799
+We announce a talk whenever it changes state.
+
+00:13:31.800 --> 00:13:33.599
+For example, when a talk starts,
+
+00:13:33.600 --> 00:13:36.039
+we post the URLs to the talk webpage
+
+00:13:36.040 --> 00:13:39.439
+and the Etherpad for questions. We change the topic as well,
+
+00:13:39.440 --> 00:13:41.879
+so anyone can see the current talk's information
+
+00:13:41.880 --> 00:13:43.039
+even if they're a little late.
+
+00:13:43.180 --> 00:13:45.799
+This is easy to do with a little bit of Emacs Lisp
+
+00:13:45.800 --> 00:13:48.519
+because (of course!) Emacs has an IRC client.
+
+00:13:48.520 --> 00:13:49.879
+In fact, it has several.
+
+NOTE Wrapping up
+
+00:13:49.880 --> 00:13:53.139
+It seems like a lot of automation and Emacs Lisp,
+
+00:13:53.140 --> 00:13:56.899
+but really, all of this was just built up little by little.
+
+00:13:56.900 --> 00:13:59.279
+And tinkering with this is *fun*, you know?
+
+00:13:59.280 --> 00:14:01.259
+It's like always being able to ask,
+
+00:14:01.260 --> 00:14:03.300
+"Hey, wouldn't it be cool if..."
+
+00:14:03.301 --> 00:14:05.279
+and then actually being able to go and do it.
+
+00:14:05.280 --> 00:14:07.999
+Sometimes it feels like EmacsConf is an excuse
+
+00:14:08.000 --> 00:14:10.199
+for me to play with Emacs.
+
+00:14:10.200 --> 00:14:11.999
+It's pretty amazing what you can do
+
+00:14:12.000 --> 00:14:13.799
+by combining a bunch of pieces.
+
+00:14:13.800 --> 00:14:16.719
+A way to store slightly-structured information.
+
+00:14:16.720 --> 00:14:18.879
+A way to get it out again. Templates.
+
+00:14:18.880 --> 00:14:20.679
+TRAMP, for working with remote files
+
+00:14:20.680 --> 00:14:21.919
+and running remote commands.
+
+00:14:21.920 --> 00:14:23.839
+A way to talk to a web browser.
+
+00:14:23.840 --> 00:14:25.399
+A way to work with SVGs.
+
+00:14:25.400 --> 00:14:27.759
+An email client. A chat client.
+
+00:14:27.760 --> 00:14:29.639
+You can smoosh them all together
+
+00:14:29.640 --> 00:14:32.699
+in a way that you couldn't if they were all separate things.
+
+00:14:32.700 --> 00:14:36.279
+The code is in the emacsconf-el repository.
+
+00:14:36.280 --> 00:14:39.119
+It's a bit of a tangle because it's accumulating organically
+
+00:14:39.120 --> 00:14:40.879
+and I haven't really had the brainspace
+
+00:14:40.880 --> 00:14:42.579
+to step back and clean it up.
+
+00:14:42.580 --> 00:14:45.919
+But if you spotted anything interesting in this presentation,
+
+00:14:45.920 --> 00:14:48.619
+you can go check it out and see what you can scavenge.
+
+00:14:48.620 --> 00:14:50.999
+The link and this presentation are available
+
+00:14:51.000 --> 00:14:59.119
+from this talk's webpage at emacsconf.org/2023/talks/emacsconf .
+
+00:14:59.120 --> 00:15:05.200
+Let's figure out how to make Emacsconf even awesomer next year!
diff --git a/2023/captions/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--answers.vtt b/2023/captions/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--answers.vtt
new file mode 100644
index 00000000..4f89a184
--- /dev/null
+++ b/2023/captions/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--answers.vtt
@@ -0,0 +1,3803 @@
+WEBVTT
+
+
+00:00:00.040 --> 00:00:00.540
+[Speaker 0]: Here.
+
+00:00:05.140 --> 00:00:05.440
+[Speaker 1]: All right. Yeah. So thanks,
+
+00:00:06.279 --> 00:00:06.779
+Fermin, for the great talk.
+
+00:00:08.039 --> 00:00:08.540
+People have questions,
+
+00:00:12.179 --> 00:00:12.380
+please post them on the pad or the IRC as
+
+00:00:13.259 --> 00:00:13.759
+well and we'll take them up.
+
+00:00:17.240 --> 00:00:17.480
+[Speaker 2]: Thank you very much. The guests will be here
+
+00:00:21.720 --> 00:00:22.220
+to answer questions. Let's see.
+
+00:00:23.560 --> 00:00:24.060
+Yep.
+
+00:00:28.080 --> 00:00:28.220
+[Speaker 1]: And also, Fermin, if you later want to
+
+00:00:30.660 --> 00:00:31.160
+clarify anything or fix any URLs or such,
+
+00:00:32.860 --> 00:00:33.000
+you're always welcome to do that either like
+
+00:00:36.000 --> 00:00:36.140
+on the Wiki page, or if you like email any of
+
+00:00:37.560 --> 00:00:37.840
+the organizers, they should be able to help
+
+00:00:38.400 --> 00:00:38.900
+with that as well.
+
+00:00:41.000 --> 00:00:41.500
+[Speaker 2]: Okay. Yeah, I put the wrong URL.
+
+00:00:46.020 --> 00:00:46.360
+Yeah, not a big deal really,
+
+00:00:48.480 --> 00:00:48.980
+if you look it up. Yeah,
+
+00:00:50.940 --> 00:00:51.440
+that's really better. Thank you very much.
+
+00:00:56.920 --> 00:00:57.420
+Checking, no questions.
+
+00:00:58.780 --> 00:00:59.280
+Very good to be in touch.
+
+00:01:17.220 --> 00:01:17.360
+[Speaker 1]: Oh, we have a question here in the big blue
+
+00:01:17.720 --> 00:01:18.220
+button chat.
+
+00:01:21.820 --> 00:01:22.320
+[Speaker 2]: Oh, public chat. I see.
+
+00:01:26.380 --> 00:01:26.600
+Is LEM an acronym? I think it is,
+
+00:01:32.960 --> 00:01:33.080
+but I never remember. The complete name is
+
+00:01:36.160 --> 00:01:36.660
+like something... It's also a circle,
+
+00:01:38.940 --> 00:01:39.440
+like, you know, a self-referencing,
+
+00:01:41.320 --> 00:01:41.820
+you know, recursive name.
+
+00:01:42.900 --> 00:01:43.400
+I never remember it, sorry.
+
+00:01:45.860 --> 00:01:46.360
+It's like... Yeah, someone...
+
+00:01:50.580 --> 00:01:51.080
+Okay, someone asked about the DEM community,
+
+00:01:56.200 --> 00:01:56.700
+how big it is. So I don't remember,
+
+00:01:57.500 --> 00:01:57.720
+to answer the question,
+
+00:01:58.440 --> 00:01:58.740
+I don't remember the acronym,
+
+00:02:00.640 --> 00:02:01.140
+but it is an acronym. I just never...
+
+00:02:04.700 --> 00:02:05.060
+And it's not written anywhere,
+
+00:02:06.380 --> 00:02:06.880
+I think, or someone...
+
+00:02:09.340 --> 00:02:09.840
+I never check it. So I...
+
+00:02:12.720 --> 00:02:13.220
+[Speaker 0]: I forgot.
+
+00:02:15.360 --> 00:02:15.820
+[Speaker 2]: My maintainer told me once and then So,
+
+00:02:17.540 --> 00:02:17.900
+whole large, does Leia have a package
+
+00:02:19.800 --> 00:02:20.300
+manager? We do have a package manager,
+
+00:02:21.900 --> 00:02:22.400
+funnily enough. We use the QuickLisp
+
+00:02:26.200 --> 00:02:26.700
+infrastructure to get packages,
+
+00:02:29.580 --> 00:02:30.080
+so it's very easy to install packages.
+
+00:02:33.340 --> 00:02:33.840
+So basically, we don't have a package manager
+
+00:02:35.740 --> 00:02:36.240
+as in Emacs, half a packet.l.
+
+00:02:39.140 --> 00:02:39.400
+We're using the same common list
+
+00:02:41.180 --> 00:02:41.460
+infrastructure to provide the different
+
+00:02:45.560 --> 00:02:46.060
+packages. We also have a talk with the
+
+00:02:47.360 --> 00:02:47.620
+Ultralisp, which is like a,
+
+00:02:48.640 --> 00:02:48.900
+you know, QuickLisp is like,
+
+00:02:50.020 --> 00:02:50.520
+you can think quickly of Melpa.
+
+00:02:52.540 --> 00:02:53.040
+Ultralisp is like a fast Melpa,
+
+00:02:54.440 --> 00:02:54.900
+very fast Melpa, that every,
+
+00:02:58.460 --> 00:02:58.660
+I think every day you can get a package from
+
+00:03:01.720 --> 00:03:01.880
+them. And We have a tag system that you can
+
+00:03:02.920 --> 00:03:03.420
+submit a package and get a tag,
+
+00:03:08.180 --> 00:03:08.360
+and Theory can download those packages with
+
+00:03:13.140 --> 00:03:13.640
+the lem tag. So the thing is,
+
+00:03:17.040 --> 00:03:17.440
+it's not yet, it doesn't have a user
+
+00:03:18.400 --> 00:03:18.900
+interface to install packages.
+
+00:03:22.020 --> 00:03:22.520
+Still, it's 2 external packages.
+
+00:03:25.520 --> 00:03:25.920
+For now, imagine this is like the early
+
+00:03:27.560 --> 00:03:27.960
+Emacs, right? Everything is going to the core
+
+00:03:29.040 --> 00:03:29.540
+for now, because we need that functionality.
+
+00:03:32.360 --> 00:03:32.680
+In the future, we probably will split it up
+
+00:03:37.120 --> 00:03:37.620
+way more. But let me first answer a question
+
+00:03:42.440 --> 00:03:42.740
+in the other part. How large is the LEN
+
+00:03:44.440 --> 00:03:44.720
+community? Hope it's a chance of survival
+
+00:03:47.360 --> 00:03:47.860
+long term. So we are a very small community,
+
+00:03:51.260 --> 00:03:51.760
+mostly because Sasaki-san,
+
+00:03:54.120 --> 00:03:54.620
+the main developers of the community,
+
+00:03:57.160 --> 00:03:57.440
+are from Japan and some of them,
+
+00:03:58.620 --> 00:03:59.120
+or most of them, don't know English.
+
+00:04:01.640 --> 00:04:01.960
+At the beginning, LEM was a very
+
+00:04:05.020 --> 00:04:05.220
+Japanese-centric tooling because barrier of
+
+00:04:06.960 --> 00:04:07.460
+language, most of the users are from Japan.
+
+00:04:08.640 --> 00:04:09.140
+So different communities.
+
+00:04:12.040 --> 00:04:12.260
+And also, I don't know why,
+
+00:04:13.100 --> 00:04:13.520
+but the main maintainer,
+
+00:04:17.740 --> 00:04:18.079
+which is Asaki-san, very good guy and a very,
+
+00:04:19.079 --> 00:04:19.579
+very talented developer.
+
+00:04:21.779 --> 00:04:22.280
+He doesn't like to, you know,
+
+00:04:24.640 --> 00:04:25.020
+at first the project was all in Japanese,
+
+00:04:27.100 --> 00:04:27.260
+so he doesn't care if someone uses the
+
+00:04:28.520 --> 00:04:29.020
+project or not. He's more focused on the,
+
+00:04:32.080 --> 00:04:32.560
+I guess, quality of the features of it.
+
+00:04:35.740 --> 00:04:36.240
+So that creates a problem that doesn't really
+
+00:04:38.680 --> 00:04:39.000
+mind the community. So the community doesn't
+
+00:04:41.640 --> 00:04:41.760
+mind in a good way. It's to focus more on
+
+00:04:43.440 --> 00:04:43.940
+technicality rather than the user,
+
+00:04:46.300 --> 00:04:46.800
+which I mean, I cannot blame him.
+
+00:04:49.540 --> 00:04:49.700
+It's very hard work to build an Emacs and
+
+00:04:52.540 --> 00:04:53.040
+editor from scratch. It's not a trivial task.
+
+00:04:56.160 --> 00:04:56.660
+So yeah, we're a very small community.
+
+00:04:58.660 --> 00:04:58.940
+But I think the chance of survival is very
+
+00:05:01.440 --> 00:05:01.640
+good because LEM is written in ANSI Common
+
+00:05:04.540 --> 00:05:05.040
+Lisp, so it should be used in any...
+
+00:05:07.440 --> 00:05:07.940
+Well, it works in a lot of Common Lisp
+
+00:05:10.400 --> 00:05:10.900
+implementation. For people who don't know,
+
+00:05:12.180 --> 00:05:12.400
+Common Lisp is a language that was
+
+00:05:13.140 --> 00:05:13.640
+standardized in the 94.
+
+00:05:14.640 --> 00:05:14.840
+I explained that in the talk,
+
+00:05:15.660 --> 00:05:16.160
+but I'll say it again.
+
+00:05:18.080 --> 00:05:18.580
+So, if Common Lisp exists,
+
+00:05:21.200 --> 00:05:21.700
+in theory, LEM should also exist.
+
+00:05:24.340 --> 00:05:24.840
+And also if nCursor doesn't break or doesn't
+
+00:05:27.560 --> 00:05:28.060
+stop to exist, which is even less likely.
+
+00:05:30.400 --> 00:05:30.900
+So that's the main idea.
+
+00:05:33.460 --> 00:05:33.740
+And you can use LEM for very good Common Lisp
+
+00:05:36.380 --> 00:05:36.600
+development already. If Common Lisp doesn't
+
+00:05:39.440 --> 00:05:39.940
+change that much, it should disappear.
+
+00:05:42.720 --> 00:05:43.220
+We are not bound to any company or any...
+
+00:05:46.040 --> 00:05:46.540
+Even Sasaki-san, God forbid,
+
+00:05:47.720 --> 00:05:48.220
+disappears instantaneously.
+
+00:05:50.280 --> 00:05:50.740
+There are a few people,
+
+00:05:52.260 --> 00:05:52.440
+me included, that know very well the code
+
+00:05:54.020 --> 00:05:54.520
+base and we can continue the development.
+
+00:05:56.320 --> 00:05:56.720
+So it's not like 1, there's no one-man
+
+00:05:58.860 --> 00:05:59.360
+project. Maybe a four-man project or 5,
+
+00:06:04.280 --> 00:06:04.640
+but not 1. Okay, I'll answer the 1 in the
+
+00:06:08.100 --> 00:06:08.600
+chat, on the blue button.
+
+00:06:10.520 --> 00:06:10.840
+Is it best to learn Common Lisp before
+
+00:06:13.100 --> 00:06:13.600
+learning to use LEM? I think this is similar
+
+00:06:15.780 --> 00:06:16.280
+to Emacs and EmacLisp,
+
+00:06:18.740 --> 00:06:19.080
+right? Should you use EmacLisp before using
+
+00:06:20.160 --> 00:06:20.460
+Emacs? Doesn't make too much sense,
+
+00:06:23.360 --> 00:06:23.860
+right? You see Emacs and then you go learning
+
+00:06:28.620 --> 00:06:29.060
+Common Lisp. I think it's the same,
+
+00:06:30.800 --> 00:06:31.300
+sorry, EmacsLisp. And it's the same with LEM.
+
+00:06:32.800 --> 00:06:33.300
+You can start using LEM with a non-common
+
+00:06:37.800 --> 00:06:38.040
+Lisp, which is fine. You can use it to edit
+
+00:06:39.020 --> 00:06:39.520
+your things. It's like an editor.
+
+00:06:42.900 --> 00:06:43.040
+But like Emacs, LEM puts a lot of focus on
+
+00:06:46.820 --> 00:06:46.960
+extensibility. So it's very probable that you
+
+00:06:49.920 --> 00:06:50.420
+will learn how to write Common Lisp.
+
+00:06:53.440 --> 00:06:53.600
+I have to say that a lot of people that use
+
+00:06:56.000 --> 00:06:56.440
+LEM, well, me and most of the people,
+
+00:06:59.060 --> 00:06:59.440
+come from Emacs. So if you come from Emacs
+
+00:07:00.620 --> 00:07:01.120
+and you know a little bit of Emac Lisp,
+
+00:07:04.820 --> 00:07:05.320
+Common Lisp is like an uncle or cousin
+
+00:07:07.120 --> 00:07:07.620
+distance that shares some similarities.
+
+00:07:09.820 --> 00:07:10.020
+So you will... Well, it's not going to be
+
+00:07:12.520 --> 00:07:13.020
+that. I can show... Sorry about that.
+
+00:07:14.960 --> 00:07:15.460
+For example, I show that in the...
+
+00:07:21.780 --> 00:07:22.280
+I can show... So the...
+
+00:07:27.080 --> 00:07:27.540
+It's not that different from Emacs regarding
+
+00:07:28.940 --> 00:07:29.440
+configuration. So for example,
+
+00:07:31.020 --> 00:07:31.520
+this command doesn't exist on LEM.
+
+00:07:35.020 --> 00:07:35.520
+And Sasaki-san didn't want to copy one-to-one
+
+00:07:36.360 --> 00:07:36.860
+the command from Emacs,
+
+00:07:39.660 --> 00:07:39.860
+the airgrip, the cursor grip command of
+
+00:07:41.120 --> 00:07:41.620
+Emacs. And I said, okay,
+
+00:07:43.080 --> 00:07:43.440
+then I'm going to implement it myself.
+
+00:07:44.240 --> 00:07:44.740
+And it's something like this,
+
+00:07:47.960 --> 00:07:48.080
+which is you will do something similar to
+
+00:07:50.320 --> 00:07:50.500
+Emacs, right? This will be like things at
+
+00:07:52.280 --> 00:07:52.780
+point symbol or something like that.
+
+00:07:54.740 --> 00:07:55.240
+And then you have a prompt,
+
+00:07:59.060 --> 00:07:59.440
+very prompt for directory with Emacs would be
+
+00:08:01.260 --> 00:08:01.560
+something similar. And then you then launch
+
+00:08:02.960 --> 00:08:03.460
+grep with the command that you want.
+
+00:08:06.340 --> 00:08:06.780
+This is not that far from Emacs,
+
+00:08:10.680 --> 00:08:10.840
+this, really. If you don't know neither of
+
+00:08:12.740 --> 00:08:13.240
+those, you can still use LEM,
+
+00:08:16.560 --> 00:08:17.060
+though as with Emacs, extensibility will be,
+
+00:08:22.440 --> 00:08:22.760
+well, you couldn't extend it if you don't
+
+00:08:28.700 --> 00:08:29.100
+know combo disp. Should I answer the question
+
+00:08:33.280 --> 00:08:33.780
+on the etherpad writing it at the same time?
+
+00:08:36.580 --> 00:08:36.760
+[Speaker 1]: You're welcome to, but you don't have to.
+
+00:08:38.000 --> 00:08:38.500
+You can just answer here on stream,
+
+00:08:40.440 --> 00:08:40.940
+[Speaker 2]: on the Google button. Okay.
+
+00:08:43.140 --> 00:08:43.640
+Okay. Are there any Lisp machine capabilities
+
+00:08:45.020 --> 00:08:45.280
+you're trying to provide that GNU image
+
+00:08:46.920 --> 00:08:47.040
+lacks? The type objects capability in the
+
+00:08:47.560 --> 00:08:48.060
+editor, as an example.
+
+00:08:53.840 --> 00:08:54.340
+I mean, there were a few discussions about
+
+00:08:59.920 --> 00:09:00.060
+the Lisp machines and LEM and all the big
+
+00:09:03.080 --> 00:09:03.280
+projects that tries to get some capability of
+
+00:09:05.180 --> 00:09:05.680
+it. But we don't really...
+
+00:09:09.840 --> 00:09:10.340
+We try to improve the development experience
+
+00:09:12.800 --> 00:09:13.300
+for Common Lisp and for LEM,
+
+00:09:18.460 --> 00:09:18.660
+imitating a lot of things that the Lisp
+
+00:09:21.560 --> 00:09:22.060
+machine had. I'm going to try to do a thing
+
+00:09:23.400 --> 00:09:23.900
+that I don't know if it's going to work.
+
+00:09:26.880 --> 00:09:27.380
+So to explain this, let's see.
+
+00:09:35.680 --> 00:09:36.180
+I'm going to recompile them now live.
+
+00:09:42.040 --> 00:09:42.540
+Let's see how it works.
+
+00:09:47.860 --> 00:09:48.240
+And compiling the, yes,
+
+00:09:51.780 --> 00:09:52.280
+it doesn't work. OK. What if I do?
+
+00:09:53.900 --> 00:09:54.220
+No, it doesn't work. OK.
+
+00:09:55.280 --> 00:09:55.760
+I was trying to compile the SDL2,
+
+00:09:57.540 --> 00:09:58.040
+but I do have the codebase modifier.
+
+00:10:00.360 --> 00:10:00.860
+I should be able to compile this.
+
+00:10:05.640 --> 00:10:06.140
+Oh, that was really bad.
+
+00:10:13.320 --> 00:10:13.580
+What about example? I have the code base,
+
+00:10:17.220 --> 00:10:17.720
+so let me check. I'm going to do this.
+
+00:10:19.080 --> 00:10:19.580
+Oh, yeah, I have this modified.
+
+00:10:31.120 --> 00:10:31.620
+I stash this. OK. I have this modified.
+
+00:10:33.280 --> 00:10:33.780
+Now it should work. OK.
+
+00:10:42.480 --> 00:10:42.820
+Sorry. I was going to show the writing
+
+00:10:45.620 --> 00:10:45.900
+capabilities of it, similar to the Lisp
+
+00:10:47.800 --> 00:10:48.300
+machine of navigating of classes.
+
+00:10:52.000 --> 00:10:52.500
+So the answer of that question is,
+
+00:10:57.040 --> 00:10:57.180
+not really. We don't try to emulate this
+
+00:10:58.440 --> 00:10:58.940
+machine, nor any like of that.
+
+00:11:05.500 --> 00:11:06.000
+But yeah. Let me, I'm going to try to,
+
+00:11:07.120 --> 00:11:07.620
+okay, now I'm back at them.
+
+00:11:12.180 --> 00:11:12.500
+Okay. So what about using them for things
+
+00:11:13.260 --> 00:11:13.760
+other than common, common,
+
+00:11:16.160 --> 00:11:16.500
+that markets? Okay. So yes,
+
+00:11:18.280 --> 00:11:18.480
+we do have, so I'm going to show the code
+
+00:11:20.280 --> 00:11:20.780
+base a little bit. Like I said before,
+
+00:11:25.120 --> 00:11:25.600
+we don't have yet too much external packages
+
+00:11:26.500 --> 00:11:27.000
+because of the size of the community.
+
+00:11:30.720 --> 00:11:30.940
+I have a question. Go ahead,
+
+00:11:32.160 --> 00:11:32.660
+you can write it, Michael.
+
+00:11:37.840 --> 00:11:38.300
+Yeah. So, yes, as you can see here,
+
+00:11:43.900 --> 00:11:44.340
+this is almost all, or 99% of the major modes
+
+00:11:46.160 --> 00:11:46.620
+we have. We use the same terminology of
+
+00:11:47.640 --> 00:11:48.140
+SkinnyMemax in that way.
+
+00:11:49.120 --> 00:11:49.440
+For example, the C mode,
+
+00:11:51.460 --> 00:11:51.580
+if you go inside, you see that this is the
+
+00:11:53.600 --> 00:11:53.980
+fine major mode. So in that regard,
+
+00:11:54.800 --> 00:11:55.300
+it's very similar to Emacs.
+
+00:11:56.600 --> 00:11:57.100
+And we have something called a JIT,
+
+00:11:58.320 --> 00:11:58.820
+which is like a maggot.
+
+00:12:00.280 --> 00:12:00.780
+And you can edit files.
+
+00:12:02.500 --> 00:12:02.980
+You can use not only for common lists.
+
+00:12:06.820 --> 00:12:07.320
+In my configuration, which is written,
+
+00:12:11.140 --> 00:12:11.640
+I will post that later,
+
+00:12:15.480 --> 00:12:15.640
+but if you go to my code burg you can see my
+
+00:12:16.460 --> 00:12:16.960
+configuration which is,
+
+00:12:20.460 --> 00:12:20.640
+which I do have. So for example you can use
+
+00:12:22.260 --> 00:12:22.760
+it for a scheme. We have a swank server.
+
+00:12:24.240 --> 00:12:24.340
+This is the configuration to use it.
+
+00:12:25.900 --> 00:12:26.040
+You can use it for JavaScript because we have
+
+00:12:28.180 --> 00:12:28.680
+a native LSP client written in.
+
+00:12:29.540 --> 00:12:29.800
+And we have Dired. Yeah,
+
+00:12:33.820 --> 00:12:34.320
+this is Dired. We have Dired indeed.
+
+00:12:35.560 --> 00:12:35.740
+No, it's not Dired, you know.
+
+00:12:36.260 --> 00:12:36.760
+It's called directory.
+
+00:12:38.860 --> 00:12:39.360
+Sasaki-san, which is the main maintainer,
+
+00:12:43.100 --> 00:12:43.600
+doesn't like to copy one-to-one Emacs names,
+
+00:12:48.700 --> 00:12:49.200
+but we are the same. We also have projects,
+
+00:12:51.780 --> 00:12:52.280
+which is like projectile.
+
+00:12:55.120 --> 00:12:55.240
+So, you know, they're very similar but not
+
+00:12:56.940 --> 00:12:57.440
+the same. We also have a VI configuration,
+
+00:12:59.220 --> 00:12:59.380
+as you can see. I'm using the VI commands and
+
+00:13:00.100 --> 00:13:00.600
+stuff, and it's very good.
+
+00:13:03.940 --> 00:13:04.120
+I will say not as good as an evil because it
+
+00:13:06.680 --> 00:13:07.180
+still needs some polish,
+
+00:13:08.000 --> 00:13:08.500
+but it's getting there.
+
+00:13:13.780 --> 00:13:13.860
+So we can also program in JavaScript and a
+
+00:13:16.160 --> 00:13:16.660
+lot of LSP things, and Elixir,
+
+00:13:18.600 --> 00:13:19.100
+which was recently added by myself.
+
+00:13:21.580 --> 00:13:22.080
+And yeah, it's very fun to add new modes.
+
+00:13:27.440 --> 00:13:27.940
+OK, what else next? What about user-level
+
+00:13:28.440 --> 00:13:28.940
+things other than coding?
+
+00:13:31.720 --> 00:13:31.880
+What about using this in conjunction with
+
+00:13:34.340 --> 00:13:34.840
+Nix? Oh, so there's a big,
+
+00:13:36.980 --> 00:13:37.480
+so like I said before,
+
+00:13:40.080 --> 00:13:40.200
+there were like an issue that 3 main common
+
+00:13:40.960 --> 00:13:41.460
+list project were talking,
+
+00:13:46.920 --> 00:13:47.420
+some of the users. So the 3 main projects are
+
+00:13:49.340 --> 00:13:49.840
+LEM, probably, Nixed, and then StamWM,
+
+00:13:52.600 --> 00:13:53.000
+the 3 main, well, 3 big,
+
+00:13:55.280 --> 00:13:55.440
+common list projects that are trying to
+
+00:13:57.720 --> 00:13:58.040
+emulate an Emacs experience in different
+
+00:14:00.100 --> 00:14:00.340
+fields. 1 is Editor, the other 1 is Window
+
+00:14:01.720 --> 00:14:02.220
+Manager, and the 1 is the browser.
+
+00:14:06.560 --> 00:14:06.820
+The problem is that the design of the 3 are
+
+00:14:11.680 --> 00:14:11.960
+very different. So Nix is very focused on the
+
+00:14:14.900 --> 00:14:15.060
+browser. You can connect to Nix.
+
+00:14:16.720 --> 00:14:16.920
+So given that they're both a common list,
+
+00:14:18.940 --> 00:14:19.160
+you can connect to Nix from them and vice
+
+00:14:21.420 --> 00:14:21.600
+versa. And you can send commands and you can,
+
+00:14:22.580 --> 00:14:23.080
+so you have this kind of interoperability
+
+00:14:31.420 --> 00:14:31.580
+with both. But no, you cannot combine both to
+
+00:14:35.280 --> 00:14:35.780
+have 1 LEMNIX. That would be very sick.
+
+00:14:39.400 --> 00:14:39.600
+I would love it. But the effort is just too
+
+00:14:41.000 --> 00:14:41.280
+much. Keep in mind we are a very small
+
+00:14:44.960 --> 00:14:45.060
+community. The LEM, like I said,
+
+00:14:49.920 --> 00:14:50.140
+we are like 345 developers that write
+
+00:14:51.880 --> 00:14:52.380
+packages and answer questions and stuff.
+
+00:14:55.380 --> 00:14:55.880
+Now we need users in that way to test things.
+
+00:14:58.480 --> 00:14:58.820
+So what is the license of LEM?
+
+00:15:00.480 --> 00:15:00.980
+The license of LEM is MAT.
+
+00:15:02.860 --> 00:15:03.180
+We have some components of all the various
+
+00:15:04.480 --> 00:15:04.980
+licenses, but the main 1 is MAT.
+
+00:15:07.160 --> 00:15:07.660
+I didn't choose the license of it.
+
+00:15:11.320 --> 00:15:11.820
+I would highly prefer a more like GPL 1,
+
+00:15:13.500 --> 00:15:14.000
+but like I said I'm not a maintainer,
+
+00:15:15.860 --> 00:15:16.360
+so the license is MAT.
+
+00:15:19.820 --> 00:15:20.320
+This question, I realize,
+
+00:15:22.120 --> 00:15:22.200
+how far is LEM from being able to remove a
+
+00:15:26.500 --> 00:15:26.940
+list libraries? OK, that's a big question
+
+00:15:30.660 --> 00:15:30.920
+indeed. And Funny enough,
+
+00:15:31.800 --> 00:15:32.300
+2 years ago in the EmacsConf,
+
+00:15:34.340 --> 00:15:34.700
+I talk about this, not with LEM,
+
+00:15:36.340 --> 00:15:36.480
+but with Common Lisp and Emacs Lisp in
+
+00:15:41.880 --> 00:15:42.100
+general. So I'm not the only 1 thinking about
+
+00:15:44.100 --> 00:15:44.240
+this. In fact, I'm talking with someone that
+
+00:15:46.740 --> 00:15:46.960
+is trying to write like a Emacs Lisp
+
+00:15:48.120 --> 00:15:48.620
+interpreter to work with them.
+
+00:15:52.240 --> 00:15:52.740
+The thing is that Emaclist libraries,
+
+00:15:55.080 --> 00:15:55.580
+so the API is just very different.
+
+00:15:57.720 --> 00:15:58.220
+That's the main problem.
+
+00:15:58.940 --> 00:15:59.440
+That's really the problem.
+
+00:16:02.320 --> 00:16:02.820
+You can, so you can, let me see.
+
+00:16:13.380 --> 00:16:13.880
+So, you can have an Emacs list buffer of LEM.
+
+00:16:15.420 --> 00:16:15.920
+This is an Emacs list rebel.
+
+00:16:21.380 --> 00:16:21.560
+I wrote an LRSP client so you can connect to
+
+00:16:23.140 --> 00:16:23.560
+Emacs and send things and stuff.
+
+00:16:25.160 --> 00:16:25.660
+So you're friends that we share stuff.
+
+00:16:28.340 --> 00:16:28.840
+But having a complete Emacless implementation
+
+00:16:37.400 --> 00:16:37.600
+with LEM and work with both API will be a
+
+00:16:42.240 --> 00:16:42.600
+huge work. Very like, it's even if they share
+
+00:16:43.680 --> 00:16:44.180
+very similar thing, in fact,
+
+00:16:46.480 --> 00:16:46.980
+API in some places is very similar.
+
+00:16:48.540 --> 00:16:49.040
+Down the line infrastructure,
+
+00:16:52.220 --> 00:16:52.720
+so the code is, so it's completely different.
+
+00:16:56.680 --> 00:16:56.840
+It will be very hard. We do have a clone of
+
+00:16:58.940 --> 00:16:59.440
+maggot that works, more or less.
+
+00:17:01.440 --> 00:17:01.940
+Well, it does work, but maggot's just better.
+
+00:17:03.340 --> 00:17:03.820
+But it's getting there.
+
+00:17:05.020 --> 00:17:05.460
+So like I said, we're trying to,
+
+00:17:06.220 --> 00:17:06.720
+not to copy one-to-one,
+
+00:17:09.640 --> 00:17:10.140
+but to adapting each tool to LEM.
+
+00:17:13.260 --> 00:17:13.760
+How are LEM buffer designs similar to Emacs?
+
+00:17:19.700 --> 00:17:20.020
+So yeah, that would be,
+
+00:17:21.260 --> 00:17:21.760
+so how a blend buffer design,
+
+00:17:24.780 --> 00:17:25.280
+similar to Emacs. So similar in what way,
+
+00:17:26.319 --> 00:17:26.819
+actually with properties.
+
+00:17:29.180 --> 00:17:29.480
+I think that you've seen,
+
+00:17:31.220 --> 00:17:31.560
+so you do have like a font lock,
+
+00:17:32.420 --> 00:17:32.920
+different kind of properties,
+
+00:17:37.820 --> 00:17:38.040
+but it's not exactly how Emac does it with
+
+00:17:41.740 --> 00:17:42.180
+overlays and stuff. You can,
+
+00:17:43.080 --> 00:17:43.580
+so if you're very interested,
+
+00:17:45.300 --> 00:17:45.800
+I don't want to go too much deep into the,
+
+00:17:51.500 --> 00:17:51.720
+let me go to, I don't want to go too much
+
+00:17:55.380 --> 00:17:55.760
+deep into the technicality of things now,
+
+00:17:57.920 --> 00:17:58.080
+but you can go. So LEM is written 100% in
+
+00:18:00.040 --> 00:18:00.380
+Common Lisp. So if you know Common Lisp,
+
+00:18:03.900 --> 00:18:04.040
+you can go to buffer. You can check all the
+
+00:18:08.520 --> 00:18:09.020
+codes here. Always we have,
+
+00:18:12.780 --> 00:18:13.280
+we also have this, which is like StreamX.
+
+00:18:17.860 --> 00:18:18.360
+Sorry to that, I don't.
+
+00:18:21.900 --> 00:18:22.400
+But yeah, So you can see.
+
+00:18:24.440 --> 00:18:24.940
+So yeah, if you go to the code base,
+
+00:18:26.780 --> 00:18:27.280
+maybe some of you can check this problem.
+
+00:18:28.500 --> 00:18:29.000
+Well, not problem, but yeah.
+
+00:18:30.340 --> 00:18:30.840
+That's this Japanese comment.
+
+00:18:35.560 --> 00:18:36.060
+You can see here why it's very,
+
+00:18:38.000 --> 00:18:38.300
+you have to translate and stuff,
+
+00:18:39.560 --> 00:18:40.060
+which is sometimes a little bit annoying.
+
+00:18:44.540 --> 00:18:45.040
+But yeah, some of them are in English.
+
+00:18:47.020 --> 00:18:47.440
+So this play is not the same.
+
+00:18:48.800 --> 00:18:49.200
+So if you're interested,
+
+00:18:51.200 --> 00:18:51.400
+you can go to the buffer and check it out for
+
+00:18:53.480 --> 00:18:53.600
+yourself. But I think it uses the overlay in
+
+00:18:58.620 --> 00:18:58.900
+a different way. So the implementation is
+
+00:19:04.800 --> 00:19:05.020
+different that way. Oh,
+
+00:19:10.875 --> 00:19:11.375
+[Speaker 0]: This module. Oh, this is very low.
+
+00:19:12.560 --> 00:19:13.060
+[Speaker 2]: this is fairly low. What other things or
+
+00:19:15.559 --> 00:19:15.600
+experiences that I can show you?
+
+00:19:15.920 --> 00:19:16.420
+Just like you show you.
+
+00:19:18.120 --> 00:19:18.620
+Any marks?
+
+00:19:32.860 --> 00:19:33.360
+Okay, very interesting question.
+
+00:19:34.000 --> 00:19:34.500
+What are the things...
+
+00:19:37.460 --> 00:19:37.960
+So that's interesting.
+
+00:19:42.720 --> 00:19:43.220
+Let me see. So forgive me,
+
+00:19:49.660 --> 00:19:49.760
+you answered this. I talked briefly in the
+
+00:19:53.560 --> 00:19:53.780
+talk about this, but basically I like
+
+00:19:55.840 --> 00:19:56.340
+Komaldisp, I have the mascot here.
+
+00:19:58.040 --> 00:19:58.540
+[Speaker 3]: a very
+
+00:20:04.740 --> 00:20:04.840
+[Speaker 2]: It's Italian thing. I like Common Lisp and I
+
+00:20:08.640 --> 00:20:08.800
+think GmagLisp is a very good friend of
+
+00:20:10.240 --> 00:20:10.520
+Common Lisp in the way that Serious Software
+
+00:20:11.840 --> 00:20:12.340
+Analysis is a very good uncle.
+
+00:20:18.800 --> 00:20:19.300
+Let me answer first the 1.
+
+00:20:24.140 --> 00:20:24.620
+So I like to extend it in Common Lisp.
+
+00:20:25.640 --> 00:20:26.140
+I like the Common Lisp libraries.
+
+00:20:30.100 --> 00:20:30.360
+And I think them have a better design in
+
+00:20:31.220 --> 00:20:31.720
+terms of its 1 language,
+
+00:20:33.480 --> 00:20:33.980
+which I think is a nice strength.
+
+00:20:36.580 --> 00:20:36.660
+Like, 1 of the things that put me off when I
+
+00:20:38.680 --> 00:20:39.020
+was using Emacs, I love to extend the editor
+
+00:20:40.600 --> 00:20:41.100
+and to go inside and stuff.
+
+00:20:43.360 --> 00:20:43.520
+And 1 of the things that I'm not a big fan of
+
+00:20:44.820 --> 00:20:45.020
+C. If you're a fan of C,
+
+00:20:47.040 --> 00:20:47.240
+you will be very pleasant with finding C
+
+00:20:50.440 --> 00:20:50.660
+stuff, but I don't. So when I'm trying to
+
+00:20:52.340 --> 00:20:52.840
+hack an Emacs and go inside the things,
+
+00:20:54.140 --> 00:20:54.640
+I will control C code.
+
+00:20:56.200 --> 00:20:56.660
+That's not that interactive as the Emaclist
+
+00:20:59.340 --> 00:20:59.840
+1, and that would be like a fuzzball for me.
+
+00:21:03.740 --> 00:21:04.080
+I was always dreaming about that stuff,
+
+00:21:05.320 --> 00:21:05.820
+having like everything in 1 language.
+
+00:21:08.000 --> 00:21:08.160
+The thing that LEM does to me is like it
+
+00:21:12.100 --> 00:21:12.560
+allows me to extend the editor to modify
+
+00:21:14.160 --> 00:21:14.660
+also, to modify in Common Lisp.
+
+00:21:17.660 --> 00:21:18.160
+Also, I like the language and technology.
+
+00:21:19.600 --> 00:21:19.900
+It's a bold thing, right?
+
+00:21:21.480 --> 00:21:21.980
+It's a world language that I love,
+
+00:21:23.740 --> 00:21:24.240
+and Emacs that I love.
+
+00:21:25.380 --> 00:21:25.880
+Emacs, I'm a big fan of,
+
+00:21:27.160 --> 00:21:27.520
+or a user of GNU Emacs.
+
+00:21:29.380 --> 00:21:29.880
+And LEM is like Emacs plus Common Lisp,
+
+00:21:30.600 --> 00:21:30.900
+but with a different design.
+
+00:21:32.360 --> 00:21:32.860
+I don't want to, It's not a clone.
+
+00:21:37.800 --> 00:21:38.040
+I want to get this very clear that LEM is not
+
+00:21:40.760 --> 00:21:41.140
+a clone of Emacs. The sign is very different
+
+00:21:43.180 --> 00:21:43.500
+in a lot of ways. But it's very inspired,
+
+00:21:44.380 --> 00:21:44.880
+and that cannot be denied.
+
+00:21:48.280 --> 00:21:48.780
+[Speaker 1]: I can jump in for a second.
+
+00:21:51.120 --> 00:21:51.360
+I think we're like 15 minutes into the lunch
+
+00:21:52.660 --> 00:21:53.040
+break, but you're welcome to continue
+
+00:21:55.600 --> 00:21:55.760
+answering questions. But if anyone on the
+
+00:21:57.500 --> 00:21:58.000
+stream or folks want to go grab lunch,
+
+00:21:59.760 --> 00:21:59.860
+feel free to do that. I'm probably going to
+
+00:22:01.880 --> 00:22:02.040
+do that as well. But yeah,
+
+00:22:03.760 --> 00:22:03.920
+we can either continue keeping this on the
+
+00:22:06.180 --> 00:22:06.440
+stream, or if people would like to come join
+
+00:22:08.600 --> 00:22:09.100
+here on BigBlueButton and talk to Fermin,
+
+00:22:11.040 --> 00:22:11.540
+like folks have already done that,
+
+00:22:12.440 --> 00:22:12.940
+yeah, you're welcome to.
+
+00:22:14.620 --> 00:22:15.120
+[Speaker 2]: Yeah, go ahead. No problem.
+
+00:22:16.500 --> 00:22:17.000
+Thank you. Thank you, Vitaliy.
+
+00:22:25.160 --> 00:22:25.280
+Cheers. Cheers. So finishing the answer to
+
+00:22:30.080 --> 00:22:30.380
+the question, I think LEM does tries to fix
+
+00:22:31.880 --> 00:22:32.380
+some Emacs problems, can we fix problems
+
+00:22:35.200 --> 00:22:35.700
+regarding the internal API,
+
+00:22:37.200 --> 00:22:37.480
+which makes sense, right?
+
+00:22:39.060 --> 00:22:39.560
+Emacs have like 40 years,
+
+00:22:42.280 --> 00:22:42.780
+which is a lot. And yeah,
+
+00:22:44.760 --> 00:22:45.060
+which is, that's what makes me happy.
+
+00:22:47.480 --> 00:22:47.720
+I use both now. I use Maggis and Emacs for
+
+00:22:50.200 --> 00:22:50.460
+some languages and then I use LEM for Common
+
+00:22:51.100 --> 00:22:51.600
+Lisp and other languages.
+
+00:22:55.240 --> 00:22:55.740
+You can also use LEM for EmacLisp,
+
+00:22:59.760 --> 00:22:59.960
+which makes LEM the second best editor for
+
+00:23:02.360 --> 00:23:02.860
+EmacLisp. It was a funny thing to do.
+
+00:23:05.980 --> 00:23:06.100
+OK, so do you think LEM will continue to have
+
+00:23:06.760 --> 00:23:07.260
+a lot of Japanese documentation?
+
+00:23:11.720 --> 00:23:12.180
+So there's not that many Japanese
+
+00:23:12.780 --> 00:23:13.280
+documentation, really.
+
+00:23:18.280 --> 00:23:18.480
+So there's a few comments here and there,
+
+00:23:20.800 --> 00:23:20.920
+but it's not full. We have a web page with a
+
+00:23:22.020 --> 00:23:22.520
+lot of documentation in English.
+
+00:23:25.380 --> 00:23:25.880
+So you can take a look at that.
+
+00:23:29.080 --> 00:23:29.580
+But we do have to improve the documentation
+
+00:23:30.260 --> 00:23:30.760
+and translate it to English.
+
+00:23:32.220 --> 00:23:32.440
+Sasaki-san is up to it,
+
+00:23:35.460 --> 00:23:35.960
+but he just doesn't feel that comfortable
+
+00:23:36.600 --> 00:23:37.100
+translating it himself.
+
+00:23:38.680 --> 00:23:39.180
+So yeah.
+
+00:23:42.720 --> 00:23:43.220
+[Speaker 3]: So, this is Peter on BigBlueWem.
+
+00:23:49.620 --> 00:23:50.120
+Yeah, it's neat that Wem even exists,
+
+00:23:55.520 --> 00:23:55.940
+because there's always chatter on the Emacs
+
+00:23:58.980 --> 00:23:59.280
+mailing list to rewrite Emacs and some other
+
+00:24:03.920 --> 00:24:04.120
+language. And to see that it's already to see
+
+00:24:05.320 --> 00:24:05.820
+that I mean, you have an implementation
+
+00:24:08.360 --> 00:24:08.560
+sitting there and, and the thing I was
+
+00:24:10.600 --> 00:24:10.960
+wondering while I was listening in on the,
+
+00:24:14.060 --> 00:24:14.460
+on the Q and A was do you have Dured?
+
+00:24:15.400 --> 00:24:15.700
+Do you have Maggot? And some,
+
+00:24:17.100 --> 00:24:17.600
+somebody else wrote that question into,
+
+00:24:20.460 --> 00:24:20.640
+into Etherpad. But I was happy to see that
+
+00:24:22.800 --> 00:24:23.000
+you have Dured or something like it
+
+00:24:24.960 --> 00:24:25.440
+implemented. Because I think that's like the,
+
+00:24:27.040 --> 00:24:27.180
+for me, that's the most important thing in
+
+00:24:30.800 --> 00:24:31.000
+Emacs because that gets me around in my
+
+00:24:35.200 --> 00:24:35.380
+[Speaker 2]: BRODINKOVICH Yeah, for me too.
+
+00:24:35.740 --> 00:24:36.240
+For me too.
+
+00:24:37.100 --> 00:24:37.260
+[Speaker 0]: Go ahead.
+
+00:24:37.740 --> 00:24:37.940
+[Speaker 3]: system. VICTOR Sorry. Yeah,
+
+00:24:39.680 --> 00:24:40.160
+so I may try it out sometime,
+
+00:24:42.040 --> 00:24:42.540
+but probably won't be for like 3 or 6 months,
+
+00:24:45.060 --> 00:24:45.240
+because there's always a backlog of other
+
+00:24:46.560 --> 00:24:47.060
+things to try out.
+
+00:24:49.800 --> 00:24:50.300
+[Speaker 4]: I'm the 1 who wrote that question.
+
+00:24:54.020 --> 00:24:54.520
+And do you use, I think you have bookmarks
+
+00:24:55.380 --> 00:24:55.800
+and registers, I imagine,
+
+00:24:55.800 --> 00:24:56.300
+right?
+
+00:24:59.700 --> 00:25:00.060
+[Speaker 2]: I think you have. I never tried bookmarks
+
+00:25:01.220 --> 00:25:01.400
+because I don't use it that much.
+
+00:25:02.560 --> 00:25:03.060
+But I think you have something like that.
+
+00:25:05.420 --> 00:25:05.840
+I mean, I don't. There's a few features that
+
+00:25:07.360 --> 00:25:07.540
+I don't know about them because I don't use
+
+00:25:08.680 --> 00:25:08.980
+it much. Some features,
+
+00:25:11.580 --> 00:25:11.840
+I mean. But yeah, I think you have.
+
+00:25:13.100 --> 00:25:13.380
+Let me check. We can check,
+
+00:25:16.620 --> 00:25:17.120
+probably. Things in extensions,
+
+00:25:23.140 --> 00:25:23.480
+just directory. VNXT. Directory mode.
+
+00:25:28.950 --> 00:25:29.450
+So there is. So this is the Tyrant's friend.
+
+00:25:31.780 --> 00:25:32.230
+I won't say clone. Very inspired.
+
+00:25:36.580 --> 00:25:36.900
+[Speaker 4]: What about like on the note-taking front,
+
+00:25:38.440 --> 00:25:38.940
+like org mode,
+
+00:25:41.040 --> 00:25:41.380
+[Speaker 2]: You know. note... Yes,
+
+00:25:50.440 --> 00:25:50.940
+so... EMMS... Yes, so someone did some MMS.
+
+00:25:58.380 --> 00:25:58.620
+So not MMS, not much. So package for LEM that
+
+00:26:00.060 --> 00:26:00.400
+is now in a pull request,
+
+00:26:03.800 --> 00:26:04.300
+I think. But yeah, no.
+
+00:26:06.800 --> 00:26:07.300
+The thing is I don't use R mode that much.
+
+00:26:11.980 --> 00:26:12.480
+We don't have a heavy R mode user to provide
+
+00:26:15.020 --> 00:26:15.300
+some major mode and stuff.
+
+00:26:18.160 --> 00:26:18.600
+So we don't have that implemented yet.
+
+00:26:20.580 --> 00:26:20.900
+The thing is, my plans for,
+
+00:26:22.360 --> 00:26:22.860
+I do have plans for our mode.
+
+00:26:24.020 --> 00:26:24.520
+They're a little bit evil,
+
+00:26:26.200 --> 00:26:26.700
+but there's plans for it.
+
+00:26:27.800 --> 00:26:28.040
+So I'm planning to use,
+
+00:26:30.000 --> 00:26:30.060
+so rewriting our mode is a big task that I
+
+00:26:34.200 --> 00:26:34.700
+don't want to do. So I'm going to use Emacs
+
+00:26:39.020 --> 00:26:39.520
+for our mode in 2.11. I wrote a recipe,
+
+00:26:45.060 --> 00:26:45.380
+no, a remote procedural RPC that I'm using
+
+00:26:46.860 --> 00:26:47.360
+for the Red Bull and stuff.
+
+00:26:51.000 --> 00:26:51.200
+And I'm planning to have an Emacs Puppet to
+
+00:26:54.720 --> 00:26:55.220
+provide me the functionality for Org Mode.
+
+00:26:59.380 --> 00:26:59.760
+[Speaker 4]: I know for me, when I write notes,
+
+00:27:01.640 --> 00:27:01.940
+I like to note more than Org Roam just
+
+00:27:06.340 --> 00:27:06.840
+because I feel Org Mode is great and all,
+
+00:27:08.920 --> 00:27:09.060
+but if all my notes are in it,
+
+00:27:10.260 --> 00:27:10.760
+I kind of feel trapped by it.
+
+00:27:14.460 --> 00:27:14.960
+I did the talk journaling in KOutline,
+
+00:27:17.800 --> 00:27:18.040
+and I like that package better for some
+
+00:27:21.040 --> 00:27:21.260
+things and it's like if I want to put like
+
+00:27:24.280 --> 00:27:24.780
+the tags on PDF file names and so it's like
+
+00:27:28.940 --> 00:27:29.100
+Yeah, it's great and all but it's also Is
+
+00:27:31.560 --> 00:27:31.740
+that part of the motivation of wanting to use
+
+00:27:34.620 --> 00:27:35.120
+lamb is so you feel less entrapped by emacs
+
+00:27:38.445 --> 00:27:38.840
+No, I will say I don't no.
+
+00:27:40.620 --> 00:27:41.120
+[Speaker 2]: No, no. I was very happy trapping to Emacs.
+
+00:27:47.100 --> 00:27:47.560
+To be fair. The thing is I don't use Hormel
+
+00:27:48.600 --> 00:27:49.100
+that much. That's just the reality.
+
+00:27:52.120 --> 00:27:52.580
+Org Mode for me is a very good markup
+
+00:27:54.660 --> 00:27:54.810
+language, but not that much really.
+
+00:27:56.920 --> 00:27:57.420
+I know that Org Mode has a lot of people and
+
+00:27:58.740 --> 00:27:59.060
+it's used by a lot of people.
+
+00:28:00.060 --> 00:28:00.560
+And there's very interesting packages.
+
+00:28:03.700 --> 00:28:04.200
+[Speaker 4]: What about org mode versus markdown versus
+
+00:28:05.800 --> 00:28:06.300
+plain text versus latex then?
+
+00:28:08.480 --> 00:28:08.860
+[Speaker 2]: I like org mode because of the Emacs
+
+00:28:10.380 --> 00:28:10.880
+functionality. I think if you take that away,
+
+00:28:15.600 --> 00:28:16.100
+you plain or mode versus Markdown,
+
+00:28:17.720 --> 00:28:18.080
+I don't think there's that much difference,
+
+00:28:19.960 --> 00:28:20.460
+if you take the Emacs functionality away.
+
+00:28:24.560 --> 00:28:24.880
+I like the
+
+00:28:27.260 --> 00:28:27.760
+[Speaker 4]: Yeah. Emacs syntax more than Markdown.
+
+00:28:29.640 --> 00:28:29.900
+Like, for instance, you have the double
+
+00:28:31.720 --> 00:28:31.960
+square brackets, which is simpler for me to
+
+00:28:32.500 --> 00:28:33.000
+look at, but.
+
+00:28:35.820 --> 00:28:36.060
+[Speaker 2]: Yeah, I guess it's a matter of,
+
+00:28:38.400 --> 00:28:38.640
+I mean, we don't have yet a major mode of R
+
+00:28:39.800 --> 00:28:40.300
+mode, which will be quite trivial.
+
+00:28:42.660 --> 00:28:43.160
+Well, you know, a simple syntax highlights,
+
+00:28:46.040 --> 00:28:46.540
+you know, R mode in LEM,
+
+00:28:52.460 --> 00:28:52.960
+because no 1 wrote it.
+
+00:28:55.320 --> 00:28:55.640
+I mean, that's the way with this project,
+
+00:29:00.060 --> 00:29:00.360
+right? If you need people to be motivated to
+
+00:29:04.120 --> 00:29:04.620
+do that. And with LEM,
+
+00:29:06.540 --> 00:29:07.040
+someone asked about the Japanese.
+
+00:29:11.320 --> 00:29:11.820
+I think they're interested about that.
+
+00:29:15.040 --> 00:29:15.420
+LEM does have a thing,
+
+00:29:16.030 --> 00:29:16.095
+[Speaker 0]: If the it would be good.
+
+00:29:16.800 --> 00:29:17.160
+[Speaker 4]: I'd be able to do more,
+
+00:29:18.000 --> 00:29:18.500
+but that's what I
+
+00:29:19.370 --> 00:29:19.870
+[Speaker 0]: was doing.
+
+00:29:22.420 --> 00:29:22.820
+[Speaker 2]: they think True. So, for example,
+
+00:29:24.240 --> 00:29:24.740
+we're using another big fan of...
+
+00:29:27.840 --> 00:29:28.080
+I mean, I know that the main people that may
+
+00:29:30.280 --> 00:29:30.780
+use in the future LEM are EMACLIS people.
+
+00:29:33.080 --> 00:29:33.580
+A lot of them. It's very similar.
+
+00:29:37.540 --> 00:29:37.940
+And Sasaki-san and the LEM community mainly
+
+00:29:43.260 --> 00:29:43.760
+uses Discord for chat and stuff.
+
+00:29:46.980 --> 00:29:47.480
+I mean, we do have matrix,
+
+00:29:48.540 --> 00:29:48.640
+and I should connect to it,
+
+00:29:54.960 --> 00:29:55.320
+by the way. But we mainly use Discord,
+
+00:29:58.080 --> 00:29:58.580
+which I don't think is a good thing.
+
+00:30:01.900 --> 00:30:02.300
+I mean, to have the main communication
+
+00:30:05.020 --> 00:30:05.520
+channels, Discord. Because,
+
+00:30:09.020 --> 00:30:09.520
+well, it's Discord. It's a closed source
+
+00:30:13.180 --> 00:30:13.440
+application that is easy for some people,
+
+00:30:14.340 --> 00:30:14.840
+but for some people it's a tailbreak.
+
+00:30:17.040 --> 00:30:17.080
+[Speaker 0]: are in
+
+00:30:17.580 --> 00:30:18.080
+[Speaker 2]: Especially people that the Emacs community
+
+00:30:20.080 --> 00:30:20.580
+that very like free software.
+
+00:30:22.800 --> 00:30:23.300
+[Speaker 4]: The only good thing about Molesley is it's
+
+00:30:26.000 --> 00:30:26.380
+popular, but as soon as you break out of that
+
+00:30:28.380 --> 00:30:28.520
+mold, all of a sudden it becomes a lot
+
+00:30:30.400 --> 00:30:30.900
+harder. For instance, they don't have...
+
+00:30:33.820 --> 00:30:34.320
+All the third-party clients are unofficial
+
+00:30:37.340 --> 00:30:37.500
+and according to their terms of service they
+
+00:30:40.380 --> 00:30:40.600
+can just can you. Which is not a nice
+
+00:30:44.020 --> 00:30:44.180
+position to be in if you're trying to use it
+
+00:30:47.200 --> 00:30:47.700
+and you wanted to be a moderator using some
+
+00:30:50.600 --> 00:30:51.100
+side tools that weren't Discord.
+
+00:30:55.320 --> 00:30:55.560
+[Speaker 2]: I agree 100% and in fact I'm not a big fan,
+
+00:30:56.400 --> 00:30:56.900
+I don't like Discord.
+
+00:31:03.860 --> 00:31:04.360
+[Speaker 5]: You mentioned the RPC you did between Emacs
+
+00:31:06.200 --> 00:31:06.700
+and the LEM. Do you have it published
+
+00:31:06.720 --> 00:31:07.220
+somewhere?
+
+00:31:13.520 --> 00:31:14.020
+[Speaker 2]: Yes, it's in the LEM project.
+
+00:31:15.820 --> 00:31:16.320
+I'll copy that in the chat.
+
+00:31:19.000 --> 00:31:19.340
+[Speaker 5]: Okay, because I'm always interested in how
+
+00:31:21.560 --> 00:31:22.060
+you do like the communication with other
+
+00:31:24.020 --> 00:31:24.320
+programs with Emacs because that's
+
+00:31:24.320 --> 00:31:24.820
+interesting.
+
+00:31:30.140 --> 00:31:30.640
+[Speaker 2]: I'm only using the porthole package,
+
+00:31:32.460 --> 00:31:32.960
+I'm not writing it from scratch,
+
+00:31:34.340 --> 00:31:34.840
+not that much as a developer.
+
+00:31:37.540 --> 00:31:37.960
+[Speaker 5]: So I don't know this package.
+
+00:31:39.140 --> 00:31:39.640
+Maybe that's the thing I can learn.
+
+00:31:40.840 --> 00:31:41.140
+[Speaker 2]: Oh yeah, probably if you,
+
+00:31:42.360 --> 00:31:42.740
+yeah. Yeah. If you want to,
+
+00:31:43.860 --> 00:31:44.360
+so I didn't see this 1,
+
+00:31:46.420 --> 00:31:46.920
+this package for the RSP,
+
+00:31:48.620 --> 00:31:49.120
+which make is monthly automatically.
+
+00:31:53.200 --> 00:31:53.600
+[Speaker 5]: And how do you do, how do you plan to
+
+00:31:59.180 --> 00:31:59.440
+integrate Org Mode? Because Org Mode needs to
+
+00:31:59.760 --> 00:32:00.260
+work on.
+
+00:32:03.340 --> 00:32:03.540
+[Speaker 2]: This way? Yes, so I'm planning to have like a
+
+00:32:08.260 --> 00:32:08.760
+Emacs puppet and to have like a clone buffer
+
+00:32:11.320 --> 00:32:11.820
+from the buffer that you do in LEM and then
+
+00:32:16.880 --> 00:32:17.380
+the command sent into the Emacs hidden buffer
+
+00:32:19.820 --> 00:32:20.140
+and then the changes go back to LEM to change
+
+00:32:22.660 --> 00:32:23.160
+the buffer of LEM. That's my idea.
+
+00:32:24.960 --> 00:32:25.460
+[Speaker 5]: Okay, that's all. It's interesting.
+
+00:32:28.320 --> 00:32:28.540
+Would be interesting to see what comes from
+
+00:32:28.540 --> 00:32:29.040
+it.
+
+00:32:32.280 --> 00:32:32.780
+[Speaker 2]: It's a bit, it's a hackish 100%.
+
+00:32:35.200 --> 00:32:35.320
+It's not, you have to duplicate the
+
+00:32:36.020 --> 00:32:36.520
+information and stuff,
+
+00:32:38.940 --> 00:32:39.140
+which is, oh, by the way,
+
+00:32:40.320 --> 00:32:40.820
+I'm going to pass the Lemington,
+
+00:32:43.380 --> 00:32:43.880
+which is the name of the RSP clone.
+
+00:32:45.980 --> 00:32:46.480
+Sorry, the integration with Emacs,
+
+00:32:48.900 --> 00:32:49.400
+which is LEM with a mustache.
+
+00:32:54.400 --> 00:32:54.600
+[Speaker 4]: They had good news where it would do the same
+
+00:32:56.360 --> 00:32:56.860
+thing, where it would open up a slave Emacs,
+
+00:33:00.020 --> 00:33:00.520
+because it was such a performance hog for
+
+00:33:02.140 --> 00:33:02.640
+retrieving all the emails.
+
+00:33:06.940 --> 00:33:07.360
+[Speaker 2]: No. I mean, Emacs have a server,
+
+00:33:08.559 --> 00:33:08.860
+right? I can, in fact,
+
+00:33:11.200 --> 00:33:11.700
+I'm using that for, I'm already puppeting.
+
+00:33:13.340 --> 00:33:13.620
+Well, not puppeting. I'm already using
+
+00:33:15.700 --> 00:33:16.200
+Maggots. So I have this.
+
+00:33:17.400 --> 00:33:17.900
+Actually, let me copy.
+
+00:33:25.600 --> 00:33:25.920
+I have this, which is usually a little bit,
+
+00:33:28.080 --> 00:33:28.420
+I'm launching the Emacs daemon and then I'm
+
+00:33:31.500 --> 00:33:31.740
+launching Leviton. And then this is the kill
+
+00:33:32.300 --> 00:33:32.700
+and this is the status,
+
+00:33:33.440 --> 00:33:33.940
+which is basically saying,
+
+00:33:36.680 --> 00:33:37.180
+run this and this is this,
+
+00:33:42.040 --> 00:33:42.540
+which is run maggot in this file.
+
+00:33:43.940 --> 00:33:44.340
+If you put it side by side,
+
+00:33:48.680 --> 00:33:48.800
+you will check instantly that this is the
+
+00:33:50.900 --> 00:33:51.400
+buffer directory, LEM home,
+
+00:33:54.020 --> 00:33:54.520
+and then the current file.
+
+00:33:58.860 --> 00:33:59.360
+Because I'm launching it with the file.
+
+00:34:03.940 --> 00:34:04.240
+So buffer directory, which is the directory
+
+00:34:09.239 --> 00:34:09.739
+of the buffer. So I'm already using maggot as
+
+00:34:13.600 --> 00:34:14.080
+a tool outside of LEM,
+
+00:34:14.960 --> 00:34:15.060
+because I really like maggot.
+
+00:34:16.920 --> 00:34:17.420
+And this is very easy to check.
+
+00:34:22.719 --> 00:34:23.219
+Launch Emacs daemon. Okay.
+
+00:34:28.580 --> 00:34:29.080
+And then I go to local projects.
+
+00:34:31.719 --> 00:34:32.219
+Let's go to another 1 that is not LEM.
+
+00:34:37.199 --> 00:34:37.400
+[Speaker 4]: You actually have weird ideas like running it
+
+00:34:39.639 --> 00:34:39.860
+in daemon mode so you don't ever have to
+
+00:34:40.840 --> 00:34:41.340
+restart it or the images,
+
+00:34:43.100 --> 00:34:43.600
+I guess, that LEM has.
+
+00:34:46.800 --> 00:34:47.300
+[Speaker 2]: LEM does not have this kind of,
+
+00:34:53.719 --> 00:34:54.060
+I will call it, it doesn't have like a demon
+
+00:34:56.280 --> 00:34:56.780
+mode, so you have control separately,
+
+00:34:58.860 --> 00:34:59.360
+but keep in mind that LEM,
+
+00:35:01.260 --> 00:35:01.680
+it's a common list program.
+
+00:35:03.340 --> 00:35:03.840
+So if you use slime or Sly,
+
+00:35:10.080 --> 00:35:10.580
+you can easily connect to them to hack on it.
+
+00:35:12.380 --> 00:35:12.880
+[Speaker 4]: ever use that functionality,
+
+00:35:14.060 --> 00:35:14.560
+like using it from another computer?
+
+00:35:16.400 --> 00:35:16.900
+[Speaker 2]: Do you Another computer,
+
+00:35:17.600 --> 00:35:18.100
+I think the same computer,
+
+00:35:21.460 --> 00:35:21.620
+or maybe Sage, but yeah,
+
+00:35:21.820 --> 00:35:22.320
+it's very...
+
+00:35:24.520 --> 00:35:25.020
+[Speaker 4]: Or from like your window,
+
+00:35:26.640 --> 00:35:27.140
+if you were using the window...
+
+00:35:28.260 --> 00:35:28.580
+I can't remember the name of the window
+
+00:35:30.100 --> 00:35:30.600
+manager. Or if you were using...
+
+00:35:36.460 --> 00:35:36.960
+What? Yeah, yeah. Or using like stump,
+
+00:35:40.680 --> 00:35:40.760
+calling it from like stump WM or how often do
+
+00:35:41.500 --> 00:35:42.000
+you use that REPL?
+
+00:35:43.740 --> 00:35:43.940
+[Speaker 2]: SPCL? No. ThumbWM? I use it quite a lot.
+
+00:35:44.700 --> 00:35:45.200
+I connect to a museum,
+
+00:35:49.400 --> 00:35:49.760
+some WM right now, and I use LEM to connect
+
+00:35:52.240 --> 00:35:52.740
+to it, but I was using Emacs before.
+
+00:35:55.800 --> 00:35:55.960
+And you can use Sly or Slime to connect to
+
+00:35:58.260 --> 00:35:58.520
+LEM. So the thing that is in Common List
+
+00:36:00.900 --> 00:36:01.400
+makes it this kind of already out-of-the-box
+
+00:36:04.000 --> 00:36:04.280
+connectivity between different...
+
+00:36:06.960 --> 00:36:07.460
+[Speaker 4]: How many window managers have you used?
+
+00:36:11.120 --> 00:36:11.400
+I've used that before.
+
+00:36:13.440 --> 00:36:13.780
+I've also used, like right now I'm using
+
+00:36:14.720 --> 00:36:15.220
+Sway. I've used Xmonad,
+
+00:36:16.260 --> 00:36:16.760
+DWM.
+
+00:36:23.040 --> 00:36:23.540
+[Speaker 2]: This is awesome. What is the other 1?
+
+00:36:25.680 --> 00:36:26.180
+I can't remember the name.
+
+00:36:27.900 --> 00:36:28.380
+But it was like a few years ago.
+
+00:36:30.800 --> 00:36:31.020
+I've been doing some DWM for like the last
+
+00:36:36.260 --> 00:36:36.760
+[Speaker 4]: I remember that. Go ahead.
+
+00:36:37.740 --> 00:36:38.240
+[Speaker 2]: year, I think. Or 3. know,
+
+00:36:41.940 --> 00:36:42.440
+it's that I was... I don't know.
+
+00:36:43.440 --> 00:36:43.520
+[Speaker 0]: I don't a couple
+
+00:36:44.040 --> 00:36:44.540
+[Speaker 2]: I'd like to have of days of my...
+
+00:36:48.280 --> 00:36:48.400
+[Speaker 4]: I remember that that window manager seemed to
+
+00:36:53.300 --> 00:36:53.600
+have some unique ideas that weren't
+
+00:36:56.280 --> 00:36:56.780
+necessarily available on like EWM and XMLNAD.
+
+00:37:02.540 --> 00:37:03.040
+[Speaker 2]: So SoundLM, it's an interesting project.
+
+00:37:05.140 --> 00:37:05.460
+But for example, I'll change...
+
+00:37:06.720 --> 00:37:07.080
+So I don't have in this computer,
+
+00:37:08.240 --> 00:37:08.680
+but in my other computer,
+
+00:37:13.840 --> 00:37:14.320
+I change the mod line or bar,
+
+00:37:18.220 --> 00:37:18.720
+top bar, whatever, because the ThunderLVM
+
+00:37:21.500 --> 00:37:22.000
+doesn't only update it when you click,
+
+00:37:25.280 --> 00:37:25.680
+or you do some events or happen 1 minute.
+
+00:37:27.560 --> 00:37:27.980
+So you can see here, this is not changing
+
+00:37:28.320 --> 00:37:28.820
+until I click.
+
+00:37:33.500 --> 00:37:33.720
+[Speaker 0]: That's it.
+
+00:37:34.360 --> 00:37:34.600
+[Speaker 3]: AUDIENCE 1 Matthew, sorry.
+
+00:37:36.160 --> 00:37:36.660
+I have a quick question for Matthew.
+
+00:37:43.520 --> 00:37:43.640
+So is your talk going to be posted or did you
+
+00:37:47.420 --> 00:37:47.920
+[Speaker 4]: Go ahead. I gave them a recording.
+
+00:37:50.140 --> 00:37:50.640
+My talk was the K outline for journaling
+
+00:37:53.080 --> 00:37:53.240
+[Speaker 3]: give it live? right right it was I woke up
+
+00:37:54.020 --> 00:37:54.520
+too late for it Sorry,
+
+00:37:58.420 --> 00:37:58.920
+so I came in and I just saw Bob Weiner
+
+00:38:03.240 --> 00:38:03.340
+answering questions So is your talk going to
+
+00:38:06.560 --> 00:38:07.060
+be on the page for your talk?
+
+00:38:07.740 --> 00:38:07.960
+I don't
+
+00:38:08.560 --> 00:38:09.060
+[Speaker 0]: see it there.
+
+00:38:11.940 --> 00:38:12.380
+[Speaker 4]: I could give you a link to it,
+
+00:38:17.480 --> 00:38:17.640
+because I had, I hosted it on Mega to give it
+
+00:38:18.840 --> 00:38:19.020
+to them, because when I emailed it,
+
+00:38:22.080 --> 00:38:22.200
+[Speaker 3]: Oh, okay. Is it
+
+00:38:22.360 --> 00:38:22.840
+[Speaker 4]: it didn't work. on a monkey?
+
+00:38:23.600 --> 00:38:24.100
+Download and watch it.
+
+00:38:29.440 --> 00:38:29.920
+I'm probably going to post it on YouTube
+
+00:38:33.600 --> 00:38:33.760
+later. I, I had my face record with it,
+
+00:38:36.020 --> 00:38:36.520
+but I never got it edited together in time
+
+00:38:40.320 --> 00:38:40.640
+[Speaker 3]: Okay, if you could if you can put the link
+
+00:38:43.140 --> 00:38:43.340
+onto the onto the ether pad or something or
+
+00:38:46.000 --> 00:38:46.160
+onto the wiki then then I can find it and
+
+00:38:49.920 --> 00:38:50.140
+check it out. All right,
+
+00:38:53.040 --> 00:38:53.480
+thanks. Sorry to interrupt your time,
+
+00:38:56.300 --> 00:38:56.440
+Fermin, but I figure we're heavily into the
+
+00:38:57.260 --> 00:38:57.760
+break anyways. FERMIN GENZIERIA-CHAPMANI
+
+00:39:00.920 --> 00:39:01.160
+[Speaker 2]: No problem. I'm in an EMAX conference talking
+
+00:39:02.860 --> 00:39:03.040
+about all that I mean I'm already doing
+
+00:39:04.280 --> 00:39:04.780
+blasphemy so I
+
+00:39:24.600 --> 00:39:24.800
+think that's oh yeah notes so the thing is
+
+00:39:26.640 --> 00:39:27.140
+then as my point of view,
+
+00:39:28.860 --> 00:39:29.360
+and the point of view probably of Sasaki-san,
+
+00:39:30.240 --> 00:39:30.740
+just a moment, I think,
+
+00:39:34.960 --> 00:39:35.220
+is very focused on an IDE more than a
+
+00:39:40.580 --> 00:39:41.080
+node-taking editor. More like an integrated
+
+00:39:41.540 --> 00:39:42.040
+development environment.
+
+00:39:45.040 --> 00:39:45.540
+So node is like a second thing.
+
+00:39:51.500 --> 00:39:52.000
+So not exactly the main focus.
+
+00:39:54.440 --> 00:39:54.780
+And I know that Emacs does have a very strong
+
+00:39:58.440 --> 00:39:58.940
+community of Ormode users that use Emacs for
+
+00:40:00.140 --> 00:40:00.244
+Ormode, which is the killer feature,
+
+00:40:01.080 --> 00:40:01.360
+1 of I'll do a feature.
+
+00:40:04.456 --> 00:40:04.956
+I'll do a feature of Emacs.
+
+00:40:09.160 --> 00:40:09.660
+So I'm not the maintainer of porthole.
+
+00:40:20.220 --> 00:40:20.580
+I'm sorry. I did add it to so I don't
+
+00:40:22.700 --> 00:40:23.040
+maintain the remote. I'm sorry,
+
+00:40:27.400 --> 00:40:27.840
+I'll pothole the USB. I'm only using it on
+
+00:40:31.120 --> 00:40:31.620
+the Lamington. I cannot change anything.
+
+00:40:39.520 --> 00:40:39.760
+[Speaker 4]: What are some interesting things you have
+
+00:40:40.760 --> 00:40:41.260
+with your window manager?
+
+00:40:43.780 --> 00:40:44.280
+I do have elsewhere.
+
+00:40:49.400 --> 00:40:49.600
+[Speaker 2]: I can connect to it and hack it from my
+
+00:40:53.040 --> 00:40:53.540
+editor, which I think is really fun.
+
+00:40:56.820 --> 00:40:57.220
+The way I can write, so I wrote a few
+
+00:40:58.500 --> 00:40:59.000
+packages for Soundallium.
+
+00:41:06.740 --> 00:41:07.240
+So 1 of them is Proton,
+
+00:41:10.360 --> 00:41:10.860
+which basically launches like a...
+
+00:41:18.480 --> 00:41:18.900
+So Proton is like this wine thing that Valve
+
+00:41:22.000 --> 00:41:22.500
+[Speaker 4]: Yeah, I'm a user.
+
+00:41:24.140 --> 00:41:24.640
+[Speaker 2]: did. OK, so this basically,
+
+00:41:26.480 --> 00:41:26.980
+you have like a list of,
+
+00:41:32.280 --> 00:41:32.540
+let me check. No, we're just,
+
+00:41:38.780 --> 00:41:39.020
+sorry. This, So these all games are bought by
+
+00:41:41.280 --> 00:41:41.780
+me. They're not pirates in any way.
+
+00:41:45.800 --> 00:41:46.300
+I can use this to to launch it.
+
+00:41:50.700 --> 00:41:51.200
+[Speaker 4]: Was that Dmenu or was that StumpWM menu?
+
+00:41:54.800 --> 00:41:55.240
+[Speaker 2]: This is Dmenu. So I have,
+
+00:42:02.300 --> 00:42:02.560
+I also contribute the Dmenu integration into
+
+00:42:05.820 --> 00:42:06.320
+StumwM. So I use Dmenu.
+
+00:42:07.480 --> 00:42:07.980
+So like this, right?
+
+00:42:13.300 --> 00:42:13.800
+[Speaker 4]: Yeah that's pretty cool.
+
+00:42:15.720 --> 00:42:15.940
+You don't know how nice those things are
+
+00:42:16.880 --> 00:42:17.380
+until you start using those.
+
+00:42:21.280 --> 00:42:21.780
+[Speaker 2]: The menu is very interesting and very...
+
+00:42:24.060 --> 00:42:24.560
+Also I was using RoFi,
+
+00:42:25.680 --> 00:42:26.000
+but...
+
+00:42:29.100 --> 00:42:29.540
+[Speaker 4]: I was also more... The other thing I was more
+
+00:42:31.240 --> 00:42:31.740
+mentioning is that also,
+
+00:42:32.860 --> 00:42:33.340
+being able to use D-Menu,
+
+00:42:34.800 --> 00:42:35.300
+but being able to just have keyboard
+
+00:42:38.680 --> 00:42:39.180
+oriented? Everything fuzzy search narrowed
+
+00:42:45.420 --> 00:42:45.480
+and No tabs no status bars like all of a
+
+00:42:47.160 --> 00:42:47.600
+sudden your mental model on how your computer
+
+00:42:51.420 --> 00:42:51.560
+operates goes through the roof and a lot of
+
+00:42:57.900 --> 00:42:58.400
+Emacs users Know what that is like Especially
+
+00:43:01.240 --> 00:43:01.740
+In conjunction with a window manager?
+
+00:43:06.740 --> 00:43:07.200
+[Speaker 2]: Yeah, I think so. I remember when I was...
+
+00:43:11.320 --> 00:43:11.820
+So for me, I tried the Emacs window manager,
+
+00:43:16.840 --> 00:43:17.340
+but it wasn't for me. Having a single thread
+
+00:43:18.460 --> 00:43:18.960
+window manager is scary.
+
+00:43:22.500 --> 00:43:22.840
+And also games and some stuff wasn't working
+
+00:43:25.040 --> 00:43:25.240
+correctly, which it makes sense in some
+
+00:43:27.340 --> 00:43:27.840
+regards, using Emacs for window manager.
+
+00:43:30.660 --> 00:43:31.160
+Oh
+
+00:43:34.480 --> 00:43:34.980
+[Speaker 4]: I've used it before I found that it wasn't as
+
+00:43:39.240 --> 00:43:39.740
+like it. It's not as bad in practice because
+
+00:43:43.020 --> 00:43:43.260
+The paper cuts you don't like to hit them
+
+00:43:45.800 --> 00:43:46.000
+every day So you make sure So you make sure
+
+00:43:48.080 --> 00:43:48.400
+your Emacs config is a lot nicer and doesn't
+
+00:43:51.040 --> 00:43:51.300
+have those slowdowns. Or you avoid those
+
+00:43:54.440 --> 00:43:54.780
+things. It forces you to make your Emacs
+
+00:43:59.440 --> 00:43:59.940
+config a lot more robust to speed.
+
+00:44:02.040 --> 00:44:02.300
+[Speaker 2]: Yeah, yeah. That's true,
+
+00:44:04.200 --> 00:44:04.440
+yeah. The thing, yeah,
+
+00:44:05.600 --> 00:44:06.020
+but still, I don't know,
+
+00:44:08.680 --> 00:44:09.060
+[Speaker 4]: You'll still get the paper cuts,
+
+00:44:09.060 --> 00:44:09.560
+but...
+
+00:44:12.360 --> 00:44:12.660
+[Speaker 2]: like... Yeah, and my experience was not
+
+00:44:16.500 --> 00:44:16.880
+great. I'm not a person,
+
+00:44:17.860 --> 00:44:18.360
+like, I don't want to have...
+
+00:44:19.960 --> 00:44:20.460
+Not with LEM or Emacs.
+
+00:44:22.660 --> 00:44:23.160
+I like to have different programs.
+
+00:44:25.840 --> 00:44:26.120
+I don't want to like, I never was in like
+
+00:44:28.040 --> 00:44:28.540
+Emacs or you know, only Emacs.
+
+00:44:30.480 --> 00:44:30.800
+I really love Emacs, GNU Emacs,
+
+00:44:33.920 --> 00:44:34.140
+but only Emacs? No, no,
+
+00:44:35.300 --> 00:44:35.540
+I like my browser, I like my,
+
+00:44:37.500 --> 00:44:38.000
+you know, my Windows Manager,
+
+00:44:41.280 --> 00:44:41.780
+my, you know, I wasn't Emacs only.
+
+00:44:45.520 --> 00:44:46.000
+Emacs is my OS. Some people are,
+
+00:44:48.600 --> 00:44:49.100
+which is good. Different kind of a...
+
+00:44:51.600 --> 00:44:52.100
+I have to say that I come from Vim,
+
+00:44:57.340 --> 00:44:57.720
+like a long time ago. But I come from Vim,
+
+00:44:58.660 --> 00:44:58.980
+so I'm using Evil Mode.
+
+00:45:00.280 --> 00:45:00.780
+And I maybe have this kind of a...
+
+00:45:05.700 --> 00:45:06.200
+Yeah. So regarding Summoner.vm,
+
+00:45:10.080 --> 00:45:10.580
+it's... I like it because it's common Lisp,
+
+00:45:13.940 --> 00:45:14.440
+but it don't have some,
+
+00:45:18.120 --> 00:45:18.620
+this, I removed this. So I'm using another
+
+00:45:21.040 --> 00:45:21.340
+model line because the model line is not
+
+00:45:24.440 --> 00:45:24.720
+great. Everything else is a little bit weird
+
+00:45:28.940 --> 00:45:29.440
+because you have frames similar to Emacs.
+
+00:45:33.560 --> 00:45:34.060
+You have a frame. You have this window,
+
+00:45:35.600 --> 00:45:36.100
+and then there's no nothing here.
+
+00:45:37.700 --> 00:45:38.100
+[Speaker 4]: Yeah, I've used it before.
+
+00:45:39.720 --> 00:45:40.220
+That was definitely weird.
+
+00:45:41.680 --> 00:45:42.180
+It's also nice to be able to just...
+
+00:45:43.660 --> 00:45:44.160
+Can't you put multiple windows?
+
+00:45:46.100 --> 00:45:46.600
+Can't you duplicate windows?
+
+00:45:48.040 --> 00:45:48.540
+Show the same window in 2 frames?
+
+00:45:48.560 --> 00:45:49.060
+NIGEL
+
+00:45:51.020 --> 00:45:51.520
+[Speaker 2]: GANSZELA-WALSH Never tried that.
+
+00:45:54.400 --> 00:45:54.900
+Never occurred to me that.
+
+00:45:57.840 --> 00:45:58.020
+I don't know. Never tried that,
+
+00:46:01.480 --> 00:46:01.980
+to be honest. Let me check.
+
+00:46:07.280 --> 00:46:07.780
+No idea. Item? I think so.
+
+00:46:10.080 --> 00:46:10.320
+Because when you try to,
+
+00:46:11.520 --> 00:46:11.980
+at least not in an easy way.
+
+00:46:13.940 --> 00:46:14.260
+When you try to, so if I try to put a window
+
+00:46:16.020 --> 00:46:16.520
+here, let me move it so it,
+
+00:46:20.060 --> 00:46:20.540
+and if I try to like, so it's,
+
+00:46:21.680 --> 00:46:21.890
+yeah, no other window.
+
+00:46:24.100 --> 00:46:24.360
+[Speaker 4]: So can you open the, what is that,
+
+00:46:25.080 --> 00:46:25.440
+discord or your browser?
+
+00:46:26.840 --> 00:46:27.340
+Could you open that in both your frames?
+
+00:46:34.620 --> 00:46:35.120
+[Speaker 2]: I can I Side by side, but not the same
+
+00:46:37.740 --> 00:46:37.920
+[Speaker 0]: I mean I do I can I can have I know
+
+00:46:38.400 --> 00:46:38.600
+[Speaker 4]: can't your frames? 2 browsers you can do that
+
+00:46:42.600 --> 00:46:43.100
+[Speaker 2]: browser I never occurred to me that,
+
+00:46:46.300 --> 00:46:46.800
+[Speaker 4]: in DWM? You can't do that in XMLNet,
+
+00:46:48.560 --> 00:46:49.060
+at least I don't know what configuration
+
+00:46:50.820 --> 00:46:51.020
+you'd have to do to get to be able to do that
+
+00:46:51.140 --> 00:46:51.640
+in XMONAD.
+
+00:46:54.060 --> 00:46:54.560
+[Speaker 2]: wow. Interesting. Maybe you can.
+
+00:46:57.700 --> 00:46:58.200
+I never tried. Maybe you can?
+
+00:47:03.240 --> 00:47:03.640
+No idea. The interesting thing that I never
+
+00:47:05.860 --> 00:47:06.360
+use is that floating windows.
+
+00:47:09.520 --> 00:47:09.960
+Never use floating windows,
+
+00:47:13.480 --> 00:47:13.780
+but normal windows. You know,
+
+00:47:17.780 --> 00:47:18.160
+not. And SoundWM does have a weird support
+
+00:47:24.720 --> 00:47:25.220
+for it. Now it works. But I don't like it.
+
+00:47:26.680 --> 00:47:27.180
+For me, it was a little bit rough,
+
+00:47:29.480 --> 00:47:29.980
+the use of floating windows in SoundWM.
+
+00:47:32.480 --> 00:47:32.980
+I think they're way better now.
+
+00:47:36.580 --> 00:47:37.080
+I think, but yeah, I don't use it so...
+
+00:47:40.600 --> 00:47:41.100
+But there is.
+
+00:47:43.520 --> 00:47:43.940
+[Speaker 4]: You know, for me with the,
+
+00:47:45.060 --> 00:47:45.480
+like, Emacs doing everything,
+
+00:47:46.880 --> 00:47:47.380
+it's like, you got like Emacs,
+
+00:47:50.320 --> 00:47:50.740
+you got shell, and then you got the gooey
+
+00:47:56.520 --> 00:47:56.760
+Wild West. Yeah. Like,
+
+00:47:58.940 --> 00:47:59.440
+with Emacs, I know, I'll generally get,
+
+00:48:01.280 --> 00:48:01.780
+oh, this is going to be configured in?
+
+00:48:04.160 --> 00:48:04.660
+It's either gonna be shell script,
+
+00:48:06.180 --> 00:48:06.340
+Python or Emacs. Oh wait,
+
+00:48:07.000 --> 00:48:07.500
+no, it's gonna be Emacs.
+
+00:48:09.680 --> 00:48:10.180
+Variable's gonna be written in SecQ,
+
+00:48:10.380 --> 00:48:10.880
+period.
+
+00:48:16.640 --> 00:48:17.140
+[Speaker 2]: Well, I don't use too much scripting,
+
+00:48:18.260 --> 00:48:18.540
+but I'd like to, for example,
+
+00:48:21.540 --> 00:48:22.040
+I had to do a, so the automatic installer
+
+00:48:26.000 --> 00:48:26.500
+for, for Debian base, Debian stuff for Linux
+
+00:48:30.340 --> 00:48:30.840
+for, for LEM. I was thinking of doing in bash
+
+00:48:32.520 --> 00:48:33.020
+and I say, I don't want to do it in Bash.
+
+00:48:35.380 --> 00:48:35.880
+So I just did it in SVC and Commodisp,
+
+00:48:37.660 --> 00:48:38.100
+which does have like a scripting feature.
+
+00:48:40.920 --> 00:48:41.040
+You can put a script and it will create your
+
+00:48:41.160 --> 00:48:41.660
+own script.
+
+00:48:45.860 --> 00:48:46.280
+[Speaker 4]: 1 of the main people behind Next,
+
+00:48:50.760 --> 00:48:50.880
+he did a talk on using Common Lisp as a
+
+00:48:51.720 --> 00:48:52.220
+replacement for a shell.
+
+00:48:58.700 --> 00:48:59.200
+[Speaker 2]: Yes, it was... I know him.
+
+00:49:00.680 --> 00:49:01.180
+I know that he exists.
+
+00:49:04.600 --> 00:49:04.900
+Next, I think it's a main maintainer of Nix,
+
+00:49:09.140 --> 00:49:09.620
+[Speaker 4]: Yeah, although his website's kind of,
+
+00:49:10.380 --> 00:49:10.880
+I think he took it down.
+
+00:49:12.280 --> 00:49:12.780
+[Speaker 2]: Ambrevar. Yeah, I think he,
+
+00:49:14.480 --> 00:49:14.980
+yeah, he took it down.
+
+00:49:17.360 --> 00:49:17.680
+[Speaker 4]: So if you want to, you can look at it in Time
+
+00:49:17.680 --> 00:49:18.180
+Machine.
+
+00:49:23.940 --> 00:49:24.440
+[Speaker 2]: Yeah, I do have that article in my bookmarks,
+
+00:49:26.740 --> 00:49:27.240
+I think, somewhere. I remember reading that.
+
+00:49:30.360 --> 00:49:30.840
+So also, I would like to keep separated
+
+00:49:32.880 --> 00:49:33.380
+things in that way to have shell and then
+
+00:49:37.940 --> 00:49:38.440
+Emacs or LEM. Like for Emacs I use Viter.
+
+00:49:40.760 --> 00:49:41.260
+I don't like that it has different,
+
+00:49:41.760 --> 00:49:42.260
+you know.
+
+00:49:44.900 --> 00:49:45.060
+[Speaker 4]: On the same time though,
+
+00:49:46.960 --> 00:49:47.120
+I also don't like my terminal not to be able
+
+00:49:52.340 --> 00:49:52.600
+to click URLs and I like I like my terminal
+
+00:49:54.560 --> 00:49:55.060
+to have history and you know to scroll
+
+00:49:58.040 --> 00:49:58.200
+position copy paste You can do some of that
+
+00:50:00.020 --> 00:50:00.160
+stuff, but you know how that stuff go on the
+
+00:50:01.960 --> 00:50:02.080
+killer ring I kind of view it as like an
+
+00:50:02.800 --> 00:50:03.300
+alternative to shell.
+
+00:50:06.940 --> 00:50:07.080
+[Speaker 2]: Fair enough, but I think when some for my
+
+00:50:08.720 --> 00:50:09.220
+terminal, I only use it for navigate,
+
+00:50:11.280 --> 00:50:11.780
+remove stuff, so basic stuff.
+
+00:50:14.280 --> 00:50:14.640
+When I have to like, I don't know,
+
+00:50:17.640 --> 00:50:18.140
+edit something, just open the...
+
+00:50:22.120 --> 00:50:22.400
+[Speaker 4]: I like to use completion and narrowing to
+
+00:50:24.480 --> 00:50:24.720
+find my files. I kind of wish I could do that
+
+00:50:26.320 --> 00:50:26.600
+[Speaker 0]: on the shell or like if you use
+
+00:50:27.400 --> 00:50:27.640
+[Speaker 4]: more D-Menu to do that.
+
+00:50:28.440 --> 00:50:28.760
+That would be, I'm sure,
+
+00:50:28.760 --> 00:50:29.260
+nicer.
+
+00:50:38.140 --> 00:50:38.240
+[Speaker 2]: There's a lot of tools for terminals to do
+
+00:50:39.800 --> 00:50:39.880
+that, right? But you have to configure all of
+
+00:50:41.580 --> 00:50:41.780
+them. Beam users are very aware of those
+
+00:50:46.980 --> 00:50:47.300
+tools. You know, having very good fuzzy
+
+00:50:49.240 --> 00:50:49.440
+finding of files and then all by the
+
+00:50:53.680 --> 00:50:54.100
+terminal. I do have a friend who is a user of
+
+00:50:56.820 --> 00:50:57.320
+the Forbidden Editor, he's good,
+
+00:51:01.900 --> 00:51:02.400
+that does have a lot of small,
+
+00:51:09.480 --> 00:51:09.980
+like fuzzy finding, and so complete commands,
+
+00:51:12.240 --> 00:51:12.740
+and call those images in the terminal,
+
+00:51:14.300 --> 00:51:14.800
+all sorts of crazy stuff.
+
+00:51:16.120 --> 00:51:16.620
+That I think are not overkill,
+
+00:51:20.380 --> 00:51:20.560
+but I mean, if you want to use it,
+
+00:51:29.540 --> 00:51:30.040
+go ahead. So yeah. The thing is that,
+
+00:51:32.360 --> 00:51:32.860
+So trickling back a little bit to LEM,
+
+00:51:35.600 --> 00:51:35.860
+I think an interesting thought that I have
+
+00:51:37.280 --> 00:51:37.780
+about LEM and I can do Emacs.
+
+00:51:40.680 --> 00:51:41.180
+Not now, because LEM is a very small,
+
+00:51:43.740 --> 00:51:44.240
+like literally people,
+
+00:51:46.000 --> 00:51:46.500
+at least developers and users,
+
+00:51:50.280 --> 00:51:50.780
+I don't know, maybe 10 less.
+
+00:51:56.780 --> 00:51:57.280
+But people may think, split the community,
+
+00:51:58.740 --> 00:51:58.900
+right? That's the main thing that should come
+
+00:51:59.960 --> 00:52:00.460
+to my mind, split the community,
+
+00:52:01.840 --> 00:52:02.140
+maybe you, because that's true.
+
+00:52:04.000 --> 00:52:04.280
+I mean, I'm not developing that much in Nui
+
+00:52:06.260 --> 00:52:06.760
+MacLisp because I'm developing them.
+
+00:52:12.080 --> 00:52:12.580
+That's not that I'm a force that you might
+
+00:52:13.360 --> 00:52:13.860
+think exists or anything,
+
+00:52:17.220 --> 00:52:17.400
+but you know, you're splitting a very small
+
+00:52:21.600 --> 00:52:21.760
+community. Not that LEM wants to do that or
+
+00:52:24.160 --> 00:52:24.360
+anything, or will be able to in any way,
+
+00:52:25.280 --> 00:52:25.780
+but you know what I mean.
+
+00:52:32.360 --> 00:52:32.780
+I thought about that, And I think it's an
+
+00:52:40.600 --> 00:52:40.800
+interesting concern. But that concern also
+
+00:52:42.180 --> 00:52:42.680
+stops innovation in some way.
+
+00:52:46.960 --> 00:52:47.460
+[Speaker 4]: I think you can, if you look at the example
+
+00:52:50.200 --> 00:52:50.680
+of how many EMAX talks are related to
+
+00:52:54.760 --> 00:52:54.960
+knowledge management and not all and like for
+
+00:52:57.840 --> 00:52:58.100
+instance denote and Orgrim don't really work
+
+00:53:01.740 --> 00:53:01.880
+together all that well they split the
+
+00:53:03.740 --> 00:53:03.960
+community so to say I don't think they make
+
+00:53:04.720 --> 00:53:05.220
+it weaker at all, though.
+
+00:53:08.560 --> 00:53:08.800
+I think you were saying competition is good,
+
+00:53:10.000 --> 00:53:10.500
+but yeah, competition is good.
+
+00:53:12.100 --> 00:53:12.360
+[Speaker 2]: Yeah, I agree on that.
+
+00:53:13.280 --> 00:53:13.780
+I want to put it in the...
+
+00:53:15.400 --> 00:53:15.900
+But, you know, I'm doing the devil's advocate
+
+00:53:18.252 --> 00:53:18.271
+[Speaker 0]: something, that's... The developer gates in
+
+00:53:18.308 --> 00:53:18.327
+this regard. Like
+
+00:53:18.327 --> 00:53:18.346
+[Speaker 2]: in this regard. If someone wants to say if
+
+00:53:19.280 --> 00:53:19.780
+someone wants to like say something that
+
+00:53:22.920 --> 00:53:23.160
+maybe, you know, because some people still
+
+00:53:30.800 --> 00:53:30.940
+remember the Emacs versus X Emacs thing in
+
+00:53:34.860 --> 00:53:35.360
+the past, you know, that the split of the and
+
+00:53:38.100 --> 00:53:38.240
+That was good in some way but also bad in
+
+00:53:39.800 --> 00:53:39.960
+others like the compatibility was a little
+
+00:53:42.560 --> 00:53:43.040
+bit of a hell You know at the end Emacs
+
+00:53:46.160 --> 00:53:46.440
+failed, no Emacs But at that time it wasn't
+
+00:53:50.140 --> 00:53:50.500
+that clear and some people like it wasn't
+
+00:53:53.200 --> 00:53:53.360
+there. And I can understand that kind of a
+
+00:53:53.360 --> 00:53:53.860
+feeling.
+
+00:53:58.820 --> 00:53:59.040
+[Speaker 4]: Well sometimes the steps forward you end up
+
+00:54:02.640 --> 00:54:02.760
+going Like you're on a hill and you want to
+
+00:54:05.820 --> 00:54:06.000
+[Speaker 0]: the way the path to get up to
+
+00:54:06.440 --> 00:54:06.720
+[Speaker 4]: get to a higher hill, but that higher hill
+
+00:54:10.920 --> 00:54:11.280
+goes down and up. It doesn't mean that even
+
+00:54:12.240 --> 00:54:12.600
+if you know you're going down,
+
+00:54:13.840 --> 00:54:14.340
+it doesn't mean that it was a mistake.
+
+00:54:19.740 --> 00:54:20.020
+[Speaker 2]: Okay, fair enough. And also another
+
+00:54:22.120 --> 00:54:22.360
+interesting thing that I want to envision in
+
+00:54:25.520 --> 00:54:25.720
+the future, if I have time or someone wants
+
+00:54:28.400 --> 00:54:28.740
+to help me with, is I want them to have
+
+00:54:30.240 --> 00:54:30.740
+different language for extension,
+
+00:54:32.560 --> 00:54:33.060
+different Lisp for extension,
+
+00:54:36.340 --> 00:54:36.840
+not only common Lisp, but Scheme closure.
+
+00:54:39.680 --> 00:54:40.080
+And maybe not EmacLisp probably,
+
+00:54:46.500 --> 00:54:47.000
+[Speaker 4]: that what Guile Emacs is trying to do?
+
+00:54:47.860 --> 00:54:48.080
+[Speaker 2]: but yeah. And funny enough- Isn't Guile Emacs
+
+00:54:50.060 --> 00:54:50.560
+tried to add Guile support to,
+
+00:54:52.040 --> 00:54:52.540
+but Guile is not scheme.
+
+00:54:53.560 --> 00:54:53.800
+Well, it's kind of scheme,
+
+00:54:54.440 --> 00:54:54.940
+but it's not all schemes,
+
+00:54:58.580 --> 00:54:58.780
+which is, you know, and it was just to
+
+00:55:02.540 --> 00:55:03.040
+replace EmacLisp with Gile.
+
+00:55:06.940 --> 00:55:07.260
+You have 2 both. It was similar in that way,
+
+00:55:12.100 --> 00:55:12.340
+but the thing is, Common Lisp does have a lot
+
+00:55:12.900 --> 00:55:13.220
+of interesting things.
+
+00:55:16.120 --> 00:55:16.620
+So someone wrote a closure in Common Lisp.
+
+00:55:20.640 --> 00:55:21.140
+Which is called Cloture.
+
+00:55:29.720 --> 00:55:29.860
+Someone wrote, well it's on the way but it's
+
+00:55:35.440 --> 00:55:35.740
+getting there, a standard scheme in Common
+
+00:55:39.440 --> 00:55:39.940
+Lisp. So to add support to LEM,
+
+00:55:44.440 --> 00:55:44.940
+will be as easy as import package,
+
+00:55:46.360 --> 00:55:46.860
+and you have, And if that language,
+
+00:55:49.640 --> 00:55:50.060
+which usually does, supports very well
+
+00:55:51.740 --> 00:55:51.900
+interaction between the host language and the
+
+00:55:52.920 --> 00:55:53.420
+language that tries to provide,
+
+00:55:57.040 --> 00:55:57.180
+you will mostly automatically have new
+
+00:55:58.060 --> 00:55:58.560
+language for the editor.
+
+00:56:05.640 --> 00:56:06.100
+[Speaker 4]: I think the more interesting hanging fruit
+
+00:56:09.280 --> 00:56:09.780
+would be like using Next to scrape websites,
+
+00:56:12.500 --> 00:56:13.000
+download CSV bank statements,
+
+00:56:15.940 --> 00:56:16.440
+integrating with like password managers and
+
+00:56:27.880 --> 00:56:28.180
+or using... yeah you could still do with
+
+00:56:30.120 --> 00:56:30.620
+[Speaker 2]: But isn't that more like next thing oh yeah
+
+00:56:31.460 --> 00:56:31.580
+yeah I
+
+00:56:32.400 --> 00:56:32.520
+[Speaker 4]: common list though mean what's your your
+
+00:56:34.760 --> 00:56:35.260
+other options would be Selenium,
+
+00:56:41.200 --> 00:56:41.580
+JavaScript, Next already gives you the REPL
+
+00:56:47.940 --> 00:56:48.300
+for that. Or when you had that Ambryvar talk,
+
+00:56:50.060 --> 00:56:50.220
+when he, I don't know if you watched it,
+
+00:56:52.920 --> 00:56:53.420
+but when you use a shell and a command takes
+
+00:56:56.060 --> 00:56:56.200
+takes a while It just automatically takes you
+
+00:56:58.440 --> 00:56:58.580
+back into your shell and says I'll just let
+
+00:57:00.520 --> 00:57:00.800
+this run in the background or being able to
+
+00:57:02.760 --> 00:57:03.260
+more easily run commands in parallel.
+
+00:57:13.620 --> 00:57:13.880
+[Speaker 2]: But that's not like Nix stuff,
+
+00:57:18.740 --> 00:57:19.140
+[Speaker 4]: The Ambrivar, the shell 1,
+
+00:57:21.540 --> 00:57:21.900
+[Speaker 2]: right? Not like? When he did it,
+
+00:57:23.380 --> 00:57:23.580
+he. Because 1
+
+00:57:25.340 --> 00:57:25.440
+[Speaker 4]: wasn't. of the things He did in that when he
+
+00:57:30.040 --> 00:57:30.160
+was using the repl in place of the shell is 1
+
+00:57:31.240 --> 00:57:31.740
+of the things in there was if,
+
+00:57:33.720 --> 00:57:34.120
+let's say you were compiling a program,
+
+00:57:36.820 --> 00:57:37.040
+that takes a while. If it took longer than
+
+00:57:40.240 --> 00:57:40.440
+like 3 seconds or something along those
+
+00:57:42.560 --> 00:57:42.740
+lines, it would kick you back into the shell
+
+00:57:44.260 --> 00:57:44.660
+and say, oh, we're waiting for this program
+
+00:57:48.160 --> 00:57:48.380
+[Speaker 2]: Oh, interesting. And
+
+00:57:48.840 --> 00:57:49.340
+[Speaker 4]: to run, to finish. then you could,
+
+00:57:51.200 --> 00:57:51.600
+and then it had back reference support.
+
+00:57:55.260 --> 00:57:55.520
+So you could say, Oh, app search for this
+
+00:57:58.480 --> 00:57:58.820
+program. And then with the,
+
+00:58:00.780 --> 00:58:01.220
+with the shell, I, when I want to search,
+
+00:58:04.460 --> 00:58:04.640
+I'll then grep through that list to narrow it
+
+00:58:06.900 --> 00:58:07.180
+down even further, but I do a whole new
+
+00:58:08.400 --> 00:58:08.900
+search. It just says, oh,
+
+00:58:10.600 --> 00:58:11.100
+just grep through what I already searched.
+
+00:58:14.180 --> 00:58:14.680
+Just grep through the results of the command
+
+00:58:15.940 --> 00:58:16.440
+that's 3 commands ago.
+
+00:58:17.980 --> 00:58:18.180
+[Speaker 2]: Interesting. So it
+
+00:58:23.880 --> 00:58:24.380
+[Speaker 4]: runs instantly. Or look for my build errors
+
+00:58:25.840 --> 00:58:26.340
+in my compilation output,
+
+00:58:29.700 --> 00:58:30.060
+[Speaker 0]: rather than trying to build it again grepping
+
+00:58:30.360 --> 00:58:30.860
+for the errors.
+
+00:58:33.640 --> 00:58:34.120
+[Speaker 2]: I was checking, so where's that project?
+
+00:58:36.420 --> 00:58:36.920
+I was looking for it. You know,
+
+00:58:44.540 --> 00:58:45.040
+the... Yeah, I want to check the,
+
+00:58:48.000 --> 00:58:48.500
+[Speaker 4]: There was a talk. I also had a webpage.
+
+00:58:55.080 --> 00:58:55.580
+[Speaker 2]: you know... This red bull?
+
+00:58:58.260 --> 00:58:58.760
+No, this is not what I meant.
+
+00:59:34.174 --> 00:59:34.674
+[Speaker 0]: What is it? What is it?
+
+00:59:47.664 --> 00:59:48.164
+I cannot find the... I was trying to find
+
+00:59:54.180 --> 00:59:54.680
+[Speaker 2]: the repo for... It's C-L-E-S-H,
+
+00:59:59.640 --> 00:59:59.840
+like a unit shell for interface with for
+
+01:00:02.080 --> 01:00:02.580
+common Lisp? Is that the thing?
+
+01:00:09.000 --> 01:00:09.160
+[Speaker 0]: I don't know. I'm
+
+01:00:12.260 --> 01:00:12.760
+[Speaker 4]: trying to find the link to his old,
+
+01:00:16.560 --> 01:00:17.060
+no longer website. Website.
+
+01:00:21.500 --> 01:00:22.000
+[Speaker 2]: Skip. Technical issues.
+
+01:00:23.400 --> 01:00:23.900
+Maybe this 1.
+
+01:00:35.820 --> 01:00:36.320
+I cannot find it.
+
+01:00:37.800 --> 01:00:38.300
+[Speaker 4]: I got it.
+
+01:00:51.140 --> 01:00:51.640
+[Speaker 0]: Go to that link. Okay.
+
+01:01:02.020 --> 01:01:02.220
+[Speaker 4]: There's also a FOSDM target associated with
+
+01:01:02.380 --> 01:01:02.880
+it too.
+
+01:01:07.600 --> 01:01:08.100
+[Speaker 2]: Oh yeah, interesting. Clash and CH.
+
+01:01:13.520 --> 01:01:14.020
+CH. Oh, I was looking at the clesh.
+
+01:01:18.640 --> 01:01:19.140
+Clish, so the, let's check for it.
+
+01:01:23.560 --> 01:01:23.860
+The other 1 is shell and camel.
+
+01:01:24.120 --> 01:01:24.620
+This 1.
+
+01:01:37.505 --> 01:01:38.005
+[Speaker 0]: Interesting. Oops. Close Oops.
+
+01:01:40.900 --> 01:01:41.400
+[Speaker 2]: Oh, it's a GNU project.
+
+01:01:44.660 --> 01:01:45.160
+Oh, interesting.
+
+01:01:51.400 --> 01:01:51.680
+[Speaker 4]: The other thing that was interesting there is
+
+01:01:52.760 --> 01:01:53.260
+you use those disk images,
+
+01:02:00.140 --> 01:02:00.520
+LISP images, to have some of your common LISP
+
+01:02:05.920 --> 01:02:06.100
+utilities or programming libraries that you
+
+01:02:07.660 --> 01:02:08.040
+utilize in tandem with your REPL.
+
+01:02:13.700 --> 01:02:14.200
+So you can easily pull up a more featureful
+
+01:02:18.160 --> 01:02:18.400
+or a REPL that has more tools in it than by
+
+01:02:18.400 --> 01:02:18.900
+default.
+
+01:02:21.740 --> 01:02:22.240
+[Speaker 2]: Interesting. So yeah, that's,
+
+01:02:24.380 --> 01:02:24.880
+yeah, I mean, that will be,
+
+01:02:26.800 --> 01:02:27.100
+it will be fairly, no,
+
+01:02:28.700 --> 01:02:29.200
+no, easy. Well, easy, but not,
+
+01:02:33.080 --> 01:02:33.580
+But this can be integrated into LEM probably.
+
+01:02:36.060 --> 01:02:36.200
+Very, you know, not that easy because you
+
+01:02:38.520 --> 01:02:39.020
+have to change the few things.
+
+01:02:43.780 --> 01:02:44.280
+But this can be, you know.
+
+01:02:47.100 --> 01:02:47.600
+[Speaker 4]: Well, as example, he just...
+
+01:02:49.360 --> 01:02:49.860
+Well, 1 of the things that was in the talk,
+
+01:02:51.080 --> 01:02:51.300
+1 of the main ideas was,
+
+01:02:56.160 --> 01:02:56.380
+let's just, rather than trying to make the
+
+01:02:57.600 --> 01:02:58.040
+shell closer to a REPL,
+
+01:03:00.780 --> 01:03:01.280
+let's make a REPL closer to a shell,
+
+01:03:03.380 --> 01:03:03.760
+make it to where we can easily run Linux
+
+01:03:07.280 --> 01:03:07.420
+programs in it, and then use the rest of the
+
+01:03:10.120 --> 01:03:10.620
+REPL goodness, make it to where parentheses
+
+01:03:12.080 --> 01:03:12.580
+are easy to use, like paraedit,
+
+01:03:20.920 --> 01:03:21.420
+And then all of a sudden you have a nicer
+
+01:03:24.320 --> 01:03:24.640
+shell. Not really shell,
+
+01:03:24.640 --> 01:03:25.140
+but.
+
+01:03:30.020 --> 01:03:30.520
+[Speaker 2]: Oh, this is huge.
+
+01:03:33.520 --> 01:03:33.960
+[Speaker 6]: Hi, folks. Sorry for the interruption.
+
+01:03:35.200 --> 01:03:35.700
+It's Leo from the general track.
+
+01:03:39.380 --> 01:03:39.600
+We are about to go back live on the
+
+01:03:41.880 --> 01:03:42.040
+development track, so you can continue the
+
+01:03:43.080 --> 01:03:43.480
+discussion. You know, we are recording
+
+01:03:45.200 --> 01:03:45.360
+everything and you seem to be having a great
+
+01:03:47.520 --> 01:03:47.840
+amount of fun to issue the need for lunch,
+
+01:03:49.080 --> 01:03:49.580
+at least for the people in the US.
+
+01:03:51.160 --> 01:03:51.360
+I just want to let you know,
+
+01:03:53.680 --> 01:03:53.860
+in 2 minutes' time, we will be moving back to
+
+01:03:54.840 --> 01:03:55.340
+the rest of the talk for the afternoon,
+
+01:03:56.840 --> 01:03:57.040
+but feel free to stay in a room and keep
+
+01:03:57.760 --> 01:03:58.260
+discussing. All right?
+
+01:04:01.160 --> 01:04:01.660
+[Speaker 2]: Thank you. All right.
+
+01:04:03.640 --> 01:04:03.940
+[Speaker 6]: It might be a little brutal in 2 minutes,
+
+01:04:07.920 --> 01:04:08.240
+so if you have your watch synchronized at 7
+
+01:04:09.080 --> 01:04:09.520
+sharps, so in 2 minutes,
+
+01:04:10.040 --> 01:04:10.540
+it'll cut off.
+
+01:04:19.600 --> 01:04:20.100
+[Speaker 2]: Okay. Bye-bye. Bye. Oh my.
+
+01:04:23.860 --> 01:04:24.360
+Yeah. Interesting stuff indeed.
+
+01:04:29.380 --> 01:04:29.540
+[Speaker 4]: to listen to it after you're done with the
+
+01:04:32.380 --> 01:04:32.540
+[Speaker 0]: I guess you have Have you
+
+01:04:33.480 --> 01:04:33.980
+[Speaker 4]: comp. ever listened to that talk before?
+
+01:04:38.320 --> 01:04:38.800
+The 1 that's in that webpage,
+
+01:04:39.380 --> 01:04:39.880
+the FOSDEM 1.
+
+01:04:40.840 --> 01:04:41.340
+[Speaker 2]: Which 1? Sorry? 0 yeah,
+
+01:04:44.480 --> 01:04:44.980
+I in fact saw him live in the FOSDEM 2020.
+
+01:04:50.053 --> 01:04:50.091
+[Speaker 0]: So I a little bit. 2020.
+
+01:04:50.166 --> 01:04:50.204
+So we him
+
+01:04:51.760 --> 01:04:51.980
+[Speaker 2]: talked with him a little bit The first time
+
+01:04:55.760 --> 01:04:56.260
+is here in well here in Europe here in
+
+01:05:01.320 --> 01:05:01.440
+Brussels like 3 hours away or 2 hours away in
+
+01:05:02.320 --> 01:05:02.820
+plane from where I am.
+
+01:05:05.320 --> 01:05:05.800
+[Speaker 0]: 1 of the things that's kind of interesting
+
+01:05:06.900 --> 01:05:07.040
+with, you have some of
+
+01:05:09.060 --> 01:05:09.160
+[Speaker 4]: the people who come from Europe to the US and
+
+01:05:11.820 --> 01:05:11.980
+they're like, oh, I want to visit all the
+
+01:05:13.780 --> 01:05:14.060
+corners of the US in a couple of days.
+
+01:05:17.920 --> 01:05:18.420
+And it's like, No, US is the size of Europe.
+
+01:05:19.740 --> 01:05:19.960
+[Speaker 0]: The
+
+01:05:21.160 --> 01:05:21.660
+[Speaker 4]: states are the size of their countries.
+
+01:05:23.140 --> 01:05:23.400
+You don't...
+
+01:05:27.100 --> 01:05:27.600
+[Speaker 2]: I know. I know. It's very...
+
+01:05:30.660 --> 01:05:31.080
+It's huge. And it's like 6 hours different
+
+01:05:32.280 --> 01:05:32.780
+from coast to coast, something like that.
+
+01:05:38.000 --> 01:05:38.240
+[Speaker 4]: Yeah, and that's driving as fast as you can
+
+01:05:39.960 --> 01:05:40.140
+on the freeway, on the best roads that you
+
+01:05:41.160 --> 01:05:41.660
+possibly can, not taking...
+
+01:05:45.700 --> 01:05:46.200
+[Speaker 2]: Yeah, that would be...
+
+01:05:53.400 --> 01:05:53.900
+So the thing that I try to do also with LEM
+
+01:05:57.880 --> 01:05:58.140
+is to move my workflow from LEM to Emax,
+
+01:06:01.620 --> 01:06:02.120
+so for Emax to LEM, use it more.
+
+01:06:07.080 --> 01:06:07.580
+And I hope to, we still have a long way to go
+
+01:06:08.440 --> 01:06:08.940
+in terms of usability,
+
+01:06:10.600 --> 01:06:11.100
+in terms of other things,
+
+01:06:12.640 --> 01:06:13.140
+because we need more power.
+
+01:06:18.420 --> 01:06:18.620
+So This is also my attempt to do some
+
+01:06:20.320 --> 01:06:20.820
+publicity to the Blend project itself,
+
+01:06:23.100 --> 01:06:23.600
+to need to add more users,
+
+01:06:26.200 --> 01:06:26.700
+to be willing to try and to fail trying,
+
+01:06:29.640 --> 01:06:30.140
+because we still have some rough edges.
+
+01:06:38.320 --> 01:06:38.820
+Yeah, just trying to do that,
+
+01:06:41.720 --> 01:06:42.220
+which is, and I apologize to the Emaclist
+
+01:06:43.580 --> 01:06:43.740
+community, which I'm part of,
+
+01:06:44.660 --> 01:06:45.140
+but I don't want to like,
+
+01:06:47.020 --> 01:06:47.520
+disencourage the use of getting Emacs anyway.
+
+01:06:48.960 --> 01:06:49.460
+I think both are awesome.
+
+01:06:51.300 --> 01:06:51.800
+I want to anyone to get a real impression.
+
+01:06:57.040 --> 01:06:57.100
+[Speaker 0]: What do
+
+01:06:57.740 --> 01:06:58.240
+[Speaker 2]: you think? PlasmaStrike,
+
+01:07:01.560 --> 01:07:02.060
+you have a very powerful name.
+
+01:07:07.580 --> 01:07:07.840
+[Speaker 4]: I don't think that's something to worry
+
+01:07:09.660 --> 01:07:10.160
+about. I don't personally,
+
+01:07:15.380 --> 01:07:15.760
+but I'm going to watch the EMMS talk.
+
+01:07:17.360 --> 01:07:17.560
+That's something that I don't really use too
+
+01:07:20.800 --> 01:07:21.220
+much on my Emacs config.
+
+01:07:22.600 --> 01:07:23.100
+So I'm going to let you go.
+
+01:07:24.440 --> 01:07:24.720
+[Speaker 2]: OK, yeah, I'm going to go.
+
+01:07:26.320 --> 01:07:26.760
+I'm going to maybe watch the garbage
+
+01:07:27.800 --> 01:07:28.300
+collector talk, which is interesting.
+
+01:07:32.540 --> 01:07:33.040
+So thank you all very much.
+
+01:07:35.860 --> 01:07:36.080
+I'm gonna go. Thanks for the questions and
+
+01:07:40.811 --> 01:07:41.288
+all that. I think I hope I answered correctly
+
+01:07:47.040 --> 01:07:47.540
+[Speaker 4]: is part of the value of being part of this is
+
+01:07:50.580 --> 01:07:50.740
+[Speaker 2]: all of them. Yeah, I figure this that's a way
+
+01:07:52.540 --> 01:07:53.040
+[Speaker 4]: conversations. So of saying thank you for
+
+01:07:54.480 --> 01:07:54.980
+people sharing interesting talks.
+
+01:07:57.780 --> 01:07:57.940
+[Speaker 2]: Indeed. Thank you all very much for going to
+
+01:08:02.380 --> 01:08:02.880
+the Emacs conf and to watch me.
+
+01:08:06.440 --> 01:08:06.940
+So thank you all very much.
+
+01:08:09.360 --> 01:08:09.860
+I'm going to go do that.
+
+01:08:10.640 --> 01:08:10.890
+[Speaker 0]: See you.
diff --git a/2023/captions/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--main--chapters.vtt b/2023/captions/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--main--chapters.vtt
new file mode 100644
index 00000000..875539c5
--- /dev/null
+++ b/2023/captions/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--main--chapters.vtt
@@ -0,0 +1,35 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:16.999
+Introduction
+
+00:00:17.000 --> 00:01:26.639
+Why Lisp matters
+
+00:01:26.640 --> 00:02:54.840
+Why Emacs Lisp was chosen
+
+00:02:54.841 --> 00:03:38.580
+Other "Emacsen"
+
+00:03:38.581 --> 00:06:39.119
+Why not Common Lisp?
+
+00:06:39.120 --> 00:08:30.079
+Common Lisp is still not dead or is always dead
+
+00:08:30.080 --> 00:08:58.259
+Lem is a nice Emacsen implementation
+
+00:08:58.260 --> 00:10:31.079
+Why not just use GNU Emacs?
+
+00:10:31.080 --> 00:14:03.079
+Why Lem
+
+00:14:03.080 --> 00:15:49.599
+Similarities and differences
+
+00:15:49.600 --> 00:18:27.560
+Demo
diff --git a/2023/captions/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--main.vtt b/2023/captions/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--main.vtt
new file mode 100644
index 00000000..b078c281
--- /dev/null
+++ b/2023/captions/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--main.vtt
@@ -0,0 +1,1079 @@
+WEBVTT captioned by sachac, checked by sachac
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:03.199
+Hello, my name is Fermin.
+
+00:00:03.200 --> 00:00:06.959
+Today, I'm going to talk about the Emacsen family,
+
+00:00:06.960 --> 00:00:11.159
+the design of an Emacs, and the importance of Lisp.
+
+00:00:11.160 --> 00:00:13.519
+So we're going to talk about Lisp.
+
+00:00:13.520 --> 00:00:16.999
+I want to start from the end.
+
+NOTE Why Lisp matters
+
+00:00:17.000 --> 00:00:19.039
+The first question I want to ask is
+
+00:00:19.040 --> 00:00:21.399
+why I think Lisp matters.
+
+00:00:21.400 --> 00:00:22.879
+When I'm talking about Lisp here,
+
+00:00:22.880 --> 00:00:27.559
+I'm talking about the idea of Lisp,
+
+00:00:27.560 --> 00:00:30.119
+so the family of languages that are Lisp.
+
+00:00:30.120 --> 00:00:34.719
+But given that there's no formal specification of Lisp,
+
+00:00:34.720 --> 00:00:40.599
+so the opinion might vary. I will expect that Lisp,
+
+00:00:40.600 --> 00:00:44.439
+most of the Lisp have these kind of features.
+
+00:00:44.440 --> 00:00:46.239
+The first one is homoiconic:
+
+00:00:46.240 --> 00:00:49.799
+the code is data, basically.
+
+00:00:49.800 --> 00:00:52.559
+They also have a REPL: read-eval-print loop.
+
+00:00:52.560 --> 00:00:57.759
+That is very powerful and can help in development.
+
+00:00:57.760 --> 00:01:00.359
+Also, I think a good Lisp
+
+00:01:00.360 --> 00:01:03.319
+should have a powerful macro system.
+
+00:01:03.320 --> 00:01:05.759
+I'm good with compile-time macros,
+
+00:01:05.760 --> 00:01:07.599
+but read-time is also interesting.
+
+00:01:07.600 --> 00:01:10.279
+There's a lot of Lisp that you can choose.
+
+00:01:10.280 --> 00:01:11.999
+There's the main three ones, of course,
+
+00:01:12.000 --> 00:01:13.839
+with Scheme, Common Lisp, and Clojure.
+
+00:01:13.840 --> 00:01:19.674
+Scheme by Guile, Common Lisp by Common Lisp,
+
+00:01:19.675 --> 00:01:26.639
+and Clojure by Clojure or ClojureScript.
+
+NOTE Why Emacs Lisp was chosen
+
+00:01:26.640 --> 00:01:28.079
+So let's talk about Emacs Lisp.
+
+00:01:28.080 --> 00:01:29.679
+I didn't mention Emacs Lisp.
+
+00:01:29.680 --> 00:01:32.519
+I'm going to talk about why Emacs Lisp
+
+00:01:32.520 --> 00:01:35.599
+was chosen for an Emacs editor.
+
+00:01:35.600 --> 00:01:39.159
+We're going to explore this kind of design of the Emacs.
+
+00:01:39.160 --> 00:01:42.279
+And Emacs Lisp is the main language of it. Why?
+
+00:01:42.280 --> 00:01:44.959
+Given that there were a few alternatives at the time,
+
+00:01:44.960 --> 00:01:48.159
+why Emacs Lisp was chosen?
+
+00:01:48.160 --> 00:01:51.919
+So RMS, Richard Stallman, needed a Lisp,
+
+00:01:51.920 --> 00:01:54.279
+and there wasn't one available at the time.
+
+00:01:54.280 --> 00:01:57.039
+Keep in mind, this was the early 80s.
+
+00:01:57.040 --> 00:02:03.240
+Stallman was writing at that point the GCC, I think,
+
+00:02:03.241 --> 00:02:07.974
+and he was writing the core components
+
+00:02:07.975 --> 00:02:10.440
+of what is going to become GNU.
+
+00:02:10.441 --> 00:02:15.499
+He needed an editor. He wanted Lisp. He wanted Emacs.
+
+00:02:15.500 --> 00:02:20.280
+So he wrote Emacs Lisp. So at that time,
+
+00:02:20.281 --> 00:02:24.599
+the functionality was more important than "perfection."
+
+00:02:24.600 --> 00:02:26.639
+What I mean [by] "perfection" is: we programmers
+
+00:02:26.640 --> 00:02:33.359
+sometimes like to make everything good
+
+00:02:33.360 --> 00:02:36.479
+or very, very good when sometimes, indeed,
+
+00:02:36.480 --> 00:02:39.119
+it's more important that it works
+
+00:02:39.120 --> 00:02:42.919
+to do the task that it should.
+
+00:02:42.920 --> 00:02:44.199
+And it's not a bad language.
+
+00:02:44.200 --> 00:02:50.239
+It's not that bad. At that time, it was mostly nice.
+
+00:02:50.240 --> 00:02:54.840
+Today, it's good enough, I think.
+
+NOTE Other "Emacsen"
+
+00:02:54.841 --> 00:02:59.460
+He wasn't the first one, the GNU Emacs,
+
+00:02:59.461 --> 00:03:02.540
+nor the only one, of course.
+
+00:03:02.541 --> 00:03:06.439
+There were others: Hemlock, Zmacs, and Climacs...
+
+00:03:06.440 --> 00:03:08.980
+Two of them, I think, were written in Common Lisp,
+
+00:03:08.981 --> 00:03:14.479
+and Zmacs was written in a Lisp from a Lisp machine,
+
+00:03:14.480 --> 00:03:16.639
+so it was an implementation of Emacs.
+
+00:03:16.640 --> 00:03:19.039
+Not GNU Emacs, but the original idea
+
+00:03:19.040 --> 00:03:22.079
+of Emacs for a Lisp machine.
+
+00:03:22.080 --> 00:03:23.759
+So Hemlock was written in Common Lisp,
+
+00:03:23.760 --> 00:03:26.079
+but it's no longer used and no longer developed,
+
+00:03:26.080 --> 00:03:28.999
+as far as I know. And Climacs, it was developed,
+
+00:03:29.000 --> 00:03:31.519
+but it was abandoned, I think.
+
+00:03:31.520 --> 00:03:33.639
+So three of them failed for different reasons.
+
+00:03:33.640 --> 00:03:37.879
+Zmacs was because of the Lisp machine market crash,
+
+00:03:37.880 --> 00:03:38.580
+and yeah, it also failed.
+
+NOTE Why not Common Lisp?
+
+00:03:38.581 --> 00:03:44.039
+So Emacs got alone. And in the 90s, interesting to explore,
+
+00:03:44.040 --> 00:03:46.479
+some people suggest that why
+
+00:03:46.480 --> 00:03:49.679
+now that we have a standard Lisp, right,
+
+00:03:49.680 --> 00:03:52.559
+because Common Lisp was standardized in '94,
+
+00:03:52.560 --> 00:03:56.719
+why don't we change Emacs Lisp to Common Lisp?
+
+00:03:56.720 --> 00:03:58.999
+These are the other reasons I think are important,
+
+00:03:59.000 --> 00:04:01.159
+because that's why Stallman didn't choose Common Lisp.
+
+00:04:01.160 --> 00:04:02.039
+But I think the main one
+
+00:04:02.040 --> 00:04:03.759
+that I didn't write here
+
+00:04:03.760 --> 00:04:09.039
+is that Stallman wasn't a big fan of Common Lisp,
+
+00:04:09.040 --> 00:04:12.679
+and he was at the time the main developer
+
+00:04:12.680 --> 00:04:14.040
+and maintainer, of course, for Emacs.
+
+00:04:14.041 --> 00:04:16.439
+So he chose not to move to Common Lisp.
+
+00:04:16.440 --> 00:04:18.479
+But other reasons may be why...
+
+00:04:18.480 --> 00:04:22.919
+Because he had a late and painful standardization.
+
+00:04:22.920 --> 00:04:28.039
+Keep in mind, the first book that Guy Steele wrote
+
+00:04:28.040 --> 00:04:32.239
+was in 1984. The standardization finished in 19--
+
+00:04:32.240 --> 00:04:38.279
+sorry, in 1984 was the first book
+
+00:04:38.280 --> 00:04:44.420
+and the standardization finished in 1994.
+
+00:04:44.421 --> 00:04:48.119
+So, like, 10 years of difference from one to the other.
+
+00:04:48.120 --> 00:04:51.879
+10 years of a lot of talk, a lot of money,
+
+00:04:51.880 --> 00:04:56.399
+and a lot of pain probably.
+
+00:04:56.400 --> 00:04:59.199
+The Lisp usage declined in the 90s
+
+00:04:59.200 --> 00:05:00.959
+due to the AI winter.
+
+00:05:00.960 --> 00:05:03.359
+We all know about the Lisp machine market crash.
+
+00:05:03.360 --> 00:05:08.839
+And the failure of commercial Lisp machine was
+
+00:05:08.840 --> 00:05:12.239
+inevitable at that point.
+
+00:05:12.240 --> 00:05:17.160
+So all the potential Emacs friends died.
+
+00:05:17.161 --> 00:05:21.279
+And also a lot of Emacs Lisp was already available.
+
+00:05:21.280 --> 00:05:24.559
+Emacs was already an amateur utility.
+
+00:05:24.560 --> 00:05:29.959
+Unix won the war of the operating system, as we know,
+
+00:05:29.960 --> 00:05:33.839
+and Emacs Lisp was available in Unix,
+
+00:05:33.840 --> 00:05:36.919
+or in GNU/Linux, as we know,
+
+00:05:36.920 --> 00:05:40.479
+which is the most successful implementation of Unix.
+
+00:05:40.480 --> 00:05:44.207
+Sorry, BSD. Okay.
+
+00:05:44.208 --> 00:05:48.399
+So Emacs won by being the "better" alternative.
+
+00:05:48.400 --> 00:05:49.999
+I'm quoting "better" here because
+
+00:05:50.000 --> 00:05:53.699
+I think Emacs does have a better design
+
+00:05:53.700 --> 00:05:56.959
+and, well, it was the one that survived, right?
+
+00:05:56.960 --> 00:06:00.039
+Which is the more important thing for a software or,
+
+00:06:00.040 --> 00:06:05.159
+you know... So Emacs won by being free,
+
+00:06:05.160 --> 00:06:08.399
+also in price, which I think the Lisp machine wasn't.
+
+00:06:08.400 --> 00:06:11.519
+So that was also very good. It was included.
+
+00:06:11.520 --> 00:06:14.559
+It had, and it still has, of course,
+
+00:06:14.560 --> 00:06:15.879
+a nice collection of packages
+
+00:06:15.880 --> 00:06:20.679
+that improve the standard functionality.
+
+00:06:20.680 --> 00:06:23.479
+It was easy to extend because of the nature of Lisp.
+
+00:06:23.480 --> 00:06:26.039
+And it has a very good integration with GNU/Linux,
+
+00:06:26.040 --> 00:06:29.399
+of course. It was created to write it.
+
+00:06:29.400 --> 00:06:31.079
+It makes sense that it's very good
+
+00:06:31.080 --> 00:06:39.119
+for a system administration perspective.
+
+NOTE Common Lisp is still not dead or is always dead
+
+00:06:39.120 --> 00:06:43.319
+But I think Common Lisp is not dead yet.
+
+00:06:43.320 --> 00:06:45.719
+Or some people say that it's always dead,
+
+00:06:45.720 --> 00:06:48.399
+so you cannot kill the something that is always dead.
+
+00:06:48.400 --> 00:06:50.719
+So I don't always code in C,
+
+00:06:50.720 --> 00:06:54.199
+but when I do, it's Lisp. I'm not a big fan of C
+
+00:06:54.200 --> 00:06:58.599
+for a lot of things, but yeah.
+
+00:06:58.600 --> 00:07:02.439
+Why I think Common Lisp is still relevant
+
+00:07:02.440 --> 00:07:05.399
+and can be used for all kind of application,
+
+00:07:05.400 --> 00:07:09.279
+both commercially and non-commercially.
+
+00:07:09.280 --> 00:07:11.839
+The first one is the main implementation
+
+00:07:11.840 --> 00:07:16.799
+of Common Lisp, which is called SBCL, which is awesome.
+
+00:07:16.800 --> 00:07:19.399
+It's fast. It's a very good extension.
+
+00:07:19.400 --> 00:07:21.639
+Basically, it's the reference one today.
+
+00:07:21.640 --> 00:07:25.559
+The namespaces of common Lisp,
+
+00:07:25.560 --> 00:07:26.879
+I really like the implementation.
+
+00:07:26.880 --> 00:07:28.719
+Some people don't like it. It's a matter of taste.
+
+00:07:28.720 --> 00:07:29.639
+But I think it's really good.
+
+00:07:29.640 --> 00:07:32.919
+I have a timeless standard. So it was standardized
+
+00:07:32.920 --> 00:07:35.979
+in the 90s, as I said.
+
+00:07:35.980 --> 00:07:38.880
+And it doesn't really need a new standard.
+
+00:07:38.881 --> 00:07:44.119
+Some people say it does need, but I don't think so.
+
+00:07:44.120 --> 00:07:45.999
+Also it does have macro readers,
+
+00:07:46.000 --> 00:07:49.159
+which I think is a very nice feature of Common Lisp
+
+00:07:49.160 --> 00:07:51.239
+that other Lisp doesn't seem to have,
+
+00:07:51.240 --> 00:07:56.719
+or a lot of them don't: in my mind, Emacs Lisp and Clojure.
+
+00:07:56.720 --> 00:07:58.199
+Also, it's image-based development,
+
+00:07:58.200 --> 00:08:00.399
+which is also quite unique to Common Lisp.
+
+00:08:00.400 --> 00:08:04.359
+I don't know all the Lisp that does have this.
+
+00:08:04.360 --> 00:08:05.359
+Basically, you develop a REPL
+
+00:08:05.360 --> 00:08:10.159
+and then you dump the entire REPL into an image.
+
+00:08:10.160 --> 00:08:12.079
+Java would be like a core dump.
+
+00:08:12.080 --> 00:08:14.159
+And you create an executable.
+
+00:08:14.160 --> 00:08:17.159
+Which at the time, I guess in the 90s,
+
+00:08:17.160 --> 00:08:18.199
+was a huge one, right?
+
+00:08:18.200 --> 00:08:20.679
+Because you have the entire language, and the REPL,
+
+00:08:20.680 --> 00:08:23.799
+and the code. But today are like 20 MB,
+
+00:08:23.800 --> 00:08:26.599
+which in today's standard is nothing.
+
+00:08:26.600 --> 00:08:30.079
+There's pictures in your phone larger than 20 MB.
+
+NOTE Lem is a nice Emacsen implementation
+
+00:08:30.080 --> 00:08:39.239
+So there's a new Emacs in town--well, Emacs, not Emacs,
+
+00:08:39.240 --> 00:08:43.439
+Which is Lem. I think it's a very good Emacs implementation.
+
+00:08:43.440 --> 00:08:46.679
+What I mean by "Emacs" here is not a clone of GNU Emacs,
+
+00:08:46.680 --> 00:08:51.559
+but an Emacs-inspired editor with similar characteristics,
+
+00:08:51.560 --> 00:08:53.519
+and written in a Lisp,
+
+00:08:53.520 --> 00:08:58.259
+which is why I said that Lisp was very important.
+
+NOTE Why not just use GNU Emacs?
+
+00:08:58.260 --> 00:09:01.559
+So first, I'm going to address the elephant in the room,
+
+00:09:01.560 --> 00:09:05.039
+and the question that maybe most
+
+00:09:05.040 --> 00:09:06.159
+of you are now thinking.
+
+00:09:06.160 --> 00:09:12.919
+Why not just use GNU Emacs? It's the project.
+
+00:09:12.920 --> 00:09:15.759
+It's the main one, right? Why choose another one?
+
+00:09:15.760 --> 00:09:18.199
+So Lem is relatively new, 2018.
+
+00:09:18.200 --> 00:09:20.199
+And it can explore different ideas.
+
+00:09:20.200 --> 00:09:21.679
+It was developed by Sasaki-san.
+
+00:09:21.680 --> 00:09:26.719
+Basically, it was mostly a one-month project,
+
+00:09:26.720 --> 00:09:31.940
+but we are getting there. I'm not the maintainer.
+
+00:09:31.941 --> 00:09:36.959
+I'm a developer of Lem. So given that it's
+
+00:09:36.960 --> 00:09:39.239
+relatively new, it can explore different ideas.
+
+00:09:39.240 --> 00:09:43.519
+You're not bound to a community or backwards compatibility.
+
+00:09:43.520 --> 00:09:45.439
+You can explore different ideas,
+
+00:09:45.440 --> 00:09:46.199
+and I think that's always nice.
+
+00:09:46.200 --> 00:09:49.839
+Having multiple options creates competition,
+
+00:09:49.840 --> 00:09:52.639
+which benefits the community. So Emacs and Vim,
+
+00:09:52.640 --> 00:09:54.839
+the competition between the two
+
+00:09:54.840 --> 00:09:59.119
+always create nice packages like evil or, you know...
+
+00:09:59.120 --> 00:10:03.719
+It's really good to have some kind of a competition,
+
+00:10:03.720 --> 00:10:06.159
+healthy competition.
+
+00:10:06.160 --> 00:10:08.199
+And it doesn't share any code base with GNU Emacs.
+
+00:10:08.200 --> 00:10:12.879
+I want to clarify this because some people think that
+
+00:10:12.880 --> 00:10:16.119
+Lem is kind of a, you know, Spacemacs or Doom.
+
+00:10:16.120 --> 00:10:19.959
+No, it doesn't share any code.
+
+00:10:19.960 --> 00:10:27.759
+It has zero Emacs. So that's it.
+
+00:10:27.760 --> 00:10:29.199
+Getting this out of the way.
+
+00:10:29.200 --> 00:10:31.079
+Why I think Lem is interesting.
+
+NOTE Why Lem
+
+00:10:31.080 --> 00:10:32.359
+I'm going to show why Lem.
+
+00:10:32.360 --> 00:10:37.759
+Why? You can try Lem, and maybe you like it.
+
+00:10:37.760 --> 00:10:41.319
+First thing, these are the features
+
+00:10:41.320 --> 00:10:42.799
+that I really like from it.
+
+00:10:42.800 --> 00:10:45.574
+Can be different from person to person,
+
+00:10:45.575 --> 00:10:48.279
+but I think these are the main ideas
+
+00:10:48.280 --> 00:10:49.999
+it brings to the table and are really interesting.
+
+00:10:50.000 --> 00:10:53.119
+I want to say that Lem is not a research project.
+
+00:10:53.120 --> 00:10:55.719
+It's not like some people did that
+
+00:10:55.720 --> 00:10:57.239
+and it's still in development. No, no.
+
+00:10:57.240 --> 00:11:00.039
+This is a usable product that can be used
+
+00:11:00.040 --> 00:11:02.039
+to [do] day-to-day programming
+
+00:11:02.040 --> 00:11:04.559
+in a very good experience.
+
+00:11:04.560 --> 00:11:06.279
+This is not like--I want to clarify this
+
+00:11:06.280 --> 00:11:08.719
+because some people bring some exploratory projects.
+
+00:11:08.720 --> 00:11:10.799
+This is not that one. This is finished.
+
+00:11:10.800 --> 00:11:14.719
+Well, finished in the way that you can use it.
+
+00:11:14.720 --> 00:11:17.799
+It's not, you know, have everything in place.
+
+00:11:17.800 --> 00:11:20.639
+So let's continue.
+
+00:11:20.640 --> 00:11:22.159
+It's written 100% in Common Lisp.
+
+00:11:22.160 --> 00:11:23.839
+I say this because Emacs is not
+
+00:11:23.840 --> 00:11:26.279
+100% in Emacs Lisp.
+
+00:11:26.280 --> 00:11:28.359
+You have to modify the C code,
+
+00:11:28.360 --> 00:11:31.839
+I think, well, if you... You don't have to,
+
+00:11:31.840 --> 00:11:33.999
+but if you want to change the internals, you do.
+
+00:11:34.000 --> 00:11:38.879
+I think that given that Lem does not care
+
+00:11:38.880 --> 00:11:41.199
+about the implementation of the language itself--
+
+00:11:41.200 --> 00:11:44.039
+so for example, Lem doesn't have to deal with
+
+00:11:44.040 --> 00:11:48.199
+how Common Lisp works, it just used the language, right?
+
+00:11:48.200 --> 00:11:50.799
+It's on top of the language.
+
+00:11:50.800 --> 00:11:53.879
+You can say that. Emacs Lisp is Emacs and Emacs Lisp,
+
+00:11:53.880 --> 00:11:56.079
+so you have to, you have both in the same place,
+
+00:11:56.080 --> 00:12:00.319
+which is, well, it's a double-edged sword, right?
+
+00:12:00.320 --> 00:12:03.319
+Then you have the both--similar to Emacs--
+
+00:12:03.320 --> 00:12:05.639
+you have ncurses and SDL2 frontends.
+
+00:12:05.640 --> 00:12:08.719
+One is terminal-based and the other is graphical
+
+00:12:08.720 --> 00:12:10.399
+using the SDL2 library,
+
+00:12:10.400 --> 00:12:13.759
+which you can do a lot of crazy things.
+
+00:12:13.760 --> 00:12:16.159
+Of course, it's meant to program games and stuff,
+
+00:12:16.160 --> 00:12:19.679
+but Lem uses, and it works fairly well.
+
+00:12:19.680 --> 00:12:21.879
+You can program games if you want.
+
+00:12:21.880 --> 00:12:27.559
+Not that you need to or anything, but we have Tetris.
+
+00:12:27.560 --> 00:12:28.999
+So there's that.
+
+00:12:29.000 --> 00:12:31.719
+Also, separate front-end interface.
+
+00:12:31.720 --> 00:12:34.159
+So like I said, you have two, but you can create more.
+
+00:12:34.160 --> 00:12:36.439
+In the past, had an electron one,
+
+00:12:36.440 --> 00:12:41.319
+but it got abandoned for obvious reasons, I think. Sorry.
+
+00:12:41.320 --> 00:12:45.839
+This idea is taken from Neovim that had a lot of frontends.
+
+00:12:45.840 --> 00:12:48.119
+In fact, we don't have that many,
+
+00:12:48.120 --> 00:12:49.639
+but not that many people we have two.
+
+00:12:49.640 --> 00:12:51.674
+That works fairly well.
+
+00:12:51.675 --> 00:12:56.679
+We have superb development experience thanks to SLIME.
+
+00:12:56.680 --> 00:13:01.319
+So we have Micro,
+
+00:13:01.320 --> 00:13:04.039
+which is a SLIME version for Lem, basically.
+
+00:13:04.040 --> 00:13:08.999
+SLIME is awesome and Micro is also awesome.
+
+00:13:09.000 --> 00:13:12.319
+We have a very strong development experience
+
+00:13:12.320 --> 00:13:15.399
+that we don't have for a Lisp,
+
+00:13:15.400 --> 00:13:17.399
+which I think is very important.
+
+00:13:17.400 --> 00:13:20.319
+If you want someone to develop packages or to use your tool,
+
+00:13:20.320 --> 00:13:22.719
+your Emacs at least,
+
+00:13:22.720 --> 00:13:28.759
+you need to have a very good development experience,
+
+00:13:28.760 --> 00:13:34.039
+which enhance the extensions for the editor.
+
+00:13:34.040 --> 00:13:36.719
+So we have also Vim-like integration.
+
+00:13:36.720 --> 00:13:39.399
+This for me was mostly mandatory
+
+00:13:39.400 --> 00:13:44.439
+because I'm an evil-mode user, and I think it's really good.
+
+00:13:44.440 --> 00:13:49.479
+Because evil-mode is very good and the VMode,
+
+00:13:49.480 --> 00:13:51.719
+which it's called, even though it's more like Vim mode,
+
+00:13:51.720 --> 00:13:54.159
+it's called VMode. It's written by
+
+00:13:54.160 --> 00:13:59.159
+Fukamachi-san and it's really good.
+
+00:13:59.160 --> 00:14:01.959
+So yeah, that's the thing that I think Lem brings to
+
+00:14:01.960 --> 00:14:03.079
+the table and that's really interesting.
+
+NOTE Similarities and differences
+
+00:14:03.080 --> 00:14:10.519
+So I'm going to do a small demo of Lem, a Emacs example.
+
+00:14:10.520 --> 00:14:11.679
+First, the similarities,
+
+00:14:11.680 --> 00:14:14.119
+the nomenclature is very similar: modes, buffers,
+
+00:14:14.120 --> 00:14:17.439
+commands... The commands are very similar in nature.
+
+00:14:17.440 --> 00:14:20.039
+It was written with GNU Emacs in mind
+
+00:14:20.040 --> 00:14:24.359
+to mimic a lot of things.
+
+00:14:24.360 --> 00:14:29.079
+I think GNU Emacs is the best Emacs implementation
+
+00:14:29.080 --> 00:14:33.719
+in that way. So why not just take what is working, right?
+
+00:14:33.720 --> 00:14:35.599
+I have similar command,
+
+00:14:35.600 --> 00:14:39.399
+but flexible to add other default ones.
+
+00:14:39.400 --> 00:14:42.399
+It's not like Emacs that you have Emacs commands.
+
+00:14:42.400 --> 00:14:45.159
+Lem has Emacs command by default,
+
+00:14:45.160 --> 00:14:47.759
+but you can easily change that
+
+00:14:47.760 --> 00:14:49.919
+with other default ones, right?
+
+00:14:49.920 --> 00:14:52.159
+It's like, you can think of it like a major mode, right?
+
+00:14:52.160 --> 00:14:54.439
+Well, more like a global mode,
+
+00:14:54.440 --> 00:14:57.960
+sorry. That's a global mode of Emacs commands,
+
+00:14:57.961 --> 00:14:59.360
+or something like that.
+
+00:14:59.361 --> 00:15:01.519
+In general, the feeling is really close.
+
+00:15:01.520 --> 00:15:05.919
+So you will tell that it's really close to how both work,
+
+00:15:05.920 --> 00:15:07.839
+similar commands, and that shows.
+
+00:15:07.840 --> 00:15:12.359
+Differences, Common Lisp is not Emacs Lisp,
+
+00:15:12.360 --> 00:15:13.919
+it's similar in the surface.
+
+00:15:13.920 --> 00:15:16.279
+So it uses `defun`, you know, have parentheses
+
+00:15:16.280 --> 00:15:18.719
+and yada, yada, but it's not the same language, really,
+
+00:15:18.720 --> 00:15:20.839
+and sometimes you will find
+
+00:15:20.840 --> 00:15:22.639
+that the differences are substantial.
+
+00:15:23.260 --> 00:15:24.859
+The internals are completely different,
+
+00:15:24.860 --> 00:15:27.479
+of course, nothing, well, completely.
+
+00:15:27.480 --> 00:15:29.719
+They have a buffer implementation and other things,
+
+00:15:29.720 --> 00:15:32.359
+but in general, yeah, aside from that,
+
+00:15:32.360 --> 00:15:34.079
+it's completely different.
+
+00:15:34.080 --> 00:15:36.199
+And it's true that GNU Emacs
+
+00:15:36.200 --> 00:15:37.479
+has a better documentation tutorial.
+
+00:15:37.480 --> 00:15:39.719
+So GNU Emacs for me, I think it's
+
+00:15:39.720 --> 00:15:41.759
+one of the best-documented software ever.
+
+00:15:41.760 --> 00:15:49.599
+We're trying to go there, but we're still not there.
+
+NOTE Demo
+
+00:15:49.600 --> 00:15:54.079
+Let's do the demo. So to open Lem, you compile it,
+
+00:15:54.080 --> 00:15:55.759
+and then you have it available,
+
+00:15:55.760 --> 00:15:57.719
+and you open Lem. As you can see,
+
+00:15:57.720 --> 00:16:00.839
+we have the temporary buffer. On the top left is the mode--
+
+00:16:00.840 --> 00:16:03.279
+not mode,
+
+00:16:03.280 --> 00:16:07.239
+the beam, insert, normal, visual. This is the V mode, right?
+
+00:16:07.240 --> 00:16:10.279
+In the top right corner, we have fundamental,
+
+00:16:10.280 --> 00:16:11.599
+which is the major mode, then paredit,
+
+00:16:11.600 --> 00:16:15.079
+which is like the minor mode, but you know,
+
+00:16:15.080 --> 00:16:16.079
+this is like the paredit for Emacs.
+
+00:16:16.080 --> 00:16:19.199
+In the top left buffer,
+
+00:16:19.200 --> 00:16:22.479
+you have the current buffer.
+
+00:16:22.480 --> 00:16:26.479
+So let's open the... Emacs, we all know how to do this.
+
+00:16:26.480 --> 00:16:29.319
+This is a command, like explore this command,
+
+00:16:29.320 --> 00:16:31.479
+like `open-init-file`. This opens the init file,
+
+00:16:31.480 --> 00:16:34.319
+which is in this directory, in `~/.lem/init.lisp`.
+
+00:16:34.320 --> 00:16:38.239
+As you can see, this is very similar, right?
+
+00:16:38.240 --> 00:16:40.279
+You define a command, which is not interactive,
+
+00:16:40.280 --> 00:16:42.959
+and then you get the buffer, right?
+
+00:16:42.960 --> 00:16:44.919
+This is a... So my personal command...
+
+00:16:44.920 --> 00:16:48.879
+Let's go to the one that I just opened. Init file, right?
+
+00:16:48.880 --> 00:16:52.159
+So this is a command that I did,
+
+00:16:52.160 --> 00:16:53.439
+which is `find-file`.
+
+00:16:53.440 --> 00:16:56.599
+This is very similar to [??], but just `find-file`.
+
+00:16:56.600 --> 00:16:58.399
+As you can see, very similar.
+
+00:16:58.400 --> 00:17:01.759
+This is the way that you program in Lem.
+
+00:17:01.760 --> 00:17:04.839
+This is the major mode, which is Lisp,
+
+00:17:04.840 --> 00:17:06.959
+that we're seeing at the top, right?
+
+00:17:06.960 --> 00:17:10.479
+And we can connect if we `slime-self-connect`.
+
+00:17:10.480 --> 00:17:14.119
+This is the prompt. This is the REPL.
+
+00:17:14.120 --> 00:17:17.959
+So if we... Keep in mind that this is Common Lisp,
+
+00:17:17.960 --> 00:17:20.439
+so this has different things.
+
+00:17:20.440 --> 00:17:22.719
+So we have to go to the Lem package,
+
+00:17:22.720 --> 00:17:26.199
+which is very important. This has namespaces, right?
+
+00:17:26.200 --> 00:17:29.039
+It's not the same. And we can say, okay,
+
+00:17:29.040 --> 00:17:32.319
+`current-buffer`. We get the buffer.
+
+00:17:32.320 --> 00:17:35.199
+We can explore everything that is in it, right?
+
+00:17:35.200 --> 00:17:38.559
+We have all this stuff. This is... If you're familiar
+
+00:17:38.560 --> 00:17:41.159
+with SLIME or Sly, this is it.
+
+00:17:41.160 --> 00:17:46.279
+It's just that we can say, buffer, I think it's `buffer-name`.
+
+00:17:46.280 --> 00:17:49.159
+Yes. And we can take this,
+
+00:17:49.160 --> 00:17:50.799
+and then we'll give you the name.
+
+00:17:50.800 --> 00:17:54.359
+So as you can see, the development experience
+
+00:17:54.360 --> 00:17:57.639
+is really powerful. We can also `lisp-scratch`,
+
+00:17:57.640 --> 00:18:00.679
+which transform... basically apply
+
+00:18:00.680 --> 00:18:02.639
+the major mode of Lisp to the temporary buffer.
+
+00:18:02.640 --> 00:18:06.719
+This is very similar to Emacs.
+
+00:18:06.720 --> 00:18:11.999
+Let's go back to the theme. I think that's it.
+
+00:18:12.000 --> 00:18:13.879
+Thank you all very much for listening to me.
+
+00:18:13.880 --> 00:18:15.239
+I think I point out
+
+00:18:15.240 --> 00:18:16.999
+the Emacsen family is really interesting.
+
+00:18:17.000 --> 00:18:19.279
+Lisp is really good, and GNU Emacs is really good,
+
+00:18:19.280 --> 00:18:21.199
+and I think Lem is also pretty awesome.
+
+00:18:21.200 --> 00:18:23.119
+So thank you all very much.
+
+00:18:23.120 --> 00:18:27.560
+I'll be answering the question now. And happy hacking.
diff --git a/2023/captions/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--answers.vtt b/2023/captions/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--answers.vtt
new file mode 100644
index 00000000..ad378f78
--- /dev/null
+++ b/2023/captions/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--answers.vtt
@@ -0,0 +1,1829 @@
+WEBVTT
+
+
+00:00:06.140 --> 00:00:06.640
+[Speaker 0]: And I think we are live.
+
+00:00:07.580 --> 00:00:08.080
+Hi, Yanny, how are you doing?
+
+00:00:10.460 --> 00:00:10.760
+[Speaker 1]: Excellent, excellent. Doing very well,
+
+00:00:10.960 --> 00:00:11.460
+thank you.
+
+00:00:13.980 --> 00:00:14.480
+[Speaker 0]: So that was a wonderful presentation.
+
+00:00:17.440 --> 00:00:17.940
+I first want to commend you on your ability
+
+00:00:22.040 --> 00:00:22.200
+to both do the how the user encounters the
+
+00:00:24.960 --> 00:00:25.460
+MMS, how the developer might be interested
+
+00:00:28.680 --> 00:00:28.920
+about how it works, and I feel like you've
+
+00:00:30.720 --> 00:00:31.200
+done a wonderful job of talking to absolutely
+
+00:00:31.800 --> 00:00:32.200
+everyone in our audience,
+
+00:00:32.840 --> 00:00:33.120
+whatever their skill level.
+
+00:00:34.120 --> 00:00:34.620
+So thank you so much for this.
+
+00:00:37.800 --> 00:00:38.300
+[Speaker 1]: Yeah, that of course runs the risk of being,
+
+00:00:41.580 --> 00:00:41.940
+you know, good for some,
+
+00:00:42.980 --> 00:00:43.480
+but excellent for none.
+
+00:00:46.960 --> 00:00:47.280
+But hopefully the result is that people can
+
+00:00:48.380 --> 00:00:48.880
+get something out of it.
+
+00:00:51.820 --> 00:00:52.080
+I think it's very important to make sure that
+
+00:00:55.680 --> 00:00:55.900
+everyone feels that they have access to
+
+00:00:57.239 --> 00:00:57.739
+Emacs, they have access to EMMS,
+
+00:01:00.640 --> 00:01:01.140
+that they can do this in whatever capacity
+
+00:01:02.800 --> 00:01:03.300
+they want. It's for everyone.
+
+00:01:05.440 --> 00:01:05.940
+I really believe that.
+
+00:01:09.440 --> 00:01:09.720
+[Speaker 0]: Yeah, and I understand this risk about having
+
+00:01:10.680 --> 00:01:11.180
+a talk that is kind of a jack-of-all-trades,
+
+00:01:14.440 --> 00:01:14.940
+but frankly you've done a wonderful job of
+
+00:01:16.560 --> 00:01:17.060
+making it interesting for everyone,
+
+00:01:19.540 --> 00:01:19.900
+because also I think the parts worked really
+
+00:01:21.820 --> 00:01:22.000
+well, and people always had something to look
+
+00:01:24.240 --> 00:01:24.479
+forward in terms of their expertise of what
+
+00:01:25.360 --> 00:01:25.680
+particularly spoke to them.
+
+00:01:27.560 --> 00:01:27.720
+So thank you again. What I'm going to do,
+
+00:01:29.440 --> 00:01:29.940
+we have about 14 minutes of Q&A,
+
+00:01:30.760 --> 00:01:31.080
+So I'll invite people,
+
+00:01:33.400 --> 00:01:33.520
+as I usually do, to add their questions in
+
+00:01:35.320 --> 00:01:35.760
+the other pad that you can find on the talks
+
+00:01:38.560 --> 00:01:38.760
+or on IRC. You can also join us in the
+
+00:01:40.200 --> 00:01:40.320
+discussion. I will make sure this time to
+
+00:01:42.180 --> 00:01:42.680
+ping Sasha to open the Q&A.
+
+00:01:44.680 --> 00:01:45.180
+Can you open, I-V-E-M-M-S.
+
+00:01:48.700 --> 00:01:49.200
+All right, and in the meantime,
+
+00:01:50.940 --> 00:01:51.040
+whilst we wait for people to join us in the
+
+00:01:52.360 --> 00:01:52.540
+room, I will start reading some of the
+
+00:01:53.960 --> 00:01:54.460
+questions off the pad.
+
+00:01:57.180 --> 00:01:57.520
+So we had the first question about the music
+
+00:01:58.780 --> 00:01:59.280
+that we played during the launch break,
+
+00:02:01.320 --> 00:02:01.560
+and It's 1 of our dear friends,
+
+00:02:05.200 --> 00:02:05.700
+Shoshin Ganshangroh, a free album,
+
+00:02:09.360 --> 00:02:09.720
+Basement Dazed. I've put the link in the pad
+
+00:02:12.520 --> 00:02:12.660
+and we've been using Shoshin's music for the
+
+00:02:13.420 --> 00:02:13.920
+last 3 years, I think,
+
+00:02:15.060 --> 00:02:15.560
+and everyone, people are so excited.
+
+00:02:17.220 --> 00:02:17.360
+Some people say, why is it so noisy in the
+
+00:02:18.480 --> 00:02:18.800
+background? But it's just because there's 1
+
+00:02:20.940 --> 00:02:21.420
+part of the different tracks that sounds like
+
+00:02:24.280 --> 00:02:24.520
+static and it always gets people.
+
+00:02:25.900 --> 00:02:26.040
+We should probably do something about this,
+
+00:02:27.520 --> 00:02:28.020
+but frankly it makes me laugh every time.
+
+00:02:30.460 --> 00:02:30.920
+Starting with the first actual question,
+
+00:02:32.640 --> 00:02:33.140
+well actually it's a bit of a meme question,
+
+00:02:34.340 --> 00:02:34.640
+for the next Emacs Con,
+
+00:02:37.280 --> 00:02:37.440
+could we have an eMMS playlist to follow the
+
+00:02:37.760 --> 00:02:38.260
+talks along?
+
+00:02:43.940 --> 00:02:44.060
+[Speaker 1]: Oh that sounds like an excellent idea but I
+
+00:02:46.560 --> 00:02:46.720
+guess I'm wondering what they mean exactly by
+
+00:02:48.960 --> 00:02:49.280
+that. Is that a shareable playlist that we
+
+00:02:54.560 --> 00:02:54.720
+can pass along and just have people go to a
+
+00:02:56.320 --> 00:02:56.600
+URL and just be able to play that?
+
+00:02:58.620 --> 00:02:59.060
+I think that's an excellent idea.
+
+00:03:00.660 --> 00:03:01.160
+It should be a relatively low bandwidth
+
+00:03:01.780 --> 00:03:02.280
+process.
+
+00:03:06.580 --> 00:03:06.740
+[Speaker 0]: And it's typically the type of stuff that is
+
+00:03:10.840 --> 00:03:11.000
+right of our alley. I'm thinking about the
+
+00:03:15.480 --> 00:03:15.980
+ICS file that we produce for all the events
+
+00:03:17.020 --> 00:03:17.320
+that are related to Emacs.
+
+00:03:18.820 --> 00:03:19.240
+You know the workshop that happened in Paris
+
+00:03:22.360 --> 00:03:22.500
+or in New York, LA? Sasha compiles a list of
+
+00:03:23.560 --> 00:03:23.920
+all the events and when they happen,
+
+00:03:25.360 --> 00:03:25.760
+and then we provide this to everyone.
+
+00:03:27.040 --> 00:03:27.160
+And we can do very much the same with
+
+00:03:29.380 --> 00:03:29.580
+EmacsConf. You could have a playlist for
+
+00:03:31.980 --> 00:03:32.420
+EmacsConf 2023, where you get all the talks
+
+00:03:34.760 --> 00:03:34.900
+and perhaps also the Q&A sessions so that you
+
+00:03:36.780 --> 00:03:36.960
+can relieve the 16 hours of content that
+
+00:03:37.800 --> 00:03:38.200
+we're producing. That'd be great,
+
+00:03:39.240 --> 00:03:39.740
+that's a great idea I think.
+
+00:03:43.660 --> 00:03:44.160
+[Speaker 1]: Absolutely, and if there are any limitations
+
+00:03:48.060 --> 00:03:48.420
+in the Emacs playlist structure that things
+
+00:03:49.640 --> 00:03:50.140
+are missing in the playlist structure,
+
+00:03:53.040 --> 00:03:53.480
+then it would be a great impetus to implement
+
+00:03:55.080 --> 00:03:55.520
+those and extend the playlist structure.
+
+00:03:57.380 --> 00:03:57.860
+Because after all, it's Lisp,
+
+00:04:01.360 --> 00:04:01.620
+it really is data and functions all mixed
+
+00:04:03.160 --> 00:04:03.580
+together, so we can do that.
+
+00:04:06.180 --> 00:04:06.360
+It would be very interesting to dive into it
+
+00:04:07.000 --> 00:04:07.420
+and see what's missing.
+
+00:04:10.020 --> 00:04:10.240
+That would be even more informative than what
+
+00:04:10.680 --> 00:04:11.180
+it can do.
+
+00:04:14.900 --> 00:04:15.060
+[Speaker 0]: Great. All right, moving on to the next
+
+00:04:17.000 --> 00:04:17.480
+question. I like to use music and audiobooks
+
+00:04:18.279 --> 00:04:18.740
+in very different ways.
+
+00:04:21.440 --> 00:04:21.600
+With music, I like shuffling by artists and
+
+00:04:23.300 --> 00:04:23.800
+with audiobooks, I want to read sequentially
+
+00:04:27.260 --> 00:04:27.380
+and pick the same playlist over a couple of
+
+00:04:29.240 --> 00:04:29.540
+days or weeks. Do you have any tips for using
+
+00:04:30.860 --> 00:04:31.360
+these 2 opposing media's workflow?
+
+00:04:38.520 --> 00:04:38.940
+[Speaker 1]: Yes, so I have similar situations where I
+
+00:04:43.920 --> 00:04:44.420
+have very long endurance races that I watch,
+
+00:04:47.160 --> 00:04:47.440
+which I do all my media consumption is done
+
+00:04:50.720 --> 00:04:51.220
+via EMMS. I also listened to music.
+
+00:04:54.020 --> 00:04:54.520
+And so there's also a middle in between.
+
+00:04:57.980 --> 00:04:58.480
+There's 1 end in which you have popular
+
+00:05:01.560 --> 00:05:02.020
+music. These are standalone songs that are
+
+00:05:04.860 --> 00:05:05.080
+typically 3 to 4 minute long and they are
+
+00:05:07.900 --> 00:05:08.400
+best consumed in a random you know order
+
+00:05:09.780 --> 00:05:10.280
+because they are designed around,
+
+00:05:12.080 --> 00:05:12.580
+you know, a commercial radio distribution.
+
+00:05:15.140 --> 00:05:15.580
+I guess I'm dating myself by saying radio,
+
+00:05:17.120 --> 00:05:17.620
+but you know all the that.
+
+00:05:20.940 --> 00:05:21.440
+In the middle there are longer works like
+
+00:05:26.100 --> 00:05:26.600
+musicals and classical where these are units
+
+00:05:30.200 --> 00:05:30.360
+where they might be very long but you would
+
+00:05:33.160 --> 00:05:33.420
+have several tracks that you do want to have
+
+00:05:35.600 --> 00:05:35.800
+1 after the other, and you want to be able to
+
+00:05:38.360 --> 00:05:38.860
+stop and go to the next track.
+
+00:05:40.760 --> 00:05:41.260
+And then at the very, very other end,
+
+00:05:44.020 --> 00:05:44.520
+you have extremely long format,
+
+00:05:46.360 --> 00:05:46.860
+which is included in a single file,
+
+00:05:47.920 --> 00:05:48.420
+such as an audio book,
+
+00:05:51.400 --> 00:05:51.900
+a movie, a tutorial that you're watching,
+
+00:05:54.100 --> 00:05:54.320
+or in my case, you know,
+
+00:05:56.580 --> 00:05:57.040
+a 24 hour, the 24 hours of Le Mans,
+
+00:05:58.040 --> 00:05:58.440
+just the 24 hour race,
+
+00:06:01.120 --> 00:06:01.620
+which, you know, that's 1 heck of a file.
+
+00:06:07.380 --> 00:06:07.660
+So that is 1 of the reasons eMMS has a number
+
+00:06:10.160 --> 00:06:10.640
+of elements such as the meta playlist mode
+
+00:06:11.260 --> 00:06:11.760
+and multiple playlists.
+
+00:06:16.160 --> 00:06:16.480
+So I would say that they would open a number
+
+00:06:19.540 --> 00:06:19.680
+of playlists in eMMS, generate a number of
+
+00:06:26.040 --> 00:06:26.540
+playlists that have each class of media.
+
+00:06:28.940 --> 00:06:29.320
+So the shorter form songs,
+
+00:06:33.580 --> 00:06:34.080
+the more pop songs you have in 1 playlist
+
+00:06:35.920 --> 00:06:36.140
+where you can sort, shuffle it,
+
+00:06:37.800 --> 00:06:38.300
+you know, save it, do whatever you want.
+
+00:06:41.980 --> 00:06:42.360
+Then a separate playlist for the long form
+
+00:06:44.340 --> 00:06:44.840
+stuff. Sometimes that playlist will have even
+
+00:06:48.960 --> 00:06:49.460
+only 1 file in it if it's long enough,
+
+00:06:52.120 --> 00:06:52.300
+then have a key combination which takes you
+
+00:06:55.280 --> 00:06:55.780
+directly to 1 playlist or the other,
+
+00:06:57.340 --> 00:06:57.840
+and within the long-form playlist,
+
+00:07:01.980 --> 00:07:02.480
+looking at the bookmarking function of EMMS,
+
+00:07:06.560 --> 00:07:06.660
+which is designed around being able to save a
+
+00:07:10.080 --> 00:07:10.580
+particular stopping point or multiple
+
+00:07:12.240 --> 00:07:12.540
+stopping points, bookmarks in the audio,
+
+00:07:15.300 --> 00:07:15.800
+and being able to jump back into that audio.
+
+00:07:18.600 --> 00:07:19.100
+The point to remember about the bookmarking
+
+00:07:23.720 --> 00:07:24.220
+feature is that sometimes it really depends
+
+00:07:25.960 --> 00:07:26.460
+on you have to have the right back end.
+
+00:07:28.900 --> 00:07:29.400
+Not all back ends with replaying,
+
+00:07:33.120 --> 00:07:33.220
+not all types of media work well with a
+
+00:07:36.200 --> 00:07:36.660
+bookmarking function, and bug reports
+
+00:07:38.960 --> 00:07:39.460
+welcome. But also there are other backends
+
+00:07:44.820 --> 00:07:45.140
+such as MPV where you can configure it that
+
+00:07:49.860 --> 00:07:50.360
+when you quit playing the song or the media
+
+00:07:55.080 --> 00:07:55.580
+with, you know, cue internally.
+
+00:07:58.140 --> 00:07:58.640
+So sometimes the back end has to continue
+
+00:08:04.400 --> 00:08:04.700
+playing that song. That's what I do in order
+
+00:08:07.560 --> 00:08:08.060
+to, on 1 hand, switch over to a...
+
+00:08:09.620 --> 00:08:10.000
+I want to hear... I'm coding,
+
+00:08:10.800 --> 00:08:11.240
+I want to hear some music,
+
+00:08:12.860 --> 00:08:13.360
+I go to my playlist of short songs,
+
+00:08:16.280 --> 00:08:16.560
+then I'm sitting back and I want to watch a
+
+00:08:20.340 --> 00:08:20.540
+long form something from where I left off and
+
+00:08:22.420 --> 00:08:22.740
+there I go to the other playlist and use
+
+00:08:26.140 --> 00:08:26.380
+bookmarks or the features of the back end
+
+00:08:26.780 --> 00:08:27.280
+that I'm using.
+
+00:08:31.200 --> 00:08:31.700
+[Speaker 0]: Okay, thank you for the answer.
+
+00:08:34.440 --> 00:08:34.679
+We have about 7 minutes and we have more
+
+00:08:35.280 --> 00:08:35.780
+questions, so that's great.
+
+00:08:37.440 --> 00:08:37.940
+Moving on to the next 1.
+
+00:08:40.080 --> 00:08:40.240
+Is there a way to search a music selection by
+
+00:08:42.080 --> 00:08:42.240
+lyrics? Assuming those lyrics are in the
+
+00:08:43.580 --> 00:08:44.080
+metadata or are available elsewhere,
+
+00:08:46.300 --> 00:08:46.400
+it would be neat to call songs up from the
+
+00:08:48.660 --> 00:08:49.160
+lyrics to the song. Perhaps is this
+
+00:08:50.860 --> 00:08:51.360
+implemented so that you can all aliases,
+
+00:08:54.560 --> 00:08:54.720
+so they can use aliases for the song that you
+
+00:08:56.640 --> 00:08:57.100
+like, defining those aliases or shortcuts
+
+00:08:58.200 --> 00:08:58.680
+either inside or outside eMMS?
+
+00:08:59.760 --> 00:09:00.060
+Okay, so I think you've got 2 questions.
+
+00:09:01.500 --> 00:09:02.000
+First about the lyrics and then the aliases.
+
+00:09:08.360 --> 00:09:08.560
+[Speaker 1]: Yeah, so it's effectively not possible to do
+
+00:09:10.880 --> 00:09:11.120
+right now. There's a sense in which it is,
+
+00:09:14.820 --> 00:09:15.020
+but not really. What actually needs to
+
+00:09:18.840 --> 00:09:19.320
+happen? The problem is that the caching
+
+00:09:21.780 --> 00:09:22.280
+system is extremely naive.
+
+00:09:24.800 --> 00:09:24.960
+It's just really a hash that's written to
+
+00:09:30.560 --> 00:09:31.060
+disk. And maybe now with SQLite integration
+
+00:09:35.200 --> 00:09:35.380
+or other or just the fact that computers have
+
+00:09:39.220 --> 00:09:39.440
+a lot more speed and space than they used to
+
+00:09:43.340 --> 00:09:43.580
+have, we need to expand the cache to be a lot
+
+00:09:47.020 --> 00:09:47.520
+more greedy and a lot more flexible so that
+
+00:09:52.580 --> 00:09:52.860
+we can store things such as lyrics in as part
+
+00:09:56.000 --> 00:09:56.200
+of the metadata. There's no reason not to do
+
+00:10:02.220 --> 00:10:02.440
+that. Unless your collection would have to be
+
+00:10:06.560 --> 00:10:07.060
+truly enormous in order to slow things down.
+
+00:10:09.860 --> 00:10:10.200
+We wouldn't even need to compress the lyrics
+
+00:10:11.320 --> 00:10:11.820
+in order to store them like that.
+
+00:10:15.920 --> 00:10:16.120
+But that is a goal. So our rewrite of the
+
+00:10:17.840 --> 00:10:18.340
+cache is currently in progress,
+
+00:10:21.680 --> 00:10:21.940
+and the goal is to have a system where you
+
+00:10:24.920 --> 00:10:25.420
+can put any related information,
+
+00:10:30.060 --> 00:10:30.220
+including lyrics, and map that to a
+
+00:10:31.400 --> 00:10:31.900
+particular piece of the media,
+
+00:10:36.900 --> 00:10:37.060
+be it a URL or a... So you could have in a
+
+00:10:40.080 --> 00:10:40.240
+sense, you could have a URL to a lecture and
+
+00:10:44.440 --> 00:10:44.800
+the metadata associated would be some text,
+
+00:10:47.600 --> 00:10:48.100
+some notes or something else like that.
+
+00:10:51.140 --> 00:10:51.380
+[Speaker 0]: Right, so that was about the lyrics.
+
+00:10:53.040 --> 00:10:53.260
+I'm not sure how it answers the question
+
+00:10:54.560 --> 00:10:54.960
+about the aliases. I mean you can still
+
+00:10:56.380 --> 00:10:56.880
+filter what you've mentioned about the cache.
+
+00:10:59.240 --> 00:10:59.440
+I think it's... Do we consider the aliases to
+
+00:11:01.120 --> 00:11:01.620
+be anything within the metadata?
+
+00:11:08.040 --> 00:11:08.540
+[Speaker 1]: No, you're right. That is a separate
+
+00:11:12.380 --> 00:11:12.540
+question. I don't have a great answer for
+
+00:11:12.980 --> 00:11:13.480
+that right now.
+
+00:11:16.280 --> 00:11:16.500
+[Speaker 0]: Okay, great. Well, we'll put a pin on this
+
+00:11:17.440 --> 00:11:17.940
+and we can return to it.
+
+00:11:19.690 --> 00:11:19.840
+You can return to it at a later stage.
+
+00:11:21.880 --> 00:11:22.080
+Yeah. All right, moving on to the next
+
+00:11:22.800 --> 00:11:23.160
+question, then. I'll just,
+
+00:11:25.180 --> 00:11:25.680
+we'll put a pin on this.
+
+00:11:26.420 --> 00:11:26.920
+All right, next question.
+
+00:11:29.020 --> 00:11:29.220
+Are there plans for managing metadata with
+
+00:11:30.040 --> 00:11:30.540
+online resource backends,
+
+00:11:32.020 --> 00:11:32.440
+i.e. Discogs or music brains?
+
+00:11:34.360 --> 00:11:34.540
+What about something like Beats and Emacs or
+
+00:11:34.920 --> 00:11:35.420
+part of the EMMS?
+
+00:11:40.520 --> 00:11:40.640
+[Speaker 1]: Yeah, so that's an active discussion on the
+
+00:11:42.140 --> 00:11:42.640
+mailing list right now.
+
+00:11:47.340 --> 00:11:47.840
+We don't want to replicate what Beats does
+
+00:11:49.680 --> 00:11:50.180
+very, very well in eMMS.
+
+00:11:53.860 --> 00:11:54.360
+We don't want a clunky interface with Beats.
+
+00:11:57.440 --> 00:11:57.940
+We do want some kind of,
+
+00:12:00.100 --> 00:12:00.300
+and so it's hard to tell exactly where to
+
+00:12:03.160 --> 00:12:03.460
+draw that line. So the big answer is yes,
+
+00:12:04.960 --> 00:12:05.460
+absolutely, there is a plan to do that.
+
+00:12:09.760 --> 00:12:10.000
+The details become complicated because for 1
+
+00:12:15.900 --> 00:12:16.200
+thing, the backend, the database that
+
+00:12:18.140 --> 00:12:18.640
+MusicBrain uses, AcoustID,
+
+00:12:21.500 --> 00:12:21.820
+I don't remember if AcoustID is the binary or
+
+00:12:25.680 --> 00:12:25.960
+the database, but that's actually for
+
+00:12:27.500 --> 00:12:28.000
+non-commercial use only.
+
+00:12:31.320 --> 00:12:31.500
+So not only do you need to compile a piece of
+
+00:12:35.280 --> 00:12:35.760
+software on your computer as a shim,
+
+00:12:37.540 --> 00:12:37.680
+which is what you need to do in order to set
+
+00:12:39.180 --> 00:12:39.680
+up beats to do fingerprinting.
+
+00:12:44.720 --> 00:12:45.220
+But it also crosses this line between
+
+00:12:47.660 --> 00:12:47.900
+completely free software to completely free
+
+00:12:49.400 --> 00:12:49.900
+software interfacing with a non-commercial
+
+00:12:56.000 --> 00:12:56.420
+only service. So a lot of the discussion
+
+00:12:58.660 --> 00:12:59.160
+that's going on now is what is the contour?
+
+00:13:02.160 --> 00:13:02.660
+Where would be where we would be effective
+
+00:13:08.720 --> 00:13:09.220
+for EMMS to do management and where not?
+
+00:13:11.600 --> 00:13:12.100
+For 1 thing, I would love to be able to...
+
+00:13:13.980 --> 00:13:14.100
+1 thing that we definitely would love to be
+
+00:13:18.340 --> 00:13:18.540
+able to do is when you hit E on a file and
+
+00:13:21.540 --> 00:13:22.040
+you get all the metadata to be able to then
+
+00:13:23.000 --> 00:13:23.200
+give a command to say,
+
+00:13:25.320 --> 00:13:25.520
+hey, play to music brains and see if you can
+
+00:13:26.200 --> 00:13:26.700
+improve that metadata.
+
+00:13:29.020 --> 00:13:29.520
+Do you have better metadata,
+
+00:13:33.400 --> 00:13:33.680
+more complete metadata to complete that?
+
+00:13:35.840 --> 00:13:36.340
+That is definitely in the pipeline.
+
+00:13:40.900 --> 00:13:41.400
+How best to do it, that's a discussion.
+
+00:13:45.460 --> 00:13:45.840
+[Speaker 0]: Okay, Yoni, we have about 2 minutes until we
+
+00:13:46.960 --> 00:13:47.460
+need to go to the next talk.
+
+00:13:52.960 --> 00:13:53.080
+Okay, I'll risk it. 1 more question and a
+
+00:13:53.800 --> 00:13:54.300
+short answer if you can.
+
+00:13:57.440 --> 00:13:57.860
+Have the developers considered using Emacs
+
+00:13:59.060 --> 00:13:59.560
+customized functionality to persistently
+
+00:14:01.720 --> 00:14:02.120
+store settings when using eMMS setup discover
+
+00:14:02.120 --> 00:14:02.620
+players?
+
+00:14:08.000 --> 00:14:08.460
+[Speaker 1]: Yes, absolutely. That's another active place,
+
+00:14:11.840 --> 00:14:12.340
+especially with the discover players.
+
+00:14:14.440 --> 00:14:14.940
+How to do it exactly without annoying people
+
+00:14:17.840 --> 00:14:18.340
+and clobbering their own settings,
+
+00:14:20.360 --> 00:14:20.680
+we just need to be very careful about that.
+
+00:14:23.040 --> 00:14:23.540
+Yes, that's in the coming releases.
+
+00:14:26.520 --> 00:14:26.940
+[Speaker 0]: All right, well, Younif,
+
+00:14:27.900 --> 00:14:28.400
+thank you so much for your time.
+
+00:14:29.440 --> 00:14:29.640
+Feel free to stay in the room.
+
+00:14:30.920 --> 00:14:31.240
+I see that some people have started joining
+
+00:14:33.720 --> 00:14:34.220
+on BBB. If you have more questions,
+
+00:14:36.780 --> 00:14:37.020
+feel free to unmute yourself and ask them
+
+00:14:39.520 --> 00:14:39.900
+live. Younid, I could ask you also to perhaps
+
+00:14:41.600 --> 00:14:41.760
+answer the question. I've put the link to the
+
+00:14:43.980 --> 00:14:44.480
+pad in the BBB chat, so if you look at the...
+
+00:14:47.220 --> 00:14:47.640
+Here, I think, we're not mirrored on BBB.
+
+00:14:49.080 --> 00:14:49.280
+If you look at the left you should be able to
+
+00:14:51.500 --> 00:14:51.580
+see the chat and the questions and if you
+
+00:14:52.720 --> 00:14:52.840
+could just answer the last question that
+
+00:14:55.440 --> 00:14:55.640
+would be great. For us on the general track
+
+00:14:57.980 --> 00:14:58.180
+we will be moving to the next talk and
+
+00:14:59.700 --> 00:14:59.820
+Yannick do you have any last thing to say in
+
+00:15:02.720 --> 00:15:02.900
+[Speaker 1]: Thank everyone who put together the
+
+00:15:04.320 --> 00:15:04.820
+conference and thank you to everyone who
+
+00:15:06.680 --> 00:15:07.180
+helps with the EMMS.
+
+00:15:08.160 --> 00:15:08.440
+[Speaker 0]: 10 seconds? All right,
+
+00:15:09.160 --> 00:15:09.440
+well, thank you so much,
+
+00:15:10.940 --> 00:15:11.440
+Yoni. We'll probably see you later.
+
+00:15:17.720 --> 00:15:17.860
+Bye-bye. Wonderful. And I think we are off
+
+00:15:18.620 --> 00:15:18.760
+air. Thank you so much,
+
+00:15:20.800 --> 00:15:20.920
+Juni. I need to step out and go take care of
+
+00:15:23.260 --> 00:15:23.760
+[Speaker 1]: Okay, wonderful. Thank you very much.
+
+00:15:24.080 --> 00:15:24.520
+[Speaker 0]: the next talk. Bye-bye.
+
+00:15:25.520 --> 00:15:25.760
+And just to, I forgot to mention,
+
+00:15:27.160 --> 00:15:27.260
+but you can still talk here and everything is
+
+00:15:28.320 --> 00:15:28.620
+still being recorded. So,
+
+00:15:28.880 --> 00:15:28.940
+I'll see you later.
+
+00:15:32.320 --> 00:15:32.820
+[Speaker 2]: Excellent. Bye-bye. Bye.
+
+00:15:35.600 --> 00:15:36.100
+[Speaker 3]: Oh, hello.
+
+00:15:40.600 --> 00:15:41.100
+[Speaker 1]: Wait, you're still, I cannot hear you yet.
+
+00:15:42.900 --> 00:15:43.080
+[Speaker 4]: You are currently the only person in this
+
+00:15:43.080 --> 00:15:43.580
+conference.
+
+00:16:12.600 --> 00:16:12.780
+[Speaker 2]: Okay.
+
+00:16:18.120 --> 00:16:18.400
+[Speaker 3]: Can you hear me now? I just wanted to say hi
+
+00:16:19.840 --> 00:16:20.320
+and thank you. My name's Grant.
+
+00:16:23.740 --> 00:16:24.220
+I've, you helped me contribute to EMMS maybe
+
+00:16:26.820 --> 00:16:26.980
+2 or 3 years ago. I was trying to do the
+
+00:16:28.480 --> 00:16:28.980
+[Speaker 2]: So,
+
+00:16:29.340 --> 00:16:29.840
+[Speaker 3]: track tag stuff. yeah.
+
+00:16:32.148 --> 00:16:32.571
+So I just wanted to say thank you.
+
+00:16:35.400 --> 00:16:35.680
+[Speaker 1]: Thank you for continuing and going through
+
+00:16:38.560 --> 00:16:38.680
+that entire process. I know that 1 of the
+
+00:16:40.380 --> 00:16:40.520
+things that happens is that people want to
+
+00:16:43.940 --> 00:16:44.440
+contribute, but it's not as slick as GitHub
+
+00:16:46.080 --> 00:16:46.580
+and stuff like that, especially with the
+
+00:16:53.400 --> 00:16:53.900
+copper assignment. And objectively,
+
+00:16:56.920 --> 00:16:57.420
+it's not that. It's just harder than what
+
+00:16:58.680 --> 00:16:59.180
+they imagine it might be.
+
+00:17:01.500 --> 00:17:01.680
+[Speaker 3]: Yeah. Well, I appreciate it.
+
+00:17:03.340 --> 00:17:03.440
+I think you're doing a wonderful job as a
+
+00:17:07.200 --> 00:17:07.660
+maintainer. I still hang out on the list and
+
+00:17:09.380 --> 00:17:09.880
+enjoy listening in on the discussions.
+
+00:17:09.960 --> 00:17:10.460
+So.
+
+00:17:14.240 --> 00:17:14.626
+[Speaker 2]: Yeah. But that's it. I think that's it.
+
+00:17:16.700 --> 00:17:17.200
+I think that's it. And I think that's it.
+
+00:17:17.640 --> 00:17:17.890
+And I think that's it.
+
+00:17:23.339 --> 00:17:23.660
+I appreciate it. And I'll leave you to all of
+
+00:17:27.781 --> 00:17:27.811
+you to go on from being a product.
+
+00:17:28.088 --> 00:17:28.118
+And that she valued to all of us long term
+
+00:17:28.180 --> 00:17:28.680
+being a project.
+
+00:17:31.460 --> 00:17:31.960
+[Speaker 1]: If you're not super duper active,
+
+00:17:33.420 --> 00:17:33.720
+being there long term,
+
+00:17:37.360 --> 00:17:37.860
+people tend to find it easier trying to
+
+00:17:40.840 --> 00:17:41.060
+continue contributing to the project if
+
+00:17:42.360 --> 00:17:42.620
+there's a consistency there,
+
+00:17:43.520 --> 00:17:44.020
+if there isn't a churn,
+
+00:17:47.720 --> 00:17:48.160
+if there is a kind of a core group.
+
+00:17:52.440 --> 00:17:52.940
+I guess it's like, you think it's constant.
+
+00:17:58.280 --> 00:17:58.780
+Eliezer Etzke and RMS,
+
+00:18:00.420 --> 00:18:00.920
+whatever on the next mailing list,
+
+00:18:03.040 --> 00:18:03.540
+You know, okay, there are certain people that
+
+00:18:05.600 --> 00:18:05.800
+I think so. So thank you for that.
+
+00:18:06.340 --> 00:18:06.840
+That's very important.
+
+00:18:07.540 --> 00:18:08.040
+That helps.
+
+00:18:12.560 --> 00:18:12.940
+[Speaker 3]: Yeah, I'm, I feel like when I started using
+
+00:18:14.180 --> 00:18:14.540
+EMMS several years ago,
+
+00:18:16.500 --> 00:18:16.820
+it's, it's improved a lot since then.
+
+00:18:19.540 --> 00:18:20.040
+And I notice your focus on helping new users
+
+00:18:22.540 --> 00:18:22.800
+get started quickly. And I think the talk
+
+00:18:23.840 --> 00:18:24.160
+today will help with that too.
+
+00:18:24.160 --> 00:18:24.660
+So
+
+00:18:32.380 --> 00:18:32.700
+[Speaker 1]: yeah, I want to put you know,
+
+00:18:33.860 --> 00:18:34.360
+the, especially the TLDR,
+
+00:18:37.500 --> 00:18:37.640
+like how to start it on the link that to the
+
+00:18:44.080 --> 00:18:44.380
+website, find somehow that we can get on to
+
+00:18:52.900 --> 00:18:53.400
+prepare for that. And this together.
+
+00:18:54.700 --> 00:18:55.200
+Now, question for you,
+
+00:18:58.260 --> 00:18:58.620
+Where would you like to see EMMS go?
+
+00:18:59.440 --> 00:18:59.820
+Where do you see it landing?
+
+00:19:02.780 --> 00:19:02.900
+What do you feel like this is what this is
+
+00:19:04.540 --> 00:19:05.040
+we're sorely missing these things?
+
+00:19:09.740 --> 00:19:10.240
+[Speaker 3]: I don't know. I mean, I picked it up,
+
+00:19:13.540 --> 00:19:13.940
+because I both use it to play my music
+
+00:19:17.100 --> 00:19:17.320
+collection, but also, like I record my own
+
+00:19:20.140 --> 00:19:20.320
+music. And I wanted to be able to edit my
+
+00:19:23.500 --> 00:19:24.000
+metadata in Emacs, because editing metadata
+
+00:19:29.100 --> 00:19:29.220
+elsewhere sucks. And so that's kind of why I
+
+00:19:30.280 --> 00:19:30.560
+got involved with that.
+
+00:19:33.440 --> 00:19:33.940
+And I was like, being able to edit metadata,
+
+00:19:37.580 --> 00:19:37.900
+especially for content that maybe you're
+
+00:19:41.760 --> 00:19:42.180
+creating or because I have a bunch of files
+
+00:19:44.340 --> 00:19:44.700
+of just unlabeled stuff I've recorded on,
+
+00:19:45.340 --> 00:19:45.780
+you know, different quarters,
+
+00:19:47.440 --> 00:19:47.520
+things like that. So that's kind of where I
+
+00:19:50.320 --> 00:19:50.740
+was focusing on it. It's the only media tool
+
+00:19:52.540 --> 00:19:52.720
+that lets me do that, you know,
+
+00:19:54.520 --> 00:19:54.940
+I can play the music back and have quick
+
+00:19:58.260 --> 00:19:58.380
+editing. So I know there was a couple of
+
+00:20:00.860 --> 00:20:01.120
+things we had talked about in terms of maybe
+
+00:20:03.260 --> 00:20:03.480
+improving kind of the user interface for the
+
+00:20:05.440 --> 00:20:05.940
+tag editor, things like that.
+
+00:20:09.300 --> 00:20:09.600
+So I don't have any grand visions for where
+
+00:20:15.660 --> 00:20:15.800
+EMMS should go. I know pretty much all the
+
+00:20:16.920 --> 00:20:17.420
+things I've heard about it already.
+
+00:20:20.200 --> 00:20:20.700
+You can hook up to GNU FM,
+
+00:20:21.940 --> 00:20:22.440
+the Scrabbling Service,
+
+00:20:23.200 --> 00:20:23.700
+and all that kind of stuff.
+
+00:20:26.920 --> 00:20:27.180
+I don't really feel like it's missing much,
+
+00:20:29.020 --> 00:20:29.280
+especially being able to choose the back
+
+00:20:31.880 --> 00:20:32.320
+ends. I guess, if anything,
+
+00:20:34.960 --> 00:20:35.220
+it's the interface. How can it be even more
+
+00:20:38.160 --> 00:20:38.660
+intuitive for users? And I think that,
+
+00:20:41.500 --> 00:20:41.820
+you know, we need more people playing around
+
+00:20:43.380 --> 00:20:43.880
+with it, I guess. Yeah.
+
+00:20:46.220 --> 00:20:46.420
+[Speaker 2]: I think a really good
+
+00:20:47.520 --> 00:20:47.800
+[Speaker 1]: Well, yeah. example of that is,
+
+00:20:49.240 --> 00:20:49.600
+because I'm sure there are lots of people
+
+00:20:50.440 --> 00:20:50.740
+playing around with it,
+
+00:20:51.460 --> 00:20:51.960
+arriving at a conclusion,
+
+00:20:53.860 --> 00:20:54.360
+keeping it to themselves and moving on.
+
+00:20:59.160 --> 00:20:59.300
+Yeah. Which, and I know that a lot of bits of
+
+00:21:01.820 --> 00:21:02.160
+software put a send a bug report feature in
+
+00:21:04.660 --> 00:21:05.020
+and stuff like that and no 1 uses those
+
+00:21:07.600 --> 00:21:08.000
+either. So that's the frictional cost.
+
+00:21:10.440 --> 00:21:10.940
+I think the context switch for people between
+
+00:21:16.120 --> 00:21:16.360
+this doesn't work to actually formulating in
+
+00:21:17.840 --> 00:21:18.340
+words what didn't work,
+
+00:21:21.380 --> 00:21:21.600
+that is a very expensive context which most
+
+00:21:24.800 --> 00:21:24.980
+people will not do. And we're poorer for
+
+00:21:32.220 --> 00:21:32.660
+that. So, I think that when we integrate
+
+00:21:34.740 --> 00:21:35.240
+music brains and other things like that into.
+
+00:21:37.460 --> 00:21:37.960
+Now, of course, music brains will probably,
+
+00:21:41.200 --> 00:21:41.380
+it would be very funny if you pull up your
+
+00:21:43.480 --> 00:21:43.660
+stuff, right? Something that you wrote and
+
+00:21:46.080 --> 00:21:46.280
+you say, hey, music brains match this and
+
+00:21:48.600 --> 00:21:49.000
+it's not there, then it'll probably suggest
+
+00:21:51.720 --> 00:21:52.220
+[Speaker 3]: Yeah, I've heard that.
+
+00:21:52.660 --> 00:21:52.940
+[Speaker 1]: some wild things. Yeah,
+
+00:21:58.260 --> 00:21:58.400
+because there are, there was a system I was
+
+00:22:02.060 --> 00:22:02.220
+looking at its code for researching stuff for
+
+00:22:04.480 --> 00:22:04.700
+EMS And I'm trying to remember what it's
+
+00:22:05.720 --> 00:22:06.040
+named. It begins with a J,
+
+00:22:07.160 --> 00:22:07.660
+it's this media player,
+
+00:22:13.780 --> 00:22:13.940
+free floss media player that it's like a
+
+00:22:17.020 --> 00:22:17.520
+media server that can cast to a television
+
+00:22:20.940 --> 00:22:21.220
+and stuff like that. And I asked it to
+
+00:22:24.280 --> 00:22:24.780
+automatically label things and the results
+
+00:22:28.180 --> 00:22:28.380
+were horrible. It thought that half of my
+
+00:22:32.960 --> 00:22:33.400
+songs were movies. It thought that JPEGs were
+
+00:22:35.800 --> 00:22:36.220
+songs. It just, it did some,
+
+00:22:40.520 --> 00:22:41.020
+it did incredibly, it's not a solved problem,
+
+00:22:44.660 --> 00:22:45.160
+I think. So the, what I'm thinking with
+
+00:22:49.340 --> 00:22:49.540
+MusicBrainz and those services is that you
+
+00:22:51.840 --> 00:22:52.240
+hit a button and you have you get another
+
+00:22:57.040 --> 00:22:57.240
+pane with a suggestion and you either and you
+
+00:22:59.060 --> 00:22:59.240
+can copy through you can say okay copy this
+
+00:23:01.560 --> 00:23:01.760
+and this in this field over or reject the
+
+00:23:03.960 --> 00:23:04.460
+suggestion and maybe get another 1.
+
+00:23:04.940 --> 00:23:05.280
+So,
+
+00:23:07.360 --> 00:23:07.660
+[Speaker 3]: Yeah, I like that a lot.
+
+00:23:09.160 --> 00:23:09.480
+That's more like a diff,
+
+00:23:11.280 --> 00:23:11.640
+right? Like you get the diff between the 2
+
+00:23:13.540 --> 00:23:14.040
+and you can apply which changes you like.
+
+00:23:15.580 --> 00:23:16.080
+Yeah. Was it Jellyfin?
+
+00:23:18.220 --> 00:23:18.720
+Is that... Jellyfin? Yeah,
+
+00:23:19.460 --> 00:23:19.960
+[Speaker 1]: Jellyfin, yes.
+
+00:23:22.340 --> 00:23:22.840
+[Speaker 3]: Yeah, And when that happened,
+
+00:23:24.960 --> 00:23:25.460
+did it clobber all your metadata?
+
+00:23:27.440 --> 00:23:27.940
+Or does it just label stuff?
+
+00:23:28.860 --> 00:23:29.360
+[Speaker 2]: No, it...
+
+00:23:38.240 --> 00:23:38.740
+[Speaker 1]: Escalate things somewhere inside it and to
+
+00:23:49.020 --> 00:23:49.340
+looking for really, not allow me to do very
+
+00:23:54.640 --> 00:23:55.080
+easily. So I was, so, you know,
+
+00:23:56.660 --> 00:23:56.960
+on 1 hand, it makes me feel,
+
+00:23:58.980 --> 00:23:59.120
+oh, we're not the only ones dealing with
+
+00:24:00.680 --> 00:24:00.840
+this. We're not the only ones struggling with
+
+00:24:01.440 --> 00:24:01.800
+this. On the other hand,
+
+00:24:05.660 --> 00:24:05.820
+it would be nice if that's a paragon that we
+
+00:24:08.460 --> 00:24:08.680
+can look to and say, this is a wonderful way
+
+00:24:11.320 --> 00:24:11.540
+of doing it. Let's incorporate as much of
+
+00:24:15.180 --> 00:24:15.520
+[Speaker 3]: Yeah, it's a tricky problem,
+
+00:24:18.220 --> 00:24:18.620
+especially if you're modifying people's media
+
+00:24:19.780 --> 00:24:20.280
+files you know so
+
+00:24:23.040 --> 00:24:23.420
+[Speaker 1]: that as we can. yeah I'm also very convinced
+
+00:24:31.560 --> 00:24:32.060
+that so I'm not a mainframe for MMS because
+
+00:24:35.020 --> 00:24:35.520
+I'm old and curmudgeonly essentially in my,
+
+00:24:37.660 --> 00:24:37.900
+in the way they do it.
+
+00:24:40.080 --> 00:24:40.520
+And honestly, I rarely ever,
+
+00:24:42.780 --> 00:24:43.180
+I use the MMS browser when I need to debug
+
+00:24:44.240 --> 00:24:44.660
+the MS browser. I don't,
+
+00:24:48.740 --> 00:24:49.240
+I use very simple commands and I even rarely
+
+00:24:50.440 --> 00:24:50.940
+look at the playlists.
+
+00:24:53.940 --> 00:24:54.220
+That was 1 of the things because when I got
+
+00:24:56.680 --> 00:24:57.100
+into MMS originally when my eyesight started
+
+00:24:59.640 --> 00:25:00.140
+going so I had to rely less and less on GUI
+
+00:25:02.800 --> 00:25:03.300
+interfaces. So that was,
+
+00:25:06.340 --> 00:25:06.840
+so to this day that's how I use EMMS.
+
+00:25:08.560 --> 00:25:09.060
+[Speaker 3]: Yeah, it's interesting.
+
+00:25:13.260 --> 00:25:13.760
+I remember running into a browser bug because
+
+00:25:15.480 --> 00:25:15.980
+I think just my age, like,
+
+00:25:18.120 --> 00:25:18.340
+I want to be able to tab through and like
+
+00:25:20.060 --> 00:25:20.560
+that was a huge that that changed recently
+
+00:25:22.640 --> 00:25:22.800
+right where you tab and it unfolds in the
+
+00:25:27.620 --> 00:25:27.980
+browser but yeah I realized that people use
+
+00:25:30.600 --> 00:25:31.100
+emms in so many different ways just like any
+
+00:25:36.020 --> 00:25:36.220
+piece of emacs there's there's many ways to
+
+00:25:39.960 --> 00:25:40.440
+do it but appreciate your time I'm gonna
+
+00:25:41.880 --> 00:25:42.260
+actually put together this Christmas tree
+
+00:25:43.400 --> 00:25:43.900
+[Speaker 0]: So. Wonderful.
+
+00:25:45.260 --> 00:25:45.660
+[Speaker 3]: behind me. Yeah, just wanted to say hi,
+
+00:25:50.900 --> 00:25:51.400
+meet you in person. But yeah.
+
+00:25:54.340 --> 00:25:54.840
+[Speaker 1]: Yeah, excellent. I appreciate it a lot and we
+
+00:25:55.080 --> 00:25:55.580
+generate
+
+00:25:59.960 --> 00:26:00.260
+[Speaker 2]: some interesting questions.
+
+00:26:00.780 --> 00:26:01.280
+Yeah, thank you.
+
+00:26:03.760 --> 00:26:03.960
+[Speaker 4]: You are currently the only person in this
+
+00:26:03.960 --> 00:26:04.460
+conference.
+
+00:26:13.480 --> 00:26:13.980
+[Speaker 1]: I'm going to have a look at the questions
+
+00:26:14.060 --> 00:26:14.560
+here.
+
+00:26:29.440 --> 00:26:29.940
+Let's see. Let's see. So there is,
+
+00:26:32.900 --> 00:26:33.260
+okay. There's a question here.
+
+00:26:34.540 --> 00:26:34.680
+I like what you said about balancing the
+
+00:26:36.140 --> 00:26:36.380
+concern for software freedom with the worry
+
+00:26:38.360 --> 00:26:38.560
+that this might alienate the package user.
+
+00:26:39.960 --> 00:26:40.120
+I wonder if you have advice for other
+
+00:26:41.720 --> 00:26:41.820
+maintainers how to communicate this sort of
+
+00:26:43.660 --> 00:26:44.120
+thing diplomatically? Yes,
+
+00:26:45.660 --> 00:26:46.160
+when you have to deny implementing a feature
+
+00:26:48.480 --> 00:26:48.980
+for a freedom reason. This in fact happens
+
+00:26:56.140 --> 00:26:56.320
+all the time. A recent example of this was a
+
+00:26:58.380 --> 00:26:58.580
+YouTube download, right,
+
+00:26:59.540 --> 00:27:00.040
+the YouTube download feature.
+
+00:27:04.040 --> 00:27:04.540
+At the time, okay, so stepping back,
+
+00:27:07.440 --> 00:27:07.940
+the request was to have a YouTube download
+
+00:27:11.940 --> 00:27:12.440
+feature integrated strongly into eMMS so that
+
+00:27:16.260 --> 00:27:16.640
+you put in a YouTube URL and you can download
+
+00:27:17.640 --> 00:27:18.140
+the video and play it.
+
+00:27:22.080 --> 00:27:22.280
+And the question isn't really whether you can
+
+00:27:24.660 --> 00:27:25.120
+chain YouTube Downloader or 1 of those things
+
+00:27:26.600 --> 00:27:27.100
+into your EMMS configuration.
+
+00:27:28.140 --> 00:27:28.520
+You can do whatever you want.
+
+00:27:30.840 --> 00:27:31.340
+But the question is, does EMMS actually
+
+00:27:33.340 --> 00:27:33.740
+integrate with it really,
+
+00:27:35.740 --> 00:27:36.040
+really strongly to the extent where it tells
+
+00:27:37.800 --> 00:27:38.140
+you oh you don't need to download install
+
+00:27:40.320 --> 00:27:40.820
+please go ahead and install that or whatever
+
+00:27:43.740 --> 00:27:44.180
+and at the time we checked it we found out
+
+00:27:45.800 --> 00:27:46.120
+that you know the version that we were
+
+00:27:49.280 --> 00:27:49.780
+looking at of the YouTube download or YTDLP
+
+00:27:51.720 --> 00:27:52.220
+or whatever it was called,
+
+00:27:56.200 --> 00:27:56.580
+actually downloaded a good amount of
+
+00:27:59.200 --> 00:27:59.540
+proprietary JavaScript onto your machine and
+
+00:28:02.300 --> 00:28:02.480
+ran it, just as if you were going on to the
+
+00:28:06.560 --> 00:28:06.880
+YouTube page, which is not for me to tell
+
+00:28:09.980 --> 00:28:10.480
+people not to do if they want to do that,
+
+00:28:16.240 --> 00:28:16.460
+but it's absolutely for me not to cause to
+
+00:28:18.540 --> 00:28:19.040
+happen on the user's machine without them.
+
+00:28:21.480 --> 00:28:21.660
+1 of the last thing that I want to do in the
+
+00:28:25.980 --> 00:28:26.180
+world is have a user inside Emacs press a
+
+00:28:29.760 --> 00:28:30.160
+button and have proprietary software get
+
+00:28:32.300 --> 00:28:32.540
+downloaded behind their back and run on their
+
+00:28:38.240 --> 00:28:38.420
+machine that would be disastrous so we had to
+
+00:28:41.380 --> 00:28:41.600
+say no we had to say that's I'm sorry that's
+
+00:28:47.060 --> 00:28:47.380
+beyond the pale and in fact in doing so some
+
+00:28:51.100 --> 00:28:51.420
+people who were using this system said,
+
+00:28:53.900 --> 00:28:54.400
+actually I had no idea it was doing this
+
+00:28:56.660 --> 00:28:57.040
+behind my back. I thought it was just magic.
+
+00:28:58.860 --> 00:28:59.360
+I thought it was a YouTube video without any
+
+00:29:01.580 --> 00:29:01.780
+freedom issues. I'm going to look into it or
+
+00:29:03.120 --> 00:29:03.620
+I'm going to stop using it.
+
+00:29:11.180 --> 00:29:11.680
+So my advice would be Stand firm and just be
+
+00:29:15.040 --> 00:29:15.380
+Not not preachy. Don't tell people what they
+
+00:29:19.580 --> 00:29:19.960
+need to do be very clear about what you stand
+
+00:29:21.900 --> 00:29:22.400
+for and what the project stands for,
+
+00:29:28.660 --> 00:29:28.940
+and so they very clearly know where you
+
+00:29:30.460 --> 00:29:30.960
+stand. And I think that people actually
+
+00:29:36.540 --> 00:29:37.040
+appreciate that more than a political answer,
+
+00:29:43.540 --> 00:29:44.040
+right? That has been my experience.
+
+00:29:49.800 --> 00:29:50.000
+Now, excuse me, taking into account that 1 or
+
+00:29:52.200 --> 00:29:52.700
+2 people will tell you,
+
+00:29:54.960 --> 00:29:55.440
+this is terrible. I'm leaving.
+
+00:30:00.550 --> 00:30:00.625
+[Speaker 2]: If you do this,
+
+00:30:01.460 --> 00:30:01.620
+[Speaker 1]: This is useless. you're free software or
+
+00:30:03.400 --> 00:30:03.900
+whatever, and just leave.
+
+00:30:05.860 --> 00:30:06.360
+But some people are ornery.
+
+00:30:09.360 --> 00:30:09.620
+That's not necessarily something bad that you
+
+00:30:11.680 --> 00:30:12.180
+did. But that has happened.
+
+00:30:14.200 --> 00:30:14.700
+There are multiple stories.
+
+00:30:16.840 --> 00:30:17.080
+Because the MMS is so old,
+
+00:30:20.080 --> 00:30:20.580
+there are multiple points in which non-free
+
+00:30:23.940 --> 00:30:24.140
+software intersected with the EMS because of
+
+00:30:28.580 --> 00:30:28.820
+multimedia and we had to go the other
+
+00:30:33.300 --> 00:30:33.800
+direction and so far it has served EMS well
+
+00:30:38.240 --> 00:30:38.740
+like the project has died as a result.
+
+00:30:39.800 --> 00:30:40.200
+Of course, can't prove a negative,
+
+00:30:42.040 --> 00:30:42.540
+don't know where we would be if we had taken,
+
+00:30:44.760 --> 00:30:44.860
+gone down that route. I'm pretty sure we
+
+00:30:46.100 --> 00:30:46.600
+would need a new ELPA,
+
+00:30:50.860 --> 00:30:51.360
+and I think being so clearly integrated with
+
+00:30:55.040 --> 00:30:55.540
+emacs is a huge benefit to eMMS because it's
+
+00:30:57.660 --> 00:30:58.160
+it allows people to install it very easily.
+
+00:31:08.760 --> 00:31:09.020
+And those are all the questions that I can
+
+00:31:09.020 --> 00:31:09.520
+see.
+
+00:31:15.060 --> 00:31:15.560
+[Speaker 2]: You
diff --git a/2023/captions/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--main--chapters.vtt b/2023/captions/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--main--chapters.vtt
new file mode 100644
index 00000000..f183a115
--- /dev/null
+++ b/2023/captions/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--main--chapters.vtt
@@ -0,0 +1,80 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:01:03.319
+Introduction
+
+00:01:03.320 --> 00:01:21.319
+The structure of this talk
+
+00:01:21.320 --> 00:08:04.239
+Introduction to Emms: The practical part
+
+00:08:04.240 --> 00:11:01.199
+The modeline
+
+00:11:01.200 --> 00:11:29.859
+Meta-playlist mode
+
+00:11:29.860 --> 00:13:19.919
+The browser
+
+00:13:19.920 --> 00:16:23.819
+How Emms works: The technical part
+
+00:16:23.820 --> 00:16:36.439
+The Emms core
+
+00:16:36.440 --> 00:17:18.459
+Tracks
+
+00:17:18.460 --> 00:18:22.079
+Playlist
+
+00:18:22.080 --> 00:19:22.159
+Sources
+
+00:19:22.160 --> 00:20:20.519
+Players
+
+00:20:20.520 --> 00:21:36.659
+Info
+
+00:21:36.660 --> 00:22:51.619
+The cache
+
+00:22:51.620 --> 00:23:31.559
+Healthy back and forth: mpv, mpd, and GNU.FM
+
+00:23:31.560 --> 00:24:47.469
+MPV
+
+00:24:47.470 --> 00:26:07.439
+MPD
+
+00:26:07.440 --> 00:27:12.559
+GNU FM and Libre FM
+
+00:27:12.560 --> 00:28:52.589
+How we work: Emms development
+
+00:28:52.590 --> 00:29:06.079
+The Rime Of The Ancient Maintainer
+
+00:29:06.080 --> 00:31:24.079
+The life and times of an Emms patch
+
+00:31:24.080 --> 00:32:23.399
+Let It Go: The release process
+
+00:32:23.400 --> 00:34:44.848
+It Is Not In Our Stars, But In Ourselves: Future directions
+
+00:34:44.849 --> 00:36:05.979
+Development policies: Interface language
+
+00:36:05.980 --> 00:38:12.369
+Development policies: Freedom
+
+00:38:12.370 --> 00:38:38.040
+Acknowledgements
diff --git a/2023/captions/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--main.vtt b/2023/captions/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--main.vtt
new file mode 100644
index 00000000..ecbed3fb
--- /dev/null
+++ b/2023/captions/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--main.vtt
@@ -0,0 +1,2048 @@
+WEBVTT captioned by yoni, checked by sachac
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:05.399
+The Sound of Emacs, Emms, The Emacs Multimedia System.
+
+00:00:05.400 --> 00:00:09.159
+Hi, I'm Yoni Rabkin and I'll be talking about Emms;
+
+00:00:09.160 --> 00:00:11.519
+the Emacs Multimedia System.
+
+00:00:11.520 --> 00:00:14.559
+What is Emms?
+
+00:00:14.560 --> 00:00:18.119
+Emms displays and plays media from within Emacs
+
+00:00:18.120 --> 00:00:20.519
+using a variety of external players
+
+00:00:20.520 --> 00:00:23.539
+and from different media sources.
+
+00:00:23.540 --> 00:00:26.679
+Emms can run as a minimalistic player
+
+00:00:26.680 --> 00:00:28.559
+which is controlled with no more than
+
+00:00:28.560 --> 00:00:31.119
+a handful of simple M-x commands,
+
+00:00:31.120 --> 00:00:36.059
+or as a fully-fledged interactive media browser and player.
+
+00:00:36.060 --> 00:00:40.639
+Emms can display album art, play streaming audio,
+
+00:00:40.640 --> 00:00:43.439
+tag music files, search for lyrics,
+
+00:00:43.440 --> 00:00:46.679
+provide MPD connectivity, control the volume,
+
+00:00:46.680 --> 00:00:49.619
+and more. Much more.
+
+00:00:49.620 --> 00:00:53.879
+The Emms project acts like Emacs in microcosm.
+
+00:00:53.880 --> 00:00:56.559
+It slowly but surely grows bigger
+
+00:00:56.560 --> 00:00:58.479
+and gets ever more features.
+
+00:00:58.480 --> 00:01:03.319
+Perhaps Emms will one day even have a text editor.
+
+NOTE The structure of this talk
+
+00:01:03.320 --> 00:01:05.599
+The structure of this talk:
+
+00:01:05.600 --> 00:01:08.159
+We'll start with an introduction to Emms.
+
+00:01:08.160 --> 00:01:10.559
+This is the practical part.
+
+00:01:10.560 --> 00:01:15.879
+Then, a bit about how Emms works. That's the technical part.
+
+00:01:15.880 --> 00:01:21.319
+Finally, how we work. All about Emms development.
+
+NOTE Introduction to Emms: The practical part
+
+00:01:21.320 --> 00:01:25.020
+Introduction to Emms: The practical part:
+
+00:01:25.021 --> 00:01:28.679
+I want this talk to be of immediate use to people,
+
+00:01:28.680 --> 00:01:33.519
+so I'm going to present a quick TL;DR of the Emms manual
+
+00:01:33.520 --> 00:01:36.399
+concerning installation and use.
+
+00:01:36.400 --> 00:01:38.439
+By the end of this part you should be able to
+
+00:01:38.440 --> 00:01:45.279
+install, configure, and use Emms in a variety of ways.
+
+00:01:45.280 --> 00:01:48.119
+Where can I get Emms?
+
+00:01:48.120 --> 00:01:54.319
+Emms is distributed primarily via GNU ELPA.
+
+00:01:54.320 --> 00:02:02.079
+So it's really only a M-x list-packages away at any moment.
+
+00:02:02.080 --> 00:02:07.719
+There's also a website hosted at gnu.org.
+
+00:02:07.720 --> 00:02:11.019
+Among other things on the website, you'll find
+
+00:02:11.020 --> 00:02:21.279
+a copy of the friendly, robust, and up-to-date user manual.
+
+00:02:21.280 --> 00:02:25.919
+Installing Emms has become progressively easier over time
+
+00:02:25.920 --> 00:02:28.719
+and will continue to get easier.
+
+00:02:28.720 --> 00:02:32.559
+In the bad old days, it required downloading a tarball
+
+00:02:32.560 --> 00:02:35.059
+and compiling a C language shim
+
+00:02:35.060 --> 00:02:38.919
+to enable reading metadata from media files.
+
+00:02:38.920 --> 00:02:43.359
+But those days are long gone, and installing Emms is now
+
+00:02:43.360 --> 00:02:47.039
+as easy as invoking M-x list-packages,
+
+00:02:47.040 --> 00:02:51.839
+installing the Emms package, and placing as few as
+
+00:02:51.840 --> 00:02:57.719
+2 or 3 lines of configuration in your Emacs initialization.
+
+00:02:57.720 --> 00:03:02.839
+So after the package is installed via ELPA,
+
+00:03:02.840 --> 00:03:08.439
+you can add these few lines.
+
+00:03:08.440 --> 00:03:12.359
+`emms-all` will make available all of the stable features
+
+00:03:12.360 --> 00:03:15.739
+which are shipped with Emms.
+
+00:03:15.740 --> 00:03:20.839
+The `emms-player-list` variable is a list of players
+
+00:03:20.840 --> 00:03:25.599
+like MPV, MPlayer, VLC, etc.
+
+00:03:25.600 --> 00:03:29.399
+Emms will call and control these external players
+
+00:03:29.400 --> 00:03:31.999
+to play your media.
+
+00:03:32.000 --> 00:03:36.659
+The variable `emms-info-functions` is a list of ways
+
+00:03:36.660 --> 00:03:40.959
+for Emms to read the metadata in your media files
+
+00:03:40.960 --> 00:03:45.279
+so that Emms can display song title, artist name,
+
+00:03:45.280 --> 00:03:49.479
+year of production, etc.
+
+00:03:49.480 --> 00:03:55.199
+The `emms-info-native` feature in the setup example
+
+00:03:55.200 --> 00:03:58.159
+is the built-in metadata reader
+
+00:03:58.160 --> 00:04:01.799
+written entirely in Emacs Lisp.
+
+00:04:01.800 --> 00:04:04.239
+But there are also other backends
+
+00:04:04.240 --> 00:04:07.719
+which can call external programs for info
+
+00:04:07.720 --> 00:04:14.719
+such as TinyTag, the TagLib library, exiftool, and so on.
+
+00:04:14.720 --> 00:04:17.559
+You can then old-school restart your Emacs
+
+00:04:17.560 --> 00:04:22.799
+or simply evaluate the above couple of lines to get going.
+
+00:04:22.800 --> 00:04:26.279
+Now that we have Emms installed and configured,
+
+00:04:26.280 --> 00:04:29.239
+we should load some media for player.
+
+00:04:29.240 --> 00:04:32.719
+There are multiple ways to load media into Emms for playing.
+
+00:04:32.720 --> 00:04:36.279
+They can be directories with local files,
+
+00:04:36.280 --> 00:04:38.519
+synchronized from a remote instance of
+
+00:04:38.520 --> 00:04:44.719
+a music player daemon, PLS or M3U playlists,
+
+00:04:44.720 --> 00:04:47.439
+a list of URLs for streaming,
+
+00:04:47.440 --> 00:04:51.119
+or even Emms' own native playlist format
+
+00:04:51.120 --> 00:04:57.199
+which is unsurprisingly a just serialized Emacs Lisp.
+
+00:04:57.200 --> 00:05:00.199
+No matter how you add tracks to Emms,
+
+00:05:00.200 --> 00:05:03.879
+you'll end up with a playlist.
+
+00:05:03.880 --> 00:05:08.959
+A fundamental strength of Emms is that each playlist
+
+00:05:08.960 --> 00:05:13.479
+is a regular Emacs buffer and the track listing therein
+
+00:05:13.480 --> 00:05:17.859
+is nothing more than text lines with property overlays.
+
+00:05:17.860 --> 00:05:21.359
+This means that you can navigate, search, copy,
+
+00:05:21.360 --> 00:05:24.879
+and edit an Emms playlist buffer
+
+00:05:24.880 --> 00:05:28.679
+just as you would any Emacs buffer.
+
+00:05:28.680 --> 00:05:31.319
+If you want to reorganize the tracks in the playlist,
+
+00:05:31.320 --> 00:05:33.959
+then you can simply kill yank the tracks
+
+00:05:33.960 --> 00:05:36.759
+just as you would any buffer with lines of text,
+
+00:05:36.760 --> 00:05:42.959
+and the same can be done between multiple playlist buffers.
+
+00:05:42.960 --> 00:05:46.119
+One of the most straightforward ways to add media
+
+00:05:46.120 --> 00:05:51.939
+is to invoke a command like `M-x emms-add-directory-tree`.
+
+00:05:51.940 --> 00:05:55.679
+You can point it to the top of a set of directories
+
+00:05:55.680 --> 00:06:00.279
+with playable files for Emms to traverse.
+
+00:06:00.280 --> 00:06:05.199
+Another rather convenient method is to mark files in Dired
+
+00:06:05.200 --> 00:06:09.679
+and to invoke `emms-add-dired`.
+
+00:06:09.680 --> 00:06:11.679
+I definitely use this one a lot.
+
+00:06:11.680 --> 00:06:16.119
+The Emms playlist mode binds
+
+00:06:16.120 --> 00:06:19.879
+a number of useful keys and commands.
+
+00:06:19.880 --> 00:06:23.959
+It's highly recommended that you either
+
+00:06:23.960 --> 00:06:25.959
+read the friendly manual
+
+00:06:25.960 --> 00:06:32.319
+or hit "C-h m" in a playlist buffer to discover them.
+
+00:06:32.320 --> 00:06:35.959
+Now we have a playlist buffer with a number of tracks,
+
+00:06:35.960 --> 00:06:40.819
+so the next step is going to be playback.
+
+00:06:40.820 --> 00:06:44.399
+Emms can be used as a minimalistic player
+
+00:06:44.400 --> 00:06:48.319
+with nothing more than a handful of commands.
+
+00:06:48.320 --> 00:06:51.359
+Once there is a current Emms playlist,
+
+00:06:51.360 --> 00:06:57.559
+invoking emms-start will begin playing the current track.
+
+00:06:57.560 --> 00:07:00.039
+Now of course in a new playlist
+
+00:07:00.040 --> 00:07:02.579
+that would be the first track.
+
+00:07:02.580 --> 00:07:07.199
+Now emms-next, emms-pause, and emms-stop
+
+00:07:07.200 --> 00:07:11.259
+do exactly what you think they do.
+
+00:07:11.260 --> 00:07:13.199
+To visit the current playlist,
+
+00:07:13.200 --> 00:07:17.639
+you can invoke M-x emms-playlist-mode-go,
+
+00:07:17.640 --> 00:07:22.699
+which is a long command I personally bind to "M-f12".
+
+00:07:22.700 --> 00:07:25.319
+You'll be taken to the current playlist buffer.
+
+00:07:25.320 --> 00:07:29.239
+While you can have multiple playlist buffers,
+
+00:07:29.240 --> 00:07:35.779
+only one is current for the purposes of playback commands.
+
+00:07:35.780 --> 00:07:38.119
+The playlist buffer has keys bound
+
+00:07:38.120 --> 00:07:39.919
+to control the media being played.
+
+00:07:39.920 --> 00:07:44.199
+`emms-seek-forward` and `emms-seek-backwards` allow you
+
+00:07:44.200 --> 00:07:49.039
+to scrub along the media being played.
+
+00:07:49.040 --> 00:07:51.719
+Which commands are available is a function of
+
+00:07:51.720 --> 00:07:54.199
+the player backend being employed.
+
+00:07:54.200 --> 00:07:56.599
+The simplest of players may have nothing more
+
+00:07:56.600 --> 00:07:59.559
+than the ability to play, stop, and seek,
+
+00:07:59.560 --> 00:08:04.239
+but others may implement a plethora of commands.
+
+NOTE The modeline
+
+00:08:04.240 --> 00:08:08.879
+The Modeline: Emms will by default display
+
+00:08:08.880 --> 00:08:11.839
+the name of the currently playing track in the mode line
+
+00:08:11.840 --> 00:08:14.999
+with information such as playing time.
+
+00:08:15.000 --> 00:08:15.559
+The mode line format is controlled
+
+00:08:15.560 --> 00:08:20.639
+via the `emms-mode-line-format` variable
+
+00:08:20.640 --> 00:08:27.139
+and the `emms-mode-line-playlist-current` function.
+
+00:08:27.140 --> 00:08:31.039
+Metadata and the cache.
+
+00:08:31.040 --> 00:08:34.799
+It would be sufficient for emms to simply list
+
+00:08:34.800 --> 00:08:38.619
+the file names or urls of each piece of media,
+
+00:08:38.620 --> 00:08:40.999
+but unless you name your music and media
+
+00:08:41.000 --> 00:08:43.939
+with obsessive consistency and precision,
+
+00:08:43.940 --> 00:08:46.679
+not that there is anything wrong with that
+
+00:08:46.680 --> 00:08:50.859
+then the resulting list will be a bit of an eyesore.
+
+00:08:50.860 --> 00:08:54.119
+Moreover, there are a lot of other useful metadata
+
+00:08:54.120 --> 00:08:58.619
+in the media files, including cool stuff like album art.
+
+00:08:58.620 --> 00:09:01.919
+So instead of just files, Emms will try
+
+00:09:01.920 --> 00:09:04.399
+to extract metadata from each track
+
+00:09:04.400 --> 00:09:08.219
+and display a nicely-formatted track listing.
+
+00:09:08.220 --> 00:09:10.799
+The format can be controlled by customizing
+
+00:09:10.800 --> 00:09:15.459
+the variable `emms-track-description-function`.
+
+00:09:15.460 --> 00:09:19.639
+Emms uses so-called info methods to extract
+
+00:09:19.640 --> 00:09:22.439
+the metadata from each file.
+
+00:09:22.440 --> 00:09:25.679
+`emms-info-native`, which I mentioned before,
+
+00:09:25.680 --> 00:09:30.359
+is the built-in metadata reader written in Emacs Lisp.
+
+00:09:30.360 --> 00:09:37.659
+It provides support for Ogg Vorbis, Ogg Opus, FLAC, and MP3.
+
+00:09:37.660 --> 00:09:40.359
+However, if you have media in other formats,
+
+00:09:40.360 --> 00:09:42.439
+you can also add info methods
+
+00:09:42.440 --> 00:09:45.239
+to the `emms-info-functions` list,
+
+00:09:45.240 --> 00:09:48.699
+which call external programs such as exiftool,
+
+00:09:48.700 --> 00:09:55.419
+the LibTag library, tiny-tag, etc. to read file metadata.
+
+00:09:55.420 --> 00:09:58.199
+Since reading metadata takes time
+
+00:09:58.200 --> 00:10:01.339
+and that metadata doesn't change very often,
+
+00:10:01.340 --> 00:10:04.079
+Emms builds a cache as it extracts
+
+00:10:04.080 --> 00:10:06.859
+the information from each file.
+
+00:10:06.860 --> 00:10:09.879
+The first time loading of thousands of tracks
+
+00:10:09.880 --> 00:10:13.259
+into the emms cache may take a while,
+
+00:10:13.260 --> 00:10:16.999
+but as is the nature of caching, subsequent loads
+
+00:10:17.000 --> 00:10:20.059
+will be nearly instantaneous.
+
+00:10:20.060 --> 00:10:22.719
+To ease loading huge media collections,
+
+00:10:22.720 --> 00:10:26.519
+emms also can populate the cache asynchronously,
+
+00:10:26.520 --> 00:10:30.519
+so that your emacs isn't locked up in the interim.
+
+00:10:30.520 --> 00:10:33.779
+Let's talk about streams and URLs.
+
+00:10:33.780 --> 00:10:37.619
+Not all playlist entries need to be associated with files.
+
+00:10:37.620 --> 00:10:39.839
+It's possible to add streaming playlists
+
+00:10:39.840 --> 00:10:42.639
+and URLs to any playlist.
+
+00:10:42.640 --> 00:10:46.119
+Emms also comes with a built-in eclectic list
+
+00:10:46.120 --> 00:10:50.039
+of streaming audio stations to get you started.
+
+00:10:50.040 --> 00:10:52.639
+Any playlist entry can be a URL,
+
+00:10:52.640 --> 00:10:56.719
+and that URL will be passed on to the media player backend,
+
+00:10:56.720 --> 00:11:01.199
+which can play it, if any.
+
+NOTE Meta-playlist mode
+
+00:11:01.200 --> 00:11:03.679
+Meta-playlist mode:
+
+00:11:03.680 --> 00:11:08.299
+Emms also has meta-playlist mode
+
+00:11:08.300 --> 00:11:11.959
+to help manage multiple playlists.
+
+00:11:11.960 --> 00:11:13.879
+When you invoke meta-playlist mode,
+
+00:11:13.880 --> 00:11:16.959
+you will see a listing of all of the current Emms playlists,
+
+00:11:16.960 --> 00:11:21.999
+and this mode binds a handful of useful keybindings
+
+00:11:22.000 --> 00:11:29.859
+to help manage those playlists.
+
+NOTE The browser
+
+00:11:29.860 --> 00:11:31.759
+The Browser:
+
+00:11:31.760 --> 00:11:35.439
+Music doesn't always lend itself to being viewed
+
+00:11:35.440 --> 00:11:38.199
+as a series of discrete files.
+
+00:11:38.200 --> 00:11:41.559
+While there may be a good taxonomy of music
+
+00:11:41.560 --> 00:11:45.459
+that can be reflected using directories and filenames,
+
+00:11:45.460 --> 00:11:49.099
+there are other aspects which cannot.
+
+00:11:49.100 --> 00:11:51.599
+This is especially true when you consider that
+
+00:11:51.600 --> 00:11:55.299
+unlike many computer file taxonomies,
+
+00:11:55.300 --> 00:11:56.719
+music files may contain
+
+00:11:56.720 --> 00:11:58.759
+a lot of self-descriptive information
+
+00:11:58.760 --> 00:12:00.619
+in the form of metadata,
+
+00:12:00.620 --> 00:12:04.279
+such as the year a work was published, the composer,
+
+00:12:04.280 --> 00:12:07.519
+the performing artist, etc.
+
+00:12:07.520 --> 00:12:11.079
+Therefore, it makes sense for Emms to enable
+
+00:12:11.080 --> 00:12:13.199
+a different view into a media collection
+
+00:12:13.200 --> 00:12:17.059
+which is based on the cached metadata.
+
+00:12:17.060 --> 00:12:19.839
+The browser interface binds a host of keys
+
+00:12:19.840 --> 00:12:22.079
+to help navigate the tree structure
+
+00:12:22.080 --> 00:12:24.539
+of the metadata information.
+
+00:12:24.540 --> 00:12:25.839
+Since browser display
+
+00:12:25.840 --> 00:12:28.279
+is not predicated upon directory structure,
+
+00:12:28.280 --> 00:12:32.939
+you can invoke functions such as `emms-browse-by-album`,
+
+00:12:32.940 --> 00:12:35.639
+or `emms-browse-by-artist`, etc.
+
+00:12:35.640 --> 00:12:42.179
+to view the collection in different ways.
+
+00:12:42.180 --> 00:12:43.759
+Emms can do a lot more,
+
+00:12:43.760 --> 00:12:46.319
+but covering it all would take too much time.
+
+00:12:47.020 --> 00:12:50.239
+I do recommend opening the fine Emms manual
+
+00:12:50.240 --> 00:12:52.319
+and getting to know some additional features
+
+00:12:52.320 --> 00:12:54.999
+such as sorting tracks in playlists,
+
+00:12:55.000 --> 00:12:57.199
+sorting and filtering in the browser,
+
+00:12:57.200 --> 00:12:59.079
+editing track information,
+
+00:12:59.080 --> 00:13:01.919
+deriving a new playlist from an existing playlist,
+
+00:13:01.920 --> 00:13:07.039
+the music player daemon, lyrics display, volume control,
+
+00:13:07.040 --> 00:13:13.359
+bookmarks, GNU FM, and Dbus/Mpris support.
+
+00:13:13.360 --> 00:13:19.919
+I hope this was a useful introduction to Emms.
+
+NOTE How Emms works: The technical part
+
+00:13:19.920 --> 00:13:23.219
+How Emms Works: The technical part:
+
+00:13:23.220 --> 00:13:26.819
+This part is an overview of how Emms works.
+
+00:13:26.820 --> 00:13:29.759
+By the end of this, you should be familiar enough
+
+00:13:29.760 --> 00:13:34.739
+with Emms internals to hack on it. Hint hint.
+
+00:13:34.740 --> 00:13:37.679
+A short history of Emms
+
+00:13:37.680 --> 00:13:42.939
+Emms is 20 years old as of the time of writing.
+
+00:13:42.940 --> 00:13:45.399
+Old enough to drink in many countries.
+
+00:13:45.400 --> 00:13:48.879
+This means it was developed back in 2003
+
+00:13:48.880 --> 00:13:53.439
+for emacs 21.2 or thereabouts.
+
+00:13:53.440 --> 00:13:56.279
+As developers, we don't go around looking to
+
+00:13:56.280 --> 00:13:58.839
+replace code just because it's old.
+
+00:13:58.840 --> 00:14:01.839
+On the other hand, some parts were inadequate
+
+00:14:01.840 --> 00:14:04.919
+or just didn't age gracefully.
+
+00:14:04.920 --> 00:14:10.359
+And we have been partially or completely rewriting those.
+
+00:14:10.360 --> 00:14:13.719
+I became the maintainer of Emms about a decade ago,
+
+00:14:13.720 --> 00:14:16.099
+but I didn't start the project.
+
+00:14:16.100 --> 00:14:21.019
+Jorgen Schäfer started the project.
+
+00:14:21.020 --> 00:14:22.519
+I reached out to Jorgen
+
+00:14:22.520 --> 00:14:25.619
+and he kindly shared some of his recollections.
+
+00:14:25.620 --> 00:14:28.199
+Jorgen states that Emms was born back
+
+00:14:28.200 --> 00:14:31.279
+when the music format wars raged.
+
+00:14:31.280 --> 00:14:38.699
+MP3 was the standard, but overshadowed with patent issues.
+
+00:14:38.700 --> 00:14:42.479
+In fact, Technicolor and Fraunhofer IIS
+
+00:14:42.480 --> 00:14:45.559
+only stopped licensing their patents for MP3
+
+00:14:45.560 --> 00:14:49.359
+as recently as April of 2017.
+
+00:14:49.360 --> 00:14:53.539
+Jorgen said that, and I quote,
+
+00:14:53.540 --> 00:14:56.079
+"I needed a tool that was player agnostic
+
+00:14:56.080 --> 00:14:59.439
+and that could deal with a large collection of music files.
+
+00:14:59.440 --> 00:15:02.799
+And I did not want any of the GUI music players
+
+00:15:02.800 --> 00:15:04.039
+that existed back then.
+
+00:15:04.040 --> 00:15:07.519
+Primarily, actually, because I did not want
+
+00:15:07.520 --> 00:15:11.399
+to be switching windows to skip to the next song.
+
+00:15:11.400 --> 00:15:12.879
+If I remember correctly,
+
+00:15:12.880 --> 00:15:16.279
+I had just a shell script before that.
+
+00:15:16.280 --> 00:15:20.159
+But I figured I lived in Emacs, so why not write a tool
+
+00:15:20.160 --> 00:15:23.039
+that I can control my music from Emacs
+
+00:15:23.040 --> 00:15:27.759
+without ever having to leave Emacs?" Unquote.
+
+00:15:27.760 --> 00:15:32.119
+We can see that Jorgen's motivations were of the best kind,
+
+00:15:32.120 --> 00:15:35.319
+to stay in Emacs.
+
+00:15:35.320 --> 00:15:40.679
+Emms, an architecture of sensible abstractions.
+
+00:15:40.680 --> 00:15:44.039
+Emms can be divided into a number of parts.
+
+00:15:44.040 --> 00:15:48.119
+The core, tracks, playlists, sources, players,
+
+00:15:48.120 --> 00:15:51.759
+info, cache, and ancillary.
+
+00:15:51.760 --> 00:15:53.679
+Now David J. Wheeler once said
+
+00:15:53.680 --> 00:15:55.999
+that all problems in computer science
+
+00:15:56.000 --> 00:15:59.799
+can be solved by another level of indirection,
+
+00:15:59.800 --> 00:16:01.639
+except of course for the problem
+
+00:16:01.640 --> 00:16:04.419
+of too many layers of indirection.
+
+00:16:04.420 --> 00:16:06.999
+Emms core has survived this long
+
+00:16:07.000 --> 00:16:11.619
+because it makes sensible and flexible coding abstractions.
+
+00:16:11.620 --> 00:16:15.499
+Keep this in mind as we explore the implementation.
+
+00:16:15.500 --> 00:16:18.879
+This following part of the talk will also be invaluable
+
+00:16:18.880 --> 00:16:21.559
+if you want to hack on Emacs.
+
+00:16:21.560 --> 00:16:23.819
+Another hint.
+
+NOTE The Emms core
+
+00:16:23.820 --> 00:16:25.359
+The Emms core.
+
+00:16:25.360 --> 00:16:29.079
+The core defines tracks, playlists,
+
+00:16:29.080 --> 00:16:31.759
+a way to start and stop playback,
+
+00:16:31.760 --> 00:16:36.439
+as well as ways to proceed to the next track.
+
+NOTE Tracks
+
+00:16:36.440 --> 00:16:38.459
+Tracks:
+
+00:16:38.460 --> 00:16:44.779
+Emms tracks consist of a list whose CAR is the symbol track,
+
+00:16:44.780 --> 00:16:47.079
+and CADR is an alist starting with
+
+00:16:47.080 --> 00:16:50.639
+the association of `type'.
+
+00:16:50.640 --> 00:16:56.739
+Type can be something like file, streamlist, URL, etc.
+
+00:16:56.740 --> 00:17:00.079
+A track of classical music from Bach's Art of Fugue
+
+00:17:00.080 --> 00:17:04.379
+may look something like this.
+
+00:17:04.380 --> 00:17:07.599
+While a track may contain many associations,
+
+00:17:07.600 --> 00:17:11.079
+the number of associations remains a small constant
+
+00:17:11.080 --> 00:17:14.199
+from the perspective of computational steps required
+
+00:17:14.200 --> 00:17:18.459
+to find any particular association.
+
+NOTE Playlist
+
+00:17:18.460 --> 00:17:20.619
+Playlist:
+
+00:17:20.620 --> 00:17:23.479
+An Emms playlist consists of an Emacs buffer
+
+00:17:23.480 --> 00:17:26.459
+with a buffer-local non-nil variable,
+
+00:17:26.460 --> 00:17:29.819
+`emms-playlist-buffer-p`.
+
+00:17:29.820 --> 00:17:33.719
+The buffer can contain anything, any amount or type of text,
+
+00:17:33.720 --> 00:17:35.959
+or anything else.
+
+00:17:35.960 --> 00:17:40.499
+Emms tracks are stored in text properties within the buffer,
+
+00:17:40.500 --> 00:17:46.399
+with the unimaginatively named text property `emms-track`.
+
+00:17:46.400 --> 00:17:49.239
+For Emms, to go to the next track consists of
+
+00:17:49.240 --> 00:17:52.839
+nothing more than looking for the next text property change
+
+00:17:52.840 --> 00:17:57.179
+containing `emms-track`, wherever that is.
+
+00:17:57.180 --> 00:18:00.239
+That means that there is a healthy decoupling between
+
+00:18:00.540 --> 00:18:03.839
+the visual representation of a playlist
+
+00:18:03.840 --> 00:18:08.259
+and its contents as far as Emms is concerned.
+
+00:18:08.260 --> 00:18:11.599
+This decoupling allows Emms playlist buffers
+
+00:18:11.600 --> 00:18:15.319
+to look like anything as long as that anything consists of
+
+00:18:15.320 --> 00:18:22.079
+one or more `emms-track` text properties.
+
+NOTE Sources
+
+00:18:22.080 --> 00:18:23.579
+Sources:
+
+00:18:23.580 --> 00:18:25.839
+A source is how you tell Emms:
+
+00:18:25.840 --> 00:18:29.779
+"Go and get those things and turn them into tracks."
+
+00:18:29.780 --> 00:18:34.479
+More specifically, an Emms source is a function called in
+
+00:18:34.480 --> 00:18:37.259
+a playlist buffer in order to add tracks.
+
+00:18:37.260 --> 00:18:40.199
+And even more specifically, a source is really
+
+00:18:40.200 --> 00:18:42.679
+a family of related functions
+
+00:18:42.680 --> 00:18:47.679
+defined by the macro `define-emms-source`.
+
+00:18:47.680 --> 00:18:49.959
+A straightforward example
+
+00:18:49.960 --> 00:18:52.959
+is the function `emms-add-directory`,
+
+00:18:52.960 --> 00:18:55.879
+which adds an entire directory of files
+
+00:18:55.880 --> 00:18:57.439
+to the current playlist.
+
+00:18:57.440 --> 00:19:02.319
+It accepts, or interactively queries for, a directory
+
+00:19:02.320 --> 00:19:06.119
+and iterates over each file in that directory,
+
+00:19:06.120 --> 00:19:10.759
+adding them as tracks to the playlist buffer as it goes.
+
+00:19:10.760 --> 00:19:15.039
+Emms comes with sources for files, directories, URLs,
+
+00:19:15.040 --> 00:19:17.319
+playlists of various formats,
+
+00:19:17.320 --> 00:19:22.159
+files from dired mode, and etc.
+
+NOTE Players
+
+00:19:22.160 --> 00:19:24.879
+Players:
+
+00:19:24.880 --> 00:19:28.959
+An Emms player is, at its simplest, a data structure
+
+00:19:28.960 --> 00:19:30.839
+with three functions.
+
+00:19:30.840 --> 00:19:34.519
+One to start playing, one to stop,
+
+00:19:34.520 --> 00:19:38.179
+and one which returns true if the player knows
+
+00:19:38.180 --> 00:19:41.279
+how to play a given track.
+
+00:19:41.280 --> 00:19:44.759
+However, if your player also knows how to pause, resume,
+
+00:19:44.760 --> 00:19:48.279
+seek, etc, then additional functions can be added
+
+00:19:48.280 --> 00:19:51.319
+to the player data structure.
+
+00:19:51.320 --> 00:19:55.399
+This is abstract enough to be able to, for example,
+
+00:19:55.400 --> 00:19:58.839
+define a simple player for images with the help of
+
+00:19:58.840 --> 00:20:04.579
+the `define-emms-simple-player` macro.
+
+00:20:04.580 --> 00:20:09.559
+The above will define a player called `emms-player-display`,
+
+00:20:09.560 --> 00:20:12.959
+which would call ImageMagick's `display` command
+
+00:20:12.960 --> 00:20:15.639
+on each file in our playlist
+
+00:20:15.640 --> 00:20:20.519
+with the image file extension we listed.
+
+NOTE Info
+
+00:20:20.520 --> 00:20:23.059
+Info:
+
+00:20:23.060 --> 00:20:28.019
+As previously described, Emms comes with info methods,
+
+00:20:28.020 --> 00:20:29.639
+which are functions to add
+
+00:20:29.640 --> 00:20:32.339
+descriptive information to tracks.
+
+00:20:32.340 --> 00:20:34.639
+Emms is set up so that
+
+00:20:34.640 --> 00:20:37.719
+the hook `emms-track-initialize-functions` is called
+
+00:20:37.720 --> 00:20:41.639
+when a track is created, and that ends up calling
+
+00:20:41.640 --> 00:20:46.279
+the info methods listed in the `emms-info-functions` list.
+
+00:20:46.280 --> 00:20:51.199
+These will modify the track data structure to add metadata.
+
+00:20:51.200 --> 00:20:54.319
+One of the coolest recent features of Emms
+
+00:20:54.320 --> 00:20:58.699
+is `emms-info-native`, written by Petteri Hintsanen;
+
+00:20:58.700 --> 00:21:01.325
+again, sorry for the pronunciation.
+
+00:21:01.326 --> 00:21:06.519
+`emms-info-native` is a purely Emacs Lisp implementation
+
+00:21:06.520 --> 00:21:11.439
+which reads Ogg Vorbis, Ogg Opus, FLAC, and MP3 files
+
+00:21:11.440 --> 00:21:14.679
+and parses out the metadata.
+
+00:21:14.680 --> 00:21:17.519
+This is in comparison with other info readers
+
+00:21:17.520 --> 00:21:20.559
+which Emms supports, which all involve calling out
+
+00:21:20.560 --> 00:21:25.619
+to external processes and parsing the values returned.
+
+00:21:25.620 --> 00:21:29.319
+`emms-info-native` works by unpacking and examining
+
+00:21:29.320 --> 00:21:32.039
+the binary data in the media file headers
+
+00:21:32.040 --> 00:21:36.659
+and parsing the data layout specifications.
+
+NOTE The cache
+
+00:21:36.660 --> 00:21:38.879
+The Cache:
+
+00:21:38.880 --> 00:21:43.279
+The Emms cache is a mapping between a full path name
+
+00:21:43.280 --> 00:21:45.719
+and its associated information.
+
+00:21:45.720 --> 00:21:48.199
+Once information is extracted from a file
+
+00:21:48.200 --> 00:21:50.759
+using an info method, that information is then
+
+00:21:50.760 --> 00:21:53.979
+associated with that file in the cache.
+
+00:21:53.980 --> 00:21:57.159
+One thing to bear in mind is that the caching system
+
+00:21:57.160 --> 00:21:58.359
+was originally written back
+
+00:21:58.360 --> 00:22:00.759
+when slow spinning disks were common.
+
+00:22:00.760 --> 00:22:07.519
+A 32GB SSD drive cost close to $700 in 2006,
+
+00:22:07.520 --> 00:22:10.279
+which is the equivalent of about $1,000
+
+00:22:10.280 --> 00:22:12.439
+at the time of writing.
+
+00:22:12.440 --> 00:22:15.259
+But despite the speed of modern drives,
+
+00:22:15.260 --> 00:22:17.439
+the caching system is still worth using
+
+00:22:17.440 --> 00:22:19.679
+for larger music collections.
+
+00:22:19.680 --> 00:22:22.439
+The caching system is also a prerequisite
+
+00:22:22.440 --> 00:22:26.599
+for being able to use the Emms browser.
+
+00:22:26.600 --> 00:22:30.379
+The cache implementation is relatively naive.
+
+00:22:30.380 --> 00:22:33.199
+For instance, moving a file will invalidate
+
+00:22:33.200 --> 00:22:35.799
+that cache entry for that file
+
+00:22:35.800 --> 00:22:37.579
+and will require a refresh.
+
+00:22:37.580 --> 00:22:40.599
+However, relatively little work has been done
+
+00:22:40.600 --> 00:22:42.779
+to the cache implementation over the years
+
+00:22:42.780 --> 00:22:44.999
+since it has proven to be good enough
+
+00:22:45.000 --> 00:22:47.059
+for the majority of situations.
+
+00:22:47.060 --> 00:22:51.619
+Which is to say, nobody complained.
+
+NOTE Healthy back and forth: mpv, mpd, and GNU.FM
+
+00:22:51.620 --> 00:22:56.239
+Healthy back and forth. MPV, MPD, GNU.FM
+
+00:22:56.240 --> 00:23:00.119
+Process communication with a simple media player
+
+00:23:00.120 --> 00:23:01.759
+can be as straightforward
+
+00:23:01.760 --> 00:23:03.799
+as starting an asynchronous process
+
+00:23:03.800 --> 00:23:05.799
+and waiting for that process to complete
+
+00:23:05.800 --> 00:23:07.919
+in order to move to the next track.
+
+00:23:08.620 --> 00:23:10.879
+This is how the example above
+
+00:23:10.880 --> 00:23:13.359
+with ImageMagick's display binary worked.
+
+00:23:13.760 --> 00:23:17.439
+However, Emms also handles asynchronous
+
+00:23:17.440 --> 00:23:20.299
+two-way communication with processes.
+
+00:23:20.300 --> 00:23:23.959
+A simple example of this would be sending strings
+
+00:23:23.960 --> 00:23:31.559
+to a running process such as the pause command to VLC.
+
+NOTE MPV
+
+00:23:31.560 --> 00:23:33.379
+MPV:
+
+00:23:33.380 --> 00:23:37.039
+MPV is a popular media player forked
+
+00:23:37.040 --> 00:23:39.899
+in a roundabout way from mplayer.
+
+00:23:39.900 --> 00:23:42.079
+One of its most notable features is
+
+00:23:42.080 --> 00:23:46.599
+support for a robust client API.
+
+00:23:46.600 --> 00:23:52.959
+Mike Kazantsev has been working since 2018
+
+00:23:52.960 --> 00:23:58.349
+to develop the excellent `emms-player-mpv.el'.
+
+00:23:58.350 --> 00:24:01.999
+It can communicate with a long running MPV process
+
+00:24:02.000 --> 00:24:07.179
+via Unix sockets or IP sockets.
+
+00:24:07.180 --> 00:24:11.169
+This allows for MPV to do things
+
+00:24:11.170 --> 00:24:14.889
+like update ICY metadata for streaming audio.
+
+00:24:14.890 --> 00:24:17.639
+So that, for example, when a song changes
+
+00:24:17.640 --> 00:24:22.049
+while you're listening to a streaming audio via Emms,
+
+00:24:22.050 --> 00:24:24.679
+the song title displayed in the mode line
+
+00:24:24.680 --> 00:24:28.329
+and track listing can update as well.
+
+00:24:28.330 --> 00:24:30.399
+This means that deep inside the code
+
+00:24:30.400 --> 00:24:35.629
+there is an Emacs `make-network-process` call.
+
+00:24:35.630 --> 00:24:37.919
+The fact that Mike has put this together
+
+00:24:37.920 --> 00:24:42.639
+in fewer than 1,000 lines of legible Emacs Lisp
+
+00:24:42.640 --> 00:24:47.469
+is a testament to some serious coding ability.
+
+NOTE MPD
+
+00:24:47.470 --> 00:24:49.609
+MPD:
+
+00:24:49.610 --> 00:24:52.399
+Similar to MPV but potentially
+
+00:24:52.400 --> 00:24:54.119
+on a completely different machine
+
+00:24:54.120 --> 00:24:58.459
+is Emms support for the Music Player Daemon.
+
+00:24:58.460 --> 00:25:01.519
+Music Player Daemon or MPD is a media player
+
+00:25:01.520 --> 00:25:03.959
+with an explicit client-server design
+
+00:25:03.960 --> 00:25:09.949
+and communicates with Emms via a network process.
+
+00:25:09.950 --> 00:25:16.089
+Unfortunately, MPD support has never been all that great.
+
+00:25:16.090 --> 00:25:20.469
+But this isn't the emms developers fault!
+
+00:25:20.470 --> 00:25:25.599
+Because unlike every other media player
+
+00:25:25.600 --> 00:25:29.729
+that Emms interfaces with MPD is designed around
+
+00:25:29.730 --> 00:25:31.929
+its own internal playlist database.
+
+00:25:31.930 --> 00:25:35.269
+This is a surprising design decision
+
+00:25:35.270 --> 00:25:37.649
+on the MPD developers' part
+
+00:25:37.650 --> 00:25:41.749
+since it goes against the client-server mindset.
+
+00:25:41.750 --> 00:25:45.959
+A consequence is that we end up having to try and coordinate
+
+00:25:45.960 --> 00:25:51.399
+and harmonize the MPD playlist with the Emms playlist.
+
+00:25:51.400 --> 00:25:56.689
+I can foresee writing a completely new MPD mode for Emms
+
+00:25:56.690 --> 00:26:01.509
+which is designed to be a true pure MPD client.
+
+00:26:01.510 --> 00:26:05.339
+Unless of course someone volunteers to beat me to it.
+
+00:26:05.340 --> 00:26:07.439
+Hint hint.
+
+NOTE GNU FM and Libre FM
+
+00:26:07.440 --> 00:26:10.959
+GNU FM and Libre FM:
+
+00:26:10.960 --> 00:26:13.639
+Libre FM is a music community which allows you
+
+00:26:13.640 --> 00:26:17.449
+to share your listening habits with other users of the site.
+
+00:26:17.450 --> 00:26:21.269
+A kind of online listening party.
+
+00:26:21.270 --> 00:26:25.649
+In the case of `emms-librefm-scrobber.el`
+
+00:26:25.650 --> 00:26:28.639
+we use Emacs' `url-retrieve` function
+
+00:26:28.640 --> 00:26:32.449
+to asynchronously send to a URL
+
+00:26:32.450 --> 00:26:40.049
+and then fire a callback function to process the response.
+
+00:26:40.050 --> 00:26:42.679
+This represents numerous challenges
+
+00:26:42.680 --> 00:26:45.089
+to implement within Emacs.
+
+00:26:45.090 --> 00:26:47.399
+The primary issue being that Emacs itself
+
+00:26:47.400 --> 00:26:50.099
+is pretty weak at doing anything
+
+00:26:50.100 --> 00:26:54.219
+truly and really asynchronously.
+
+00:26:54.220 --> 00:26:56.399
+I can say with confident sarcasm
+
+00:26:56.400 --> 00:26:59.529
+and with tongue firmly planted in cheek
+
+00:26:59.530 --> 00:27:02.879
+that it is almost as if the original designers
+
+00:27:02.880 --> 00:27:05.839
+of Emacs didn't foresee their text editor
+
+00:27:05.840 --> 00:27:07.039
+needing to play music
+
+00:27:07.040 --> 00:27:09.819
+while interacting with a remote network server.
+
+00:27:09.820 --> 00:27:12.559
+How myopic!
+
+NOTE How we work: Emms development
+
+00:27:12.560 --> 00:27:15.699
+How we work: Emms development:
+
+00:27:15.700 --> 00:27:19.619
+This part is an overview of how Emms is developed.
+
+00:27:19.620 --> 00:27:23.899
+By the end of this part you should be able to understand
+
+00:27:23.900 --> 00:27:28.719
+how we hacked this project, and how you can too.
+
+00:27:28.720 --> 00:27:29.949
+Where it's at.
+
+00:27:29.950 --> 00:27:32.369
+How to find our forge.
+
+00:27:32.370 --> 00:27:36.499
+Emms has been hosted at the FSF's forge, Savannah,
+
+00:27:36.500 --> 00:27:39.839
+since around 2003.
+
+00:27:39.840 --> 00:27:46.229
+Emms is distributed via GNU ELPA and integrated into Emacs.
+
+00:27:46.230 --> 00:27:49.799
+Before ELPA it was distributed as a tarball
+
+00:27:49.800 --> 00:27:55.139
+via ftp.gnu.org but that stopped back in 2020.
+
+00:27:55.140 --> 00:27:58.719
+I was initially resistant to ELPA but around the time
+
+00:27:58.720 --> 00:28:03.849
+when the thousandth person asked me why Emms isn't on ELPA,
+
+00:28:03.850 --> 00:28:07.209
+I realized that it had to happen.
+
+00:28:07.210 --> 00:28:10.599
+Emms can also be found in other places
+
+00:28:10.600 --> 00:28:16.079
+such as Melpa or GitHub but we, the developers of Emms,
+
+00:28:16.080 --> 00:28:17.999
+have nothing to do with that
+
+00:28:18.000 --> 00:28:21.759
+and we don't monitor those channels.
+
+00:28:21.760 --> 00:28:26.299
+If you want the source straight from, well, the source,
+
+00:28:26.300 --> 00:28:30.369
+then go to the Savannah Git repository.
+
+00:28:30.370 --> 00:28:34.989
+Look who's talking: Where development discussion happens.
+
+00:28:34.990 --> 00:28:37.999
+If you want to talk to us, discussions all happen
+
+00:28:38.000 --> 00:28:41.429
+on emms-help@gnu.org.
+
+00:28:41.430 --> 00:28:45.559
+We used to use emms-patches@gnu.org
+
+00:28:45.560 --> 00:28:48.279
+but didn't feel like the volume of incoming patches
+
+00:28:48.280 --> 00:28:52.589
+justified a separate mailing list.
+
+NOTE The Rime Of The Ancient Maintainer
+
+00:28:52.590 --> 00:28:55.719
+The Rime Of The Ancient Maintainer:
+
+00:28:55.720 --> 00:28:57.479
+There are a number of activities
+
+00:28:57.480 --> 00:29:00.099
+particular to being a maintainer.
+
+00:29:00.100 --> 00:29:03.389
+These are all part of a project's lifecycle.
+
+00:29:03.390 --> 00:29:06.079
+Let's review some of them.
+
+NOTE The life and times of an Emms patch
+
+00:29:06.080 --> 00:29:09.999
+The life and times of an Emms patch:
+
+00:29:10.000 --> 00:29:13.239
+A maintainer needs to be able to accept, critique,
+
+00:29:13.240 --> 00:29:17.559
+and integrate patches from contributors and developers.
+
+00:29:17.560 --> 00:29:20.559
+This means, among other things, that the maintainer
+
+00:29:20.560 --> 00:29:24.469
+needs to keep on top of copyright issues.
+
+00:29:24.470 --> 00:29:29.359
+Before being able to add Emms to GNU/ELPA,
+
+00:29:29.360 --> 00:29:31.879
+we had to make sure that the copyright situation
+
+00:29:31.880 --> 00:29:33.849
+was in order.
+
+00:29:33.850 --> 00:29:37.519
+This long process required reaching out to people
+
+00:29:37.520 --> 00:29:39.959
+and having them assign the copyright
+
+00:29:39.960 --> 00:29:42.509
+for their work to the FSF,
+
+00:29:42.510 --> 00:29:45.199
+or even removing their code entirely
+
+00:29:45.200 --> 00:29:47.969
+if they couldn't be reached.
+
+00:29:47.970 --> 00:29:50.629
+The experience left me with the conviction
+
+00:29:50.630 --> 00:29:52.399
+that the easiest way to fix
+
+00:29:52.400 --> 00:29:54.519
+the copyright situation of your package
+
+00:29:54.520 --> 00:30:00.639
+is to ensure that it never gets broken in the first place.
+
+00:30:00.640 --> 00:30:04.439
+Often a person will write in to the emms-help mailing list,
+
+00:30:04.440 --> 00:30:08.029
+or perhaps raise an issue on IRC.
+
+00:30:08.030 --> 00:30:11.679
+If it's a bug report or feature request, we'll discuss it,
+
+00:30:11.680 --> 00:30:14.159
+and when it's fixed, we'll ask the reporter
+
+00:30:14.160 --> 00:30:17.639
+to test the result and provide feedback.
+
+00:30:17.640 --> 00:30:22.039
+If it's a patch, then we'll typically go one of three ways.
+
+00:30:22.040 --> 00:30:24.799
+A trivial patch, such as fixing a typo
+
+00:30:24.800 --> 00:30:27.279
+or corrections on a single line of code,
+
+00:30:27.280 --> 00:30:32.039
+will simply be applied by one of the developers.
+
+00:30:32.040 --> 00:30:34.519
+A non-trivial, but one-time patch,
+
+00:30:34.520 --> 00:30:37.989
+will have to be cleared from a copyright perspective.
+
+00:30:37.990 --> 00:30:42.419
+This means assigning copyright for the changes to the FSF.
+
+00:30:42.420 --> 00:30:46.319
+Once that's cleared, then the patch will be applied.
+
+00:30:46.320 --> 00:30:49.879
+Finally, if it's a non-trivial patch,
+
+00:30:49.880 --> 00:30:52.079
+which looks like it would be the start
+
+00:30:52.080 --> 00:30:56.009
+of a long-term development work (my favorite),
+
+00:30:56.010 --> 00:30:57.879
+then after copyright is cleared,
+
+00:30:57.880 --> 00:31:00.799
+that person will be offered to be added
+
+00:31:00.800 --> 00:31:05.019
+to the members with Git repo access on Savannah.
+
+00:31:05.020 --> 00:31:08.199
+From there, we usually use a dedicated branch
+
+00:31:08.200 --> 00:31:09.639
+to do all the playing around
+
+00:31:09.640 --> 00:31:13.629
+before merging it with the main Git repo.
+
+00:31:13.630 --> 00:31:16.879
+If you have ever sent a patch, feature request,
+
+00:31:16.880 --> 00:31:24.079
+or bug report into Emms (small or large), we thank you.
+
+NOTE Let It Go: The release process
+
+00:31:24.080 --> 00:31:27.789
+Let It Go, The Release Process:
+
+00:31:27.790 --> 00:31:31.609
+The maintainer is responsible for the release process.
+
+00:31:31.610 --> 00:31:35.129
+I found that a consistent schedule works well,
+
+00:31:35.130 --> 00:31:39.379
+which is not to say that we have to release on schedule,
+
+00:31:39.380 --> 00:31:42.759
+but that aiming for a consistent release schedule
+
+00:31:42.760 --> 00:31:46.049
+provides structure and a goal.
+
+00:31:46.050 --> 00:31:50.159
+The main Git branch in the repository is stable
+
+00:31:50.160 --> 00:31:53.239
+and more often than not of release quality.
+
+00:31:53.240 --> 00:31:56.649
+Releases are done about every three months.
+
+00:31:56.650 --> 00:31:58.999
+And with such a stable main branch,
+
+00:31:59.000 --> 00:32:02.319
+the process of releasing often involves little more
+
+00:32:02.320 --> 00:32:05.059
+than writing a NEWS entry.
+
+00:32:05.060 --> 00:32:08.439
+As a consequence, new and wonderful features
+
+00:32:08.440 --> 00:32:11.439
+which aren't quite ready for prime time
+
+00:32:11.440 --> 00:32:13.499
+when a release comes around,
+
+00:32:13.500 --> 00:32:18.199
+will remain safely in their branch on the Git repo
+
+00:32:18.200 --> 00:32:23.399
+until after the ELPA release.
+
+NOTE It Is Not In Our Stars, But In Ourselves: Future directions
+
+00:32:23.400 --> 00:32:29.629
+It Is Not In Our Stars, But In Ourselves; Future Directions:
+
+00:32:29.630 --> 00:32:34.899
+One aspect of Emms that needs to improve is ease of setup.
+
+00:32:34.900 --> 00:32:37.719
+Now that might surprise you, since at the time of writing,
+
+00:32:37.720 --> 00:32:40.069
+it's already pretty easy.
+
+00:32:40.070 --> 00:32:43.879
+But my ideal is that the user would need to do
+
+00:32:43.880 --> 00:32:46.839
+nothing at all after installation.
+
+00:32:46.840 --> 00:32:49.359
+And with that, as a goal in mind,
+
+00:32:49.360 --> 00:32:52.749
+there is more work to be done.
+
+00:32:52.750 --> 00:32:55.499
+We are working on a player discovery feature.
+
+00:32:55.500 --> 00:32:57.039
+The idea is simple.
+
+00:32:57.040 --> 00:33:00.079
+The code looks for binaries of popular media players
+
+00:33:00.080 --> 00:33:01.639
+on the user's machine,
+
+00:33:01.640 --> 00:33:04.519
+and for each one found, it asks the user
+
+00:33:04.520 --> 00:33:07.519
+if they want the associated Emms player backend
+
+00:33:07.520 --> 00:33:09.809
+to be configured.
+
+00:33:09.810 --> 00:33:12.589
+In effect, this code is already working,
+
+00:33:12.590 --> 00:33:16.289
+but currently an undocumented, unofficial feature.
+
+00:33:16.290 --> 00:33:17.719
+You can try it for yourself with
+
+00:33:17.720 --> 00:33:21.079
+`emms-setup-discover-players`.
+
+00:33:21.080 --> 00:33:22.969
+So what's the holdup?
+
+00:33:22.970 --> 00:33:26.039
+`emms-setup-discover-players` currently configures
+
+00:33:26.040 --> 00:33:27.839
+the `emms-player-list` variable,
+
+00:33:27.840 --> 00:33:29.899
+but doesn't write it to disk.
+
+00:33:29.900 --> 00:33:31.679
+And that means that the configuration
+
+00:33:31.680 --> 00:33:35.039
+isn't preserved between Emacs sessions.
+
+00:33:35.040 --> 00:33:36.899
+The question then becomes,
+
+00:33:36.900 --> 00:33:40.309
+what is the best way to preserve this setting?
+
+00:33:40.310 --> 00:33:42.599
+I personally don't like anything
+
+00:33:42.600 --> 00:33:46.199
+to edit my .emacs except me,
+
+00:33:46.200 --> 00:33:49.279
+and I wouldn't do that to anyone else.
+
+00:33:49.280 --> 00:33:55.959
+Now we already write state to the .emacs.d/emms/ directory,
+
+00:33:55.960 --> 00:33:58.359
+but that would require care not to
+
+00:33:58.360 --> 00:34:01.909
+clobber a user's existing setup.
+
+00:34:01.910 --> 00:34:04.719
+Having the user set up their system in one place,
+
+00:34:04.720 --> 00:34:08.839
+such as a .emacs or a .emmsrc,
+
+00:34:08.840 --> 00:34:11.419
+while saving state to a different place
+
+00:34:11.420 --> 00:34:14.209
+is asking for confusion.
+
+00:34:14.210 --> 00:34:16.719
+This is a good example which I bring up
+
+00:34:16.720 --> 00:34:18.399
+of where a maintainer needs to
+
+00:34:18.400 --> 00:34:21.308
+solicit opinions from developers,
+
+00:34:21.309 --> 00:34:23.899
+both the Emacs developers,
+
+00:34:23.900 --> 00:34:28.169
+asking them where packages should save state,
+
+00:34:28.170 --> 00:34:33.169
+and the Emms developers, and also users.
+
+00:34:33.170 --> 00:34:35.439
+Then, the maintainer needs to
+
+00:34:35.440 --> 00:34:38.019
+carefully choose a path forward.
+
+00:34:38.020 --> 00:34:41.559
+It is typical of the kind of issue you have to have in mind
+
+00:34:41.560 --> 00:34:44.848
+when you're maintaining a package.
+
+NOTE Development policies: Interface language
+
+00:34:44.849 --> 00:34:49.159
+Development Policies: Interface Language.
+
+00:34:49.160 --> 00:34:52.359
+A maintainer of an interactive program such as Emms
+
+00:34:52.360 --> 00:34:55.359
+needs to think about user interaction.
+
+00:34:55.360 --> 00:34:58.399
+Emms doesn't use key bindings which are familiar
+
+00:34:58.400 --> 00:35:02.719
+to people who are used to GUI media players,
+
+00:35:02.720 --> 00:35:06.559
+and that can, and has, caused friction.
+
+00:35:06.560 --> 00:35:09.959
+Some new users are confused when they press the spacebar
+
+00:35:09.960 --> 00:35:12.529
+on an entry in the Emms browser,
+
+00:35:12.530 --> 00:35:15.459
+only to find that nothing starts playing.
+
+00:35:15.460 --> 00:35:18.679
+Indeed, all that does is to expand the browser tree
+
+00:35:18.680 --> 00:35:20.469
+at that point.
+
+00:35:20.470 --> 00:35:22.999
+Then they might press RET on the same entry,
+
+00:35:23.000 --> 00:35:28.259
+and be further frustrated at the continuing silence.
+
+00:35:28.260 --> 00:35:33.399
+Since what return does is just to add that entry at point
+
+00:35:33.400 --> 00:35:36.169
+to the current playlist.
+
+00:35:36.170 --> 00:35:37.759
+The discussion then arises
+
+00:35:37.760 --> 00:35:41.819
+about how Emms should handle that situation.
+
+00:35:41.820 --> 00:35:45.559
+On one hand, we want to make it as easy as possible
+
+00:35:45.560 --> 00:35:48.819
+for new users to learn Emms,
+
+00:35:48.820 --> 00:35:52.759
+and adopt a do-what-I-mean interface approach.
+
+00:35:52.760 --> 00:35:56.749
+On the other hand, this is an Emacs project.
+
+00:35:56.750 --> 00:35:59.439
+It isn't a stand-alone GUI media player,
+
+00:35:59.440 --> 00:36:01.399
+and should integrate into Emacs,
+
+00:36:01.400 --> 00:36:05.979
+and serve Emacs users first and foremost.
+
+NOTE Development policies: Freedom
+
+00:36:05.980 --> 00:36:10.289
+Development policies: Freedom.
+
+00:36:10.290 --> 00:36:14.999
+Another maintainer job is to think of Emms' posture
+
+00:36:15.000 --> 00:36:17.379
+in regards to software freedom.
+
+00:36:17.380 --> 00:36:19.729
+Here are a few examples.
+
+00:36:19.730 --> 00:36:23.759
+Back with MP3 was still a patent encumbered format,
+
+00:36:23.760 --> 00:36:26.080
+we pushed hard for Vorbis everywhere
+
+00:36:26.081 --> 00:36:29.639
+along with the PlayOgg campaign.
+
+00:36:29.640 --> 00:36:32.699
+A then popular music streaming service,
+
+00:36:32.700 --> 00:36:34.929
+which will remain unnamed,
+
+00:36:34.930 --> 00:36:38.619
+changed their stance towards third-party applications,
+
+00:36:38.620 --> 00:36:43.129
+and required individual API keys which could not be shared.
+
+00:36:43.130 --> 00:36:45.399
+We stood firm, said "no",
+
+00:36:45.400 --> 00:36:48.669
+and removed support for that service.
+
+00:36:48.670 --> 00:36:51.359
+A recent suggestion to add support for YouTube
+
+00:36:51.360 --> 00:36:53.889
+was also nixed,
+
+00:36:53.890 --> 00:36:55.679
+because the particular backend
+
+00:36:55.680 --> 00:36:58.959
+was found to download and run proprietary javascript
+
+00:36:58.960 --> 00:37:01.849
+on the user's machine.
+
+00:37:01.850 --> 00:37:05.399
+Saying no to potentially useful or wanted features
+
+00:37:05.400 --> 00:37:07.919
+because it involves non-free software
+
+00:37:07.920 --> 00:37:13.489
+is often an unpopular decision and can alienate people.
+
+00:37:13.490 --> 00:37:15.559
+A maintainer needs to think carefully
+
+00:37:15.560 --> 00:37:17.399
+about each of these decisions,
+
+00:37:17.400 --> 00:37:21.919
+as they are rarely straightforward and one-sided.
+
+00:37:21.920 --> 00:37:25.839
+And as you see above, they also change over time
+
+00:37:25.840 --> 00:37:30.299
+and need to be re-evaluated.
+
+00:37:30.300 --> 00:37:32.999
+One of the most useful things a maintainer can do
+
+00:37:33.000 --> 00:37:35.519
+is to coordinate the development effort
+
+00:37:35.520 --> 00:37:39.229
+and help new people join the project.
+
+00:37:39.230 --> 00:37:41.839
+In light of that, if you want to work on a project
+
+00:37:41.840 --> 00:37:44.059
+which has a bit of everything,
+
+00:37:44.060 --> 00:37:47.809
+you could do worse than hacking on Emms.
+
+00:37:47.810 --> 00:37:49.719
+There is inter-process communication,
+
+00:37:49.720 --> 00:37:52.479
+displaying graphics, parsing binary files,
+
+00:37:52.480 --> 00:37:56.529
+caching, asynchronous processes, user interface design.
+
+00:37:56.530 --> 00:37:59.599
+We also are a project that insists on
+
+00:37:59.600 --> 00:38:02.959
+keeping a well-written and up-to-date manual.
+
+00:38:02.960 --> 00:38:06.759
+If you can write English or hack Emacs Lisp at all,
+
+00:38:06.760 --> 00:38:09.939
+chances are that there is something you can do for Emms.
+
+00:38:09.940 --> 00:38:12.369
+Just saying.
+
+NOTE Acknowledgements
+
+00:38:12.370 --> 00:38:14.189
+Acknowledgements:
+
+00:38:14.190 --> 00:38:18.079
+I'd like to express my deep gratitude for all of the people
+
+00:38:18.080 --> 00:38:19.559
+who have hacked on Emms
+
+00:38:19.560 --> 00:38:23.169
+during my time as a maintainer and before it.
+
+00:38:23.170 --> 00:38:25.759
+It is often the case that I'm just the person
+
+00:38:25.760 --> 00:38:28.559
+holding the rudder and steering the ship,
+
+00:38:28.560 --> 00:38:30.039
+with all of these developers
+
+00:38:30.040 --> 00:38:33.179
+rowing furiously to provide the power
+
+00:38:33.180 --> 00:38:36.369
+which actually moves the ship forward.
+
+00:38:36.370 --> 00:38:38.040
+Thank you to all.
diff --git a/2023/captions/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--main--chapters.vtt b/2023/captions/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--main--chapters.vtt
new file mode 100644
index 00000000..01b7ca18
--- /dev/null
+++ b/2023/captions/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--main--chapters.vtt
@@ -0,0 +1,20 @@
+WEBVTT
+
+
+00:00:04.880 --> 00:00:35.989
+Introduction
+
+00:00:35.989 --> 00:03:35.809
+The wonders of C-x C-e
+
+00:03:35.809 --> 00:04:51.143
+An overview of REPL Driven Development
+
+00:04:51.143 --> 00:07:28.029
+REPL Driven Development with Java
+
+00:07:28.029 --> 00:07:59.669
+Bring your own Read Protocol
+
+00:07:59.669 --> 00:09:37.029
+Use Case: RDD & Job Interviews
diff --git a/2023/captions/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--main.vtt b/2023/captions/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--main.vtt
new file mode 100644
index 00000000..a0242577
--- /dev/null
+++ b/2023/captions/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--main.vtt
@@ -0,0 +1,607 @@
+WEBVTT captioned by bhavin192
+
+NOTE Introduction
+
+00:00:04.880 --> 00:00:10.000
+Hello, and welcome to EmacsConf 2023!
+
+00:00:10.001 --> 00:00:12.109
+My name is Musa Al-hassy,
+
+00:00:12.109 --> 00:00:15.549
+and I will be talking about "REPL-driven development."
+
+00:00:15.549 --> 00:00:18.269
+I like programming languages so much.
+
+00:00:18.269 --> 00:00:20.269
+I want to use them all over the place.
+
+00:00:20.269 --> 00:00:23.069
+I got a PhD in the topic.
+
+00:00:23.069 --> 00:00:25.349
+So let's just dive in.
+
+00:00:25.349 --> 00:00:27.949
+This is a lightning talk,
+
+00:00:27.949 --> 00:00:31.309
+so the details will be available in the repository.
+
+00:00:31.309 --> 00:00:33.469
+Links to longer videos and GIFs
+
+00:00:33.469 --> 00:00:35.989
+for those who are interested.
+
+NOTE The wonders of C-x C-e
+
+00:00:35.989 --> 00:00:37.309
+So the wonderful thing about Emacs
+
+00:00:37.309 --> 00:00:40.589
+is that you can execute Lisp anywhere.
+
+00:00:40.589 --> 00:00:42.829
+For example, I can go to this piece of Lisp,
+
+00:00:42.829 --> 00:00:45.576
+press Ctrl-x Ctrl-e (`C-x C-e`)
+
+00:00:45.576 --> 00:00:47.549
+and get a little pop-up.
+
+00:00:47.549 --> 00:00:49.669
+Alright, so here I pressed `C-x C-e`
+
+00:00:49.669 --> 00:00:51.389
+and this is what it ran.
+
+00:00:51.389 --> 00:00:52.776
+And what this package gives you
+
+00:00:52.776 --> 00:00:54.509
+is the same ability
+
+00:00:54.509 --> 00:00:56.909
+for any language of your choosing.
+
+00:00:56.909 --> 00:00:59.229
+So for example, here is some Java,
+
+00:00:59.229 --> 00:01:02.469
+and I bound it to Ctrl-x, Ctrl-j (`C-x C-j`).
+
+00:01:02.469 --> 00:01:07.149
+So I say `C-x C-j`, and this runs some code,
+
+00:01:07.149 --> 00:01:13.709
+and over here I get a little pop-up.
+
+00:01:13.709 --> 00:01:15.069
+The wonderful thing about
+
+00:01:15.069 --> 00:01:16.829
+being able to run code from anywhere
+
+00:01:16.829 --> 00:01:19.029
+is that you can keep it in normal text files
+
+00:01:19.029 --> 00:01:20.629
+or any kind of file you like.
+
+00:01:20.629 --> 00:01:23.669
+For example, you can have hyperlinks,
+
+00:01:23.669 --> 00:01:25.109
+as it were…, like this one.
+
+00:01:25.109 --> 00:01:28.549
+`C-x C-e`, and now we can see this down here.
+
+00:01:28.549 --> 00:01:30.789
+Learn about it.
+
+00:01:30.789 --> 00:01:34.189
+But being able to run other languages besides Emacs
+
+00:01:34.189 --> 00:01:36.149
+lets us do some interesting things.
+
+00:01:36.149 --> 00:01:39.589
+For example, in the middle of a JavaScript program,
+
+00:01:39.589 --> 00:01:43.429
+you might write a line like this. `C-x C-n`.
+
+00:01:43.429 --> 00:01:45.229
+And that says down here
+
+00:01:45.229 --> 00:01:47.269
+`javascript-eval` in the mode line,
+
+00:01:47.269 --> 00:01:49.643
+and so this just checks that some endpoint
+
+00:01:49.643 --> 00:01:51.189
+is working as intended.
+
+00:01:51.189 --> 00:01:52.749
+So you don't need to use an external tool
+
+00:01:52.749 --> 00:01:53.589
+to check endpoints.
+
+00:01:53.589 --> 00:01:57.469
+You can just use Emacs in your favorite language.
+
+00:01:57.469 --> 00:01:59.629
+You know, you can keep your spirit up.
+
+00:01:59.629 --> 00:02:03.709
+So, `C-x C-a` runs `applescript-eval`.
+
+00:02:03.709 --> 00:02:06.376
+[Computer]: You can do it, buddy.
+
+00:02:06.376 --> 00:02:13.269
+[Musa]: Maybe you heard that in the background?
+
+00:02:13.269 --> 00:02:15.389
+The cool thing is, your code immediately takes form.
+
+00:02:15.389 --> 00:02:18.469
+Right away, you see it doing things, you know,
+
+00:02:18.469 --> 00:02:20.349
+altering your environment.
+
+00:02:20.349 --> 00:02:24.429
+For example, this is JavaScript,
+
+00:02:24.429 --> 00:02:28.349
+and JavaScript here is gonna change Emacs for us.
+
+00:02:28.349 --> 00:02:32.109
+So `C-x C-n`. And you can see down here
+
+00:02:32.109 --> 00:02:34.669
+`javascript-eval` was invoked.
+
+00:02:34.669 --> 00:02:38.789
+It returned true, and this line of JavaScript
+
+00:02:38.789 --> 00:02:41.709
+altered our Emacs. So that's really nice.
+
+00:02:41.709 --> 00:02:43.749
+So you don't need to use just Emacs Lisp if you like.
+
+00:02:43.749 --> 00:02:46.149
+You can use other systems.
+
+00:02:46.149 --> 00:02:50.069
+As you saw, the output is shown in overlays.
+
+00:02:50.069 --> 00:02:52.869
+So here's, for example, `C-x C-p` to run
+
+00:02:52.869 --> 00:02:54.109
+some Python code.
+
+00:02:54.109 --> 00:02:55.476
+Notice it blinked in red
+
+00:02:55.476 --> 00:02:56.869
+because I thought red was nice.
+
+00:02:56.869 --> 00:02:58.389
+You can configure as you like.
+
+00:02:58.389 --> 00:02:59.409
+And if you hover over it,
+
+00:02:59.409 --> 00:03:01.869
+you can see the solution there,
+
+00:03:01.869 --> 00:03:04.669
+and you can see it in a variety of familiar ways
+
+00:03:04.669 --> 00:03:08.709
+if you use `C-x C-e` regularly.
+
+00:03:08.709 --> 00:03:09.989
+You can insert the results.
+
+00:03:09.989 --> 00:03:14.269
+You can find documentation about them.
+
+00:03:14.269 --> 00:03:15.989
+The idea here is that
+
+00:03:15.989 --> 00:03:20.389
+you have this familiar Lisp workflow
+
+00:03:20.389 --> 00:03:24.989
+with `C-x C-e`, and this package ports it over
+
+00:03:24.989 --> 00:03:27.069
+to your favorite language out.
+
+00:03:27.069 --> 00:03:28.343
+So you can eval things,
+
+00:03:28.343 --> 00:03:30.789
+you can insert them, and do as you like.
+
+00:03:30.789 --> 00:03:35.809
+I think that's really neat.
+
+NOTE An overview of REPL Driven Development
+
+00:03:35.809 --> 00:03:37.209
+This package allows you to do
+
+00:03:37.209 --> 00:03:39.109
+REPL driven development.
+
+00:03:39.109 --> 00:03:42.309
+In that, you can use it to grow your program.
+
+00:03:42.309 --> 00:03:43.709
+You don't need to restart it.
+
+00:03:43.709 --> 00:03:45.549
+You can see changes live.
+
+00:03:45.549 --> 00:03:50.149
+So here's, for example, this is in a Java runtime.
+
+00:03:50.149 --> 00:03:52.869
+You can see some balls bouncing around.
+
+00:03:52.869 --> 00:03:54.509
+I don't really know which one is the second one,
+
+00:03:54.509 --> 00:03:57.229
+but let's increase its size. `C-x C-j`.
+
+00:03:57.229 --> 00:04:00.189
+And this one increased in size,
+
+00:04:00.189 --> 00:04:02.189
+and you can see down here I pressed `C-x C-j`.
+
+00:04:02.189 --> 00:04:05.549
+Let's change the color to blue,
+
+00:04:05.549 --> 00:04:09.309
+`C-x C-j`, the color is blue.
+
+00:04:09.309 --> 00:04:12.376
+So all these changes are happening live.
+
+00:04:12.376 --> 00:04:14.429
+Three balls isn't really a ball pit.
+
+00:04:14.429 --> 00:04:18.989
+Let's go to 50 balls. There you go.
+
+00:04:18.989 --> 00:04:21.469
+So it's nice that you can do this
+
+00:04:21.469 --> 00:04:23.209
+without leaving your environment,
+
+00:04:23.209 --> 00:04:26.189
+without building, you can rapidly modify and see.
+
+00:04:26.189 --> 00:04:29.776
+I think that's nice.
+
+00:04:29.776 --> 00:04:32.829
+Unfortunately, I'm at the halfway point,
+
+00:04:32.829 --> 00:04:35.309
+so I won't be able to work through
+
+00:04:35.309 --> 00:04:37.109
+some of these nice problems,
+
+00:04:37.109 --> 00:04:38.676
+but you can see the videos
+
+00:04:38.676 --> 00:04:41.509
+or GIFs on the associated repo.
+
+00:04:41.509 --> 00:04:42.709
+Likewise for this one.
+
+00:04:42.709 --> 00:04:43.909
+This one would have been a lot of fun,
+
+00:04:43.909 --> 00:04:46.509
+but unfortunately, we're running short on time.
+
+00:04:46.509 --> 00:04:51.143
+Apologies.
+
+NOTE REPL Driven Development with Java
+
+00:04:51.143 --> 00:04:56.209
+The neat thing here is: this package tries to
+
+00:04:56.209 --> 00:05:00.269
+bring the feeling of Lisp to other languages.
+
+00:05:00.269 --> 00:05:03.509
+So the idea of a REPL, or a Read Eval Print Loop
+
+00:05:03.509 --> 00:05:06.949
+is R and P are data interchange protocols.
+
+00:05:06.949 --> 00:05:09.869
+Unfortunately, not every language has those,
+
+00:05:09.869 --> 00:05:12.709
+but this package kind of encourages us to
+
+00:05:12.709 --> 00:05:14.643
+implement them if we don't have them.
+
+00:05:14.643 --> 00:05:16.909
+Let me show you an example.
+
+00:05:16.909 --> 00:05:20.589
+What do I mean here?
+
+00:05:20.589 --> 00:05:22.709
+This is a Java file.
+
+00:05:22.709 --> 00:05:25.189
+I've loaded this definition in.
+
+00:05:25.189 --> 00:05:28.543
+We can press `C-x C-j`,
+
+00:05:28.543 --> 00:05:30.909
+and you see it's a list of person.
+
+00:05:30.909 --> 00:05:33.829
+I didn't give this a name, so its name is $59.
+
+00:05:33.829 --> 00:05:40.829
+If I hover over it, we can see the definition again.
+
+00:05:40.829 --> 00:05:44.429
+So it's a person called Hamid, age 5,
+
+00:05:44.429 --> 00:05:46.229
+another person called Jaafar, age 6.
+
+00:05:46.229 --> 00:05:52.229
+This pretty printing is nice for me as a human,
+
+00:05:52.229 --> 00:05:56.349
+but I can't execute this. This isn't valid Java.
+
+00:05:56.349 --> 00:06:00.609
+So I could do `C-u C-x C-j`.
+
+00:06:00.609 --> 00:06:05.109
+If I have the help of a read protocol inserted.
+
+00:06:05.109 --> 00:06:09.469
+Sorry, `C-x C-j`. There it is.
+
+00:06:09.469 --> 00:06:12.549
+So look, it gives me a `new Person`
+
+00:06:12.549 --> 00:06:14.349
+with the construction everything.
+
+00:06:14.349 --> 00:06:16.549
+Now I can work with.
+
+00:06:16.549 --> 00:06:17.949
+Java can work with this.
+
+00:06:17.949 --> 00:06:21.709
+So this can be quite useful for regression testing
+
+00:06:21.709 --> 00:06:25.749
+or just to find out what your method spits out.
+
+00:06:25.749 --> 00:06:29.869
+We can do the same thing. Here's a bigger example.
+
+00:06:29.869 --> 00:06:32.389
+Trying to see it in the overlay is a bit cramped.
+
+00:06:32.389 --> 00:06:34.589
+We can say `C-u C-x C-j`.
+
+00:06:34.589 --> 00:06:38.669
+All right, and now we have executable code.
+
+00:06:38.669 --> 00:06:40.876
+Okay, this is neat.
+
+00:06:40.876 --> 00:06:42.389
+If you want to do something with it.
+
+00:06:42.389 --> 00:06:45.789
+I'm not really interested. I have four new persons.
+
+00:06:45.789 --> 00:06:49.309
+If I really want to look at this,
+
+00:06:49.309 --> 00:06:55.649
+I can say `M-x java-eval-navigate-output`,
+
+00:06:55.649 --> 00:07:00.829
+and now I see my output as this hierarchical tree.
+
+00:07:00.829 --> 00:07:03.589
+I go down, I can see what's inside these,
+
+00:07:03.589 --> 00:07:06.709
+what's the type of this thing, what's in there.
+
+00:07:06.709 --> 00:07:09.349
+All right, so that's nice.
+
+00:07:09.349 --> 00:07:14.189
+The idea is that we're not limited to
+
+00:07:14.189 --> 00:07:15.629
+just textual output.
+
+00:07:15.629 --> 00:07:19.589
+We can render output,
+
+00:07:19.589 --> 00:07:22.229
+thanks to the power of Emacs, in any way we want.
+
+00:07:22.229 --> 00:07:26.749
+In a browser, in a LaTeX file, in an Org mode (file),
+
+00:07:26.749 --> 00:07:28.029
+however we really desire.
+
+NOTE Bring your own Read Protocol
+
+00:07:28.029 --> 00:07:32.989
+And if our language doesn't have an easy protocol,
+
+00:07:32.989 --> 00:07:36.143
+so what I did for Java in particular was:
+
+00:07:36.143 --> 00:07:38.643
+you take a blob, and you use some
+
+00:07:38.643 --> 00:07:43.149
+parsing expression grammars, or if you really want
+
+00:07:43.149 --> 00:07:44.949
+regular expression pattern matching,
+
+00:07:44.949 --> 00:07:46.829
+and you get some property list out,
+
+00:07:46.829 --> 00:07:51.349
+and then you construct an executable expression
+
+00:07:51.349 --> 00:07:53.149
+out of that. Like this `new Person`.
+
+00:07:53.149 --> 00:07:56.749
+It's nice that you can do these kind of things
+
+00:07:56.749 --> 00:07:59.669
+and that this software encourages you to do them.
+
+NOTE Use Case: RDD & Job Interviews
+
+00:07:59.669 --> 00:08:07.549
+So one use case I actually use
+
+00:08:07.549 --> 00:08:10.909
+besides learning things is…
+
+00:08:10.909 --> 00:08:14.776
+oops oops oopsies oopsies showing you metadata
+
+00:08:14.776 --> 00:08:15.509
+you shouldn't be looking at.
+
+00:08:15.509 --> 00:08:19.409
+Don't look at my metadata. Sorry about that.
+
+00:08:19.409 --> 00:08:23.209
+One place I actually use this besides learning
+
+00:08:23.209 --> 00:08:25.029
+and trying new libraries and APIs
+
+00:08:25.029 --> 00:08:26.776
+and stuff like that is,
+
+00:08:26.776 --> 00:08:29.509
+for example, when I interviewed for jobs
+
+00:08:29.509 --> 00:08:33.229
+last year (I was changing jobs),
+
+00:08:33.229 --> 00:08:34.676
+I would share my screen,
+
+00:08:34.676 --> 00:08:37.869
+and if the interviewer gave me
+
+00:08:37.869 --> 00:08:39.949
+some inputs and outputs to play with,
+
+00:08:39.949 --> 00:08:41.576
+I could do essentially
+
+00:08:41.576 --> 00:08:42.976
+some sort of test driven development
+
+00:08:42.976 --> 00:08:45.149
+and constantly evaluate things
+
+00:08:45.149 --> 00:08:46.589
+right in front of the interviewer.
+
+00:08:46.589 --> 00:08:49.949
+For some design questions
+
+00:08:49.949 --> 00:08:53.909
+rather than sketching out my ideas in a Google Doc,
+
+00:08:53.909 --> 00:08:55.509
+I would share my screen and be like,
+
+00:08:55.509 --> 00:08:57.989
+"Hey, here's actual executable code,
+
+00:08:57.989 --> 00:08:59.229
+we can stub some things out
+
+00:08:59.229 --> 00:09:00.576
+and have some types,"
+
+00:09:00.576 --> 00:09:03.476
+and the idea is we can still check things
+
+00:09:03.476 --> 00:09:05.643
+and run them right there and then,
+
+00:09:05.643 --> 00:09:08.143
+which I thought was quite nice, and it helps to
+
+00:09:08.143 --> 00:09:10.309
+clarify your thought process, I guess.
+
+00:09:10.309 --> 00:09:15.149
+Anyhow, so that's my time,
+
+00:09:15.149 --> 00:09:19.829
+I hope you've enjoyed this little package,
+
+00:09:19.829 --> 00:09:22.869
+and again, sorry for the rush,
+
+00:09:22.869 --> 00:09:24.149
+it's a lightning talk.
+
+00:09:24.149 --> 00:09:29.069
+Feel free to find everything on the associated repo.
+
+00:09:29.069 --> 00:09:34.389
+And have a wonderful December Saturday.
+
+00:09:34.389 --> 00:09:37.029
+Take care! Bye bye, everyone.
diff --git a/2023/captions/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--main.vtt b/2023/captions/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--main.vtt
new file mode 100644
index 00000000..5d17e1de
--- /dev/null
+++ b/2023/captions/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--main.vtt
@@ -0,0 +1,755 @@
+WEBVTT
+
+
+00:00:01.880 --> 00:00:02.380
+That's how I came into this.
+
+00:00:10.120 --> 00:00:10.480
+Finally, the next big thing was starting
+
+00:00:16.100 --> 00:00:16.600
+2005, I went fully Linux and then for Mac OS,
+
+00:00:19.540 --> 00:00:20.040
+and I switched to vanilla self-compiled
+
+00:00:25.279 --> 00:00:25.779
+versions of Emacs. So what do I want to show?
+
+00:00:30.540 --> 00:00:30.920
+Couple of time ago in the development list
+
+00:00:34.540 --> 00:00:34.760
+there was a short exchange about the nil and
+
+00:00:38.400 --> 00:00:38.900
+the flood button, flood button button styles,
+
+00:00:42.480 --> 00:00:42.700
+saying that it was equivalent and they are
+
+00:00:45.480 --> 00:00:45.980
+not. So instead of starting a Flame Wars,
+
+00:00:49.220 --> 00:00:49.720
+I thought it was better to go and publicize
+
+00:00:54.520 --> 00:00:55.020
+the goodies you get with Flood Button.
+
+00:00:57.260 --> 00:00:57.440
+And this is what I'm going to be showing you
+
+00:01:00.140 --> 00:01:00.640
+practically. Why Flood Button?
+
+00:01:06.020 --> 00:01:06.500
+2005, more or less, I came across DOOM Emacs,
+
+00:01:07.660 --> 00:01:08.160
+which was nice. And I,
+
+00:01:12.180 --> 00:01:12.600
+especially I liked the DOOM mode line,
+
+00:01:13.740 --> 00:01:14.040
+which was, I think it is,
+
+00:01:15.560 --> 00:01:16.060
+it is, and it was cool at that time.
+
+00:01:20.280 --> 00:01:20.500
+I was using other themes and it was not that
+
+00:01:23.760 --> 00:01:24.020
+easy to adapt for these other themes and even
+
+00:01:26.080 --> 00:01:26.280
+less when you are in an environment with
+
+00:01:30.060 --> 00:01:30.560
+dynamic themes like mine because I tend to
+
+00:01:36.500 --> 00:01:36.680
+adapt the theme to the light conditions in my
+
+00:01:40.520 --> 00:01:40.760
+working place. So what I did at the end was
+
+00:01:44.540 --> 00:01:44.820
+coming up with a style for faces called flood
+
+00:01:49.020 --> 00:01:49.140
+button for boxes, called flood button as a
+
+00:01:52.640 --> 00:01:53.140
+simple way to get modern looking buttons and
+
+00:01:59.160 --> 00:01:59.380
+bars. So flood button is a face style for
+
+00:02:02.380 --> 00:02:02.740
+boxes within buttons that automatically sets
+
+00:02:05.240 --> 00:02:05.440
+the border color to the background of the
+
+00:02:08.440 --> 00:02:08.880
+face, as opposed to nil,
+
+00:02:10.440 --> 00:02:10.940
+which uses the foreground.
+
+00:02:14.380 --> 00:02:14.880
+And this produces a very doom mode line-ish
+
+00:02:18.400 --> 00:02:18.640
+look and feel. And if you want to know where
+
+00:02:21.580 --> 00:02:21.780
+I use it, basically for the mode line and I'm
+
+00:02:24.720 --> 00:02:25.200
+using tab line for a long time now.
+
+00:02:28.480 --> 00:02:28.680
+So for the mode line and for tab line to
+
+00:02:35.080 --> 00:02:35.280
+organize my windows. And since an image is
+
+00:02:37.160 --> 00:02:37.660
+worth more than a thousand words,
+
+00:02:40.860 --> 00:02:41.160
+I'm just going to stop this and start sharing
+
+00:02:44.120 --> 00:02:44.360
+a small Emacs environment I have ready for
+
+00:02:47.020 --> 00:02:47.220
+this talk where I'm going to show you a flat
+
+00:02:50.220 --> 00:02:50.720
+button in real life. So if you hold with me,
+
+00:02:56.100 --> 00:02:56.600
+I'm going to share a window.
+
+00:02:58.840 --> 00:02:59.340
+It's going to be this 1.
+
+00:03:01.386 --> 00:03:01.430
+Share and share. Here we are.
+
+00:03:01.780 --> 00:03:02.280
+And share. Here we are.
+
+00:03:08.040 --> 00:03:08.540
+So this is an Emacs which is recent,
+
+00:03:13.460 --> 00:03:13.740
+reasonably recent. Nothing especially it was
+
+00:03:14.900 --> 00:03:15.400
+compiled, it's Emacs 30.
+
+00:03:18.480 --> 00:03:18.780
+And I think what I have here is something
+
+00:03:19.900 --> 00:03:20.400
+that I compiled last weekend.
+
+00:03:24.940 --> 00:03:25.140
+I was tempted to use something compiled this
+
+00:03:28.080 --> 00:03:28.580
+morning, but I saw a patch by Ellie regarding
+
+00:03:30.640 --> 00:03:31.140
+something in the faces and I didn't want to
+
+00:03:34.160 --> 00:03:34.440
+live a too risky life here,
+
+00:03:36.220 --> 00:03:36.720
+so I'm going to use this.
+
+00:03:40.740 --> 00:03:41.240
+I'm not starting the ZMAC from the normal
+
+00:03:44.160 --> 00:03:44.660
+Emacs directory. I have my own,
+
+00:03:49.440 --> 00:03:49.840
+I have a special customization directory for
+
+00:03:51.560 --> 00:03:52.060
+Emacs, and this is this 1.
+
+00:03:57.760 --> 00:03:58.100
+And here what I have is basically an early
+
+00:04:01.880 --> 00:04:02.220
+init and an init. So the early init,
+
+00:04:03.680 --> 00:04:03.900
+which is quite stupid as you see,
+
+00:04:07.800 --> 00:04:08.300
+the only thing that it does is getting rid of
+
+00:04:10.640 --> 00:04:10.800
+most of the things that I'm not going to be
+
+00:04:12.740 --> 00:04:13.240
+using here. So I have no toolbar,
+
+00:04:15.700 --> 00:04:16.200
+no scroll bar, no tool tips.
+
+00:04:20.560 --> 00:04:20.760
+I don't like global highlighting my line art,
+
+00:04:21.720 --> 00:04:22.040
+so I'm not using that.
+
+00:04:22.800 --> 00:04:23.300
+I'm not using dialogues.
+
+00:04:25.560 --> 00:04:26.060
+And to start up easier,
+
+00:04:29.440 --> 00:04:29.940
+I don't inhibit, I don't use any startups
+
+00:04:34.540 --> 00:04:35.020
+screen. So just to make sure that everything
+
+00:04:41.360 --> 00:04:41.860
+is correct, that everything is as I want,
+
+00:04:44.840 --> 00:04:45.340
+just to show you my Emacs.
+
+00:04:49.240 --> 00:04:49.740
+As you see the Emacs 30,
+
+00:04:53.900 --> 00:04:54.100
+which was built on the 26th of November which
+
+00:04:55.520 --> 00:04:56.020
+was not very long ago.
+
+00:04:57.880 --> 00:04:58.380
+And now here comes the real magic.
+
+00:05:00.540 --> 00:05:01.040
+My init and my init file.
+
+00:05:04.020 --> 00:05:04.520
+Maybe I go to my init file here.
+
+00:05:11.880 --> 00:05:12.040
+What I have is just a variable saying that I
+
+00:05:15.880 --> 00:05:16.380
+want an extra 8 pixels for my mode line.
+
+00:05:18.240 --> 00:05:18.740
+And I have 2 functions.
+
+00:05:23.800 --> 00:05:24.300
+1 is modifying the mode line,
+
+00:05:25.920 --> 00:05:26.420
+both the active and the inactive,
+
+00:05:32.180 --> 00:05:32.680
+using the nil style with this line width of 8
+
+00:05:36.380 --> 00:05:36.600
+pixels and to compare with it what I have
+
+00:05:39.140 --> 00:05:39.640
+here is another function which will customize
+
+00:05:42.400 --> 00:05:42.780
+the face for mode line and instead of using
+
+00:05:44.960 --> 00:05:45.460
+nil I'm using here flat button.
+
+00:05:49.440 --> 00:05:49.940
+So this is my all the magic that I need.
+
+00:05:53.240 --> 00:05:53.500
+I'm going to copy that and I'm going to go to
+
+00:05:57.340 --> 00:05:57.520
+the scratch buffer which is always the best
+
+00:05:58.780 --> 00:05:59.280
+way of checking these things.
+
+00:06:05.660 --> 00:06:06.100
+When I normally work with themes,
+
+00:06:09.320 --> 00:06:09.520
+what I do is if I want to further modify the
+
+00:06:13.620 --> 00:06:14.120
+themes, I add an advice to load a theme after
+
+00:06:17.800 --> 00:06:18.040
+the theme is loaded. In this first case,
+
+00:06:21.280 --> 00:06:21.540
+what I'm going to be doing is adding the nil
+
+00:06:22.680 --> 00:06:23.180
+sign so that you can see it.
+
+00:06:30.240 --> 00:06:30.740
+And once this is done,
+
+00:06:33.000 --> 00:06:33.500
+I'm going to load 1 of the Modo Soprandi
+
+00:06:42.600 --> 00:06:43.100
+themes, the tinted 1. Here we are.
+
+00:06:56.400 --> 00:06:56.900
+And as you can see, when I loaded the theme,
+
+00:07:01.880 --> 00:07:02.160
+what I see here is my mode line with the
+
+00:07:05.320 --> 00:07:05.580
+x-ray pixels using since I'm using the nil
+
+00:07:09.520 --> 00:07:09.720
+style it's using the background color and
+
+00:07:12.620 --> 00:07:13.120
+this gives you this thick black line there
+
+00:07:17.080 --> 00:07:17.240
+furthermore if you have the inactive line you
+
+00:07:20.660 --> 00:07:21.040
+see that it is grayed out so it's always
+
+00:07:22.800 --> 00:07:23.300
+using the foreground color.
+
+00:07:33.300 --> 00:07:33.480
+So now what I'm going to do is to load the
+
+00:07:35.200 --> 00:07:35.700
+models we have any which is the dark theme
+
+00:07:40.080 --> 00:07:40.400
+and this case what you see is the love deal
+
+00:07:43.220 --> 00:07:43.720
+the lines always using the foreground color
+
+00:07:49.200 --> 00:07:49.700
+use the Give you an extra 8 pixels of a white
+
+00:07:53.000 --> 00:07:53.500
+color here, which is not what we really want.
+
+00:07:58.900 --> 00:07:59.240
+At least not what I wanted to have.
+
+00:08:01.560 --> 00:08:02.060
+So what I'm going to do now is I'm going to
+
+00:08:08.940 --> 00:08:09.440
+remove this advice and add the flat style
+
+00:08:12.800 --> 00:08:13.260
+thing, flat style function,
+
+00:08:15.480 --> 00:08:15.920
+so that we're going to do the same.
+
+00:08:18.380 --> 00:08:18.540
+But now when I load the themes I'm going to
+
+00:08:20.760 --> 00:08:21.040
+have a flat button style for the mode line
+
+00:08:21.880 --> 00:08:22.380
+and you'll see the difference.
+
+00:08:29.480 --> 00:08:29.980
+So if I now load Modo Software Andy theme,
+
+00:08:35.380 --> 00:08:35.640
+tint it, what I get here is as you see I get
+
+00:08:40.520 --> 00:08:40.760
+a solid mode line which is a bit more which
+
+00:08:49.240 --> 00:08:49.400
+is wider than the normal mode line And if I
+
+00:08:53.140 --> 00:08:53.480
+go to the dark theme, I am going to see,
+
+00:08:55.440 --> 00:08:55.920
+you're going to see that now the theme
+
+00:08:59.860 --> 00:09:00.360
+changes and I have a mode line which is,
+
+00:09:02.700 --> 00:09:03.080
+if not the doom mode line,
+
+00:09:08.260 --> 00:09:08.760
+quite close to the Doom mode line.
+
+00:09:11.200 --> 00:09:11.700
+Where do I use this? Personally,
+
+00:09:15.280 --> 00:09:15.580
+I use it for the mode line and for the tab
+
+00:09:18.960 --> 00:09:19.460
+line, as I've said. And it gives me this
+
+00:09:27.040 --> 00:09:27.340
+clean themes with thicker mode line and tab
+
+00:09:33.620 --> 00:09:34.120
+lines which at least in my personal feeling
+
+00:09:40.160 --> 00:09:40.660
+look quite modern. And this will be my
+
+00:09:43.820 --> 00:09:44.200
+demonstration. So I'm going to stop sharing
+
+00:09:46.820 --> 00:09:46.960
+the screen and I'm going to try and see if
+
+00:09:49.400 --> 00:09:49.900
+there's anything on the on the chat.
+
+00:09:57.040 --> 00:09:57.360
+And I just wanted to know if there are any
+
+00:10:01.240 --> 00:10:01.740
+questions. Thank you Pedro.
+
+00:10:05.000 --> 00:10:05.180
+Yeah We are now into the Q&A portion of the
+
+00:10:06.420 --> 00:10:06.920
+talk. So if folks have questions,
+
+00:10:10.080 --> 00:10:10.240
+please post them on IRC or on the pad and
+
+00:10:11.040 --> 00:10:11.540
+we'll take them up here.
+
+00:10:25.400 --> 00:10:25.900
+Okay, I see a question here saying,
+
+00:10:28.520 --> 00:10:28.860
+do you plan to upstream the style into
+
+00:10:32.580 --> 00:10:32.900
+core-remix? It's part of core-remix since
+
+00:10:35.800 --> 00:10:36.300
+Emacs 29, so you have it.
+
+00:10:49.060 --> 00:10:49.540
+How difficult to...I mean,
+
+00:10:54.320 --> 00:10:54.620
+you already have the flat button style in
+
+00:10:57.660 --> 00:10:57.940
+Core Remax. And you've seen that the main
+
+00:11:00.740 --> 00:11:00.980
+thing is, if you want to have a thing like
+
+00:11:06.660 --> 00:11:06.940
+that, you just have to customize the face.
+
+00:11:10.920 --> 00:11:11.420
+I don't think it's too difficult to do.
+
+00:11:13.380 --> 00:11:13.880
+It's adding the style that you want.
+
+00:11:17.360 --> 00:11:17.860
+So if you want to see it again,
+
+00:11:20.860 --> 00:11:21.160
+I'm going to go and share the screen once
+
+00:11:23.980 --> 00:11:24.160
+again and show you the only thing that you
+
+00:11:31.740 --> 00:11:32.240
+really need to do. And control X 1,
+
+00:11:34.680 --> 00:11:35.180
+control X buffer to init.
+
+00:11:41.040 --> 00:11:41.320
+So this is what you would have to do to get
+
+00:11:48.880 --> 00:11:49.020
+your mode line or mode line inactive with a
+
+00:11:52.360 --> 00:11:52.660
+flat button style. So what you do is you get
+
+00:11:56.120 --> 00:11:56.280
+your face like this, the face that you want
+
+00:11:59.640 --> 00:12:00.060
+to modify. You say that you inherit from the
+
+00:12:02.920 --> 00:12:03.200
+original face and what you do is that you add
+
+00:12:06.820 --> 00:12:07.000
+a box with the line width that you want and
+
+00:12:08.040 --> 00:12:08.540
+the style plug button.
+
+00:12:10.900 --> 00:12:11.400
+I don't think it's too difficult to do.
+
+00:12:23.100 --> 00:12:23.600
+How much work was involved in implementing
+
+00:12:27.360 --> 00:12:27.780
+this style? It is not 1 of the biggest
+
+00:12:28.940 --> 00:12:29.440
+patches you have in Emacs.
+
+00:12:32.260 --> 00:12:32.640
+It was my first patch,
+
+00:12:34.500 --> 00:12:34.960
+so it was like 20 liners.
+
+00:12:40.280 --> 00:12:40.780
+It's not too much. Yes,
+
+00:12:44.540 --> 00:12:45.040
+I am going to go and...
+
+00:12:54.733 --> 00:12:54.800
+Oops. SKB and... There you are.
+
+00:12:58.660 --> 00:12:58.900
+And there you are. I've checked it for copy
+
+00:13:05.440 --> 00:13:05.580
+and paste. Of course, then what you have to
+
+00:13:09.440 --> 00:13:09.760
+do is to add an advice and add this thing
+
+00:13:16.680 --> 00:13:16.980
+after the add this code after the well after
+
+00:13:17.760 --> 00:13:18.260
+you've loaded the theme.
+
+00:13:22.420 --> 00:13:22.920
+It says, ModeLine and ModeLineInactive.
+
+00:13:27.400 --> 00:13:27.720
+I'm also using it for TabLine and
+
+00:13:29.820 --> 00:13:30.060
+TabLineInactive and all this kind of things.
+
+00:13:30.060 --> 00:13:30.560
+Thanks.
+
+00:14:00.660 --> 00:14:01.160
+Thanks. Any other questions?
+
+00:14:35.020 --> 00:14:35.520
+Reactions? Thank you. Thank you.
+
+00:15:04.160 --> 00:15:04.340
+Okay, I think we still have about 6 or 7 more
+
+00:15:05.840 --> 00:15:06.220
+minutes of live Q&A on stream,
+
+00:15:07.400 --> 00:15:07.900
+so if folks have any more questions,
+
+00:15:09.940 --> 00:15:10.440
+please do feel free to post them on the pad.
+
+00:15:30.060 --> 00:15:30.560
+Silence. Silence. Silence.
+
+00:16:02.280 --> 00:16:02.780
+Well, do you teach eMAX to any of your
+
+00:16:04.700 --> 00:16:05.200
+university students? As such,
+
+00:16:08.080 --> 00:16:08.580
+there's no course that we teach,
+
+00:16:12.800 --> 00:16:13.300
+but in tutorships and in tutoring sessions,
+
+00:16:15.460 --> 00:16:15.800
+when we do practical things,
+
+00:16:21.100 --> 00:16:21.300
+and I do a lot, I tend to use Emacs for all
+
+00:16:24.480 --> 00:16:24.960
+the tasks so that the students get involved
+
+00:16:28.220 --> 00:16:28.380
+in it. I also have a small introduction to
+
+00:16:29.640 --> 00:16:30.110
+Emacs that I share with my students.
+
+00:16:33.400 --> 00:16:33.900
+So So every year I have 2 or 3 new adepts.
+
+00:17:43.900 --> 00:17:44.400
+We have a question on IRC.
+
+00:17:46.920 --> 00:17:47.080
+Someone asking can you please show what the
+
+00:17:53.160 --> 00:17:53.660
+tab line looks like? Just a second.
+
+00:17:56.880 --> 00:17:57.380
+This would be like this.
+
+00:18:03.096 --> 00:18:03.193
+For that I'm going to use my regular Emacs.
+
+00:18:06.220 --> 00:18:06.560
+Just my my regular emacs so just let me fire
+
+00:18:09.220 --> 00:18:09.720
+it up. Sure.
+
+00:18:23.540 --> 00:18:24.040
+And
+
+00:18:39.760 --> 00:18:40.120
+That's my current situation with the tab
+
+00:18:42.660 --> 00:18:43.140
+line. I do have a couple of functions.
+
+00:18:44.680 --> 00:18:45.180
+So this is 1 of the things that I use.
+
+00:18:51.500 --> 00:18:51.600
+As you see, both the tab line here and the
+
+00:18:57.040 --> 00:18:57.340
+mode line change. And the other thing is I
+
+00:19:00.520 --> 00:19:01.020
+can, this is for some situations,
+
+00:19:03.600 --> 00:19:03.940
+not currently because it's just later,
+
+00:19:06.420 --> 00:19:06.680
+it's a bit too dark. But this is for light
+
+00:19:10.260 --> 00:19:10.760
+days. I have like 3 or 4 themes that I can
+
+00:19:15.020 --> 00:19:15.140
+switch to these are the themes that I
+
+00:19:18.120 --> 00:19:18.620
+normally use This is how the tab line looks.
+
+00:19:22.660 --> 00:19:23.160
+This is how the tab line here looks with the
+
+00:19:28.280 --> 00:19:28.780
+with a flat button style.
+
+00:19:35.640 --> 00:19:36.140
+Looks great, Thank you for sharing.
+
+00:19:37.200 --> 00:19:37.700
+You're welcome.
+
+00:19:50.720 --> 00:19:51.220
+Okay, I think we have 2 or 3 more minutes.
+
+00:19:53.600 --> 00:19:54.100
+So if folks, if you have any final questions
+
+00:19:55.480 --> 00:19:55.980
+for Pedro, please post them in.
+
+00:20:37.360 --> 00:20:37.860
+Okay. Okay.
+
+00:20:54.260 --> 00:20:54.760
+Okay.
+
+00:21:34.540 --> 00:21:34.700
+No further questions. Yeah,
+
+00:21:36.380 --> 00:21:36.880
+it seems we don't have any further questions.
+
+00:21:39.100 --> 00:21:39.480
+Just another audience member also thanking
+
+00:21:44.060 --> 00:21:44.200
+you on the chat. So with that,
+
+00:21:45.320 --> 00:21:45.480
+I'll say Thank you very much,
+
+00:21:47.080 --> 00:21:47.580
+Pedro, for your great talk and for the Q&A,
+
+00:21:50.220 --> 00:21:50.320
+for your work and for helping spreading the
+
+00:21:52.360 --> 00:21:52.860
+joy of Emacs. Okay, thanks.
+
+00:21:56.140 --> 00:21:56.640
+Thank you. Bye-bye. It was a nice experience
+
+00:21:59.200 --> 00:21:59.700
+here. Very nice tool. Cheers.
+
+00:22:01.640 --> 00:22:01.920
+Awesome. Take care. Bye.
+
+00:22:02.720 --> 00:22:03.220
+Bye. Bye.
diff --git a/2023/captions/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--answers.vtt b/2023/captions/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--answers.vtt
new file mode 100644
index 00000000..71a15554
--- /dev/null
+++ b/2023/captions/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--answers.vtt
@@ -0,0 +1,1049 @@
+WEBVTT
+
+
+00:00:01.620 --> 00:00:02.120
+[Speaker 0]: And then, hi everyone.
+
+00:00:03.760 --> 00:00:04.150
+Thank you for your nice talk,
+
+00:00:05.900 --> 00:00:06.400
+I can say it's the Emacs GC.
+
+00:00:09.280 --> 00:00:09.519
+We have some questions on the pad and maybe
+
+00:00:11.580 --> 00:00:11.820
+before I would like to ask you something to
+
+00:00:12.780 --> 00:00:13.280
+the last 1 you have said,
+
+00:00:15.200 --> 00:00:15.700
+concerning changing the GC strategy,
+
+00:00:18.500 --> 00:00:18.840
+that it's unlikely that it will be happening
+
+00:00:20.380 --> 00:00:20.740
+in the next time. Yeah.
+
+00:00:22.760 --> 00:00:22.940
+Is there any discussion going on or why does
+
+00:00:24.320 --> 00:00:24.820
+the case it's not changing the strategy?
+
+00:00:26.640 --> 00:00:27.140
+[Speaker 1]: It's mostly because it's difficult.
+
+00:00:29.439 --> 00:00:29.860
+I think, yesterday you heard from,
+
+00:00:33.400 --> 00:00:33.900
+1 of the dev talks that like there was 1
+
+00:00:34.980 --> 00:00:35.220
+small, short comment that,
+
+00:00:36.780 --> 00:00:37.280
+oh yeah, it would be nice to change this
+
+00:00:39.059 --> 00:00:39.559
+algorithm but it's hard.
+
+00:00:40.760 --> 00:00:40.840
+[Speaker 0]: So I
+
+00:00:43.260 --> 00:00:43.700
+[Speaker 1]: mean it's hard not because the algorithm is
+
+00:00:45.400 --> 00:00:45.720
+that hard but because it's a very low level
+
+00:00:48.000 --> 00:00:48.500
+code and it must be like very carefully
+
+00:00:49.960 --> 00:00:50.460
+weighted. So that can be,
+
+00:00:53.239 --> 00:00:53.640
+it needs to be made sure that the carousel
+
+00:00:55.280 --> 00:00:55.780
+will work. It's all bugs.
+
+00:00:57.440 --> 00:00:57.600
+If you have bugs and you can see that,
+
+00:00:58.660 --> 00:00:59.160
+so it's nothing to work anymore.
+
+00:01:00.720 --> 00:01:01.200
+[Speaker 0]: So We have a lot of RAM usage.
+
+00:01:02.240 --> 00:01:02.740
+Yeah. Maybe sometime.
+
+00:01:06.180 --> 00:01:06.500
+[Speaker 1]: There was like years ago,
+
+00:01:09.640 --> 00:01:10.140
+there was a branch on generational DC,
+
+00:01:11.100 --> 00:01:11.600
+if I remember correctly,
+
+00:01:13.380 --> 00:01:13.880
+but they didn't go anywhere,
+
+00:01:14.760 --> 00:01:15.260
+unfortunately.
+
+00:01:18.900 --> 00:01:19.240
+[Speaker 0]: That's a pity. But let's come to the
+
+00:01:21.500 --> 00:01:22.000
+questions on the pad. So the first 1 is,
+
+00:01:24.340 --> 00:01:24.840
+are the GC duration statistics correlated
+
+00:01:27.340 --> 00:01:27.660
+with users? I mean, does the same user
+
+00:01:29.440 --> 00:01:29.940
+experience GC of various durations?
+
+00:01:32.900 --> 00:01:33.400
+Or Do some users experience GC of a greater
+
+00:01:36.680 --> 00:01:36.960
+0.26 exclusively, while others never
+
+00:01:40.440 --> 00:01:40.940
+experience them? So is it correlated to user
+
+00:01:43.780 --> 00:01:44.280
+behavior? I guess you said it in your talk.
+
+00:01:46.160 --> 00:01:46.660
+[Speaker 1]: Well, If you talk formally,
+
+00:01:49.340 --> 00:01:49.540
+then almost every user has like 1 or 2
+
+00:01:51.500 --> 00:01:52.000
+occasions when GC takes more than 0.2
+
+00:01:53.040 --> 00:01:53.540
+seconds, but it's like,
+
+00:01:56.720 --> 00:01:57.040
+maybe something else is using CPU and that's
+
+00:02:00.720 --> 00:02:00.920
+why, but in practice, there are users who
+
+00:02:04.200 --> 00:02:04.540
+don't have problem. Half of them that that's
+
+00:02:05.800 --> 00:02:06.300
+who that's what I looked from statistics.
+
+00:02:10.240 --> 00:02:10.440
+And dry users who have like really big
+
+00:02:12.520 --> 00:02:13.020
+problems, like 1 second GC time.
+
+00:02:17.280 --> 00:02:17.520
+[Speaker 0]: This is dependent on you make some comments
+
+00:02:19.960 --> 00:02:20.460
+on us in the talk, but could you like extract
+
+00:02:23.000 --> 00:02:23.200
+on if it's a package, that's a problem or we
+
+00:02:24.780 --> 00:02:25.280
+as a user behavior are there.
+
+00:02:30.720 --> 00:02:31.220
+[Speaker 1]: Usually it's something that is,
+
+00:02:33.760 --> 00:02:33.960
+okay. I'm sharing my screen now,
+
+00:02:37.580 --> 00:02:38.080
+[Speaker 0]: It's coming on, give it like 2 to 3 seconds.
+
+00:02:41.480 --> 00:02:41.980
+[Speaker 1]: right? Yeah. So I can just click through
+
+00:02:42.940 --> 00:02:43.440
+different user statistics.
+
+00:02:48.840 --> 00:02:49.080
+So like you can see this duration for each
+
+00:02:49.960 --> 00:02:50.460
+individual user basically.
+
+00:02:54.240 --> 00:02:54.740
+So you can see like here for example it's
+
+00:02:56.320 --> 00:02:56.820
+like averages around 0.25
+
+00:03:00.040 --> 00:03:00.420
+seconds which is noticeable and here is like
+
+00:03:03.640 --> 00:03:03.960
+0.1 like someone is all over the place,
+
+00:03:09.560 --> 00:03:10.060
+probably some. Then like,
+
+00:03:11.520 --> 00:03:12.020
+what else can we see here?
+
+00:03:15.140 --> 00:03:15.640
+Yeah, some users like have sub 0.1,
+
+00:03:23.320 --> 00:03:23.560
+no problem at all. And I have seen some that
+
+00:03:30.180 --> 00:03:30.240
+really, really bad. I mean,
+
+00:03:31.880 --> 00:03:32.240
+[Speaker 0]: if it's noticeable, it's all bad.
+
+00:03:36.960 --> 00:03:37.460
+[Speaker 1]: So yeah. For example, here it's like 0.8
+
+00:03:41.680 --> 00:03:42.040
+seconds, 0.5 seconds. I don't know how that
+
+00:03:48.600 --> 00:03:49.100
+guy uses ZMax. Yeah. you can see it varies.
+
+00:03:51.160 --> 00:03:51.660
+[Speaker 0]: So It varies quite a lot.
+
+00:03:52.760 --> 00:03:53.000
+[Speaker 1]: What it depends on, like,
+
+00:03:54.120 --> 00:03:54.620
+usually the number of packages,
+
+00:03:58.440 --> 00:03:58.620
+like all kinds of timers going on under the
+
+00:04:01.720 --> 00:04:02.220
+hood. I think I tried to list...
+
+00:04:12.520 --> 00:04:12.800
+I'll go through this. I briefly outlined some
+
+00:04:15.440 --> 00:04:15.940
+important parts. Here,
+
+00:04:18.480 --> 00:04:18.980
+when you have something like an org agenda,
+
+00:04:20.680 --> 00:04:21.180
+it will most likely trigger a lot of GCs.
+
+00:04:23.900 --> 00:04:24.400
+When you have a lot of timers,
+
+00:04:27.800 --> 00:04:27.980
+when you have something calculated on
+
+00:04:29.700 --> 00:04:30.200
+modline, it will be frequently triggered.
+
+00:04:30.900 --> 00:04:31.240
+[Speaker 0]: Well,
+
+00:04:34.080 --> 00:04:34.260
+[Speaker 1]: yeah. When you have so many packages and
+
+00:04:35.760 --> 00:04:36.260
+these packages are using a lot of memory.
+
+00:04:41.120 --> 00:04:41.540
+Like I remember I was surprised by this,
+
+00:04:44.640 --> 00:04:45.020
+package, home org that was,
+
+00:04:46.560 --> 00:04:47.060
+caching all the results.
+
+00:04:48.960 --> 00:04:49.280
+And for large org files,
+
+00:04:51.540 --> 00:04:51.720
+it was like several hundred megabytes of
+
+00:04:55.160 --> 00:04:55.660
+data. Well, it just becomes slower.
+
+00:04:55.900 --> 00:04:56.280
+Yeah.
+
+00:05:00.020 --> 00:05:00.340
+[Speaker 0]: Yeah. Maybe, maybe a short side note.
+
+00:05:02.600 --> 00:05:02.760
+Someone asks, what software you're using for
+
+00:05:03.480 --> 00:05:03.980
+flipping through the PNGs.
+
+00:05:06.660 --> 00:05:07.160
+Maybe you could shortly throws it in.
+
+00:05:08.800 --> 00:05:09.280
+[Speaker 1]: What do you mean? Here,
+
+00:05:11.000 --> 00:05:11.500
+[Speaker 0]: I guess it was just simply,
+
+00:05:13.480 --> 00:05:13.980
+[Speaker 1]: this, It's it's far. Yeah.
+
+00:05:16.660 --> 00:05:17.160
+So
+
+00:05:23.900 --> 00:05:24.400
+[Speaker 0]: yeah. So, question 1 and 2 answered.
+
+00:05:35.740 --> 00:05:36.040
+To 1 statement you have made,
+
+00:05:37.500 --> 00:05:38.000
+there was a question concerning the timings.
+
+00:05:41.180 --> 00:05:41.680
+So you said, okay, everything above 0.1
+
+00:05:45.800 --> 00:05:46.120
+second is fine. Maybe There's a short story
+
+00:05:48.480 --> 00:05:48.980
+of someone who asked a question.
+
+00:05:50.380 --> 00:05:50.800
+[Speaker 1]: I see the question is about scrolling,
+
+00:05:51.820 --> 00:05:52.320
+[Speaker 0]: Yeah, exactly.
+
+00:05:55.580 --> 00:05:55.760
+[Speaker 1]: right? Again, there's not much you can do in
+
+00:05:58.620 --> 00:05:58.860
+terms of trying to adjust the GC time.
+
+00:06:02.320 --> 00:06:02.820
+I mean, if you make GCs less frequent,
+
+00:06:07.540 --> 00:06:08.000
+you increase the individual GC time.
+
+00:06:08.860 --> 00:06:09.280
+If you make them more frequent,
+
+00:06:11.280 --> 00:06:11.520
+you decrease the individual GC time,
+
+00:06:12.400 --> 00:06:12.740
+but then they are more frequent.
+
+00:06:15.920 --> 00:06:16.200
+So what is the point? I think the way to go
+
+00:06:19.940 --> 00:06:20.080
+here is you can rise to see the short for the
+
+00:06:20.740 --> 00:06:21.240
+duration of scrolling,
+
+00:06:22.500 --> 00:06:22.860
+like just for a comment.
+
+00:06:26.320 --> 00:06:26.740
+I think it's a recommendation from Emacs
+
+00:06:31.480 --> 00:06:31.660
+devs. So like You do something along the
+
+00:06:31.660 --> 00:06:32.160
+lines.
+
+00:06:53.480 --> 00:06:53.800
+Yeah, I'm surely doing something on my screen
+
+00:06:55.680 --> 00:06:56.180
+and I forgot that I'm not sharing anything.
+
+00:06:56.680 --> 00:06:57.180
+[Speaker 0]: Exactly.
+
+00:07:00.700 --> 00:07:01.200
+[Speaker 1]: Simply something like this.
+
+00:07:08.140 --> 00:07:08.460
+So, basically, if you have some command that
+
+00:07:10.920 --> 00:07:11.180
+is very important that it should run very
+
+00:07:13.860 --> 00:07:14.120
+quickly. You temporary increase that
+
+00:07:15.740 --> 00:07:16.240
+threshold, you run that comment,
+
+00:07:19.940 --> 00:07:20.140
+then that's all. That's probably the best.
+
+00:07:21.660 --> 00:07:22.000
+So basically, the best you can do is to delay
+
+00:07:23.760 --> 00:07:24.260
+it after the command.
+
+00:07:27.500 --> 00:07:27.700
+[Speaker 0]: So afterwards, it takes a lot of time to do
+
+00:07:36.140 --> 00:07:36.500
+its stuff. OK. The third 1 has been already
+
+00:07:40.520 --> 00:07:40.780
+answered, but I just want to get your
+
+00:07:42.780 --> 00:07:43.280
+information from it. Opinions on the GCMH
+
+00:07:43.940 --> 00:07:44.440
+mode.
+
+00:07:48.280 --> 00:07:48.640
+[Speaker 1]: Okay. Yeah, I see that problem,
+
+00:07:49.920 --> 00:07:50.420
+but that's more like a technical problem.
+
+00:07:52.360 --> 00:07:52.860
+But there's another problem there.
+
+00:07:57.340 --> 00:07:57.840
+Yeah, I prepared a small snippet here.
+
+00:08:02.160 --> 00:08:02.660
+So if you look at the GCMH mode,
+
+00:08:05.800 --> 00:08:06.040
+it has this concept of low threshold and high
+
+00:08:08.200 --> 00:08:08.560
+threshold and most of the time it's running
+
+00:08:14.120 --> 00:08:14.620
+high threshold and then when Emacs is idle,
+
+00:08:17.320 --> 00:08:17.480
+it falls back to lower threshold and then it
+
+00:08:19.400 --> 00:08:19.900
+does the GC while Emacs is not used.
+
+00:08:22.040 --> 00:08:22.360
+That's a good idea, of course.
+
+00:08:24.380 --> 00:08:24.880
+That's the core idea of GCMH mode.
+
+00:08:30.520 --> 00:08:30.720
+Unfortunately, the most annoying GC is when
+
+00:08:31.760 --> 00:08:32.260
+you're actively using max.
+
+00:08:37.120 --> 00:08:37.419
+And then you have this huge value of GC
+
+00:08:38.799 --> 00:08:39.299
+counter show and look at the doc stream.
+
+00:08:41.760 --> 00:08:42.080
+This would be sector value that makes GC
+
+00:08:43.980 --> 00:08:44.480
+unlikely but does not cost OSP Asian.
+
+00:08:46.480 --> 00:08:46.880
+So yeah, no wonder like if you don't do GC,
+
+00:08:49.640 --> 00:08:50.140
+your arm usage will skyrocket.
+
+00:08:54.360 --> 00:08:54.860
+So they don't, they cannot put it too much,
+
+00:08:57.720 --> 00:08:58.220
+but this is like already like,
+
+00:08:59.220 --> 00:08:59.720
+how much was it?
+
+00:09:10.800 --> 00:09:10.860
+1 gigabyte, that's the default.
+
+00:09:15.220 --> 00:09:15.720
+And the problem is when you have 1 gigabyte
+
+00:09:18.680 --> 00:09:19.000
+to garbage collect, it causes really long GC
+
+00:09:22.040 --> 00:09:22.480
+time. So in GC image mode,
+
+00:09:23.560 --> 00:09:24.060
+when you're actually using Emacs,
+
+00:09:28.860 --> 00:09:29.360
+really heavily, the GCs become terrible,
+
+00:09:34.640 --> 00:09:34.860
+terribly slow. So it may help in case you
+
+00:09:37.200 --> 00:09:37.540
+don't have too much problems with GC,
+
+00:09:39.280 --> 00:09:39.720
+but I will say that in such situation,
+
+00:09:41.920 --> 00:09:42.420
+you can simply increase GC cost percentage,
+
+00:09:44.540 --> 00:09:45.040
+as I recommend, and it should do it.
+
+00:09:48.480 --> 00:09:48.640
+But in case of really big problems with
+
+00:09:50.080 --> 00:09:50.540
+garbage collection, no,
+
+00:09:51.740 --> 00:09:52.240
+I don't think that will help much.
+
+00:09:54.800 --> 00:09:54.960
+I used it myself and it didn't help much for
+
+00:09:55.200 --> 00:09:55.700
+my stuff.
+
+00:09:59.680 --> 00:10:00.180
+[Speaker 0]: All right. The next question is concerning
+
+00:10:04.600 --> 00:10:04.820
+freeing up memory. Is there some way to free
+
+00:10:07.200 --> 00:10:07.420
+up memory such as via unload feature on
+
+00:10:09.960 --> 00:10:10.120
+Emacs? Often I only need a package loaded for
+
+00:10:12.240 --> 00:10:12.400
+a single task or short period by the
+
+00:10:13.320 --> 00:10:13.820
+persistent memory afterwards.
+
+00:10:19.780 --> 00:10:19.940
+[Speaker 1]: So the packages are usually not that much of
+
+00:10:22.060 --> 00:10:22.560
+a problem. I mean, the libraries,
+
+00:10:25.280 --> 00:10:25.780
+the problem is some extra,
+
+00:10:30.060 --> 00:10:30.340
+like some variable contents or some
+
+00:10:31.800 --> 00:10:32.300
+histories, some caches.
+
+00:10:35.280 --> 00:10:35.780
+That's what's eating most of the memory.
+
+00:10:40.240 --> 00:10:40.740
+There is a package called memory usage and
+
+00:10:45.440 --> 00:10:45.940
+built in MX memory report.
+
+00:10:50.900 --> 00:10:51.100
+They allow to see which variables take a lot
+
+00:10:56.000 --> 00:10:56.500
+of memory. And that way you can try to see
+
+00:10:58.520 --> 00:10:59.020
+which packages are actually problematic.
+
+00:11:03.340 --> 00:11:03.840
+So for example, I recall,
+
+00:11:05.640 --> 00:11:06.140
+and that was not exactly,
+
+00:11:09.720 --> 00:11:09.880
+I remember there was a package that was
+
+00:11:11.040 --> 00:11:11.260
+literally in command line,
+
+00:11:14.020 --> 00:11:14.240
+like prompt history. I think it was in
+
+00:11:17.540 --> 00:11:18.040
+command. And when you do like,
+
+00:11:20.440 --> 00:11:20.940
+when you save every message in your chart
+
+00:11:25.280 --> 00:11:25.780
+into prompt history, that can grow very fast
+
+00:11:29.220 --> 00:11:29.600
+and can go to several hundred megabytes just
+
+00:11:31.720 --> 00:11:32.020
+in that history. And that can cause major
+
+00:11:37.960 --> 00:11:38.360
+problems. So, yes, profiling the largest
+
+00:11:41.200 --> 00:11:41.600
+variables with the largest buffers that might
+
+00:11:42.660 --> 00:11:42.900
+give some clues. Again,
+
+00:11:43.740 --> 00:11:44.240
+there is no silver bullet.
+
+00:11:49.080 --> 00:11:49.320
+[Speaker 0]: Right. I think the last question on the
+
+00:11:51.000 --> 00:11:51.500
+patterns. At first, very nice presentation.
+
+00:11:51.620 --> 00:11:51.780
+[Speaker 1]: I can
+
+00:11:53.980 --> 00:11:54.480
+[Speaker 0]: also only agree with that.
+
+00:11:56.480 --> 00:11:56.640
+I just experienced with a threshold and
+
+00:11:58.200 --> 00:11:58.700
+lowered my GCE lapse from 1.1
+
+00:12:01.440 --> 00:12:01.940
+to 0.06 seconds during startup.
+
+00:12:03.600 --> 00:12:04.100
+Interestingly, going to 10 megabytes
+
+00:12:06.100 --> 00:12:06.340
+increased the time. 4 megabytes was a sweet
+
+00:12:07.800 --> 00:12:08.300
+spot for my system. What is the recommended
+
+00:12:10.840 --> 00:12:11.260
+way to lower the value back to the default
+
+00:12:12.340 --> 00:12:12.840
+value after startup is completed?
+
+00:12:16.160 --> 00:12:16.660
+[Speaker 1]: I think you just use after init hook.
+
+00:12:23.940 --> 00:12:24.440
+[Speaker 0]: This was a relatively fast answer.
+
+00:12:29.180 --> 00:12:29.480
+[Speaker 1]: So basically for example Doom does this,
+
+00:12:31.940 --> 00:12:32.220
+it temporary writes a gcconcert hold during
+
+00:12:37.260 --> 00:12:37.760
+startup and yeah after init hook the code is
+
+00:12:39.880 --> 00:12:40.380
+like it's 1 of the commonly suggested
+
+00:12:43.940 --> 00:12:44.440
+approaches and is I believe it's the right 1.
+
+00:12:49.180 --> 00:12:49.680
+[Speaker 0]: Right. To have joined us 1 was a microphone.
+
+00:12:52.200 --> 00:12:52.360
+So Peter, do you have any questions that you
+
+00:12:55.240 --> 00:12:55.640
+want to question? And maybe as a side note,
+
+00:12:57.380 --> 00:12:57.740
+we only have 4 minutes left and afterwards
+
+00:12:59.240 --> 00:12:59.480
+this happy weekend will still be open,
+
+00:13:01.400 --> 00:13:01.900
+but we will switch back to the talks.
+
+00:13:05.380 --> 00:13:05.820
+[Speaker 2]: Yeah, no more questions on garbage
+
+00:13:07.640 --> 00:13:08.140
+collection, but I just wanted to thank Ihor
+
+00:13:10.440 --> 00:13:10.940
+for his engagement in the community.
+
+00:13:15.300 --> 00:13:15.480
+And especially with, I'm a co-maintainer on
+
+00:13:17.600 --> 00:13:18.100
+orgnotor and he's helped us a lot with
+
+00:13:21.680 --> 00:13:21.820
+getting us up to date with newer versions of
+
+00:13:22.680 --> 00:13:22.960
+org and stuff like that.
+
+00:13:24.680 --> 00:13:25.140
+So just wanted to thank you in person.
+
+00:13:25.140 --> 00:13:25.640
+[Speaker 1]: Right.
+
+00:13:33.540 --> 00:13:33.800
+[Speaker 0]: Maybe 1 question for me,
+
+00:13:35.460 --> 00:13:35.760
+you had some bit talked about memory
+
+00:13:40.640 --> 00:13:40.800
+fragmentation. So is there any way to or is
+
+00:13:42.080 --> 00:13:42.580
+it fixed by Emacs itself?
+
+00:13:43.740 --> 00:13:43.940
+So you have like
+
+00:13:46.520 --> 00:13:46.980
+[Speaker 1]: a chunk of memory fragmentation is basically
+
+00:13:51.420 --> 00:13:51.600
+your OS. Yeah, Emacs releases the memory and
+
+00:13:55.020 --> 00:13:55.200
+then OS can rearrange it depending on the
+
+00:13:58.320 --> 00:13:58.820
+implementation of its memory manager.
+
+00:14:01.520 --> 00:14:01.720
+[Speaker 0]: Okay, so the GC just releases it really and
+
+00:14:04.400 --> 00:14:04.900
+not so it could be that a mix is like
+
+00:14:07.420 --> 00:14:07.840
+[Speaker 1]: doing it. You have like memory pages,
+
+00:14:09.560 --> 00:14:09.760
+right? Yeah. And you see,
+
+00:14:12.140 --> 00:14:12.600
+can release a part of this page just like
+
+00:14:14.760 --> 00:14:15.060
+here and there. And depending on the exact
+
+00:14:17.720 --> 00:14:18.220
+situation is your arm at each moment of time,
+
+00:14:20.240 --> 00:14:20.640
+or as may or may not be able to arrange
+
+00:14:25.160 --> 00:14:25.640
+[Speaker 0]: so
+
+00:14:27.620 --> 00:14:27.940
+[Speaker 1]: things. So, how the exact the data you cannot
+
+00:14:30.160 --> 00:14:30.320
+really predict it. It really varies like you
+
+00:14:31.120 --> 00:14:31.480
+use Windows, you use Linux,
+
+00:14:33.240 --> 00:14:33.740
+you use like malloc, something else,
+
+00:14:36.260 --> 00:14:36.600
+but it has nothing to do with Emacs.
+
+00:14:38.040 --> 00:14:38.540
+It's just something you have to deal with.
+
+00:14:41.780 --> 00:14:41.940
+[Speaker 0]: Yeah, but my question was in the way that we
+
+00:14:43.460 --> 00:14:43.860
+are giving the memory back to the operating
+
+00:14:46.020 --> 00:14:46.440
+system, not just holding it as used and then
+
+00:14:49.960 --> 00:14:50.140
+to our own memory, like stuff as Emacs that
+
+00:14:51.680 --> 00:14:52.120
+we do not need to interact with the operating
+
+00:14:56.040 --> 00:14:56.540
+[Speaker 1]: Yeah. Emacs does not really hold anything.
+
+00:14:59.160 --> 00:14:59.580
+[Speaker 0]: system. That was the question.
+
+00:15:01.920 --> 00:15:02.220
+[Speaker 1]: Okay. I was really hoping it does,
+
+00:15:02.760 --> 00:15:03.260
+but yeah, unfortunately,
+
+00:15:05.640 --> 00:15:06.140
+because nothing much can be done on Emacs.
+
+00:15:08.800 --> 00:15:08.940
+[Speaker 0]: Okay. it's not Probably a lot faster if it's
+
+00:15:10.580 --> 00:15:10.800
+just holding it and when it needs more,
+
+00:15:12.380 --> 00:15:12.880
+then just get more from the OS.
+
+00:15:14.220 --> 00:15:14.620
+[Speaker 1]: There are certain caveats,
+
+00:15:16.720 --> 00:15:17.220
+for example, there's something called image
+
+00:15:20.560 --> 00:15:20.740
+cache. And because Emacs stores images in
+
+00:15:23.720 --> 00:15:23.800
+uncompressed format, it can occupy quite a
+
+00:15:25.020 --> 00:15:25.320
+lot of memory. In particular,
+
+00:15:26.520 --> 00:15:27.020
+when you will like view PDFs,
+
+00:15:30.140 --> 00:15:30.640
+like you open 10, like 20 PDFs in 1 session,
+
+00:15:33.460 --> 00:15:33.820
+you may have like some image cache blowing
+
+00:15:36.720 --> 00:15:37.220
+up, But that's not common for people.
+
+00:15:41.420 --> 00:15:41.920
+[Speaker 0]: So, guess we are on our time exactly.
+
+00:15:43.580 --> 00:15:44.080
+So in the next
+
+00:15:46.680 --> 00:15:47.180
+[Speaker 1]: I think I was not exactly accurate.
+
+00:15:49.200 --> 00:15:49.640
+This 1 command, which is,
+
+00:15:53.500 --> 00:15:54.000
+I think, Nemax 30, is called a malloc trim.
+
+00:15:57.520 --> 00:15:58.020
+A max malloc trim. It's interactive.
+
+00:16:04.080 --> 00:16:04.580
+So that can help to release some memory.
+
+00:16:08.200 --> 00:16:08.700
+I think the way it works is like forces OS to
+
+00:16:12.040 --> 00:16:12.540
+make use of the released memory.
+
+00:16:14.960 --> 00:16:15.460
+[Speaker 0]: Okay. That would be like,
+
+00:16:18.420 --> 00:16:18.640
+we are by the way, switch back to the next
+
+00:16:21.420 --> 00:16:21.680
+talk. But
+
+00:16:24.220 --> 00:16:24.400
+[Speaker 1]: so basically what happens here is that OS may
+
+00:16:27.440 --> 00:16:27.720
+not release like, even Emacs says,
+
+00:16:28.740 --> 00:16:29.240
+okay, this memory is free,
+
+00:16:30.060 --> 00:16:30.560
+depending on the implementation,
+
+00:16:32.760 --> 00:16:32.980
+I might think, okay, but I still hold that
+
+00:16:34.860 --> 00:16:35.080
+memory associated with Emacs just in case
+
+00:16:35.800 --> 00:16:36.180
+Emacs needs more memories,
+
+00:16:38.940 --> 00:16:39.180
+and I can immediately put the data there
+
+00:16:41.420 --> 00:16:41.920
+without like more arrangement to allocate
+
+00:16:45.480 --> 00:16:45.980
+more. And this analog stream basically forces
+
+00:16:48.740 --> 00:16:49.240
+the OS to release it, like no matter what.
+
+00:16:52.360 --> 00:16:52.860
+[Speaker 0]: Because most people, when they are using
+
+00:16:54.320 --> 00:16:54.620
+Emacs, I have the feeling they are only using
+
+00:16:56.160 --> 00:16:56.480
+Emacs. So it would be kind of interesting if
+
+00:16:57.880 --> 00:16:58.140
+you just take like, I don't know,
+
+00:17:00.060 --> 00:17:00.560
+2 gigabytes or something of memory and Emacs
+
+00:17:02.900 --> 00:17:03.160
+like does what it wants on that and the OS
+
+00:17:04.079 --> 00:17:04.540
+cannot really take it back.
+
+00:17:05.920 --> 00:17:06.040
+This was my idea when I
+
+00:17:08.000 --> 00:17:08.319
+[Speaker 1]: was So when you see 2 gigabytes in OS,
+
+00:17:10.359 --> 00:17:10.859
+it doesn't mean that OS cannot take it back.
+
+00:17:13.859 --> 00:17:14.359
+It may still like allocate certain portion,
+
+00:17:15.640 --> 00:17:16.140
+even technically free,
+
+00:17:20.940 --> 00:17:21.319
+but just for future. So this is where Malloc
+
+00:17:22.339 --> 00:17:22.579
+Dream works. It's like,
+
+00:17:25.319 --> 00:17:25.540
+it says, yes, OS, I really not going to hold
+
+00:17:26.500 --> 00:17:27.000
+this for this free memory.
+
+00:17:31.700 --> 00:17:31.860
+For sure. If you try this MX Malloc Gene,
+
+00:17:33.960 --> 00:17:34.140
+you will see like a few times to hundreds of
+
+00:17:35.200 --> 00:17:35.700
+megabytes of read immediately.
+
+00:17:38.560 --> 00:17:39.060
+[Speaker 0]: Have a look when I have the time.
+
+00:17:41.480 --> 00:17:41.600
+[Speaker 1]: I
+
+00:17:43.260 --> 00:17:43.680
+[Speaker 0]: guess if nobody has any questions,
+
+00:17:45.660 --> 00:17:46.160
+I guess on the pad, there was Nothing else.
+
+00:17:47.900 --> 00:17:48.340
+I guess we can just close it.
+
+00:17:49.140 --> 00:17:49.600
+Thanks for the discussion.
+
+00:17:50.640 --> 00:17:51.140
+Thanks for answering the questions.
+
+00:17:56.020 --> 00:17:56.520
+[Speaker 1]: Thank you for the great conference.
+
+00:17:59.340 --> 00:17:59.840
+And yeah, for your volunteer work.
+
+00:18:02.230 --> 00:18:02.241
+And yeah, for quietly panicking in the
+
+00:18:02.262 --> 00:18:02.273
+background, right? Yeah,
+
+00:18:02.337 --> 00:18:02.348
+I mean... You have to be quiet,
+
+00:18:02.560 --> 00:18:03.060
+you're panicking in the background.
diff --git a/2023/captions/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--main.vtt b/2023/captions/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--main.vtt
new file mode 100644
index 00000000..d1e2a5f6
--- /dev/null
+++ b/2023/captions/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--main.vtt
@@ -0,0 +1,1780 @@
+WEBVTT captioned by sachac
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:04.639
+Hello everyone, my name is Ihor Radchenko,
+
+00:00:04.640 --> 00:00:07.599
+and you may know me from Org Mailing List.
+
+00:00:07.600 --> 00:00:09.799
+However, today I'm not going to talk about Org Mode.
+
+00:00:09.800 --> 00:00:11.919
+Today I'm going to talk about
+
+00:00:11.920 --> 00:00:14.959
+Emacs performance and how it's affected
+
+00:00:14.960 --> 00:00:19.039
+by its memory management code.
+
+00:00:19.040 --> 00:00:21.639
+First, I will introduce the basic concepts
+
+00:00:21.640 --> 00:00:26.439
+of Emacs memory management and what garbage collection is.
+
+00:00:26.440 --> 00:00:30.559
+Then I will show you user statistics
+
+00:00:30.560 --> 00:00:34.959
+collected from volunteer users over the last half year
+
+00:00:34.960 --> 00:00:39.319
+and I will end with some guidelines
+
+00:00:39.320 --> 00:00:44.719
+on how to tweak Emacs garbage collection customizations
+
+00:00:44.720 --> 00:00:47.479
+to optimize Emacs performance
+
+00:00:47.480 --> 00:00:51.079
+and when it's necessary or not to do.
+
+NOTE About garbage collection in Emacs
+
+00:00:51.080 --> 00:00:54.519
+Let's begin. What is garbage collection?
+
+00:00:54.520 --> 00:00:56.519
+To understand what is garbage collection,
+
+00:00:56.520 --> 00:00:59.039
+we need to realize that anything you do in Emacs
+
+00:00:59.040 --> 00:01:02.119
+is some kind of command. Any command is most likely
+
+00:01:02.120 --> 00:01:05.839
+running some Elisp code. Every time you run Elisp code,
+
+00:01:05.840 --> 00:01:09.239
+you most likely need to locate certain memory in RAM.
+
+00:01:09.240 --> 00:01:12.879
+Some of this memory is retained for a long time
+
+00:01:12.880 --> 00:01:15.559
+and some of this memory is transient.
+
+00:01:15.560 --> 00:01:19.119
+Of course, Emacs has to clear this transient memory
+
+00:01:19.120 --> 00:01:21.439
+from time to time, to not occupy all the possible RAM
+
+00:01:21.440 --> 00:01:21.447
+in the computer. In this small example,
+
+00:01:21.448 --> 00:01:28.639
+we have one global variable
+
+00:01:28.640 --> 00:01:31.279
+that is assigned a value,
+
+00:01:31.280 --> 00:01:33.079
+but when assigning the value,
+
+00:01:33.080 --> 00:01:35.679
+we first allocate a temporary variable
+
+00:01:35.680 --> 00:01:37.119
+and then a temporary list
+
+00:01:37.120 --> 00:01:40.079
+and only retain some part of this list
+
+00:01:40.080 --> 00:01:42.079
+in this global variable.
+
+00:01:42.080 --> 00:01:44.799
+In terms of memory graph
+
+00:01:44.800 --> 00:01:50.359
+we can represent this as two variable slots,
+
+00:01:50.360 --> 00:01:53.159
+one transient, one permanent,
+
+00:01:53.160 --> 00:01:56.199
+and then a list of three cons cells,
+
+00:01:56.200 --> 00:02:01.959
+part of which is retained as a global variable
+
+00:02:01.960 --> 00:02:04.999
+but part of it which is a temporary variable symbol.
+
+00:02:05.000 --> 00:02:07.679
+The first term of the list is not used
+
+00:02:07.680 --> 00:02:09.759
+and it might be cleared at some point.
+
+NOTE Garbage collection in Emacs
+
+00:02:09.760 --> 00:02:12.239
+So that's what Emacs does.
+
+00:02:12.240 --> 00:02:15.919
+Every now and then, Emacs goes through all the memory
+
+00:02:15.920 --> 00:02:19.119
+and identifies which part of the memory are not used
+
+00:02:19.120 --> 00:02:23.759
+and then clear them so that it can free up the RAM.
+
+00:02:23.760 --> 00:02:25.919
+This process is called garbage collection
+
+00:02:25.920 --> 00:02:28.919
+and Emacs uses a very simple and old algorithm
+
+00:02:28.920 --> 00:02:30.559
+which is called Mark & Sweep.
+
+00:02:30.560 --> 00:02:33.759
+So doing this mark and sweep process
+
+00:02:33.760 --> 00:02:34.879
+is basically two stages.
+
+00:02:34.880 --> 00:02:40.039
+First, Emacs scans all the memory that is allocated
+
+00:02:40.040 --> 00:02:42.759
+and then identifies which memory is still in use
+
+00:02:42.760 --> 00:02:45.519
+which is linked to some variables, for example,
+
+00:02:45.520 --> 00:02:47.599
+and which memory is not used anymore
+
+00:02:47.600 --> 00:02:49.559
+even though it was allocated in the past.
+
+00:02:49.560 --> 00:02:52.999
+The second stage [??] whenever a memory is not,
+
+00:02:53.000 --> 00:02:59.319
+that is not allocated. During the process
+
+00:02:59.320 --> 00:03:00.759
+Emacs cannot do anything now.
+
+00:03:00.760 --> 00:03:04.159
+So basically, every time Emacs scans the memory,
+
+00:03:04.160 --> 00:03:07.199
+it freezes up and doesn't respond to anything,
+
+00:03:07.200 --> 00:03:10.959
+and if it takes too much time so that users can notice it,
+
+00:03:10.960 --> 00:03:13.399
+then of course Emacs is not responsive at all,
+
+00:03:13.400 --> 00:03:19.439
+and if this garbage collection is triggered too frequently,
+
+00:03:19.440 --> 00:03:22.399
+then it's not just not responsive every now and then.
+
+00:03:22.400 --> 00:03:24.679
+It's also not responsive all the time,
+
+00:03:24.680 --> 00:03:26.079
+almost all the time,
+
+00:03:26.080 --> 00:03:27.679
+so it cannot even normally type or stuff
+
+00:03:27.680 --> 00:03:32.439
+or do some normal commands.
+
+00:03:32.440 --> 00:03:36.719
+This mark and sweep algorithm is taking longer
+
+00:03:36.720 --> 00:03:40.199
+the more memory Emacs uses. So basically,
+
+00:03:40.200 --> 00:03:44.439
+the more buffers you open, the more packages you load,
+
+00:03:44.440 --> 00:03:48.319
+the more complex commands you run, the more memory is used,
+
+00:03:48.320 --> 00:03:52.279
+and basically, the longer Emacs takes
+
+00:03:52.280 --> 00:03:57.919
+to perform a single garbage collection.
+
+00:03:57.920 --> 00:04:02.279
+Of course, Emacs being Emacs
+
+00:04:02.280 --> 00:04:06.039
+this garbage collection can be tweaked.
+
+00:04:06.040 --> 00:04:08.279
+In particular users can tweak
+
+00:04:08.280 --> 00:04:10.639
+how frequently Emacs does garbage collection
+
+00:04:10.640 --> 00:04:13.879
+using two basic variables: `gc-cons-threshold`
+
+00:04:13.880 --> 00:04:15.519
+and `gc-cons-percentage`.
+
+00:04:15.520 --> 00:04:21.599
+`gc-cons-threshold` is the raw number of kilobytes
+
+00:04:21.600 --> 00:04:22.479
+Emacs needs to allocate
+
+00:04:22.480 --> 00:04:25.959
+before triggering another garbage collection,
+
+00:04:25.960 --> 00:04:27.799
+and the `gc-cons-percentage` is similar,
+
+00:04:27.800 --> 00:04:30.399
+but it's defined in terms of fraction
+
+00:04:30.400 --> 00:04:34.759
+of already-allocated memory.
+
+00:04:34.760 --> 00:04:38.239
+If you follow various Emacs forums,
+
+00:04:38.240 --> 00:04:41.959
+you may be familiar with people complaining about
+
+00:04:41.960 --> 00:04:46.479
+garbage collection. There are many many suggestions
+
+00:04:46.480 --> 00:04:48.039
+about what to do with it.
+
+00:04:48.040 --> 00:04:54.079
+Most frequently, you see `gc-cons-threshold`
+
+00:04:54.080 --> 00:04:56.879
+recommended to be increased,
+
+00:04:56.880 --> 00:05:01.439
+and a number of pre-packaged Emacs distributions
+
+00:05:01.440 --> 00:05:04.319
+like Doom Emacs do increase it.
+
+00:05:04.320 --> 00:05:07.279
+I have seen suggestions which are actually horrible
+
+00:05:07.280 --> 00:05:10.479
+to disable garbage collection temporarily
+
+00:05:10.480 --> 00:05:14.359
+or for a long time.
+
+00:05:14.360 --> 00:05:17.519
+Which is nice... You can see it quite frequently,
+
+00:05:17.520 --> 00:05:19.399
+which indicates there might be some problem.
+
+00:05:19.400 --> 00:05:23.959
+However, every time one user poses about this problem,
+
+00:05:23.960 --> 00:05:26.879
+it's just one data point and it doesn't mean
+
+00:05:26.880 --> 00:05:28.879
+that everyone actually suffers from it.
+
+00:05:28.880 --> 00:05:33.719
+It doesn't mean that everyone should do it.
+
+00:05:33.720 --> 00:05:35.919
+So in order to understand if this garbage collection
+
+00:05:35.920 --> 00:05:39.959
+is really a problem which is a common problem
+
+00:05:39.960 --> 00:05:44.919
+we do need some kind of statistics
+
+00:05:44.920 --> 00:05:46.919
+and only using the actual statistics
+
+00:05:46.920 --> 00:05:52.759
+we can understand if it should be recommended for everyone
+
+00:05:52.760 --> 00:05:54.999
+to tweak the defaults or like whether
+
+00:05:55.000 --> 00:05:57.159
+it should be recommended for certain users
+
+00:05:57.160 --> 00:05:59.479
+or maybe it should be asked Emacs devs
+
+00:05:59.480 --> 00:06:01.559
+to do something about the defaults.
+
+00:06:01.560 --> 00:06:07.959
+And what I did some time ago is exactly this.
+
+00:06:07.960 --> 00:06:09.959
+I tried to collect the user statistics.
+
+00:06:09.960 --> 00:06:14.519
+So I wrote a small package on Elp
+
+00:06:14.520 --> 00:06:18.159
+and some users installed this package
+
+00:06:18.160 --> 00:06:22.119
+and then reported back these statistics
+
+00:06:22.120 --> 00:06:24.279
+of the garbage collection for their particular use.
+
+00:06:24.280 --> 00:06:30.799
+By now we have obtained 129 user submissions
+
+00:06:30.800 --> 00:06:34.039
+with over 1 million GC records in there.
+
+00:06:34.040 --> 00:06:38.119
+So like some of these submissions
+
+00:06:38.120 --> 00:06:43.159
+used default GC settings without any customizations.
+
+00:06:43.160 --> 00:06:46.039
+Some used increased GC cost threshold
+
+00:06:46.040 --> 00:06:47.799
+and GC cost percentage.
+
+00:06:47.800 --> 00:06:53.319
+So using this data we can try to draw
+
+00:06:53.320 --> 00:06:56.879
+some reliable conclusions on what should be done
+
+00:06:56.880 --> 00:06:59.919
+and whether should anything be done about garbage collection
+
+00:06:59.920 --> 00:07:02.639
+on Emacs dev level or at least on user level.
+
+00:07:02.640 --> 00:07:05.639
+Of course we need to keep in mind
+
+00:07:05.640 --> 00:07:07.279
+that there's some kind of bias
+
+00:07:07.280 --> 00:07:08.999
+because it's more likely
+
+00:07:09.000 --> 00:07:11.719
+that users already have problems with GC
+
+00:07:11.720 --> 00:07:13.239
+or they think they have problems with GC
+
+00:07:13.240 --> 00:07:15.919
+will report and submit the data.
+
+00:07:15.920 --> 00:07:19.999
+But anyway having s statistics is much more useful
+
+00:07:20.000 --> 00:07:22.079
+than just having anecdotal evidences
+
+00:07:22.080 --> 00:07:25.519
+from one or other reddit posts.
+
+00:07:25.520 --> 00:07:28.759
+And just one thing I will do
+
+00:07:28.760 --> 00:07:30.879
+during the rest of my presentation
+
+00:07:30.880 --> 00:07:32.839
+is that for all the statistics
+
+00:07:32.840 --> 00:07:35.679
+I will normalize user data
+
+00:07:35.680 --> 00:07:37.879
+so that every user contributes equally.
+
+00:07:37.880 --> 00:07:40.279
+For example if one user submits like
+
+00:07:40.280 --> 00:07:43.119
+100 hours Emacs uptime statistics
+
+00:07:43.120 --> 00:07:46.279
+and other users submit one hour Emacs uptime
+
+00:07:46.280 --> 00:07:52.879
+then I will anyway make it so that they contribute equally.
+
+00:07:52.880 --> 00:07:56.359
+Let's start from one of the most obvious things
+
+00:07:56.360 --> 00:07:57.679
+we can look into is
+
+00:07:57.680 --> 00:08:00.599
+which is the time it takes for garbage collection
+
+00:08:00.600 --> 00:08:05.879
+to single garbage collection process.
+
+00:08:05.880 --> 00:08:11.839
+Here you see frequency distribution of GC duration
+
+00:08:11.840 --> 00:08:14.999
+for all the 129 users we got
+
+00:08:15.000 --> 00:08:22.279
+and you can see that most of the garbage collections
+
+00:08:22.280 --> 00:08:26.999
+are done quite quickly in less than 0.1 second
+
+00:08:27.000 --> 00:08:32.199
+and less than 0.1 second is usually just not noticeable.
+
+00:08:32.200 --> 00:08:34.519
+So even though there is garbage collection
+
+00:08:34.520 --> 00:08:39.639
+it will not interrupt the work in Emacs.
+
+00:08:39.640 --> 00:08:43.279
+However there is a fraction of users
+
+00:08:43.280 --> 00:08:45.279
+who experience garbage collection
+
+00:08:45.280 --> 00:08:48.399
+it takes like 0.2, 0.3 or even half a second
+
+00:08:48.400 --> 00:08:50.399
+which will be quite noticeable.
+
+00:08:50.400 --> 00:08:55.279
+For the purposes of this study
+
+00:08:55.280 --> 00:08:59.399
+I will consider that anything that is less than 0.1 second
+
+00:08:59.400 --> 00:09:02.639
+which is insignificant so like you will not notice it
+
+00:09:02.640 --> 00:09:04.159
+and it's like obviously
+
+00:09:04.160 --> 00:09:07.479
+all the Emacs usage will be just normal.
+
+00:09:07.480 --> 00:09:11.639
+But if it's more than 0.1 or 0.2 seconds
+
+00:09:11.640 --> 00:09:13.799
+then it will be very noticeable
+
+00:09:13.800 --> 00:09:16.079
+and you will see that Emacs hang for a little while
+
+00:09:16.080 --> 00:09:21.319
+or not so little while. In terms of numbers
+
+00:09:21.320 --> 00:09:26.239
+it's better to plot the statistics not as a distribution
+
+00:09:26.240 --> 00:09:28.199
+but as a cumulative distribution.
+
+00:09:28.200 --> 00:09:31.559
+So like at every point of this graph
+
+00:09:31.560 --> 00:09:37.159
+you'll see like for example here 0.4 seconds
+
+00:09:37.160 --> 00:09:42.279
+you have this percent of like almost 90% of users
+
+00:09:42.280 --> 00:09:49.279
+have no more than 0.4 gc duration.
+
+00:09:49.280 --> 00:09:53.239
+So like we can look here if we take one
+
+00:09:53.240 --> 00:09:56.879
+gc critical gc duration which is 0.1 second
+
+00:09:56.880 --> 00:10:00.279
+0.1 second and look at how many users have
+
+00:10:00.280 --> 00:10:02.439
+it so we have 56% which is like
+
+00:10:02.440 --> 00:10:09.439
+44% users have less than 0.1 second gc duration
+
+00:10:09.440 --> 00:10:12.839
+and the rest 56% have more than 0.1 second.
+
+00:10:12.840 --> 00:10:16.279
+So you can see like more than half of users
+
+00:10:16.280 --> 00:10:20.559
+actually have noticeable gc delay
+
+00:10:20.560 --> 00:10:22.999
+so the Emacs freezes for some noticeable time
+
+00:10:23.000 --> 00:10:27.479
+and a quarter of users actually have very noticeable
+
+00:10:27.480 --> 00:10:31.799
+so like Emacs freezes such that you see an actual delay
+
+00:10:31.800 --> 00:10:36.879
+that Emacs actually has
+
+00:10:36.880 --> 00:10:44.079
+which is quite significant and important point.
+
+00:10:44.080 --> 00:10:47.719
+But apart from the duration of each individual gc
+
+00:10:47.720 --> 00:10:49.839
+it is important to see how frequent it is
+
+00:10:49.840 --> 00:10:52.879
+because even if you do notice a delay
+
+00:10:52.880 --> 00:10:54.959
+even a few seconds delay
+
+00:10:54.960 --> 00:10:56.999
+it doesn't matter if it happens once
+
+00:10:57.000 --> 00:10:59.199
+during the whole Emacs session.
+
+00:10:59.200 --> 00:11:05.039
+So if you look into frequency distribution again here
+
+00:11:05.040 --> 00:11:13.639
+I plot time between subsequent garbage collections
+
+00:11:13.640 --> 00:11:17.959
+versus how frequent it is and we have very clear trend
+
+00:11:17.960 --> 00:11:21.799
+that most of the garbage collections are quite frequent
+
+00:11:21.800 --> 00:11:25.159
+like we talk about every few seconds a few tens of seconds.
+
+00:11:25.160 --> 00:11:30.039
+There's a few outliers which are at very round numbers
+
+00:11:30.040 --> 00:11:35.839
+like 60 seconds, 120 seconds, 300 seconds.
+
+00:11:35.840 --> 00:11:37.879
+These are usually timers so like
+
+00:11:37.880 --> 00:11:40.319
+you have something running on timer
+
+00:11:40.320 --> 00:11:43.599
+and then it is complex command
+
+00:11:43.600 --> 00:11:45.079
+and it triggers garbage collection
+
+00:11:45.080 --> 00:11:48.079
+but it's not the majority.
+
+00:11:48.080 --> 00:11:51.279
+Again to run the numbers
+
+00:11:51.280 --> 00:11:53.679
+it's better to look into cumulative distribution
+
+00:11:53.680 --> 00:11:56.039
+and see that 50% of garbage collections
+
+00:11:56.040 --> 00:11:58.279
+are basically less than 10 seconds apart.
+
+00:11:58.280 --> 00:12:02.359
+And we can combine it with previous data
+
+00:12:02.360 --> 00:12:07.479
+and we look into whatever garbage collection
+
+00:12:07.480 --> 00:12:09.959
+takes less than 10 seconds from each other
+
+00:12:09.960 --> 00:12:13.119
+and also takes more than say 0.1 seconds.
+
+00:12:13.120 --> 00:12:15.319
+So and then we see that
+
+00:12:15.320 --> 00:12:17.639
+one quarter of all garbage collections
+
+00:12:17.640 --> 00:12:21.039
+are just noticeable and also frequent
+
+00:12:21.040 --> 00:12:23.679
+and 9% are not like
+
+00:12:23.680 --> 00:12:27.199
+more than 0.2% very noticeable and also frequent.
+
+00:12:27.200 --> 00:12:30.079
+So basically it constitutes Emacs freezing.
+
+00:12:30.080 --> 00:12:33.559
+So 9% of all the garbage collection Emacs freezing.
+
+00:12:33.560 --> 00:12:37.319
+Of course if you remember there is a bias
+
+00:12:37.320 --> 00:12:40.519
+but 9% is quite significant number.
+
+00:12:40.520 --> 00:12:44.319
+So garbage collection can really slow down things
+
+00:12:44.320 --> 00:12:48.239
+not for everyone but for significant fraction of users.
+
+00:12:48.240 --> 00:12:52.159
+Another thing I'd like to look into
+
+00:12:52.160 --> 00:12:55.399
+is what I call agglomerated GCs.
+
+00:12:55.400 --> 00:12:57.959
+What I mean by agglomerated is
+
+00:12:57.960 --> 00:13:00.359
+when you have one garbage collection
+
+00:13:00.360 --> 00:13:02.999
+and then another garbage immediately after it.
+
+00:13:03.000 --> 00:13:05.559
+So in terms of numbers I took
+
+00:13:05.560 --> 00:13:08.719
+every subsequent garbage collection
+
+00:13:08.720 --> 00:13:10.399
+which is either immediately after
+
+00:13:10.400 --> 00:13:13.039
+or no more than one second after each.
+
+00:13:13.040 --> 00:13:16.159
+So from point of view of users is like
+
+00:13:16.160 --> 00:13:19.999
+multiple garbage collection they add up together
+
+00:13:20.000 --> 00:13:22.999
+into one giant garbage collection.
+
+00:13:23.000 --> 00:13:25.839
+And if you look into numbers
+
+00:13:25.840 --> 00:13:29.559
+of how many agglomerated garbage collections there are
+
+00:13:29.560 --> 00:13:32.119
+you can see even numbers over 100.
+
+00:13:32.120 --> 00:13:35.479
+So 100 garbage collection going one after another.
+
+00:13:35.480 --> 00:13:39.159
+Even if you think about each garbage collection
+
+00:13:39.160 --> 00:13:42.719
+taking 0.1 second we look into 100 of them
+
+00:13:42.720 --> 00:13:44.639
+it's total 10 seconds.
+
+00:13:44.640 --> 00:13:46.839
+It's like Emacs hanging forever
+
+00:13:46.840 --> 00:13:53.519
+or like a significant number is also 10.
+
+00:13:53.520 --> 00:13:55.999
+So again this would be very annoying to meet such thing.
+
+00:13:56.000 --> 00:13:57.879
+How frequently does it happen?
+
+00:13:57.880 --> 00:14:00.279
+Again we can plot cumulative distribution
+
+00:14:00.280 --> 00:14:03.879
+and we see that 20 percent like 19 percent
+
+00:14:03.880 --> 00:14:07.199
+of all the garbage collection are at least two together
+
+00:14:07.200 --> 00:14:13.679
+and 8 percent like more than 10. So like you think about oh
+
+00:14:13.680 --> 00:14:15.639
+each garbage collection is not taking much time
+
+00:14:15.640 --> 00:14:24.479
+but when you have 10 of them yeah that becomes a problem.
+
+00:14:24.480 --> 00:14:29.919
+Another thing is to answer a question
+
+00:14:29.920 --> 00:14:32.959
+that some people complain about is that
+
+00:14:32.960 --> 00:14:35.799
+longer you use Emacs the slower Emacs become.
+
+00:14:35.800 --> 00:14:43.039
+Of course it may be caused by garbage collection
+
+00:14:43.040 --> 00:14:48.519
+and I wanted to look into how garbage collection time
+
+00:14:48.520 --> 00:14:49.679
+and other statistics,
+
+00:14:49.680 --> 00:14:53.199
+other parameters are evolving over time.
+
+00:14:53.200 --> 00:14:58.559
+And what I can see here is a cumulative distribution
+
+00:14:58.560 --> 00:15:03.719
+of GC duration for like first 10 minutes of Emacs uptime
+
+00:15:03.720 --> 00:15:06.479
+first 100 minutes first 1000 minutes.
+
+00:15:06.480 --> 00:15:10.199
+And if you look closer then you see
+
+00:15:10.200 --> 00:15:14.519
+that each individual garbage collection on average
+
+00:15:14.520 --> 00:15:18.959
+takes longer as you use Emacs longer.
+
+00:15:18.960 --> 00:15:24.039
+However this longer is not much it's like maybe 10 percent
+
+00:15:24.040 --> 00:15:29.479
+like basically garbage collection gets like
+
+00:15:29.480 --> 00:15:34.719
+slow Emacs down more as you use Emacs more but not much.
+
+00:15:34.720 --> 00:15:38.359
+So basically if you do you see Emacs
+
+00:15:38.360 --> 00:15:40.639
+being slower and slower over time
+
+00:15:40.640 --> 00:15:43.159
+it's probably not really garbage collection
+
+00:15:43.160 --> 00:15:45.839
+because it doesn't change too much.
+
+00:15:45.840 --> 00:15:48.119
+And if you look into time
+
+00:15:48.120 --> 00:15:50.839
+between individual garbage collections
+
+00:15:50.840 --> 00:15:53.719
+and you see that the time actually increases
+
+00:15:53.720 --> 00:15:56.719
+as you use Emacs longer which makes sense
+
+00:15:56.720 --> 00:15:58.839
+because initially like first few minutes
+
+00:15:58.840 --> 00:16:01.479
+you have all kind of packages loading
+
+00:16:01.480 --> 00:16:04.239
+like all the port loading and then later
+
+00:16:04.240 --> 00:16:07.239
+everything is loaded and things become more stable.
+
+00:16:07.240 --> 00:16:12.879
+So the conclusion on this part is that
+
+00:16:12.880 --> 00:16:16.399
+if Emacs becomes slower in a long session
+
+00:16:16.400 --> 00:16:18.479
+it's probably not caused by garbage collection.
+
+00:16:18.480 --> 00:16:23.679
+And one word of warning of course is that
+
+00:16:23.680 --> 00:16:27.919
+it's all nice and all when I present the statistics
+
+00:16:27.920 --> 00:16:29.279
+but it's only an average
+
+00:16:29.280 --> 00:16:34.079
+and if you are an actual user like here is one example
+
+00:16:34.080 --> 00:16:37.159
+which shows a total garbage collection time
+
+00:16:37.160 --> 00:16:40.119
+like accumulated together over Emacs uptime
+
+00:16:40.120 --> 00:16:43.199
+and you see different lines
+
+00:16:43.200 --> 00:16:45.559
+which correspond to different sessions of one user
+
+00:16:45.560 --> 00:16:48.679
+and you see they are wildly different
+
+00:16:48.680 --> 00:16:51.439
+like one time there is almost no garbage collection
+
+00:16:51.440 --> 00:16:54.679
+another time you see garbage collection
+
+00:16:54.680 --> 00:16:56.999
+because probably Emacs is used more early
+
+00:16:57.000 --> 00:16:59.599
+or like different pattern of usage
+
+00:16:59.600 --> 00:17:03.159
+and even during a single Emacs session
+
+00:17:03.160 --> 00:17:04.599
+you see a different slope
+
+00:17:04.600 --> 00:17:06.439
+of this curve which means that
+
+00:17:06.440 --> 00:17:09.279
+sometimes garbage collection is infrequent
+
+00:17:09.280 --> 00:17:11.479
+and sometimes it's much more frequent
+
+00:17:11.480 --> 00:17:14.479
+so it's probably much more noticeable one time
+
+00:17:14.480 --> 00:17:15.639
+and less noticeable other time.
+
+00:17:15.640 --> 00:17:19.719
+So if you think about these statistics of course
+
+00:17:19.720 --> 00:17:23.359
+they only represent an average usage
+
+00:17:23.360 --> 00:17:26.359
+but sometimes it can get worse sometimes it can get better.
+
+00:17:26.360 --> 00:17:33.759
+The last parameter I'd like to talk about is
+
+00:17:33.760 --> 00:17:35.799
+garbage collection during Emacs init.
+
+00:17:35.800 --> 00:17:40.439
+Basically if you think about what happens during Emacs init
+
+00:17:40.440 --> 00:17:41.919
+like when Emacs just starting up
+
+00:17:41.920 --> 00:17:44.479
+then whatever garbage collection
+
+00:17:44.480 --> 00:17:46.759
+there it's one or it's several times
+
+00:17:46.760 --> 00:17:51.239
+it all contributes to Emacs taking longer to start.
+
+00:17:51.240 --> 00:17:56.559
+And again we can look into the statistic
+
+00:17:56.560 --> 00:18:01.159
+and see what is the total GC duration after Emacs init
+
+00:18:01.160 --> 00:18:06.159
+and we see that 50% of all the submissions
+
+00:18:06.160 --> 00:18:10.279
+garbage collection adds up more than one second
+
+00:18:10.280 --> 00:18:14.919
+to Emacs init time and for 20% of users
+
+00:18:14.920 --> 00:18:17.079
+it's extra three seconds Emacs start time
+
+00:18:17.080 --> 00:18:18.479
+which is very significant
+
+00:18:18.480 --> 00:18:21.479
+especially for people who are used to Vim
+
+00:18:21.480 --> 00:18:23.919
+which can start in like a fraction of a second
+
+00:18:23.920 --> 00:18:26.239
+and here it just does garbage collection
+
+00:18:26.240 --> 00:18:27.439
+because garbage collection is not
+
+00:18:27.440 --> 00:18:29.239
+everything Emacs does during startup
+
+00:18:29.240 --> 00:18:31.999
+adds up more to the load.
+
+00:18:32.000 --> 00:18:36.119
+Okay that's all nice and all
+
+00:18:36.120 --> 00:18:38.679
+but what can we do about these statistics
+
+00:18:38.680 --> 00:18:40.159
+can we draw any conclusions
+
+00:18:40.160 --> 00:18:43.239
+and the answer is of course
+
+00:18:43.240 --> 00:18:46.079
+like the most important conclusion here is that
+
+00:18:46.080 --> 00:18:49.439
+yes garbage collection can slow down Emacs
+
+00:18:49.440 --> 00:18:52.679
+at least for some people and what to do about it
+
+00:18:52.680 --> 00:18:55.319
+there are two variables which you can tweak
+
+00:18:55.320 --> 00:18:58.719
+it's because gcconce threshold gcconce percentage
+
+00:18:58.720 --> 00:19:03.159
+and having the statistics I can at least look a little bit
+
+00:19:03.160 --> 00:19:08.879
+into what is the effect of increasing these variables
+
+00:19:08.880 --> 00:19:12.439
+like most people just increase gcconce threshold
+
+00:19:12.440 --> 00:19:16.959
+and like all the submissions people did increase
+
+00:19:16.960 --> 00:19:19.919
+and doesn't make much sense to decrease it
+
+00:19:19.920 --> 00:19:21.079
+like to make things worse
+
+00:19:21.080 --> 00:19:27.639
+of course for these statistics
+
+00:19:27.640 --> 00:19:31.559
+the exact values of this increased thresholds
+
+00:19:31.560 --> 00:19:33.839
+are not always the same
+
+00:19:33.840 --> 00:19:36.479
+but at least we can look into some trends
+
+00:19:36.480 --> 00:19:44.759
+so first and obvious thing we can observe
+
+00:19:44.760 --> 00:19:46.759
+is when we compare
+
+00:19:46.760 --> 00:19:50.399
+the standard gc settings standard thresholds
+
+00:19:50.400 --> 00:19:53.999
+and increased thresholds for time between
+
+00:19:54.000 --> 00:19:57.479
+subsequent gcs and as one may expect
+
+00:19:57.480 --> 00:19:59.559
+if you increase the threshold
+
+00:19:59.560 --> 00:20:02.679
+Emacs will do garbage collection less frequently
+
+00:20:02.680 --> 00:20:05.279
+so the spacing between garbage collection increases
+
+00:20:05.280 --> 00:20:07.599
+okay the only thing is that
+
+00:20:07.600 --> 00:20:10.719
+if garbage collection is less frequent
+
+00:20:10.720 --> 00:20:14.079
+then each individual garbage collection becomes longer
+
+00:20:14.080 --> 00:20:18.159
+so if you think about increasing
+
+00:20:18.160 --> 00:20:22.239
+garbage collection thresholds be prepared
+
+00:20:22.240 --> 00:20:26.519
+that in each individual time Emacs freezes will take longer
+
+00:20:26.520 --> 00:20:31.599
+this is one caveat when we talk about
+
+00:20:31.600 --> 00:20:34.079
+this agglomerated gcs which are one after other
+
+00:20:34.080 --> 00:20:36.759
+like if you increase the threshold sufficiently
+
+00:20:36.760 --> 00:20:42.319
+then whatever happened that garbage collections
+
+00:20:42.320 --> 00:20:44.399
+were like done one after other
+
+00:20:44.400 --> 00:20:47.599
+we can now make it so that they are actually separated
+
+00:20:47.600 --> 00:20:51.559
+so like you don't see one giant freeze caused by
+
+00:20:51.560 --> 00:20:52.919
+like 10 gcs in a row
+
+00:20:52.920 --> 00:20:55.759
+instead you can make it so that they are separated
+
+00:20:55.760 --> 00:20:59.079
+and in statistics it's very clear
+
+00:20:59.080 --> 00:21:02.959
+that the number of agglomerated garbage collections
+
+00:21:02.960 --> 00:21:06.919
+decreases dramatically when you increase the thresholds
+
+00:21:06.920 --> 00:21:11.759
+it's particularly evident when we look into startup time
+
+00:21:11.760 --> 00:21:17.279
+if you look at gc duration during Emacs startup
+
+00:21:17.280 --> 00:21:19.159
+and if we look into what happens
+
+00:21:19.160 --> 00:21:20.879
+when you increase the thresholds
+
+00:21:20.880 --> 00:21:23.799
+it's very clear that Emacs startup become faster
+
+00:21:23.800 --> 00:21:26.279
+when you increase gc thresholds
+
+00:21:26.280 --> 00:21:33.359
+so that's all for actual user statistics
+
+00:21:33.360 --> 00:21:35.439
+and now let's try to run into
+
+00:21:35.440 --> 00:21:38.079
+some like actual recommendations
+
+00:21:38.080 --> 00:21:42.639
+on what numbers to set and before we start
+
+00:21:42.640 --> 00:21:44.399
+let me explain a little bit about
+
+00:21:44.400 --> 00:21:46.479
+the difference between these two variables
+
+00:21:46.480 --> 00:21:48.879
+which is gc constant threshold and gc constant percentage
+
+00:21:48.880 --> 00:21:52.359
+so if you think about Emacs memory
+
+00:21:52.360 --> 00:21:55.239
+like there's a certain memory allocated by Emacs
+
+00:21:55.240 --> 00:21:58.479
+and then as you run commands and turn using Emacs
+
+00:21:58.480 --> 00:22:00.079
+there is more memory allocated
+
+00:22:00.080 --> 00:22:04.639
+and Emacs decides when to do garbage collection
+
+00:22:04.640 --> 00:22:06.079
+according these two variables
+
+00:22:06.080 --> 00:22:08.759
+and actually what it does it chooses the larger one
+
+00:22:08.760 --> 00:22:12.119
+so say you have you are late in Emacs session
+
+00:22:12.120 --> 00:22:14.039
+you have a lot of Emacs memory allocated
+
+00:22:14.040 --> 00:22:17.119
+then you have gc constant percentage
+
+00:22:17.120 --> 00:22:19.919
+which is percent of the already allocated memory
+
+00:22:19.920 --> 00:22:25.119
+and that percent is probably going to be the largest
+
+00:22:25.120 --> 00:22:28.319
+because you have more memory
+
+00:22:28.320 --> 00:22:32.559
+and memory means that percent of it is larger
+
+00:22:32.560 --> 00:22:36.359
+so like you have a larger number cost
+
+00:22:36.360 --> 00:22:37.719
+by gc constant percentage
+
+00:22:37.720 --> 00:22:43.079
+so in this scenario when Emacs session is already running
+
+00:22:43.080 --> 00:22:45.319
+for a long time and there is a lot of memory allocated
+
+00:22:45.320 --> 00:22:50.119
+you have gc constant percentage
+
+00:22:50.120 --> 00:22:52.279
+controlling the garbage collection
+
+00:22:52.280 --> 00:22:54.999
+while early in Emacs there is not much memory placed
+
+00:22:55.000 --> 00:22:58.719
+Emacs just starting up then gc constant threshold
+
+00:22:58.720 --> 00:23:01.639
+is controlling how frequently garbage collection happens
+
+00:23:01.640 --> 00:23:04.799
+because smaller allocated memory
+
+00:23:04.800 --> 00:23:06.839
+means its percentage will be a small number
+
+00:23:06.840 --> 00:23:12.319
+so in terms of default values at least
+
+00:23:12.320 --> 00:23:14.239
+gc constant threshold is 800 kilobytes
+
+00:23:14.240 --> 00:23:18.799
+and gc constant percentage is 10
+
+00:23:18.800 --> 00:23:24.159
+so gc constant percentage becomes larger than that threshold
+
+00:23:24.160 --> 00:23:28.919
+when you have more than eight megabytes of allocated memory
+
+00:23:28.920 --> 00:23:31.039
+by Emacs which is quite early
+
+00:23:31.040 --> 00:23:34.279
+and it will probably hold just during the startup
+
+00:23:34.280 --> 00:23:36.799
+and once you start using your maximum
+
+00:23:36.800 --> 00:23:38.919
+and once you load all the histories
+
+00:23:38.920 --> 00:23:42.039
+all the kinds of buffers it's probably going to take
+
+00:23:42.040 --> 00:23:43.959
+more than much more than eight megabytes
+
+00:23:43.960 --> 00:23:50.639
+so now we understand this
+
+00:23:50.640 --> 00:23:53.279
+we can draw certain recommendations
+
+00:23:53.280 --> 00:23:57.279
+about tweaking the gc thresholds
+
+00:23:57.280 --> 00:24:01.159
+so first of all I need to emphasize
+
+00:24:01.160 --> 00:24:03.639
+that any time you increase gc threshold
+
+00:24:03.640 --> 00:24:07.199
+an individual garbage collection time increases
+
+00:24:07.200 --> 00:24:08.759
+so it's not free at all
+
+00:24:08.760 --> 00:24:10.999
+if you don't have problems with garbage collection
+
+00:24:11.000 --> 00:24:13.519
+which is half of the users don't have much problem
+
+00:24:13.520 --> 00:24:15.079
+you don't need to tweak anything
+
+00:24:15.080 --> 00:24:19.359
+only when gc is frequent and slow
+
+00:24:19.360 --> 00:24:23.399
+when Emacs is really really present frequently
+
+00:24:23.400 --> 00:24:27.119
+you may consider increasing gc thresholds only
+
+00:24:27.120 --> 00:24:31.479
+and in particular I recommend
+
+00:24:31.480 --> 00:24:33.279
+increasing gc constant percentage
+
+00:24:33.280 --> 00:24:36.359
+because that's what mostly controls gc
+
+00:24:36.360 --> 00:24:40.079
+when Emacs is running for long session
+
+00:24:40.080 --> 00:24:43.039
+and the numbers are probably like
+
+00:24:43.040 --> 00:24:46.519
+yeah we can estimate the effect of these numbers
+
+00:24:46.520 --> 00:24:49.679
+like for example if you have a default value of 0.1 percent
+
+00:24:49.680 --> 00:24:52.759
+for gc constant percentage 0.1 which is 10 percent
+
+00:24:52.760 --> 00:24:55.039
+and then increase it twice
+
+00:24:55.040 --> 00:24:58.639
+obviously you get twice less frequent gcs
+
+00:24:58.640 --> 00:25:02.559
+but it will come at the cost of extra 10 percent gc time
+
+00:25:02.560 --> 00:25:05.839
+and if you increase 10 times you can think about
+
+00:25:05.840 --> 00:25:08.719
+10 less 10 x less frequent gcs
+
+00:25:08.720 --> 00:25:12.199
+but almost twice longer individual garbage collection time
+
+00:25:12.200 --> 00:25:16.919
+so probably you want to set the number closer to 0.1
+
+00:25:16.920 --> 00:25:23.399
+another part of the users may actually
+
+00:25:23.400 --> 00:25:28.359
+try to optimize Emacs startup time
+
+00:25:28.360 --> 00:25:30.759
+which is quite frequent problem
+
+00:25:30.760 --> 00:25:34.919
+in this case it's probably better to increase gc constant
+
+00:25:34.920 --> 00:25:38.199
+but not too much so like
+
+00:25:38.200 --> 00:25:40.239
+first of all it makes sense to check
+
+00:25:40.240 --> 00:25:43.319
+whether garbage collection is a problem at all
+
+00:25:43.320 --> 00:25:45.999
+during startup and there are two variables
+
+00:25:46.000 --> 00:25:50.199
+which can show what is happening this garbage collection
+
+00:25:50.200 --> 00:25:53.719
+so gc done is a variable that shows
+
+00:25:53.720 --> 00:25:55.039
+how many garbage collection
+
+00:25:55.040 --> 00:26:00.159
+like what is the number of garbage collections triggered
+
+00:26:00.160 --> 00:26:02.599
+like when you check the value
+
+00:26:02.600 --> 00:26:04.039
+or right after you start Emacs
+
+00:26:04.040 --> 00:26:04.799
+you will see that
+
+00:26:04.800 --> 00:26:08.519
+number and gc elapsed variable
+
+00:26:08.520 --> 00:26:11.599
+which gives you a number of seconds
+
+00:26:11.600 --> 00:26:14.959
+which Emacs spent in doing garbage collection
+
+00:26:14.960 --> 00:26:16.879
+so this is probably the most important variable
+
+00:26:16.880 --> 00:26:20.719
+and if you see it's large then you may consider tweaking it
+
+00:26:20.720 --> 00:26:26.799
+for the Emacs startup we can estimate some bounds
+
+00:26:26.800 --> 00:26:30.039
+because in the statistics I never saw anything
+
+00:26:30.040 --> 00:26:32.439
+that is more than 10 seconds extra
+
+00:26:32.440 --> 00:26:34.439
+which even 10 seconds is probably like
+
+00:26:34.440 --> 00:26:39.119
+a really really hard upper bound so
+
+00:26:39.120 --> 00:26:44.479
+or say if you want to decrease the gc contribution
+
+00:26:44.480 --> 00:26:47.479
+like order of magnitude or like two orders of magnitudes
+
+00:26:47.480 --> 00:26:50.879
+let's say like as a really hard top estimate
+
+00:26:50.880 --> 00:26:55.079
+then it corresponds to 80 megabytes gc constant
+
+00:26:55.080 --> 00:26:58.959
+and probably much less so like
+
+00:26:58.960 --> 00:27:00.679
+there's no point setting it
+
+00:27:00.680 --> 00:27:04.159
+to a few hundred megabytes of course
+
+00:27:04.160 --> 00:27:08.439
+there's one caveat which is important to keep in
+
+00:27:08.440 --> 00:27:14.039
+mind though that increasing the gc thresholds
+
+00:27:14.040 --> 00:27:16.399
+is not just increasing individual gc time
+
+00:27:16.400 --> 00:27:20.399
+there's also an actual real impact on the RAM usage
+
+00:27:20.400 --> 00:27:23.839
+so like if you increase gc threshold
+
+00:27:23.840 --> 00:27:26.879
+it increases the RAM usage of Emacs
+
+00:27:26.880 --> 00:27:29.639
+and you shouldn't think that like okay
+
+00:27:29.640 --> 00:27:33.159
+I increased the threshold by like 100 megabytes
+
+00:27:33.160 --> 00:27:37.119
+then 100 megabytes extra RAM usage doesn't matter
+
+00:27:37.120 --> 00:27:38.679
+it's not 100 megabytes
+
+00:27:38.680 --> 00:27:42.319
+because less frequent garbage collection means
+
+00:27:42.320 --> 00:27:45.639
+it will lead to memory fragmentation
+
+00:27:45.640 --> 00:27:50.439
+so in practice if you increase the thresholds
+
+00:27:50.440 --> 00:27:52.799
+to tens or hundreds of megabytes
+
+00:27:52.800 --> 00:27:55.919
+we are talking about gigabytes extra RAM usage
+
+00:27:55.920 --> 00:27:59.719
+for me personally when I tried to play with gc thresholds
+
+00:27:59.720 --> 00:28:02.879
+I have seen Emacs taking two gigabytes like
+
+00:28:02.880 --> 00:28:05.519
+compared to several times less
+
+00:28:05.520 --> 00:28:09.039
+when with default settings so it's not free at all
+
+00:28:09.040 --> 00:28:13.639
+and only like either when you have a lot of free RAM
+
+00:28:13.640 --> 00:28:16.839
+and you don't care or when your Emacs is really slow
+
+00:28:16.840 --> 00:28:19.559
+then you may need to consider this
+
+00:28:19.560 --> 00:28:23.239
+tweaking these defaults so again don't tweak defaults
+
+00:28:23.240 --> 00:28:24.239
+if you don't really have a problem
+
+00:28:24.240 --> 00:28:29.839
+and of course this RAM problem is a big big deal
+
+00:28:29.840 --> 00:28:35.679
+for Emacs devs because from from the point of single user
+
+00:28:35.680 --> 00:28:38.839
+you have like normal laptop most likely like normal PC
+
+00:28:38.840 --> 00:28:42.079
+with a lot of RAM you don't care about these things too much
+
+00:28:42.080 --> 00:28:48.999
+but Emacs in general can run on like all kinds of machines
+
+00:28:49.000 --> 00:28:51.679
+including low-end machines with very limited RAM
+
+00:28:51.680 --> 00:28:55.359
+and anytime Emacs developers consider increasing
+
+00:28:55.360 --> 00:28:57.959
+the defaults for garbage collection
+
+00:28:57.960 --> 00:29:01.479
+it's like they always have to consider
+
+00:29:01.480 --> 00:29:02.959
+if you increase them too much
+
+00:29:02.960 --> 00:29:07.919
+then Emacs may just stop running on certain platforms
+
+00:29:07.920 --> 00:29:14.439
+so that's a very big consideration in terms
+
+00:29:14.440 --> 00:29:16.639
+of the global defaults for everyone
+
+00:29:16.640 --> 00:29:22.199
+although I have to I would say that it might be related
+
+00:29:22.200 --> 00:29:24.479
+to the safe to increase GCCons threshold
+
+00:29:24.480 --> 00:29:27.919
+because it mostly affects startup and during startup
+
+00:29:27.920 --> 00:29:31.279
+it's probably not the peak usage of Emacs
+
+00:29:31.280 --> 00:29:35.599
+and like as Emacs runs for longer
+
+00:29:35.600 --> 00:29:38.199
+it's probably where most of RAM will be used later
+
+00:29:38.200 --> 00:29:44.399
+on the other hand GCCons percentage is much more debating
+
+00:29:44.400 --> 00:29:46.159
+because it has pros and cons
+
+00:29:46.160 --> 00:29:47.719
+it will increase the RAM usage
+
+00:29:47.720 --> 00:29:50.999
+it will increase the individual GC time so
+
+00:29:51.000 --> 00:29:56.119
+if we consider changing it it's much more tricky
+
+00:29:56.120 --> 00:29:59.479
+and we have discussing probably measure the impact on users
+
+00:29:59.480 --> 00:30:05.799
+and a final note on or from the point of view
+
+00:30:05.800 --> 00:30:07.319
+of Emacs development is
+
+00:30:07.320 --> 00:30:11.039
+that this simple mark-and-sweep algorithm
+
+00:30:11.040 --> 00:30:14.119
+is like a very old and not the state-of-the-art algorithm
+
+00:30:14.120 --> 00:30:17.799
+there are variants of garbage collection
+
+00:30:17.800 --> 00:30:19.479
+that are like totally non-blocking
+
+00:30:19.480 --> 00:30:22.479
+so Emacs just doesn't have to freeze
+
+00:30:22.480 --> 00:30:24.279
+during the garbage collection
+
+00:30:24.280 --> 00:30:26.839
+or there are variants of garbage collection algorithm
+
+00:30:26.840 --> 00:30:30.079
+that do not scan all the memory just fraction of it
+
+00:30:30.080 --> 00:30:33.439
+and scan another fraction less frequently
+
+00:30:33.440 --> 00:30:36.999
+so there are actually ways just to change
+
+00:30:37.000 --> 00:30:39.799
+the garbage collection algorithm to make things much faster
+
+00:30:39.800 --> 00:30:44.199
+of course like just changing the numbers of variables
+
+00:30:44.200 --> 00:30:47.079
+like the numbers of variable values
+
+00:30:47.080 --> 00:30:50.079
+is much more tricky and one has to implement it
+
+00:30:50.080 --> 00:30:52.239
+obviously it would be nice if someone implements it
+
+00:30:52.240 --> 00:30:55.639
+but so far it's not happening so yeah it would be nice
+
+00:30:55.640 --> 00:30:59.359
+but maybe not not so quickly
+
+00:30:59.360 --> 00:31:02.159
+there is more chance to change the defaults here
+
+00:31:02.160 --> 00:31:07.479
+to conclude let me reiterate the most important points
+
+00:31:07.480 --> 00:31:11.919
+so from point of view of users you need to understand that
+
+00:31:11.920 --> 00:31:14.479
+yes garbage collection may be a problem
+
+00:31:14.480 --> 00:31:16.679
+but not for everyone so like
+
+00:31:16.680 --> 00:31:21.079
+you should only think about changing the variables
+
+00:31:21.080 --> 00:31:23.559
+when you really know that garbage collection
+
+00:31:23.560 --> 00:31:27.479
+is the problem for you so if you have slow Emacs startup
+
+00:31:27.480 --> 00:31:30.919
+slow Emacs startup and you know that it's caused by
+
+00:31:30.920 --> 00:31:32.479
+garbage collection like by
+
+00:31:32.480 --> 00:31:35.999
+you can check the GC elapsed variable
+
+00:31:36.000 --> 00:31:39.679
+then you may increase GC count threshold
+
+00:31:39.680 --> 00:31:42.119
+like to few tens of megabytes not more
+
+00:31:42.120 --> 00:31:44.479
+it doesn't make sense to increase it much more
+
+00:31:44.480 --> 00:31:48.239
+and if you really have major problems
+
+00:31:48.240 --> 00:31:49.759
+with Emacs being slaggy
+
+00:31:49.760 --> 00:31:52.519
+then you can increase GC count percentage
+
+00:31:52.520 --> 00:31:55.999
+to like 0.2 0.3 maybe
+
+00:31:56.000 --> 00:31:57.679
+one is probably overkill
+
+00:31:57.680 --> 00:32:02.759
+but do watch your Emacs ROM usage it may be really impacted
+
+00:32:02.760 --> 00:32:09.719
+for Emacs developers I'd like to emphasize
+
+00:32:09.720 --> 00:32:12.439
+that there is a real problem with garbage collection
+
+00:32:12.440 --> 00:32:17.959
+and nine percent of all the garbage collection
+
+00:32:17.960 --> 00:32:22.079
+data points we have correspond
+
+00:32:22.080 --> 00:32:24.959
+to really slow noticeable Emacs precision
+
+00:32:24.960 --> 00:32:28.039
+and really frequent less than 10 seconds
+
+00:32:28.040 --> 00:32:32.319
+I'd say that it's really worth
+
+00:32:32.320 --> 00:32:35.279
+increasing GC count threshold at least during startup
+
+00:32:35.280 --> 00:32:40.159
+because it really impacts the Emacs startup time
+
+00:32:40.160 --> 00:32:41.519
+making Emacs startup much faster
+
+00:32:41.520 --> 00:32:44.799
+ideally we need to reimplement
+
+00:32:44.800 --> 00:32:48.599
+the garbage collection algorithm of course it's not easy
+
+00:32:48.600 --> 00:32:50.159
+but it would be really nice
+
+00:32:50.160 --> 00:32:56.399
+and for GC count percentage defaults it's hard to say
+
+00:32:56.400 --> 00:33:00.759
+we may consider changing it but it's up to discussion
+
+00:33:00.760 --> 00:33:03.119
+and we probably need to be conservative here
+
+00:33:03.120 --> 00:33:06.039
+so we came to the end of my talk
+
+00:33:06.040 --> 00:33:09.319
+and this presentation
+
+00:33:09.320 --> 00:33:11.839
+all the data will be available publicly
+
+00:33:11.840 --> 00:33:17.079
+and you can reproduce all the statistic graphs if you wish
+
+00:33:17.080 --> 00:33:21.920
+and thank you for attention
diff --git a/2023/captions/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--main.vtt b/2023/captions/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--main.vtt
new file mode 100644
index 00000000..e6ae083a
--- /dev/null
+++ b/2023/captions/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--main.vtt
@@ -0,0 +1,4022 @@
+WEBVTT
+
+
+00:00:01.719 --> 00:00:02.600
+[Speaker 0]: 5 seconds. Oh, actually,
+
+00:00:07.279 --> 00:00:08.320
+[Speaker 1]: Sorry, I keep delaying.
+
+00:00:08.320 --> 00:00:09.559
+I keep forgetting that we have an
+
+00:00:09.559 --> 00:00:11.639
+introduction now. The introduction is flying.
+
+00:00:02.600 --> 00:00:18.883
+[Speaker 0]: a little more. You're going to give a
+
+00:00:22.260 --> 00:00:24.320
+[Speaker 1]: Well, it's about 5 seconds now.
+
+00:00:19.675 --> 00:00:27.560
+[Speaker 0]: 30-second, right? Just say go when you want
+
+00:00:29.060 --> 00:00:31.280
+[Speaker 1]: Sure. You'll hear me anyway.
+
+00:00:27.560 --> 00:00:32.299
+[Speaker 0]: me to go. Okay.
+
+00:00:33.260 --> 00:00:35.220
+[Speaker 1]: All right, I think we are live now.
+
+00:00:35.220 --> 00:00:36.100
+So hi again, everyone.
+
+00:00:36.100 --> 00:00:37.900
+I promised you we would be back in about 30
+
+00:00:37.900 --> 00:00:39.940
+seconds. I lied, it was actually 1 minute,
+
+00:00:40.160 --> 00:00:41.760
+but we are here with Bob.
+
+00:00:41.760 --> 00:00:42.840
+Hi, Bob, how are you doing?
+
+00:00:43.380 --> 00:00:46.940
+[Speaker 0]: Hi, doing great. Glad to
+
+00:00:46.940 --> 00:00:50.600
+[Speaker 1]: be with you. Yeah, glad to be here,
+
+00:00:50.600 --> 00:00:52.580
+and so are we. We're glad to have you again
+
+00:00:52.580 --> 00:00:54.440
+this year. So what we're going to do,
+
+00:00:54.440 --> 00:00:56.140
+we're not going to waste any time right now
+
+00:00:56.140 --> 00:00:57.880
+with chit-chats. What we're going to do,
+
+00:00:57.880 --> 00:00:59.059
+we're going to move straight into your
+
+00:00:59.059 --> 00:01:01.120
+presentation, Bob, so that you have as much
+
+00:01:01.120 --> 00:01:04.239
+time as you can. I'm going to recede into the
+
+00:01:04.239 --> 00:01:07.440
+background. I am going to full screen your
+
+00:01:07.440 --> 00:01:08.979
+presentation on a stream.
+
+00:01:09.860 --> 00:01:11.680
+And Bob, the floor is all yours.
+
+00:01:12.940 --> 00:01:14.720
+[Speaker 0]: Thank you very much, Leo.
+
+00:01:15.040 --> 00:01:18.400
+Glad to be here. I hope everybody has an idea
+
+00:01:18.400 --> 00:01:22.780
+of what Hyperbole is, but it's a broad
+
+00:01:22.900 --> 00:01:25.880
+information management system inside Emacs
+
+00:01:26.400 --> 00:01:28.540
+that works in all major modes.
+
+00:01:28.860 --> 00:01:31.760
+It's a global minor mode that you can turn on
+
+00:01:31.760 --> 00:01:34.760
+and off very rapidly so that you can just get
+
+00:01:34.760 --> 00:01:36.160
+in and out of hyperbole.
+
+00:01:36.760 --> 00:01:40.940
+And it works mostly from a mini buffer menu
+
+00:01:41.400 --> 00:01:44.040
+that if we just hit ctrl H H we see at the
+
+00:01:44.040 --> 00:01:47.420
+bottom of the screen here and as you see in
+
+00:01:47.420 --> 00:01:48.980
+some of this text right here,
+
+00:01:51.040 --> 00:01:55.680
+Dee will show you a demo with all these video
+
+00:01:55.680 --> 00:01:57.680
+links of Hyperbole now.
+
+00:01:57.900 --> 00:02:01.780
+But let's just get into the top 10 reasons to
+
+00:02:01.780 --> 00:02:08.840
+use Hyperbole. Number 10 is a key series
+
+00:02:10.160 --> 00:02:12.600
+curly braces. So you just put curly braces
+
+00:02:12.600 --> 00:02:17.620
+around any set of key sequences that you want
+
+00:02:19.760 --> 00:02:22.440
+and hyperbole magically turns that into what
+
+00:02:22.440 --> 00:02:25.640
+we call an implicit button a hyper button and
+
+00:02:25.640 --> 00:02:28.580
+any kind of text that you have so if we go
+
+00:02:28.580 --> 00:02:35.760
+down here and we just click click here we see
+
+00:02:35.820 --> 00:02:40.220
+it that was a complex button that said let's
+
+00:02:40.400 --> 00:02:43.200
+start a shell, let's set an environment
+
+00:02:43.320 --> 00:02:45.140
+variable as you see the command right up
+
+00:02:45.140 --> 00:02:47.420
+there, and then let's do a grep over the
+
+00:02:47.420 --> 00:02:50.680
+hyperbole code and find all instances of a
+
+00:02:50.680 --> 00:02:55.360
+particular label. So if we hit made a return,
+
+00:02:55.400 --> 00:02:57.260
+that's called the action key.
+
+00:02:57.280 --> 00:02:59.340
+That's what you use throughout hyperbole when
+
+00:02:59.340 --> 00:03:01.900
+you just want to activate any kind of button.
+
+00:03:02.020 --> 00:03:06.380
+So you see it jumped to the grep output and
+
+00:03:06.380 --> 00:03:08.440
+this is in a shell buffer it's not in a
+
+00:03:08.440 --> 00:03:11.180
+compilation buffer so anywhere that you have
+
+00:03:11.180 --> 00:03:13.760
+this sort of thing it's also an implicit
+
+00:03:13.780 --> 00:03:17.040
+button and any sort of grep output or
+
+00:03:17.040 --> 00:03:20.780
+compiler output you can just jump to with the
+
+00:03:22.120 --> 00:03:23.580
+same key, made a return.
+
+00:03:23.960 --> 00:03:29.240
+So that's key series, the first part.
+
+00:03:29.440 --> 00:03:33.880
+And then just to note that you can also just
+
+00:03:33.880 --> 00:03:39.000
+do a, well I'll just do it here and show you
+
+00:03:39.000 --> 00:03:43.380
+that you can do a recursive grep with this
+
+00:03:43.380 --> 00:03:45.840
+hyperbole command, HYPBR grep.
+
+00:03:46.060 --> 00:03:49.000
+And if you're in an Emacs list buffer,
+
+00:03:50.860 --> 00:03:54.740
+it will only grep across the Emacs list.
+
+00:03:54.760 --> 00:03:58.340
+So a very handy way to just go through your
+
+00:03:58.340 --> 00:04:01.040
+code very rapidly and then jump to various
+
+00:04:01.040 --> 00:04:04.280
+points in it. So we have a lot to cover
+
+00:04:04.280 --> 00:04:05.800
+today, so I'm going to go through this
+
+00:04:05.800 --> 00:04:07.560
+rapidly. This isn't a tutorial,
+
+00:04:07.800 --> 00:04:10.340
+it's just to get you interested in some of
+
+00:04:10.340 --> 00:04:13.060
+the features, and then there's a ton of
+
+00:04:13.060 --> 00:04:15.920
+reference material and videos now available
+
+00:04:15.980 --> 00:04:18.860
+for Hyperlink. So let's go to number 9.
+
+00:04:20.019 --> 00:04:22.360
+Path names become implicit buttons.
+
+00:04:22.500 --> 00:04:24.060
+You don't even have to quote them.
+
+00:04:24.060 --> 00:04:26.920
+You can add environment variables or elist
+
+00:04:26.920 --> 00:04:29.200
+variables with the syntax right here.
+
+00:04:29.380 --> 00:04:32.180
+So here we have a shell script that's
+
+00:04:32.180 --> 00:04:33.500
+somewhere on our path.
+
+00:04:33.680 --> 00:04:36.380
+And notice path is an environment variable
+
+00:04:36.380 --> 00:04:39.140
+with many different paths within it,
+
+00:04:39.140 --> 00:04:42.600
+right? But Hyperbole knows that and it
+
+00:04:42.600 --> 00:04:44.980
+searches the path, gets the first match,
+
+00:04:45.600 --> 00:04:48.620
+finds it, and finds the actual shell script.
+
+00:04:48.660 --> 00:04:50.420
+So you can just embed that anywhere.
+
+00:04:50.540 --> 00:04:52.160
+Here we have a list variable,
+
+00:04:52.280 --> 00:04:54.360
+hyperbdur, which is the home directory for
+
+00:04:54.360 --> 00:04:58.120
+hyperbole, and then a markdown file,
+
+00:04:58.320 --> 00:05:01.680
+and a link to a direct section in the file,
+
+00:05:01.780 --> 00:05:05.220
+and the 5 colon 5 means go to line 5 within
+
+00:05:05.220 --> 00:05:07.260
+that section and column 5.
+
+00:05:07.380 --> 00:05:09.400
+So let's just try it. Boom,
+
+00:05:09.420 --> 00:05:11.500
+we're right there, and we're on another link
+
+00:05:11.500 --> 00:05:13.220
+that we could activate as well.
+
+00:05:13.420 --> 00:05:17.960
+So notice the next line is the same link but
+
+00:05:17.960 --> 00:05:20.280
+this is how you normally have to do it in a
+
+00:05:20.280 --> 00:05:23.160
+markdown file. You have to change the section
+
+00:05:23.160 --> 00:05:25.640
+header to have dashes but with hyperbole you
+
+00:05:25.640 --> 00:05:28.120
+don't have to. You can just put it exactly
+
+00:05:28.140 --> 00:05:29.840
+like you see it in your file.
+
+00:05:30.540 --> 00:05:34.660
+Here the pound syntax for sections is really
+
+00:05:34.660 --> 00:05:36.640
+a generic syntax in the hyperbole.
+
+00:05:37.360 --> 00:05:39.840
+And so it works in all different kinds of
+
+00:05:39.840 --> 00:05:41.500
+files, your programming files.
+
+00:05:42.100 --> 00:05:45.240
+Here's a shell script and we said let's just
+
+00:05:45.240 --> 00:05:49.120
+go to the first comment that has alias in it.
+
+00:05:49.120 --> 00:05:51.700
+Notice we didn't have to say the whole line,
+
+00:05:51.700 --> 00:05:53.160
+just the first part of it.
+
+00:05:53.160 --> 00:05:58.140
+And it matched to it. Here we have a link to
+
+00:05:58.140 --> 00:06:01.680
+our hyperbole structured outliner called the
+
+00:06:01.680 --> 00:06:04.660
+K Outliner. And you can see it auto-numbers
+
+00:06:05.080 --> 00:06:08.000
+all these cells. But in addition to just
+
+00:06:08.000 --> 00:06:10.640
+displaying, you can also add a pipe symbol
+
+00:06:10.640 --> 00:06:14.900
+near the end and use this view syntax to clip
+
+00:06:14.900 --> 00:06:17.500
+to 2 lines and show blank lines.
+
+00:06:17.500 --> 00:06:19.920
+So let's see if each node gets clipped to 2
+
+00:06:19.920 --> 00:06:22.680
+lines. So you see they're all just 2 now with
+
+00:06:22.680 --> 00:06:25.280
+the ellipses and then we can expand them.
+
+00:06:25.320 --> 00:06:28.760
+So a lot of power there just with path names.
+
+00:06:29.380 --> 00:06:31.120
+Let's continue to number 8.
+
+00:06:31.120 --> 00:06:32.940
+[Speaker 1]: Can I just interrupt you just a bit?
+
+00:06:33.420 --> 00:06:33.920
+[Speaker 0]: Yes.
+
+00:06:34.740 --> 00:06:37.720
+[Speaker 1]: I think your phone, so we have your phone set
+
+00:06:37.720 --> 00:06:40.460
+up in case your internet misbehaves and we've
+
+00:06:40.640 --> 00:06:42.080
+set this up before we started,
+
+00:06:42.100 --> 00:06:44.380
+but I think the vibration is a little loud
+
+00:06:44.380 --> 00:06:46.160
+whenever it does. Can you maybe move it a
+
+00:06:46.160 --> 00:06:50.380
+little bit? I think so.
+
+00:06:50.380 --> 00:06:51.880
+It will have to vibrate again.
+
+00:06:47.740 --> 00:06:54.220
+[Speaker 0]: Is that okay? No, my phone...
+
+00:06:54.380 --> 00:06:56.880
+Okay. It shouldn't have been vibrating.
+
+00:06:59.480 --> 00:07:01.260
+[Speaker 1]: have been another device,
+
+00:07:01.280 --> 00:07:02.800
+but definitely we had vibration.
+
+00:07:02.800 --> 00:07:04.500
+Anyway, carry on. Sorry for the interruption.
+
+00:06:57.640 --> 00:07:06.920
+[Speaker 0]: It could be me. It might So number 8,
+
+00:07:07.800 --> 00:07:10.520
+special prefixes. There are 3 prefixes you
+
+00:07:10.520 --> 00:07:11.820
+can attach to path names.
+
+00:07:11.820 --> 00:07:13.680
+The first, if you want to load,
+
+00:07:13.820 --> 00:07:16.040
+instead of just finding a file,
+
+00:07:16.620 --> 00:07:19.460
+an ELIST file, you can actually load it.
+
+00:07:19.540 --> 00:07:22.060
+And so I can just hit made a return on this,
+
+00:07:22.200 --> 00:07:24.300
+and you see in the mini buffer,
+
+00:07:25.200 --> 00:07:27.100
+it loaded it as compiled e-list.
+
+00:07:27.240 --> 00:07:29.340
+I could put a .el on here,
+
+00:07:29.500 --> 00:07:33.500
+a .elc, .gz, all of that'll work,
+
+00:07:33.580 --> 00:07:36.420
+and just put a dash in front to load it.
+
+00:07:36.580 --> 00:07:38.720
+If you want to run a shell command,
+
+00:07:38.720 --> 00:07:41.040
+just put an exclamation mark in front of
+
+00:07:41.040 --> 00:07:42.540
+something and again you can have the
+
+00:07:42.540 --> 00:07:44.620
+environment variable. So here we're saying
+
+00:07:44.620 --> 00:07:47.220
+run the program date and you see,
+
+00:07:48.400 --> 00:07:50.040
+let's see, let's do it again.
+
+00:07:50.160 --> 00:07:53.240
+There we go. It ran date and you see the
+
+00:07:53.240 --> 00:07:55.680
+output right there. And what if you want to
+
+00:07:55.680 --> 00:07:58.040
+run a graphical program on your system?
+
+00:07:58.620 --> 00:08:01.760
+Well here, we want to open a PDF file and I'm
+
+00:08:01.760 --> 00:08:05.340
+just using XDG Open on Linux,
+
+00:08:05.660 --> 00:08:09.440
+you could use Open on Mac and you just put an
+
+00:08:09.440 --> 00:08:12.840
+ampersand in front and there's the Hyperbole
+
+00:08:14.120 --> 00:08:15.840
+manual instantly displayed.
+
+00:08:16.120 --> 00:08:18.620
+So lots of power there and all of that
+
+00:08:18.820 --> 00:08:22.360
+actually .pdf's and many other file types are
+
+00:08:22.360 --> 00:08:25.080
+automatically linked to various programs by
+
+00:08:25.080 --> 00:08:27.340
+Hyperbole. So you could just use the path
+
+00:08:27.340 --> 00:08:29.340
+name itself and it would probably behave the
+
+00:08:29.340 --> 00:08:34.440
+same way. Number 7, bookmarks on steroids.
+
+00:08:35.460 --> 00:08:37.419
+So Hyperbole gives you a personal button
+
+00:08:37.419 --> 00:08:40.340
+file, which is on the menu you see here under
+
+00:08:40.400 --> 00:08:42.280
+button files, and then personal.
+
+00:08:43.039 --> 00:08:45.360
+So here we'll just display it.
+
+00:08:45.480 --> 00:08:47.720
+And you can put whatever you want in here,
+
+00:08:47.720 --> 00:08:49.860
+these implicit buttons of any type.
+
+00:08:49.860 --> 00:08:52.660
+You can name them the way here and you can
+
+00:08:52.660 --> 00:08:55.560
+activate either the name with MetaReturn or
+
+00:08:55.560 --> 00:08:56.920
+the button itself. So,
+
+00:08:56.920 --> 00:08:59.400
+of course, if we did MetaReturn here,
+
+00:08:59.860 --> 00:09:03.220
+we'd just display that in a web browser.
+
+00:09:03.940 --> 00:09:05.520
+I'll just do a few of these.
+
+00:09:05.540 --> 00:09:07.200
+So here's a section of line.
+
+00:09:07.200 --> 00:09:08.580
+Let's just jump there.
+
+00:09:09.120 --> 00:09:11.400
+But these can be all sorts of different
+
+00:09:11.400 --> 00:09:13.140
+actions that are going on.
+
+00:09:13.140 --> 00:09:16.040
+And you just, whatever cross references you
+
+00:09:16.040 --> 00:09:17.840
+want, you put in here.
+
+00:09:17.840 --> 00:09:20.400
+And the neat thing is that this then becomes
+
+00:09:20.940 --> 00:09:23.420
+a list of what we call global buttons.
+
+00:09:23.620 --> 00:09:26.540
+So when I go into the menu and I go control
+
+00:09:26.540 --> 00:09:30.640
+HHGA to activate a global button,
+
+00:09:30.720 --> 00:09:33.220
+you can see that all the names from this file
+
+00:09:33.220 --> 00:09:36.100
+appear here. So only the name buttons appear,
+
+00:09:36.160 --> 00:09:40.240
+and I could like go to the hyperbole to-do
+
+00:09:40.240 --> 00:09:42.260
+list and things like that.
+
+00:09:42.500 --> 00:09:45.660
+So very, very quick access to all your
+
+00:09:45.660 --> 00:09:47.440
+information whenever you need it.
+
+00:09:47.440 --> 00:09:49.600
+And that could be an org file as well if you
+
+00:09:49.600 --> 00:09:53.500
+prefer that. So we just took care of that.
+
+00:09:53.540 --> 00:09:57.000
+Number 6, instant test case running and
+
+00:09:57.000 --> 00:09:59.420
+debugging. This is a fairly new feature.
+
+00:10:00.100 --> 00:10:02.240
+What we're seeing here is a pre-release of
+
+00:10:02.240 --> 00:10:04.440
+version 9, which should be out within the
+
+00:10:04.440 --> 00:10:07.560
+next week. But the instructions at the
+
+00:10:07.560 --> 00:10:10.680
+beginning of the presentation tell you how to
+
+00:10:10.680 --> 00:10:13.720
+get the development version of HyperBlade,
+
+00:10:14.040 --> 00:10:15.560
+which is right now 8.01
+
+00:10:15.880 --> 00:10:19.040
+pre, but that's virtually the same as what 9
+
+00:10:19.120 --> 00:10:23.060
+will be. So you can grab that as of today.
+
+00:10:24.140 --> 00:10:27.540
+So let's just jump to a test file.
+
+00:10:27.700 --> 00:10:30.300
+What you see here is called an explicit
+
+00:10:30.360 --> 00:10:33.020
+button. You can actually make buttons where
+
+00:10:33.120 --> 00:10:35.820
+similar to org, where you just see a bit of
+
+00:10:35.820 --> 00:10:38.500
+the button and all of the metadata is hidden.
+
+00:10:39.060 --> 00:10:42.040
+I can say control A J and I see all about
+
+00:10:42.040 --> 00:10:43.940
+that button, exactly what it's going to do
+
+00:10:43.940 --> 00:10:47.200
+before I activate it and even who created it
+
+00:10:47.200 --> 00:10:50.680
+or last modified it. Then just queue out of
+
+00:10:50.680 --> 00:10:52.580
+here and you're back where you were.
+
+00:10:52.700 --> 00:10:56.820
+So now, what this did is link us to an ERT
+
+00:10:56.920 --> 00:10:59.920
+test. If you write tests in Emacs,
+
+00:10:59.920 --> 00:11:02.060
+you probably use ERT tests.
+
+00:11:02.220 --> 00:11:05.220
+So if I hit made a return on here it'll just
+
+00:11:05.220 --> 00:11:08.520
+run the test tell me it passed great okay but
+
+00:11:08.520 --> 00:11:11.760
+maybe I had a problem so let me use control
+
+00:11:11.760 --> 00:11:17.080
+you made a return and that will e-debug the
+
+00:11:17.080 --> 00:11:20.080
+test instantly. So now I'll step through it
+
+00:11:20.080 --> 00:11:22.200
+and it says, well, let's,
+
+00:11:23.000 --> 00:11:25.580
+this single line actually creates that
+
+00:11:25.580 --> 00:11:27.800
+explicit button. You see we have an empty
+
+00:11:27.800 --> 00:11:29.480
+buffer here that we're in.
+
+00:11:29.480 --> 00:11:31.780
+Now I step through that and now there's the
+
+00:11:31.780 --> 00:11:34.160
+explicit button that got put in there.
+
+00:11:34.160 --> 00:11:36.940
+Now the next line I step through it and this
+
+00:11:36.940 --> 00:11:39.160
+is going to check if we have the right action
+
+00:11:39.160 --> 00:11:42.260
+type and it returns true so that's good and
+
+00:11:42.260 --> 00:11:45.220
+now we should be it should be associated with
+
+00:11:45.220 --> 00:11:48.680
+the temp buffer returns true good And that's
+
+00:11:48.680 --> 00:11:51.360
+why what you saw before is this passed.
+
+00:11:51.720 --> 00:11:52.760
+The whole thing passed.
+
+00:11:53.000 --> 00:11:54.740
+So lots of power there.
+
+00:11:55.080 --> 00:11:57.600
+Simple to use. You're just using your made a
+
+00:11:57.600 --> 00:11:59.360
+return and prefix arguments.
+
+00:12:00.040 --> 00:12:03.240
+It's something everybody who develops should
+
+00:12:03.240 --> 00:12:07.640
+have. So number, let's go on.
+
+00:12:07.640 --> 00:12:09.720
+I think we're making pretty good time here,
+
+00:12:09.720 --> 00:12:11.240
+but I turned off my timer.
+
+00:12:13.000 --> 00:12:15.800
+Let's go to number 5. This is a very new
+
+00:12:15.800 --> 00:12:17.660
+feature, which is very cool too.
+
+00:12:17.720 --> 00:12:20.420
+You used to have to use the mouse probably
+
+00:12:20.440 --> 00:12:23.880
+and you could drag across windows to go from
+
+00:12:23.880 --> 00:12:26.820
+a source to a referent buffer and that would
+
+00:12:26.820 --> 00:12:28.340
+create a hyperlink for you.
+
+00:12:28.340 --> 00:12:30.880
+But now we've installed it and made it even
+
+00:12:30.880 --> 00:12:34.140
+easier on, we've installed it on a,
+
+00:12:34.860 --> 00:12:36.540
+on the hyperbole menus.
+
+00:12:37.040 --> 00:12:40.180
+So let's just go back to our presentation
+
+00:12:40.680 --> 00:12:43.660
+here and say we want to link to this line
+
+00:12:43.660 --> 00:12:46.160
+that we're on there. And I'll just create the
+
+00:12:46.160 --> 00:12:48.480
+button in our scratch buffer here so it
+
+00:12:48.480 --> 00:12:50.660
+doesn't really mess anything up.
+
+00:12:50.900 --> 00:12:53.980
+So I just put my point in where I want the
+
+00:12:53.980 --> 00:12:56.920
+button to appear and then I put point where I
+
+00:12:56.920 --> 00:13:00.060
+want it to link to in the other the other
+
+00:13:00.060 --> 00:13:02.800
+buffer and then I just say control HH to get
+
+00:13:02.800 --> 00:13:05.260
+my menu, I for implicit button,
+
+00:13:05.380 --> 00:13:07.940
+and then L for link. Boom,
+
+00:13:07.960 --> 00:13:09.980
+it inserts it, right at point.
+
+00:13:10.680 --> 00:13:12.880
+What did it do? It knew that this was in the
+
+00:13:12.880 --> 00:13:15.080
+hyperbole directory and I have a variable for
+
+00:13:15.080 --> 00:13:17.780
+that, so that if you sent this link to your
+
+00:13:17.780 --> 00:13:19.180
+friend who uses Hyperbole,
+
+00:13:19.440 --> 00:13:21.440
+it would still work right because they have a
+
+00:13:21.440 --> 00:13:22.860
+different hyperbole there.
+
+00:13:23.100 --> 00:13:27.380
+And then I want to go directly to line 116.
+
+00:13:28.360 --> 00:13:30.360
+So boom, it just took me there.
+
+00:13:30.820 --> 00:13:33.900
+So that's it. And Hyperbole is doing all this
+
+00:13:33.900 --> 00:13:36.420
+for you. You just say I want a link to this
+
+00:13:36.420 --> 00:13:38.940
+thing and it figures out what's at point and
+
+00:13:38.940 --> 00:13:42.240
+it determines the right type of implicit link
+
+00:13:42.240 --> 00:13:45.520
+to put there. And that's the whole point is
+
+00:13:45.520 --> 00:13:47.320
+that you're just working like when you're
+
+00:13:47.320 --> 00:13:50.500
+programming or you're writing an article and
+
+00:13:50.500 --> 00:13:53.520
+you just hit made a return or or pull up a
+
+00:13:53.520 --> 00:13:57.180
+menu and hit a key binding and you're off to
+
+00:13:57.180 --> 00:14:02.400
+the races. So that was implicit linking We
+
+00:14:02.400 --> 00:14:05.260
+can also create those explicit link buttons,
+
+00:14:06.200 --> 00:14:07.760
+and as well as the global link,
+
+00:14:07.760 --> 00:14:09.580
+where we would just give it a name,
+
+00:14:09.580 --> 00:14:11.640
+and it would automatically put it in our
+
+00:14:11.640 --> 00:14:14.640
+global button file without us even having
+
+00:14:14.640 --> 00:14:18.380
+that on screen. So lots of power there as
+
+00:14:18.380 --> 00:14:19.660
+well, lots of consistency.
+
+00:14:21.900 --> 00:14:25.040
+Now let's take a look at the K Outliner a
+
+00:14:25.040 --> 00:14:28.040
+little more. I'm just going to show you 1
+
+00:14:28.040 --> 00:14:29.820
+feature actually. I don't have time to show
+
+00:14:29.820 --> 00:14:31.580
+you the K Outliner in detail,
+
+00:14:31.800 --> 00:14:34.220
+but it's a really cool structured outliner
+
+00:14:34.280 --> 00:14:36.400
+that even if you love Org Mode,
+
+00:14:36.580 --> 00:14:39.280
+you should try it. And this is 1 thing that
+
+00:14:39.280 --> 00:14:41.060
+you can't get with Org Mode,
+
+00:14:41.320 --> 00:14:45.100
+is let's say Hyperlink comes with an example
+
+00:14:45.100 --> 00:14:48.580
+file which teaches you about the K Outliner.
+
+00:14:48.960 --> 00:14:50.940
+So we'll just use that right here.
+
+00:14:51.180 --> 00:14:53.040
+And when you're in the K Outliner,
+
+00:14:53.080 --> 00:14:55.820
+you can bring up and go into the K Outliner
+
+00:14:55.900 --> 00:14:57.540
+menu right here at the bottom.
+
+00:14:58.200 --> 00:15:00.360
+And there's a format menu there.
+
+00:15:00.360 --> 00:15:02.600
+You always take the first letter of a menu,
+
+00:15:02.600 --> 00:15:05.100
+the first capital letter of a menu item.
+
+00:15:05.240 --> 00:15:08.720
+So F for format and then D for display in
+
+00:15:08.720 --> 00:15:11.700
+browser. So just let's do it.
+
+00:15:12.740 --> 00:15:17.220
+We have with 1 button or 1 key we've produced
+
+00:15:17.780 --> 00:15:23.660
+the entire outline in a collapsible outline
+
+00:15:23.720 --> 00:15:26.260
+in HTML. So I can go here.
+
+00:15:27.620 --> 00:15:29.240
+I just have to use my mouse.
+
+00:15:29.600 --> 00:15:33.300
+So I can expand and collapse these trees live
+
+00:15:34.220 --> 00:15:39.520
+with very basic coding.
+
+00:15:39.760 --> 00:15:42.680
+We tried to keep this as simple as possible.
+
+00:15:42.880 --> 00:15:45.580
+But you see it maintains the structure of the
+
+00:15:45.580 --> 00:15:47.880
+outline and even tables.
+
+00:15:55.120 --> 00:15:57.620
+So all the formatting is maintained and again
+
+00:15:57.620 --> 00:16:00.100
+it's instant. Or you can just export it to a
+
+00:16:00.100 --> 00:16:01.920
+file without displaying it.
+
+00:16:03.900 --> 00:16:05.880
+Very efficient kinds of operations.
+
+00:16:06.420 --> 00:16:10.960
+So that was number 4. Number 3 is a
+
+00:16:10.960 --> 00:16:13.400
+subsystem, another subsystem in Hyperbole
+
+00:16:13.440 --> 00:16:16.080
+called Hycontrol, which is for window and
+
+00:16:16.080 --> 00:16:18.600
+frame management. And I just wanted to show
+
+00:16:18.600 --> 00:16:20.920
+you 1 thing in there. It's got a lot of
+
+00:16:20.920 --> 00:16:24.400
+capabilities. But I always had the problem
+
+00:16:24.480 --> 00:16:28.340
+that Emacs wouldn't let me scale my fonts,
+
+00:16:28.380 --> 00:16:30.780
+all of my faces at the same time.
+
+00:16:30.840 --> 00:16:33.680
+I wanted to zoom. I didn't want to increase
+
+00:16:33.680 --> 00:16:36.260
+the default font size and all the others stay
+
+00:16:36.260 --> 00:16:40.660
+the same. So let's just display our faces
+
+00:16:41.260 --> 00:16:45.200
+right here and then we have a choice of
+
+00:16:45.200 --> 00:16:47.860
+either controlling frames or windows.
+
+00:16:47.920 --> 00:16:50.240
+So let's start by controlling frames.
+
+00:16:50.460 --> 00:16:52.760
+So you get another submenu when you're in
+
+00:16:52.760 --> 00:16:56.020
+high control to tell you what to do here.
+
+00:16:56.320 --> 00:16:59.480
+And there's just lowercase z and uppercase z.
+
+00:16:59.480 --> 00:17:03.400
+So let's try it. So it's scaling the entire
+
+00:17:03.400 --> 00:17:06.020
+frame. And you can see from the list of faces
+
+00:17:06.260 --> 00:17:08.500
+that they're all scaling at the same time.
+
+00:17:08.599 --> 00:17:10.220
+And I can go back down.
+
+00:17:10.760 --> 00:17:13.619
+Now if I switch to window mode,
+
+00:17:13.619 --> 00:17:16.099
+and there's a special fast way to do that,
+
+00:17:16.099 --> 00:17:18.819
+just hit T to toggle. And if you look at the
+
+00:17:18.819 --> 00:17:21.819
+bottom menu it says frames right now now it
+
+00:17:21.819 --> 00:17:25.599
+says windows when I hit T so now if I do the
+
+00:17:25.599 --> 00:17:30.640
+same Z to increase it's just this window and
+
+00:17:30.640 --> 00:17:36.800
+but it's you know it's the faces in there so
+
+00:17:37.200 --> 00:17:40.680
+a lot of power again but I just haven't found
+
+00:17:40.680 --> 00:17:43.220
+anywhere else that you can get that kind of
+
+00:17:43.220 --> 00:17:45.820
+control over your faces very rapidly.
+
+00:17:45.920 --> 00:17:51.640
+So that's number 3. Now number 2,
+
+00:17:55.360 --> 00:17:56.780
+let's put that in there.
+
+00:17:58.340 --> 00:18:03.320
+So the HiROLO is the final subsystem in
+
+00:18:03.320 --> 00:18:06.240
+Hyperbole and this has gotten much cooler.
+
+00:18:06.500 --> 00:18:08.680
+So it started off as a contact management
+
+00:18:08.680 --> 00:18:11.540
+system, but it's really just a hierarchical
+
+00:18:11.880 --> 00:18:15.060
+record management system that lets you have
+
+00:18:15.060 --> 00:18:18.020
+as many files, directories as you want,
+
+00:18:18.120 --> 00:18:20.280
+and you can search across all of them without
+
+00:18:20.280 --> 00:18:23.240
+any external utilities necessary,
+
+00:18:23.960 --> 00:18:26.240
+just what's built into Emacs and Hyperlink.
+
+00:18:26.760 --> 00:18:29.920
+So as you can see, we've expanded it to
+
+00:18:29.920 --> 00:18:31.820
+handle org files, markdown,
+
+00:18:32.300 --> 00:18:34.620
+K outlines, Emacs outlines.
+
+00:18:34.780 --> 00:18:36.820
+So what I'm going to do is just say,
+
+00:18:36.820 --> 00:18:40.680
+I want to search using my Hyberlo file list.
+
+00:18:40.680 --> 00:18:43.140
+You just set that to what you wanted to
+
+00:18:43.140 --> 00:18:44.820
+search. But now you have all this
+
+00:18:44.820 --> 00:18:46.520
+flexibility. You can use environment
+
+00:18:46.620 --> 00:18:48.840
+variables in it. You can just specify a
+
+00:18:48.840 --> 00:18:51.340
+directory and it will find all those matching
+
+00:18:51.340 --> 00:18:53.540
+files below that directory recursively.
+
+00:18:55.240 --> 00:18:58.460
+You can give it the markdown file here and
+
+00:18:58.460 --> 00:19:01.160
+you can use file wildcards as well.
+
+00:19:01.160 --> 00:19:04.340
+I mean, look at this. It's got a list
+
+00:19:04.340 --> 00:19:06.140
+variable in it and a wildcard,
+
+00:19:06.540 --> 00:19:09.840
+and it's just all I'm gonna do is I change
+
+00:19:09.840 --> 00:19:13.380
+this from a Lisp expression to make it a
+
+00:19:13.380 --> 00:19:15.380
+hyper button. You just change the outer
+
+00:19:15.380 --> 00:19:16.920
+parens to angle brackets,
+
+00:19:17.120 --> 00:19:19.620
+and then it's automatically an implicit
+
+00:19:21.040 --> 00:19:22.840
+button that you can activate with made a
+
+00:19:22.840 --> 00:19:26.340
+return so just ran that and now I've set my
+
+00:19:26.800 --> 00:19:29.440
+file list so now let's do a search it would
+
+00:19:29.440 --> 00:19:34.620
+be ctrl H H roll it X R and then S for search
+
+00:19:34.820 --> 00:19:36.680
+But I'll just do it this way.
+
+00:19:37.200 --> 00:19:40.320
+And boom, it found everything that fast.
+
+00:19:41.060 --> 00:19:42.940
+And I can just get like,
+
+00:19:43.180 --> 00:19:45.520
+show the top items in there.
+
+00:19:45.520 --> 00:19:48.260
+So I kind of have outlining in this buffer.
+
+00:19:48.340 --> 00:19:51.940
+I can just move to each match that I hit.
+
+00:19:51.980 --> 00:19:53.680
+And notice, although everything was
+
+00:19:53.680 --> 00:19:55.580
+collapsed, it's expanding here.
+
+00:19:55.640 --> 00:19:58.540
+When I move in and out of each of the entry
+
+00:19:58.540 --> 00:20:02.380
+matches, it expands or collapses as I move to
+
+00:20:02.380 --> 00:20:06.220
+the next 1. So a lot of power there.
+
+00:20:06.820 --> 00:20:09.120
+What else? So just tabbing through these
+
+00:20:09.120 --> 00:20:11.200
+things. And you notice that it's working
+
+00:20:11.200 --> 00:20:13.300
+across all of these different types,
+
+00:20:13.340 --> 00:20:16.220
+and it's telling you which file everything
+
+00:20:16.360 --> 00:20:17.840
+came from right up here.
+
+00:20:17.840 --> 00:20:19.940
+So I could just made a return here,
+
+00:20:20.220 --> 00:20:23.500
+should work. Yes, revisit the file normally.
+
+00:20:23.800 --> 00:20:25.760
+And it just pulls it right up.
+
+00:20:25.920 --> 00:20:28.400
+So everything is live and hyperbole.
+
+00:20:28.580 --> 00:20:30.120
+You've got hyperlinks everywhere.
+
+00:20:31.300 --> 00:20:33.740
+Let's just get rid of that.
+
+00:20:34.020 --> 00:20:41.600
+Go back to our demo. So if you are fans of
+
+00:20:41.600 --> 00:20:46.560
+Vertico and Consult, you can now use that
+
+00:20:46.560 --> 00:20:49.300
+with the High Rollo. So all you have to do is
+
+00:20:49.300 --> 00:20:51.440
+let's just format our windows,
+
+00:20:51.760 --> 00:20:55.720
+and then I'll say, let's use ConsultGrep over
+
+00:20:55.720 --> 00:20:58.880
+the Rolodex. Now, it found all the matches
+
+00:20:58.940 --> 00:21:02.060
+there, and I can just move live through them
+
+00:21:02.220 --> 00:21:04.640
+in the buffer like you may be used to or I
+
+00:21:04.640 --> 00:21:08.600
+can filter back down and say using orderless
+
+00:21:10.240 --> 00:21:13.700
+joystick or anything that has joy in it just
+
+00:21:13.700 --> 00:21:17.160
+match to those lines and then I can you know
+
+00:21:17.160 --> 00:21:20.020
+either jump there or quit out of here.
+
+00:21:20.020 --> 00:21:22.080
+I'll just quit out of it right now.
+
+00:21:22.540 --> 00:21:25.240
+So very cool. And all of that is using
+
+00:21:25.240 --> 00:21:28.640
+whatever you personally set as the set of
+
+00:21:28.640 --> 00:21:30.560
+files and directories you want to search.
+
+00:21:31.380 --> 00:21:35.940
+And finally, our number 1 feature of
+
+00:21:35.940 --> 00:21:40.440
+Hyperbole is you can customize this to give
+
+00:21:40.440 --> 00:21:43.460
+you these kinds of implicit buttons,
+
+00:21:44.660 --> 00:21:46.080
+whatever kind you want.
+
+00:21:46.560 --> 00:21:49.140
+And there are 3 levels of doing this.
+
+00:21:49.540 --> 00:21:51.140
+The first is for non-programmers.
+
+00:21:51.900 --> 00:21:53.700
+You can just set a string,
+
+00:21:54.400 --> 00:21:57.040
+like a URL with a parameter in it.
+
+00:21:57.180 --> 00:21:59.440
+So the %s represents the parameter,
+
+00:21:59.680 --> 00:22:01.440
+and This is how you do a search on
+
+00:22:01.440 --> 00:22:04.060
+DuckDuckGo. So all I have to do is evaluate
+
+00:22:04.320 --> 00:22:07.180
+this defal for action link.
+
+00:22:07.800 --> 00:22:11.020
+And now I have a new implicit button type
+
+00:22:11.040 --> 00:22:13.380
+that I can put between angle brackets.
+
+00:22:13.740 --> 00:22:15.640
+And I just give it that name,
+
+00:22:16.020 --> 00:22:18.000
+DDG, and some parameter,
+
+00:22:18.280 --> 00:22:20.040
+whatever I want to search for,
+
+00:22:20.080 --> 00:22:23.040
+and this is a button that does that search.
+
+00:22:25.320 --> 00:22:28.680
+Very cool, right? So you can embed these.
+
+00:22:28.680 --> 00:22:31.040
+This could be a hyperlink in,
+
+00:22:32.140 --> 00:22:35.120
+you know, a comment in a programming file.
+
+00:22:35.320 --> 00:22:38.160
+Anything on the entire web that you want to
+
+00:22:38.160 --> 00:22:42.320
+link to, whatever kind of compact notation
+
+00:22:42.840 --> 00:22:44.800
+you want to give it. So that's what we're
+
+00:22:44.800 --> 00:22:47.140
+going to learn as we get more advanced here
+
+00:22:47.140 --> 00:22:49.400
+you can give it even more compact notations.
+
+00:22:49.840 --> 00:22:52.380
+So as you get more advanced you can say,
+
+00:22:52.380 --> 00:22:54.240
+well I don't like this angle bracket,
+
+00:22:54.240 --> 00:22:57.020
+I want to have an implicit button that uses
+
+00:22:57.280 --> 00:22:59.620
+these square brackets and then an angle
+
+00:22:59.620 --> 00:23:02.080
+bracket inside it. So then you need the
+
+00:23:02.080 --> 00:23:05.200
+defile for implicit link.
+
+00:23:06.040 --> 00:23:08.860
+This lets you specify your start and end
+
+00:23:08.860 --> 00:23:12.180
+delimiters for your new type and and then you
+
+00:23:12.180 --> 00:23:14.840
+can give it a function that you wanted to run
+
+00:23:15.040 --> 00:23:18.320
+and that will take the text of whatever is in
+
+00:23:18.320 --> 00:23:19.780
+the button, in this case,
+
+00:23:19.900 --> 00:23:23.760
+test release here, and feed it to the
+
+00:23:23.760 --> 00:23:26.080
+function that I gave here.
+
+00:23:26.080 --> 00:23:29.540
+So what this function does is grep over my
+
+00:23:29.540 --> 00:23:33.420
+git log and find any commits that include the
+
+00:23:33.420 --> 00:23:35.360
+term test release in it.
+
+00:23:35.360 --> 00:23:38.200
+So let's try it. First I have to add the
+
+00:23:38.200 --> 00:23:41.740
+button type and that's all it takes and it
+
+00:23:41.740 --> 00:23:44.800
+defined it now. So anywhere in Emacs now I
+
+00:23:44.800 --> 00:23:46.920
+can use this button type essentially.
+
+00:23:47.180 --> 00:23:48.980
+So let me try to activate it.
+
+00:23:49.200 --> 00:23:52.760
+Okay, and it says yeah let's save it.
+
+00:23:53.080 --> 00:23:55.940
+Okay so now it's running a git log command.
+
+00:23:56.320 --> 00:23:59.440
+It found all the commits and now of course if
+
+00:23:59.440 --> 00:24:02.980
+I had made a return on this commit it
+
+00:24:02.980 --> 00:24:05.500
+recognizes it as an implicit link,
+
+00:24:05.680 --> 00:24:09.300
+and if I search for what was a test release,
+
+00:24:09.600 --> 00:24:11.960
+there it is. So this commit had that in
+
+00:24:11.960 --> 00:24:14.180
+there. So all these matches,
+
+00:24:14.180 --> 00:24:16.280
+so I don't know how other people do this,
+
+00:24:16.280 --> 00:24:20.040
+but for me this makes it a lot simpler.
+
+00:24:21.280 --> 00:24:24.800
+So a lot of power that any programmer can
+
+00:24:24.800 --> 00:24:27.500
+use. And finally, if you've mastered Emacs
+
+00:24:27.500 --> 00:24:29.360
+Lisp, or you're starting to,
+
+00:24:29.440 --> 00:24:33.740
+you can look in the hib types file in
+
+00:24:33.740 --> 00:24:37.320
+Hyperbole and see all sorts of uses of defib,
+
+00:24:37.500 --> 00:24:39.440
+which is defined implicit button.
+
+00:24:39.660 --> 00:24:42.660
+And that's the full power of e-LISP when you
+
+00:24:42.660 --> 00:24:45.060
+want to define 1. So what we're going to do
+
+00:24:45.060 --> 00:24:46.780
+here is I wanted to know,
+
+00:24:47.080 --> 00:24:49.700
+given a date, what the day of the week is.
+
+00:24:49.900 --> 00:24:53.040
+And because the date primitives weren't quite
+
+00:24:53.040 --> 00:24:54.640
+written the way I might like,
+
+00:24:55.080 --> 00:24:57.520
+it's a little longer than some.
+
+00:24:57.520 --> 00:25:00.400
+But I'm just going to evaluate this list.
+
+00:25:00.720 --> 00:25:06.100
+And I've now defined DOW as an action type.
+
+00:25:06.140 --> 00:25:08.500
+Now, how do I know I'm doing that?
+
+00:25:08.500 --> 00:25:10.700
+So I can always say Control-H,
+
+00:25:11.000 --> 00:25:13.580
+capital A here to see what a button's going
+
+00:25:13.580 --> 00:25:15.840
+to do. And it tells me When I'm there,
+
+00:25:15.840 --> 00:25:18.140
+I'm at a hyperbole button,
+
+00:25:18.400 --> 00:25:23.440
+and the type is from category DOW.
+
+00:25:24.000 --> 00:25:25.120
+And what's it gonna do?
+
+00:25:25.120 --> 00:25:27.420
+It takes a mark, it's gonna do a message
+
+00:25:27.440 --> 00:25:29.880
+action. Okay, so let's try it.
+
+00:25:31.300 --> 00:25:32.800
+It tells me that's a date,
+
+00:25:32.800 --> 00:25:34.220
+and it falls on a Sunday,
+
+00:25:34.220 --> 00:25:35.820
+which is today. That's correct.
+
+00:25:36.100 --> 00:25:39.020
+So 2 days from today is a Tuesday.
+
+00:25:39.800 --> 00:25:43.400
+Beautiful. So we've just totally transformed
+
+00:25:44.840 --> 00:25:46.860
+what we can do with text.
+
+00:25:46.980 --> 00:25:48.900
+You notice there's no markup here.
+
+00:25:49.000 --> 00:25:53.440
+And this is working with all of the other
+
+00:25:53.440 --> 00:25:55.600
+implicit types that we have everywhere in
+
+00:25:55.600 --> 00:25:57.920
+Emacs. It's only going to match to this kind
+
+00:25:57.920 --> 00:26:00.560
+of pattern and anywhere else,
+
+00:26:00.720 --> 00:26:02.820
+you know, it just won't trigger that type.
+
+00:26:03.460 --> 00:26:06.480
+So lots of power. You just need to get
+
+00:26:06.480 --> 00:26:07.700
+started with Hyperbole.
+
+00:26:07.960 --> 00:26:10.860
+There's great documentation both inside the
+
+00:26:10.860 --> 00:26:12.180
+code and in the manual.
+
+00:26:12.520 --> 00:26:15.460
+There's a fast demo that you can start with
+
+00:26:15.520 --> 00:26:17.800
+and there's about 10 different videos.
+
+00:26:18.260 --> 00:26:21.220
+There'll be 3 presentations on hyperbole here
+
+00:26:21.560 --> 00:26:25.660
+at the conference, and I hope you've enjoyed
+
+00:26:25.760 --> 00:26:28.200
+this presentation. I'd love to answer your
+
+00:26:28.200 --> 00:26:31.200
+questions and get some new users for
+
+00:26:31.200 --> 00:26:36.040
+Hyperbole. So lastly, I'd like to thank my
+
+00:26:36.040 --> 00:26:38.040
+co-maintainer, Matt, who's going to speak
+
+00:26:38.040 --> 00:26:42.040
+later about the extensive test protocols we
+
+00:26:42.040 --> 00:26:45.920
+have in Hyperbole. Hyperbole works on every
+
+00:26:46.120 --> 00:26:47.860
+version of Emacs from 27.1
+
+00:26:48.480 --> 00:26:52.600
+up, and every operating system and Windows
+
+00:26:52.600 --> 00:26:56.120
+system that you use. And thanks so much to
+
+00:26:56.120 --> 00:26:58.680
+the volunteers and the speakers at EmacsConf.
+
+00:26:59.200 --> 00:27:02.000
+You do a great job, and we're all really
+
+00:27:02.000 --> 00:27:04.400
+appreciative that you take all the time that
+
+00:27:04.400 --> 00:27:06.240
+you do to make this happen.
+
+00:27:06.540 --> 00:27:07.620
+Thank you very much.
+
+00:27:09.960 --> 00:27:11.400
+[Speaker 1]: And thank you so much Bob.
+
+00:27:11.400 --> 00:27:14.680
+So I'll let you do the gymnastics to join us
+
+00:27:14.680 --> 00:27:16.440
+back on BBB and put your webcam.
+
+00:27:17.020 --> 00:27:18.840
+In the meantime, I'll invite people,
+
+00:27:19.120 --> 00:27:20.740
+as Sasha told you in the introduction,
+
+00:27:21.060 --> 00:27:23.600
+to go put your question in the pad.
+
+00:27:23.600 --> 00:27:25.900
+The link is on the talks page and also on
+
+00:27:25.900 --> 00:27:28.220
+IRC. So take your time.
+
+00:27:28.320 --> 00:27:29.900
+We've already got some people who've asked
+
+00:27:29.900 --> 00:27:33.060
+questions. You can also start joining the
+
+00:27:33.060 --> 00:27:35.140
+room. Let me just ping Sasha.
+
+00:27:35.540 --> 00:27:38.440
+Ping to open ID HyperAmp.
+
+00:27:39.280 --> 00:27:41.120
+So, you'll be able to join us on
+
+00:27:41.120 --> 00:27:43.260
+BigBlueButton as well to go chat with Bob
+
+00:27:43.260 --> 00:27:45.020
+more directly. I'm not sure if people have
+
+00:27:45.020 --> 00:27:46.480
+joined already. Not yet.
+
+00:27:50.220 --> 00:27:51.060
+So, Bob, what I'll do,
+
+00:27:51.060 --> 00:27:52.280
+we already have 4 questions.
+
+00:27:52.280 --> 00:27:54.080
+I'm gonna read them to you and you can take
+
+00:27:54.080 --> 00:27:54.900
+your time answering them,
+
+00:27:54.900 --> 00:27:57.340
+but we do have about 7 minutes until we go to
+
+00:27:57.340 --> 00:27:59.080
+the next talk, so we need to be a little bit
+
+00:28:00.420 --> 00:28:00.920
+[Speaker 0]: Okay.
+
+00:27:59.080 --> 00:28:03.260
+[Speaker 1]: chop-chop. All right, so reading the first
+
+00:28:03.260 --> 00:28:05.460
+questions, and I'm also going to display them
+
+00:28:05.460 --> 00:28:06.920
+for the stream to see,
+
+00:28:07.580 --> 00:28:09.740
+do buttons keep their metadata within the
+
+00:28:09.740 --> 00:28:12.380
+same file? E.g., would I see it if I change
+
+00:28:12.380 --> 00:28:13.940
+to fundamental mode, for instance?
+
+00:28:15.820 --> 00:28:19.340
+[Speaker 0]: So all of the things that I was showing you,
+
+00:28:19.340 --> 00:28:21.300
+implicit buttons have no metadata.
+
+00:28:21.900 --> 00:28:23.800
+That's the great thing about them,
+
+00:28:23.800 --> 00:28:27.400
+is you just type them in the buffer and what
+
+00:28:27.400 --> 00:28:30.020
+you see is all there is to that button and
+
+00:28:30.020 --> 00:28:33.300
+hyperbole generates all the smarts associated
+
+00:28:33.320 --> 00:28:35.780
+with them. When you create an explicit
+
+00:28:35.940 --> 00:28:38.680
+button, which I showed you 1 or 2 examples
+
+00:28:38.760 --> 00:28:42.720
+of, that metadata is, there is metadata with
+
+00:28:42.720 --> 00:28:45.860
+that, and that is stored in a separate file
+
+00:28:45.860 --> 00:28:47.860
+in the same directory called .hypb.
+
+00:28:49.240 --> 00:28:51.500
+So it's hidden away and it doesn't affect the
+
+00:28:51.500 --> 00:28:53.700
+format of the buffer that it's in.
+
+00:28:53.940 --> 00:28:56.540
+So again, what you see is what you get.
+
+00:28:56.600 --> 00:28:58.740
+You just see the delimiters around the
+
+00:28:58.740 --> 00:29:01.140
+explicit button and that's it.
+
+00:29:01.840 --> 00:29:04.500
+So Hyperbole takes care of all that for you.
+
+00:29:04.860 --> 00:29:08.360
+However, if you embed them into like a mail
+
+00:29:08.360 --> 00:29:09.440
+message, which you can,
+
+00:29:09.440 --> 00:29:12.180
+you can mail buttons, then there is a hidden
+
+00:29:12.180 --> 00:29:14.760
+area at the end of the mail message that
+
+00:29:14.760 --> 00:29:17.120
+encodes the metadata for the explicit
+
+00:29:17.120 --> 00:29:17.620
+buttons.
+
+00:29:19.540 --> 00:29:21.640
+[Speaker 1]: Ok, great. Next question.
+
+00:29:21.980 --> 00:29:24.560
+Is it possible to link to a file by its ID,
+
+00:29:24.720 --> 00:29:27.340
+like the node, org ID or some similar unique
+
+00:29:27.340 --> 00:29:28.120
+string inside?
+
+00:29:29.380 --> 00:29:32.620
+[Speaker 0]: Yes, In fact, that's 1 of the new features in
+
+00:29:33.280 --> 00:29:37.800
+9. You just made a return on an ID and it
+
+00:29:37.800 --> 00:29:40.780
+takes you right to the org node,
+
+00:29:40.840 --> 00:29:44.880
+works with org Rome and org straight out of
+
+00:29:44.880 --> 00:29:47.900
+the box. We're looking at ways to make it
+
+00:29:47.900 --> 00:29:50.040
+easier to just insert those in places,
+
+00:29:50.040 --> 00:29:52.840
+but since you have word keys that do that
+
+00:29:52.840 --> 00:29:55.600
+already, you can just insert them in any
+
+00:29:55.600 --> 00:29:58.360
+documents and Hyperbole will recognize them.
+
+00:29:58.360 --> 00:30:02.620
+I think In some cases you may need to put ID
+
+00:30:02.680 --> 00:30:05.400
+colon in front of the ID as well.
+
+00:30:05.740 --> 00:30:06.920
+Generally it works.
+
+00:30:08.560 --> 00:30:11.560
+[Speaker 1]: Ok, great. Moving on to the next question.
+
+00:30:12.120 --> 00:30:13.760
+Regarding the frames example,
+
+00:30:14.240 --> 00:30:16.320
+any thoughts or considerations for a
+
+00:30:16.320 --> 00:30:19.020
+transient interface or is this something 1
+
+00:30:19.020 --> 00:30:22.280
+could already toggle? Are you familiar with
+
+00:30:22.280 --> 00:30:23.160
+transient interface?
+
+00:30:23.560 --> 00:30:26.700
+[Speaker 0]: Yes, we don't use transient because we,
+
+00:30:26.720 --> 00:30:30.140
+you know, Hyperbole started out in 1991,
+
+00:30:30.520 --> 00:30:34.300
+though it's had much much work since then so
+
+00:30:34.300 --> 00:30:37.940
+we predate a lot of newer things in Emacs and
+
+00:30:37.940 --> 00:30:41.400
+then we just use them as as they Become
+
+00:30:41.400 --> 00:30:45.480
+useful too hyperbole We think the The mini
+
+00:30:45.480 --> 00:30:46.720
+buffer menu is pretty good.
+
+00:30:46.720 --> 00:30:48.780
+We could rewrite stuff in transient,
+
+00:30:48.900 --> 00:30:51.600
+but we haven't seen the need yet.
+
+00:30:52.760 --> 00:30:54.960
+Maybe high control, that might be a good
+
+00:30:54.960 --> 00:30:58.480
+candidate, because there are so many keys in
+
+00:30:58.480 --> 00:31:00.480
+it. So we'll think about that.
+
+00:31:00.480 --> 00:31:03.060
+But it would be a while before we got to it.
+
+00:31:04.780 --> 00:31:07.120
+[Speaker 1]: Right. Moving on to the next question.
+
+00:31:07.120 --> 00:31:08.760
+Sorry I got really confused because there's a
+
+00:31:08.760 --> 00:31:10.620
+French salut, you know,
+
+00:31:10.660 --> 00:31:12.940
+in the text of it. Is someone saying hi to me
+
+00:31:12.940 --> 00:31:14.380
+or something? All right,
+
+00:31:14.380 --> 00:31:16.960
+next question. Regarding multi-file search
+
+00:31:16.960 --> 00:31:22.080
+functionality, why not implement it within
+
+00:31:22.080 --> 00:31:24.920
+the existing framework of MetaX grep or
+
+00:31:24.920 --> 00:31:26.180
+similar built-in commands?
+
+00:31:26.360 --> 00:31:28.620
+Yet another search interface sounds a bit
+
+00:31:28.620 --> 00:31:29.120
+redundant.
+
+00:31:30.920 --> 00:31:34.120
+[Speaker 0]: Multi-file search, so HiRolo I guess you're
+
+00:31:34.120 --> 00:31:36.380
+talking about. I think what you missed there
+
+00:31:36.380 --> 00:31:39.440
+is that High Rollo matches to records,
+
+00:31:40.080 --> 00:31:42.860
+multi-line records, so it's not a
+
+00:31:42.860 --> 00:31:45.360
+line-oriented match, it's a record-oriented
+
+00:31:45.820 --> 00:31:50.760
+match. So Grep, you can say maybe give me 3
+
+00:31:50.760 --> 00:31:52.960
+lines of context, but what if I have a
+
+00:31:52.960 --> 00:31:56.100
+20-line record? I want to see the whole
+
+00:31:56.100 --> 00:31:59.060
+thing. And so, it's a full-text search
+
+00:31:59.060 --> 00:32:03.480
+interface, which lets you have any size
+
+00:32:04.220 --> 00:32:07.260
+entries or nodes in the match buffer.
+
+00:32:07.540 --> 00:32:10.760
+So that's 1 reason. MADAX grep works with
+
+00:32:10.760 --> 00:32:13.260
+hyperbole. I mean, you use it if you want and
+
+00:32:13.260 --> 00:32:16.080
+then you can hit MADA return on grep lines.
+
+00:32:16.480 --> 00:32:20.140
+So we basically take everything from POSIX
+
+00:32:20.320 --> 00:32:24.920
+and everything in Emacs and we try to make a
+
+00:32:24.920 --> 00:32:26.680
+lot of it simpler to use.
+
+00:32:26.680 --> 00:32:28.960
+We don't take away any of the functionality,
+
+00:32:29.480 --> 00:32:31.040
+we just augment it.
+
+00:32:32.780 --> 00:32:35.200
+[Speaker 1]: Right, and I think that's the logic for a lot
+
+00:32:35.200 --> 00:32:36.300
+of the packages, you know,
+
+00:32:36.300 --> 00:32:38.440
+the philosophy is just you create your little
+
+00:32:38.440 --> 00:32:40.280
+bit, your little island where you do your
+
+00:32:40.280 --> 00:32:42.160
+stuff. And if you can resonate with other
+
+00:32:42.160 --> 00:32:43.280
+islands so much the better.
+
+00:32:43.280 --> 00:32:45.600
+And it feels like between those islands,
+
+00:32:45.700 --> 00:32:48.380
+you know, hyperbole is a great way to connect
+
+00:32:48.380 --> 00:32:49.980
+things that are just text.
+
+00:32:50.140 --> 00:32:51.880
+So it's always been a lovely philosophy.
+
+00:32:52.200 --> 00:32:53.620
+There's always been a lovely philosophy
+
+00:32:53.620 --> 00:32:54.360
+behind it.
+
+00:32:55.240 --> 00:32:58.200
+[Speaker 0]: 1 other point I'd make there is that the
+
+00:32:58.200 --> 00:33:01.460
+Hyrolo also contains logical search
+
+00:33:01.460 --> 00:33:04.940
+operators. So when I typed in that string you
+
+00:33:04.940 --> 00:33:07.360
+could just as well type with like Lisp
+
+00:33:07.360 --> 00:33:09.140
+expressions, semi Lisp expressions.
+
+00:33:09.480 --> 00:33:13.460
+You can say open paren and word 1,
+
+00:33:13.940 --> 00:33:17.240
+word 2, close paren. You know you can have or
+
+00:33:17.240 --> 00:33:22.360
+and XOR and not and it'll do the search and
+
+00:33:22.360 --> 00:33:24.260
+just retrieve the entries,
+
+00:33:24.720 --> 00:33:27.620
+again, multi-line entries that match all of
+
+00:33:27.620 --> 00:33:29.660
+the criteria that you specified there.
+
+00:33:29.760 --> 00:33:31.120
+So that's fairly unique,
+
+00:33:31.120 --> 00:33:33.320
+I think. So you basically got a full text
+
+00:33:33.320 --> 00:33:35.840
+search platform with logical operators,
+
+00:33:36.380 --> 00:33:38.580
+instantly, you know, fast moving,
+
+00:33:38.680 --> 00:33:42.720
+rapid keys that you can control everything
+
+00:33:42.720 --> 00:33:45.280
+with and it's all integrated into this larger
+
+00:33:45.280 --> 00:33:45.780
+framework.
+
+00:33:47.780 --> 00:33:49.060
+[Speaker 1]: Okay, great. Well, Bob,
+
+00:33:49.060 --> 00:33:50.520
+you have 2 more questions,
+
+00:33:50.820 --> 00:33:53.760
+but there's a big 1 about what inspired you
+
+00:33:53.760 --> 00:33:56.440
+to write it back. It's being hyperbole around
+
+00:33:56.440 --> 00:33:57.360
+the time of its birth,
+
+00:33:57.360 --> 00:33:59.680
+but sadly, we only have about 1 more minute.
+
+00:34:00.040 --> 00:34:01.320
+So what I'm going to ask you to do,
+
+00:34:01.320 --> 00:34:02.780
+feel free to answer the question.
+
+00:34:02.800 --> 00:34:05.220
+If you go on BBB, I've pasted the link to the
+
+00:34:05.220 --> 00:34:06.980
+other pad. I think you can see it on your
+
+00:34:08.420 --> 00:34:11.020
+[Speaker 0]: I have the ether pad up.
+
+00:34:06.980 --> 00:34:11.820
+[Speaker 1]: computer as well. Right,
+
+00:34:11.820 --> 00:34:13.100
+so what are we going to do?
+
+00:34:14.860 --> 00:34:16.679
+I'm Sorry, I'm just a little bit pressed by
+
+00:34:16.679 --> 00:34:18.280
+time because it's not me controlling when we
+
+00:34:18.280 --> 00:34:19.340
+move on to the next talk,
+
+00:34:19.340 --> 00:34:21.679
+as was evidenced yesterday when we got yonked
+
+00:34:21.719 --> 00:34:24.000
+to the next talk. So Bob,
+
+00:34:24.000 --> 00:34:25.679
+feel free to take all the time you want to
+
+00:34:25.679 --> 00:34:26.580
+answer questions. People,
+
+00:34:26.580 --> 00:34:28.360
+if you wanna join the Big Blue Button room,
+
+00:34:28.360 --> 00:34:30.239
+the links are available and open on the talk
+
+00:34:30.239 --> 00:34:31.960
+page. You can join and ask as many questions
+
+00:34:31.960 --> 00:34:33.679
+as you want to Bob. And for us,
+
+00:34:33.679 --> 00:34:35.560
+with a live stream, we'll be moving on to the
+
+00:34:35.560 --> 00:34:37.280
+next talk in about 30 seconds.
+
+00:34:37.280 --> 00:34:39.400
+So Bob, all that's left is for me to thank
+
+00:34:39.400 --> 00:34:41.580
+you for your presentation again this year and
+
+00:34:43.520 --> 00:34:44.560
+[Speaker 0]: Thank you, Leo.
+
+00:34:41.580 --> 00:34:45.820
+[Speaker 1]: for all your answers. All right.
+
+00:34:45.820 --> 00:34:47.699
+Bye bye, Bob. And we'll be moving on to the
+
+00:34:47.699 --> 00:34:49.080
+next talk in about 10 seconds.
+
+00:34:49.080 --> 00:34:53.800
+See you in a bit. All right,
+
+00:34:53.800 --> 00:34:56.139
+Bob, we are off air I think now.
+
+00:34:56.139 --> 00:34:57.720
+Thank you so much. I need to get moving for
+
+00:34:59.320 --> 00:35:02.320
+[Speaker 0]: Okay, is somebody gonna keep writing answers
+
+00:35:02.500 --> 00:35:04.540
+in here or I need to type them in?
+
+00:34:57.720 --> 00:35:06.260
+[Speaker 1]: the next talk. It's probably best now if you
+
+00:35:06.260 --> 00:35:09.440
+read the questions on your own and answer
+
+00:35:09.440 --> 00:35:11.040
+them. We'll collate everything together,
+
+00:35:11.040 --> 00:35:12.480
+we'd just like to have your answers.
+
+00:35:15.060 --> 00:35:17.180
+[Speaker 0]: I hope some people will join the BBB.
+
+00:35:19.000 --> 00:35:21.380
+[Speaker 1]: it in my... All right,
+
+00:35:21.380 --> 00:35:21.880
+bye-bye.
+
+00:35:17.780 --> 00:35:23.300
+[Speaker 0]: But I'll start. I'll put Bye-bye.
+
+00:35:24.220 --> 00:35:28.580
+So let me take a second here to see what
+
+00:35:28.580 --> 00:35:32.980
+questions we have. Did we cover that?
+
+00:35:36.240 --> 00:35:42.900
+OK. The point is why not upstream search
+
+00:35:42.980 --> 00:35:46.580
+interface? Could you clarify that question?
+
+00:35:46.840 --> 00:35:51.380
+I don't quite know what that means.
+
+00:35:51.380 --> 00:35:53.760
+So I'll go on to the next 1 and come back to
+
+00:35:53.760 --> 00:35:57.680
+that. Hyperlinks been around for a number of
+
+00:35:57.680 --> 00:35:59.820
+years now. What inspired you to write it back
+
+00:35:59.820 --> 00:36:01.500
+around the time of its birth?
+
+00:36:01.800 --> 00:36:03.140
+Well, that's a great question.
+
+00:36:04.700 --> 00:36:07.360
+It was born before the World Wide Web,
+
+00:36:07.360 --> 00:36:09.300
+actually. And it was right before.
+
+00:36:10.120 --> 00:36:13.100
+I remember we were in the midst of a version
+
+00:36:13.840 --> 00:36:16.300
+when the first version of the web occurred.
+
+00:36:16.560 --> 00:36:19.840
+And I was thinking that there was going to be
+
+00:36:19.840 --> 00:36:22.700
+an information explosion of unstructured
+
+00:36:22.960 --> 00:36:27.140
+information. And like we needed to have much
+
+00:36:27.140 --> 00:36:30.920
+better tools to be able to manage say like
+
+00:36:30.920 --> 00:36:36.740
+5,000 email messages coming in and all sorts
+
+00:36:36.740 --> 00:36:39.260
+of non-database-oriented information
+
+00:36:39.480 --> 00:36:42.020
+structures. So I said we need an advanced
+
+00:36:42.180 --> 00:36:46.080
+interactive hypertext system and it needs to
+
+00:36:46.080 --> 00:36:49.320
+work with all the general capabilities that
+
+00:36:49.320 --> 00:36:54.100
+we use like email and our document production
+
+00:36:54.240 --> 00:36:58.500
+systems. So I was doing research at the time
+
+00:36:58.500 --> 00:37:04.200
+at a university And I decided to work on
+
+00:37:04.200 --> 00:37:06.140
+something that we called personalized
+
+00:37:06.420 --> 00:37:07.520
+information environments.
+
+00:37:07.900 --> 00:37:10.120
+And there's a paper about this out there if
+
+00:37:10.120 --> 00:37:12.040
+you want to dig it out on the web.
+
+00:37:12.900 --> 00:37:15.360
+So Pies, as they were called,
+
+00:37:16.320 --> 00:37:20.040
+was an architecture which would have a bunch
+
+00:37:20.040 --> 00:37:24.100
+of managers, like Hyperbole was 1 of the
+
+00:37:24.100 --> 00:37:25.820
+managers, the hypertext manager,
+
+00:37:26.520 --> 00:37:29.440
+and then a bunch of point tools that would
+
+00:37:29.440 --> 00:37:30.720
+leverage the managers,
+
+00:37:30.800 --> 00:37:33.580
+like an email reader would be a point tool
+
+00:37:33.680 --> 00:37:36.140
+that would leverage the hypertext manager.
+
+00:37:36.780 --> 00:37:39.480
+And so the first, I did in fact write
+
+00:37:39.480 --> 00:37:40.520
+something called PyMail,
+
+00:37:41.460 --> 00:37:43.840
+which was very much Gmail-like,
+
+00:37:44.660 --> 00:37:47.640
+before Gmail. And so inside,
+
+00:37:48.100 --> 00:37:51.300
+and I did a, it was like our mail in a way,
+
+00:37:51.680 --> 00:37:54.020
+but inside your our mail summaries,
+
+00:37:54.100 --> 00:37:57.180
+for example, you could have explicit buttons
+
+00:37:57.180 --> 00:38:01.120
+embedded and that were drawn from the subject
+
+00:38:01.120 --> 00:38:02.300
+of your email message,
+
+00:38:02.400 --> 00:38:06.180
+and they'd work just like the regular button.
+
+00:38:06.300 --> 00:38:07.540
+So it was very flexible,
+
+00:38:07.700 --> 00:38:11.660
+and it had rule-based processing and things.
+
+00:38:11.820 --> 00:38:13.520
+So Hyperbole came out of that,
+
+00:38:13.520 --> 00:38:15.040
+and it's come a long way,
+
+00:38:15.200 --> 00:38:20.360
+but it's still a very useful core hypertext
+
+00:38:20.480 --> 00:38:22.040
+system, hypermedia system,
+
+00:38:22.040 --> 00:38:26.580
+I should say. Are you familiar with the
+
+00:38:26.580 --> 00:38:28.780
+Embark package? I am a bit.
+
+00:38:28.820 --> 00:38:30.520
+I've just started using it.
+
+00:38:30.520 --> 00:38:31.900
+I think there's some overlapping
+
+00:38:32.040 --> 00:38:34.200
+functionality with hyperbole.
+
+00:38:34.340 --> 00:38:39.360
+Yes, we've found that people over time have
+
+00:38:39.360 --> 00:38:41.600
+enjoyed hyperbole and have started
+
+00:38:41.600 --> 00:38:43.940
+replicating some of its features,
+
+00:38:43.940 --> 00:38:45.880
+you know, small amounts of the features.
+
+00:38:47.680 --> 00:38:51.340
+I talked to, I hope I don't miss his name,
+
+00:38:51.340 --> 00:38:56.000
+but O'Adam who writes that once in a while we
+
+00:38:56.000 --> 00:38:59.480
+dialogue and I think Embark is great,
+
+00:38:59.480 --> 00:39:04.500
+you know, I'll give him some pointers too and
+
+00:39:04.500 --> 00:39:08.040
+he thinks that Embark and hyperbole are quite
+
+00:39:08.040 --> 00:39:10.740
+compatible too, just like organ hyperbole.
+
+00:39:11.120 --> 00:39:13.080
+So that's how we like to keep it.
+
+00:39:14.540 --> 00:39:18.160
+Some people prefer just a small package of
+
+00:39:18.160 --> 00:39:21.100
+mBARC, and it does different things than what
+
+00:39:21.100 --> 00:39:23.800
+Hyperbole does. So I think you use all of
+
+00:39:23.800 --> 00:39:27.540
+these tools together, and they can work very
+
+00:39:27.540 --> 00:39:33.960
+well together. Any other questions?
+
+00:39:34.280 --> 00:39:38.300
+Anybody still here? If not,
+
+00:39:38.440 --> 00:39:41.180
+probably people are off to another talk.
+
+00:39:41.940 --> 00:39:47.160
+So thank you very much And again look for
+
+00:39:47.160 --> 00:39:51.840
+Hyperbole version 9 in the next week.
+
+00:39:53.740 --> 00:39:56.880
+Thanks very much. Bye.
+
+00:40:00.620 --> 00:40:07.120
+Should I leave BBB? Oh Alpha Papa's here.
+
+00:40:07.120 --> 00:40:16.040
+Hey. Good to see you. Alright,
+
+00:40:16.040 --> 00:40:22.740
+well... Well, I'll stay for another minute,
+
+00:40:22.820 --> 00:40:27.280
+but I think I'm going to go off video 2 and
+
+00:40:27.280 --> 00:40:29.780
+start listening to another talk.
+
+00:40:30.660 --> 00:40:31.480
+Thanks, everyone. Thanks everyone.
+
+00:40:56.040 --> 00:40:56.960
+Yes, I can hear you. Yes,
+
+00:40:58.860 --> 00:41:00.060
+[Speaker 1]: Have you been answering questions?
+
+00:40:56.960 --> 00:41:03.700
+[Speaker 0]: I can hear you. finished answering the
+
+00:41:03.700 --> 00:41:05.200
+questions. We're all done.
+
+00:41:00.060 --> 00:41:07.360
+[Speaker 1]: I Okay, cool. Well, what I'm going to do,
+
+00:41:07.360 --> 00:41:09.140
+I'm going to close the room unless you want
+
+00:41:09.140 --> 00:41:10.140
+to go a little longer,
+
+00:41:10.140 --> 00:41:11.880
+because this talk that we're playing right
+
+00:41:11.880 --> 00:41:13.940
+now is finishing really quick and we don't
+
+00:41:13.940 --> 00:41:15.140
+have a Q&A afterwards.
+
+00:41:15.300 --> 00:41:19.040
+So, do you want to stay on air or something?
+
+00:41:19.440 --> 00:41:21.680
+[Speaker 0]: Yeah, if you let people know to come back,
+
+00:41:21.680 --> 00:41:23.320
+because someone went to go hear that
+
+00:41:23.320 --> 00:41:24.900
+presentation, I can stay.
+
+00:41:25.920 --> 00:41:27.880
+[Speaker 1]: Sure, I'll make an announcement then.
+
+00:41:27.880 --> 00:41:29.680
+And you can stay, we'll just put on BBB.
+
+00:41:29.680 --> 00:41:31.840
+You can stay muted until people join,
+
+00:41:31.840 --> 00:41:33.840
+but this way it opens up menus for people to
+
+00:41:33.840 --> 00:41:36.060
+join and if no 1 shows up in 5 minutes we'll
+
+00:41:36.060 --> 00:41:38.080
+all go on break. Does that sound okay?
+
+00:41:38.680 --> 00:41:40.020
+[Speaker 0]: Great, thank you.
+
+00:41:40.520 --> 00:41:44.340
+[Speaker 1]: Cool, I'll go back to the management in the
+
+00:41:44.340 --> 00:41:45.660
+background and I'll let you know.
+
+00:43:25.760 --> 00:43:27.540
+Okay, Bob, I've won the stream.
+
+00:43:27.660 --> 00:43:28.940
+We are joining it now.
+
+00:43:28.940 --> 00:43:30.380
+We've got about 5 seconds.
+
+00:43:41.940 --> 00:43:43.580
+And I think we are back.
+
+00:43:49.240 --> 00:43:51.300
+so we are gone, Bob, please.
+
+00:43:45.340 --> 00:43:53.260
+[Speaker 0]: Hi. So, yeah, I was going to say,
+
+00:43:54.100 --> 00:43:57.160
+can we see if anybody comes back in the room?
+
+00:43:57.160 --> 00:43:58.120
+How do you tell?
+
+00:44:01.380 --> 00:44:03.740
+[Speaker 1]: You should be able to show on the left,
+
+00:44:03.740 --> 00:44:04.920
+you've got on BbBlueButton,
+
+00:44:04.920 --> 00:44:06.380
+you've got a button, I'm showing it on the
+
+00:44:06.380 --> 00:44:08.440
+screen, but you've got a little button that
+
+00:44:08.440 --> 00:44:10.420
+allows you to show the people joining.
+
+00:44:10.840 --> 00:44:15.380
+So, hello everyone. Let's see if you had more
+
+00:44:15.380 --> 00:44:17.080
+question on your pad that we could be taking
+
+00:44:17.080 --> 00:44:19.040
+in the meantime, just give me a second to
+
+00:44:19.040 --> 00:44:19.240
+find
+
+00:44:19.240 --> 00:44:23.500
+[Speaker 0]: your pad. Here we go, an error occurred.
+
+00:44:31.820 --> 00:44:33.220
+[Speaker 1]: All right, it's loading up.
+
+00:44:25.680 --> 00:44:37.840
+[Speaker 0]: Okay. Wow. Feels like there's an AI writing
+
+00:44:37.960 --> 00:44:39.760
+this stuff on the pad.
+
+00:44:41.120 --> 00:44:44.740
+Has it? Is this the last pad?
+
+00:44:45.600 --> 00:44:47.080
+Oh no, this is a different 1,
+
+00:44:49.840 --> 00:44:51.520
+[Speaker 1]: Which question are you looking at now?
+
+00:44:47.080 --> 00:44:53.820
+[Speaker 0]: sorry. It was a different pad,
+
+00:44:55.840 --> 00:44:56.460
+[Speaker 1]: Oh right.
+
+00:44:53.820 --> 00:44:57.109
+[Speaker 0]: that was the problem. Okay,
+
+00:44:57.260 --> 00:44:59.540
+here we go. Okay, I'm back.
+
+00:45:00.540 --> 00:45:01.860
+So, yeah, it looks like...
+
+00:45:02.260 --> 00:45:03.980
+Is anybody back? Send,
+
+00:45:04.120 --> 00:45:07.180
+if you're here, send a chat message.
+
+00:45:08.520 --> 00:45:10.020
+[Speaker 1]: Yeah, because it's been something.
+
+00:45:10.640 --> 00:45:14.240
+You have, apparently, whenever we leave those
+
+00:45:14.320 --> 00:45:18.220
+BBB chat room open, the moment we go off air,
+
+00:45:18.260 --> 00:45:20.280
+people start joining and asking a lot of very
+
+00:45:20.280 --> 00:45:22.200
+interesting questions and you know that's all
+
+00:45:22.200 --> 00:45:24.280
+well and good, we'll be able to put them on
+
+00:45:24.280 --> 00:45:26.280
+the page later on. But it'd be great if you
+
+00:45:26.280 --> 00:45:28.260
+could also have those discussions when we are
+
+00:45:28.260 --> 00:45:30.140
+live because a lot of people would benefit
+
+00:45:30.140 --> 00:45:32.120
+from the brilliance that goes on in this
+
+00:45:32.120 --> 00:45:34.740
+room. So please don't be shy,
+
+00:45:37.340 --> 00:45:39.900
+[Speaker 0]: So we're on the general stream now?
+
+00:45:34.740 --> 00:45:41.780
+[Speaker 1]: join and talk. Yep, we are back on the
+
+00:45:41.780 --> 00:45:46.080
+general stream. We have about until 10 of the
+
+00:45:46.080 --> 00:45:48.180
+next hour, which is 19 minutes.
+
+00:45:48.760 --> 00:45:52.540
+[Speaker 0]: Just- Why don't you and I talk?
+
+00:45:52.540 --> 00:45:56.180
+So have you ever tried hyperbole,
+
+00:45:56.400 --> 00:45:56.900
+Leo?
+
+00:45:58.180 --> 00:46:00.220
+[Speaker 1]: I have never, but You know,
+
+00:46:00.220 --> 00:46:03.380
+it feels like every year when you present
+
+00:46:03.380 --> 00:46:05.140
+something, it feels like I already know so
+
+00:46:05.140 --> 00:46:07.580
+much. Because of the buttons,
+
+00:46:08.040 --> 00:46:10.080
+it feels like it's also something that we've
+
+00:46:10.080 --> 00:46:12.440
+reinvented many times in Emacs.
+
+00:46:12.440 --> 00:46:13.940
+It's like conversion to evolution,
+
+00:46:14.020 --> 00:46:16.540
+except you're the 1 who started ahead of
+
+00:46:16.540 --> 00:46:17.420
+everyone else.
+
+00:46:17.860 --> 00:46:19.700
+[Speaker 0]: Well, that's a good point because,
+
+00:46:19.940 --> 00:46:23.200
+you know, we have, Emacs itself has push
+
+00:46:23.200 --> 00:46:25.520
+buttons, which you see like in the help
+
+00:46:25.520 --> 00:46:27.540
+buffers. And those used to,
+
+00:46:27.540 --> 00:46:29.840
+we didn't really do anything with those,
+
+00:46:30.040 --> 00:46:32.780
+but now we've subsumed them as implicit
+
+00:46:32.800 --> 00:46:35.340
+buttons as well. So you're made a return,
+
+00:46:35.580 --> 00:46:38.500
+we'll work on those anywhere too.
+
+00:46:38.740 --> 00:46:41.820
+So, we're trying to get,
+
+00:46:42.260 --> 00:46:45.920
+you use 1 key, right? To control every type
+
+00:46:45.920 --> 00:46:47.080
+of button that you have.
+
+00:46:47.080 --> 00:46:48.420
+It works on org links,
+
+00:46:48.560 --> 00:46:51.800
+org buttons anywhere, or URLs.
+
+00:46:53.240 --> 00:46:54.440
+Because it's so simple.
+
+00:46:54.520 --> 00:46:58.820
+All you need is like 5 to 10 lines of code to
+
+00:46:58.820 --> 00:47:02.760
+map. You map the pattern that represents a
+
+00:47:02.760 --> 00:47:05.080
+concept, right? And then you can create an
+
+00:47:05.080 --> 00:47:07.720
+infinite number of those buttons from that
+
+00:47:07.720 --> 00:47:09.520
+type. That's what's really cool about
+
+00:47:09.520 --> 00:47:13.060
+Hyperbole, is say I have a 500 page document
+
+00:47:13.280 --> 00:47:15.600
+and it uses a really weird format for
+
+00:47:15.600 --> 00:47:17.060
+cross-referencing, right?
+
+00:47:17.220 --> 00:47:22.320
+I write my 3 lines of pattern match to work
+
+00:47:22.320 --> 00:47:24.200
+with that. And then everywhere throughout
+
+00:47:24.200 --> 00:47:25.960
+that document and the hundreds of other
+
+00:47:25.960 --> 00:47:27.680
+documents that will be created with that
+
+00:47:27.680 --> 00:47:30.900
+format, they're all live buttons instantly.
+
+00:47:31.280 --> 00:47:33.240
+Nothing changed about the document.
+
+00:47:34.220 --> 00:47:35.500
+That's really cool. You know,
+
+00:47:35.500 --> 00:47:37.860
+word mode, we have global word buttons,
+
+00:47:37.940 --> 00:47:42.040
+but mostly it has to be embedded within an
+
+00:47:42.040 --> 00:47:44.760
+org file, right? And follow that syntax.
+
+00:47:45.580 --> 00:47:51.900
+With hyperbole, it's like we can adapt as the
+
+00:47:51.900 --> 00:47:55.300
+world adapts around us to whatever formats
+
+00:47:55.320 --> 00:47:56.940
+people want to use that day.
+
+00:47:56.940 --> 00:47:59.380
+And you can even change things to look the
+
+00:47:59.380 --> 00:48:02.200
+way you want, right, and have your own
+
+00:48:02.440 --> 00:48:04.860
+cross-references. There's something built
+
+00:48:04.860 --> 00:48:07.560
+into Hyperbole that's not really active,
+
+00:48:08.220 --> 00:48:13.120
+which was sort of along the Zettelkasten way.
+
+00:48:13.780 --> 00:48:15.440
+We wrote this a long time ago.
+
+00:48:15.440 --> 00:48:16.960
+It's called hib-doc.el,
+
+00:48:19.120 --> 00:48:22.200
+and it's a card catalog notion.
+
+00:48:22.200 --> 00:48:25.820
+So it uses the high rollo in the background
+
+00:48:26.160 --> 00:48:30.180
+but it lets you create these forms that are
+
+00:48:30.180 --> 00:48:32.800
+cards that you fill out with whatever kind of
+
+00:48:32.800 --> 00:48:35.360
+data you want and then it gives you the full
+
+00:48:35.360 --> 00:48:38.520
+text searching across the cards and each card
+
+00:48:38.520 --> 00:48:41.760
+has a unique ID that you can reference
+
+00:48:41.820 --> 00:48:45.240
+similar to org IDs but these are human
+
+00:48:45.240 --> 00:48:49.860
+readable and human typable and so you can you
+
+00:48:49.860 --> 00:48:52.940
+can just have a cross-reference to any doc ID
+
+00:48:52.960 --> 00:48:56.100
+and essentially create what Engelbart used to
+
+00:48:56.100 --> 00:49:00.520
+call a journal, which is all these IDs on
+
+00:49:00.520 --> 00:49:03.220
+documents that point you directly to the
+
+00:49:03.220 --> 00:49:05.640
+document archive so that you could have like
+
+00:49:05.640 --> 00:49:10.020
+your internal publishing system and you know
+
+00:49:10.020 --> 00:49:12.940
+it's very simple to do and it's just 1 module
+
+00:49:13.420 --> 00:49:14.660
+added on to Hyperbole.
+
+00:49:15.920 --> 00:49:19.140
+[Speaker 1]: Yeah it's especially interesting for me you
+
+00:49:19.140 --> 00:49:21.140
+know because coming back to the side of
+
+00:49:21.140 --> 00:49:23.400
+convergent evolutions it's funny because the
+
+00:49:23.400 --> 00:49:24.880
+parameters are a little different.
+
+00:49:24.920 --> 00:49:26.260
+For us with org buttons,
+
+00:49:26.260 --> 00:49:29.340
+we're very happy. A lot of the stuff during
+
+00:49:29.340 --> 00:49:31.360
+EmacsConf is run with org mode,
+
+00:49:31.360 --> 00:49:34.340
+like we have Elisp going everywhere to
+
+00:49:34.540 --> 00:49:37.320
+compile a lot of org properties,
+
+00:49:38.080 --> 00:49:39.640
+like speaker information,
+
+00:49:39.660 --> 00:49:41.480
+for instance, how long the talk is,
+
+00:49:41.480 --> 00:49:42.800
+the title, and all this.
+
+00:49:42.800 --> 00:49:44.760
+We have all of this in an org file,
+
+00:49:44.760 --> 00:49:46.020
+which we use as a database,
+
+00:49:46.220 --> 00:49:47.800
+but then we can do so much stuff.
+
+00:49:47.800 --> 00:49:50.740
+We can send email and we can update the
+
+00:49:50.740 --> 00:49:52.200
+schedule. By the way, if you're interested in
+
+00:49:52.200 --> 00:49:54.280
+this, we'll have a talk on the DevTrack in
+
+00:49:54.280 --> 00:49:56.640
+the afternoon today that Sacha did and it's
+
+00:49:56.640 --> 00:49:58.140
+wonderful. I'm just teasing it.
+
+00:49:58.140 --> 00:49:59.040
+[Speaker 0]: Oh, that's great.
+
+00:50:00.060 --> 00:50:01.140
+[Speaker 1]: But coming back to Hyperbole,
+
+00:50:01.640 --> 00:50:04.000
+for you, it feels like the parameters were
+
+00:50:04.000 --> 00:50:06.560
+slightly different because the feeling was,
+
+00:50:06.560 --> 00:50:09.020
+I just want a tunnel that can work between
+
+00:50:09.020 --> 00:50:10.440
+any type of files. Now,
+
+00:50:10.440 --> 00:50:11.740
+it's all well and good.
+
+00:50:11.740 --> 00:50:14.540
+Org-Rome, D-Note, and all the stuff like
+
+00:50:14.540 --> 00:50:16.860
+this, they create bidirectional links.
+
+00:50:17.080 --> 00:50:19.540
+But it's only between org-mode files.
+
+00:50:19.840 --> 00:50:22.040
+Whereas what you're achieving with Hyperbole,
+
+00:50:22.260 --> 00:50:24.720
+and you've done it much earlier than everyone
+
+00:50:24.720 --> 00:50:27.420
+else, is that you have this concept
+
+00:50:27.660 --> 00:50:29.440
+regardless of the type of file that you're
+
+00:50:29.440 --> 00:50:32.520
+using. And I find this to be beautiful.
+
+00:50:32.900 --> 00:50:35.280
+Like 5 years ago, whenever you were talking
+
+00:50:35.280 --> 00:50:37.280
+about hyperbole, I did not have a concrete
+
+00:50:37.280 --> 00:50:38.540
+idea of what was happening.
+
+00:50:38.640 --> 00:50:40.360
+But ever since I've gone through the journey
+
+00:50:40.360 --> 00:50:42.380
+of really understanding what the El Caster
+
+00:50:42.380 --> 00:50:45.000
+method were about, it feels like you were
+
+00:50:45.720 --> 00:50:46.980
+foreigners in the topic.
+
+00:50:46.980 --> 00:50:48.540
+Obviously, you've mentioned the mother of all
+
+00:50:48.540 --> 00:50:50.240
+demos by Edward Engelbart,
+
+00:50:50.740 --> 00:50:54.100
+but those ideas are not novel,
+
+00:50:54.340 --> 00:50:56.820
+but it feels like only now are they starting
+
+00:50:56.820 --> 00:50:58.520
+to be appropriated by people,
+
+00:50:58.520 --> 00:50:59.800
+especially in free software,
+
+00:50:59.800 --> 00:51:01.200
+and it's really good to see.
+
+00:51:01.280 --> 00:51:02.440
+I'm really excited to,
+
+00:51:02.440 --> 00:51:04.600
+well, have my small part to play in this.
+
+00:51:04.600 --> 00:51:06.980
+And I'm also excited to be able to chat with
+
+00:51:06.980 --> 00:51:10.140
+you and people like Bastien and other people
+
+00:51:10.240 --> 00:51:11.400
+about all those topics.
+
+00:51:12.340 --> 00:51:13.780
+[Speaker 0]: Yeah, I think, you know,
+
+00:51:13.940 --> 00:51:16.640
+it's fun that we can laugh now about when
+
+00:51:16.640 --> 00:51:20.020
+people say people are still using Emacs,
+
+00:51:20.020 --> 00:51:22.800
+you know, is because they're not used,
+
+00:51:22.800 --> 00:51:24.160
+certain people aren't using it.
+
+00:51:24.160 --> 00:51:26.880
+They have no idea of how far it's come and
+
+00:51:26.880 --> 00:51:28.720
+how powerful it is. And,
+
+00:51:28.780 --> 00:51:31.520
+you know, we're leveraging Elisp heavily,
+
+00:51:31.560 --> 00:51:33.940
+obviously, but if you look at the definition
+
+00:51:34.300 --> 00:51:37.800
+of our types, they look exactly like DIP
+
+00:51:37.800 --> 00:51:41.180
+funds in ELisp. And we've been able to do
+
+00:51:41.180 --> 00:51:42.780
+that because of Lisp macros.
+
+00:51:43.860 --> 00:51:46.400
+You know, we so we basically have our own
+
+00:51:46.400 --> 00:51:48.300
+domain specific language there,
+
+00:51:48.420 --> 00:51:51.240
+but there's almost nothing to learn because
+
+00:51:51.340 --> 00:51:53.460
+it's just like what you know from UList.
+
+00:51:54.200 --> 00:51:57.120
+So again, you know, taking the concept and
+
+00:51:57.120 --> 00:51:59.700
+leveraging it, abstracting it and leveraging
+
+00:51:59.760 --> 00:52:02.980
+it multiple times gives you a lot of power.
+
+00:52:03.660 --> 00:52:06.060
+And people, you know, somebody said the other
+
+00:52:06.060 --> 00:52:07.500
+day, and I said, finally,
+
+00:52:07.760 --> 00:52:10.360
+this quote happened. He said,
+
+00:52:11.000 --> 00:52:15.060
+there's so many things that I do with
+
+00:52:15.060 --> 00:52:17.200
+hyperbole every day that I forget that I'm
+
+00:52:17.200 --> 00:52:21.440
+using hyperbole. Because it's just so
+
+00:52:21.440 --> 00:52:23.580
+embedded in this guy's workflow.
+
+00:52:23.680 --> 00:52:25.440
+And that's really how I use it.
+
+00:52:25.440 --> 00:52:27.380
+You know, there are features in there,
+
+00:52:27.440 --> 00:52:29.060
+can't use everything, right?
+
+00:52:29.060 --> 00:52:31.860
+So there are features that I don't use,
+
+00:52:32.040 --> 00:52:35.580
+but I use a lot of things and it's all like
+
+00:52:35.580 --> 00:52:37.580
+muscle memory, just like the keyboard,
+
+00:52:38.200 --> 00:52:39.740
+the Emacs key bindings.
+
+00:52:39.960 --> 00:52:42.180
+So it's very exciting to get to that level.
+
+00:52:42.180 --> 00:52:44.320
+And now, you know, we haven't started with
+
+00:52:44.320 --> 00:52:46.940
+the chatbots or any of the AI integration,
+
+00:52:47.300 --> 00:52:49.480
+but I'm starting to think about that a little
+
+00:52:49.480 --> 00:52:53.480
+bit and how we'll interface to that world and
+
+00:52:53.480 --> 00:52:55.320
+I think it's going to be very exciting.
+
+00:52:56.040 --> 00:52:58.340
+[Speaker 1]: Yeah, likewise and I think it harks back to
+
+00:52:58.340 --> 00:53:00.660
+what we were talking about before when we
+
+00:53:00.660 --> 00:53:03.700
+mentioned Hyperbole being a package inside of
+
+00:53:03.700 --> 00:53:05.300
+an ecosystem that is Emacs.
+
+00:53:05.860 --> 00:53:08.040
+But it's not because something is well
+
+00:53:08.040 --> 00:53:10.560
+circumscribed in terms of feature set that it
+
+00:53:10.560 --> 00:53:12.880
+does not influence everything around it.
+
+00:53:12.880 --> 00:53:15.060
+Like Hyperbole can be used with something
+
+00:53:15.060 --> 00:53:18.080
+completely at the opposite end of what it was
+
+00:53:18.080 --> 00:53:21.380
+intended for, just because it provides a good
+
+00:53:21.380 --> 00:53:23.860
+set of tools that can be used wherever else
+
+00:53:23.860 --> 00:53:26.100
+you want in Emacs. And it's the same thing
+
+00:53:26.100 --> 00:53:27.980
+with Org Mode, it's the same thing with many,
+
+00:53:27.980 --> 00:53:29.280
+many different things.
+
+00:53:29.440 --> 00:53:32.820
+And it feels like integrating AIs,
+
+00:53:33.400 --> 00:53:36.920
+or generative AIs, into Emacs would provide
+
+00:53:39.620 --> 00:53:42.340
+such a tool that could apply to any kind of
+
+00:53:42.340 --> 00:53:45.060
+other major mode or any kind of other use.
+
+00:53:45.060 --> 00:53:46.640
+So I'm also excited to see this.
+
+00:53:46.640 --> 00:53:50.280
+It feels like we are sitting at the brink of
+
+00:53:50.280 --> 00:53:52.580
+a revolution. I'm not going to say the acne
+
+00:53:52.580 --> 00:53:54.440
+stuff, but it definitely feels like right
+
+00:53:54.440 --> 00:53:57.560
+now, by trying to see what we can do with AI,
+
+00:53:57.560 --> 00:53:59.380
+it's definitely going to change the way not
+
+00:53:59.380 --> 00:54:01.560
+only we program, but also the way we take
+
+00:54:01.560 --> 00:54:03.160
+notes and the way we design stuff,
+
+00:54:03.160 --> 00:54:05.220
+arcing back to what John Wigley said
+
+00:54:05.220 --> 00:54:08.660
+yesterday about his draft program on macOS.
+
+00:54:09.800 --> 00:54:10.940
+Bob, if you don't mind,
+
+00:54:11.040 --> 00:54:13.100
+I see people typing questions and I also see
+
+00:54:13.100 --> 00:54:14.820
+people joining on people buttons,
+
+00:54:14.820 --> 00:54:16.920
+so I'm going to read you the 2 questions that
+
+00:54:16.920 --> 00:54:18.260
+have been added. Is that okay?
+
+00:54:19.200 --> 00:54:20.580
+[Speaker 0]: Great, go for it.
+
+00:54:21.240 --> 00:54:23.140
+[Speaker 1]: Cool, so first question.
+
+00:54:23.320 --> 00:54:25.240
+Wow, what you're describing now,
+
+00:54:25.240 --> 00:54:27.520
+and that's when you were talking about the
+
+00:54:27.520 --> 00:54:31.840
+bi-directional links and especially the last
+
+00:54:31.840 --> 00:54:33.080
+question in its entirety,
+
+00:54:33.540 --> 00:54:35.440
+What you're describing now reminds me a lot
+
+00:54:35.440 --> 00:54:37.440
+about HyperCard that I grew up on.
+
+00:54:37.440 --> 00:54:39.220
+Do you know if Hyperbole inspired Bill
+
+00:54:39.220 --> 00:54:41.040
+Atkinson or if you were inspired by
+
+00:54:41.040 --> 00:54:43.040
+HyperCard? Or were there just a lot of
+
+00:54:43.040 --> 00:54:44.860
+thoughts about hyper-contextuality around
+
+00:54:44.860 --> 00:54:45.520
+that time?
+
+00:54:46.780 --> 00:54:50.100
+[Speaker 0]: Alright, well this is another interesting
+
+00:54:50.320 --> 00:54:52.360
+anecdote. I don't know if it's true or not,
+
+00:54:52.360 --> 00:54:57.880
+but I think HyperCard predated our stuff.
+
+00:54:57.880 --> 00:55:00.480
+It was right around the same time when
+
+00:55:00.480 --> 00:55:02.420
+Hyperbole was starting out.
+
+00:55:02.540 --> 00:55:05.100
+But when I was doing the Pi research,
+
+00:55:06.040 --> 00:55:08.800
+I worked at, when I left school,
+
+00:55:08.800 --> 00:55:11.280
+I worked at Motorola, and we did a lot of
+
+00:55:11.280 --> 00:55:13.040
+work with Apple back then.
+
+00:55:13.180 --> 00:55:15.480
+And somebody came back and he said,
+
+00:55:15.480 --> 00:55:18.000
+you know, the people over there have seen
+
+00:55:19.120 --> 00:55:21.940
+your Pi research and they really liked it a
+
+00:55:21.940 --> 00:55:26.020
+lot. And so they were leveraging that when
+
+00:55:26.020 --> 00:55:28.440
+they decided to create the division that they
+
+00:55:28.440 --> 00:55:33.280
+called Apple Pi, which was the originator of
+
+00:55:33.280 --> 00:55:36.500
+the Newton which eventually led to the
+
+00:55:36.500 --> 00:55:40.960
+iPhone. So it all kind of is interconnected
+
+00:55:41.360 --> 00:55:44.380
+just like the impact that free software has
+
+00:55:44.380 --> 00:55:47.240
+had around the world. So you never know where
+
+00:55:47.240 --> 00:55:49.840
+your stuff is gonna go or end up.
+
+00:55:51.180 --> 00:55:53.400
+[Speaker 1]: Right. All right, moving on to the next
+
+00:55:53.400 --> 00:55:55.840
+question. Is it possible to only use 1
+
+00:55:55.840 --> 00:55:57.740
+feature of hyperbole without the others,
+
+00:55:57.740 --> 00:56:00.580
+i.e. Using only the implicit explicit buttons
+
+00:56:00.580 --> 00:56:03.580
+without I control I roller or without having
+
+00:56:03.580 --> 00:56:05.920
+to rewrite part of the code in hyperbole in
+
+00:56:05.920 --> 00:56:08.040
+order to be able to load a smaller hyperbole.
+
+00:56:08.200 --> 00:56:09.140
+Does it make sense?
+
+00:56:10.260 --> 00:56:12.640
+[Speaker 0]: Yes we get asked this all the time.
+
+00:56:12.900 --> 00:56:16.560
+So you can use any little bit that you want
+
+00:56:16.560 --> 00:56:19.620
+anywhere right you can even just call code
+
+00:56:19.940 --> 00:56:23.660
+from Hyperbole. I mean you don't use
+
+00:56:23.680 --> 00:56:25.080
+everything in Emacs, right?
+
+00:56:25.080 --> 00:56:27.740
+But you still install Emacs on your machine.
+
+00:56:28.180 --> 00:56:30.080
+It's exactly the same thing.
+
+00:56:30.860 --> 00:56:33.280
+Those libraries don't take up any memory,
+
+00:56:33.280 --> 00:56:36.380
+they take up a little disk space and it's so
+
+00:56:36.380 --> 00:56:38.520
+trivial compared to the amount of disk we
+
+00:56:38.520 --> 00:56:41.780
+have today. So a lot of things are not loaded
+
+00:56:41.920 --> 00:56:43.760
+unless you activate them.
+
+00:56:45.040 --> 00:56:48.940
+And so I know that you do have to build all
+
+00:56:48.940 --> 00:56:51.360
+those things. So maybe that's what bothers
+
+00:56:51.360 --> 00:56:56.060
+people. It takes 2 minutes if you're using,
+
+00:56:56.320 --> 00:56:58.400
+it depends how fast your computer is.
+
+00:56:58.400 --> 00:57:01.160
+But you build it once on install like every
+
+00:57:01.160 --> 00:57:04.600
+other package. And it used to be that there
+
+00:57:04.600 --> 00:57:06.620
+would be a lot of warnings just because of
+
+00:57:06.620 --> 00:57:09.020
+the way we wrote the code and we didn't
+
+00:57:09.020 --> 00:57:11.120
+really have to deal with some of those
+
+00:57:11.120 --> 00:57:13.080
+warnings. But with this new release,
+
+00:57:13.080 --> 00:57:15.120
+we've gotten rid of almost all of them,
+
+00:57:15.200 --> 00:57:19.800
+including the native compiler messages.
+
+00:57:20.020 --> 00:57:22.620
+So it should be a very clean install now,
+
+00:57:22.900 --> 00:57:26.620
+and just use 1 part at a time.
+
+00:57:26.880 --> 00:57:29.820
+But the other parts are there in case you
+
+00:57:29.820 --> 00:57:32.080
+make a link to something and you use a
+
+00:57:32.080 --> 00:57:34.600
+facility just like I was showing as I went
+
+00:57:34.600 --> 00:57:36.360
+across subsystems today.
+
+00:57:36.600 --> 00:57:38.000
+It may take you a year,
+
+00:57:38.000 --> 00:57:40.120
+but then all of a sudden you find the use
+
+00:57:40.120 --> 00:57:42.340
+case for Hyrule and you say,
+
+00:57:42.340 --> 00:57:44.040
+oh, I'm glad I have it there.
+
+00:57:44.440 --> 00:57:47.540
+And yes, some of these things could be split
+
+00:57:47.540 --> 00:57:49.540
+into sub packages like you do in the org
+
+00:57:49.540 --> 00:57:52.500
+ecosystem. But given our limited resources on
+
+00:57:52.500 --> 00:57:56.400
+the team, we find having them all in 1 gives
+
+00:57:56.400 --> 00:57:59.040
+us a higher level of quality and lets us
+
+00:57:59.040 --> 00:58:02.840
+deliver a better integrated system for your
+
+00:58:02.840 --> 00:58:03.340
+use.
+
+00:58:04.740 --> 00:58:06.300
+[Speaker 1]: Yeah, exactly. And I think,
+
+00:58:06.300 --> 00:58:09.120
+you know, it's, it's not a monolith.
+
+00:58:10.080 --> 00:58:12.540
+I mean, it's usually easier,
+
+00:58:12.540 --> 00:58:14.620
+easy, more easy, more easy.
+
+00:58:14.620 --> 00:58:16.500
+Sorry, I was right on the first try.
+
+00:58:16.560 --> 00:58:20.580
+It's usually easier to maintain a monolith
+
+00:58:20.860 --> 00:58:23.140
+that contains many bits of functionality like
+
+00:58:23.140 --> 00:58:25.280
+org. You have plenty of people using org
+
+00:58:25.280 --> 00:58:27.180
+mode, not using org-agenda,
+
+00:58:27.340 --> 00:58:29.142
+for instance, or you've got plenty of people
+
+00:58:29.142 --> 00:58:31.560
+using org-mode and barely using Babel because
+
+00:58:31.560 --> 00:58:34.740
+it doesn't really translate to their use.
+
+00:58:35.460 --> 00:58:37.720
+And I feel like I very much agree with you.
+
+00:58:37.720 --> 00:58:39.520
+It's okay to install a package and only use
+
+00:58:39.520 --> 00:58:40.420
+some of the functions.
+
+00:58:40.600 --> 00:58:43.580
+I was reminded, as you were discussing this,
+
+00:58:43.580 --> 00:58:45.140
+of the consults package,
+
+00:58:45.380 --> 00:58:46.920
+which is part of the VertiCo,
+
+00:58:48.220 --> 00:58:51.060
+mbark and marginalia and all this.
+
+00:58:51.340 --> 00:58:54.960
+Consult, it replaces a lot of the Emacs
+
+00:58:54.960 --> 00:58:56.980
+built-in commands like for finding your
+
+00:58:56.980 --> 00:58:59.900
+buffers or finding text inside of your
+
+00:58:59.900 --> 00:59:03.960
+buffer. It's great. And you do not need to
+
+00:59:04.120 --> 00:59:06.300
+completely move to consult as you get
+
+00:59:06.300 --> 00:59:09.080
+started. You can start colonizing 1 step at a
+
+00:59:09.080 --> 00:59:11.540
+time the function that you usually use.
+
+00:59:12.620 --> 00:59:15.580
+And I highly recommend to people to not let
+
+00:59:15.580 --> 00:59:18.560
+the size of a project deter them from trying
+
+00:59:18.560 --> 00:59:20.580
+it out because, again,
+
+00:59:20.980 --> 00:59:22.800
+in Emacs, everything is horizontal.
+
+00:59:23.100 --> 00:59:28.180
+If somehow you want to use something that was
+
+00:59:28.180 --> 00:59:29.640
+not intended primarily for this,
+
+00:59:29.640 --> 00:59:32.220
+or if you only want to use 10% of a package,
+
+00:59:32.300 --> 00:59:35.500
+well, do it. An example that I have for me is
+
+00:59:35.500 --> 00:59:39.840
+that Lispy is the minor mode that I use for
+
+00:59:39.840 --> 00:59:42.380
+editing Elisp documents,
+
+00:59:42.740 --> 00:59:45.380
+and it's great. Elisp provides similar
+
+00:59:45.380 --> 00:59:46.260
+functions to ParaEdit,
+
+00:59:46.260 --> 00:59:47.720
+which might be a little more popular,
+
+00:59:47.780 --> 00:59:50.320
+which allows you to have modal editing when
+
+00:59:50.320 --> 00:59:52.840
+you are on specific parts of a file,
+
+00:59:52.840 --> 00:59:55.080
+like the opening parenthesis or the closing
+
+00:59:55.080 --> 00:59:56.480
+parenthesis. It's great,
+
+00:59:56.480 --> 00:59:58.320
+it provides modal editing for those modes,
+
+00:59:58.320 --> 01:00:01.340
+but I certainly do not know everything,
+
+01:00:02.220 --> 01:00:04.240
+every modal command associated to it.
+
+01:00:04.240 --> 01:00:06.180
+I just use the 1 that makes the most sense to
+
+01:00:06.180 --> 01:00:08.200
+me. So feel free to explore.
+
+01:00:11.040 --> 01:00:13.680
+[Speaker 0]: I'll just say we get this so much.
+
+01:00:13.740 --> 01:00:16.520
+It's not that large. I mean there's a fair
+
+01:00:16.520 --> 01:00:19.680
+number of files but it's just like 1 major
+
+01:00:19.680 --> 01:00:22.340
+directory and then the KOutliner directory.
+
+01:00:24.080 --> 01:00:25.560
+And when you look at these things,
+
+01:00:25.560 --> 01:00:27.140
+you install web applications,
+
+01:00:27.440 --> 01:00:30.420
+everything else, just when you download the
+
+01:00:30.420 --> 01:00:31.820
+source code, it's much,
+
+01:00:31.820 --> 01:00:34.040
+much smaller than any of that.
+
+01:00:34.140 --> 01:00:37.360
+So I don't know why people you know accept
+
+01:00:37.360 --> 01:00:39.660
+that it's larger than your typical package.
+
+01:00:39.960 --> 01:00:41.900
+Why there's really an issue there.
+
+01:00:43.080 --> 01:00:45.080
+[Speaker 1]: I think it's because people tend to assume
+
+01:00:46.240 --> 01:00:48.480
+that a paradigm like the 1 you're describing,
+
+01:00:48.480 --> 01:00:51.560
+which seems to be changing the way you use
+
+01:00:51.560 --> 01:00:53.480
+Emacs in a way because you're no longer
+
+01:00:53.480 --> 01:00:56.000
+thinking of as buffers as separate entities,
+
+01:00:56.000 --> 01:00:57.980
+you can tunnel between them.
+
+01:00:57.980 --> 01:01:00.180
+You know, it feels like a huge paradigm shift
+
+01:01:00.180 --> 01:01:02.300
+and you assume that the code behind it is
+
+01:01:02.300 --> 01:01:04.080
+going to be humongous as well,
+
+01:01:04.080 --> 01:01:05.380
+but it's usually not the case.
+
+01:01:05.380 --> 01:01:07.640
+It's just that the idea is very pure at the
+
+01:01:07.640 --> 01:01:10.060
+start, and the paradigm shift that it allows
+
+01:01:10.320 --> 01:01:14.120
+is also magnificent. But at the end of the
+
+01:01:14.120 --> 01:01:16.200
+day, the code is fairly simple,
+
+01:01:16.320 --> 01:01:18.360
+because it does 1 thing and it does it well.
+
+01:01:19.780 --> 01:01:21.180
+[Speaker 0]: 1 thing I noticed too,
+
+01:01:21.180 --> 01:01:23.760
+I mean I'm a big believer in turnkey kind of
+
+01:01:23.760 --> 01:01:27.180
+systems. In fact a long time ago when I built
+
+01:01:27.180 --> 01:01:31.160
+an IDE on Emacs called InfoDoc that was
+
+01:01:31.160 --> 01:01:32.480
+delivered pre-compiled.
+
+01:01:33.760 --> 01:01:35.980
+So it's like you download it like every other
+
+01:01:35.980 --> 01:01:39.480
+app and you run it. And so I think
+
+01:01:39.480 --> 01:01:42.480
+eliminating all the friction that occurs,
+
+01:01:42.740 --> 01:01:46.360
+and you know, I just got going recently with
+
+01:01:46.380 --> 01:01:49.160
+the wonderful packages that you just
+
+01:01:49.160 --> 01:01:51.460
+mentioned, VertiCo and Consult,
+
+01:01:51.460 --> 01:01:55.360
+but they don't have a manual that covers all
+
+01:01:55.360 --> 01:01:57.780
+that. They use sort of like a cookbook,
+
+01:01:58.260 --> 01:02:02.220
+a wiki online to answer a lot of the
+
+01:02:02.220 --> 01:02:04.600
+questions that people have and everybody has
+
+01:02:04.600 --> 01:02:07.640
+to figure out their configurations you know
+
+01:02:07.640 --> 01:02:11.380
+to make these things all work together.
+
+01:02:12.800 --> 01:02:16.460
+We'd like to do that engineering and say here
+
+01:02:16.460 --> 01:02:18.560
+it is you know it's like if you want to
+
+01:02:18.560 --> 01:02:20.320
+configure it and make it your own,
+
+01:02:20.320 --> 01:02:23.500
+you can do it. But there is a default
+
+01:02:23.760 --> 01:02:26.880
+configuration that handles all the typical
+
+01:02:26.880 --> 01:02:29.940
+use cases and you can just load it up and run
+
+01:02:30.060 --> 01:02:31.660
+because it's made to use,
+
+01:02:32.840 --> 01:02:36.500
+you don't have to hack it to make it useful
+
+01:02:36.500 --> 01:02:37.260
+for you.
+
+01:02:37.900 --> 01:02:40.560
+[Speaker 1]: Yeah, it reminds me of the discussion we had
+
+01:02:40.560 --> 01:02:42.740
+with Stéphane yesterday about sane defaults.
+
+01:02:43.320 --> 01:02:45.520
+And I think the question was,
+
+01:02:46.500 --> 01:02:49.080
+Emacs should probably ship with sane defaults
+
+01:02:49.080 --> 01:02:51.740
+for people. And Stéphane's answer was,
+
+01:02:51.740 --> 01:02:53.860
+well, my sane defaults might not be the same
+
+01:02:53.860 --> 01:02:55.220
+thing as your sane defaults.
+
+01:02:55.960 --> 01:02:57.560
+And that's why I think it's important,
+
+01:02:57.560 --> 01:02:59.340
+really, to have a core set of features,
+
+01:02:59.340 --> 01:03:01.300
+be it with hyperbole of org mode,
+
+01:03:01.360 --> 01:03:02.580
+that is well-documented,
+
+01:03:02.880 --> 01:03:05.460
+as you mentioned. But what I like about this
+
+01:03:05.460 --> 01:03:07.260
+in a way, and I think hyperbole is perhaps
+
+01:03:07.260 --> 01:03:09.340
+taking more benefits of this than Org Mode,
+
+01:03:09.340 --> 01:03:12.280
+is that the self-documentation aspect of it
+
+01:03:12.540 --> 01:03:14.540
+feels like it's easier with hyperbole because
+
+01:03:14.540 --> 01:03:17.320
+you're not bound by Org Mode buffers.
+
+01:03:17.320 --> 01:03:19.340
+You can link to just about everything.
+
+01:03:19.940 --> 01:03:24.240
+And for me, this ability to self-document is,
+
+01:03:24.240 --> 01:03:26.140
+well, first, very true to the philosophy of
+
+01:03:26.140 --> 01:03:27.480
+Emacs in the first place,
+
+01:03:27.500 --> 01:03:31.900
+but also opens up those resonance cycles
+
+01:03:32.020 --> 01:03:34.200
+where, oh, you get interested and then you
+
+01:03:34.200 --> 01:03:35.820
+start reading up and then the documentation
+
+01:03:35.820 --> 01:03:38.320
+is so good that it feeds into your practice
+
+01:03:38.320 --> 01:03:41.040
+and then it goes nuclear and you gain so much
+
+01:03:41.040 --> 01:03:42.540
+knowledge as a result of this.
+
+01:03:42.620 --> 01:03:44.480
+All right, Bob, we are about out of time.
+
+01:03:44.480 --> 01:03:46.280
+We only have about 1 minute until we go to
+
+01:03:46.280 --> 01:03:48.220
+the next talk. Do you have any passing words?
+
+01:03:50.180 --> 01:03:53.860
+[Speaker 0]: I do. I think, you know,
+
+01:03:54.280 --> 01:03:56.880
+the world's complex, it's getting more
+
+01:03:57.440 --> 01:04:00.520
+complex. I think that's why people use Emacs
+
+01:04:00.520 --> 01:04:02.560
+in the first place, because it's a big
+
+01:04:02.560 --> 01:04:04.920
+system. You wouldn't use it unless you wanted
+
+01:04:04.920 --> 01:04:06.600
+it to simplify your life.
+
+01:04:07.580 --> 01:04:10.760
+Hyperbole is built with the same idea in
+
+01:04:10.760 --> 01:04:13.640
+mind. You may not get it just like Lisp.
+
+01:04:13.740 --> 01:04:15.720
+A lot of people don't understand when they
+
+01:04:15.720 --> 01:04:17.420
+first encounter it, but when they do
+
+01:04:17.420 --> 01:04:19.580
+understand it, they're blown away.
+
+01:04:19.960 --> 01:04:21.360
+It changes their life.
+
+01:04:22.040 --> 01:04:25.020
+You know, when you really understand implicit
+
+01:04:25.120 --> 01:04:28.100
+buttons, I think that's 1 of the things in
+
+01:04:28.100 --> 01:04:30.860
+hyperbole that can change your Emacs working
+
+01:04:30.860 --> 01:04:34.080
+life. So just give that a try and I think
+
+01:04:34.080 --> 01:04:36.660
+you'll be pleasantly surprised across time.
+
+01:04:39.220 --> 01:04:40.920
+[Speaker 1]: you so much Bob. We'll be moving on to the
+
+01:04:40.920 --> 01:04:42.980
+next talk in about 20 seconds so everyone see
+
+01:04:42.980 --> 01:04:44.940
+you in a bit and Bob thank you so much again.
+
+01:04:37.040 --> 01:04:46.100
+[Speaker 0]: Thanks very much. And thank Thank you.
+
+01:04:51.140 --> 01:04:53.040
+[Speaker 1]: All right I think we are off here now.
+
+01:04:53.040 --> 01:04:53.940
+So thank you so much, Bob.
+
+01:04:53.940 --> 01:04:55.440
+I'm going to need to step out and get ready
+
+01:04:56.609 --> 01:04:59.240
+[Speaker 0]: Yeah, do your thing. You do a great job at
+
+01:04:59.240 --> 01:05:01.760
+it. But I wanted to ask you where in London
+
+01:04:55.440 --> 01:05:04.780
+[Speaker 1]: for the next talk. I'm not in London,
+
+01:05:05.280 --> 01:05:07.940
+I'm in France, and I just moved to London.
+
+01:05:01.760 --> 01:05:10.740
+[Speaker 0]: you are. Oh, okay, got it.
+
+01:05:11.200 --> 01:05:12.680
+Sorry, I thought you were.
+
+01:05:13.000 --> 01:05:13.720
+Take care.
+
+01:05:14.340 --> 01:05:15.060
+[Speaker 1]: All right, bye-bye, Bob.
+
+01:05:15.060 --> 01:05:15.750
+Thanks a lot. Bye-bye.
+
+01:05:15.750 --> 01:05:16.250
+Bye-bye.
diff --git a/2023/captions/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--original.vtt b/2023/captions/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--original.vtt
new file mode 100644
index 00000000..adc0d11e
--- /dev/null
+++ b/2023/captions/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--original.vtt
@@ -0,0 +1,4625 @@
+WEBVTT
+
+
+00:00:09.400 --> 00:00:09.519
+[Speaker 0]: 5 seconds. I keep forgetting we have an
+
+00:00:11.120 --> 00:00:11.620
+introduction now. The introduction is flying.
+
+00:00:20.560 --> 00:00:20.900
+[Speaker 1]: You're going to give a 30 second,
+
+00:00:23.820 --> 00:00:24.320
+[Speaker 0]: Well, it's about 5 seconds now.
+
+00:00:27.900 --> 00:00:28.400
+[Speaker 1]: right? Just say go when you want me to go.
+
+00:00:30.780 --> 00:00:31.280
+[Speaker 0]: Sure. You'll hear me anyway.
+
+00:00:31.800 --> 00:00:32.299
+[Speaker 1]: Okay.
+
+00:00:34.900 --> 00:00:35.220
+[Speaker 0]: All right, I think we are live now.
+
+00:00:35.800 --> 00:00:36.100
+So hi again, everyone.
+
+00:00:37.680 --> 00:00:37.900
+I promised you we would be back in about 30
+
+00:00:39.440 --> 00:00:39.940
+seconds. I lied, it was actually 1 minute,
+
+00:00:41.320 --> 00:00:41.760
+but we are here with Bob.
+
+00:00:42.340 --> 00:00:42.840
+Hi, Bob, how are you doing?
+
+00:00:46.780 --> 00:00:46.940
+[Speaker 1]: Hi, doing great. Glad to
+
+00:00:50.220 --> 00:00:50.600
+[Speaker 0]: be with you. Yeah, glad to be here,
+
+00:00:52.340 --> 00:00:52.580
+and so are we. We're glad to have you again
+
+00:00:54.280 --> 00:00:54.400
+this year. So what we're going to do,
+
+00:00:55.920 --> 00:00:56.140
+we're not going to waste any time right now
+
+00:00:57.739 --> 00:00:57.880
+with chit-chats. What we're going to do,
+
+00:00:58.940 --> 00:00:59.059
+we're going to move straight into your
+
+00:01:00.860 --> 00:01:01.120
+presentation, Bob, so that you have as much
+
+00:01:04.080 --> 00:01:04.239
+time as you can. I'm going to recede into the
+
+00:01:07.280 --> 00:01:07.440
+background. I am going to full screen your
+
+00:01:08.479 --> 00:01:08.979
+presentation on a stream.
+
+00:01:11.180 --> 00:01:11.680
+And Bob, the floor is all yours.
+
+00:01:14.220 --> 00:01:14.720
+[Speaker 1]: Thank you very much, Leo.
+
+00:01:18.000 --> 00:01:18.400
+Glad to be here. I hope everybody has an idea
+
+00:01:22.280 --> 00:01:22.780
+of what Hyperbole is, but it's a broad
+
+00:01:25.380 --> 00:01:25.880
+information management system inside Emacs
+
+00:01:28.040 --> 00:01:28.540
+that works in all major modes.
+
+00:01:31.560 --> 00:01:31.760
+It's a global minor mode that you can turn on
+
+00:01:34.540 --> 00:01:34.760
+and off very rapidly so that you can just get
+
+00:01:35.660 --> 00:01:36.160
+in and out of hyperbole.
+
+00:01:40.440 --> 00:01:40.940
+And it works mostly from a mini buffer menu
+
+00:01:43.940 --> 00:01:44.040
+that if we just hit ctrl H H we see at the
+
+00:01:47.220 --> 00:01:47.420
+bottom of the screen here and as you see in
+
+00:01:48.480 --> 00:01:48.980
+some of this text right here,
+
+00:01:55.280 --> 00:01:55.680
+Dee will show you a demo with all these video
+
+00:01:57.180 --> 00:01:57.680
+links of Hyperbole now.
+
+00:02:01.560 --> 00:02:01.780
+But let's just get into the top 10 reasons to
+
+00:02:08.340 --> 00:02:08.840
+use Hyperbole. Number 10 is a key series
+
+00:02:12.100 --> 00:02:12.600
+curly braces. So you just put curly braces
+
+00:02:17.120 --> 00:02:17.620
+around any set of key sequences that you want
+
+00:02:22.200 --> 00:02:22.440
+and hyperbole magically turns that into what
+
+00:02:25.440 --> 00:02:25.640
+we call an implicit button a hyper button and
+
+00:02:28.340 --> 00:02:28.580
+any kind of text that you have so if we go
+
+00:02:35.260 --> 00:02:35.760
+down here and we just click click here we see
+
+00:02:39.720 --> 00:02:40.220
+it that was a complex button that said let's
+
+00:02:42.700 --> 00:02:43.200
+start a shell, let's set an environment
+
+00:02:44.960 --> 00:02:45.140
+variable as you see the command right up
+
+00:02:47.220 --> 00:02:47.420
+there, and then let's do a grep over the
+
+00:02:50.500 --> 00:02:50.680
+hyperbole code and find all instances of a
+
+00:02:54.860 --> 00:02:55.360
+particular label. So if we hit made a return,
+
+00:02:56.760 --> 00:02:57.260
+that's called the action key.
+
+00:02:59.120 --> 00:02:59.340
+That's what you use throughout hyperbole when
+
+00:03:01.400 --> 00:03:01.900
+you just want to activate any kind of button.
+
+00:03:06.200 --> 00:03:06.380
+So you see it jumped to the grep output and
+
+00:03:08.260 --> 00:03:08.440
+this is in a shell buffer it's not in a
+
+00:03:10.900 --> 00:03:11.180
+compilation buffer so anywhere that you have
+
+00:03:13.260 --> 00:03:13.760
+this sort of thing it's also an implicit
+
+00:03:16.560 --> 00:03:17.040
+button and any sort of grep output or
+
+00:03:20.280 --> 00:03:20.780
+compiler output you can just jump to with the
+
+00:03:23.080 --> 00:03:23.580
+same key, made a return.
+
+00:03:28.740 --> 00:03:29.240
+So that's key series, the first part.
+
+00:03:33.520 --> 00:03:33.880
+And then just to note that you can also just
+
+00:03:38.760 --> 00:03:39.000
+do a, well I'll just do it here and show you
+
+00:03:43.040 --> 00:03:43.380
+that you can do a recursive grep with this
+
+00:03:45.340 --> 00:03:45.840
+hyperbole command, HYPBR grep.
+
+00:03:48.500 --> 00:03:49.000
+And if you're in an Emacs list buffer,
+
+00:03:54.240 --> 00:03:54.740
+it will only grep across the Emacs list.
+
+00:03:58.100 --> 00:03:58.340
+So a very handy way to just go through your
+
+00:04:00.600 --> 00:04:01.040
+code very rapidly and then jump to various
+
+00:04:03.960 --> 00:04:04.280
+points in it. So we have a lot to cover
+
+00:04:05.600 --> 00:04:05.800
+today, so I'm going to go through this
+
+00:04:07.060 --> 00:04:07.560
+rapidly. This isn't a tutorial,
+
+00:04:10.200 --> 00:04:10.340
+it's just to get you interested in some of
+
+00:04:12.900 --> 00:04:13.060
+the features, and then there's a ton of
+
+00:04:15.420 --> 00:04:15.920
+reference material and videos now available
+
+00:04:18.360 --> 00:04:18.860
+for Hyperlink. So let's go to number 9.
+
+00:04:21.860 --> 00:04:22.360
+Path names become implicit buttons.
+
+00:04:23.700 --> 00:04:24.060
+You don't even have to quote them.
+
+00:04:26.460 --> 00:04:26.920
+You can add environment variables or elist
+
+00:04:28.700 --> 00:04:29.200
+variables with the syntax right here.
+
+00:04:31.820 --> 00:04:32.180
+So here we have a shell script that's
+
+00:04:33.000 --> 00:04:33.500
+somewhere on our path.
+
+00:04:35.940 --> 00:04:36.380
+And notice path is an environment variable
+
+00:04:39.000 --> 00:04:39.140
+with many different paths within it,
+
+00:04:42.100 --> 00:04:42.600
+right? But Hyperbole knows that and it
+
+00:04:44.480 --> 00:04:44.980
+searches the path, gets the first match,
+
+00:04:48.120 --> 00:04:48.620
+finds it, and finds the actual shell script.
+
+00:04:49.920 --> 00:04:50.420
+So you can just embed that anywhere.
+
+00:04:51.660 --> 00:04:52.160
+Here we have a list variable,
+
+00:04:54.120 --> 00:04:54.360
+hyperbdur, which is the home directory for
+
+00:04:57.620 --> 00:04:58.120
+hyperbole, and then a markdown file,
+
+00:05:01.180 --> 00:05:01.680
+and a link to a direct section in the file,
+
+00:05:04.880 --> 00:05:05.220
+and the 5 colon 5 means go to line 5 within
+
+00:05:06.760 --> 00:05:07.260
+that section and column 5.
+
+00:05:08.900 --> 00:05:09.400
+So let's just try it. Boom,
+
+00:05:11.240 --> 00:05:11.500
+we're right there, and we're on another link
+
+00:05:12.720 --> 00:05:13.220
+that we could activate as well.
+
+00:05:17.620 --> 00:05:17.960
+So notice the next line is the same link but
+
+00:05:20.120 --> 00:05:20.280
+this is how you normally have to do it in a
+
+00:05:22.680 --> 00:05:23.160
+markdown file. You have to change the section
+
+00:05:25.480 --> 00:05:25.640
+header to have dashes but with hyperbole you
+
+00:05:27.620 --> 00:05:28.120
+don't have to. You can just put it exactly
+
+00:05:29.340 --> 00:05:29.840
+like you see it in your file.
+
+00:05:34.440 --> 00:05:34.660
+Here the pound syntax for sections is really
+
+00:05:36.140 --> 00:05:36.640
+a generic syntax in the hyperbole.
+
+00:05:39.660 --> 00:05:39.840
+And so it works in all different kinds of
+
+00:05:41.000 --> 00:05:41.500
+files, your programming files.
+
+00:05:45.040 --> 00:05:45.240
+Here's a shell script and we said let's just
+
+00:05:48.680 --> 00:05:49.120
+go to the first comment that has alias in it.
+
+00:05:51.300 --> 00:05:51.700
+Notice we didn't have to say the whole line,
+
+00:05:52.700 --> 00:05:53.160
+just the first part of it.
+
+00:05:57.880 --> 00:05:58.140
+And it matched to it. Here we have a link to
+
+00:06:01.560 --> 00:06:01.680
+our hyperbole structured outliner called the
+
+00:06:04.160 --> 00:06:04.660
+K Outliner. And you can see it auto-numbers
+
+00:06:07.560 --> 00:06:08.000
+all these cells. But in addition to just
+
+00:06:10.280 --> 00:06:10.640
+displaying, you can also add a pipe symbol
+
+00:06:14.440 --> 00:06:14.900
+near the end and use this view syntax to clip
+
+00:06:17.160 --> 00:06:17.500
+to 2 lines and show blank lines.
+
+00:06:19.760 --> 00:06:19.920
+So let's see if each node gets clipped to 2
+
+00:06:22.480 --> 00:06:22.680
+lines. So you see they're all just 2 now with
+
+00:06:24.780 --> 00:06:25.280
+the ellipses and then we can expand them.
+
+00:06:28.260 --> 00:06:28.760
+So a lot of power there just with path names.
+
+00:06:30.780 --> 00:06:31.120
+Let's continue to number 8.
+
+00:06:32.440 --> 00:06:32.940
+[Speaker 0]: Can I just interrupt you just a bit?
+
+00:06:33.420 --> 00:06:33.920
+[Speaker 1]: Yes.
+
+00:06:37.540 --> 00:06:37.720
+[Speaker 0]: I think your phone, so we have your phone set
+
+00:06:39.960 --> 00:06:40.460
+up in case your internet misbehaves and we've
+
+00:06:41.580 --> 00:06:42.080
+set this up before we started,
+
+00:06:44.060 --> 00:06:44.380
+but I think the vibration is a little loud
+
+00:06:46.060 --> 00:06:46.160
+whenever it does. Can you maybe move it a
+
+00:06:50.020 --> 00:06:50.380
+little bit? I think so.
+
+00:06:51.380 --> 00:06:51.880
+It will have to vibrate again.
+
+00:06:53.720 --> 00:06:54.220
+[Speaker 1]: Is that okay? No, my phone...
+
+00:06:56.380 --> 00:06:56.880
+Okay. It shouldn't have been vibrating.
+
+00:07:00.760 --> 00:07:01.260
+[Speaker 0]: It might have been another device,
+
+00:07:02.360 --> 00:07:02.800
+but definitely we had vibration.
+
+00:07:04.000 --> 00:07:04.500
+Anyway, carry on. Sorry for the interruption.
+
+00:07:06.420 --> 00:07:06.920
+[Speaker 1]: It could be me. So number 8,
+
+00:07:10.320 --> 00:07:10.520
+special prefixes. There are 3 prefixes you
+
+00:07:11.440 --> 00:07:11.820
+can attach to path names.
+
+00:07:13.180 --> 00:07:13.680
+The first, if you want to load,
+
+00:07:15.540 --> 00:07:16.040
+instead of just finding a file,
+
+00:07:18.960 --> 00:07:19.460
+an ELIST file, you can actually load it.
+
+00:07:21.560 --> 00:07:22.060
+And so I can just hit made a return on this,
+
+00:07:23.800 --> 00:07:24.300
+and you see in the mini buffer,
+
+00:07:26.600 --> 00:07:27.100
+it loaded it as compiled e-list.
+
+00:07:28.840 --> 00:07:29.340
+I could put a .el on here,
+
+00:07:33.000 --> 00:07:33.500
+a .elc, .gz, all of that'll work,
+
+00:07:35.920 --> 00:07:36.420
+and just put a dash in front to load it.
+
+00:07:38.300 --> 00:07:38.720
+If you want to run a shell command,
+
+00:07:40.900 --> 00:07:41.040
+just put an exclamation mark in front of
+
+00:07:42.380 --> 00:07:42.540
+something and again you can have the
+
+00:07:44.340 --> 00:07:44.620
+environment variable. So here we're saying
+
+00:07:46.720 --> 00:07:47.220
+run the program date and you see,
+
+00:07:49.540 --> 00:07:50.040
+let's see, let's do it again.
+
+00:07:53.040 --> 00:07:53.240
+There we go. It ran date and you see the
+
+00:07:55.320 --> 00:07:55.680
+output right there. And what if you want to
+
+00:07:57.540 --> 00:07:58.040
+run a graphical program on your system?
+
+00:08:01.560 --> 00:08:01.760
+Well here, we want to open a PDF file and I'm
+
+00:08:04.840 --> 00:08:05.340
+just using XDG Open on Linux,
+
+00:08:09.320 --> 00:08:09.440
+you could use Open on Mac and you just put an
+
+00:08:12.340 --> 00:08:12.840
+ampersand in front and there's the Hyperbole
+
+00:08:15.340 --> 00:08:15.840
+manual instantly displayed.
+
+00:08:18.120 --> 00:08:18.620
+So lots of power there and all of that
+
+00:08:22.120 --> 00:08:22.360
+actually .pdf's and many other file types are
+
+00:08:24.860 --> 00:08:25.080
+automatically linked to various programs by
+
+00:08:27.080 --> 00:08:27.340
+Hyperbole. So you could just use the path
+
+00:08:29.200 --> 00:08:29.340
+name itself and it would probably behave the
+
+00:08:33.940 --> 00:08:34.440
+same way. Number 7, bookmarks on steroids.
+
+00:08:37.059 --> 00:08:37.419
+So Hyperbole gives you a personal button
+
+00:08:39.840 --> 00:08:40.340
+file, which is on the menu you see here under
+
+00:08:41.780 --> 00:08:42.280
+button files, and then personal.
+
+00:08:44.860 --> 00:08:45.360
+So here we'll just display it.
+
+00:08:47.480 --> 00:08:47.720
+And you can put whatever you want in here,
+
+00:08:49.360 --> 00:08:49.860
+these implicit buttons of any type.
+
+00:08:52.460 --> 00:08:52.660
+You can name them the way here and you can
+
+00:08:55.280 --> 00:08:55.560
+activate either the name with MetaReturn or
+
+00:08:56.760 --> 00:08:56.920
+the button itself. So,
+
+00:08:58.900 --> 00:08:59.400
+of course, if we did MetaReturn here,
+
+00:09:02.720 --> 00:09:03.220
+we'd just display that in a web browser.
+
+00:09:05.020 --> 00:09:05.520
+I'll just do a few of these.
+
+00:09:06.760 --> 00:09:07.200
+So here's a section of line.
+
+00:09:08.080 --> 00:09:08.580
+Let's just jump there.
+
+00:09:11.100 --> 00:09:11.400
+But these can be all sorts of different
+
+00:09:12.900 --> 00:09:13.140
+actions that are going on.
+
+00:09:15.840 --> 00:09:16.040
+And you just, whatever cross references you
+
+00:09:17.360 --> 00:09:17.840
+want, you put in here.
+
+00:09:19.900 --> 00:09:20.400
+And the neat thing is that this then becomes
+
+00:09:22.920 --> 00:09:23.420
+a list of what we call global buttons.
+
+00:09:26.040 --> 00:09:26.540
+So when I go into the menu and I go control
+
+00:09:30.140 --> 00:09:30.640
+HHGA to activate a global button,
+
+00:09:32.800 --> 00:09:33.220
+you can see that all the names from this file
+
+00:09:35.600 --> 00:09:36.100
+appear here. So only the name buttons appear,
+
+00:09:39.780 --> 00:09:40.240
+and I could like go to the hyperbole to-do
+
+00:09:41.760 --> 00:09:42.260
+list and things like that.
+
+00:09:45.480 --> 00:09:45.660
+So very, very quick access to all your
+
+00:09:47.080 --> 00:09:47.440
+information whenever you need it.
+
+00:09:49.440 --> 00:09:49.600
+And that could be an org file as well if you
+
+00:09:53.000 --> 00:09:53.500
+prefer that. So we just took care of that.
+
+00:09:56.880 --> 00:09:57.000
+Number 6, instant test case running and
+
+00:09:58.920 --> 00:09:59.420
+debugging. This is a fairly new feature.
+
+00:10:02.080 --> 00:10:02.240
+What we're seeing here is a pre-release of
+
+00:10:04.280 --> 00:10:04.440
+version 9, which should be out within the
+
+00:10:07.440 --> 00:10:07.560
+next week. But the instructions at the
+
+00:10:10.460 --> 00:10:10.680
+beginning of the presentation tell you how to
+
+00:10:13.220 --> 00:10:13.720
+get the development version of HyperBlade,
+
+00:10:15.060 --> 00:10:15.560
+which is right now 8.01
+
+00:10:18.540 --> 00:10:19.040
+pre, but that's virtually the same as what 9
+
+00:10:22.560 --> 00:10:23.060
+will be. So you can grab that as of today.
+
+00:10:27.040 --> 00:10:27.540
+So let's just jump to a test file.
+
+00:10:29.800 --> 00:10:30.300
+What you see here is called an explicit
+
+00:10:32.520 --> 00:10:33.020
+button. You can actually make buttons where
+
+00:10:35.600 --> 00:10:35.820
+similar to org, where you just see a bit of
+
+00:10:38.000 --> 00:10:38.500
+the button and all of the metadata is hidden.
+
+00:10:41.800 --> 00:10:42.040
+I can say control A J and I see all about
+
+00:10:43.740 --> 00:10:43.940
+that button, exactly what it's going to do
+
+00:10:46.980 --> 00:10:47.200
+before I activate it and even who created it
+
+00:10:50.580 --> 00:10:50.680
+or last modified it. Then just queue out of
+
+00:10:52.080 --> 00:10:52.580
+here and you're back where you were.
+
+00:10:56.320 --> 00:10:56.820
+So now, what this did is link us to an ERT
+
+00:10:59.440 --> 00:10:59.920
+test. If you write tests in Emacs,
+
+00:11:01.560 --> 00:11:02.060
+you probably use ERT tests.
+
+00:11:04.920 --> 00:11:05.220
+So if I hit made a return on here it'll just
+
+00:11:08.300 --> 00:11:08.520
+run the test tell me it passed great okay but
+
+00:11:11.320 --> 00:11:11.760
+maybe I had a problem so let me use control
+
+00:11:16.820 --> 00:11:17.080
+you made a return and that will e-debug the
+
+00:11:19.720 --> 00:11:20.080
+test instantly. So now I'll step through it
+
+00:11:21.700 --> 00:11:22.200
+and it says, well, let's,
+
+00:11:25.400 --> 00:11:25.580
+this single line actually creates that
+
+00:11:27.440 --> 00:11:27.800
+explicit button. You see we have an empty
+
+00:11:29.060 --> 00:11:29.480
+buffer here that we're in.
+
+00:11:31.640 --> 00:11:31.780
+Now I step through that and now there's the
+
+00:11:33.740 --> 00:11:34.160
+explicit button that got put in there.
+
+00:11:36.760 --> 00:11:36.940
+Now the next line I step through it and this
+
+00:11:38.720 --> 00:11:39.160
+is going to check if we have the right action
+
+00:11:42.040 --> 00:11:42.260
+type and it returns true so that's good and
+
+00:11:45.060 --> 00:11:45.220
+now we should be it should be associated with
+
+00:11:48.400 --> 00:11:48.680
+the temp buffer returns true good And that's
+
+00:11:50.860 --> 00:11:51.360
+why what you saw before is this passed.
+
+00:11:52.260 --> 00:11:52.760
+The whole thing passed.
+
+00:11:54.240 --> 00:11:54.740
+So lots of power there.
+
+00:11:57.380 --> 00:11:57.600
+Simple to use. You're just using your made a
+
+00:11:58.860 --> 00:11:59.360
+return and prefix arguments.
+
+00:12:02.980 --> 00:12:03.240
+It's something everybody who develops should
+
+00:12:07.280 --> 00:12:07.640
+have. So number, let's go on.
+
+00:12:09.440 --> 00:12:09.720
+I think we're making pretty good time here,
+
+00:12:10.740 --> 00:12:11.240
+but I turned off my timer.
+
+00:12:15.540 --> 00:12:15.800
+Let's go to number 5. This is a very new
+
+00:12:17.160 --> 00:12:17.660
+feature, which is very cool too.
+
+00:12:19.920 --> 00:12:20.420
+You used to have to use the mouse probably
+
+00:12:23.680 --> 00:12:23.880
+and you could drag across windows to go from
+
+00:12:26.580 --> 00:12:26.820
+a source to a referent buffer and that would
+
+00:12:27.880 --> 00:12:28.340
+create a hyperlink for you.
+
+00:12:30.600 --> 00:12:30.880
+But now we've installed it and made it even
+
+00:12:33.640 --> 00:12:34.140
+easier on, we've installed it on a,
+
+00:12:36.040 --> 00:12:36.540
+on the hyperbole menus.
+
+00:12:39.680 --> 00:12:40.180
+So let's just go back to our presentation
+
+00:12:43.340 --> 00:12:43.660
+here and say we want to link to this line
+
+00:12:45.980 --> 00:12:46.160
+that we're on there. And I'll just create the
+
+00:12:48.340 --> 00:12:48.480
+button in our scratch buffer here so it
+
+00:12:50.160 --> 00:12:50.660
+doesn't really mess anything up.
+
+00:12:53.800 --> 00:12:53.980
+So I just put my point in where I want the
+
+00:12:56.780 --> 00:12:56.920
+button to appear and then I put point where I
+
+00:12:59.700 --> 00:13:00.060
+want it to link to in the other the other
+
+00:13:02.600 --> 00:13:02.800
+buffer and then I just say control HH to get
+
+00:13:04.760 --> 00:13:05.260
+my menu, I for implicit button,
+
+00:13:07.440 --> 00:13:07.940
+and then L for link. Boom,
+
+00:13:09.480 --> 00:13:09.980
+it inserts it, right at point.
+
+00:13:12.720 --> 00:13:12.880
+What did it do? It knew that this was in the
+
+00:13:14.900 --> 00:13:15.080
+hyperbole directory and I have a variable for
+
+00:13:17.600 --> 00:13:17.780
+that, so that if you sent this link to your
+
+00:13:18.680 --> 00:13:19.180
+friend who uses Hyperbole,
+
+00:13:21.300 --> 00:13:21.440
+it would still work right because they have a
+
+00:13:22.360 --> 00:13:22.860
+different hyperbole there.
+
+00:13:26.880 --> 00:13:27.380
+And then I want to go directly to line 116.
+
+00:13:29.860 --> 00:13:30.360
+So boom, it just took me there.
+
+00:13:33.680 --> 00:13:33.900
+So that's it. And Hyperbole is doing all this
+
+00:13:36.220 --> 00:13:36.420
+for you. You just say I want a link to this
+
+00:13:38.760 --> 00:13:38.940
+thing and it figures out what's at point and
+
+00:13:41.920 --> 00:13:42.240
+it determines the right type of implicit link
+
+00:13:45.360 --> 00:13:45.520
+to put there. And that's the whole point is
+
+00:13:47.120 --> 00:13:47.320
+that you're just working like when you're
+
+00:13:50.280 --> 00:13:50.500
+programming or you're writing an article and
+
+00:13:53.360 --> 00:13:53.520
+you just hit made a return or or pull up a
+
+00:13:57.040 --> 00:13:57.200
+menu and hit a key binding and you're off to
+
+00:14:02.220 --> 00:14:02.400
+the races. So that was implicit linking We
+
+00:14:04.760 --> 00:14:05.260
+can also create those explicit link buttons,
+
+00:14:07.440 --> 00:14:07.760
+and as well as the global link,
+
+00:14:09.140 --> 00:14:09.580
+where we would just give it a name,
+
+00:14:11.380 --> 00:14:11.640
+and it would automatically put it in our
+
+00:14:14.200 --> 00:14:14.640
+global button file without us even having
+
+00:14:18.240 --> 00:14:18.380
+that on screen. So lots of power there as
+
+00:14:19.160 --> 00:14:19.660
+well, lots of consistency.
+
+00:14:24.860 --> 00:14:25.040
+Now let's take a look at the K Outliner a
+
+00:14:27.780 --> 00:14:28.040
+little more. I'm just going to show you 1
+
+00:14:29.620 --> 00:14:29.820
+feature actually. I don't have time to show
+
+00:14:31.080 --> 00:14:31.580
+you the K Outliner in detail,
+
+00:14:33.720 --> 00:14:34.220
+but it's a really cool structured outliner
+
+00:14:35.900 --> 00:14:36.400
+that even if you love Org Mode,
+
+00:14:39.060 --> 00:14:39.280
+you should try it. And this is 1 thing that
+
+00:14:40.560 --> 00:14:41.060
+you can't get with Org Mode,
+
+00:14:44.620 --> 00:14:45.100
+is let's say Hyperlink comes with an example
+
+00:14:48.080 --> 00:14:48.580
+file which teaches you about the K Outliner.
+
+00:14:50.440 --> 00:14:50.940
+So we'll just use that right here.
+
+00:14:52.540 --> 00:14:53.040
+And when you're in the K Outliner,
+
+00:14:55.320 --> 00:14:55.820
+you can bring up and go into the K Outliner
+
+00:14:57.040 --> 00:14:57.540
+menu right here at the bottom.
+
+00:14:59.920 --> 00:15:00.360
+And there's a format menu there.
+
+00:15:02.220 --> 00:15:02.600
+You always take the first letter of a menu,
+
+00:15:04.600 --> 00:15:05.100
+the first capital letter of a menu item.
+
+00:15:08.540 --> 00:15:08.720
+So F for format and then D for display in
+
+00:15:11.200 --> 00:15:11.700
+browser. So just let's do it.
+
+00:15:16.720 --> 00:15:17.220
+We have with 1 button or 1 key we've produced
+
+00:15:23.160 --> 00:15:23.660
+the entire outline in a collapsible outline
+
+00:15:25.760 --> 00:15:26.260
+in HTML. So I can go here.
+
+00:15:28.740 --> 00:15:29.240
+I just have to use my mouse.
+
+00:15:32.800 --> 00:15:33.300
+So I can expand and collapse these trees live
+
+00:15:39.020 --> 00:15:39.520
+with very basic coding.
+
+00:15:42.180 --> 00:15:42.680
+We tried to keep this as simple as possible.
+
+00:15:45.420 --> 00:15:45.580
+But you see it maintains the structure of the
+
+00:15:47.380 --> 00:15:47.880
+outline and even tables.
+
+00:15:57.320 --> 00:15:57.620
+So all the formatting is maintained and again
+
+00:15:59.960 --> 00:16:00.100
+it's instant. Or you can just export it to a
+
+00:16:01.420 --> 00:16:01.920
+file without displaying it.
+
+00:16:05.380 --> 00:16:05.880
+Very efficient kinds of operations.
+
+00:16:10.760 --> 00:16:10.960
+So that was number 4. Number 3 is a
+
+00:16:12.900 --> 00:16:13.400
+subsystem, another subsystem in Hyperbole
+
+00:16:15.920 --> 00:16:16.080
+called Hycontrol, which is for window and
+
+00:16:18.340 --> 00:16:18.600
+frame management. And I just wanted to show
+
+00:16:20.760 --> 00:16:20.920
+you 1 thing in there. It's got a lot of
+
+00:16:23.920 --> 00:16:24.420
+capabilities. But I always had the problem
+
+00:16:27.840 --> 00:16:28.340
+that Emacs wouldn't let me scale my fonts,
+
+00:16:30.280 --> 00:16:30.780
+all of my faces at the same time.
+
+00:16:33.220 --> 00:16:33.680
+I wanted to zoom. I didn't want to increase
+
+00:16:36.020 --> 00:16:36.260
+the default font size and all the others stay
+
+00:16:40.160 --> 00:16:40.660
+the same. So let's just display our faces
+
+00:16:45.040 --> 00:16:45.200
+right here and then we have a choice of
+
+00:16:47.360 --> 00:16:47.860
+either controlling frames or windows.
+
+00:16:49.740 --> 00:16:50.240
+So let's start by controlling frames.
+
+00:16:52.600 --> 00:16:52.760
+So you get another submenu when you're in
+
+00:16:55.520 --> 00:16:56.020
+high control to tell you what to do here.
+
+00:16:59.280 --> 00:16:59.480
+And there's just lowercase z and uppercase z.
+
+00:17:02.980 --> 00:17:03.400
+So let's try it. So it's scaling the entire
+
+00:17:05.520 --> 00:17:06.020
+frame. And you can see from the list of faces
+
+00:17:08.000 --> 00:17:08.500
+that they're all scaling at the same time.
+
+00:17:09.720 --> 00:17:10.220
+And I can go back down.
+
+00:17:13.280 --> 00:17:13.619
+Now if I switch to window mode,
+
+00:17:15.839 --> 00:17:16.099
+and there's a special fast way to do that,
+
+00:17:18.599 --> 00:17:18.819
+just hit T to toggle. And if you look at the
+
+00:17:21.619 --> 00:17:21.819
+bottom menu it says frames right now now it
+
+00:17:25.319 --> 00:17:25.599
+says windows when I hit T so now if I do the
+
+00:17:30.540 --> 00:17:30.640
+same Z to increase it's just this window and
+
+00:17:36.300 --> 00:17:36.800
+but it's you know it's the faces in there so
+
+00:17:40.400 --> 00:17:40.680
+a lot of power again but I just haven't found
+
+00:17:43.080 --> 00:17:43.220
+anywhere else that you can get that kind of
+
+00:17:45.320 --> 00:17:45.820
+control over your faces very rapidly.
+
+00:17:51.140 --> 00:17:51.640
+So that's number 3. Now number 2,
+
+00:17:56.280 --> 00:17:56.780
+let's put that in there.
+
+00:18:02.980 --> 00:18:03.320
+So the HiROLO is the final subsystem in
+
+00:18:05.740 --> 00:18:06.240
+Hyperbole and this has gotten much cooler.
+
+00:18:08.180 --> 00:18:08.680
+So it started off as a contact management
+
+00:18:11.040 --> 00:18:11.540
+system, but it's really just a hierarchical
+
+00:18:14.800 --> 00:18:15.060
+record management system that lets you have
+
+00:18:17.520 --> 00:18:18.020
+as many files, directories as you want,
+
+00:18:19.860 --> 00:18:20.280
+and you can search across all of them without
+
+00:18:22.740 --> 00:18:23.240
+any external utilities necessary,
+
+00:18:25.740 --> 00:18:26.240
+just what's built into Emacs and Hyperlink.
+
+00:18:29.640 --> 00:18:29.920
+So as you can see, we've expanded it to
+
+00:18:31.320 --> 00:18:31.820
+handle org files, markdown,
+
+00:18:34.120 --> 00:18:34.620
+K outlines, Emacs outlines.
+
+00:18:36.440 --> 00:18:36.820
+So what I'm going to do is just say,
+
+00:18:40.240 --> 00:18:40.680
+I want to search using my Hyberlo file list.
+
+00:18:42.920 --> 00:18:43.140
+You just set that to what you wanted to
+
+00:18:44.640 --> 00:18:44.820
+search. But now you have all this
+
+00:18:46.020 --> 00:18:46.520
+flexibility. You can use environment
+
+00:18:48.680 --> 00:18:48.840
+variables in it. You can just specify a
+
+00:18:50.860 --> 00:18:51.340
+directory and it will find all those matching
+
+00:18:53.100 --> 00:18:53.600
+files below that directory recursively.
+
+00:18:58.260 --> 00:18:58.460
+You can give it the markdown file here and
+
+00:19:00.840 --> 00:19:01.160
+you can use file wildcards as well.
+
+00:19:04.020 --> 00:19:04.360
+I mean, look at this. It's got a list
+
+00:19:05.640 --> 00:19:06.140
+variable in it and a wildcard,
+
+00:19:09.360 --> 00:19:09.840
+and it's just all I'm gonna do is I change
+
+00:19:13.260 --> 00:19:13.380
+this from a Lisp expression to make it a
+
+00:19:15.040 --> 00:19:15.380
+hyper button. You just change the outer
+
+00:19:16.420 --> 00:19:16.920
+parens to angle brackets,
+
+00:19:19.120 --> 00:19:19.620
+and then it's automatically an implicit
+
+00:19:22.680 --> 00:19:22.840
+button that you can activate with made a
+
+00:19:25.840 --> 00:19:26.340
+return so just ran that and now I've set my
+
+00:19:29.220 --> 00:19:29.480
+file list so now let's do a search it would
+
+00:19:34.080 --> 00:19:34.580
+be ctrl H H roll it X R and then S for search
+
+00:19:36.180 --> 00:19:36.680
+But I'll just do it this way.
+
+00:19:39.820 --> 00:19:40.320
+And boom, it found everything that fast.
+
+00:19:42.440 --> 00:19:42.940
+And I can just get like,
+
+00:19:45.140 --> 00:19:45.520
+show the top items in there.
+
+00:19:47.760 --> 00:19:48.260
+So I kind of have outlining in this buffer.
+
+00:19:51.440 --> 00:19:51.940
+I can just move to each match that I hit.
+
+00:19:53.480 --> 00:19:53.680
+And notice, although everything was
+
+00:19:55.080 --> 00:19:55.580
+collapsed, it's expanding here.
+
+00:19:58.100 --> 00:19:58.520
+When I move in and out of each of the entry
+
+00:20:02.220 --> 00:20:02.400
+matches, it expands or collapses as I move to
+
+00:20:05.740 --> 00:20:06.240
+the next 1. So a lot of power there.
+
+00:20:09.120 --> 00:20:09.620
+What else? Just tabbing through these things.
+
+00:20:11.840 --> 00:20:12.120
+And you notice that it's working across all
+
+00:20:12.840 --> 00:20:13.340
+of these different types.
+
+00:20:15.720 --> 00:20:16.220
+And it's telling you which file everything
+
+00:20:17.540 --> 00:20:17.840
+came from right up here.
+
+00:20:19.440 --> 00:20:19.940
+So I could just made a return here,
+
+00:20:23.000 --> 00:20:23.500
+should work. Yes, revisit the file normally.
+
+00:20:25.260 --> 00:20:25.760
+And it just pulls it right up.
+
+00:20:27.900 --> 00:20:28.400
+So everything is live and hyperbole.
+
+00:20:29.620 --> 00:20:30.120
+You've got hyperlinks everywhere.
+
+00:20:33.240 --> 00:20:33.740
+Let's just get rid of that.
+
+00:20:41.420 --> 00:20:41.600
+Go back to our demo. So if you are fans of
+
+00:20:46.200 --> 00:20:46.560
+Vertico and Consult, you can now use that
+
+00:20:49.120 --> 00:20:49.300
+with the High Rollo. So all you have to do is
+
+00:20:50.940 --> 00:20:51.440
+let's just format our windows,
+
+00:20:55.400 --> 00:20:55.720
+and then I'll say, let's use ConsultGrep over
+
+00:20:58.380 --> 00:20:58.880
+the Rolodex. Now, it found all the matches
+
+00:21:01.560 --> 00:21:02.060
+there, and I can just move live through them
+
+00:21:04.540 --> 00:21:04.640
+in the buffer like you may be used to or I
+
+00:21:08.100 --> 00:21:08.600
+can filter back down and say using orderless
+
+00:21:13.480 --> 00:21:13.700
+joystick or anything that has joy in it just
+
+00:21:16.940 --> 00:21:17.160
+match to those lines and then I can you know
+
+00:21:19.680 --> 00:21:20.020
+either jump there or quit out of here.
+
+00:21:21.580 --> 00:21:22.080
+I'll just quit out of it right now.
+
+00:21:24.880 --> 00:21:25.240
+So very cool. And all of that is using
+
+00:21:28.380 --> 00:21:28.640
+whatever you personally set as the set of
+
+00:21:30.060 --> 00:21:30.560
+files and directories you want to search.
+
+00:21:35.740 --> 00:21:35.940
+And finally, our number 1 feature of
+
+00:21:40.120 --> 00:21:40.400
+Hyperbole is you can customize this to give
+
+00:21:42.960 --> 00:21:43.460
+you these kinds of implicit buttons,
+
+00:21:45.580 --> 00:21:46.080
+whatever kind you want.
+
+00:21:48.640 --> 00:21:49.140
+And there are 3 levels of doing this.
+
+00:21:50.640 --> 00:21:51.140
+The first is for non-programmers.
+
+00:21:53.180 --> 00:21:53.680
+You can just set a string,
+
+00:21:56.540 --> 00:21:57.040
+like a URL with a parameter in it.
+
+00:21:58.940 --> 00:21:59.440
+So the %s represents the parameter,
+
+00:22:01.240 --> 00:22:01.440
+and This is how you do a search on
+
+00:22:03.560 --> 00:22:04.060
+DuckDuckGo. So all I have to do is evaluate
+
+00:22:06.660 --> 00:22:07.160
+this defal for action link.
+
+00:22:10.520 --> 00:22:11.020
+And now I have a new implicit button type
+
+00:22:12.900 --> 00:22:13.400
+that I can put between angle brackets.
+
+00:22:15.080 --> 00:22:15.580
+And I just give it that name,
+
+00:22:17.500 --> 00:22:18.000
+ddg, and some parameter,
+
+00:22:19.540 --> 00:22:20.040
+whatever I want to search for,
+
+00:22:22.540 --> 00:22:23.040
+and this is a button that does that search.
+
+00:22:28.320 --> 00:22:28.700
+Very cool, right? So you can embed these.
+
+00:22:30.540 --> 00:22:31.040
+This could be a hyperlink in,
+
+00:22:34.620 --> 00:22:35.120
+you know, a comment in a programming file.
+
+00:22:38.040 --> 00:22:38.160
+Anything on the entire web that you want to
+
+00:22:41.820 --> 00:22:42.320
+link to, whatever kind of compact notation
+
+00:22:44.600 --> 00:22:44.800
+you want to give it. So that's what we're
+
+00:22:46.680 --> 00:22:47.140
+going to learn as we get more advanced here
+
+00:22:48.900 --> 00:22:49.400
+you can give it even more compact notations.
+
+00:22:51.940 --> 00:22:52.420
+So as you get more advanced you can say,
+
+00:22:53.760 --> 00:22:54.240
+well I don't like this angle bracket,
+
+00:22:56.520 --> 00:22:57.020
+I want to have an implicit button that uses
+
+00:22:59.340 --> 00:22:59.620
+these square brackets and then an angle
+
+00:23:01.960 --> 00:23:02.080
+bracket inside it. So then you need the
+
+00:23:04.680 --> 00:23:05.180
+defile for implicit link.
+
+00:23:08.600 --> 00:23:08.860
+This lets you specify your start and end
+
+00:23:11.980 --> 00:23:12.180
+delimiters for your new type and and then you
+
+00:23:14.340 --> 00:23:14.840
+can give it a function that you wanted to run
+
+00:23:18.120 --> 00:23:18.320
+and that will take the text of whatever is in
+
+00:23:19.280 --> 00:23:19.780
+the button, in this case,
+
+00:23:23.560 --> 00:23:23.760
+test release here, and feed it to the
+
+00:23:25.580 --> 00:23:26.060
+function that I gave here.
+
+00:23:29.100 --> 00:23:29.540
+So what this function does is grep over my
+
+00:23:33.260 --> 00:23:33.420
+git log and find any commits that include the
+
+00:23:34.940 --> 00:23:35.360
+term test release in it.
+
+00:23:38.000 --> 00:23:38.200
+So let's try it. First I have to add the
+
+00:23:41.540 --> 00:23:41.740
+button type and that's all it takes and it
+
+00:23:44.620 --> 00:23:44.800
+defined it now. So anywhere in Emacs now I
+
+00:23:46.440 --> 00:23:46.940
+can use this button type essentially.
+
+00:23:48.480 --> 00:23:48.980
+So let me try to activate it.
+
+00:23:52.260 --> 00:23:52.760
+Okay and it says yeah let's save it.
+
+00:23:55.440 --> 00:23:55.940
+Okay so now it's running a git log command.
+
+00:23:59.240 --> 00:23:59.440
+It found all the commits and now of course if
+
+00:24:02.720 --> 00:24:02.980
+I had made a return on this commit it
+
+00:24:05.000 --> 00:24:05.500
+recognizes it as an implicit link,
+
+00:24:08.800 --> 00:24:09.300
+and if I search for what was a test release,
+
+00:24:11.760 --> 00:24:11.960
+there it is. So this commit had that in
+
+00:24:13.740 --> 00:24:14.180
+there. So all these matches,
+
+00:24:16.000 --> 00:24:16.280
+so I don't know how other people do this,
+
+00:24:19.540 --> 00:24:20.040
+but for me this makes it a lot simpler.
+
+00:24:24.600 --> 00:24:24.800
+So a lot of power that any programmer can
+
+00:24:27.100 --> 00:24:27.520
+use. And finally, if you've mastered Emacs
+
+00:24:28.860 --> 00:24:29.360
+Lisp, or you're starting to,
+
+00:24:33.480 --> 00:24:33.740
+you can look in the hib types file in
+
+00:24:36.820 --> 00:24:37.320
+Hyperbole and see all sorts of uses of defib,
+
+00:24:38.940 --> 00:24:39.440
+which is defined implicit button.
+
+00:24:42.500 --> 00:24:42.660
+And that's the full power of e-LISP when you
+
+00:24:44.680 --> 00:24:45.060
+want to define 1. So what we're going to do
+
+00:24:46.280 --> 00:24:46.780
+here is I wanted to know,
+
+00:24:49.160 --> 00:24:49.660
+given a date, what the day of the week is.
+
+00:24:52.660 --> 00:24:53.040
+And because the date primitives weren't quite
+
+00:24:54.140 --> 00:24:54.640
+written the way I might like,
+
+00:24:57.040 --> 00:24:57.500
+it's a little longer than some.
+
+00:24:59.860 --> 00:25:00.360
+But I'm just going to evaluate this list.
+
+00:25:05.600 --> 00:25:06.100
+And I've now defined DOW as an action type.
+
+00:25:08.220 --> 00:25:08.520
+Now, how do I know I'm doing that?
+
+00:25:10.200 --> 00:25:10.700
+So I can always say Control-H,
+
+00:25:13.440 --> 00:25:13.580
+capital A here to see what a button's going
+
+00:25:15.360 --> 00:25:15.860
+to do. And it tells me When I'm there,
+
+00:25:17.640 --> 00:25:18.140
+I'm at a hyperbole button,
+
+00:25:22.940 --> 00:25:23.440
+and the type is from category DOW.
+
+00:25:24.920 --> 00:25:25.120
+And what's it gonna do?
+
+00:25:26.920 --> 00:25:27.420
+It takes a mark, it's gonna do a message
+
+00:25:29.380 --> 00:25:29.880
+action. Okay, so let's try it.
+
+00:25:32.320 --> 00:25:32.780
+It tells me that's a date,
+
+00:25:33.840 --> 00:25:34.220
+and it falls on a Sunday,
+
+00:25:35.320 --> 00:25:35.820
+which is today. That's correct.
+
+00:25:38.520 --> 00:25:39.020
+So 2 days from today is a Tuesday.
+
+00:25:42.960 --> 00:25:43.460
+Beautiful. So we've just totally transformed
+
+00:25:46.340 --> 00:25:46.840
+what we can do with text.
+
+00:25:48.400 --> 00:25:48.900
+You notice there's no markup here.
+
+00:25:53.200 --> 00:25:53.440
+And this is working with all of the other
+
+00:25:55.440 --> 00:25:55.600
+implicit types that we have everywhere in
+
+00:25:57.720 --> 00:25:57.920
+Emacs. It's only going to match to this kind
+
+00:26:00.060 --> 00:26:00.560
+of pattern and anywhere else,
+
+00:26:02.320 --> 00:26:02.820
+you know, it just won't trigger that type.
+
+00:26:06.180 --> 00:26:06.440
+So lots of power. You just need to get
+
+00:26:07.200 --> 00:26:07.700
+started with Hyperbole.
+
+00:26:10.640 --> 00:26:10.880
+There's great documentation both inside the
+
+00:26:13.820 --> 00:26:14.060
+code in the manual. There's a fast demo that
+
+00:26:16.620 --> 00:26:16.880
+you can start with and there's about 10
+
+00:26:19.000 --> 00:26:19.500
+different videos. There'll be 3 presentations
+
+00:26:21.940 --> 00:26:22.440
+on hyperbole here at the conference,
+
+00:26:26.000 --> 00:26:26.500
+and I hope you've enjoyed this presentation.
+
+00:26:29.740 --> 00:26:30.040
+I'd love to answer your questions and get
+
+00:26:31.200 --> 00:26:31.700
+some new users for Hyperbole.
+
+00:26:35.820 --> 00:26:36.020
+So lastly, I'd like to thank my
+
+00:26:37.680 --> 00:26:38.040
+co-maintainer, Matt, who's going to speak
+
+00:26:41.820 --> 00:26:42.040
+later about the extensive test protocols we
+
+00:26:45.420 --> 00:26:45.920
+have in Hyperbole. Hyperbole works on every
+
+00:26:47.360 --> 00:26:47.860
+version of Emacs from 27.1
+
+00:26:52.180 --> 00:26:52.600
+up, and every operating system and Windows
+
+00:26:55.960 --> 00:26:56.120
+system that you use. And thanks so much to
+
+00:26:58.140 --> 00:26:58.640
+the volunteers and the speakers at EmacsConf.
+
+00:27:01.720 --> 00:27:02.000
+You do a great job, and we're all really
+
+00:27:04.200 --> 00:27:04.400
+appreciative that you take all the time that
+
+00:27:05.720 --> 00:27:06.220
+you do to make this happen.
+
+00:27:07.120 --> 00:27:07.620
+Thank you very much.
+
+00:27:10.900 --> 00:27:11.400
+[Speaker 0]: And thank you so much Bob.
+
+00:27:14.540 --> 00:27:14.680
+So I'll let you do the gymnastics to join us
+
+00:27:15.920 --> 00:27:16.420
+back on BBB and put your webcam.
+
+00:27:18.340 --> 00:27:18.840
+In the meantime, I'll invite people,
+
+00:27:20.240 --> 00:27:20.740
+as Sasha told you in the introduction,
+
+00:27:23.300 --> 00:27:23.600
+to go put your question in the pad.
+
+00:27:25.680 --> 00:27:25.880
+The link is on the talks page and also on
+
+00:27:27.720 --> 00:27:28.220
+IRC. So take your time.
+
+00:27:29.700 --> 00:27:29.900
+We've already got some people who've asked
+
+00:27:32.860 --> 00:27:33.060
+questions. You can also start joining the
+
+00:27:34.640 --> 00:27:35.140
+room. Let me just ping Sasha.
+
+00:27:37.940 --> 00:27:38.440
+Ping to open ID HyperAmp.
+
+00:27:40.920 --> 00:27:41.120
+So, you'll be able to join us on
+
+00:27:43.000 --> 00:27:43.260
+BigBlueButton as well to go chat with Bob
+
+00:27:44.900 --> 00:27:45.040
+more directly. I'm not sure if people have
+
+00:27:45.980 --> 00:27:46.480
+joined already. Not yet.
+
+00:27:50.920 --> 00:27:51.060
+So, Bob, what I'll do,
+
+00:27:51.880 --> 00:27:52.280
+we already have 4 questions.
+
+00:27:53.920 --> 00:27:54.080
+I'm gonna read them to you and you can take
+
+00:27:54.720 --> 00:27:54.900
+your time answering them,
+
+00:27:57.180 --> 00:27:57.340
+but we do have about 7 minutes until we go to
+
+00:27:58.940 --> 00:27:59.120
+the next talk, so we need to be a little bit
+
+00:28:00.420 --> 00:28:00.920
+[Speaker 1]: Okay.
+
+00:28:02.920 --> 00:28:03.240
+[Speaker 0]: chop-chop. All right, so reading the first
+
+00:28:05.000 --> 00:28:05.460
+questions, and I'm also going to display them
+
+00:28:06.400 --> 00:28:06.900
+for the stream to see,
+
+00:28:09.600 --> 00:28:09.760
+do buttons keep their metadata within the
+
+00:28:12.100 --> 00:28:12.380
+same file? E.g., would I see it if I change
+
+00:28:13.440 --> 00:28:13.940
+to fundamental mode, for instance?
+
+00:28:19.060 --> 00:28:19.340
+[Speaker 1]: So all of the things that I was showing you,
+
+00:28:20.800 --> 00:28:21.300
+implicit buttons have no metadata.
+
+00:28:23.400 --> 00:28:23.800
+That's the great thing about them,
+
+00:28:27.140 --> 00:28:27.400
+is you just type them in the buffer and what
+
+00:28:29.800 --> 00:28:30.020
+you see is all there is to that button and
+
+00:28:32.800 --> 00:28:33.300
+hyperbole generates all the smarts associated
+
+00:28:35.280 --> 00:28:35.780
+with them. When you create an explicit
+
+00:28:38.160 --> 00:28:38.660
+button, which I showed you 1 or 2 examples
+
+00:28:42.520 --> 00:28:42.720
+of, that metadata is, there is metadata with
+
+00:28:45.420 --> 00:28:45.860
+that, and that is stored in a separate file
+
+00:28:47.360 --> 00:28:47.860
+in the same directory called .hypb.
+
+00:28:51.300 --> 00:28:51.500
+So it's hidden away and it doesn't affect the
+
+00:28:53.200 --> 00:28:53.700
+format of the buffer that it's in.
+
+00:28:56.040 --> 00:28:56.540
+So again, what you see is what you get.
+
+00:28:58.520 --> 00:28:58.740
+You just see the delimiters around the
+
+00:29:00.640 --> 00:29:01.140
+explicit button and that's it.
+
+00:29:04.000 --> 00:29:04.500
+So Hyperbole takes care of all that for you.
+
+00:29:08.080 --> 00:29:08.360
+However, if you embed them into a mail
+
+00:29:09.200 --> 00:29:09.480
+message, which you can,
+
+00:29:11.920 --> 00:29:12.180
+you can mail buttons, then there is a hidden
+
+00:29:14.440 --> 00:29:14.700
+area at the end of the mail message that
+
+00:29:16.640 --> 00:29:17.120
+encodes the metadata for the explicit
+
+00:29:17.120 --> 00:29:17.620
+buttons.
+
+00:29:21.140 --> 00:29:21.640
+[Speaker 0]: Ok, great. Next question.
+
+00:29:24.060 --> 00:29:24.560
+Is it possible to link to a file by its ID,
+
+00:29:26.980 --> 00:29:27.340
+like the node, org ID or some similar unique
+
+00:29:27.620 --> 00:29:28.120
+string inside?
+
+00:29:32.120 --> 00:29:32.620
+[Speaker 1]: Yes, In fact, that's 1 of the new features in
+
+00:29:37.640 --> 00:29:37.840
+9. You just made a return on an ID and it
+
+00:29:40.280 --> 00:29:40.780
+takes you right to the org node,
+
+00:29:44.760 --> 00:29:44.900
+works with org Rome and org straight out of
+
+00:29:47.680 --> 00:29:47.900
+the box. We're looking at ways to make it
+
+00:29:49.640 --> 00:29:50.040
+easier to just insert those in places,
+
+00:29:52.580 --> 00:29:52.800
+but since you have word keys that do that
+
+00:29:55.320 --> 00:29:55.600
+already, you can just insert them in any
+
+00:29:58.180 --> 00:29:58.420
+documents and Hyperbole will recognize them.
+
+00:30:02.080 --> 00:30:02.580
+I think In some cases you may need to put id
+
+00:30:04.900 --> 00:30:05.400
+colon in front of the id as well.
+
+00:30:06.420 --> 00:30:06.920
+Generally it works.
+
+00:30:11.060 --> 00:30:11.560
+[Speaker 0]: Ok, great. Moving on to the next question.
+
+00:30:13.260 --> 00:30:13.760
+Regarding the frames example,
+
+00:30:16.160 --> 00:30:16.320
+any thoughts or considerations for a
+
+00:30:18.760 --> 00:30:19.020
+transient interface or is this something 1
+
+00:30:22.120 --> 00:30:22.280
+could already toggle? Are you familiar with
+
+00:30:22.660 --> 00:30:23.160
+transient interface?
+
+00:30:26.200 --> 00:30:26.700
+[Speaker 1]: Yes, we don't use transient because we,
+
+00:30:29.640 --> 00:30:30.140
+you know, Hyperbole started out in 1991,
+
+00:30:34.020 --> 00:30:34.280
+though it's had much much work since then so
+
+00:30:37.740 --> 00:30:37.940
+we predate a lot of newer things in Emacs and
+
+00:30:41.040 --> 00:30:41.400
+then we just use them as as they Become
+
+00:30:45.180 --> 00:30:45.480
+useful too hyperbole We think the the mini
+
+00:30:46.480 --> 00:30:46.720
+buffer menu is pretty good.
+
+00:30:48.280 --> 00:30:48.780
+We could rewrite stuff in transient,
+
+00:30:51.100 --> 00:30:51.600
+but we haven't seen the need yet.
+
+00:30:54.760 --> 00:30:54.960
+Maybe high control, that might be a good
+
+00:30:58.260 --> 00:30:58.480
+candidate, because there are so many keys in
+
+00:31:00.240 --> 00:31:00.440
+it. So we'll think about that.
+
+00:31:02.560 --> 00:31:03.060
+But it would be a while before we got to it.
+
+00:31:06.840 --> 00:31:07.060
+[Speaker 0]: Moving on to the next question,
+
+00:31:08.620 --> 00:31:08.800
+sorry I got really confused because there's a
+
+00:31:10.760 --> 00:31:11.260
+French salut in the text.
+
+00:31:13.100 --> 00:31:13.600
+Is someone saying hi to me or something?
+
+00:31:14.600 --> 00:31:15.100
+All right, next question.
+
+00:31:16.920 --> 00:31:17.420
+Regarding multi-file search functionality,
+
+00:31:22.260 --> 00:31:22.740
+why not implement it within the existing
+
+00:31:25.280 --> 00:31:25.680
+framework of MetaX grep or similar built-in
+
+00:31:28.020 --> 00:31:28.260
+commands? Yet another search interface sounds
+
+00:31:28.620 --> 00:31:29.120
+a bit redundant.
+
+00:31:33.660 --> 00:31:33.900
+[Speaker 1]: Multi-file search, so High Rollo I guess
+
+00:31:35.640 --> 00:31:35.940
+you're talking about. I think what you missed
+
+00:31:38.940 --> 00:31:39.440
+there is that High Rollo matches to records,
+
+00:31:42.620 --> 00:31:42.880
+multi-line records, so it's not a
+
+00:31:44.860 --> 00:31:45.360
+line-oriented match, it's a record-oriented
+
+00:31:50.520 --> 00:31:50.760
+match. So Grep, you can say maybe give me 3
+
+00:31:52.800 --> 00:31:53.000
+lines of context, but what if I have a
+
+00:31:55.860 --> 00:31:56.100
+20-line record? I want to see the whole
+
+00:31:58.580 --> 00:31:59.060
+thing. And so, it's a full-text search
+
+00:32:02.980 --> 00:32:03.480
+interface, which lets you have any size
+
+00:32:06.760 --> 00:32:07.260
+entries or nodes in the match buffer.
+
+00:32:10.520 --> 00:32:10.760
+So that's 1 reason. MADAX grep works with
+
+00:32:12.720 --> 00:32:12.880
+hyperbole. I mean, you just use it if you
+
+00:32:15.240 --> 00:32:15.580
+want and then you can hit MADA return on grep
+
+00:32:19.400 --> 00:32:19.640
+lines. So we basically take everything from
+
+00:32:24.240 --> 00:32:24.400
+POSIX and everything in Emacs and we try to
+
+00:32:26.200 --> 00:32:26.680
+make a lot of it simpler to use.
+
+00:32:28.440 --> 00:32:28.940
+We don't take away any of the functionality,
+
+00:32:30.540 --> 00:32:31.040
+we just augment it.
+
+00:32:35.020 --> 00:32:35.220
+[Speaker 0]: Right, and I think that's the logic for a lot
+
+00:32:37.000 --> 00:32:37.200
+of the packages you know the philosophy is
+
+00:32:38.940 --> 00:32:39.220
+just you create your little bit your little
+
+00:32:41.180 --> 00:32:41.420
+island where you do your stuff and if you can
+
+00:32:42.800 --> 00:32:42.940
+resonate with other islands so much the
+
+00:32:44.860 --> 00:32:45.080
+better and it feels like between those
+
+00:32:47.720 --> 00:32:47.900
+islands you know hyperbole is a great way to
+
+00:32:49.480 --> 00:32:49.980
+connect things that are just text.
+
+00:32:51.380 --> 00:32:51.880
+So it's always been a lovely philosophy.
+
+00:32:53.160 --> 00:32:53.620
+There's always been a lovely philosophy
+
+00:32:53.860 --> 00:32:54.360
+behind it.
+
+00:32:58.020 --> 00:32:58.200
+[Speaker 1]: 1 other point I'd make there is that the
+
+00:33:01.060 --> 00:33:01.480
+Hyrolo also contains logical search
+
+00:33:04.740 --> 00:33:04.940
+operators. So when I typed in that string you
+
+00:33:06.900 --> 00:33:07.360
+could just as well type with like Lisp
+
+00:33:08.640 --> 00:33:09.140
+expressions, semi Lisp expressions.
+
+00:33:12.980 --> 00:33:13.480
+You can say open paren and word 1,
+
+00:33:16.800 --> 00:33:17.280
+word 2, close paren. You know you can have or
+
+00:33:22.200 --> 00:33:22.360
+and XOR and not and it'll do the search and
+
+00:33:23.720 --> 00:33:24.220
+just retrieve the entries,
+
+00:33:27.440 --> 00:33:27.600
+again, multi-line entries that match all of
+
+00:33:29.200 --> 00:33:29.700
+the criteria that you specified there.
+
+00:33:30.720 --> 00:33:31.120
+So that's fairly unique,
+
+00:33:33.000 --> 00:33:33.320
+I think. So you basically got a full text
+
+00:33:35.340 --> 00:33:35.840
+search platform with logical operators,
+
+00:33:38.080 --> 00:33:38.580
+instantly, you know, fast moving,
+
+00:33:42.280 --> 00:33:42.720
+rapid keys that you can control everything
+
+00:33:44.920 --> 00:33:45.280
+with and it's all integrated into this larger
+
+00:33:45.280 --> 00:33:45.780
+framework.
+
+00:33:48.800 --> 00:33:49.060
+[Speaker 0]: Okay, great. Well, Bob,
+
+00:33:50.020 --> 00:33:50.520
+you have 2 more questions,
+
+00:33:53.600 --> 00:33:53.740
+but there's a big 1 about what inspired you
+
+00:33:56.120 --> 00:33:56.440
+to write it back. It's being hyperbole around
+
+00:33:56.980 --> 00:33:57.360
+the time of its birth,
+
+00:33:59.180 --> 00:33:59.680
+but sadly, we only have about 1 more minute.
+
+00:34:01.000 --> 00:34:01.320
+So what I'm going to ask you to do,
+
+00:34:02.240 --> 00:34:02.720
+feel free to answer the question.
+
+00:34:05.020 --> 00:34:05.140
+If you go on BBB, I've pasted the link to the
+
+00:34:06.820 --> 00:34:06.960
+other pad, I think you can see it on your
+
+00:34:10.520 --> 00:34:11.020
+[Speaker 1]: I have the ether pad up.
+
+00:34:12.560 --> 00:34:13.060
+[Speaker 0]: computer as well. So what are we going to do?
+
+00:34:16.679 --> 00:34:16.880
+Sorry, I'm just a little bit pressed by time
+
+00:34:18.280 --> 00:34:18.480
+because it's not me controlling when we move
+
+00:34:19.699 --> 00:34:20.199
+on to the next talk, as was evidenced
+
+00:34:22.000 --> 00:34:22.179
+yesterday when we got yonked to the next
+
+00:34:25.020 --> 00:34:25.159
+talk. So Bob, feel free to take all the time
+
+00:34:25.840 --> 00:34:26.280
+you want to answer questions.
+
+00:34:27.719 --> 00:34:28.040
+People, if you wanna join the Big Blue Button
+
+00:34:29.960 --> 00:34:30.060
+room, the links are available and open on the
+
+00:34:31.480 --> 00:34:31.719
+talk page. You can join and ask as many
+
+00:34:32.560 --> 00:34:33.060
+questions as you want to Bob.
+
+00:34:34.199 --> 00:34:34.440
+And for us, with a live stream,
+
+00:34:36.219 --> 00:34:36.500
+we'll be moving on to the next talk in about
+
+00:34:38.940 --> 00:34:39.060
+30 seconds. So Bob, all that's left is for me
+
+00:34:40.679 --> 00:34:40.900
+to thank you for your presentation again this
+
+00:34:42.100 --> 00:34:42.600
+year and for all your answers.
+
+00:34:44.060 --> 00:34:44.560
+[Speaker 1]: Thank you, Leo.
+
+00:34:46.159 --> 00:34:46.440
+[Speaker 0]: All right. Bye bye, Bob.
+
+00:34:48.080 --> 00:34:48.239
+And we'll be moving on to the next talk in
+
+00:34:49.900 --> 00:34:50.400
+about 10 seconds. See you in a bit.
+
+00:34:55.860 --> 00:34:56.139
+All right, Bob, we are off air I think now.
+
+00:34:57.540 --> 00:34:57.720
+Thank you so much. I need to get moving for
+
+00:35:01.820 --> 00:35:02.320
+[Speaker 1]: Okay, is somebody gonna keep writing answers
+
+00:35:04.040 --> 00:35:04.540
+in here or I need to type them in?
+
+00:35:06.000 --> 00:35:06.280
+[Speaker 0]: the next talk. It's probably best now if you
+
+00:35:09.160 --> 00:35:09.480
+read the questions on your own and answer
+
+00:35:10.680 --> 00:35:11.000
+them. We'll collate everything together,
+
+00:35:11.980 --> 00:35:12.480
+we'd just like to have your answers.
+
+00:35:16.680 --> 00:35:17.180
+[Speaker 1]: I hope some people will join the BBB.
+
+00:35:21.140 --> 00:35:21.340
+[Speaker 0]: it in my... All right,
+
+00:35:21.340 --> 00:35:21.840
+bye-bye.
+
+00:35:22.800 --> 00:35:23.300
+[Speaker 1]: But I'll start. I'll put Bye-bye.
+
+00:35:28.360 --> 00:35:28.580
+So let me take a second here to see what
+
+00:35:32.480 --> 00:35:32.980
+questions we have. Did we cover that?
+
+00:35:42.400 --> 00:35:42.900
+OK. The point is why not upstream search
+
+00:35:46.100 --> 00:35:46.600
+interface? Could you clarify that question?
+
+00:35:50.980 --> 00:35:51.420
+I don't quite know what that means.
+
+00:35:53.620 --> 00:35:53.800
+So I'll go on to the next 1 and come back to
+
+00:35:57.520 --> 00:35:57.660
+that. Hyperlinks been around for a number of
+
+00:35:59.620 --> 00:35:59.860
+years now. What inspired you to write it back
+
+00:36:00.960 --> 00:36:01.460
+around the time of its birth?
+
+00:36:02.640 --> 00:36:03.140
+Well, that's a good question.
+
+00:36:06.940 --> 00:36:07.360
+It was born before the World Wide Web,
+
+00:36:08.760 --> 00:36:09.260
+actually. And it was right before.
+
+00:36:12.600 --> 00:36:13.100
+I remember we were in the midst of a version
+
+00:36:15.800 --> 00:36:16.300
+when the first version of the web occurred.
+
+00:36:19.640 --> 00:36:19.820
+And I was thinking that there was going to be
+
+00:36:22.200 --> 00:36:22.700
+an information explosion of unstructured
+
+00:36:26.920 --> 00:36:27.140
+information. And like we needed to have much
+
+00:36:30.660 --> 00:36:30.920
+better tools to be able to manage say like
+
+00:36:36.300 --> 00:36:36.740
+5,000 email messages coming in and all sorts
+
+00:36:38.760 --> 00:36:39.260
+of non-database-oriented information
+
+00:36:41.500 --> 00:36:42.000
+structures. So I said we need an advanced
+
+00:36:45.860 --> 00:36:46.080
+interactive hypertext system and it needs to
+
+00:36:49.160 --> 00:36:49.320
+work with all the general capabilities that
+
+00:36:53.600 --> 00:36:54.100
+we use like email and our document production
+
+00:36:58.180 --> 00:36:58.500
+systems. So I was doing research at the time
+
+00:37:03.960 --> 00:37:04.200
+at a university And I decided to work on
+
+00:37:05.640 --> 00:37:06.140
+something that we called personalized
+
+00:37:07.020 --> 00:37:07.520
+information environments.
+
+00:37:09.960 --> 00:37:10.120
+And there's a paper about this out there if
+
+00:37:11.540 --> 00:37:12.040
+you want to dig it out on the web.
+
+00:37:14.860 --> 00:37:15.360
+So Pies, as they were called,
+
+00:37:19.620 --> 00:37:20.040
+was an architecture which would have a bunch
+
+00:37:23.940 --> 00:37:24.100
+of managers, like Hyperbole was 1 of the
+
+00:37:25.320 --> 00:37:25.820
+managers, the hypertext manager,
+
+00:37:29.060 --> 00:37:29.440
+and then a bunch of point tools that would
+
+00:37:30.220 --> 00:37:30.720
+leverage the managers,
+
+00:37:33.080 --> 00:37:33.580
+like an email reader would be a point tool
+
+00:37:35.640 --> 00:37:36.140
+that would leverage the hypertext manager.
+
+00:37:39.200 --> 00:37:39.480
+And so the first, I did in fact write
+
+00:37:39.960 --> 00:37:40.460
+something called PyMail,
+
+00:37:43.340 --> 00:37:43.840
+which was very much Gmail-like,
+
+00:37:47.140 --> 00:37:47.640
+before Gmail. And so inside,
+
+00:37:50.800 --> 00:37:51.300
+and I did a, it was like our mail in a way,
+
+00:37:53.520 --> 00:37:54.020
+but inside your our mail summaries,
+
+00:37:56.720 --> 00:37:57.180
+for example, you could have explicit buttons
+
+00:38:00.680 --> 00:38:01.120
+embedded and that were drawn from the subject
+
+00:38:01.800 --> 00:38:02.300
+of your email message,
+
+00:38:05.640 --> 00:38:06.140
+and they'd work just like the regular button.
+
+00:38:09.520 --> 00:38:10.020
+So it was very flexible and it had rule-based
+
+00:38:11.140 --> 00:38:11.640
+processing and things.
+
+00:38:14.180 --> 00:38:14.340
+So Hyperbole came out of that and it's come a
+
+00:38:19.020 --> 00:38:19.520
+long way, But it's still a very useful core
+
+00:38:22.200 --> 00:38:22.440
+hypertext system, hypermedia system I should
+
+00:38:26.520 --> 00:38:26.920
+say. Are you familiar with the Embark
+
+00:38:29.760 --> 00:38:30.060
+package? I am a bit. I've just started using
+
+00:38:31.400 --> 00:38:31.900
+it. I think there's some overlapping
+
+00:38:33.700 --> 00:38:34.200
+functionality with hyperbole.
+
+00:38:39.140 --> 00:38:39.360
+Yes, we've found that people over time have
+
+00:38:41.160 --> 00:38:41.600
+enjoyed hyperbole and have started
+
+00:38:43.460 --> 00:38:43.960
+replicating some of its features,
+
+00:38:45.380 --> 00:38:45.880
+small amounts of the features.
+
+00:38:51.120 --> 00:38:51.340
+I talked to, I hope I don't miss his name,
+
+00:38:55.760 --> 00:38:56.000
+but O'Adam who writes that once in a while we
+
+00:38:59.040 --> 00:38:59.480
+dialogue and I think Embark is great,
+
+00:39:04.080 --> 00:39:04.500
+you know, I'll give him some pointers too and
+
+00:39:07.740 --> 00:39:08.040
+he thinks that Embark and hyperbole are quite
+
+00:39:10.240 --> 00:39:10.740
+compatible too, just like organ hyperbole.
+
+00:39:12.580 --> 00:39:13.080
+So that's how we like to keep it.
+
+00:39:17.940 --> 00:39:18.140
+Some people prefer just a small package of
+
+00:39:20.920 --> 00:39:21.100
+MBARC, and it does different things than what
+
+00:39:23.600 --> 00:39:23.800
+Hyperbole does. So I think you use all of
+
+00:39:27.280 --> 00:39:27.540
+these tools together, and they can work very
+
+00:39:33.460 --> 00:39:33.960
+well together. Any other questions?
+
+00:39:37.800 --> 00:39:38.300
+Anybody still here? If not,
+
+00:39:40.680 --> 00:39:41.180
+probably people are off to another talk.
+
+00:39:47.160 --> 00:39:47.660
+So thank you very much and look for Hyperbole
+
+00:39:51.340 --> 00:39:51.840
+version 9 in the next week.
+
+00:39:56.380 --> 00:39:56.880
+Thanks very much. Bye.
+
+00:40:06.660 --> 00:40:07.120
+Should I leave BBB? Oh Alpha Papa's here.
+
+00:40:15.840 --> 00:40:16.040
+Hey. Good to see you. Alright,
+
+00:40:22.240 --> 00:40:22.740
+well... Well, I'll stay for another minute,
+
+00:40:26.920 --> 00:40:27.280
+but I think I'm going to go off video 2 and
+
+00:40:29.280 --> 00:40:29.780
+start listening to another talk.
+
+00:40:30.720 --> 00:40:30.980
+Thanks, everyone. Thanks,
+
+00:40:30.980 --> 00:40:31.480
+everyone.
+
+00:40:56.920 --> 00:40:56.960
+Yes, I can hear you. Yes,
+
+00:40:59.720 --> 00:41:00.040
+[Speaker 0]: Have you been answering questions?
+
+00:41:03.540 --> 00:41:03.700
+[Speaker 1]: I can hear you. finished answering the
+
+00:41:04.700 --> 00:41:05.200
+questions. We're all done.
+
+00:41:07.200 --> 00:41:07.280
+[Speaker 0]: I Okay, cool. Well, what I'm going to do,
+
+00:41:08.100 --> 00:41:08.400
+I'm going to close the room,
+
+00:41:09.720 --> 00:41:10.160
+unless you want to go a little longer,
+
+00:41:11.640 --> 00:41:11.880
+because this talk that we're playing right
+
+00:41:13.180 --> 00:41:13.480
+now is finishing really quick,
+
+00:41:14.620 --> 00:41:15.120
+and we don't have a Q&A afterwards.
+
+00:41:18.540 --> 00:41:19.040
+So, do you want to stay on air or something?
+
+00:41:21.240 --> 00:41:21.740
+[Speaker 1]: Yeah, if you let people know to come back,
+
+00:41:23.140 --> 00:41:23.320
+because some went to go hear that
+
+00:41:24.400 --> 00:41:24.900
+presentation, I can stay.
+
+00:41:27.440 --> 00:41:27.880
+[Speaker 0]: Sure, I'll make an announcement then.
+
+00:41:29.240 --> 00:41:29.680
+And you can stay, we'll just put on BBB.
+
+00:41:31.400 --> 00:41:31.840
+You can stay muted until people join.
+
+00:41:33.440 --> 00:41:33.640
+But this way it opens up avenues for people
+
+00:41:35.580 --> 00:41:35.980
+to join. And if no 1 shows up in 5 minutes,
+
+00:41:36.560 --> 00:41:37.060
+we'll all go on break.
+
+00:41:40.560 --> 00:41:41.060
+Does that sound okay? Cool,
+
+00:41:44.180 --> 00:41:44.320
+I'll go back to the management in the
+
+00:41:45.280 --> 00:41:45.780
+background and I'll let you know.
+
+00:41:47.000 --> 00:41:47.240
+[Speaker 1]: Great, thank you. Where are you?
+
+00:41:47.700 --> 00:41:48.200
+Oh yeah, okay.
+
+00:41:50.400 --> 00:41:50.740
+[Speaker 0]: So sorry, I kind of need to run.
+
+00:41:51.880 --> 00:41:52.380
+I'll be back in about 2 minutes.
+
+00:42:05.740 --> 00:42:06.240
+Okay, bye. Bye.
+
+00:43:27.040 --> 00:43:27.540
+Okay, Bob, I've won the stream.
+
+00:43:28.660 --> 00:43:28.940
+We are joining it now.
+
+00:43:29.880 --> 00:43:30.380
+We've got about 5 seconds.
+
+00:43:43.080 --> 00:43:43.580
+And I think we are back.
+
+00:43:50.760 --> 00:43:51.260
+so we are gone, Bob, please.
+
+00:43:52.800 --> 00:43:53.300
+[Speaker 1]: Hi. So, yeah, I was going to say,
+
+00:43:56.720 --> 00:43:57.160
+can we see if anybody comes back in the room?
+
+00:43:57.620 --> 00:43:58.120
+How do you tell?
+
+00:44:03.420 --> 00:44:03.740
+[Speaker 0]: You should be able to show on the left,
+
+00:44:04.440 --> 00:44:04.920
+you've got on BbBlueButton,
+
+00:44:06.300 --> 00:44:06.380
+you've got a button, I'm showing it on the
+
+00:44:08.200 --> 00:44:08.440
+screen, but you've got a little button that
+
+00:44:09.880 --> 00:44:10.380
+allows you to show the people joining.
+
+00:44:15.140 --> 00:44:15.340
+So, hello everyone. Let's see if you had more
+
+00:44:16.760 --> 00:44:17.080
+question on your pad that we could be taking
+
+00:44:18.920 --> 00:44:19.040
+in the meantime, just give me a second to
+
+00:44:23.000 --> 00:44:23.500
+[Speaker 1]: your pad. Here we go, an error occurred.
+
+00:44:32.720 --> 00:44:33.220
+[Speaker 0]: find Okay. All right, it's loading up.
+
+00:44:37.960 --> 00:44:38.440
+[Speaker 1]: Wow. Feels like there's an AI writing this
+
+00:44:41.180 --> 00:44:41.680
+stuff on the pad. Has it?
+
+00:44:45.820 --> 00:44:46.060
+Is this the last pad? Oh no,
+
+00:44:46.880 --> 00:44:47.080
+this is a different 1,
+
+00:44:51.020 --> 00:44:51.520
+[Speaker 0]: Which question are you looking at now?
+
+00:44:53.460 --> 00:44:53.820
+[Speaker 1]: sorry. It was a different pad,
+
+00:44:55.940 --> 00:44:56.440
+[Speaker 0]: Oh right.
+
+00:44:57.260 --> 00:44:57.380
+[Speaker 2]: Okay, here
+
+00:44:57.560 --> 00:44:58.060
+[Speaker 1]: that was the problem. we go.
+
+00:45:00.660 --> 00:45:00.900
+Okay, I'm back. So, yeah,
+
+00:45:03.000 --> 00:45:03.480
+it looks like... Is anybody back?
+
+00:45:06.680 --> 00:45:07.180
+Send, if you're here, send a chat message.
+
+00:45:09.520 --> 00:45:10.020
+[Speaker 0]: Yeah, because it's been something.
+
+00:45:13.740 --> 00:45:14.240
+You have, apparently, whenever we leave those
+
+00:45:17.720 --> 00:45:18.220
+BBB chat room open, the moment we go off air,
+
+00:45:20.080 --> 00:45:20.280
+people start joining and asking a lot of very
+
+00:45:21.980 --> 00:45:22.240
+interesting questions and you know that's all
+
+00:45:24.140 --> 00:45:24.280
+well and good, we'll be able to put them on
+
+00:45:26.160 --> 00:45:26.280
+the page later on. But it'd be great if you
+
+00:45:28.040 --> 00:45:28.260
+could also have those discussions when we are
+
+00:45:29.640 --> 00:45:30.140
+live because a lot of people would benefit
+
+00:45:31.960 --> 00:45:32.120
+from the brilliance that goes on in this
+
+00:45:34.400 --> 00:45:34.760
+room. So please don't be shy,
+
+00:45:39.400 --> 00:45:39.900
+[Speaker 1]: So we're on the general stream now?
+
+00:45:41.660 --> 00:45:41.760
+[Speaker 0]: join and talk. Yep, we are back on the
+
+00:45:45.940 --> 00:45:46.060
+general stream. We have about until 10 of the
+
+00:45:47.680 --> 00:45:48.180
+next hour, which is 19 minutes.
+
+00:45:55.640 --> 00:45:56.140
+[Speaker 1]: Just- Why So have you ever tried hyperbole,
+
+00:45:56.380 --> 00:45:56.880
+Leo?
+
+00:45:58.780 --> 00:45:59.280
+[Speaker 0]: don't you and I talk? I have never,
+
+00:46:02.440 --> 00:46:02.840
+but You know, it feels like every year when
+
+00:46:03.380 --> 00:46:03.740
+you present something,
+
+00:46:05.140 --> 00:46:05.640
+it feels like I already know so much.
+
+00:46:07.080 --> 00:46:07.580
+Because of the buttons,
+
+00:46:09.600 --> 00:46:10.080
+it feels like it's also something that we've
+
+00:46:11.980 --> 00:46:12.440
+reinvented many times in Emacs.
+
+00:46:13.440 --> 00:46:13.940
+It's like conversion to evolution,
+
+00:46:16.400 --> 00:46:16.560
+except you're the 1 who started ahead of
+
+00:46:16.920 --> 00:46:17.420
+everyone else.
+
+00:46:19.200 --> 00:46:19.700
+[Speaker 1]: Well, that's a good point because,
+
+00:46:22.840 --> 00:46:23.200
+you know, we have, Emacs itself has push
+
+00:46:25.240 --> 00:46:25.520
+buttons, which you see like in the help
+
+00:46:27.220 --> 00:46:27.540
+buffers. And those used to,
+
+00:46:29.340 --> 00:46:29.840
+we didn't really do anything with those,
+
+00:46:32.280 --> 00:46:32.780
+but now we've subsumed them as implicit
+
+00:46:34.840 --> 00:46:35.340
+buttons as well. So you're made a return,
+
+00:46:38.000 --> 00:46:38.500
+we'll work on those anywhere too.
+
+00:46:41.320 --> 00:46:41.820
+So, we're trying to get,
+
+00:46:45.660 --> 00:46:45.920
+you use 1 key, right? To control every type
+
+00:46:46.800 --> 00:46:47.080
+of button that you have.
+
+00:46:47.920 --> 00:46:48.420
+It works on org links,
+
+00:46:51.300 --> 00:46:51.800
+org buttons anywhere, or URLs.
+
+00:46:53.940 --> 00:46:54.440
+Because it's so simple.
+
+00:46:58.480 --> 00:46:58.820
+All you need is like 5 to 10 lines of code to
+
+00:47:02.560 --> 00:47:02.760
+map. You map the pattern that represents a
+
+00:47:04.900 --> 00:47:05.060
+concept, right? And then you can create an
+
+00:47:07.500 --> 00:47:07.700
+infinite number of those buttons from that
+
+00:47:09.240 --> 00:47:09.520
+type. That's what's really cool about
+
+00:47:12.560 --> 00:47:13.060
+Hyperbole is say I have a 500 page document
+
+00:47:15.400 --> 00:47:15.600
+and it uses a really weird format for
+
+00:47:16.560 --> 00:47:17.060
+cross-referencing, right?
+
+00:47:21.960 --> 00:47:22.320
+I write my 3 lines of pattern match to work
+
+00:47:23.860 --> 00:47:24.200
+with that, and then everywhere throughout
+
+00:47:25.760 --> 00:47:25.960
+that document and the hundreds of other
+
+00:47:27.480 --> 00:47:27.680
+documents that will be created with that
+
+00:47:30.380 --> 00:47:30.880
+format, they're all live buttons instantly.
+
+00:47:32.740 --> 00:47:33.240
+Nothing changed about the document.
+
+00:47:35.280 --> 00:47:35.540
+That's really cool. You know,
+
+00:47:37.360 --> 00:47:37.860
+word mode, we have global word buttons,
+
+00:47:41.860 --> 00:47:42.040
+but mostly it has to be embedded within an
+
+00:47:44.260 --> 00:47:44.760
+org file, right? And follow that syntax.
+
+00:47:51.660 --> 00:47:51.900
+With hyperbole, it's like we can adapt as the
+
+00:47:54.800 --> 00:47:55.300
+world adapts around us to whatever formats
+
+00:47:56.440 --> 00:47:56.940
+people want to use that day.
+
+00:47:59.240 --> 00:47:59.380
+And you can even change things to look the
+
+00:48:01.700 --> 00:48:02.200
+way you want, right, and have your own
+
+00:48:04.540 --> 00:48:04.860
+cross-references. There's something built
+
+00:48:07.060 --> 00:48:07.560
+into Hyperbole that's not really active,
+
+00:48:12.620 --> 00:48:13.120
+which was sort of along the Zettelkasten way.
+
+00:48:15.200 --> 00:48:15.420
+We wrote this a long time ago.
+
+00:48:16.460 --> 00:48:16.960
+It's called hib-doc.el,
+
+00:48:21.720 --> 00:48:22.200
+and it's a card catalog notion.
+
+00:48:25.320 --> 00:48:25.820
+So it uses the high rollo in the background
+
+00:48:29.900 --> 00:48:30.180
+but it lets you create these forms that are
+
+00:48:32.660 --> 00:48:32.800
+cards that you fill out with whatever kind of
+
+00:48:35.080 --> 00:48:35.380
+data you want and then it gives you the full
+
+00:48:38.040 --> 00:48:38.520
+text searching across the cards and each card
+
+00:48:41.260 --> 00:48:41.760
+has a unique ID that you can reference
+
+00:48:44.920 --> 00:48:45.240
+similar to org IDs but these are human
+
+00:48:49.700 --> 00:48:49.860
+readable and human typable and so you can you
+
+00:48:52.460 --> 00:48:52.960
+can just have a cross-reference to any doc ID
+
+00:48:55.940 --> 00:48:56.100
+and essentially create what Engelbart used to
+
+00:49:00.180 --> 00:49:00.480
+call a journal, which is all these IDs on
+
+00:49:02.980 --> 00:49:03.220
+documents that point you directly to the
+
+00:49:05.460 --> 00:49:05.640
+document archive so that you could have like
+
+00:49:09.780 --> 00:49:10.020
+your internal publishing system and you know
+
+00:49:12.440 --> 00:49:12.940
+it's very simple to do and it's just 1 module
+
+00:49:14.160 --> 00:49:14.660
+added on to Hyperbole.
+
+00:49:19.020 --> 00:49:19.140
+[Speaker 0]: Yeah it's especially interesting for me you
+
+00:49:20.960 --> 00:49:21.140
+know because coming back to the side of
+
+00:49:23.240 --> 00:49:23.400
+convergent evolutions it's funny because the
+
+00:49:24.380 --> 00:49:24.880
+parameters are a little different.
+
+00:49:25.760 --> 00:49:26.260
+For us with org buttons,
+
+00:49:29.060 --> 00:49:29.340
+we're very happy. A lot of the stuff during
+
+00:49:31.020 --> 00:49:31.360
+EmacsConf is run with org mode,
+
+00:49:33.840 --> 00:49:34.340
+like we have Elisp going everywhere to
+
+00:49:36.820 --> 00:49:37.320
+compile a lot of org properties,
+
+00:49:39.140 --> 00:49:39.640
+like speaker information,
+
+00:49:41.120 --> 00:49:41.480
+for instance, how long the talk is,
+
+00:49:42.500 --> 00:49:42.800
+the title, and all this.
+
+00:49:44.540 --> 00:49:44.760
+We have all of this in an org file,
+
+00:49:45.520 --> 00:49:46.020
+which we use as a database,
+
+00:49:47.480 --> 00:49:47.800
+but then we can do so much stuff.
+
+00:49:50.500 --> 00:49:50.740
+We can send email and we can update the
+
+00:49:52.080 --> 00:49:52.200
+schedule. By the way, if you're interested in
+
+00:49:54.160 --> 00:49:54.280
+this, we'll have a talk on the DevTrack in
+
+00:49:56.320 --> 00:49:56.640
+the afternoon today that Sacha did and it's
+
+00:49:57.800 --> 00:49:58.140
+wonderful. I'm just teasing it.
+
+00:49:58.540 --> 00:49:59.040
+[Speaker 1]: Oh, that's great.
+
+00:50:00.640 --> 00:50:01.140
+[Speaker 0]: But coming back to Hyperbole,
+
+00:50:03.840 --> 00:50:04.000
+for you, it feels like the parameters were
+
+00:50:06.140 --> 00:50:06.560
+slightly different because the feeling was,
+
+00:50:08.600 --> 00:50:09.000
+I just want a tunnel that can work between
+
+00:50:11.100 --> 00:50:11.240
+any type of files. Now it's all well and
+
+00:50:13.100 --> 00:50:13.580
+good, Org-Rome, D-Note,
+
+00:50:14.480 --> 00:50:14.760
+and all this stuff like this,
+
+00:50:16.360 --> 00:50:16.860
+they create bidirectional links,
+
+00:50:19.040 --> 00:50:19.540
+but it's only between org-mode files.
+
+00:50:21.540 --> 00:50:22.040
+Whereas what you're achieving with Hyperbole,
+
+00:50:24.360 --> 00:50:24.760
+and you've done it much earlier than everyone
+
+00:50:26.940 --> 00:50:27.440
+else, is that you have this concept
+
+00:50:29.260 --> 00:50:29.440
+regardless of the type of file that you're
+
+00:50:32.020 --> 00:50:32.520
+using. And I find this to be beautiful.
+
+00:50:34.900 --> 00:50:35.240
+Like 5 years ago, whenever you were talking
+
+00:50:36.900 --> 00:50:37.280
+about hyperbole, I did not have a concrete
+
+00:50:38.040 --> 00:50:38.540
+idea of what was happening.
+
+00:50:40.000 --> 00:50:40.360
+But ever since I've gone through the journey
+
+00:50:42.040 --> 00:50:42.380
+of really understanding what the El Caster
+
+00:50:44.500 --> 00:50:45.000
+method were about, it feels like you were
+
+00:50:46.600 --> 00:50:46.980
+foreigners in the topic.
+
+00:50:48.340 --> 00:50:48.540
+Obviously, you've mentioned the mother of all
+
+00:50:49.740 --> 00:50:50.240
+demos by Edward Engelbart,
+
+00:50:53.600 --> 00:50:54.100
+but those ideas are not novel,
+
+00:50:56.520 --> 00:50:56.820
+but it feels like only now are they starting
+
+00:50:58.140 --> 00:50:58.520
+to be appropriated by people,
+
+00:50:59.340 --> 00:50:59.800
+especially in free software,
+
+00:51:00.700 --> 00:51:01.200
+and it's really good to see.
+
+00:51:02.200 --> 00:51:02.440
+I'm really excited to,
+
+00:51:04.280 --> 00:51:04.600
+well, have my small part to play in this.
+
+00:51:06.760 --> 00:51:06.960
+And I'm also excited to be able to chat with
+
+00:51:09.640 --> 00:51:10.140
+you and people like Bastien and other people
+
+00:51:10.900 --> 00:51:11.400
+about all those topics.
+
+00:51:13.280 --> 00:51:13.780
+[Speaker 1]: Yeah, I think, you know,
+
+00:51:16.400 --> 00:51:16.640
+it's fun that we can laugh now about when
+
+00:51:19.540 --> 00:51:20.000
+people say people are still using Emacs,
+
+00:51:22.440 --> 00:51:22.800
+you know, is because they're not used,
+
+00:51:23.960 --> 00:51:24.160
+certain people aren't using it.
+
+00:51:26.640 --> 00:51:26.880
+They have no idea of how far it's come and
+
+00:51:28.260 --> 00:51:28.760
+how powerful it is. And,
+
+00:51:31.020 --> 00:51:31.520
+you know, we're leveraging Elisp heavily,
+
+00:51:33.440 --> 00:51:33.940
+obviously, but if you look at the definition
+
+00:51:37.480 --> 00:51:37.980
+of our types, they look exactly like defunds
+
+00:51:41.160 --> 00:51:41.420
+in ELisp. And we've been able to do that
+
+00:51:42.280 --> 00:51:42.780
+because of Lisp macros.
+
+00:51:46.420 --> 00:51:46.920
+So we basically have our own domain-specific
+
+00:51:49.920 --> 00:51:50.160
+language there. But there's almost nothing to
+
+00:51:52.500 --> 00:51:52.740
+learn because it's just like what you know
+
+00:51:55.440 --> 00:51:55.680
+from UList. So again, you know,
+
+00:51:57.720 --> 00:51:57.980
+taking the concept and leveraging it,
+
+00:52:00.060 --> 00:52:00.520
+abstracting it and leveraging it multiple
+
+00:52:02.440 --> 00:52:02.940
+times gives you a lot of power.
+
+00:52:05.820 --> 00:52:06.040
+And people, you know, somebody said the other
+
+00:52:07.000 --> 00:52:07.500
+day, and I said, finally,
+
+00:52:09.860 --> 00:52:10.360
+this quote happened. He said,
+
+00:52:14.820 --> 00:52:15.060
+there's so many things that I do with
+
+00:52:16.960 --> 00:52:17.200
+hyperbole every day that I forget that I'm
+
+00:52:21.220 --> 00:52:21.440
+using hyperbole. Because it's just so
+
+00:52:23.080 --> 00:52:23.580
+embedded in this guy's workflow.
+
+00:52:25.240 --> 00:52:25.440
+And that's really how I use it.
+
+00:52:26.880 --> 00:52:27.380
+You know, there are features in there,
+
+00:52:28.580 --> 00:52:29.060
+can't use everything, right?
+
+00:52:31.360 --> 00:52:31.860
+So there are features that I don't use,
+
+00:52:35.380 --> 00:52:35.580
+but I use a lot of things and it's all like
+
+00:52:37.080 --> 00:52:37.580
+muscle memory, just like the keyboard,
+
+00:52:39.240 --> 00:52:39.740
+the Emacs key bindings.
+
+00:52:41.780 --> 00:52:42.180
+So it's very exciting to get to that level.
+
+00:52:44.120 --> 00:52:44.300
+And now, you know, we haven't started with
+
+00:52:46.440 --> 00:52:46.940
+the chatbots or any of the AI integration,
+
+00:52:49.240 --> 00:52:49.440
+but I'm starting to think about that a little
+
+00:52:53.140 --> 00:52:53.520
+bit and how we'll interface to that world and
+
+00:52:54.820 --> 00:52:55.320
+I think it's going to be very exciting.
+
+00:52:58.180 --> 00:52:58.340
+[Speaker 0]: Yeah, likewise and I think it harks back to
+
+00:53:00.520 --> 00:53:00.660
+what we were talking about before when we
+
+00:53:03.560 --> 00:53:03.700
+mentioned Hyperbole being a package inside of
+
+00:53:04.800 --> 00:53:05.300
+an ecosystem that is Emacs.
+
+00:53:07.740 --> 00:53:08.040
+But it's not because something is well
+
+00:53:10.320 --> 00:53:10.560
+circumscribed in terms of feature set that it
+
+00:53:12.500 --> 00:53:12.880
+does not influence everything around it.
+
+00:53:14.680 --> 00:53:15.060
+Like Hyperbole can be used with something
+
+00:53:17.900 --> 00:53:18.080
+completely at the opposite end of what it was
+
+00:53:21.180 --> 00:53:21.380
+intended for, just because it provides a good
+
+00:53:23.480 --> 00:53:23.860
+set of tools that can be used wherever else
+
+00:53:25.900 --> 00:53:26.100
+you want in Emacs. And it's the same thing
+
+00:53:27.720 --> 00:53:27.980
+with Org Mode, it's the same thing with many,
+
+00:53:28.780 --> 00:53:29.280
+many different things.
+
+00:53:32.320 --> 00:53:32.820
+And it feels like integrating AIs,
+
+00:53:36.420 --> 00:53:36.920
+or generative AIs, into Emacs would provide
+
+00:53:42.160 --> 00:53:42.340
+such a tool that could apply to any kind of
+
+00:53:44.540 --> 00:53:45.040
+other major mode or any kind of other use.
+
+00:53:46.460 --> 00:53:46.640
+So I'm also excited to see this.
+
+00:53:49.900 --> 00:53:50.220
+It feels like we are sitting at the brink of
+
+00:53:51.980 --> 00:53:52.480
+a revolution. I'm not going to say the acne
+
+00:53:54.200 --> 00:53:54.440
+stuff, but it definitely feels like right
+
+00:53:57.100 --> 00:53:57.560
+now, by trying to see what we can do with AI,
+
+00:53:59.160 --> 00:53:59.380
+it's definitely going to change the way not
+
+00:54:01.360 --> 00:54:01.560
+only we program, but also the way we take
+
+00:54:02.720 --> 00:54:03.160
+notes and the way we design stuff,
+
+00:54:04.940 --> 00:54:05.220
+arcing back to what John Wigley said
+
+00:54:08.160 --> 00:54:08.660
+yesterday about his draft program on macOS.
+
+00:54:10.440 --> 00:54:10.940
+Bob, if you don't mind,
+
+00:54:12.880 --> 00:54:13.080
+I see people typing questions and I also see
+
+00:54:14.540 --> 00:54:14.820
+people joining on people buttons,
+
+00:54:16.720 --> 00:54:16.920
+so I'm going to read you the 2 questions that
+
+00:54:17.760 --> 00:54:18.260
+have been added. Is that okay?
+
+00:54:20.080 --> 00:54:20.580
+[Speaker 1]: Great, go for it.
+
+00:54:22.600 --> 00:54:23.100
+[Speaker 0]: Cool, so first question.
+
+00:54:24.880 --> 00:54:25.240
+Wow, what you're describing now,
+
+00:54:27.320 --> 00:54:27.520
+and that's when you were talking about the
+
+00:54:31.580 --> 00:54:31.840
+bi-directional links and especially the last
+
+00:54:32.540 --> 00:54:33.040
+question in its entirety,
+
+00:54:35.220 --> 00:54:35.440
+What you're describing now reminds me a lot
+
+00:54:37.040 --> 00:54:37.440
+about HyperCard that I grew up on.
+
+00:54:39.000 --> 00:54:39.220
+Do you know if Hyperbole inspired Bill
+
+00:54:40.840 --> 00:54:41.040
+Atkinson or if you were inspired by
+
+00:54:42.880 --> 00:54:43.040
+HyperCard? Or were there just a lot of
+
+00:54:44.580 --> 00:54:44.820
+thoughts about hyper-contextuality around
+
+00:54:45.020 --> 00:54:45.520
+that time?
+
+00:54:49.600 --> 00:54:50.100
+[Speaker 1]: Alright, well this is another interesting
+
+00:54:52.120 --> 00:54:52.360
+anecdote. I don't know if it's true or not,
+
+00:54:57.340 --> 00:54:57.840
+but I think HyperCard predated our stuff.
+
+00:55:00.180 --> 00:55:00.480
+It was right around the same time when
+
+00:55:01.920 --> 00:55:02.420
+Hyperbole was starting out.
+
+00:55:04.540 --> 00:55:05.040
+But when I was doing the Pi research,
+
+00:55:08.460 --> 00:55:08.800
+I worked at, when I left school,
+
+00:55:11.200 --> 00:55:11.280
+I worked at Motorola, and we did a lot of
+
+00:55:12.540 --> 00:55:13.040
+work with Apple back then.
+
+00:55:15.060 --> 00:55:15.480
+And somebody came back and he said,
+
+00:55:17.540 --> 00:55:18.040
+you know, the people over there have seen
+
+00:55:21.900 --> 00:55:21.940
+your Pi research and they really liked it a
+
+00:55:25.840 --> 00:55:26.020
+lot. And so they were leveraging that when
+
+00:55:28.280 --> 00:55:28.440
+they decided to create the division that they
+
+00:55:33.120 --> 00:55:33.280
+called Apple Pi, which was the originator of
+
+00:55:36.300 --> 00:55:36.500
+the Newton which eventually led to the
+
+00:55:40.440 --> 00:55:40.940
+iPhone. So it all kind of is interconnected
+
+00:55:44.120 --> 00:55:44.380
+just like the impact that free software has
+
+00:55:46.800 --> 00:55:47.240
+had around the world. So you never know where
+
+00:55:49.360 --> 00:55:49.860
+your stuff is gonna go or end up.
+
+00:55:53.160 --> 00:55:53.400
+[Speaker 0]: Right. All right, moving on to the next
+
+00:55:55.600 --> 00:55:55.840
+question. Is it possible to only use 1
+
+00:55:57.340 --> 00:55:57.800
+feature of hyperbole without the others,
+
+00:56:00.140 --> 00:56:00.580
+i.e. Using only the implicit explicit buttons
+
+00:56:03.340 --> 00:56:03.580
+without I control I roller or without having
+
+00:56:05.860 --> 00:56:05.920
+to rewrite part of the code in hyperbole in
+
+00:56:07.540 --> 00:56:08.040
+order to be able to load a smaller hyperbole.
+
+00:56:08.660 --> 00:56:09.160
+Does it make sense?
+
+00:56:12.140 --> 00:56:12.640
+[Speaker 1]: Yes we get asked this all the time.
+
+00:56:16.100 --> 00:56:16.560
+So you can use any little bit that you want
+
+00:56:19.120 --> 00:56:19.620
+anywhere right you can even just call code
+
+00:56:23.160 --> 00:56:23.660
+from Hyperbole. I mean you don't use
+
+00:56:24.720 --> 00:56:25.080
+everything in Emacs, right?
+
+00:56:27.180 --> 00:56:27.680
+But you still install Emacs on your machine.
+
+00:56:29.580 --> 00:56:30.080
+It's exactly the same thing.
+
+00:56:32.900 --> 00:56:33.280
+Those libraries don't take up any memory,
+
+00:56:36.140 --> 00:56:36.380
+they take up a little disk space and it's so
+
+00:56:38.360 --> 00:56:38.520
+trivial compared to the amount of disk we
+
+00:56:41.280 --> 00:56:41.780
+have today. So a lot of things are not loaded
+
+00:56:43.240 --> 00:56:43.740
+unless you activate them.
+
+00:56:48.720 --> 00:56:48.900
+And so I know that you do have to build all
+
+00:56:50.860 --> 00:56:51.340
+those things. So maybe that's what bothers
+
+00:56:55.520 --> 00:56:56.020
+people. It takes 2 minutes if you're using,
+
+00:56:57.920 --> 00:56:58.400
+it depends how fast your computer is.
+
+00:57:00.920 --> 00:57:01.160
+But you build it once on install like every
+
+00:57:04.440 --> 00:57:04.600
+other package. And it used to be that there
+
+00:57:06.460 --> 00:57:06.620
+would be a lot of warnings just because of
+
+00:57:08.740 --> 00:57:09.020
+the way we wrote the code and we didn't
+
+00:57:10.920 --> 00:57:11.120
+really have to deal with some of those
+
+00:57:12.620 --> 00:57:13.080
+warnings. But with this new release,
+
+00:57:14.640 --> 00:57:15.140
+we've gotten rid of almost all of them,
+
+00:57:19.280 --> 00:57:19.780
+including the native compiler messages.
+
+00:57:22.120 --> 00:57:22.620
+So it should be a very clean install now,
+
+00:57:26.120 --> 00:57:26.620
+and just use 1 part at a time.
+
+00:57:29.580 --> 00:57:29.820
+But the other parts are there in case you
+
+00:57:31.960 --> 00:57:32.080
+make a link to something and you use a
+
+00:57:34.360 --> 00:57:34.600
+facility just like I was showing as I went
+
+00:57:35.860 --> 00:57:36.360
+across subsystems today.
+
+00:57:37.640 --> 00:57:38.040
+It may take you a year,
+
+00:57:39.880 --> 00:57:40.120
+but then all of a sudden you find the use
+
+00:57:42.100 --> 00:57:42.340
+case for Hyrule and you say,
+
+00:57:43.520 --> 00:57:44.020
+oh, I'm glad I have it there.
+
+00:57:47.140 --> 00:57:47.540
+And yes, some of these things could be split
+
+00:57:49.320 --> 00:57:49.540
+into sub packages like you do in the org
+
+00:57:52.320 --> 00:57:52.500
+ecosystem. But given our limited resources on
+
+00:57:56.120 --> 00:57:56.420
+the team, we find having them all in 1 gives
+
+00:57:57.440 --> 00:57:57.940
+us a higher level of quality,
+
+00:58:00.480 --> 00:58:00.980
+and lets us deliver a better integrated
+
+00:58:02.800 --> 00:58:03.300
+system for your use.
+
+00:58:06.040 --> 00:58:06.300
+[Speaker 0]: Yeah, exactly. And I think,
+
+00:58:08.600 --> 00:58:09.100
+you know, it's, it's not a monolith.
+
+00:58:12.240 --> 00:58:12.540
+I mean, it's usually easier,
+
+00:58:14.340 --> 00:58:14.620
+easy, more easy, more easy.
+
+00:58:16.000 --> 00:58:16.480
+Sorry, I was right on the first try.
+
+00:58:20.140 --> 00:58:20.640
+It's usually easier to maintain a monolith
+
+00:58:22.780 --> 00:58:23.140
+that contains many bits of functionality like
+
+00:58:25.060 --> 00:58:25.280
+org. You have plenty of people using org
+
+00:58:26.680 --> 00:58:27.180
+mode, not using org-agenda,
+
+00:58:28.780 --> 00:58:28.980
+for instance, or you've got plenty of people
+
+00:58:31.320 --> 00:58:31.560
+using org-mode and barely using Babel because
+
+00:58:34.240 --> 00:58:34.740
+it doesn't really translate to their use.
+
+00:58:37.500 --> 00:58:37.720
+And I feel like I very much agree with you.
+
+00:58:39.320 --> 00:58:39.520
+It's okay to install a package and only use
+
+00:58:39.920 --> 00:58:40.420
+some of the functions.
+
+00:58:43.080 --> 00:58:43.580
+I was reminded, as you were discussing this,
+
+00:58:44.640 --> 00:58:45.140
+of the consults package,
+
+00:58:46.420 --> 00:58:46.920
+which is part of the VertiCo,
+
+00:58:50.540 --> 00:58:51.040
+mbark and marginalia and all this.
+
+00:58:54.520 --> 00:58:54.960
+Consult, it replaces a lot of the Emacs
+
+00:58:56.820 --> 00:58:56.980
+built-in commands like for finding your
+
+00:58:59.760 --> 00:58:59.900
+buffers or finding text inside of your
+
+00:59:03.480 --> 00:59:03.980
+buffer. It's great. And you do not need to
+
+00:59:06.140 --> 00:59:06.300
+completely move to consult as you get
+
+00:59:08.940 --> 00:59:09.080
+started. You can start colonizing 1 step at a
+
+00:59:11.040 --> 00:59:11.540
+time the function that you usually use.
+
+00:59:15.580 --> 00:59:16.060
+I highly recommend to people to not let the
+
+00:59:18.560 --> 00:59:18.700
+size of a project deter them from trying it
+
+00:59:21.140 --> 00:59:21.640
+out because, again, in Emacs,
+
+00:59:22.300 --> 00:59:22.800
+everything is horizontal.
+
+00:59:27.980 --> 00:59:28.180
+If somehow you want to do something that was
+
+00:59:29.440 --> 00:59:29.640
+not intended primarily for this,
+
+00:59:31.720 --> 00:59:32.220
+or if you only want to use 10% of a package,
+
+00:59:35.160 --> 00:59:35.540
+well, do it. An example that I have for me is
+
+00:59:39.660 --> 00:59:39.840
+that Lispy is the minor mode that I use for
+
+00:59:41.880 --> 00:59:42.380
+editing Elisp documents,
+
+00:59:45.140 --> 00:59:45.380
+and it's great. Elisp provides similar
+
+00:59:46.840 --> 00:59:47.040
+functions to Paredit, which might be a little
+
+00:59:48.960 --> 00:59:49.300
+more popular, which allows you to have modal
+
+00:59:52.400 --> 00:59:52.540
+editing when you are on specific parts of a
+
+00:59:54.480 --> 00:59:54.620
+file, like the opening parenthesis or the
+
+00:59:56.040 --> 00:59:56.480
+closing parenthesis. It's great,
+
+00:59:58.080 --> 00:59:58.320
+it provides modal editing for those modes,
+
+01:00:00.840 --> 01:00:01.340
+but I certainly do not know everything,
+
+01:00:04.040 --> 01:00:04.280
+every modal command associated to it.
+
+01:00:06.000 --> 01:00:06.180
+I just use the 1 that makes the most sense to
+
+01:00:07.680 --> 01:00:08.180
+me. So feel free to explore.
+
+01:00:13.200 --> 01:00:13.700
+[Speaker 1]: I'll just say, we get this so much.
+
+01:00:15.360 --> 01:00:15.660
+It's not that large. I mean,
+
+01:00:16.960 --> 01:00:17.360
+there's a fair number of files,
+
+01:00:20.600 --> 01:00:20.820
+but it's just like 1 major directory and then
+
+01:00:21.840 --> 01:00:22.340
+the KOutliner directory.
+
+01:00:25.120 --> 01:00:25.560
+And when you look at these things,
+
+01:00:26.640 --> 01:00:27.140
+you install web applications,
+
+01:00:30.240 --> 01:00:30.440
+everything else, just when you download the
+
+01:00:31.700 --> 01:00:31.820
+source code, it's much,
+
+01:00:33.480 --> 01:00:33.980
+much smaller than any of that.
+
+01:00:37.120 --> 01:00:37.360
+So I don't know why people you know accept
+
+01:00:39.140 --> 01:00:39.640
+that it's larger than your typical package.
+
+01:00:41.400 --> 01:00:41.900
+Why there's really an issue there.
+
+01:00:44.580 --> 01:00:45.080
+[Speaker 0]: I think it's because people tend to assume
+
+01:00:47.980 --> 01:00:48.480
+that a paradigm like the 1 you're describing,
+
+01:00:51.360 --> 01:00:51.560
+which seems to be changing the way you use
+
+01:00:53.200 --> 01:00:53.480
+Emacs in a way because you're no longer
+
+01:00:55.520 --> 01:00:56.000
+thinking of as buffers as separate entities,
+
+01:00:57.520 --> 01:00:57.980
+you can tunnel between them.
+
+01:00:59.820 --> 01:01:00.180
+You know, it feels like a huge paradigm shift
+
+01:01:02.120 --> 01:01:02.320
+and you assume that the code behind it is
+
+01:01:03.880 --> 01:01:04.080
+going to be humongous as well,
+
+01:01:05.080 --> 01:01:05.380
+but it's usually not the case.
+
+01:01:07.480 --> 01:01:07.640
+It's just that the idea is very pure at the
+
+01:01:09.560 --> 01:01:10.060
+start, and the paradigm shift that it allows
+
+01:01:14.020 --> 01:01:14.120
+is also magnificent. But at the end of the
+
+01:01:15.700 --> 01:01:16.200
+day, the code is fairly simple,
+
+01:01:17.860 --> 01:01:18.360
+because it does 1 thing and it does it well.
+
+01:01:20.860 --> 01:01:21.180
+[Speaker 1]: 1 thing I noticed too,
+
+01:01:23.560 --> 01:01:23.760
+I mean I'm a big believer in turnkey kind of
+
+01:01:26.780 --> 01:01:27.180
+systems. In fact a long time ago when I built
+
+01:01:28.680 --> 01:01:29.180
+an IDE on Emacs called InfoDoc,
+
+01:01:31.980 --> 01:01:32.480
+that was delivered pre-compiled.
+
+01:01:35.760 --> 01:01:35.940
+So it's like you download it like every other
+
+01:01:39.140 --> 01:01:39.440
+app and you run it. And so I think
+
+01:01:41.980 --> 01:01:42.480
+eliminating all the friction that occurs,
+
+01:01:45.860 --> 01:01:46.360
+and you know, I just got going recently with
+
+01:01:48.860 --> 01:01:49.160
+the wonderful packages that you just
+
+01:01:50.980 --> 01:01:51.460
+mentioned, VertiCo and Consult,
+
+01:01:55.120 --> 01:01:55.320
+but they don't have a manual that covers all
+
+01:01:57.280 --> 01:01:57.780
+that. They use sort of like a cookbook,
+
+01:02:02.020 --> 01:02:02.220
+a wiki online to answer a lot of the
+
+01:02:04.380 --> 01:02:04.600
+questions that people have and everybody has
+
+01:02:05.860 --> 01:02:06.360
+to figure out their configurations,
+
+01:02:10.640 --> 01:02:10.880
+you know, to make these things all work
+
+01:02:14.180 --> 01:02:14.680
+together. We'd like to do that engineering
+
+01:02:17.080 --> 01:02:17.440
+and say here it is, you know,
+
+01:02:19.240 --> 01:02:19.500
+it's like if you want to configure it and
+
+01:02:20.920 --> 01:02:21.420
+make it your own, you can do it.
+
+01:02:24.860 --> 01:02:25.160
+But there is a default configuration that
+
+01:02:28.180 --> 01:02:28.380
+handles all the typical use cases and you can
+
+01:02:30.940 --> 01:02:31.220
+just load it up and run because it's made to
+
+01:02:35.860 --> 01:02:36.020
+use, you don't have to hack it to make it
+
+01:02:36.760 --> 01:02:37.260
+useful for you.
+
+01:02:40.380 --> 01:02:40.560
+[Speaker 0]: Yeah, it reminds me of the discussion we had
+
+01:02:42.240 --> 01:02:42.740
+with Stéphane yesterday about sane defaults.
+
+01:02:45.080 --> 01:02:45.580
+And I think the question was,
+
+01:02:48.580 --> 01:02:49.080
+Emacs should probably ship with sane defaults
+
+01:02:51.360 --> 01:02:51.740
+for people. And Stéphane's answer was,
+
+01:02:53.620 --> 01:02:53.800
+well, my sane defaults might not be the same
+
+01:02:54.720 --> 01:02:55.220
+thing as your sane defaults.
+
+01:02:57.160 --> 01:02:57.560
+And that's why I think it's important,
+
+01:02:59.020 --> 01:02:59.340
+really, to have a core set of features,
+
+01:03:00.800 --> 01:03:01.300
+be it with hyperbole of org mode,
+
+01:03:02.020 --> 01:03:02.520
+that is well-documented,
+
+01:03:05.220 --> 01:03:05.500
+as you mentioned. But what I like about this
+
+01:03:06.900 --> 01:03:07.260
+in a way, and I think hyperbole is perhaps
+
+01:03:08.800 --> 01:03:09.300
+taking more benefits of this than Org Mode,
+
+01:03:11.780 --> 01:03:12.280
+is that the self-documentation aspect of it
+
+01:03:14.340 --> 01:03:14.540
+feels like it's easier with hyperbole because
+
+01:03:16.820 --> 01:03:17.300
+you're not bound by Org Mode buffers.
+
+01:03:18.840 --> 01:03:19.340
+You can link to just about everything.
+
+01:03:23.940 --> 01:03:24.240
+And for me, this ability to self-document is
+
+01:03:26.040 --> 01:03:26.140
+well, first, very true to the philosophy of
+
+01:03:27.040 --> 01:03:27.540
+Emacs in the first place,
+
+01:03:31.400 --> 01:03:31.900
+but also opens up those resonance cycles
+
+01:03:34.040 --> 01:03:34.180
+where, oh, you get interested and then you
+
+01:03:35.320 --> 01:03:35.820
+start reading up and then the documentation
+
+01:03:37.860 --> 01:03:38.320
+is so good that it feeds into your practice
+
+01:03:40.840 --> 01:03:41.040
+and then it goes nuclear and you gain so much
+
+01:03:42.040 --> 01:03:42.540
+knowledge as a result of this.
+
+01:03:44.280 --> 01:03:44.440
+All right, Bob, we are about out of time.
+
+01:03:46.120 --> 01:03:46.280
+We only have about 1 minute until we go to
+
+01:03:47.720 --> 01:03:48.220
+the next talk. Do you have any parting words?
+
+01:03:53.360 --> 01:03:53.860
+[Speaker 1]: I do. I think, you know,
+
+01:03:56.380 --> 01:03:56.880
+the world's complex, it's getting more
+
+01:03:59.980 --> 01:04:00.480
+complex. I think that's why people use Emacs
+
+01:04:02.080 --> 01:04:02.560
+in the first place, because it's a big
+
+01:04:04.600 --> 01:04:04.920
+system. You wouldn't use it unless you wanted
+
+01:04:06.100 --> 01:04:06.600
+it to simplify your life.
+
+01:04:10.580 --> 01:04:10.760
+Hyperbole is built with the same idea in
+
+01:04:14.020 --> 01:04:14.180
+mind. You may not get it just like a lot of
+
+01:04:15.720 --> 01:04:16.020
+people don't understand when they first
+
+01:04:17.900 --> 01:04:18.400
+encounter it, but when they do understand it,
+
+01:04:20.860 --> 01:04:21.360
+they're blown away. It changes their life.
+
+01:04:24.520 --> 01:04:25.020
+You know, when you really understand implicit
+
+01:04:27.880 --> 01:04:28.100
+buttons, I think that's 1 of the things in
+
+01:04:30.480 --> 01:04:30.820
+hyperbole that can change your Emacs working
+
+01:04:33.840 --> 01:04:34.060
+life. So just give that a try and I think
+
+01:04:36.140 --> 01:04:36.640
+you'll be pleasantly surprised across time.
+
+01:04:39.720 --> 01:04:39.860
+[Speaker 0]: And thank you so much Bob.
+
+01:04:41.400 --> 01:04:41.600
+We'll be moving on to the next talk in about
+
+01:04:43.480 --> 01:04:43.620
+20 seconds so everyone see you in a bit and
+
+01:04:44.440 --> 01:04:44.940
+Bob thank you so much again.
+
+01:04:45.560 --> 01:04:46.060
+[Speaker 1]: Thanks very much. Thank you.
+
+01:04:52.800 --> 01:04:53.000
+[Speaker 0]: All right I think we are off here now,
+
+01:04:53.800 --> 01:04:53.980
+so thank you so much Bob.
+
+01:04:55.380 --> 01:04:55.540
+I'm gonna need to step out and get ready for
+
+01:04:59.100 --> 01:04:59.240
+[Speaker 1]: Yeah, do your thing. You do a great job at
+
+01:05:01.400 --> 01:05:01.760
+it. But I wanted to ask you where in London
+
+01:05:04.280 --> 01:05:04.780
+[Speaker 0]: the next talk. I'm not in London,
+
+01:05:07.360 --> 01:05:07.480
+I'm in France and I just know the time in
+
+01:05:10.240 --> 01:05:10.740
+[Speaker 1]: you are. Oh, okay, got it.
+
+01:05:12.180 --> 01:05:12.680
+Sorry, I thought you were,
+
+01:05:15.020 --> 01:05:15.520
+[Speaker 0]: London. All right, bye-bye Bob.
+
+01:05:15.860 --> 01:05:16.360
+[Speaker 1]: take care. Bye.
+
+01:05:45.080 --> 01:05:45.580
+[Speaker 0]: Silence.
+
+01:06:00.060 --> 01:06:00.560
+You
+
+01:07:00.180 --> 01:07:00.680
+[Speaker 1]: 311.
+
+01:08:15.060 --> 01:08:15.560
+[Speaker 0]: Silence.
+
+01:10:20.580 --> 01:10:20.700
+[Speaker 2]: We will read the input from yesterday and we
+
+01:10:23.560 --> 01:10:24.060
+will continue the evaluation with a different
+
+01:10:25.380 --> 01:10:25.880
+I provided in this input.
+
+01:10:32.420 --> 01:10:32.660
+So let's try to type some arbitrary value And
+
+01:10:37.920 --> 01:10:38.100
+[Speaker 0]: this value. And at the same
+
+01:10:38.100 --> 01:10:38.380
+[Speaker 2]: you see that the loop continued with time,
+
+01:10:40.580 --> 01:10:41.080
+it could easily interrupt.
+
+01:10:45.720 --> 01:10:45.980
+OK, what most annoying thing that I had
+
+01:10:47.240 --> 01:10:47.560
+previously with the usual regular
+
+01:10:50.320 --> 01:10:50.820
+implementation, then I have a quite nice
+
+01:10:53.660 --> 01:10:54.160
+Geeks API where I can build packages,
+
+01:10:55.380 --> 01:10:55.880
+systems, and other stuff.
+
+01:10:59.640 --> 01:11:00.140
+But if I evaluate this expression,
+
+01:11:05.140 --> 01:11:05.640
+I will get an error. OK.
+
+01:11:11.500 --> 01:11:11.740
+I will get an error because I don't have an
+
+01:11:12.980 --> 01:11:13.480
+appropriate environment.
+
+01:11:16.640 --> 01:11:16.800
+But what I can do, I can connect to the
+
+01:11:22.360 --> 01:11:22.660
+remote label by creating a server with
+
+01:11:25.440 --> 01:11:25.920
+xlabelListen command and connecting to it
+
+01:11:27.100 --> 01:11:27.600
+with etherconnect command.
+
+01:11:28.580 --> 01:11:28.740
+And now I
+
+01:11:29.540 --> 01:11:30.040
+[Speaker 0]: can emulate this expression.
+
+01:11:32.780 --> 01:11:33.280
+Right? Wow. Right. Whoa.
+
+01:11:39.800 --> 01:11:40.300
+Okay.
+
+01:11:46.240 --> 01:11:46.740
+[Speaker 2]: It actually doesn't matter for my example.
+
+01:11:51.820 --> 01:11:52.320
+I will explain how it doesn't work easily.
+
+01:11:54.940 --> 01:11:55.400
+This is a long running process which prints
+
+01:11:57.980 --> 01:11:58.280
+something and it can take up to a few
+
+01:12:00.980 --> 01:12:01.160
+minutes. And for the whole few minutes I
+
+01:12:04.960 --> 01:12:05.440
+don't see any results the same as with this
+
+01:12:07.760 --> 01:12:08.000
+infinite loop, which brings the STD out,
+
+01:12:09.960 --> 01:12:10.460
+but I don't see anything interactive.
+
+01:12:15.720 --> 01:12:16.120
+And with array, I can run the evaluation of
+
+01:12:22.120 --> 01:12:22.620
+the same expression. And you will see
+
+01:12:27.040 --> 01:12:27.440
+instantly that STTR output is presented here
+
+01:12:29.060 --> 01:12:29.560
+in slightly yellowish color.
+
+01:12:32.200 --> 01:12:32.560
+And I can interrupt the evaluation if I don't
+
+01:12:35.080 --> 01:12:35.580
+want to wait until it's finished.
+
+01:12:39.560 --> 01:12:39.920
+And just after that, I can evaluate another
+
+01:12:48.340 --> 01:12:48.840
+[Speaker 0]: that's
+
+01:12:54.520 --> 01:12:55.020
+[Speaker 2]: value. So cool. And let's see 1 more thing.
+
+01:12:56.320 --> 01:12:56.820
+We have an infinite loop.
+
+01:12:59.060 --> 01:12:59.560
+And we have some completion here.
+
+01:13:00.700 --> 01:13:01.200
+And completion still works.
+
+01:13:05.740 --> 01:13:05.900
+Very nice. While the infinite loop is
+
+01:13:12.160 --> 01:13:12.440
+[Speaker 0]: OK. Actually, it took
+
+01:13:15.060 --> 01:13:15.560
+[Speaker 2]: running. me around 2 months of full-time work
+
+01:13:19.540 --> 01:13:19.740
+under my own savings. And you can support and
+
+01:13:22.800 --> 01:13:23.040
+help to the project using WebIn Collective or
+
+01:13:24.160 --> 01:13:24.660
+by contributing on SourceHub.
+
+01:13:30.180 --> 01:13:30.420
+The future steps for the project includes an
+
+01:13:32.980 --> 01:13:33.120
+experimental workflow where you have a
+
+01:13:35.580 --> 01:13:36.060
+multiple simultaneous evaluation in different
+
+01:13:37.060 --> 01:13:37.560
+contexts. For example,
+
+01:13:40.640 --> 01:13:41.140
+you have fibers, you have goblins,
+
+01:13:45.720 --> 01:13:46.000
+you have some HTTP server or some other
+
+01:13:48.340 --> 01:13:48.840
+thing, and you want to run all of them
+
+01:13:54.140 --> 01:13:54.640
+independently in slightly isolated sessions,
+
+01:13:59.280 --> 01:13:59.540
+and you want to have ability to still
+
+01:14:00.320 --> 01:14:00.720
+interact with them. For example,
+
+01:14:03.340 --> 01:14:03.800
+if they require standard input or something
+
+01:14:07.540 --> 01:14:08.040
+else you want to be able to provide.
+
+01:14:12.040 --> 01:14:12.320
+You want to see the STD out of those
+
+01:14:13.780 --> 01:14:14.280
+long-running processors and so on.
+
+01:14:19.780 --> 01:14:20.280
+The second thing is 3D integration for better
+
+01:14:22.000 --> 01:14:22.500
+syntax highlighting, code navigation,
+
+01:14:26.680 --> 01:14:27.180
+and other features. And after that,
+
+01:14:30.140 --> 01:14:30.640
+probably we will do a full-fledged debugger
+
+01:14:35.760 --> 01:14:36.020
+so you can jump expressions 1 by 1 and see
+
+01:14:39.380 --> 01:14:39.880
+the results and see some intermediate values
+
+01:14:41.880 --> 01:14:42.380
+during the evaluation.
+
+01:14:44.960 --> 01:14:45.020
+And it's very possible because nrecl is a
+
+01:14:46.760 --> 01:14:46.960
+very extensible protocol and you can
+
+01:14:49.480 --> 01:14:49.980
+implement whatever you want on top of it.
+
+01:14:55.380 --> 01:14:55.860
+I will answer 2 probably very frequent
+
+01:14:57.660 --> 01:14:58.000
+questions. Does it support other Scheme
+
+01:15:00.520 --> 01:15:01.020
+implementations? At the moment,
+
+01:15:04.200 --> 01:15:04.360
+it doesn't. But the Scheme implementation is
+
+01:15:07.340 --> 01:15:07.840
+not restricted. You have a server which
+
+01:15:09.520 --> 01:15:09.920
+implemented in your language,
+
+01:15:10.640 --> 01:15:11.140
+and you have a client,
+
+01:15:16.320 --> 01:15:16.620
+in our case, Array, which communicates with
+
+01:15:19.860 --> 01:15:20.280
+this protocol. So if you implement an Ripple
+
+01:15:21.300 --> 01:15:21.800
+server in a different language,
+
+01:15:25.460 --> 01:15:25.840
+it should work with already implemented Array
+
+01:15:32.180 --> 01:15:32.500
+client. And is it possible to use the same
+
+01:15:34.200 --> 01:15:34.640
+functionality in other text editors,
+
+01:15:35.920 --> 01:15:36.340
+for example, in VS Code,
+
+01:15:41.200 --> 01:15:41.420
+Vim, whatever, yes, it's possible and the
+
+01:15:43.860 --> 01:15:44.240
+case is similar here. You have already
+
+01:15:46.920 --> 01:15:47.220
+implemented an EnableServer and you can write
+
+01:15:50.500 --> 01:15:51.000
+your own and it will work.
+
+01:15:55.020 --> 01:15:55.260
+I would like to thank the authors and
+
+01:15:57.260 --> 01:15:57.760
+maintainers and contributors of Kyle,
+
+01:15:59.200 --> 01:15:59.700
+Geyser, Cider, Closure,
+
+01:16:03.260 --> 01:16:03.760
+and Emacs, and all other people who somehow
+
+01:16:07.360 --> 01:16:07.860
+related to the work on those projects
+
+01:16:10.240 --> 01:16:10.740
+involved in this talk.
+
+01:16:13.320 --> 01:16:13.480
+And I hope the scheme programming will be
+
+01:16:16.320 --> 01:16:16.820
+enjoyable. If you want to contact me,
+
+01:16:19.600 --> 01:16:19.900
+join TrojanRC channel at RepairerChat or drop
+
+01:16:21.820 --> 01:16:22.260
+me a message via email or feed the words
+
+01:16:26.600 --> 01:16:26.820
+using Andrew at TrojanHackle and I will see
+
+01:16:28.680 --> 01:16:29.180
+you in a bit in Kuwait session.
+
+01:16:57.220 --> 01:16:57.440
+[Speaker 3]: Hey folks. So this was a great talk by Andrew
+
+01:16:58.860 --> 01:16:59.340
+Tropan. Unfortunately,
+
+01:17:02.280 --> 01:17:02.780
+Andrew isn't around just yet.
+
+01:17:04.480 --> 01:17:04.680
+We are still waiting for him if he does show
+
+01:17:08.180 --> 01:17:08.680
+up but in the meantime please do feel free to
+
+01:17:11.480 --> 01:17:11.980
+continue posting your questions on the path
+
+01:17:14.580 --> 01:17:15.080
+and if Andrew does show up here of course
+
+01:17:17.340 --> 01:17:17.640
+We'll take them otherwise we will forward
+
+01:17:19.700 --> 01:17:19.920
+them to Andrew so that he could answer them
+
+01:17:21.360 --> 01:17:21.860
+after the conference. Thank you
+
+01:17:45.060 --> 01:17:45.560
+[Speaker 0]: You
+
+01:18:00.080 --> 01:18:00.580
+Silence.
+
+01:18:15.060 --> 01:18:15.560
+Silence. Silence.
+
+01:19:07.760 --> 01:19:08.260
+[Speaker 3]: I see 2 questions on the panel already.
+
+01:19:14.280 --> 01:19:14.600
+Let's see. 1 asking how much Android uses
+
+01:19:17.720 --> 01:19:18.040
+these repos remotely or versus on their
+
+01:19:20.640 --> 01:19:20.800
+desktop. And now they're asking if this can
+
+01:19:22.760 --> 01:19:23.260
+be integrated with EGLOT.
+
+01:19:26.400 --> 01:19:26.580
+And I will note that it is very cool that
+
+01:19:28.200 --> 01:19:28.700
+this year we've had so many talks on repos.
+
+01:19:32.320 --> 01:19:32.680
+Just goes to show how powerful Emacs is and
+
+01:19:34.540 --> 01:19:34.640
+just how much or how far you can push it and
+
+01:19:44.760 --> 01:19:45.020
+how much you can do So see someone asking on
+
+01:19:49.660 --> 01:19:50.160
+IRC If or how many people use Given Geeks
+
+01:19:52.960 --> 01:19:53.460
+Since we are talking about scheme,
+
+01:19:56.980 --> 01:19:57.260
+GivenGeeks is a great platform slash
+
+01:20:01.520 --> 01:20:01.700
+operating system or distro for for your
+
+01:20:03.480 --> 01:20:03.980
+desktops but also for servers and such.
+
+01:20:04.920 --> 01:20:05.380
+They do some impressive,
+
+01:20:09.400 --> 01:20:09.900
+amazing work. And it's pretty much all done
+
+01:20:10.900 --> 01:20:11.400
+in the Google Cloud schema.
+
+01:20:13.120 --> 01:20:13.620
+So very cool stuff.
+
+01:20:55.520 --> 01:20:56.020
+[Speaker 0]: Silence. Silence.
+
+01:21:11.040 --> 01:21:11.540
+Silence.
+
+01:21:30.060 --> 01:21:30.560
+You
+
+01:22:11.520 --> 01:22:11.680
+[Speaker 3]: I see another interesting question on the
+
+01:22:15.020 --> 01:22:15.520
+pad. How hard is it to add support for
+
+01:22:16.560 --> 01:22:17.060
+something relevant in Guile?
+
+01:22:19.600 --> 01:22:19.760
+And if it makes sense to contribute at this
+
+01:22:20.500 --> 01:22:21.000
+early stage of development.
+
+01:22:23.520 --> 01:22:23.860
+They said that they've written several
+
+01:22:25.080 --> 01:22:25.440
+packages for chicken skin before,
+
+01:22:26.960 --> 01:22:27.460
+and they would like to try this 1 as well.
+
+01:23:00.260 --> 01:23:00.760
+[Speaker 0]: You you
+
+01:23:46.380 --> 01:23:46.880
+[Speaker 3]: Okay.
+
+01:24:17.980 --> 01:24:18.480
+I guess since Andrew isn't still here,
+
+01:24:20.740 --> 01:24:21.100
+and there was some chatter about Giddu Geeks
+
+01:24:23.960 --> 01:24:24.460
+in the chat, maybe it might be nice for me to
+
+01:24:26.980 --> 01:24:27.100
+share my screen and plug Giddu Geeks for a
+
+01:24:29.600 --> 01:24:29.700
+little bit and introduce it,
+
+01:24:32.420 --> 01:24:32.600
+or at least show its website to folks who may
+
+01:24:34.400 --> 01:24:34.600
+not have seen it yet. So I'm going to try and
+
+01:24:35.000 --> 01:24:35.500
+do that now.
+
+01:25:11.320 --> 01:25:11.820
+OK, let's see if this works.
+
+01:25:25.080 --> 01:25:25.580
+OK, so this is GnuGeeks' website.
+
+01:25:26.580 --> 01:25:27.080
+You can go to geeks.gnu.org
+
+01:25:30.320 --> 01:25:30.800
+and they introduce it at the top.
+
+01:25:35.020 --> 01:25:35.520
+So it's a wholly free operating system or
+
+01:25:38.600 --> 01:25:38.780
+distribution of Gini Linux Meaning that it
+
+01:25:41.680 --> 01:25:41.920
+only has free software packaged and no
+
+01:25:44.220 --> 01:25:44.440
+non-free packages. So it is endorsed by the
+
+01:25:47.900 --> 01:25:48.040
+FSF on the Gini project As someone said in
+
+01:25:49.320 --> 01:25:49.820
+the chat, it's kind of like Nix,
+
+01:25:52.960 --> 01:25:53.460
+but instead built on GigaGallop scheme.
+
+01:25:56.880 --> 01:25:57.380
+It has transactional upgrades and rollbacks,
+
+01:26:01.780 --> 01:26:01.940
+so if you do upgrade your system and let's
+
+01:26:02.720 --> 01:26:02.980
+say in the middle of it,
+
+01:26:04.740 --> 01:26:05.240
+your hardware fails or your power goes out,
+
+01:26:08.080 --> 01:26:08.240
+the likelihood of things being corrupted is
+
+01:26:10.400 --> 01:26:10.900
+very low because the upgrade is essentially
+
+01:26:13.220 --> 01:26:13.720
+prepared like in the background.
+
+01:26:15.660 --> 01:26:16.160
+And then pretty much atomically,
+
+01:26:18.340 --> 01:26:18.840
+the system is switched to it.
+
+01:26:22.840 --> 01:26:23.080
+And also if there is some kind of Sorry,
+
+01:26:23.940 --> 01:26:24.440
+I'm losing my voice here.
+
+01:26:26.320 --> 01:26:26.660
+If there is some kind of issue that makes
+
+01:26:27.340 --> 01:26:27.840
+your system unbootable,
+
+01:26:31.100 --> 01:26:31.460
+you could always go back to booting the
+
+01:26:34.440 --> 01:26:34.640
+previously, the previous revision of your
+
+01:26:37.200 --> 01:26:37.360
+system when you restart in the
+
+01:26:47.360 --> 01:26:47.800
+GrubBootLoader. So they have a nice blog
+
+01:26:50.280 --> 01:26:50.500
+where they regularly post updates and what's
+
+01:26:52.360 --> 01:26:52.540
+new in the project. You can go check that
+
+01:26:57.160 --> 01:26:57.660
+out. They also have a packages archive where
+
+01:27:00.480 --> 01:27:00.660
+you can see a list of all the software that
+
+01:27:02.380 --> 01:27:02.880
+has been packaged for Pinookies.
+
+01:27:05.140 --> 01:27:05.640
+It is an impressive list.
+
+01:28:44.460 --> 01:28:44.960
+[Speaker 0]: You
+
+01:30:30.060 --> 01:30:30.560
+Silence.
+
+01:32:40.080 --> 01:32:40.580
+And obviously you can run kines in it.
+
+01:32:50.640 --> 01:32:51.140
+There is mouse support.
+
+01:33:02.580 --> 01:33:03.080
+And there is true color support,
+
+01:33:08.040 --> 01:33:08.180
+so you can show any color in a tagline as
+
+01:33:09.900 --> 01:33:10.400
+long as your main display supports it.
+
+01:33:17.660 --> 01:33:18.160
+And then there is shell integration.
+
+01:33:20.740 --> 01:33:21.240
+For example, directory tracking.
+
+01:33:28.697 --> 01:33:29.197
+Like if I can switch to some other directory
+
+01:33:31.420 --> 01:33:31.920
+and Thank you.
diff --git a/2023/captions/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--answers.vtt b/2023/captions/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--answers.vtt
new file mode 100644
index 00000000..2f7b316a
--- /dev/null
+++ b/2023/captions/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--answers.vtt
@@ -0,0 +1,1595 @@
+WEBVTT
+
+
+00:00:12.660 --> 00:00:13.160
+[Speaker 0]: I guess we are now live.
+
+00:00:15.360 --> 00:00:15.860
+So Joseph, thanks for being here.
+
+00:00:16.960 --> 00:00:17.460
+Thanks for talking to the hyperdrive.
+
+00:00:22.240 --> 00:00:22.440
+We already had some, or we already have a lot
+
+00:00:24.360 --> 00:00:24.619
+of questions here. And I guess I would start
+
+00:00:26.040 --> 00:00:26.540
+with, let's call it the difficult,
+
+00:00:29.119 --> 00:00:29.439
+the most difficult 1. So when you were
+
+00:00:30.820 --> 00:00:31.320
+developing hyperdrive for your colleague,
+
+00:00:34.760 --> 00:00:34.920
+what do you, or what have you learned the
+
+00:00:34.920 --> 00:00:35.420
+most?
+
+00:00:43.080 --> 00:00:43.320
+[Speaker 1]: I have learned how much faster and more
+
+00:00:46.360 --> 00:00:46.620
+enjoyable the development of this project can
+
+00:00:51.540 --> 00:00:52.040
+be with talented people working by my side,
+
+00:00:55.960 --> 00:00:56.260
+like Jonas and Adam and Prat and Mo,
+
+00:00:58.100 --> 00:00:58.260
+it's been really a pleasure to work with
+
+00:00:58.440 --> 00:00:58.940
+these folks.
+
+00:01:04.959 --> 00:01:05.140
+[Speaker 0]: So you have started at first on your own and
+
+00:01:07.400 --> 00:01:07.760
+then probably pushed it somewhere in open
+
+00:01:10.320 --> 00:01:10.820
+source or how did it develop,
+
+00:01:11.740 --> 00:01:12.240
+your development experience?
+
+00:01:15.920 --> 00:01:16.160
+[Speaker 1]: A few years ago, we started looking into
+
+00:01:21.960 --> 00:01:22.200
+using peer-to-peer technology for sharing all
+
+00:01:25.080 --> 00:01:25.360
+kinds of information. And we came across Move
+
+00:01:29.280 --> 00:01:29.440
+SignWeaver, who was recommended to us by a
+
+00:01:32.560 --> 00:01:32.720
+mutual friend. And we started working with
+
+00:01:33.840 --> 00:01:34.340
+Move, and then about a year ago,
+
+00:01:37.060 --> 00:01:37.560
+we started looking into using Emacs,
+
+00:01:40.020 --> 00:01:40.460
+the peer-to-peer software,
+
+00:01:43.520 --> 00:01:43.780
+so that we could make use of all of the
+
+00:01:46.340 --> 00:01:46.500
+powerful things that Emacs already does with
+
+00:01:47.780 --> 00:01:48.280
+org mode and other packages.
+
+00:01:51.560 --> 00:01:51.760
+And then we started working with Adam and
+
+00:01:52.320 --> 00:01:52.820
+Pratt and Jonas.
+
+00:01:54.280 --> 00:01:54.780
+[Speaker 2]: Yes.
+
+00:01:59.880 --> 00:02:00.380
+[Speaker 0]: So we are skipping to the next question.
+
+00:02:03.700 --> 00:02:04.200
+So to read it out, I use multiple computers
+
+00:02:06.200 --> 00:02:06.480
+and my partner also would like access to my
+
+00:02:08.680 --> 00:02:09.139
+notes. So, 2 questions at first.
+
+00:02:12.440 --> 00:02:12.720
+First 1, how well would this work with using
+
+00:02:15.060 --> 00:02:15.300
+this to edit my Zettelkasten hyperdrive using
+
+00:02:15.660 --> 00:02:16.160
+multiple computers?
+
+00:02:21.260 --> 00:02:21.760
+[Speaker 1]: Hyperdrive is single writer currently.
+
+00:02:24.140 --> 00:02:24.280
+So what that means is that if you have a
+
+00:02:25.080 --> 00:02:25.580
+hyperdrive that you've created,
+
+00:02:28.320 --> 00:02:28.820
+you're the only 1 who can make changes to it.
+
+00:02:31.560 --> 00:02:32.060
+And that's limited right now to editing 1
+
+00:02:33.240 --> 00:02:33.740
+hyperdrive from 1 machine.
+
+00:02:38.240 --> 00:02:38.740
+In theory, you could use the same private key
+
+00:02:40.240 --> 00:02:40.680
+and write to it from multiple machines,
+
+00:02:43.520 --> 00:02:44.020
+but you would have to make sure that you sync
+
+00:02:46.300 --> 00:02:46.520
+it on both machines and didn't make
+
+00:02:48.160 --> 00:02:48.480
+concurrent writes because then you would fork
+
+00:02:49.840 --> 00:02:50.340
+the history of your hyperdrive,
+
+00:02:51.020 --> 00:02:51.520
+and that would be bad.
+
+00:02:57.740 --> 00:02:57.980
+But we've spent a lot of time making links to
+
+00:02:59.780 --> 00:03:00.280
+hyperdrives work well,
+
+00:03:02.160 --> 00:03:02.360
+relative links within hyperdrives to other
+
+00:03:03.560 --> 00:03:03.840
+files inside of your drive.
+
+00:03:05.520 --> 00:03:06.020
+So you should be able to,
+
+00:03:10.120 --> 00:03:10.520
+with some exceptions, just take your personal
+
+00:03:13.360 --> 00:03:13.780
+information management set of org files or
+
+00:03:14.760 --> 00:03:15.260
+whatever it is that you have,
+
+00:03:18.160 --> 00:03:18.260
+and upload them into a hyperdrive if all of
+
+00:03:22.740 --> 00:03:23.100
+that is publicly available or would be good
+
+00:03:27.260 --> 00:03:27.400
+to share publicly. And you can make that
+
+00:03:28.940 --> 00:03:29.440
+available for other people to link to.
+
+00:03:30.640 --> 00:03:30.840
+So you can have multiple different
+
+00:03:32.040 --> 00:03:32.540
+hyperdrives that link to 1 another.
+
+00:03:35.600 --> 00:03:36.100
+[Speaker 0]: So it's like a huge network of hyperdrives
+
+00:03:38.000 --> 00:03:38.500
+connected to each other in some way.
+
+00:03:39.140 --> 00:03:39.640
+[Speaker 1]: Yeah.
+
+00:03:41.120 --> 00:03:41.620
+[Speaker 0]: So that's kind of neat and kind of cool.
+
+00:03:44.240 --> 00:03:44.480
+There was a follow-up question or the second
+
+00:03:46.780 --> 00:03:47.100
+part of the question. Okay,
+
+00:03:48.860 --> 00:03:49.200
+then using the same hyperdrive is probably
+
+00:03:51.820 --> 00:03:52.060
+not possible, but interlinking would be the
+
+00:03:57.500 --> 00:03:57.840
+best way to do it. There was a question
+
+00:03:59.540 --> 00:03:59.820
+concerning how they should install it.
+
+00:04:01.160 --> 00:04:01.440
+So What would be a good way of getting
+
+00:04:03.580 --> 00:04:04.080
+hyperdrives if you do not want to install npm
+
+00:04:06.460 --> 00:04:06.740
+and have a binary? Could you compile it with
+
+00:04:08.300 --> 00:04:08.800
+denner or rusk or zig or go?
+
+00:04:10.960 --> 00:04:11.120
+CLI alternative tool, I would prefer to
+
+00:04:11.840 --> 00:04:12.340
+download a single binary.
+
+00:04:17.420 --> 00:04:17.720
+[Speaker 1]: There's something that Jonas was playing
+
+00:04:20.459 --> 00:04:20.800
+around with using Geeks to install Hyper
+
+00:04:22.860 --> 00:04:23.360
+Gateway. So the way that HyperDrive.el,
+
+00:04:26.880 --> 00:04:27.380
+the Emacs package, works right now is similar
+
+00:04:30.300 --> 00:04:30.720
+to the way that the transmission Emacs client
+
+00:04:34.200 --> 00:04:34.640
+for BitTorrent works, where you have a client
+
+00:04:37.320 --> 00:04:37.480
+in Emacs that connects to a daemon that is a
+
+00:04:39.120 --> 00:04:39.280
+separate process that's running on your
+
+00:04:41.820 --> 00:04:42.320
+machine, the transmission daemon.
+
+00:04:43.500 --> 00:04:44.000
+But in this case, we have HyperGateway,
+
+00:04:46.060 --> 00:04:46.560
+which is running as a daemon on your machine.
+
+00:04:48.180 --> 00:04:48.680
+And then hyperdrive.el
+
+00:04:51.020 --> 00:04:51.520
+connects to that daemon and sends requests,
+
+00:04:53.520 --> 00:04:53.620
+and all of the hyperdrive stuff under the
+
+00:04:55.880 --> 00:04:56.380
+hood happens with her gateway.
+
+00:04:57.940 --> 00:04:58.440
+But so that package can,
+
+00:05:00.280 --> 00:05:00.460
+or hypergateway, the program can be
+
+00:05:02.900 --> 00:05:03.080
+installed, The easiest way is to just
+
+00:05:04.400 --> 00:05:04.900
+download it from the GitHub releases.
+
+00:05:07.060 --> 00:05:07.560
+You could also use NPM to install it.
+
+00:05:09.520 --> 00:05:09.680
+And then the third option that we've been
+
+00:05:12.920 --> 00:05:13.040
+playing around with is Jonas was writing a
+
+00:05:14.540 --> 00:05:15.040
+little script to install it using Geeks,
+
+00:05:18.340 --> 00:05:18.840
+since Geeks now comes with Node 18.
+
+00:05:20.740 --> 00:05:20.940
+And so you should be able to install it using
+
+00:05:20.940 --> 00:05:21.440
+Geeks.
+
+00:05:25.320 --> 00:05:25.520
+[Speaker 0]: Right, thank you. We have 2 people here
+
+00:05:26.100 --> 00:05:26.600
+joined with microphone.
+
+00:05:30.240 --> 00:05:30.560
+Do we have now any question to Joseph or just
+
+00:05:32.060 --> 00:05:32.560
+here for chilling out.
+
+00:05:41.820 --> 00:05:42.260
+I guess it's a no. Plasma,
+
+00:05:42.260 --> 00:05:42.760
+yeah.
+
+00:05:46.120 --> 00:05:46.260
+[Speaker 3]: What about using, having some of the
+
+00:05:47.960 --> 00:05:48.460
+information being private in the hyperdrives.
+
+00:05:54.240 --> 00:05:54.400
+[Speaker 1]: That's not what we have been focusing on at
+
+00:05:55.240 --> 00:05:55.640
+this point. At this point,
+
+00:05:57.340 --> 00:05:57.660
+what we've been working on is mainly using
+
+00:06:02.180 --> 00:06:02.680
+hyperdrives for a public forum type tool.
+
+00:06:06.420 --> 00:06:06.560
+But you could encrypt those files if you
+
+00:06:09.340 --> 00:06:09.840
+wanted to. You can also just,
+
+00:06:13.660 --> 00:06:14.160
+a poor man's security would just be to share
+
+00:06:16.660 --> 00:06:16.960
+your HyperDrive link only with those people
+
+00:06:19.060 --> 00:06:19.560
+that you want to have access to your drive.
+
+00:06:21.820 --> 00:06:22.240
+But the way that it works right now is anyone
+
+00:06:23.800 --> 00:06:24.280
+who has the link to a hyperdrive can access
+
+00:06:26.040 --> 00:06:26.420
+its content. So long as there are peers
+
+00:06:28.740 --> 00:06:28.900
+available on the network who can serve it to
+
+00:06:28.900 --> 00:06:29.400
+you.
+
+00:06:37.440 --> 00:06:37.660
+[Speaker 0]: Any follow up question from your side,
+
+00:06:37.660 --> 00:06:38.160
+Plasma?
+
+00:06:46.720 --> 00:06:47.220
+[Speaker 3]: I had 1, I'll just have to re-remember it.
+
+00:06:55.240 --> 00:06:55.600
+[Speaker 0]: If you remember it, just feel free to
+
+00:06:56.000 --> 00:06:56.500
+interrupt me.
+
+00:06:58.980 --> 00:06:59.220
+[Speaker 3]: What about working? I've looked at this
+
+00:07:03.120 --> 00:07:03.480
+before. What about, if I remember correctly,
+
+00:07:04.920 --> 00:07:05.220
+it doesn't do as well with large files,
+
+00:07:09.060 --> 00:07:09.520
+so if you're going to store 200 gigs of video
+
+00:07:12.180 --> 00:07:12.520
+files, stuff like IPFS works a lot better,
+
+00:07:15.200 --> 00:07:15.480
+or BitTorrent. This is,
+
+00:07:17.120 --> 00:07:17.620
+are you, were you using the,
+
+00:07:21.980 --> 00:07:22.300
+any way of using multiple protocols for stuff
+
+00:07:25.560 --> 00:07:25.800
+like that? Or what were you doing with,
+
+00:07:27.340 --> 00:07:27.480
+or were you just doing the small files with
+
+00:07:28.680 --> 00:07:29.180
+the same protocol? Or
+
+00:07:34.440 --> 00:07:34.920
+[Speaker 1]: I would love to see an IPFS client in Emacs
+
+00:07:37.260 --> 00:07:37.700
+as well that could interface with Kubo or
+
+00:07:40.040 --> 00:07:40.240
+some other IPFS daemon and I think that those
+
+00:07:41.120 --> 00:07:41.620
+could work really well together.
+
+00:07:45.680 --> 00:07:45.860
+We mostly have been playing around with
+
+00:07:47.240 --> 00:07:47.740
+sharing relatively small files,
+
+00:07:52.120 --> 00:07:52.240
+up to hundreds of megabytes or maybe a
+
+00:07:55.240 --> 00:07:55.640
+gigabyte. We haven't played around yet with
+
+00:07:57.380 --> 00:07:57.880
+hyperdrive.el, the Emacs client,
+
+00:07:59.240 --> 00:07:59.740
+testing that with HyperGateway.
+
+00:08:04.020 --> 00:08:04.160
+But there may be other experiments that have
+
+00:08:05.880 --> 00:08:06.380
+been done that show that that works well.
+
+00:08:10.880 --> 00:08:11.320
+The main thing is that IPFS uses content
+
+00:08:14.820 --> 00:08:15.060
+addressability to reduce duplication of the
+
+00:08:16.620 --> 00:08:17.120
+content. Whereas in HyperDrive,
+
+00:08:20.140 --> 00:08:20.320
+if you upload the same file with the same
+
+00:08:23.160 --> 00:08:23.620
+contents twice, now you have double the
+
+00:08:25.120 --> 00:08:25.580
+content being stored in your HyperDrive.
+
+00:08:26.040 --> 00:08:26.540
+It's not deduplicated.
+
+00:08:30.800 --> 00:08:31.300
+You can always clear out part of the history
+
+00:08:36.340 --> 00:08:36.659
+of your hyperdrive But IPFS has really good
+
+00:08:39.140 --> 00:08:39.640
+built-in deduplication whereas hyperdrive
+
+00:08:39.860 --> 00:08:40.360
+does not
+
+00:08:44.159 --> 00:08:44.540
+[Speaker 4]: I have a question.
+
+00:08:47.440 --> 00:08:47.580
+[Speaker 3]: What about like commenting on other like if
+
+00:08:50.140 --> 00:08:50.600
+you have a couple of different Hypercore
+
+00:08:53.900 --> 00:08:54.220
+blogs, what about like commenting between
+
+00:08:56.680 --> 00:08:57.040
+them? Like you have some people who have a
+
+00:08:59.280 --> 00:08:59.640
+commenting form on Reddit for their blog
+
+00:08:59.640 --> 00:09:00.140
+posts.
+
+00:09:04.640 --> 00:09:04.760
+[Speaker 1]: So Move SignWeaver has been doing a lot of
+
+00:09:07.880 --> 00:09:08.380
+work recently with the distributed press API
+
+00:09:12.040 --> 00:09:12.540
+to integrate ActivityPub with these
+
+00:09:14.120 --> 00:09:14.620
+peer-to-peer technologies.
+
+00:09:17.980 --> 00:09:18.240
+Move can give you more information about
+
+00:09:22.120 --> 00:09:22.440
+that. But there is another feature that we'd
+
+00:09:23.400 --> 00:09:23.900
+like to add to hyperdrive.el,
+
+00:09:29.140 --> 00:09:29.640
+which is peer discovery using the swarming
+
+00:09:30.600 --> 00:09:31.100
+feature that HyperCore,
+
+00:09:34.600 --> 00:09:35.100
+HyperSWARM offers, where you'd be able to say
+
+00:09:38.500 --> 00:09:38.660
+that my node, my peer-to-peer node is
+
+00:09:41.640 --> 00:09:41.840
+interested in Emacs and free software as
+
+00:09:43.100 --> 00:09:43.320
+topics. And those would be 2 different
+
+00:09:45.060 --> 00:09:45.300
+topics. I would advertise on the network that
+
+00:09:46.240 --> 00:09:46.740
+I'm interested in those topics.
+
+00:09:49.120 --> 00:09:49.480
+And I would be able to discover other peers
+
+00:09:52.040 --> 00:09:52.200
+on the network who have also advertised that
+
+00:09:53.440 --> 00:09:53.940
+they're interested in those same topics.
+
+00:09:56.040 --> 00:09:56.320
+And then they would tell me,
+
+00:09:59.260 --> 00:09:59.760
+hey, here's the public key of my hyperdrive.
+
+00:10:01.820 --> 00:10:02.320
+Come check it out. I have posted information
+
+00:10:04.300 --> 00:10:04.540
+about those topics. And so in that way,
+
+00:10:06.860 --> 00:10:07.360
+you'd be able to, in a distributed fashion,
+
+00:10:09.660 --> 00:10:09.800
+discover other peers on the network who are
+
+00:10:11.240 --> 00:10:11.600
+interested in topics that you're interested
+
+00:10:11.600 --> 00:10:12.100
+in.
+
+00:10:16.780 --> 00:10:16.960
+[Speaker 3]: Something that would be useful in addition to
+
+00:10:19.600 --> 00:10:20.100
+that idea is like if you had your emacs
+
+00:10:25.560 --> 00:10:25.680
+Zettelkasten Publish like let's say you have
+
+00:10:27.860 --> 00:10:28.140
+some private data You make sure that that's
+
+00:10:29.800 --> 00:10:30.060
+scrubbed out before it goes to your hyper
+
+00:10:31.760 --> 00:10:32.260
+core and then you have another part of it
+
+00:10:35.540 --> 00:10:35.940
+that gets turned into a website for it's also
+
+00:10:38.040 --> 00:10:38.240
+given to other hyper core clients but you'd
+
+00:10:40.120 --> 00:10:40.620
+rather get the emacs users the org documents
+
+00:10:44.760 --> 00:10:44.920
+then you also publish some of them on a
+
+00:10:48.680 --> 00:10:48.840
+website so everybody as much people can get
+
+00:10:53.560 --> 00:10:53.960
+it as possible. And then a way of figuring
+
+00:10:55.640 --> 00:10:56.140
+out who you'd want to do,
+
+00:10:57.780 --> 00:10:58.180
+or if you're an Emacs user,
+
+00:10:59.860 --> 00:11:00.040
+maybe figure out that they're all related to
+
+00:11:01.440 --> 00:11:01.640
+each other, but you want to get the art mode
+
+00:11:03.080 --> 00:11:03.580
+documents because you're using EMAX.
+
+00:11:05.900 --> 00:11:06.400
+Yeah.
+
+00:11:10.360 --> 00:11:10.760
+[Speaker 0]: Maybe a side note, we have 4 minutes here on
+
+00:11:12.040 --> 00:11:12.400
+before we switch into the next track,
+
+00:11:13.200 --> 00:11:13.700
+just to let you know.
+
+00:11:17.900 --> 00:11:18.400
+[Speaker 1]: Thank you. So the hyper drive mirror feature
+
+00:11:21.220 --> 00:11:21.720
+that we added, would allow you to selectively
+
+00:11:24.840 --> 00:11:24.960
+choose which files you want to share in a
+
+00:11:28.500 --> 00:11:28.780
+hyperdrive. So, with Prot's denote file
+
+00:11:30.660 --> 00:11:31.000
+naming scheme or Carl Voigt's file tags
+
+00:11:33.600 --> 00:11:33.760
+naming scheme, you could just specify a
+
+00:11:35.940 --> 00:11:36.140
+regular expression. And you could say,
+
+00:11:40.140 --> 00:11:40.460
+I want to share out of my directory of org
+
+00:11:42.560 --> 00:11:42.740
+files, I want to share only those files that
+
+00:11:44.220 --> 00:11:44.720
+have been tagged as public,
+
+00:11:47.320 --> 00:11:47.520
+or only those files that have been tagged as
+
+00:11:49.680 --> 00:11:49.840
+emacs and then only those ones would get
+
+00:11:50.720 --> 00:11:51.220
+uploaded into your hyperdrive
+
+00:11:54.280 --> 00:11:54.560
+[Speaker 3]: or exclude all in any of the ones that say
+
+00:11:54.560 --> 00:11:55.060
+private
+
+00:12:01.620 --> 00:12:02.120
+[Speaker 0]: yep mike had a question
+
+00:12:05.220 --> 00:12:05.720
+[Speaker 4]: yeah I have a question for the hyperdrive.
+
+00:12:08.520 --> 00:12:08.940
+So I just maybe I missed it and you haven't
+
+00:12:09.340 --> 00:12:09.840
+put a link.
+
+00:12:16.200 --> 00:12:16.700
+[Speaker 1]: Oh, Mikhail, we can't hear you.
+
+00:12:22.660 --> 00:12:23.160
+[Speaker 3]: Heard you for a second.
+
+00:12:28.440 --> 00:12:28.940
+[Speaker 1]: Yes?
+
+00:12:29.640 --> 00:12:30.040
+[Speaker 4]: Can someone hear me? Okay,
+
+00:12:31.200 --> 00:12:31.400
+I have no idea what happened to my
+
+00:12:32.480 --> 00:12:32.980
+microphone, but now it's back.
+
+00:12:34.760 --> 00:12:34.920
+[Speaker 3]: Now we can. You can see the microphone on the
+
+00:12:35.840 --> 00:12:36.340
+top of the screen. So
+
+00:12:38.940 --> 00:12:39.080
+[Speaker 4]: yes, thank you. Okay. I have a question to
+
+00:12:41.520 --> 00:12:41.720
+hyperdrive. Is the hyperdrive a find on the
+
+00:12:46.160 --> 00:12:46.320
+hole punch point, point T O hole Or is it
+
+00:12:47.020 --> 00:12:47.520
+just another hyperdrive?
+
+00:12:51.260 --> 00:12:51.760
+[Speaker 1]: That's exactly the project that we're using.
+
+00:12:54.520 --> 00:12:55.020
+So the HolePunch team has released hyperdrive
+
+00:12:59.340 --> 00:12:59.620
+and other hyper core libraries as free
+
+00:13:01.880 --> 00:13:02.380
+software libraries that you can use.
+
+00:13:03.940 --> 00:13:04.440
+And so MoV SignWeaver,
+
+00:13:07.080 --> 00:13:07.440
+the project that MoV is working on,
+
+00:13:11.120 --> 00:13:11.620
+HyperGateway, depends on those libraries and
+
+00:13:15.520 --> 00:13:15.880
+it makes it easy for you to build other
+
+00:13:17.200 --> 00:13:17.700
+clients like hyperdrive.el
+
+00:13:20.600 --> 00:13:21.100
+which connect to the hyperdrive network.
+
+00:13:22.800 --> 00:13:23.300
+I hope that answers your question.
+
+00:13:25.140 --> 00:13:25.440
+[Speaker 4]: Yes it does, thank you.
+
+00:13:28.380 --> 00:13:28.620
+And what did make you choose hyperdrive for
+
+00:13:29.380 --> 00:13:29.880
+this Emacs project?
+
+00:13:34.400 --> 00:13:34.900
+[Speaker 1]: Mainly the fact that the drives are mutable,
+
+00:13:37.660 --> 00:13:38.160
+which makes it distinct from IPFS or
+
+00:13:40.800 --> 00:13:41.020
+BitTorrent, where when you share some piece
+
+00:13:44.760 --> 00:13:45.060
+of content, you're stuck with that static
+
+00:13:46.800 --> 00:13:47.020
+piece of content, which works well for some
+
+00:13:49.600 --> 00:13:50.100
+cases, but if you say you have a Zettelkasten
+
+00:13:52.300 --> 00:13:52.500
+or you have a set of org files that you want
+
+00:13:56.120 --> 00:13:56.580
+to share with people, you want to be able to
+
+00:13:58.860 --> 00:13:59.160
+update those files and have other people pull
+
+00:13:59.960 --> 00:14:00.360
+those updates from you.
+
+00:14:02.300 --> 00:14:02.720
+And so HyperDrive allows you to have these
+
+00:14:05.340 --> 00:14:05.820
+mutable sets of files that you can share and
+
+00:14:08.440 --> 00:14:08.600
+use the same link for other peers to pull the
+
+00:14:09.440 --> 00:14:09.800
+latest changes from you.
+
+00:14:11.660 --> 00:14:11.960
+Also, it's versioned, as we showed in the
+
+00:14:15.200 --> 00:14:15.700
+video, which is really helpful for having
+
+00:14:17.500 --> 00:14:17.900
+community deliberations and community
+
+00:14:19.400 --> 00:14:19.600
+discussions where you want to be able to
+
+00:14:22.420 --> 00:14:22.700
+reference some something that somebody said
+
+00:14:26.120 --> 00:14:26.320
+in the past and not have it get deleted or
+
+00:14:26.860 --> 00:14:27.360
+changed or something.
+
+00:14:30.600 --> 00:14:31.100
+[Speaker 0]: We are now switching to talk So just for
+
+00:14:32.720 --> 00:14:33.200
+letting you know if you want to say something
+
+00:14:37.640 --> 00:14:37.840
+now. Too late. The BB room is still open,
+
+00:14:38.480 --> 00:14:38.860
+so you can still discuss.
+
+00:14:41.480 --> 00:14:41.980
+There's also a lot going on on the pad.
+
+00:14:47.980 --> 00:14:48.480
+But you can also discuss here inside and
+
+00:14:49.760 --> 00:14:50.260
+answer the pet questions maybe later.
+
+00:14:52.800 --> 00:14:53.300
+[Speaker 1]: Yeah, there are good questions.
+
+00:14:58.680 --> 00:14:59.180
+I'll go ahead, please.
+
+00:15:01.120 --> 00:15:01.620
+[Speaker 3]: continuing here on the pad?
+
+00:15:04.540 --> 00:15:05.040
+[Speaker 1]: Are we I can hear you.
+
+00:15:07.540 --> 00:15:08.040
+[Speaker 5]: Yeah, so the question I had on the pad was,
+
+00:15:10.760 --> 00:15:10.900
+would it make sense in any sense to put a
+
+00:15:13.820 --> 00:15:13.940
+FUSE interface or put the POSIX semantics in
+
+00:15:14.960 --> 00:15:15.460
+front of this at some point?
+
+00:15:17.800 --> 00:15:18.080
+[Speaker 1]: Yeah, that would be cool.
+
+00:15:20.680 --> 00:15:21.060
+It's kind of a similar question to any plans
+
+00:15:21.680 --> 00:15:22.180
+for a Tramp interface.
+
+00:15:25.440 --> 00:15:25.940
+There was a project that the HyperCore
+
+00:15:31.160 --> 00:15:31.500
+HolePunch team was working on a year or more
+
+00:15:34.320 --> 00:15:34.820
+ago that provided a FUSE interface.
+
+00:15:39.560 --> 00:15:40.060
+And I think it didn't pan out.
+
+00:15:43.580 --> 00:15:43.940
+But it's a good idea. Same with the Tramp
+
+00:15:46.560 --> 00:15:46.720
+interface. It seems like a good idea that
+
+00:15:51.900 --> 00:15:52.260
+would make it possible to more easily hook
+
+00:15:55.520 --> 00:15:56.020
+into the built-in Emacs functionality for,
+
+00:16:01.340 --> 00:16:01.840
+for example, like incremental file name
+
+00:16:03.680 --> 00:16:03.960
+completion, which we don't currently support
+
+00:16:09.800 --> 00:16:10.260
+in Hyperdrive.el. So I'd love to have
+
+00:16:12.720 --> 00:16:13.220
+feedback and design ideas for those projects.
+
+00:16:15.860 --> 00:16:16.020
+[Speaker 5]: Yeah, there's just Everything in Emacs just
+
+00:16:17.980 --> 00:16:18.280
+sort of assumes the file system is there and
+
+00:16:20.940 --> 00:16:21.440
+usable in that way. That's all.
+
+00:16:23.980 --> 00:16:24.480
+[Speaker 1]: Yeah, it's a good idea.
+
+00:16:28.180 --> 00:16:28.680
+[Speaker 3]: An idea for the privacy type thing is
+
+00:16:33.160 --> 00:16:33.380
+Syncthing links. Because I think you can set
+
+00:16:36.100 --> 00:16:36.480
+up Syncthing in such a way that you have the
+
+00:16:38.560 --> 00:16:38.900
+private networks that other people can't
+
+00:16:40.240 --> 00:16:40.740
+actually get access to.
+
+00:16:45.540 --> 00:16:45.700
+[Speaker 1]: I did not know that that was possible with
+
+00:16:47.120 --> 00:16:47.620
+Syncthing. I'll have to look into that.
+
+00:16:48.840 --> 00:16:49.200
+[Speaker 3]: At least I think it is anyway,
+
+00:16:53.000 --> 00:16:53.500
+because yeah, there's ways you can explicitly
+
+00:16:56.780 --> 00:16:57.280
+authorize devices. Yeah,
+
+00:17:00.240 --> 00:17:00.400
+right. I think you could actually set it up
+
+00:17:03.480 --> 00:17:03.960
+in such a way that you can have private stuff
+
+00:17:06.300 --> 00:17:06.480
+and links, and then that might be a way that
+
+00:17:10.119 --> 00:17:10.619
+you can get a completely distributed
+
+00:17:12.720 --> 00:17:13.220
+Zettelcast and with private notes.
+
+00:17:22.339 --> 00:17:22.599
+[Speaker 1]: Yeah. Good idea. There's a question in the
+
+00:17:26.280 --> 00:17:26.380
+pad about DATRS, a Rust version of
+
+00:17:28.660 --> 00:17:29.160
+HyperDrive. I had not heard of that,
+
+00:17:30.260 --> 00:17:30.760
+so I'll have to look into that.
+
+00:17:33.040 --> 00:17:33.460
+If you had your druthers,
+
+00:17:34.820 --> 00:17:35.320
+what would make your work on hyperdrive.dl
+
+00:17:40.240 --> 00:17:40.740
+easier? It's been a lot of fun.
+
+00:17:42.480 --> 00:17:42.980
+I would love to have more user feedback.
+
+00:17:45.660 --> 00:17:46.160
+That would be my wish.
+
+00:17:50.500 --> 00:17:51.000
+I tried putting a git repo in HyperDrive.
+
+00:17:53.320 --> 00:17:53.500
+Does it work well? I don't think that would
+
+00:17:56.880 --> 00:17:57.100
+work well because, as I mentioned a moment a
+
+00:18:00.060 --> 00:18:00.220
+few moments ago, the data that you put into a
+
+00:18:00.920 --> 00:18:01.420
+hyperdrive is duplicated.
+
+00:18:06.300 --> 00:18:06.800
+So if you had the whole work tree in
+
+00:18:08.800 --> 00:18:08.960
+hyperdrive every time you made a change and
+
+00:18:12.340 --> 00:18:12.840
+saved it, it would be duplicated.
+
+00:18:15.240 --> 00:18:15.740
+If you had just a bare repository,
+
+00:18:18.240 --> 00:18:18.740
+I don't know, try it.
+
+00:18:21.140 --> 00:18:21.540
+[Speaker 3]: They're trying to solve the same problem,
+
+00:18:23.560 --> 00:18:24.060
+but 1 of the optimizations they have for
+
+00:18:25.520 --> 00:18:25.900
+being able to view a whole bunch of people's
+
+00:18:28.780 --> 00:18:28.980
+data is they made shallow clones a lot
+
+00:18:34.640 --> 00:18:35.140
+[Speaker 1]: Would you phrase that again,
+
+00:18:35.140 --> 00:18:35.640
+please?
+
+00:18:39.780 --> 00:18:40.280
+[Speaker 3]: easier. Right? So like Git and Hypercore,
+
+00:18:42.720 --> 00:18:43.220
+1 of the things they do is they allow you to
+
+00:18:46.160 --> 00:18:46.660
+have a whole history of every single change
+
+00:18:51.880 --> 00:18:52.380
+for a dataset Zettelkasten project.
+
+00:18:56.400 --> 00:18:56.600
+But 1 of the optimizations Hypercore did to
+
+00:19:02.020 --> 00:19:02.220
+make it more network web friendly is they
+
+00:19:04.540 --> 00:19:04.700
+made the shallow clones work a lot better and
+
+00:19:07.040 --> 00:19:07.240
+a lot... Yeah, they made that work a lot
+
+00:19:08.760 --> 00:19:09.060
+better so you don't have to download every
+
+00:19:11.340 --> 00:19:11.840
+single thing for every single project.
+
+00:19:14.860 --> 00:19:15.100
+And because they both are implementing the
+
+00:19:17.800 --> 00:19:18.040
+delta upgrades, I don't see how they could
+
+00:19:19.000 --> 00:19:19.500
+work really well together.
+
+00:19:21.780 --> 00:19:22.280
+At least from what it looked like to me.
+
+00:19:25.640 --> 00:19:26.140
+It can't hurt to experiment.
+
+00:19:28.980 --> 00:19:29.480
+[Speaker 1]: But yeah, I would agree with you.
+
+00:19:35.020 --> 00:19:35.180
+Is data transferred between nodes in the
+
+00:19:38.800 --> 00:19:39.060
+clear or encrypted? That's a good question.
+
+00:19:41.640 --> 00:19:42.140
+I don't know how it's encrypted.
+
+00:19:47.440 --> 00:19:47.940
+I don't, I wouldn't recommend sharing
+
+00:19:53.400 --> 00:19:53.900
+sensitive data with hyperdrive right now?
+
+00:19:55.680 --> 00:19:55.800
+I would recommend if you want to play with
+
+00:19:57.240 --> 00:19:57.520
+it, have it be something where you're
+
+00:20:00.660 --> 00:20:01.160
+expecting the data to be shared.
+
+00:20:03.460 --> 00:20:03.960
+Is there a searchable catalog?
+
+00:20:06.700 --> 00:20:06.980
+[Speaker 3]: It's also the data in transport versus data
+
+00:20:08.480 --> 00:20:08.800
+at rest. I'm pretty sure the data at rest
+
+00:20:09.960 --> 00:20:10.460
+would not be encrypted.
+
+00:20:14.440 --> 00:20:14.640
+Right. You can separate that into those 2
+
+00:20:14.640 --> 00:20:15.140
+questions.
+
+00:20:19.920 --> 00:20:20.420
+[Speaker 1]: Right. Right. Is there a searchable catalog
+
+00:20:23.000 --> 00:20:23.320
+of hyper drives? So that's a thing,
+
+00:20:32.980 --> 00:20:33.480
+an idea that we've been a distributed trust
+
+00:20:38.200 --> 00:20:38.700
+network for discovering peers that are
+
+00:20:41.260 --> 00:20:41.760
+trusted for a particular topic.
+
+00:20:47.220 --> 00:20:47.440
+And we actually made a demo video of a
+
+00:20:51.760 --> 00:20:51.900
+previous prototype that's available on the
+
+00:20:54.580 --> 00:20:55.080
+Ashen hyperdrive that you can watch that
+
+00:20:58.980 --> 00:20:59.280
+shows the basic idea. But the idea is just
+
+00:21:02.980 --> 00:21:03.480
+that you would have a list of peers that you
+
+00:21:07.120 --> 00:21:07.620
+think are worth listening to or worth reading
+
+00:21:09.400 --> 00:21:09.880
+for a particular topic.
+
+00:21:11.980 --> 00:21:12.180
+And those peers would have peers that they
+
+00:21:14.640 --> 00:21:14.920
+think are worth listening to for that same
+
+00:21:16.600 --> 00:21:16.720
+topic. And so you would say,
+
+00:21:17.560 --> 00:21:17.900
+if I'm interested in Emacs,
+
+00:21:21.220 --> 00:21:21.660
+I want to see all the peers that I trust for
+
+00:21:23.700 --> 00:21:24.200
+the topic Emacs. And if,
+
+00:21:27.340 --> 00:21:27.640
+say, Adam Porter shows up in my list and Adam
+
+00:21:30.340 --> 00:21:30.840
+Porter trusts Jonas and Jonas trusts Pratt,
+
+00:21:33.420 --> 00:21:33.920
+I would be able to read hyperdrive
+
+00:21:36.760 --> 00:21:37.260
+information from all of those people by
+
+00:21:41.600 --> 00:21:41.800
+looking at the indirect relationships that I
+
+00:21:43.260 --> 00:21:43.760
+have by following the chain of relationships,
+
+00:21:44.760 --> 00:21:45.260
+kind of like a web of trust.
+
+00:21:49.640 --> 00:21:49.860
+And so it would also allow you to have a
+
+00:21:53.480 --> 00:21:53.980
+network of peers that you trust to block
+
+00:21:54.900 --> 00:21:55.400
+other people on your behalf.
+
+00:21:57.660 --> 00:21:58.160
+So it would be useful for subjective
+
+00:22:02.220 --> 00:22:02.520
+moderation where you can remove spam and bad
+
+00:22:04.920 --> 00:22:05.420
+actors from the people that you follow
+
+00:22:08.940 --> 00:22:09.440
+without having to delegate that powerful
+
+00:22:13.260 --> 00:22:13.380
+responsibility to some third party in a
+
+00:22:15.260 --> 00:22:15.720
+permanent way where that third party might
+
+00:22:23.040 --> 00:22:23.320
+abuse that power. So it allows you to share
+
+00:22:26.120 --> 00:22:26.260
+your list of trusted peers and your list of
+
+00:22:29.180 --> 00:22:29.280
+blocked peers with other people in a
+
+00:22:29.860 --> 00:22:30.360
+peer-to-peer way.
+
+00:22:38.080 --> 00:22:38.580
+[Speaker 3]: Have you ever looked at GNUnet?
+
+00:22:40.200 --> 00:22:40.700
+It kind of does some...
+
+00:22:45.660 --> 00:22:45.800
+It's trying to do something weird with the
+
+00:22:47.520 --> 00:22:47.600
+internet where it redesigns it from the
+
+00:22:51.040 --> 00:22:51.540
+ground up to be peer-to-peer,
+
+00:22:53.680 --> 00:22:54.180
+local first, or something like that.
+
+00:22:58.380 --> 00:22:58.880
+[Speaker 1]: I would like to know more about GNUnet.
+
+00:23:01.800 --> 00:23:01.960
+Yes. I have heard of it,
+
+00:23:03.620 --> 00:23:04.120
+but I haven't really researched it.
+
+00:23:09.060 --> 00:23:09.560
+If you edit a file on the hyperdrive,
+
+00:23:12.400 --> 00:23:12.900
+then edit the same file on the local mirror,
+
+00:23:15.480 --> 00:23:15.640
+how is the conflict handled when you sync the
+
+00:23:21.140 --> 00:23:21.280
+mirror again? So I think if I understand the
+
+00:23:29.160 --> 00:23:29.620
+question, the answer is that you can't edit
+
+00:23:32.280 --> 00:23:32.780
+the file in 2 different places,
+
+00:23:36.860 --> 00:23:37.360
+I think is the answer to the question.
+
+00:23:41.220 --> 00:23:41.720
+If you were to manually copy the private key
+
+00:23:44.040 --> 00:23:44.540
+from 1 machine onto another machine,
+
+00:23:51.820 --> 00:23:52.320
+then you could cause a conflict,
+
+00:23:54.400 --> 00:23:54.900
+like a merge conflict,
+
+00:23:58.100 --> 00:23:58.240
+but you would have to go out of your way to
+
+00:24:00.520 --> 00:24:00.900
+do that. And It's not handled.
+
+00:24:03.580 --> 00:24:03.820
+I think the Hypercore Hole Punch team has
+
+00:24:05.600 --> 00:24:05.860
+another project that they're working on that
+
+00:24:07.200 --> 00:24:07.700
+would, it's called AutoBase,
+
+00:24:09.560 --> 00:24:10.060
+that would merge those conflicts.
+
+00:24:13.200 --> 00:24:13.680
+But we're not using that right now.
+
+00:24:16.260 --> 00:24:16.760
+And I think it's in early development still.
+
+00:24:19.860 --> 00:24:20.360
+So there might be a solution in the future.
+
+00:24:32.240 --> 00:24:32.740
+[Speaker 3]: What's a surprising change of thoughts or
+
+00:24:36.900 --> 00:24:37.180
+what's the most interesting thing you weren't
+
+00:24:39.060 --> 00:24:39.560
+expecting to discover while developing this?
+
+00:24:44.640 --> 00:24:44.800
+Like change of thoughts on how you write or I
+
+00:24:45.020 --> 00:24:45.520
+don't know.
+
+00:24:59.060 --> 00:24:59.540
+[Speaker 1]: Well, I'm relatively new to Emacs and to Lisp
+
+00:25:01.200 --> 00:25:01.700
+and really to programming in general.
+
+00:25:04.160 --> 00:25:04.540
+And so it's been a fantastic learning
+
+00:25:08.480 --> 00:25:08.900
+experience. Adam, Alpha Papa,
+
+00:25:11.320 --> 00:25:11.520
+Adam and I have been doing a lot of pair
+
+00:25:12.960 --> 00:25:13.460
+programming sessions where we work together
+
+00:25:15.380 --> 00:25:15.880
+and I get to learn from him.
+
+00:25:19.540 --> 00:25:19.940
+And we've had meetings with Jonas and Prat
+
+00:25:23.560 --> 00:25:23.800
+and meetings with Mauve where it's a
+
+00:25:25.520 --> 00:25:26.020
+fantastic learning experience for me to
+
+00:25:30.660 --> 00:25:30.800
+discover how to build software in an
+
+00:25:32.820 --> 00:25:33.320
+efficient and intelligent way.
+
+00:25:40.580 --> 00:25:40.920
+It's a huge pleasure. If there are no more
+
+00:25:43.320 --> 00:25:43.820
+questions, I just wanted to encourage
+
+00:25:48.380 --> 00:25:48.620
+everyone to try it out and to let us know
+
+00:25:50.380 --> 00:25:50.560
+what you think. It would be really helpful to
+
+00:25:54.960 --> 00:25:55.320
+have some feedback from people who are using
+
+00:25:57.240 --> 00:25:57.600
+it in new and creative ways that we haven't
+
+00:25:57.600 --> 00:25:58.100
+anticipated.
+
+00:26:02.120 --> 00:26:02.300
+[Speaker 6]: Hi, I'd just like to say that I tried this
+
+00:26:02.980 --> 00:26:03.480
+new thing called hyperdrive.el
+
+00:26:05.880 --> 00:26:06.380
+today, and I think it's pretty cool.
+
+00:26:12.540 --> 00:26:12.800
+[Speaker 2]: Sorry, that was somebody else.
+
+00:26:13.440 --> 00:26:13.940
+Hey Joseph, how's it going?
+
+00:26:15.080 --> 00:26:15.580
+Oh, talk today.
+
+00:26:16.420 --> 00:26:16.580
+[Speaker 3]: Oh, thanks. Wonderful.
+
+00:26:19.200 --> 00:26:19.700
+[Speaker 1]: Who's that? Oh, hey. Well,
+
+00:26:34.060 --> 00:26:34.560
+I'm going to say goodbye.
+
+00:26:37.040 --> 00:26:37.540
+Thank you. And thank you for your questions,
+
+00:26:39.680 --> 00:26:39.840
+[Speaker 3]: I know that
+
+00:26:40.380 --> 00:26:40.880
+[Speaker 1]: PlasmaStrike. I've met you before.
+
+00:26:42.340 --> 00:26:42.720
+Appreciate your questions,
+
+00:26:42.880 --> 00:26:43.380
+your thoughts.
+
+00:26:50.380 --> 00:26:50.880
+[Speaker 2]: Oh, by the way, Joseph,
+
+00:26:53.000 --> 00:26:53.500
+we have our, our first,
+
+00:26:55.120 --> 00:26:55.480
+I don't know if our first new user,
+
+00:26:57.280 --> 00:26:57.780
+but we have the first link being shared,
+
+00:27:01.160 --> 00:27:01.480
+to hyperdrive file in the chat and I loaded
+
+00:27:03.080 --> 00:27:03.240
+it and it works. And it's funny too.
+
+00:27:03.880 --> 00:27:04.000
+It's worth looking at.
+
+00:27:09.140 --> 00:27:09.640
+So. Oh, I think it's frozen.
+
+00:27:11.580 --> 00:27:12.080
+I don't know if anybody can hear me.
+
+00:27:12.720 --> 00:27:13.220
+[Speaker 3]: I can.
+
+00:27:15.200 --> 00:27:15.620
+[Speaker 2]: Okay, cool. The browser is frozen.
+
+00:27:19.020 --> 00:27:19.520
+It's it's not, okay. Just unfroze.
+
+00:27:21.740 --> 00:27:22.100
+Anyway. All right. Well,
+
+00:27:24.000 --> 00:27:24.440
+By the way, I enjoyed your talks about
+
+00:27:26.260 --> 00:27:26.480
+hyperbole. I'm going to rewatch those later
+
+00:27:28.040 --> 00:27:28.260
+when I get a chance. It was nice to meet you,
+
+00:27:31.100 --> 00:27:31.240
+too. Bob is a really great guy to work with.
+
+00:27:38.800 --> 00:27:39.300
+[Speaker 3]: Definitely a lot of interesting people.
+
+00:27:40.200 --> 00:27:40.700
+[Speaker 2]: I owe him 1. Yes, sir.
+
+00:27:41.580 --> 00:27:41.760
+All right, you have a good day,
+
+00:27:45.140 --> 00:27:45.640
+[Speaker 3]: Will do, I like the insistence on local
+
+00:27:48.740 --> 00:27:48.940
+first. Feels like it's a good dovetail with
+
+00:27:49.540 --> 00:27:50.040
+the hyper core
+
+00:27:51.180 --> 00:27:51.680
+[Speaker 2]: enjoy the conference. Yeah,
+
+00:27:54.960 --> 00:27:55.120
+yeah, I think there's a lot of a lot of
+
+00:27:57.980 --> 00:27:58.180
+interesting possibilities to build on this we
+
+00:28:01.340 --> 00:28:01.600
+have some plans that we Will get to you later
+
+00:28:05.600 --> 00:28:05.820
+this well in the coming year And we'll see
+
+00:28:07.480 --> 00:28:07.900
+where the hyperdrive people,
+
+00:28:09.920 --> 00:28:10.040
+you know, upstream how they develop it as
+
+00:28:14.340 --> 00:28:14.840
+well and yeah, so exciting times.
diff --git a/2023/captions/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--main.vtt b/2023/captions/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--main.vtt
new file mode 100644
index 00000000..c1376f19
--- /dev/null
+++ b/2023/captions/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--main.vtt
@@ -0,0 +1,2274 @@
+WEBVTT captioned by bhavin192, checked by sachac
+
+00:00.000 --> 00:00:02.600
+Hello, I'm Joseph Turner.
+
+00:00:02.600 --> 00:00:05.107
+This talk is about hyperdrive.el,
+
+00:00:05.107 --> 00:00:09.099
+peer-to-peer file system in Emacs.
+
+00:00:09.100 --> 00:00:11.479
+Hyperdrive is a JavaScript library
+
+00:00:11.480 --> 00:00:13.359
+developed by the Holepunch team
+
+00:00:13.360 --> 00:00:16.499
+for sharing files on a peer-to-peer network.
+
+00:00:16.500 --> 00:00:19.839
+It's released under the Apache 2.0 license.
+
+NOTE Hyperdrives introduction
+
+00:00:19.840 --> 00:00:21.639
+Here's how it works.
+
+00:00:21.640 --> 00:00:24.580
+To participate as a peer, you run a node,
+
+00:00:24.581 --> 00:00:27.280
+a lightweight local server that allows you
+
+00:00:27.281 --> 00:00:29.959
+to connect with other nodes on the network.
+
+00:00:29.960 --> 00:00:33.123
+You can create a hyperdrive or multiple hyperdrives,
+
+00:00:33.123 --> 00:00:36.219
+and you can author files within them.
+
+00:00:36.220 --> 00:00:38.699
+Each hyperdrive is automatically assigned
+
+00:00:38.700 --> 00:00:40.906
+a globally unique link
+
+00:00:40.906 --> 00:00:44.579
+that starts with `hyper://`.
+
+00:00:44.580 --> 00:00:47.019
+When you share that link with someone,
+
+00:00:47.020 --> 00:00:49.159
+they have access to your hyperdrive.
+
+00:00:49.160 --> 00:00:52.819
+Anyone who has that link can load the hyperdrive
+
+00:00:52.820 --> 00:00:56.000
+from the network and view its content.
+
+00:56.000 --> 00:00:59.019
+When you load a Hyperdrive file from the network,
+
+00:00:59.020 --> 00:01:02.019
+your node caches that data locally
+
+00:01:02.020 --> 00:01:04.133
+and automatically begins seeding it
+
+00:01:04.133 --> 00:01:05.219
+back to the network,
+
+00:01:05.220 --> 00:01:12.619
+making it available for others to download from you.
+
+00:01:12.620 --> 00:01:14.519
+Hyperdrives are single writer.
+
+00:01:14.520 --> 00:01:16.879
+This means that when you create a new drive,
+
+00:01:16.880 --> 00:01:19.719
+you are the only one who can make changes to it.
+
+00:01:19.720 --> 00:01:21.267
+Others can view it
+
+00:01:21.267 --> 00:01:23.799
+and can seed it back to the network,
+
+00:01:23.800 --> 00:01:27.339
+but you're the only one who can modify it.
+
+00:01:27.340 --> 00:01:29.739
+Hyperdrives are offline first.
+
+00:01:29.740 --> 00:01:32.999
+This means that when you load data from the network,
+
+00:01:33.000 --> 00:01:34.900
+it's stored locally on your machine
+
+00:01:34.900 --> 00:01:36.179
+for you to view later,
+
+00:01:36.180 --> 00:01:38.799
+even when you're disconnected from other peers.
+
+00:01:38.800 --> 00:01:40.799
+You can also create new drives
+
+00:01:40.800 --> 00:01:43.600
+and modify your drives when you're offline,
+
+00:01:43.600 --> 00:01:44.999
+and then share those changes
+
+00:01:45.000 --> 00:01:47.919
+once you connect with peers later.
+
+00:01:47.920 --> 00:01:50.299
+Hyperdrives are local first.
+
+00:01:50.300 --> 00:01:52.400
+This means that when you are connected with
+
+00:01:52.400 --> 00:01:54.739
+other peers on a local area network,
+
+00:01:54.740 --> 00:01:56.939
+even if none of the peers involved
+
+00:01:56.940 --> 00:01:58.979
+are connected to the broader Internet,
+
+00:01:58.980 --> 00:02:02.059
+you can still share files.
+
+00:02:02.060 --> 00:02:04.799
+Hyperdrives are sparsely replicated.
+
+00:02:04.800 --> 00:02:07.479
+This means that you can download individual files
+
+00:02:07.479 --> 00:02:10.020
+from a hyperdrive without having to download
+
+00:02:10.020 --> 00:02:11.719
+the whole thing.
+
+00:02:11.720 --> 00:02:15.471
+This saves on disk space and also allows you
+
+00:02:15.471 --> 00:02:17.233
+to quickly load just the files
+
+00:02:17.233 --> 00:02:20.539
+that you're interested in.
+
+00:02:20.540 --> 00:02:22.467
+Hyperdrives are mutable.
+
+00:02:22.467 --> 00:02:25.499
+You can add files, change files,
+
+00:02:25.500 --> 00:02:28.119
+remove files from a hyperdrive.
+
+00:02:28.120 --> 00:02:30.667
+And when peers load your drive
+
+00:02:30.667 --> 00:02:32.559
+using the very same link,
+
+00:02:32.560 --> 00:02:34.025
+they will be able to load
+
+00:02:34.025 --> 00:02:37.319
+the latest changes that you've published.
+
+00:02:37.320 --> 00:02:39.459
+Hyperdrives are versioned.
+
+00:02:39.460 --> 00:02:42.429
+This means that when you make changes to a file,
+
+00:02:42.429 --> 00:02:46.000
+the previous versions of those files are not lost.
+
+02:46.000 --> 00:02:49.359
+Peers can load the old versions of a file
+
+00:02:49.360 --> 00:02:52.439
+that was changed or deleted, for example,
+
+00:02:52.440 --> 00:02:55.067
+simply by specifying the version number
+
+00:02:55.067 --> 00:02:58.167
+of the hyperdrive when the file still existed
+
+00:02:58.167 --> 00:03:04.599
+or existed in a previous state.
+
+NOTE About USHIN and the contributors
+
+00:03:04.600 --> 00:03:07.379
+I'm presenting this talk on behalf of USHIN.
+
+00:03:07.380 --> 00:03:10.679
+USHIN is a tiny nonprofit whose mission is to
+
+00:03:10.680 --> 00:03:14.032
+promote personal, community and global health
+
+00:03:14.032 --> 00:03:17.367
+through free and open universal shared information
+
+00:03:17.367 --> 00:03:19.699
+for everybody.
+
+00:03:19.700 --> 00:03:21.551
+USHIN was founded in the early 90s
+
+00:03:21.551 --> 00:03:24.859
+by Paula Maas, Steve Nash and others
+
+00:03:24.860 --> 00:03:26.399
+with the goal of creating
+
+00:03:26.400 --> 00:03:29.131
+a distributed health information network
+
+00:03:29.131 --> 00:03:33.429
+that would allow people to find, share, compare
+
+00:03:33.429 --> 00:03:35.667
+and deliberate health information
+
+00:03:35.667 --> 00:03:37.779
+from a variety of sources.
+
+00:03:37.780 --> 00:03:40.699
+Since then, the scope of the project has broadened
+
+00:03:40.700 --> 00:03:43.259
+to include all kinds of information.
+
+00:03:43.260 --> 00:03:45.779
+And in recent years, we've been focusing on
+
+00:03:45.780 --> 00:03:49.499
+building with peer-to-peer software.
+
+00:03:49.500 --> 00:03:50.534
+About three years ago,
+
+00:03:50.534 --> 00:03:52.634
+we started working with Mauve Signweaver,
+
+00:03:52.634 --> 00:03:54.767
+who has since then been our steadfast
+
+00:03:54.767 --> 00:03:58.259
+peer-to-peer explorer and guide.
+
+00:03:58.260 --> 00:04:00.079
+This year, we started working on
+
+00:04:00.080 --> 00:04:02.799
+this hyperdrive.el Emacs package,
+
+00:04:02.800 --> 00:04:05.059
+and Adam has been the powerhouse
+
+00:04:05.060 --> 00:04:08.079
+behind the Emacs Lisp development.
+
+00:04:08.080 --> 00:04:08.967
+About a month ago,
+
+00:04:08.967 --> 00:04:11.099
+Jonas Bernoulli started joining with us,
+
+00:04:11.100 --> 00:04:14.419
+and he has been offering his expertise
+
+00:04:14.420 --> 00:04:15.639
+in the realm of user interface design
+
+00:04:15.640 --> 00:04:18.000
+using his Transient library.
+
+04:18.000 --> 00:04:22.139
+And Protesilaos Stavrou has been not only valuable
+
+00:04:22.140 --> 00:04:25.000
+in terms of user design and feedback,
+
+00:04:25.000 --> 00:04:27.119
+but he created a wonderful
+
+00:04:27.120 --> 00:04:32.099
+basic introduction to Hyperdrive. Take a look.
+
+NOTE Basic introduction to Hyperdrive
+
+00:04:32.646 --> 00:04:33.585
+[Prot]: Hello everyone!
+
+00:04:33.586 --> 00:04:36.365
+My name is Protesilaos, also known as Prot.
+
+00:04:36.366 --> 00:04:37.805
+In this video, I want to show you
+
+00:04:37.806 --> 00:04:40.746
+the basics of hyperdrive.el.
+
+00:04:40.746 --> 00:04:44.012
+This is a package for Emacs that lets us connect to
+
+00:04:44.013 --> 00:04:47.832
+the Hyperdrive peer-to-peer network.
+
+00:04:47.833 --> 00:04:51.572
+We can browse existing drives on the network,
+
+00:04:51.573 --> 00:04:53.879
+meaning existing file systems,
+
+00:04:53.880 --> 00:04:59.052
+or create and maintain our own hyperdrive,
+
+00:04:59.053 --> 00:05:03.473
+to which we can add, remove or edit files.
+
+00:05:03.473 --> 00:05:05.473
+We will see this together.
+
+00:05:05.473 --> 00:05:08.732
+What I have here in front of me is a basic
+
+00:05:08.733 --> 00:05:12.972
+use-package declaration for hyperdrive.el.
+
+00:05:12.973 --> 00:05:16.992
+All I am doing is binding `hyperdrive-menu`
+
+00:05:16.993 --> 00:05:19.792
+to a key and also activating
+
+00:05:19.793 --> 00:05:23.612
+the menu bar entry of hyperdrive.
+
+00:05:23.613 --> 00:05:26.812
+Let me show you very quickly, `hyperdrive-menu`.
+
+00:05:26.813 --> 00:05:31.292
+And this is the sort of interface that it brings up.
+
+00:05:31.293 --> 00:05:33.473
+We will take a closer look at it.
+
+00:05:33.473 --> 00:05:35.992
+As for the menu bar,
+
+00:05:35.993 --> 00:05:41.072
+we have `hyperdrive-menu` over here,
+
+00:05:41.073 --> 00:05:44.192
+and we will take a look at this as well.
+
+00:05:44.193 --> 00:05:45.692
+Suffice to say that
+
+00:05:45.693 --> 00:05:48.272
+you can get the same functionality
+
+00:05:48.273 --> 00:05:51.992
+with the menu bar or with `hyperdrive-menu`,
+
+00:05:51.993 --> 00:05:55.892
+as well as by calling the commands directly
+
+00:05:55.893 --> 00:06:00.052
+with `M-x` or their respective key bindings.
+
+00:06:00.053 --> 00:06:02.979
+I won't cover everything in that regard,
+
+00:06:02.980 --> 00:06:06.132
+but please bear this fact in mind.
+
+NOTE Managing files with Hyperdrive.el
+
+00:06:06.133 --> 00:06:09.212
+Let's start then with what I have here
+
+00:06:09.213 --> 00:06:13.852
+in this other tab, which is a set of files.
+
+00:06:13.853 --> 00:06:18.473
+I have prepared in my local file system - a hyperdrive.
+
+00:06:18.473 --> 00:06:20.332
+This contains a set of files
+
+00:06:20.333 --> 00:06:22.652
+that I ultimately want to share
+
+00:06:22.653 --> 00:06:24.352
+on the peer-to-peer network,
+
+00:06:24.353 --> 00:06:28.052
+meaning that I want this to eventually be
+
+00:06:28.053 --> 00:06:31.473
+reflected in my own hyperdrive.
+
+00:06:31.473 --> 00:06:34.053
+What I did to get started is
+
+00:06:34.054 --> 00:06:36.492
+I invoked `hyperdrive-menu`.
+
+00:06:36.493 --> 00:06:38.572
+The very first thing you need to do
+
+00:06:38.573 --> 00:06:40.992
+to get started with Hyperdrive,
+
+00:06:40.993 --> 00:06:43.632
+either to browse or to create,
+
+00:06:43.633 --> 00:06:46.013
+is to start the gateway,
+
+00:06:46.013 --> 00:06:48.692
+meaning to be able to connect to
+
+00:06:48.693 --> 00:06:50.473
+the peer-to-peer network.
+
+00:06:50.473 --> 00:06:53.492
+You see here in `hyperdrive-menu` that there is
+
+00:06:53.493 --> 00:06:56.292
+an indicator next to the "Gateway" heading
+
+00:06:56.293 --> 00:06:59.473
+telling me that the gateway is on.
+
+00:06:59.473 --> 00:07:04.672
+I started it with `G` and then `s`.
+
+00:07:04.673 --> 00:07:06.572
+Once you start it,
+
+00:07:06.573 --> 00:07:10.152
+you can type `h` to visit an existing drive,
+
+00:07:10.153 --> 00:07:12.112
+`N` to create a drive,
+
+00:07:12.113 --> 00:07:17.473
+or `L` to open a link to an existing hyperdrive.
+
+00:07:17.473 --> 00:07:21.153
+You may get this link via email, for example.
+
+00:07:21.154 --> 00:07:24.932
+In this case, let me be over here
+
+00:07:24.933 --> 00:07:27.972
+and let me just kill this buffer.
+
+00:07:27.973 --> 00:07:32.952
+What I want in this case is to select a hyperdrive.
+
+00:07:32.953 --> 00:07:35.452
+You see here I have my own hyperdrive
+
+00:07:35.453 --> 00:07:37.812
+and also the hyperdrive of USHIN,
+
+00:07:37.813 --> 00:07:41.332
+the developers of hyperdrive.el.
+
+00:07:41.333 --> 00:07:43.972
+What I want to do in this case,
+
+00:07:43.973 --> 00:07:46.852
+you see there are various options available.
+
+00:07:46.853 --> 00:07:50.212
+I want to type `v` to view a file.
+
+00:07:50.213 --> 00:07:50.972
+And in this case,
+
+00:07:50.973 --> 00:07:53.632
+I will just type the forward slash,
+
+00:07:53.633 --> 00:07:56.992
+which means to view the root directory
+
+00:07:56.993 --> 00:08:00.852
+of this hyperdrive. And I am here.
+
+00:08:00.853 --> 00:08:04.219
+It is an empty drive apart from
+
+00:08:04.220 --> 00:08:06.512
+my credentials over here.
+
+00:08:06.513 --> 00:08:10.112
+There is nothing more really to see.
+
+00:08:10.113 --> 00:08:12.092
+But what I want to do is
+
+00:08:12.093 --> 00:08:15.352
+to start adding files to this drive.
+
+00:08:15.353 --> 00:08:18.332
+Let me use the menu bar for this.
+
+00:08:18.333 --> 00:08:21.052
+I will hover over to the menu bar,
+
+00:08:21.053 --> 00:08:24.772
+and I will find the "Hyperdrive" submenu.
+
+00:08:24.773 --> 00:08:27.912
+Then I will go find where the drives are.
+
+00:08:27.913 --> 00:08:30.672
+And you see that there are writable drives,
+
+00:08:30.673 --> 00:08:32.812
+meaning drives that I manage,
+
+00:08:32.813 --> 00:08:37.352
+and read-only drives, meaning drives of other users.
+
+00:08:37.353 --> 00:08:40.332
+In this case, USHIN is read-only, of course,
+
+00:08:40.333 --> 00:08:42.972
+and Protesilaos is writable.
+
+00:08:42.973 --> 00:08:48.352
+So what I want to do is upload a file to Protesilaos.
+
+00:08:48.353 --> 00:08:52.473
+And it prompts me in the Minibuffer for a file.
+
+00:08:52.473 --> 00:08:55.292
+I will just add the README.
+
+00:08:55.293 --> 00:08:58.173
+It is asking me, "Where do you want to add it?"
+
+00:08:58.173 --> 00:09:00.552
+And in square brackets, the default is to add it
+
+00:09:00.553 --> 00:09:03.812
+to the root directory of the hyperdrive.
+
+00:09:03.813 --> 00:09:07.012
+So I will just type `RET` to select the default.
+
+00:09:07.013 --> 00:09:11.392
+And there it is. It is already in the drive.
+
+00:09:11.393 --> 00:09:14.072
+Let me add the COPYING file as well,
+
+00:09:14.073 --> 00:09:16.673
+using the same method.
+
+00:09:16.673 --> 00:09:21.392
+I will go find my drive. "Upload File."
+
+00:09:21.393 --> 00:09:23.852
+And let's add the COPYING.
+
+00:09:23.853 --> 00:09:29.432
+And I also want to add it to the root directory.
+
+00:09:29.433 --> 00:09:30.632
+So already I have two files.
+
+00:09:30.633 --> 00:09:31.952
+This is looking good.
+
+00:09:31.953 --> 00:09:37.013
+Now I am opening the file inside of hyperdrive.
+
+00:09:37.014 --> 00:09:39.032
+This is not the same file
+
+00:09:39.033 --> 00:09:42.673
+as I have in my local directory.
+
+00:09:42.673 --> 00:09:47.432
+What I can do here, for example, is I can...
+
+00:09:47.433 --> 00:09:49.892
+Let me open another file here, the COPYING.
+
+00:09:49.893 --> 00:09:52.112
+I can create an Org link.
+
+00:09:52.113 --> 00:09:54.332
+Notice that these are Org files.
+
+00:09:54.333 --> 00:09:58.852
+So I will use the standard `org-store-link` command.
+
+00:09:58.853 --> 00:10:01.172
+You can see the key binding I invoked
+
+00:10:01.173 --> 00:10:03.532
+and the command it calls
+
+00:10:03.533 --> 00:10:05.892
+on the top right corner of my screen.
+
+00:10:05.893 --> 00:10:07.412
+So what I did is
+
+00:10:07.413 --> 00:10:11.992
+I copied a link to this hyperdrive file.
+
+00:10:11.993 --> 00:10:15.352
+And in this other file over here,
+
+00:10:15.353 --> 00:10:22.152
+I want to say "Free/libre."
+
+00:10:22.153 --> 00:10:27.072
+So I am editing my hyperdrive terms:
+
+00:10:27.073 --> 00:10:35.352
+"Check the," and I will paste the link here,
+
+00:10:35.353 --> 00:10:40.072
+"for how to use my files."
+
+00:10:40.073 --> 00:10:44.812
+If we check what is here,
+
+00:10:44.813 --> 00:10:47.812
+you will see that this is a link
+
+00:10:47.813 --> 00:10:50.879
+inside of the hyperdrive.
+
+00:10:50.880 --> 00:10:52.712
+And it's pointing specifically
+
+00:10:52.713 --> 00:10:54.992
+to that heading over there,
+
+00:10:54.993 --> 00:10:58.172
+which has this unique identifier,
+
+00:10:58.173 --> 00:11:00.512
+as you can see over here.
+
+00:11:00.513 --> 00:11:03.072
+So this is wonderful.
+
+00:11:03.073 --> 00:11:09.712
+I want to rename it to "Check the COPYING
+
+00:11:09.713 --> 00:11:11.952
+for how to use my files."
+
+00:11:11.953 --> 00:11:13.932
+I will save this.
+
+00:11:13.933 --> 00:11:16.839
+And now what I want to do is,
+
+00:11:16.840 --> 00:11:20.492
+I want to invoke `hyperdrive-menu`.
+
+00:11:20.493 --> 00:11:23.152
+And you will see now the menu, unlike earlier,
+
+00:11:23.153 --> 00:11:27.212
+has more commands, more stuff we can do with it.
+
+00:11:27.213 --> 00:11:31.792
+For example, I can type `w` to copy a URL.
+
+00:11:31.793 --> 00:11:34.499
+And by typing `w`, you will notice...
+
+00:11:34.500 --> 00:11:37.332
+Let me go to the `*scratch*` buffer to paste this in.
+
+00:11:37.333 --> 00:11:40.092
+You will notice what the URL is.
+
+00:11:40.093 --> 00:11:44.132
+It is my hyperdrive, my unique identifier,
+
+00:11:44.133 --> 00:11:47.512
+and then forward slash, meaning the root directory,
+
+00:11:47.513 --> 00:11:49.672
+and then README.org.
+
+00:11:49.673 --> 00:11:54.092
+That is the file I was editing.
+
+00:11:54.093 --> 00:11:56.572
+Let's do `hyperdrive-menu` again.
+
+00:11:56.573 --> 00:11:58.132
+Let's remove the `*scratch*` buffer.
+
+00:11:58.133 --> 00:11:59.932
+And let's do `hyperdrive-menu`.
+
+00:11:59.933 --> 00:12:02.379
+And you will notice that there are options
+
+00:12:02.380 --> 00:12:05.132
+to download the file, for example.
+
+00:12:05.133 --> 00:12:07.212
+If you are reading somebody else's file,
+
+00:12:07.213 --> 00:12:10.012
+you can download it to your own file system.
+
+00:12:10.013 --> 00:12:12.012
+Let me do that. "Download."
+
+00:12:12.013 --> 00:12:14.752
+And it is asking me, "Where do you want to save this?"
+
+00:12:14.753 --> 00:12:20.673
+For now, I will save it in the `/tmp/`, like this.
+
+00:12:20.673 --> 00:12:23.212
+Let's call it test.org.
+
+00:12:23.213 --> 00:12:25.052
+Okay, `/tmp/test.org`.
+
+00:12:25.053 --> 00:12:29.092
+Let me go and visit `test.org`.
+
+00:12:29.093 --> 00:12:30.279
+And there it is.
+
+00:12:30.280 --> 00:12:32.652
+It downloaded it just like that.
+
+00:12:32.653 --> 00:12:35.372
+This is how you can, for example,
+
+00:12:35.373 --> 00:12:38.472
+download the pictures and videos
+
+00:12:38.473 --> 00:12:42.332
+that I will eventually share on my hyperdrive.
+
+00:12:42.333 --> 00:12:44.712
+Let's invoke `hyperdrive-menu` again.
+
+00:12:44.713 --> 00:12:48.052
+And let's go up to the parent, you see,
+
+00:12:48.053 --> 00:12:50.512
+with the caret (`^`) sign.
+
+00:12:50.513 --> 00:12:53.172
+This will take me to the parent directory,
+
+00:12:53.173 --> 00:12:56.572
+in this case, the root directory of my hyperdrive.
+
+NOTE Dired like interface
+
+00:12:56.573 --> 00:12:58.352
+Let me do it a bit differently.
+
+00:12:58.353 --> 00:13:00.192
+The same idea, a bit differently.
+
+00:13:00.193 --> 00:13:02.732
+For those of you who are familiar with
+
+00:13:02.733 --> 00:13:05.912
+Dired and the `dired-jump` command,
+
+00:13:05.913 --> 00:13:08.752
+Dired is the standard file manager of Emacs.
+
+00:13:08.753 --> 00:13:13.172
+And `dired-jump` is a command that lets you jump
+
+00:13:13.173 --> 00:13:14.592
+from the current file
+
+00:13:14.593 --> 00:13:18.652
+to the directory that contains that file.
+
+00:13:18.653 --> 00:13:20.732
+So you see, I am here.
+
+00:13:20.733 --> 00:13:22.552
+The `dired-jump` command, by default,
+
+00:13:22.553 --> 00:13:25.232
+is bound to Ctrl-x, Ctrl-j (`C-x C-j`).
+
+00:13:25.233 --> 00:13:29.432
+So if I do `C-x C-j`, in this case,
+
+00:13:29.433 --> 00:13:30.772
+it invokes a command.
+
+00:13:30.773 --> 00:13:33.712
+You can see the name of it, `hyperdrive-up`,
+
+00:13:33.713 --> 00:13:37.732
+which is functionally equivalent to `dired-jump`.
+
+00:13:37.733 --> 00:13:41.332
+It does the same thing, meaning that it took me
+
+00:13:41.333 --> 00:13:45.252
+to the parent directory of this file.
+
+00:13:45.253 --> 00:13:48.252
+I think this is very helpful.
+
+00:13:48.253 --> 00:13:50.692
+This listing over here, in general,
+
+00:13:50.693 --> 00:13:55.272
+tries to mimic or to reuse
+
+00:13:55.273 --> 00:13:58.552
+the knowledge you already have of Dired.
+
+00:13:58.553 --> 00:14:01.072
+For example, if you type `o`,
+
+00:14:01.073 --> 00:14:05.312
+it will open the file at point in the other window,
+
+00:14:05.313 --> 00:14:07.092
+same as in Dired.
+
+00:14:07.093 --> 00:14:08.992
+Whereas if you type `RET`,
+
+00:14:08.993 --> 00:14:11.912
+it would open it in the current window.
+
+00:14:11.913 --> 00:14:16.252
+Again, same as what you will do in Dired.
+
+00:14:16.253 --> 00:14:18.013
+Let's see over here.
+
+00:14:18.014 --> 00:14:21.643
+You have options to jump with `j`,
+
+00:14:21.643 --> 00:14:26.232
+which is using Minibuffer completion to go to a file.
+
+00:14:26.233 --> 00:14:28.432
+Right now, I only have two files,
+
+00:14:28.433 --> 00:14:32.099
+but the idea is the same.
+
+00:14:32.100 --> 00:14:34.012
+It's, again, what you would do in Dired
+
+00:14:34.013 --> 00:14:37.332
+if you type `j` with the default key bindings, though,
+
+00:14:37.333 --> 00:14:40.292
+not with Evil mode or something else.
+
+00:14:40.293 --> 00:14:42.912
+Let's see again what we have over here.
+
+00:14:42.913 --> 00:14:45.933
+You can create a bookmark, and this will work,
+
+00:14:45.934 --> 00:14:48.553
+but no need to show you everything.
+
+00:14:48.554 --> 00:14:50.693
+The idea is that you create a bookmark
+
+00:14:50.694 --> 00:14:53.213
+the way you create any Emacs bookmark,
+
+00:14:53.214 --> 00:14:54.932
+to a file, to a directory.
+
+00:14:54.933 --> 00:14:55.993
+It doesn't matter.
+
+00:14:55.994 --> 00:14:57.733
+And then you can jump to it,
+
+00:14:57.734 --> 00:15:01.233
+the way bookmarks in Emacs always work.
+
+NOTE History in hyperdrive
+
+00:15:01.234 --> 00:15:02.892
+What I want to show you now
+
+00:15:02.893 --> 00:15:06.312
+a little bit is the history.
+
+00:15:06.313 --> 00:15:09.012
+History in Hyperdrive
+
+00:15:09.013 --> 00:15:11.433
+has to do with the drive itself.
+
+00:15:11.434 --> 00:15:13.613
+Meaning that individual files
+
+00:15:13.614 --> 00:15:15.313
+do not have their own history,
+
+00:15:15.314 --> 00:15:18.673
+but the drive as such has a history.
+
+00:15:18.674 --> 00:15:22.013
+Whenever you add a file, you remove a file,
+
+00:15:22.014 --> 00:15:25.672
+or you edit a file, you are incrementing
+
+00:15:25.673 --> 00:15:29.132
+the versioning of the hyperdrive by one.
+
+00:15:29.133 --> 00:15:34.573
+So each action corresponds to one unit of history.
+
+00:15:34.574 --> 00:15:37.832
+If you add a file, remove a file, and edit a file,
+
+00:15:37.833 --> 00:15:40.992
+this means that you are up three versions.
+
+00:15:40.993 --> 00:15:44.712
+So whatever your version number is, plus three.
+
+00:15:44.713 --> 00:15:48.912
+I am on version 24* over here. [* latest, not version 24]
+
+00:15:48.913 --> 00:15:55.932
+Let me go to this file now,
+
+00:15:55.933 --> 00:15:59.792
+and let me do `V h`
+
+00:15:59.793 --> 00:16:02.173
+to see a history of it.
+
+00:16:02.173 --> 00:16:07.552
+You will notice that between versions 23 and 24,
+
+00:16:07.553 --> 00:16:09.972
+this file was constant.
+
+00:16:09.973 --> 00:16:12.632
+But in version 25, we have a change.
+
+00:16:12.633 --> 00:16:14.352
+When you are in this buffer over here,
+
+00:16:14.353 --> 00:16:17.212
+you can type the equals sign (`=`),
+
+00:16:17.213 --> 00:16:22.373
+which is a key binding that will bring up the diff.
+
+00:16:22.373 --> 00:16:24.472
+So the set of changes between
+
+00:16:24.473 --> 00:16:27.032
+the previous version and the current version.
+
+00:16:27.033 --> 00:16:32.512
+And you see here, between versions 23 and 25,
+
+00:16:32.513 --> 00:16:35.092
+I have this addition.
+
+00:16:35.093 --> 00:16:38.372
+I think this is wonderful because now
+
+00:16:38.373 --> 00:16:41.172
+you can always go and check
+
+00:16:41.173 --> 00:16:42.412
+what is the state of this file.
+
+00:16:42.413 --> 00:16:43.852
+What is this person up to?
+
+00:16:43.853 --> 00:16:46.312
+What have they been changing?
+
+00:16:46.313 --> 00:16:50.792
+And with Hyperdrive, you can also visit…
+
+00:16:50.793 --> 00:16:58.513
+Let me go to the parent here.
+
+00:16:58.514 --> 00:17:02.412
+You can always visit a previous history.
+
+00:17:02.413 --> 00:17:06.012
+So, for example, I will go to the previous history,
+
+00:17:06.013 --> 00:17:08.032
+and let me see this file again
+
+00:17:08.033 --> 00:17:09.553
+in its previous history.
+
+00:17:09.554 --> 00:17:11.093
+I am looking at the file,
+
+00:17:11.094 --> 00:17:15.153
+but notice that the file now is not editable
+
+00:17:15.154 --> 00:17:17.353
+because this is in the past.
+
+00:17:17.354 --> 00:17:19.313
+I cannot rewrite history.
+
+00:17:19.314 --> 00:17:23.413
+I can only go to the present and then modify it
+
+00:17:23.414 --> 00:17:27.213
+and then create a new history, a new version.
+
+00:17:27.214 --> 00:17:31.213
+But this helps me see the state of the file
+
+00:17:31.214 --> 00:17:35.973
+at that version of the hyperdrive.
+
+00:17:35.973 --> 00:17:39.973
+So this is the basic idea of it, folks.
+
+NOTE Use case of sharing large files
+
+00:17:39.973 --> 00:17:42.233
+What I want to do then is
+
+00:17:42.234 --> 00:17:46.253
+continue with my process here.
+
+00:17:46.254 --> 00:17:51.973
+Let me actually do it like this so that you can see.
+
+00:17:51.973 --> 00:17:54.373
+Continue with the process of
+
+00:17:54.374 --> 00:17:56.493
+publishing all those files
+
+00:17:56.494 --> 00:17:59.753
+that I have on my hyperdrive.
+
+00:17:59.754 --> 00:18:02.853
+For example, this is a picture of a flower
+
+00:18:02.854 --> 00:18:04.113
+that I have taken.
+
+00:18:04.114 --> 00:18:05.733
+I think it's very nice.
+
+00:18:05.734 --> 00:18:08.032
+And this is a video of an eagle
+
+00:18:08.033 --> 00:18:09.593
+that was flying above me.
+
+00:18:09.594 --> 00:18:13.773
+And I will share this on the Hyperdrive network.
+
+00:18:13.774 --> 00:18:15.732
+From the network, by the way,
+
+00:18:15.733 --> 00:18:18.452
+you can also stream video as well.
+
+00:18:18.453 --> 00:18:20.693
+It is described in the hyperdrive.el manual,
+
+00:18:20.694 --> 00:18:24.252
+but I cannot show you everything right now.
+
+00:18:24.253 --> 00:18:26.512
+I think you get the idea.
+
+00:18:26.513 --> 00:18:29.712
+The gist is, you have a file system
+
+00:18:29.713 --> 00:18:31.912
+that you can share with the world
+
+00:18:31.913 --> 00:18:34.132
+using peer-to-peer technology.
+
+00:18:34.133 --> 00:18:38.519
+And for me, this is a powerful tool.
+
+00:18:38.520 --> 00:18:41.912
+This is a valuable proposition
+
+00:18:41.913 --> 00:18:45.012
+because I can share these large files I have,
+
+00:18:45.013 --> 00:18:47.432
+these pictures or videos,
+
+00:18:47.433 --> 00:18:49.712
+which I cannot post on my website
+
+00:18:49.713 --> 00:18:52.712
+due to bandwidth considerations.
+
+00:18:52.713 --> 00:18:55.592
+And this way, I can still share with the world
+
+00:18:55.593 --> 00:18:59.073
+something that I consider interesting.
+
+00:18:59.073 --> 00:19:00.212
+That's all for today, folks.
+
+00:19:00.213 --> 00:19:01.893
+Thank you very much for your attention.
+
+00:19:01.894 --> 00:19:05.513
+Remember that hyperdrive.el is still in development
+
+00:19:05.514 --> 00:19:07.393
+and things may change.
+
+00:19:07.394 --> 00:19:10.312
+But the fundamentals are in place
+
+00:19:10.313 --> 00:19:13.073
+and will remain constant.
+
+00:19:13.073 --> 00:19:19.460
+That's all for today. Take care. Goodbye.
+
+00:19:19.461 --> 00:19:20.793
+[Joseph]: Thank you, Prot.
+
+NOTE Drive creation with hyperdrive.el
+
+00:19:20.913 --> 00:19:23.852
+Another fundamental feature of hyperdrive.el
+
+00:19:23.980 --> 00:19:26.319
+is drive creation.
+
+00:19:26.319 --> 00:19:28.338
+The first step, as always,
+
+00:19:28.339 --> 00:19:30.858
+is to make sure that the gateway is running.
+
+00:19:30.859 --> 00:19:35.118
+So I'll open up `hyperdrive-menu` with `C-c h`.
+
+00:19:35.119 --> 00:19:36.778
+By the way, my key presses,
+
+00:19:36.779 --> 00:19:38.698
+as well as the commands that they run,
+
+00:19:38.699 --> 00:19:42.438
+can be seen at the top right of my screen.
+
+00:19:42.439 --> 00:19:44.618
+Down here, I see that the gateway is off.
+
+00:19:44.619 --> 00:19:49.138
+So I'll start it with `G s`.
+
+00:19:49.139 --> 00:19:50.559
+Now, it takes a few moments
+
+00:19:50.560 --> 00:19:52.219
+for the gateway to spin up.
+
+00:19:52.219 --> 00:19:54.298
+So to refresh the menu,
+
+00:19:54.299 --> 00:19:58.398
+I will close it and open it again.
+
+00:19:58.399 --> 00:20:01.218
+And now we see that the gateway is on.
+
+00:20:01.219 --> 00:20:05.919
+I'll press `N` to create a new drive.
+
+00:20:05.919 --> 00:20:09.758
+Now it's prompting me for a new hyperdrive seed.
+
+00:20:09.759 --> 00:20:12.938
+A seed is a string of characters
+
+00:20:12.939 --> 00:20:14.998
+that will be used to generate,
+
+00:20:14.999 --> 00:20:18.298
+in tandem with my secret master key,
+
+00:20:18.299 --> 00:20:21.338
+a new public key that will globally,
+
+00:20:21.339 --> 00:20:24.878
+uniquely identify this drive.
+
+00:20:24.879 --> 00:20:31.758
+So I'll type in "emacsconf".
+
+00:20:31.759 --> 00:20:32.658
+And after a moment,
+
+00:20:32.659 --> 00:20:36.998
+we see the newly created, empty drive.
+
+00:20:36.999 --> 00:20:40.098
+So I'll open up `hyperdrive-menu` once more.
+
+00:20:40.099 --> 00:20:43.798
+And I'll press `h` to open the sub-menu that shows
+
+00:20:43.799 --> 00:20:45.978
+more information about this hyperdrive,
+
+00:20:45.979 --> 00:20:50.878
+as well as commands related to this drive.
+
+00:20:50.879 --> 00:20:54.918
+In blue here, we see the seed that I just entered
+
+00:20:54.919 --> 00:21:00.219
+as well as the public key that it generated.
+
+00:21:00.219 --> 00:21:02.198
+We also see that the petname
+
+00:21:02.199 --> 00:21:06.539
+is also set to emacsconf.
+
+00:21:06.540 --> 00:21:09.038
+The petname is different from the seed.
+
+00:21:09.039 --> 00:21:13.078
+The petname is my personal, local identifier
+
+00:21:13.079 --> 00:21:14.678
+for this drive.
+
+00:21:14.679 --> 00:21:16.819
+I can change it whenever I want.
+
+00:21:16.819 --> 00:21:19.738
+And while it's not a secret,
+
+00:21:19.739 --> 00:21:23.998
+it's not displayed to other users.
+
+00:21:23.999 --> 00:21:26.359
+So I will leave it for now.
+
+00:21:26.360 --> 00:21:28.138
+"emacsconf" is fine.
+
+00:21:28.139 --> 00:21:30.858
+But when I go to share this drive,
+
+00:21:30.859 --> 00:21:34.158
+I'll want to display something more memorable
+
+00:21:34.159 --> 00:21:36.878
+than this long public key.
+
+00:21:36.879 --> 00:21:39.219
+And that's what the nickname is for.
+
+00:21:39.219 --> 00:21:42.518
+I'll change that by pressing `n`,
+
+00:21:42.519 --> 00:21:48.219
+and I'll type in "Emacs Conference".
+
+00:21:48.219 --> 00:21:51.358
+Now, when other peers load this hyperdrive
+
+00:21:51.359 --> 00:21:57.058
+by its URL, which I can copy by pressing `w`,
+
+00:21:57.059 --> 00:21:59.498
+they will see the nickname
+
+00:21:59.499 --> 00:22:02.018
+in addition to the public key.
+
+00:22:02.019 --> 00:22:05.720
+So if hyperdrive.el is like a phone book,
+
+00:22:05.720 --> 00:22:09.419
+the public keys are akin to phone numbers,
+
+00:22:09.419 --> 00:22:13.938
+the nickname is like the name that your contacts
+
+00:22:13.939 --> 00:22:16.298
+give you when they introduce themselves,
+
+00:22:16.299 --> 00:22:18.318
+and the petname is the name
+
+00:22:18.319 --> 00:22:22.298
+that you actually write down in your phone book.
+
+00:22:22.299 --> 00:22:25.298
+I'll show you what nicknames and petnames look like
+
+00:22:25.299 --> 00:22:29.619
+for drives that are not writable to me.
+
+00:22:29.619 --> 00:22:32.478
+I'll press `C-g` to close this submenu,
+
+00:22:32.479 --> 00:22:34.638
+and now I'm back at the main menu.
+
+00:22:34.639 --> 00:22:39.998
+I'll press `C-u h` to choose a hyperdrive,
+
+00:22:39.999 --> 00:22:44.558
+and I'll look at Prot's hyperdrive here.
+
+00:22:44.559 --> 00:22:46.298
+And here we see that the nickname
+
+00:22:46.299 --> 00:22:49.838
+of Prot's hyperdrive is "Protesilaos".
+
+00:22:49.839 --> 00:22:50.918
+Now, it's grayed out,
+
+00:22:50.919 --> 00:22:53.238
+which means that I can't change it.
+
+00:22:53.239 --> 00:22:56.418
+I can't change it because it's not my hyperdrive.
+
+00:22:56.419 --> 00:22:58.538
+But I can change the petname if I want it
+
+00:22:58.539 --> 00:23:00.538
+to show up under a different name.
+
+00:23:00.539 --> 00:23:02.438
+So I'll press `p`,
+
+00:23:02.439 --> 00:23:06.678
+and I'll type in "Prot", and hit Enter.
+
+00:23:06.679 --> 00:23:11.319
+Now I'll open his hyperdrive by pressing `f`.
+
+00:23:11.319 --> 00:23:13.898
+And I'll pick a path, I'll just hit `RET`
+
+00:23:13.899 --> 00:23:16.758
+to open the root directory.
+
+00:23:16.759 --> 00:23:19.458
+And now, when Prot's hyperdrive shows up,
+
+00:23:19.459 --> 00:23:20.538
+at the top of the screen,
+
+00:23:20.539 --> 00:23:26.198
+I see that it's identified with the petname "Prot."
+
+NOTE hyperdrive-mirror
+
+00:23:26.199 --> 00:23:28.719
+Now I'll show off `hyperdrive-mirror`.
+
+00:23:28.719 --> 00:23:32.158
+`hyperdrive-mirror` is like `hyperdrive-upload-file`,
+
+00:23:32.159 --> 00:23:33.878
+except that it allows you to upload
+
+00:23:33.879 --> 00:23:37.918
+an entire directory full of files recursively.
+
+00:23:37.919 --> 00:23:40.038
+For this example, I will upload
+
+00:23:40.039 --> 00:23:44.819
+the contents of the emacsconf-mirror directory.
+
+00:23:44.819 --> 00:23:48.918
+First step is to open the menu. I'll press H,
+
+00:23:48.919 --> 00:23:53.378
+and then I will choose the emacsconf drive.
+
+00:23:53.379 --> 00:23:57.718
+In the bottom here, we see the Mirror group.
+
+00:23:57.719 --> 00:23:59.478
+The first option that I can change
+
+00:23:59.479 --> 00:24:01.819
+is the source directory.
+
+00:24:01.819 --> 00:24:04.618
+The source directory is the directory on my local
+
+00:24:04.619 --> 00:24:08.819
+machine from which files will be uploaded.
+
+00:24:08.819 --> 00:24:11.198
+By default, the source directory
+
+00:24:11.199 --> 00:24:17.059
+is set to the current directory of the main buffer.
+
+00:24:17.060 --> 00:24:19.419
+This is good for now, so I'll leave it.
+
+00:24:19.419 --> 00:24:22.198
+The target directory is the directory
+
+00:24:22.199 --> 00:24:25.418
+in the hyperdrive where the files will end up.
+
+00:24:25.419 --> 00:24:28.838
+By default, it's the root directory,
+
+00:24:28.839 --> 00:24:30.358
+but for this example,
+
+00:24:30.359 --> 00:24:36.358
+I'll put these files in a subdirectory called notes.
+
+00:24:36.359 --> 00:24:40.298
+The filter is the rule that allows you
+
+00:24:40.299 --> 00:24:43.378
+to programmatically determine which files
+
+00:24:43.379 --> 00:24:46.578
+in the local directory will be uploaded
+
+00:24:46.579 --> 00:24:50.338
+into the hyperdrive, and which ones won't.
+
+00:24:50.339 --> 00:24:54.718
+By default, all files are mirrored, but in this case,
+
+00:24:54.719 --> 00:24:58.498
+let's say that I want to upload only the Org files,
+
+00:24:58.499 --> 00:25:01.358
+these first three, and I want to exclude
+
+00:25:01.359 --> 00:25:05.419
+the markdown file, solar-oven-notes.md.
+
+00:25:05.419 --> 00:25:10.378
+So I'll press `m f`, and I will choose
+
+00:25:10.379 --> 00:25:13.419
+the regular expression string option.
+
+00:25:13.419 --> 00:25:16.278
+If I wanted to, I could choose a named function
+
+00:25:16.279 --> 00:25:22.198
+or a lambda, but I won't demo that here.
+
+00:25:22.199 --> 00:25:26.338
+I'll type in `org$`, which will match against
+
+00:25:26.339 --> 00:25:31.658
+the files that end with "org."
+
+00:25:31.659 --> 00:25:35.898
+The filter is here, and I'll leave confirmation on.
+
+00:25:35.899 --> 00:25:39.718
+The confirmation step just allows me to review
+
+00:25:39.719 --> 00:25:42.138
+the list of files that are going to be uploaded
+
+00:25:42.139 --> 00:25:45.898
+into the drive before it happens.
+
+00:25:45.899 --> 00:25:52.878
+So I'll press `m m` to mirror them, and I see here
+
+00:25:52.879 --> 00:25:58.438
+that these three files are going to be uploaded.
+
+00:25:58.439 --> 00:26:05.558
+Looks good. I'll press `C-c C-c` to confirm the mirror.
+
+00:26:05.559 --> 00:26:07.738
+Now it says three files have been uploaded,
+
+00:26:07.739 --> 00:26:11.378
+and here they are in the drive.
+
+00:26:11.379 --> 00:26:15.818
+Good, so now I will modify the
+
+00:26:15.819 --> 00:26:19.938
+fermented-overnight-oats file in the hyperdrive.
+
+00:26:19.939 --> 00:26:24.339
+So I've loaded it, and I'll add here:
+
+00:26:24.340 --> 00:26:31.818
+"or other grains - cook them in advance if you want to,"
+
+00:26:31.819 --> 00:26:33.778
+and I'll save it.
+
+00:26:33.779 --> 00:26:37.778
+Now this file, fermented-overnight-oats.org,
+
+00:26:37.779 --> 00:26:40.678
+has been modified on the hyperdrive
+
+00:26:40.679 --> 00:26:44.538
+more recently than on the file system.
+
+00:26:44.539 --> 00:26:48.899
+The file system file has not been modified.
+
+00:26:48.900 --> 00:26:53.818
+So I'll go back to my local directory,
+
+00:26:53.819 --> 00:26:56.538
+and I'll modify a different file.
+
+00:26:56.539 --> 00:27:00.458
+In this case, I'll add another hoedown
+
+00:27:00.459 --> 00:27:04.619
+to the fiddle-tunes.org file.
+
+00:27:04.619 --> 00:27:09.619
+"Tom and Jerry." That's a good hoedown.
+
+00:27:09.619 --> 00:27:14.119
+And now I'll mirror again.
+
+00:27:14.119 --> 00:27:16.778
+So I'll open the menu, and I'll press `h`,
+
+00:27:16.779 --> 00:27:20.578
+and then I'll open up the emacsconf demo drive.
+
+00:27:20.579 --> 00:27:22.958
+And now I've also decided that
+
+00:27:22.959 --> 00:27:26.718
+I want to include the solar-oven-notes.md file.
+
+00:27:26.719 --> 00:27:28.498
+So I'll remove the filter
+
+00:27:28.499 --> 00:27:32.119
+so that it's no longer excluded.
+
+00:27:32.119 --> 00:27:34.078
+I'll leave the rest of the settings the same,
+
+00:27:34.079 --> 00:27:38.778
+and I'll press `m m` again.
+
+00:27:38.779 --> 00:27:40.018
+And now we see that the
+
+00:27:40.019 --> 00:27:43.538
+`*hyperdrive-mirror*` buffer looks different.
+
+00:27:43.539 --> 00:27:47.378
+So, there are two main groups.
+
+00:27:47.379 --> 00:27:49.986
+These are the files that are going to be uploaded,
+
+00:27:49.986 --> 00:27:52.898
+and these are the files that are ignored.
+
+00:27:52.899 --> 00:27:56.538
+They're not going to be uploaded.
+
+00:27:56.539 --> 00:28:00.519
+The first subgroup is the files that are new locally.
+
+00:28:00.519 --> 00:28:04.898
+So the solar-oven-notes.md file is new on my machine,
+
+00:28:04.899 --> 00:28:07.319
+and it doesn't exist in the hyperdrive.
+
+00:28:07.319 --> 00:28:10.038
+So the mirror command is going to take that file
+
+00:28:10.039 --> 00:28:13.758
+and add it to the hyperdrive.
+
+00:28:13.759 --> 00:28:17.519
+This group contains the files that are newer locally.
+
+00:28:17.519 --> 00:28:19.778
+So the fiddle-tunes.org file
+
+00:28:19.779 --> 00:28:23.358
+has been modified on my local machine,
+
+00:28:23.359 --> 00:28:26.718
+but it hasn't been modified on the hyperdrive.
+
+00:28:26.719 --> 00:28:28.858
+So `hyperdrive-mirror` is going to take the
+
+00:28:28.859 --> 00:28:33.858
+updated version and put it on the hyperdrive.
+
+00:28:33.859 --> 00:28:35.958
+Now, the first group that's going to be ignored
+
+00:28:35.959 --> 00:28:39.358
+are the files that are older locally.
+
+00:28:39.359 --> 00:28:42.978
+So the fermented oats file has been modified
+
+00:28:42.979 --> 00:28:45.298
+on the hyperdrive more recently
+
+00:28:45.299 --> 00:28:47.538
+than on my local file system.
+
+00:28:47.539 --> 00:28:51.058
+So `hyperdrive-mirror` isn't going to overwrite
+
+00:28:51.059 --> 00:28:53.518
+the version of the file in my hyperdrive
+
+00:28:53.519 --> 00:28:57.278
+with the older local version.
+
+00:28:57.279 --> 00:29:00.778
+And finally, the emacsconf-preparation.org file
+
+00:29:00.779 --> 00:29:05.498
+hasn't been modified on either the hyperdrive
+
+00:29:05.499 --> 00:29:07.438
+or my local file system,
+
+00:29:07.439 --> 00:29:09.718
+and the timestamp is identical.
+
+00:29:09.719 --> 00:29:11.278
+So `hyperdrive-mirror` is going to
+
+00:29:11.279 --> 00:29:13.818
+ignore this file as well.
+
+00:29:13.819 --> 00:29:15.298
+So the only two files that are going
+
+00:29:15.299 --> 00:29:19.318
+to be uploaded now are the solar-oven-notes.md file
+
+00:29:19.319 --> 00:29:21.638
+and the fiddle-tunes.org file.
+
+00:29:21.639 --> 00:29:25.378
+I'll confirm that with `C-c C-c`.
+
+00:29:25.379 --> 00:29:26.578
+And now in my hyperdrive
+
+00:29:26.579 --> 00:29:28.518
+we see that there are four files.
+
+00:29:28.519 --> 00:29:31.678
+The solar-oven-notes.md file has been uploaded,
+
+00:29:31.679 --> 00:29:35.519
+and if I open the fiddle-tunes.org file,
+
+00:29:35.519 --> 00:29:39.478
+we see that it now contains the line "Tom and Jerry,"
+
+00:29:39.479 --> 00:29:41.658
+which means that it was updated based on
+
+00:29:41.659 --> 00:29:47.098
+the change to the file on my local file system.
+
+00:29:47.099 --> 00:29:50.558
+This `hyperdrive-mirror` command is the command
+
+00:29:50.559 --> 00:29:54.138
+that we use to periodically update
+
+00:29:54.139 --> 00:29:56.598
+the USHIN hyperdrive with
+
+00:29:56.599 --> 00:30:00.318
+the contents of the USHIN website.
+
+00:30:00.319 --> 00:30:03.018
+There's going to be a link to the USHIN hyperdrive
+
+00:30:03.019 --> 00:30:06.818
+as well as the website at the end of the video.
+
+NOTE hyperdrive history
+
+00:30:06.819 --> 00:30:09.078
+Now I'll go into a little more detail
+
+00:30:09.079 --> 00:30:11.218
+about the Hyperdrive history buffer
+
+00:30:11.219 --> 00:30:15.818
+by showing off the README file in Prot's hyperdrive.
+
+00:30:15.819 --> 00:30:19.018
+I'll press `C-c h` to open the menu,
+
+00:30:19.019 --> 00:30:22.198
+`C-u h` to be prompted for a drive.
+
+00:30:22.199 --> 00:30:24.238
+I'll select Prot's drive,
+
+00:30:24.239 --> 00:30:26.738
+then I'll press `f` to jump to a file
+
+00:30:26.739 --> 00:30:28.738
+inside of Prot's drive,
+
+00:30:28.739 --> 00:30:32.398
+and then `RET` to go to the root directory.
+
+00:30:32.399 --> 00:30:35.338
+From here, I'll press `j` to jump to
+
+00:30:35.339 --> 00:30:37.298
+an item in his directory.
+
+00:30:37.299 --> 00:30:42.378
+I'll press `RET` on the README to load it.
+
+00:30:42.379 --> 00:30:44.118
+And then finally, I'll open up
+
+00:30:44.119 --> 00:30:49.578
+`C-c h` to look at the menu.
+
+00:30:49.579 --> 00:30:50.978
+Here, I see that I'm looking at
+
+00:30:50.979 --> 00:30:56.858
+the latest version of Prot's README.org file.
+
+00:30:56.859 --> 00:30:58.738
+I also see that the previous version
+
+00:30:58.739 --> 00:31:02.418
+of README.org is unknown.
+
+00:31:02.419 --> 00:31:05.358
+It's unknown because hyperdrives
+
+00:31:05.359 --> 00:31:07.818
+are sparsely replicated.
+
+00:31:07.819 --> 00:31:09.998
+That means that when my node loaded this
+
+00:31:09.999 --> 00:31:12.358
+README.org file, it didn't bother
+
+00:31:12.359 --> 00:31:13.998
+to load anything else.
+
+00:31:13.999 --> 00:31:16.058
+It didn't load the previous history
+
+00:31:16.059 --> 00:31:18.658
+or any other file in his drive.
+
+00:31:18.659 --> 00:31:20.758
+But now that I want to check out whether
+
+00:31:20.759 --> 00:31:26.198
+there is a previous version, I'll press `V p`.
+
+00:31:26.199 --> 00:31:28.918
+And when it loads, I see in the mode line down here
+
+00:31:28.919 --> 00:31:33.318
+that I'm now looking at version 25 of this drive.
+
+00:31:33.319 --> 00:31:36.498
+That means that I'm looking at the README.org file
+
+00:31:36.499 --> 00:31:39.458
+at version 25 of this drive.
+
+00:31:39.459 --> 00:31:42.018
+I'll open the menu again, and I see
+
+00:31:42.019 --> 00:31:47.718
+that the same version number is displayed here.
+
+00:31:47.719 --> 00:31:50.478
+The previous version, before version 25,
+
+00:31:50.479 --> 00:31:53.558
+is also unknown because we haven't bothered
+
+00:31:53.559 --> 00:31:56.858
+to load anything before version 25.
+
+00:31:56.859 --> 00:32:00.478
+I also see that the next version, after version 25,
+
+00:32:00.479 --> 00:32:02.418
+is the latest version.
+
+00:32:02.419 --> 00:32:06.718
+So I'll open that up by pressing `V n`.
+
+00:32:06.719 --> 00:32:10.998
+And now we are back where we started,
+
+00:32:10.999 --> 00:32:12.918
+at the latest version.
+
+00:32:12.919 --> 00:32:15.078
+But now we see that the previous version,
+
+00:32:15.079 --> 00:32:18.998
+the version before the latest version, is version 25.
+
+00:32:18.999 --> 00:32:24.299
+Because now that our node has loaded the previous version,
+
+00:32:24.300 --> 00:32:28.619
+it can display that information to us.
+
+00:32:28.620 --> 00:32:31.639
+From here, I'll open up the history buffer.
+
+00:32:31.640 --> 00:32:35.319
+I'll press `V h`.
+
+00:32:35.320 --> 00:32:40.319
+And I can see that there are two known existent
+
+00:32:40.320 --> 00:32:46.119
+ranges in Prot's README.org history.
+
+00:32:46.119 --> 00:32:50.119
+This means that the latest version of README.org
+
+00:32:50.120 --> 00:32:54.419
+was modified at version 39.
+
+00:32:54.420 --> 00:32:57.479
+And that Prot made four changes
+
+00:32:57.480 --> 00:33:00.319
+to other files in his hyperdrive
+
+00:33:00.320 --> 00:33:04.279
+besides the README.org file since then.
+
+00:33:04.280 --> 00:33:08.659
+Before that, the time that Prot modified
+
+00:33:08.660 --> 00:33:11.839
+the README.org file was at version 25.
+
+00:33:11.840 --> 00:33:15.199
+And then he made 13 other changes to other files
+
+00:33:15.200 --> 00:33:18.579
+inside of this drive.
+
+00:33:18.580 --> 00:33:20.258
+Before that, we don't know.
+
+00:33:20.259 --> 00:33:21.858
+We haven't loaded the history.
+
+00:33:21.859 --> 00:33:23.178
+But since we're curious,
+
+00:33:23.179 --> 00:33:27.919
+I'll hit `RET` on the unknown line.
+
+00:33:27.920 --> 00:33:32.139
+And now we see that in Prot's hyperdrive,
+
+00:33:32.140 --> 00:33:34.939
+the README.org file didn't exist
+
+00:33:34.940 --> 00:33:39.019
+for the first 22 revisions of his drive.
+
+00:33:39.020 --> 00:33:43.779
+Then Prot created it at version 23.
+
+00:33:43.780 --> 00:33:46.919
+Then again, at 25, made a change.
+
+00:33:46.920 --> 00:33:50.559
+And then made another change at 39.
+
+00:33:50.560 --> 00:33:54.419
+For good measure, I'll show you the diffs.
+
+00:33:54.420 --> 00:33:58.179
+The first diff just contains the entire file
+
+00:33:58.180 --> 00:34:05.119
+because the file didn't exist before version 23.
+
+00:34:05.119 --> 00:34:08.619
+Then, at version 25, Prot added a link
+
+00:34:08.620 --> 00:34:13.119
+to the COPYING.org file.
+
+00:34:13.119 --> 00:34:14.219
+And then, at 39,
+
+00:34:14.220 --> 00:34:17.339
+Prot changed the link to his own hyperdrive
+
+00:34:17.340 --> 00:34:20.879
+to be a relative link.
+
+NOTE Streaming video from hyperdrive
+
+00:34:20.880 --> 00:34:24.299
+Now, I'll stream a video from the USHIN hyperdrive
+
+00:34:24.300 --> 00:34:27.899
+that shows off a prototype interface we created
+
+00:34:27.900 --> 00:34:31.719
+for exploring networks of sources of information.
+
+00:34:31.720 --> 00:34:33.939
+I'll open up `hyperdrive-menu`.
+
+00:34:33.940 --> 00:34:37.219
+Press `C-u h` to be prompted for a drive.
+
+00:34:37.220 --> 00:34:39.739
+I'll select the USHIN drive.
+
+00:34:39.740 --> 00:34:41.939
+Press `f` to jump to a file in it.
+
+00:34:41.940 --> 00:34:46.559
+And then I'll jump to the media directory.
+
+00:34:46.560 --> 00:34:50.179
+Once it loads, I'll press `RET` on the video
+
+00:34:50.180 --> 00:34:54.559
+that I want to stream.
+
+00:34:54.560 --> 00:34:56.686
+[Voice from the video]: This is a demonstration
+
+00:34:56.686 --> 00:34:57.838
+of the subjective trust interface
+
+00:34:57.839 --> 00:35:02.499
+that the USHIN team built for the u4u.io web app.
+
+00:35:02.500 --> 00:35:04.079
+[Joseph]: There it is.
+
+00:35:04.080 --> 00:35:07.119
+Streaming a video from Hyperdrive.
+
+NOTE hyperdrive.el under the hood
+
+00:35:08.746 --> 00:35:13.026
+Here's how hyperdrive.el works under the hood.
+
+00:35:13.027 --> 00:35:14.726
+It uses plz [Please],
+
+00:35:14.727 --> 00:35:18.079
+the HTTP library that Adam Porter wrote,
+
+00:35:18.080 --> 00:35:22.719
+to send requests via curl to hyper-gateway.
+
+00:35:22.720 --> 00:35:26.579
+hyper-gateway is a program that Mauve Signweaver wrote,
+
+00:35:26.580 --> 00:35:30.759
+which runs a hyperdrive node under the hood.
+
+00:35:30.760 --> 00:35:34.039
+It also runs a local HTTP server,
+
+00:35:34.040 --> 00:35:38.459
+which accepts requests to control the node.
+
+00:35:38.460 --> 00:35:43.479
+For example, if hyperdrive.el wants to show a file
+
+00:35:43.480 --> 00:35:45.219
+from someone's hyperdrive,
+
+00:35:45.220 --> 00:35:49.119
+it sends the appropriate link via curl
+
+00:35:49.120 --> 00:35:52.959
+as a GET request to hyper-gateway.
+
+00:35:52.960 --> 00:35:57.239
+hyper-gateway then fetches the data from the network
+
+00:35:57.240 --> 00:35:59.339
+and returns it via curl,
+
+00:35:59.340 --> 00:36:03.939
+via plz, back to hyperdrive.el.
+
+00:36:03.940 --> 00:36:07.419
+If hyper-gateway already has a locally cached copy,
+
+00:36:07.420 --> 00:36:09.239
+it doesn't bother checking the network.
+
+00:36:09.240 --> 00:36:12.559
+It just sends it straight away.
+
+00:36:12.560 --> 00:36:15.879
+Likewise, if hyperdrive.el wants to add a file
+
+00:36:15.880 --> 00:36:20.199
+to a hyperdrive, it sends a PUT request.
+
+00:36:20.200 --> 00:36:24.979
+hyper-gateway is not installed as part of hyperdrive.el.
+
+00:36:24.980 --> 00:36:26.659
+It needs to be installed
+
+00:36:26.660 --> 00:36:35.739
+as a separate, executable program.
+
+00:36:35.740 --> 00:36:39.459
+We have plans to switch from using hyper-gateway
+
+00:36:39.460 --> 00:36:42.458
+to another program that Mauve Signweaver
+
+00:36:42.459 --> 00:36:47.838
+is working on, called hyper-sdk-rpc.
+
+00:36:47.839 --> 00:36:52.019
+hyper-sdk-rpc will give us more fine-grained control
+
+00:36:52.020 --> 00:36:54.699
+over the underlying Hyperdrive node,
+
+00:36:54.700 --> 00:36:56.819
+which will open up some new features.
+
+00:36:56.820 --> 00:37:00.899
+For example, we'll be able to rename files atomically,
+
+00:37:00.900 --> 00:37:03.419
+diff directories between versions,
+
+00:37:03.420 --> 00:37:11.219
+and list the peers that we're currently connected to.
+
+00:37:11.220 --> 00:37:13.359
+Here are some of the Emacs libraries
+
+00:37:13.360 --> 00:37:17.539
+that hyperdrive.el depends on.
+
+00:37:17.540 --> 00:37:22.399
+Hyperdrive.el uses plz to send HTTP requests
+
+00:37:22.400 --> 00:37:25.698
+to hyper-gateway. Check it out.
+
+00:37:25.699 --> 00:37:28.559
+It's on GNU ELPA.
+
+00:37:28.560 --> 00:37:33.639
+ewoc.el is a built-in library that's documented
+
+00:37:33.640 --> 00:37:37.339
+in the Emacs Lisp manual under the rather cryptic
+
+00:37:37.340 --> 00:37:41.599
+heading "Abstract Display Functions."
+
+00:37:41.600 --> 00:37:44.519
+Really, what it does is it allows you
+
+00:37:44.520 --> 00:37:49.999
+to map a data model to some display.
+
+00:37:50.000 --> 00:37:53.859
+What we do with it in hyperdrive.el is,
+
+00:37:53.860 --> 00:38:02.049
+in the directory view, we map directory entry items,
+
+00:38:02.049 --> 00:38:04.239
+files and directories, to display items.
+
+00:38:04.240 --> 00:38:08.700
+And ewoc.el makes it easy to update the display
+
+00:38:08.701 --> 00:38:14.760
+whenever the underlying data changes.
+
+00:38:14.761 --> 00:38:21.279
+Hyperdrive.el uses persist.el to store
+
+00:38:21.280 --> 00:38:25.639
+Hyperdrive metadata about known hyperdrives
+
+00:38:25.640 --> 00:38:29.480
+as well as version history between sessions,
+
+00:38:29.481 --> 00:38:32.120
+so that the data is cached
+
+00:38:32.121 --> 00:38:34.960
+when you log out and log back in.
+
+00:38:34.961 --> 00:38:38.720
+If you're going to be developing a program in Emacs
+
+00:38:38.721 --> 00:38:41.960
+for Emacs 29 or later,
+
+00:38:41.961 --> 00:38:44.940
+I recommend looking at multisession.el,
+
+00:38:44.941 --> 00:38:50.160
+because it's built-in, and it has some features
+
+00:38:50.161 --> 00:38:57.540
+that persist.el doesn't have.
+
+NOTE Next steps
+
+00:38:57.541 --> 00:39:00.000
+Thank you for listening to this talk.
+
+00:39:00.001 --> 00:39:03.680
+I hope you get a chance to try out hyperdrive.el.
+
+00:39:03.681 --> 00:39:08.620
+Here is a link to the hyperdrive.el manual
+
+00:39:08.621 --> 00:39:11.560
+in the USHIN hyperdrive.
+
+00:39:11.561 --> 00:39:14.980
+When you go to paste this link in,
+
+00:39:14.981 --> 00:39:18.920
+you'll need to combine it back into one line.
+
+00:39:18.921 --> 00:39:22.500
+This link is available in the hyperdrive.el manual,
+
+00:39:22.501 --> 00:39:26.660
+which is available from within a browser,
+
+00:39:26.661 --> 00:39:29.820
+at this link on the USHIN website.
+
+00:39:29.821 --> 00:39:32.960
+We also have a public conference room that you can join.
+
+00:39:32.961 --> 00:39:35.520
+It's an XMPP multi-user chat
+
+00:39:35.521 --> 00:39:39.780
+that the Sopranica team graciously makes available
+
+00:39:39.781 --> 00:39:41.620
+for us to use.
+
+00:39:41.621 --> 00:39:43.900
+There's also a Matrix bridge,
+
+00:39:43.901 --> 00:39:48.659
+if that's more your cup of tea.
+
+00:39:48.660 --> 00:39:52.820
+Thank you to the EmacsConf organizers.
+
+00:39:52.821 --> 00:39:55.160
+It's been a pleasure to participate,
+
+00:39:55.161 --> 00:39:57.613
+and I look forward to hearing the rest of the talks.
+
+00:39:57.614 --> 00:40:02.859
+Have a good day.
diff --git a/2023/captions/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--main.vtt b/2023/captions/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--main.vtt
new file mode 100644
index 00000000..7d2db739
--- /dev/null
+++ b/2023/captions/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--main.vtt
@@ -0,0 +1,353 @@
+WEBVTT
+
+
+00:00:03.340 --> 00:00:03.480
+Today I will share a nice workflow I have
+
+00:00:04.400 --> 00:00:04.900
+developed for stream of consciousness
+
+00:00:06.560 --> 00:00:06.759
+journaling. The goal of stream of
+
+00:00:08.080 --> 00:00:08.240
+consciousness journaling is to get your
+
+00:00:09.960 --> 00:00:10.080
+thoughts on the screen as effectively and
+
+00:00:10.679 --> 00:00:11.040
+efficiently as possible.
+
+00:00:12.780 --> 00:00:12.980
+These 2 features when combined reinforce each
+
+00:00:14.860 --> 00:00:15.060
+other and let you hear yourself think in a
+
+00:00:15.960 --> 00:00:16.460
+very efficient manner,
+
+00:00:17.220 --> 00:00:17.580
+increasing the number,
+
+00:00:18.960 --> 00:00:19.160
+quality, and types of thoughts you can get
+
+00:00:21.100 --> 00:00:21.260
+out of it. The tools I will be using for this
+
+00:00:22.680 --> 00:00:23.099
+are Emacs, KL line from the Hyperbolt
+
+00:00:24.080 --> 00:00:24.279
+package, centered cursor mode,
+
+00:00:25.119 --> 00:00:25.619
+Olivetti mode, and optionally,
+
+00:00:26.820 --> 00:00:27.240
+voice to text. Additionally,
+
+00:00:28.939 --> 00:00:29.119
+you can see my commands and key bindings on
+
+00:00:31.500 --> 00:00:31.680
+the right. I will start off by showing a
+
+00:00:32.119 --> 00:00:32.619
+typing demo
+
+00:00:48.120 --> 00:00:48.620
+about how my day went.
+
+00:01:12.900 --> 00:01:13.180
+There are certain functionalities for stream
+
+00:01:14.640 --> 00:01:14.960
+of consciousness journaling that are desired
+
+00:01:15.900 --> 00:01:16.320
+or detrimental to the process.
+
+00:01:17.040 --> 00:01:17.540
+Stream of thought functionalities,
+
+00:01:26.000 --> 00:01:26.240
+things I want. The ability to optionally use
+
+00:01:27.720 --> 00:01:28.020
+speech to text. I do this by using
+
+00:01:29.380 --> 00:01:29.880
+Nerdictation, a Python program.
+
+00:01:32.320 --> 00:01:32.480
+I am still experimenting with this as it
+
+00:01:34.120 --> 00:01:34.200
+changes the quality and types of thoughts you
+
+00:01:35.280 --> 00:01:35.720
+can get out of stream of consciousness
+
+00:01:37.680 --> 00:01:37.880
+journaling. I am still looking for better
+
+00:01:39.900 --> 00:01:40.240
+ways of doing this. The ability to easily
+
+00:01:41.680 --> 00:01:41.880
+organize and split off my thoughts by
+
+00:01:43.040 --> 00:01:43.540
+creating and manipulating outlines.
+
+00:01:46.280 --> 00:01:46.560
+Creating them in real time is needed for live
+
+00:01:48.240 --> 00:01:48.720
+journaling and allows for later editing
+
+00:01:53.140 --> 00:01:53.300
+really easily. I showed off some of these
+
+00:01:56.479 --> 00:01:56.740
+commands before. To just write words without
+
+00:01:57.540 --> 00:01:58.040
+worrying about format.
+
+00:02:00.160 --> 00:02:00.480
+To not worry about scrolling,
+
+00:02:01.640 --> 00:02:02.140
+I use centered cursor mode.
+
+00:02:05.200 --> 00:02:05.660
+To not worry about lines,
+
+00:02:06.960 --> 00:02:07.460
+I use the KOutline auto-filling
+
+00:02:09.360 --> 00:02:09.800
+functionality. To not worry about pressing
+
+00:02:11.400 --> 00:02:11.720
+Enter, and to have a nice looking journal
+
+00:02:12.660 --> 00:02:13.160
+with hard returns afterwards.
+
+00:02:19.060 --> 00:02:19.320
+Manually filling is needed with spacing when
+
+00:02:22.160 --> 00:02:22.660
+it is wrong. I do that with metaJ.
+
+00:02:30.680 --> 00:02:31.180
+Counterproductive functionality.
+
+00:02:33.480 --> 00:02:33.680
+Spell checking. While this is useful for
+
+00:02:35.500 --> 00:02:35.680
+editing, it is not useful for stream of
+
+00:02:36.220 --> 00:02:36.720
+consciousness journaling.
+
+00:02:39.020 --> 00:02:39.140
+Having this on or off conditionally while you
+
+00:02:40.760 --> 00:02:40.940
+are live journaling is a killer feature of
+
+00:02:48.040 --> 00:02:48.460
+Emacs. Reading slash editing the journal.
+
+00:02:50.240 --> 00:02:50.380
+Part of the value proposition of this is to
+
+00:02:51.420 --> 00:02:51.820
+listen to what you are thinking,
+
+00:02:52.680 --> 00:02:53.180
+so this is needed functionality.
+
+00:02:55.580 --> 00:02:55.680
+You cannot listen very well when you are
+
+00:02:57.360 --> 00:02:57.720
+speaking, and the converse is true as well.
+
+00:02:59.240 --> 00:02:59.440
+You cannot speak very well when you are
+
+00:03:01.280 --> 00:03:01.440
+listening, decreasing what you can get out of
+
+00:03:04.120 --> 00:03:04.240
+it. Features when editing or listening to
+
+00:03:05.200 --> 00:03:05.700
+your journal. Spell checking.
+
+00:03:07.780 --> 00:03:08.280
+I use the Spackage Spellfoo,
+
+00:03:20.740 --> 00:03:20.980
+but there are others. I use multiple panes to
+
+00:03:25.040 --> 00:03:25.440
+read and edit. I use a combination of follow
+
+00:03:27.940 --> 00:03:28.440
+mode and some of my custom functions.
+
+00:03:31.860 --> 00:03:32.360
+These are what I use right here.
+
+00:03:53.360 --> 00:03:53.480
+The ability to change the view specs of the
+
+00:03:59.340 --> 00:03:59.840
+document. Stuff like, toggling blank lines.
+
+00:04:08.300 --> 00:04:08.800
+Show the first heading of everything.
+
+00:04:18.620 --> 00:04:18.839
+You can also export the KOutline pages to
+
+00:04:21.560 --> 00:04:21.779
+HTML for other people to read or another way
+
+00:04:29.440 --> 00:04:29.940
+to look at it. Easy manipulation of cells.
+
+00:04:34.040 --> 00:04:34.160
+You use the Alt and arrow keys just like in
+
+00:04:37.200 --> 00:04:37.700
+Orm mode to delete cells easily.
+
+00:04:47.020 --> 00:04:47.180
+The ability to manually reformat KL9 cells in
+
+00:04:49.540 --> 00:04:49.760
+addition to auto formatting of the cells for
+
+00:04:50.860 --> 00:04:51.180
+when spacing looks off.
+
+00:04:53.900 --> 00:04:54.080
+MetaJ is nice, and auto-filling is also nice
+
+00:04:54.920 --> 00:04:55.420
+for having multiple pages.
+
+00:04:58.660 --> 00:04:59.020
+Why do I use these tools versus other common
+
+00:05:06.060 --> 00:05:06.200
+tools? K-Outline vs. Playtext Writing in
+
+00:05:08.460 --> 00:05:08.600
+outlines helps me easily structure my
+
+00:05:09.960 --> 00:05:10.280
+thoughts in a way that is easy to write,
+
+00:05:12.500 --> 00:05:12.800
+read, and edit. Org Mode vs.
+
+00:05:15.360 --> 00:05:15.600
+K-Outline Org Mode gives me lots of ways to
+
+00:05:17.120 --> 00:05:17.620
+structure my journal slash document.
+
+00:05:19.600 --> 00:05:20.100
+While this is great for a lot of things,
+
+00:05:21.540 --> 00:05:22.040
+for stream of consciousness journaling,
+
+00:05:24.960 --> 00:05:25.140
+this causes decision fatigue and loss of
+
+00:05:30.320 --> 00:05:30.720
+concentration. Types of questions I get when
+
+00:05:31.960 --> 00:05:32.460
+structuring an org-mode document?
+
+00:05:35.080 --> 00:05:35.400
+Do I keep everything in a heading or below
+
+00:05:36.100 --> 00:05:36.600
+the heading in paragraphs?
+
+00:05:38.080 --> 00:05:38.240
+How do I handle new lines?
+
+00:05:40.240 --> 00:05:40.520
+Do I just use visual line mode with no hard
+
+00:05:42.520 --> 00:05:42.880
+returns? Or if I make hard returns,
+
+00:05:44.800 --> 00:05:45.300
+on what line number do I do them?
+
+00:05:50.080 --> 00:05:50.460
+More visual line nodes in org-mode documents
+
+00:05:52.660 --> 00:05:53.160
+like a potential org ID in your property
+
+00:05:57.720 --> 00:05:57.940
+stores. While a lot of the above is really
+
+00:05:59.880 --> 00:06:00.060
+nice if you are making something like a
+
+00:06:01.640 --> 00:06:02.060
+website to present to other people,
+
+00:06:04.080 --> 00:06:04.340
+these features are counterproductive to
+
+00:06:05.040 --> 00:06:05.540
+stream-of-thought journaling.
+
+00:06:08.900 --> 00:06:09.200
+Org mode is also top-notch for other things
+
+00:06:11.780 --> 00:06:12.280
+such as GTD. I don't think org mode has
+
+00:06:13.820 --> 00:06:14.280
+bindings to create child,
+
+00:06:15.460 --> 00:06:15.960
+same-level, and parent cells.
+
+00:06:19.340 --> 00:06:19.600
+Centered cursor mode versus scroll lock mode
+
+00:06:22.640 --> 00:06:22.960
+built-in. Scroll lock mode changes its place
+
+00:06:28.180 --> 00:06:28.380
+when you move the cursor from the bottom or
+
+00:06:30.080 --> 00:06:30.280
+the top of the page. Centered cursor mode
+
+00:06:33.420 --> 00:06:33.680
+will reliably fix itself to the center when
+
+00:06:36.280 --> 00:06:36.780
+the cursor position is not there.
diff --git a/2023/captions/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--answers.vtt b/2023/captions/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--answers.vtt
new file mode 100644
index 00000000..d48cc06d
--- /dev/null
+++ b/2023/captions/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--answers.vtt
@@ -0,0 +1,1910 @@
+WEBVTT
+
+
+00:00:13.099 --> 00:00:13.599
+[Speaker 0]: Okay. Hello, everyone.
+
+00:00:16.560 --> 00:00:17.060
+I think this is the start of the Q&A session.
+
+00:00:25.119 --> 00:00:25.599
+So people can just ask me questions here.
+
+00:00:28.259 --> 00:00:28.380
+Or I think maybe these questions are going to
+
+00:00:30.560 --> 00:00:30.980
+be read by someone. Yes,
+
+00:00:34.680 --> 00:00:35.060
+thank you. Should I start doing that?
+
+00:00:39.280 --> 00:00:39.400
+I also know that there's questions in the
+
+00:00:41.320 --> 00:00:41.480
+either pad room, so I could start out
+
+00:00:42.280 --> 00:00:42.780
+answering those as well.
+
+00:00:45.020 --> 00:00:45.300
+[Speaker 1]: Right, sure. Whichever way you prefer.
+
+00:00:46.860 --> 00:00:47.220
+If you prefer to read the questions yourself,
+
+00:00:48.940 --> 00:00:49.080
+by all means, or if you would prefer me to
+
+00:00:50.080 --> 00:00:50.280
+read them to you, that also works.
+
+00:00:50.580 --> 00:00:50.920
+[Speaker 2]: Oh, I see.
+
+00:00:51.600 --> 00:00:51.760
+[Speaker 0]: Why don't you read them to me?
+
+00:00:53.260 --> 00:00:53.760
+I think it'll just be more interesting then.
+
+00:00:56.820 --> 00:00:57.160
+[Speaker 1]: Sure. OK, let's see. The first question is,
+
+00:00:58.360 --> 00:00:58.860
+what is your use case for embedding,
+
+00:01:00.060 --> 00:01:00.560
+mainly for searching?
+
+00:01:06.180 --> 00:01:06.340
+[Speaker 0]: Yeah, I mean, I think the use case really is
+
+00:01:12.100 --> 00:01:12.320
+searching. And I think it is very useful when
+
+00:01:15.060 --> 00:01:15.320
+you're searching for something in a vague
+
+00:01:18.280 --> 00:01:18.780
+way. Just to give you an example,
+
+00:01:23.860 --> 00:01:24.360
+I have a note system called EKG.
+
+00:01:25.760 --> 00:01:26.260
+I type all my notes on it.
+
+00:01:28.620 --> 00:01:29.120
+You can find it on GitHub and Melba.
+
+00:01:34.140 --> 00:01:34.400
+But I wrote something at some point a year
+
+00:01:35.840 --> 00:01:36.020
+ago or something. I wrote something that I
+
+00:01:36.600 --> 00:01:36.980
+just vaguely remembered.
+
+00:01:38.800 --> 00:01:38.940
+Oh, this was about a certain kind of
+
+00:01:41.580 --> 00:01:41.760
+communication. I wanted communicating to
+
+00:01:43.280 --> 00:01:43.479
+large audiences. There's some interesting tip
+
+00:01:44.700 --> 00:01:45.060
+that I wrote down that was really cool.
+
+00:01:49.920 --> 00:01:50.080
+And I was like, well, I need to find it.
+
+00:01:52.260 --> 00:01:52.640
+So I did an embedding search for something
+
+00:01:55.479 --> 00:01:55.979
+like, you know, tips for communicating.
+
+00:01:58.979 --> 00:01:59.100
+Like those words may not have been in what I
+
+00:02:00.020 --> 00:02:00.520
+was trying to find at all,
+
+00:02:02.680 --> 00:02:03.180
+But it was able to find it.
+
+00:02:05.840 --> 00:02:06.260
+And that is something that's very hard to do
+
+00:02:07.200 --> 00:02:07.360
+in other ways. Like, you know,
+
+00:02:08.520 --> 00:02:08.720
+if you had to do this with normal search,
+
+00:02:09.199 --> 00:02:09.660
+you have to do synonyms.
+
+00:02:10.940 --> 00:02:11.200
+And like maybe those synonyms wouldn't cover
+
+00:02:11.960 --> 00:02:12.340
+it. Like with embedding,
+
+00:02:13.940 --> 00:02:14.160
+you can basically get at like the vague
+
+00:02:14.960 --> 00:02:15.460
+sentiment. You're like,
+
+00:02:17.320 --> 00:02:17.560
+you know, you're, you know,
+
+00:02:19.520 --> 00:02:19.700
+you can really query on like what things are
+
+00:02:21.760 --> 00:02:22.260
+about as opposed to what words they have.
+
+00:02:25.600 --> 00:02:26.100
+Also, it's super good for similarity search.
+
+00:02:27.720 --> 00:02:27.900
+So you could say, look,
+
+00:02:30.040 --> 00:02:30.240
+I have a bunch of things that are encoded
+
+00:02:31.400 --> 00:02:31.900
+with embeddings that I want to show.
+
+00:02:34.120 --> 00:02:34.280
+For example, you can make an embedding for
+
+00:02:35.220 --> 00:02:35.380
+every buffer. You'd be like,
+
+00:02:37.060 --> 00:02:37.200
+well, show me buffers that are similar to
+
+00:02:38.740 --> 00:02:38.980
+this buffer. That doesn't sound super useful,
+
+00:02:40.440 --> 00:02:40.940
+but this is the kind of thing you could do.
+
+00:02:45.300 --> 00:02:45.480
+And so if you have a bunch of notes or
+
+00:02:46.720 --> 00:02:46.920
+something else that you want to search on,
+
+00:02:48.240 --> 00:02:48.740
+you'd be like, what's similar to this buffer?
+
+00:02:51.500 --> 00:02:51.760
+Or what notes are similar to each other?
+
+00:02:53.040 --> 00:02:53.540
+What buffers are similar to each other?
+
+00:02:55.380 --> 00:02:55.880
+It's super good for this sort of thing.
+
+00:03:00.780 --> 00:03:01.280
+And it's also good for this kind of retrieval
+
+00:03:03.080 --> 00:03:03.520
+augmented generation, where you sort of,
+
+00:03:05.080 --> 00:03:05.280
+you retrieve things and the purpose is not
+
+00:03:06.600 --> 00:03:06.880
+for you to see them, but then you pass that
+
+00:03:12.040 --> 00:03:12.180
+to the LLM. And then it's able to be a little
+
+00:03:14.340 --> 00:03:14.800
+bit more accurate because it has the actual
+
+00:03:15.760 --> 00:03:16.260
+text that you're trying to,
+
+00:03:18.960 --> 00:03:19.180
+that is relevant, and it can cite from and
+
+00:03:20.720 --> 00:03:20.820
+things like that. And then it could give you
+
+00:03:22.260 --> 00:03:22.660
+a much better answer that's kind of,
+
+00:03:25.520 --> 00:03:25.680
+you know, not just from its own little neural
+
+00:03:26.320 --> 00:03:26.820
+nets and memory.
+
+00:03:31.920 --> 00:03:32.120
+[Speaker 1]: Cool, thanks. Let's see,
+
+00:03:35.740 --> 00:03:36.100
+next question. What do you think about embed
+
+00:03:40.160 --> 00:03:40.660
+Emacs manual versus GPT's Emacs manual?
+
+00:03:45.480 --> 00:03:45.660
+[Speaker 0]: I'm not exactly sure what this question is
+
+00:03:46.980 --> 00:03:47.480
+trying to say. So I mean,
+
+00:03:51.000 --> 00:03:51.140
+if someone wrote that and wants to expand on
+
+00:03:55.080 --> 00:03:55.320
+it a little bit, but I think that maybe
+
+00:03:58.420 --> 00:03:58.920
+you're saying like you could embed,
+
+00:04:00.280 --> 00:04:00.780
+have embeddings for like various,
+
+00:04:02.520 --> 00:04:02.720
+like every paragraph or something of the
+
+00:04:04.540 --> 00:04:04.680
+Emacs manual. But it's also the case that
+
+00:04:06.500 --> 00:04:07.000
+like GPT is already for sure already read it,
+
+00:04:09.760 --> 00:04:09.960
+right? And so you could ask questions that
+
+00:04:13.460 --> 00:04:13.780
+are about Emacs and our ELISP or whatever
+
+00:04:15.200 --> 00:04:15.700
+part of the manual you want to find.
+
+00:04:19.760 --> 00:04:20.240
+And it will do a reasonably good job,
+
+00:04:22.280 --> 00:04:22.780
+especially the better models will do a
+
+00:04:24.620 --> 00:04:24.940
+reasonably good job of saying you something
+
+00:04:26.040 --> 00:04:26.540
+that is vaguely accurate.
+
+00:04:29.440 --> 00:04:29.860
+But if you do this retrieval augmented
+
+00:04:30.580 --> 00:04:31.080
+generation with embeddings,
+
+00:04:32.640 --> 00:04:33.140
+you can get something that is very accurate.
+
+00:04:36.700 --> 00:04:36.960
+At least I think. I haven't tried it,
+
+00:04:38.760 --> 00:04:39.020
+but this is a technique that works in other
+
+00:04:43.040 --> 00:04:43.260
+similar cases. So you can also imagine like,
+
+00:04:44.320 --> 00:04:44.500
+oh, this whole thing I said,
+
+00:04:47.860 --> 00:04:48.120
+like, oh, you can query for vague things and
+
+00:04:49.140 --> 00:04:49.600
+get parts of the manual,
+
+00:04:52.680 --> 00:04:53.000
+perhaps. I'm not exactly sure if that would
+
+00:04:55.120 --> 00:04:55.520
+be useful, but maybe. Usually when I'm
+
+00:04:57.040 --> 00:04:57.180
+looking things up in the Emacs manual or
+
+00:04:58.320 --> 00:04:58.780
+Elist manual, I have something extremely
+
+00:05:00.020 --> 00:05:00.300
+specific and I kind of know where to look.
+
+00:05:02.960 --> 00:05:03.080
+But having other ways to get at this
+
+00:05:04.000 --> 00:05:04.500
+information is always good.
+
+00:05:10.240 --> 00:05:10.740
+[Speaker 1]: Right. Looks like they added a clarification
+
+00:05:12.280 --> 00:05:12.720
+if you would like to read that yourself,
+
+00:05:14.180 --> 00:05:14.680
+or would you like me to read it for you?
+
+00:05:17.640 --> 00:05:18.140
+[Speaker 0]: Yeah. Yes, OK. It says,
+
+00:05:20.460 --> 00:05:20.740
+I've never tried. Yeah,
+
+00:05:21.500 --> 00:05:21.820
+the question is like OK,
+
+00:05:23.100 --> 00:05:23.240
+there is a difference between the kind of
+
+00:05:23.860 --> 00:05:24.360
+thing as I just described.
+
+00:05:26.200 --> 00:05:26.600
+I have not tried the difference with the EMAX
+
+00:05:31.560 --> 00:05:31.980
+manual itself. It'd be interesting to see
+
+00:05:33.700 --> 00:05:33.960
+what this is, but I would expect like these
+
+00:05:35.140 --> 00:05:35.600
+techniques, the retrieval augmented
+
+00:05:38.840 --> 00:05:39.340
+generation is generally pretty good.
+
+00:05:41.240 --> 00:05:41.740
+And I suspect it would,
+
+00:05:43.580 --> 00:05:43.780
+I would bet money on the fact that it's gonna
+
+00:05:45.820 --> 00:05:46.240
+give you, you know, better results than just,
+
+00:05:48.160 --> 00:05:48.360
+you know, doing a free form query without any
+
+00:05:49.440 --> 00:05:49.940
+retrieval augmented generation.
+
+00:05:54.240 --> 00:05:54.640
+[Speaker 1]: Cool. Let's see. Next question.
+
+00:05:56.380 --> 00:05:56.880
+When deferring commit messages to an LLM,
+
+00:05:59.700 --> 00:05:59.920
+what, if anything, do you find you might have
+
+00:06:02.940 --> 00:06:03.440
+[Speaker 0]: lost? Yeah, it's a good question.
+
+00:06:06.060 --> 00:06:06.560
+When deferring anything to a computer,
+
+00:06:08.860 --> 00:06:09.360
+like, you know, I used to have to remember
+
+00:06:11.200 --> 00:06:11.700
+how to get places, and now,
+
+00:06:14.540 --> 00:06:15.040
+you know, on the few occasions which I drive,
+
+00:06:16.560 --> 00:06:16.720
+like, It could just tell me how to get
+
+00:06:21.960 --> 00:06:22.280
+places. So similar things could occur here
+
+00:06:24.960 --> 00:06:25.460
+where like, okay, I'm just leaving the LLM.
+
+00:06:27.380 --> 00:06:27.680
+And so I'm kind of missing out on some
+
+00:06:30.040 --> 00:06:30.220
+opportunity to think coherently about a
+
+00:06:32.440 --> 00:06:32.680
+particular commit. Particular commits are
+
+00:06:36.140 --> 00:06:36.540
+kind of low level. I don't think it's usually
+
+00:06:39.340 --> 00:06:39.840
+relatively obvious and what they're doing.
+
+00:06:42.600 --> 00:06:42.800
+And in this case, I think there's not much
+
+00:06:44.220 --> 00:06:44.540
+loss. But for sure, in other cases,
+
+00:06:46.400 --> 00:06:46.900
+if you're starting to get into situations
+
+00:06:48.640 --> 00:06:48.800
+where it's writing your emails and all this
+
+00:06:52.920 --> 00:06:53.300
+stuff. First of all, it's in 1 sense,
+
+00:06:55.580 --> 00:06:56.040
+I'm not sure you might be losing something by
+
+00:06:57.520 --> 00:06:57.780
+delegating things. On the other hand,
+
+00:06:59.120 --> 00:06:59.280
+you know, when you're interacting with these
+
+00:07:01.280 --> 00:07:01.560
+LLMs, you have to be extremely specific about
+
+00:07:03.120 --> 00:07:03.240
+what you want, or else it's just not going to
+
+00:07:07.540 --> 00:07:07.680
+do a good job. And that might actually be a
+
+00:07:09.440 --> 00:07:09.860
+good thing. So the question might be that
+
+00:07:11.820 --> 00:07:12.240
+maybe you might gain things by using an LLM
+
+00:07:13.860 --> 00:07:14.060
+to do your work. It might not actually even
+
+00:07:15.060 --> 00:07:15.400
+save you that much time,
+
+00:07:18.480 --> 00:07:18.640
+at least initially, because you have to kind
+
+00:07:20.460 --> 00:07:20.660
+of practice again super specific about what
+
+00:07:22.740 --> 00:07:22.900
+you want to get out of the output it's going
+
+00:07:26.940 --> 00:07:26.980
+to give you so like oh I'm you know maybe you
+
+00:07:29.600 --> 00:07:29.820
+know you're on the emacs devel mailing list
+
+00:07:31.780 --> 00:07:31.980
+and you're like okay write this email about
+
+00:07:34.000 --> 00:07:34.140
+this about this And here's what I want to
+
+00:07:35.370 --> 00:07:35.460
+say. And here's the kind of tone I want to
+
+00:07:36.020 --> 00:07:36.420
+use. And here's the like,
+
+00:07:37.660 --> 00:07:38.160
+oh, you might want to specify like everything
+
+00:07:39.620 --> 00:07:40.120
+that you kind of want to get into this.
+
+00:07:42.180 --> 00:07:42.680
+Usually it's easier just to write the email.
+
+00:07:45.600 --> 00:07:46.100
+But I think that practice of kind of
+
+00:07:48.080 --> 00:07:48.420
+understanding what you want is not something
+
+00:07:52.680 --> 00:07:53.180
+you normally do. And I think it's going to be
+
+00:07:56.040 --> 00:07:56.480
+an interesting exercise that will help people
+
+00:07:57.280 --> 00:07:57.540
+understand. That said,
+
+00:07:58.860 --> 00:07:59.020
+I haven't done that much of that,
+
+00:07:59.900 --> 00:08:00.040
+so I can't say, oh, yeah,
+
+00:08:01.080 --> 00:08:01.440
+I've done this and it works for me.
+
+00:08:03.000 --> 00:08:03.120
+Maybe. I think it's an interesting thing to
+
+00:08:03.120 --> 00:08:03.620
+explore.
+
+00:08:07.720 --> 00:08:08.220
+[Speaker 1]: Sure. Thanks. Let's see.
+
+00:08:10.840 --> 00:08:11.140
+Let's see. Can you share your font settings
+
+00:08:13.440 --> 00:08:13.740
+in your Emacs config? Those are some nice
+
+00:08:14.200 --> 00:08:14.700
+fonts for reading.
+
+00:08:18.900 --> 00:08:19.200
+[Speaker 0]: Yeah, I think I was using Menlo at the time.
+
+00:08:20.840 --> 00:08:20.980
+Unfortunately, I don't save those kinds of
+
+00:08:21.940 --> 00:08:22.200
+things, like a history of this.
+
+00:08:24.000 --> 00:08:24.500
+I've kind of switched now to,
+
+00:08:27.340 --> 00:08:27.540
+what was that? I think I wrote it down in
+
+00:08:29.440 --> 00:08:29.940
+the, I switched to MunaSpace,
+
+00:08:31.920 --> 00:08:32.420
+which just came out like a week or 2 ago,
+
+00:08:33.340 --> 00:08:33.840
+and is also pretty cool.
+
+00:08:35.440 --> 00:08:35.940
+So I think it's Menlo.
+
+00:08:37.380 --> 00:08:37.760
+The internal question,
+
+00:08:38.400 --> 00:08:38.900
+what font are you using?
+
+00:08:42.020 --> 00:08:42.340
+[Speaker 1]: Indeed, yeah. It looks like someone guessed
+
+00:08:43.780 --> 00:08:44.280
+as well that it might be Menlo.
+
+00:08:47.680 --> 00:08:48.040
+OK, Cool. Yeah, next question.
+
+00:08:48.900 --> 00:08:49.400
+In terms of standardization,
+
+00:08:53.260 --> 00:08:53.520
+do you see a need for the medium to large
+
+00:08:55.840 --> 00:08:56.160
+scale effort needed? And then they also
+
+00:08:56.960 --> 00:08:57.460
+elaborate about it.
+
+00:09:03.600 --> 00:09:04.100
+[Speaker 0]: Yeah, I mean, I do think,
+
+00:09:06.040 --> 00:09:06.300
+I don't know if it's large scale,
+
+00:09:08.000 --> 00:09:08.500
+but at least it's probably medium scale.
+
+00:09:10.320 --> 00:09:10.520
+There's a lot of things that are missing that
+
+00:09:12.260 --> 00:09:12.400
+we don't have right now in emacs when you're
+
+00:09:13.660 --> 00:09:14.160
+dealing with LLMs. 1 is,
+
+00:09:18.240 --> 00:09:18.420
+a prompting system. And by that,
+
+00:09:21.820 --> 00:09:22.020
+I mean, you know, prompts are just like big
+
+00:09:24.520 --> 00:09:24.720
+blocks of text, but there's also senses that
+
+00:09:28.260 --> 00:09:28.420
+like prompts need to be composable and you
+
+00:09:30.480 --> 00:09:30.660
+need to be able to iterate on parts of the
+
+00:09:36.600 --> 00:09:37.100
+prompt. And so it's also customizable.
+
+00:09:38.940 --> 00:09:39.060
+Users might want to customize it.
+
+00:09:41.260 --> 00:09:41.360
+On the other hand, it's not super easy to
+
+00:09:43.820 --> 00:09:44.320
+write the prompt. So you want really good
+
+00:09:47.900 --> 00:09:48.040
+defaults. So the whole prompt system is kind
+
+00:09:51.360 --> 00:09:51.460
+of complicated. That needs to be kind of
+
+00:09:52.580 --> 00:09:52.760
+standardized, because I don't think there's
+
+00:09:54.380 --> 00:09:54.720
+any tools for doing something like that right
+
+00:09:58.380 --> 00:09:58.880
+now. I personally use my system,
+
+00:10:00.220 --> 00:10:00.600
+my note system for EKG.
+
+00:10:01.720 --> 00:10:01.920
+I don't think that's appropriate for
+
+00:10:02.800 --> 00:10:03.120
+everyone, but it does,
+
+00:10:04.480 --> 00:10:04.640
+I did write it to have some of these
+
+00:10:06.540 --> 00:10:06.760
+capabilities of composability that I think
+
+00:10:08.360 --> 00:10:08.860
+are useful for a prompt generation.
+
+00:10:11.940 --> 00:10:12.280
+It'd be nice to have a system like that,
+
+00:10:15.660 --> 00:10:16.160
+but for general use. I don't,
+
+00:10:17.840 --> 00:10:18.060
+this is something I've been meaning to think
+
+00:10:18.840 --> 00:10:19.000
+about, like how to do it,
+
+00:10:19.760 --> 00:10:19.920
+but like this, you know,
+
+00:10:21.260 --> 00:10:21.660
+if someone's interested in getting this area,
+
+00:10:26.120 --> 00:10:26.420
+like, I would love to chat about that or,
+
+00:10:27.600 --> 00:10:27.980
+you know, I think there's a lot of
+
+00:10:31.020 --> 00:10:31.260
+interesting ideas that we could have to have
+
+00:10:34.080 --> 00:10:34.540
+a system that allows us to make progress
+
+00:10:38.860 --> 00:10:39.360
+here. And also, I think there's more to
+
+00:10:40.520 --> 00:10:40.900
+standardization to be done.
+
+00:10:42.820 --> 00:10:43.140
+1 thing I'd also like to see that we haven't
+
+00:10:47.020 --> 00:10:47.220
+done yet is a system for standardizing on
+
+00:10:48.060 --> 00:10:48.560
+getting structured output.
+
+00:10:49.640 --> 00:10:50.140
+This is gonna be super useful.
+
+00:10:52.280 --> 00:10:52.780
+I have this for open AIs API,
+
+00:10:53.560 --> 00:10:54.060
+cause they support it.
+
+00:10:55.940 --> 00:10:56.040
+And it's really nice, cause then you can
+
+00:10:57.440 --> 00:10:57.660
+write elist functions that like,
+
+00:10:59.380 --> 00:10:59.880
+okay, I'm going to call the LLM.
+
+00:11:00.760 --> 00:11:01.000
+I'm gonna get structured output.
+
+00:11:02.040 --> 00:11:02.160
+I know what that structure is going to be.
+
+00:11:03.480 --> 00:11:03.680
+It's not going to be just a big block of
+
+00:11:05.660 --> 00:11:06.040
+text. I could turn it into a,
+
+00:11:07.000 --> 00:11:07.480
+you know, a P list or something.
+
+00:11:09.280 --> 00:11:09.480
+And then I could get the values out of that P
+
+00:11:11.880 --> 00:11:12.260
+list. And I know that way I could do,
+
+00:11:14.220 --> 00:11:14.720
+I could write actual apps that are,
+
+00:11:18.300 --> 00:11:18.720
+you know, very, very sort of,
+
+00:11:20.200 --> 00:11:20.680
+you know, useful for very specific purposes
+
+00:11:21.900 --> 00:11:22.400
+and not just for text generation.
+
+00:11:24.000 --> 00:11:24.320
+And I think that's 1 of the most important
+
+00:11:27.100 --> 00:11:27.540
+things we want to do. And I have some ideas
+
+00:11:28.840 --> 00:11:29.160
+about how to do it. I just haven't pursued
+
+00:11:31.640 --> 00:11:32.040
+those yet. But if other people have ideas,
+
+00:11:34.340 --> 00:11:34.540
+I think this would be really interesting to
+
+00:11:35.520 --> 00:11:36.020
+add to the LLM package.
+
+00:11:37.260 --> 00:11:37.760
+So contact me there.
+
+00:11:42.100 --> 00:11:42.600
+[Speaker 1]: Awesome. Quick note before we continue.
+
+00:11:44.440 --> 00:11:44.540
+So I'm not sure how long we're going to be on
+
+00:11:46.040 --> 00:11:46.280
+stream for, because this is the last talk
+
+00:11:48.640 --> 00:11:49.120
+before the break. If we are on the stream
+
+00:11:49.840 --> 00:11:50.200
+long-term, then great.
+
+00:11:51.820 --> 00:11:52.300
+But if not, folks are welcome to continue
+
+00:11:53.320 --> 00:11:53.680
+writing questions on the pad.
+
+00:11:55.140 --> 00:11:55.280
+And hopefully, Andrew will get to them at
+
+00:11:58.020 --> 00:11:58.280
+some point. Or if Andrew maybe has some extra
+
+00:11:59.960 --> 00:12:00.140
+time available and wants to stay on
+
+00:12:01.640 --> 00:12:01.920
+BigBlueButton here, then folks are also
+
+00:12:03.940 --> 00:12:04.340
+welcome to join here and chat with Andrew
+
+00:12:08.940 --> 00:12:09.240
+directly as well. Okay,
+
+00:12:10.740 --> 00:12:10.900
+awesome. So yeah, the next question is,
+
+00:12:12.040 --> 00:12:12.400
+what are your thoughts on the carbon
+
+00:12:14.060 --> 00:12:14.560
+footprint of LLM usage?
+
+00:12:17.200 --> 00:12:17.700
+[Speaker 0]: Yeah, it's a really interesting question.
+
+00:12:23.180 --> 00:12:23.360
+I don't have any particular knowledge or
+
+00:12:25.440 --> 00:12:25.580
+opinions about that. It's something I think
+
+00:12:26.980 --> 00:12:27.180
+we should all be educating ourselves more
+
+00:12:32.240 --> 00:12:32.380
+about. It is really, I mean,
+
+00:12:33.040 --> 00:12:33.220
+there's 2 parts of this,
+
+00:12:35.380 --> 00:12:35.500
+right? They take a, there's a huge amount of
+
+00:12:37.160 --> 00:12:37.360
+carbon footprint involved in training these
+
+00:12:38.720 --> 00:12:39.220
+things. Then running them is relatively
+
+00:12:42.540 --> 00:12:42.880
+lightweight. So the question is not
+
+00:12:44.440 --> 00:12:44.920
+necessarily like once it's trained,
+
+00:12:46.480 --> 00:12:46.640
+like I don't feel like it's a big deal to
+
+00:12:48.280 --> 00:12:48.560
+keep using it, but like training these things
+
+00:12:50.680 --> 00:12:51.180
+is kind of like the big carbon cost of it.
+
+00:12:53.680 --> 00:12:54.160
+But like right now, the way everything's
+
+00:12:56.040 --> 00:12:56.260
+going, like every, you know,
+
+00:12:59.060 --> 00:12:59.560
+all, you know, the top 5 or 6 tech companies
+
+00:13:00.900 --> 00:13:01.400
+are all training their LLMs,
+
+00:13:03.580 --> 00:13:03.740
+and this is all costing a giant amount of
+
+00:13:06.820 --> 00:13:07.060
+carbon probably. On the other hand these same
+
+00:13:08.560 --> 00:13:08.680
+companies are pretty good about using the
+
+00:13:10.260 --> 00:13:10.440
+least amount of carbon necessary you know
+
+00:13:12.340 --> 00:13:12.740
+they have their own their tricks for doing
+
+00:13:13.260 --> 00:13:13.760
+things very efficiently.
+
+00:13:22.100 --> 00:13:22.360
+[Speaker 1]: Cool next question, LLMs are slow and
+
+00:13:24.000 --> 00:13:24.340
+responding. Do you think Emacs should provide
+
+00:13:26.680 --> 00:13:27.180
+more async primitives to keep it responsive?
+
+00:13:29.380 --> 00:13:29.880
+Like the URL retrieve is quite bad at
+
+00:13:31.720 --> 00:13:31.760
+building API clients with it.
+
+00:13:31.920 --> 00:13:32.420
+Building API clients with it?
+
+00:13:36.400 --> 00:13:36.900
+[Speaker 0]: Yeah. Well, OK, so first of all,
+
+00:13:40.240 --> 00:13:40.740
+people should be using the LLM client.
+
+00:13:48.740 --> 00:13:48.900
+And So right now, 1 thing I should have
+
+00:13:50.220 --> 00:13:50.440
+mentioned at the top is that there are new
+
+00:13:52.500 --> 00:13:52.640
+packages that I recorded this talk that you
+
+00:13:54.480 --> 00:13:54.920
+just saw several months ago.
+
+00:13:57.780 --> 00:13:58.180
+And so like Elama, there's this package Elama
+
+00:13:59.700 --> 00:14:00.080
+that came out that is using the LM package.
+
+00:14:02.440 --> 00:14:02.680
+And so for example, it doesn't need to worry
+
+00:14:05.140 --> 00:14:05.580
+about this sort of thing because it just uses
+
+00:14:07.560 --> 00:14:07.920
+LLM and package and the LLM package worries
+
+00:14:11.680 --> 00:14:11.820
+about this. And while I'm on the subject of
+
+00:14:12.540 --> 00:14:12.720
+things I forgot to mention,
+
+00:14:15.140 --> 00:14:15.340
+I also should just mention very quickly that
+
+00:14:17.020 --> 00:14:17.520
+there is now an open source model,
+
+00:14:21.680 --> 00:14:21.960
+Mistral. And so that's kind of this new thing
+
+00:14:23.860 --> 00:14:24.240
+on the scene that happened after I recorded
+
+00:14:26.240 --> 00:14:26.420
+my talk. And I think it's super important to
+
+00:14:28.660 --> 00:14:28.820
+the community and important that we have the
+
+00:14:30.620 --> 00:14:31.120
+opportunity to use that if we want to.
+
+00:14:33.160 --> 00:14:33.660
+Okay, but to answer the actual question,
+
+00:14:37.660 --> 00:14:38.100
+there has been some talk about the problems
+
+00:14:40.680 --> 00:14:40.840
+with URL retrieve in the URL package in
+
+00:14:42.200 --> 00:14:42.700
+general in EmacsDevEl.
+
+00:14:46.760 --> 00:14:47.080
+It's not great. I would like to have better
+
+00:14:50.900 --> 00:14:51.040
+primitives. And I've asked the author of
+
+00:14:54.060 --> 00:14:54.560
+Please PLZ to kind of provide some necessary
+
+00:14:56.120 --> 00:14:56.620
+callbacks. I think that's a great library.
+
+00:15:00.280 --> 00:15:00.360
+And I'd like to see that kind of like,
+
+00:15:01.320 --> 00:15:01.680
+It's nice that we have options,
+
+00:15:03.340 --> 00:15:03.520
+and that is an option that uses curl on the
+
+00:15:05.140 --> 00:15:05.640
+back end, and that has some benefits.
+
+00:15:09.060 --> 00:15:09.280
+So there's this big debate about whether we
+
+00:15:10.600 --> 00:15:11.100
+should have primitives or just use curl.
+
+00:15:13.340 --> 00:15:13.420
+I'm not exactly sure what the right call is,
+
+00:15:15.320 --> 00:15:15.820
+but there has been discussions about this.
+
+00:15:19.540 --> 00:15:20.040
+[Speaker 1]: Excellent. And someone commented that GPTEL
+
+00:15:21.820 --> 00:15:22.200
+is async and apparently very good at tracking
+
+00:15:22.300 --> 00:15:22.800
+the point.
+
+00:15:26.680 --> 00:15:27.180
+[Speaker 0]: Yes, yes, GPTEL has similar functionalities
+
+00:15:29.800 --> 00:15:30.040
+to LLM, although I believe it's going to move
+
+00:15:33.040 --> 00:15:33.540
+to LLM itself sometime soon.
+
+00:15:39.480 --> 00:15:39.860
+[Speaker 1]: Next question, speaking of which,
+
+00:15:42.440 --> 00:15:42.560
+anyone trained or fine-tuned or prompted a
+
+00:15:44.680 --> 00:15:44.760
+model with their org data yet and applied it
+
+00:15:46.560 --> 00:15:47.040
+to interesting use cases like planning,
+
+00:15:47.920 --> 00:15:48.340
+scheduling, et cetera,
+
+00:15:49.320 --> 00:15:49.820
+and maybe care to comment?
+
+00:15:54.620 --> 00:15:55.120
+[Speaker 0]: I don't know anyone who is doing that.
+
+00:15:55.860 --> 00:15:56.360
+I think it is interesting.
+
+00:15:57.800 --> 00:15:58.300
+Like this is what I kind of mentioned at the
+
+00:16:01.060 --> 00:16:01.300
+very end of the talk. There is a lot of stuff
+
+00:16:02.440 --> 00:16:02.540
+there like you could you know if you
+
+00:16:04.760 --> 00:16:04.920
+especially mean an LLM can kind of work as
+
+00:16:07.940 --> 00:16:08.160
+sort of like a secretary kind of person that
+
+00:16:12.180 --> 00:16:12.440
+could help you prioritize Still it's a
+
+00:16:14.760 --> 00:16:14.920
+slightly unclear how what the best way to use
+
+00:16:16.480 --> 00:16:16.720
+it is So I think there's more of a question
+
+00:16:18.340 --> 00:16:18.480
+for the community about like what people have
+
+00:16:21.140 --> 00:16:21.320
+been trying. I see someone has mentioned that
+
+00:16:23.400 --> 00:16:23.900
+they are using it for weekly review.
+
+00:16:26.940 --> 00:16:27.180
+And it's kind of nice to like,
+
+00:16:29.060 --> 00:16:29.380
+maybe you could read your agenda or maybe
+
+00:16:30.480 --> 00:16:30.780
+this for like weekly review.
+
+00:16:32.040 --> 00:16:32.240
+It could like read all the stuff you've done
+
+00:16:33.340 --> 00:16:33.480
+and ask you questions about it.
+
+00:16:35.020 --> 00:16:35.280
+And like, what should happen next?
+
+00:16:36.520 --> 00:16:36.780
+Or like, is this going to cause a problem?
+
+00:16:39.060 --> 00:16:39.280
+Like, I can, I can understand if that could
+
+00:16:40.860 --> 00:16:41.180
+happen? That's like, that's kind of nice.
+
+00:16:43.660 --> 00:16:44.160
+And this kind of people have had good success
+
+00:16:48.540 --> 00:16:48.760
+out of using these LLMs to bounce ideas off
+
+00:16:49.920 --> 00:16:50.420
+of are, you know, for,
+
+00:16:52.680 --> 00:16:52.800
+you know, I've seen people say that like they
+
+00:16:55.360 --> 00:16:55.600
+want, they use it for reading and they kind
+
+00:16:58.520 --> 00:16:58.740
+of dialogue with the LM to kind of like do
+
+00:16:59.500 --> 00:17:00.000
+sort of active reading.
+
+00:17:02.500 --> 00:17:02.860
+So you can imagine doing something similar
+
+00:17:04.400 --> 00:17:04.740
+with your tasks where it's sort of you're
+
+00:17:06.560 --> 00:17:06.760
+engaged in dialogue about like planning your
+
+00:17:08.880 --> 00:17:09.000
+tax with some with a alum that could kind of
+
+00:17:10.800 --> 00:17:11.180
+understand what those are and ask you some
+
+00:17:13.780 --> 00:17:13.940
+questions I think it. You know,
+
+00:17:16.839 --> 00:17:17.040
+if it'd be nice. So, the problem is like
+
+00:17:18.480 --> 00:17:18.980
+there's no great way to share all this stuff.
+
+00:17:20.720 --> 00:17:21.220
+I guess if you have something like this,
+
+00:17:23.300 --> 00:17:23.720
+put it on Reddit. If you don't have Reddit,
+
+00:17:24.599 --> 00:17:24.880
+I don't know what to do.
+
+00:17:26.000 --> 00:17:26.500
+I would say put it somewhere.
+
+00:17:28.840 --> 00:17:29.020
+At the very least, I could maybe open up like
+
+00:17:31.320 --> 00:17:31.820
+an LLM discussion session on the LLM package
+
+00:17:34.000 --> 00:17:34.500
+GitHub, But not everyone likes to use GitHub.
+
+00:17:36.100 --> 00:17:36.180
+I don't know. It'd be nice if there's a
+
+00:17:38.940 --> 00:17:39.060
+mailing list or IRC chat for this sort of
+
+00:17:40.840 --> 00:17:41.340
+thing. But there isn't at the moment.
+
+00:17:46.560 --> 00:17:46.720
+[Speaker 1]: All right. Let's see. I think that's the end
+
+00:17:48.080 --> 00:17:48.580
+of the questions on the pad so far.
+
+00:17:51.020 --> 00:17:51.180
+There was also some discussion or some
+
+00:17:52.260 --> 00:17:52.760
+chatter, I believe, on IRC.
+
+00:17:54.560 --> 00:17:54.820
+I'm not sure. Andrew, are you on IRC right
+
+00:18:00.060 --> 00:18:00.260
+[Speaker 0]: I am, but I don't think I'm on any place that
+
+00:18:01.400 --> 00:18:01.640
+has the chatter. So if there's chatter,
+
+00:18:02.440 --> 00:18:02.940
+then I'm not seeing it.
+
+00:18:04.600 --> 00:18:05.100
+[Speaker 1]: now? Okay. Yeah, it was in the emacsconf-dev
+
+00:18:06.760 --> 00:18:07.260
+channel.
+
+00:18:09.600 --> 00:18:10.100
+[Speaker 0]: Okay, let me see if I can.
+
+00:18:25.600 --> 00:18:25.840
+Oh, yes. I mean, I could see the channel,
+
+00:18:27.520 --> 00:18:27.840
+but I missed whatever came before.
+
+00:18:29.340 --> 00:18:29.480
+So if there's anything you want to kind of
+
+00:18:30.840 --> 00:18:31.340
+call out, I can try to answer it here.
+
+00:18:35.320 --> 00:18:35.640
+[Speaker 1]: OK, cool. I believe at least 2 other folks
+
+00:18:37.500 --> 00:18:38.000
+who are participating in the discussion there
+
+00:18:40.120 --> 00:18:40.620
+who have also joined here on BigBlueButton,
+
+00:18:42.440 --> 00:18:42.940
+Codin Quark and AeonTurn92.
+
+00:18:47.000 --> 00:18:47.480
+So you folks, if Andrew is still available
+
+00:18:50.460 --> 00:18:50.640
+and has time, you're welcome to chat here and
+
+00:18:53.000 --> 00:18:53.320
+ask questions or discuss here as well.
+
+00:18:55.580 --> 00:18:55.840
+[Speaker 0]: 1 Thank you. Thank you for your help,
+
+00:18:57.740 --> 00:18:58.080
+and thank you for reading all the questions.
+
+00:18:59.700 --> 00:18:59.820
+[Speaker 1]: AUDIENCE 2 Cheers, and thanks to you for a
+
+00:19:00.540 --> 00:19:01.040
+great talk and the discussion.
+
+00:19:01.880 --> 00:19:02.380
+[Speaker 0]: AUDIENCE AUDIENCE 1 Thank you.
+
+00:19:03.140 --> 00:19:03.640
+[Speaker 1]: AUDIENCE 2 Cheers.
+
+00:19:07.900 --> 00:19:08.040
+[Speaker 0]: So I'll just, I will wait here and see if
+
+00:19:08.320 --> 00:19:08.760
+there's any questions.
+
+00:19:10.760 --> 00:19:11.260
+If not, I will log off after a few minutes.
+
+00:19:15.900 --> 00:19:16.080
+[Speaker 2]: Well, I guess since we were mentioned that
+
+00:19:18.480 --> 00:19:18.980
+there was a small chat about local alarms.
+
+00:19:22.640 --> 00:19:23.000
+Because chat dpt is nice,
+
+00:19:25.600 --> 00:19:26.100
+no, but privacy concerns,
+
+00:19:27.380 --> 00:19:27.880
+and it's not free and stuff.
+
+00:19:31.000 --> 00:19:31.500
+Which, so The question is,
+
+00:19:36.960 --> 00:19:37.460
+what is the promise for local models?
+
+00:19:39.660 --> 00:19:40.160
+[Speaker 0]: Yeah, so local is definitely...
+
+00:19:41.380 --> 00:19:41.880
+[Speaker 2]: Or at least open source.
+
+00:19:45.680 --> 00:19:46.120
+[Speaker 0]: Yeah, so there is a local open source model,
+
+00:19:47.960 --> 00:19:48.460
+Misral, which you could run.
+
+00:19:51.340 --> 00:19:51.840
+The LLM package allows you to use,
+
+00:19:56.120 --> 00:19:56.260
+I think there's 3 kind of local things you
+
+00:19:58.100 --> 00:19:58.440
+could use. Like many of these things,
+
+00:20:00.220 --> 00:20:00.480
+there's like many kind of ways to do the same
+
+00:20:03.960 --> 00:20:04.460
+sort of thing. So LLM is supporting OLAMMA
+
+00:20:10.240 --> 00:20:10.520
+and LLAMMA-CPP. And let's see,
+
+00:20:12.240 --> 00:20:12.740
+1 other. Which 1 is it?
+
+00:20:18.420 --> 00:20:18.700
+And maybe that's it. Maybe the,
+
+00:20:21.820 --> 00:20:21.940
+oh, GPT for all. So each 1 of these kind of
+
+00:20:23.100 --> 00:20:23.600
+has slightly different functionality.
+
+00:20:26.820 --> 00:20:27.180
+For example, I think GPT for all doesn't
+
+00:20:31.780 --> 00:20:32.280
+support embeddings. And I hear that Olama's
+
+00:20:33.740 --> 00:20:34.240
+embeddings are kind of currently broken.
+
+00:20:35.920 --> 00:20:36.420
+But basically they should support everything.
+
+00:20:39.100 --> 00:20:39.600
+And the open source models are,
+
+00:20:43.180 --> 00:20:43.380
+so the local models are reasonably good.
+
+00:20:44.760 --> 00:20:44.900
+Like I don't think you'd use them and be
+
+00:20:46.200 --> 00:20:46.639
+like, what is this horrible nonsense?
+
+00:20:50.200 --> 00:20:50.380
+Like it's, it gives you relatively good
+
+00:20:51.820 --> 00:20:52.120
+results. Like it's not gonna be at the level
+
+00:20:56.060 --> 00:20:56.320
+of like GPT 3.5 or 4, but it's not far away
+
+00:20:57.720 --> 00:20:58.220
+from GPT 3.5, I think.
+
+00:21:02.380 --> 00:21:02.880
+[Speaker 2]: I'm just saying that Olam has like a presets
+
+00:21:05.940 --> 00:21:06.300
+for connecting the actual working servers for
+
+00:21:06.300 --> 00:21:06.800
+Olama?
+
+00:21:08.560 --> 00:21:08.760
+[Speaker 0]: So, I'll try. Yeah, so you could,
+
+00:21:09.860 --> 00:21:10.040
+what you could do is you could like for
+
+00:21:11.940 --> 00:21:12.100
+example you could download Olama which is
+
+00:21:15.780 --> 00:21:15.940
+just a way of setting up local models and
+
+00:21:17.320 --> 00:21:17.780
+running local models on your machine.
+
+00:21:18.580 --> 00:21:18.820
+So typically what it does,
+
+00:21:19.720 --> 00:21:20.020
+you like download a program,
+
+00:21:23.720 --> 00:21:23.800
+let's say Olama. Then Olama will have the
+
+00:21:24.940 --> 00:21:25.440
+ability to download models.
+
+00:21:27.240 --> 00:21:27.360
+And so you could choose from just a host of
+
+00:21:29.280 --> 00:21:29.440
+different models. Each 1 of these things has
+
+00:21:30.200 --> 00:21:30.440
+a bunch of different models.
+
+00:21:31.920 --> 00:21:32.080
+So it downloads all these things to your
+
+00:21:36.600 --> 00:21:37.020
+machine. But I would say that the key problem
+
+00:21:40.200 --> 00:21:40.580
+here is that it requires a fairly beefy
+
+00:21:40.580 --> 00:21:41.080
+machine.
+
+00:21:42.600 --> 00:21:43.100
+[Speaker 2]: So. Yeah, yeah, of course.
+
+00:21:45.060 --> 00:21:45.300
+Why I was asking, because you briefly
+
+00:21:46.440 --> 00:21:46.880
+mentioned that there are some Israeli
+
+00:21:52.300 --> 00:21:52.440
+servers. I understand that they run it like a
+
+00:21:53.680 --> 00:21:54.000
+government or stuff like that?
+
+00:21:55.440 --> 00:21:55.940
+No, no, sorry. People want everyone?
+
+00:21:59.340 --> 00:21:59.620
+[Speaker 0]: I don't, I mean, maybe you've said something
+
+00:22:00.620 --> 00:22:01.020
+that sounded like Israeli servers.
+
+00:22:01.620 --> 00:22:02.120
+[Speaker 2]: Okay, okay.
+
+00:22:04.920 --> 00:22:05.080
+[Speaker 0]: I think- There's no government LLMs as far as
+
+00:22:06.820 --> 00:22:07.280
+I know. Although, I'm sure the governments
+
+00:22:08.200 --> 00:22:08.700
+are working on their own LLMs,
+
+00:22:10.980 --> 00:22:11.480
+et cetera. But yeah, basically your choices
+
+00:22:15.060 --> 00:22:15.220
+are spend a, I mean, if you use open AI or
+
+00:22:16.080 --> 00:22:16.580
+something or anything else,
+
+00:22:17.960 --> 00:22:18.460
+you're really not spending any money.
+
+00:22:20.560 --> 00:22:20.840
+Like I've never been able to spend any money
+
+00:22:23.680 --> 00:22:24.020
+on OpenAI. Like unless you're doing something
+
+00:22:25.840 --> 00:22:26.280
+very intensive and really are using it to,
+
+00:22:28.000 --> 00:22:28.180
+you know, if you're using it for your
+
+00:22:29.620 --> 00:22:29.780
+personal use, it's just hard to spend any
+
+00:22:31.720 --> 00:22:31.960
+money. But on the other hand,
+
+00:22:32.780 --> 00:22:32.860
+it's not free. So you can,
+
+00:22:33.040 --> 00:22:33.540
+you know,
+
+00:22:36.300 --> 00:22:36.680
+[Speaker 2]: Actually, it's rather cheap.
+
+00:22:37.680 --> 00:22:38.180
+There's no question about that.
+
+00:22:40.580 --> 00:22:40.920
+The problem is that it has a bad track record
+
+00:22:41.580 --> 00:22:42.080
+on privacy.
+
+00:22:45.540 --> 00:22:46.040
+[Speaker 0]: Yes, that's, I think that is a key problem.
+
+00:22:48.120 --> 00:22:48.280
+This is probably the number 1 reason why you
+
+00:22:51.840 --> 00:22:52.340
+might want to use a local AI,
+
+00:22:54.720 --> 00:22:55.220
+a local LLM. Another 1 is like,
+
+00:22:57.400 --> 00:22:57.900
+you may not agree with the decisions.
+
+00:23:00.360 --> 00:23:00.820
+You know, there's a lot of trust and safety
+
+00:23:05.140 --> 00:23:05.440
+stuff that these companies have to do.
+
+00:23:09.020 --> 00:23:09.240
+Like they don't want like the LMs to kind of
+
+00:23:11.400 --> 00:23:11.640
+like give you, like tell you how you can make
+
+00:23:13.180 --> 00:23:13.580
+meth or how you can make a bomb,
+
+00:23:14.960 --> 00:23:15.460
+which they would do. They would totally do
+
+00:23:19.580 --> 00:23:20.080
+it. So, But each time you kind of restrict
+
+00:23:22.540 --> 00:23:22.680
+what is happening with what you can get out
+
+00:23:23.860 --> 00:23:24.360
+of the LM, it gets a little worse.
+
+00:23:24.960 --> 00:23:25.440
+So some people
+
+00:23:27.040 --> 00:23:27.540
+[Speaker 2]: want to have local. That's expected.
+
+00:23:31.080 --> 00:23:31.400
+I guess even open source language modules
+
+00:23:33.540 --> 00:23:34.040
+will soon have HR spaces because it's simply
+
+00:23:34.720 --> 00:23:35.220
+a legal issue.
+
+00:23:40.760 --> 00:23:41.140
+[Speaker 0]: I think that's true. I also think that there
+
+00:23:42.880 --> 00:23:43.040
+probably will be, although I don't know of
+
+00:23:45.060 --> 00:23:45.300
+any offhand, that will are completely
+
+00:23:46.960 --> 00:23:47.200
+uncensored. I know people are interested and
+
+00:23:48.240 --> 00:23:48.480
+are running uncensored models.
+
+00:23:49.440 --> 00:23:49.940
+I don't know how to do it.
+
+00:23:52.280 --> 00:23:52.780
+I think it's a little bit dubious,
+
+00:23:54.960 --> 00:23:55.040
+but some people do want to do it.
+
+00:23:56.280 --> 00:23:56.780
+There's another reason for using local
+
+00:24:02.280 --> 00:24:02.780
+servers. Do you have any recommendation for
+
+00:24:05.500 --> 00:24:05.720
+models to run locally and also comments on
+
+00:24:06.780 --> 00:24:07.280
+whether a GPU is required?
+
+00:24:14.040 --> 00:24:14.160
+Usually a GPU, well, you can run it without a
+
+00:24:16.960 --> 00:24:17.460
+GPU, but it does run much better.
+
+00:24:19.480 --> 00:24:19.980
+Like for example, I think when I used,
+
+00:24:22.560 --> 00:24:23.060
+Lama is sort of like a standard.
+
+00:24:27.160 --> 00:24:27.320
+This was the model for that Facebook came out
+
+00:24:31.380 --> 00:24:31.880
+with for local use. And It was,
+
+00:24:37.260 --> 00:24:37.760
+yeah, it's good. It's,
+
+00:24:40.400 --> 00:24:40.900
+but it's now it's I think,
+
+00:24:44.620 --> 00:24:44.920
+Mistral is kind of like has a better
+
+00:24:46.480 --> 00:24:46.800
+performance, But there's also different model
+
+00:24:51.000 --> 00:24:51.500
+sizes. There's 7B, like the Lama 7B is OK.
+
+00:24:52.940 --> 00:24:53.440
+The Mistral 7B, 7 billion,
+
+00:24:54.800 --> 00:24:55.300
+are like, basically it'll take like,
+
+00:24:58.380 --> 00:24:58.880
+you can run it with like 16 gigs of RAM,
+
+00:25:02.720 --> 00:25:03.040
+is pretty good. It's probably about as equal
+
+00:25:06.900 --> 00:25:07.000
+to the LLAMA13B. Those are the number of
+
+00:25:08.360 --> 00:25:08.860
+parameters, if I remember correctly.
+
+00:25:10.680 --> 00:25:11.180
+And then there's a 7B,
+
+00:25:12.340 --> 00:25:12.840
+which I've never been able to run.
+
+00:25:16.120 --> 00:25:16.620
+And even if the 7B, if you run it without a
+
+00:25:19.640 --> 00:25:20.140
+GPU, it takes quite a while to answer.
+
+00:25:22.080 --> 00:25:22.580
+I think I've had experiences where it took
+
+00:25:23.940 --> 00:25:24.440
+literally like several,
+
+00:25:26.480 --> 00:25:26.780
+like 5 minutes before it even started
+
+00:25:28.880 --> 00:25:29.100
+responding, but you do eventually get
+
+00:25:32.220 --> 00:25:32.580
+something. And it could be that like things
+
+00:25:33.840 --> 00:25:33.960
+have gotten better since the last time I
+
+00:25:35.440 --> 00:25:35.940
+tried this, because things are moving fast.
+
+00:25:38.360 --> 00:25:38.860
+But it is super recommended to have a GPU.
+
+00:25:42.440 --> 00:25:42.620
+This is the problem. It's kind of like,
+
+00:25:43.840 --> 00:25:44.180
+yes, free software is great.
+
+00:25:46.880 --> 00:25:47.120
+But if free software is requiring that you
+
+00:25:50.460 --> 00:25:50.760
+have these kind of beefy servers and have all
+
+00:25:52.000 --> 00:25:52.500
+this hardware, that's not great.
+
+00:25:53.600 --> 00:25:54.100
+I think there's a case to be made.
+
+00:25:55.680 --> 00:25:56.180
+[Speaker 1]: a hardware
+
+00:25:59.040 --> 00:25:59.540
+[Speaker 0]: with slots instead of a laptop.
+
+00:26:01.560 --> 00:26:02.060
+Yeah, yeah, that's right.
+
+00:26:03.660 --> 00:26:03.960
+[Speaker 2]: Ideally, you can have Ideally,
+
+00:26:07.400 --> 00:26:07.660
+it would be nice if FSL for all things could
+
+00:26:12.040 --> 00:26:12.540
+run something for open source model.
+
+00:26:16.320 --> 00:26:16.640
+And not free, but the key point is that it's
+
+00:26:16.640 --> 00:26:17.140
+Libre?
+
+00:26:22.580 --> 00:26:23.080
+[Speaker 0]: Yes, so actually I think Google does do that.
+
+00:26:24.720 --> 00:26:24.800
+I'll have to look it up,
+
+00:26:27.560 --> 00:26:27.820
+but I haven't explored this yet.
+
+00:26:31.220 --> 00:26:31.720
+But Google's server, which LLM does support,
+
+00:26:33.800 --> 00:26:34.300
+supports arbitrary models.
+
+00:26:36.420 --> 00:26:36.600
+So you can run LLMA or things like that.
+
+00:26:38.940 --> 00:26:39.200
+The problem is that even if you're running
+
+00:26:40.320 --> 00:26:40.820
+Mistral, which has no restrictions.
+
+00:26:42.940 --> 00:26:43.140
+So this is the kind of thing that like the
+
+00:26:44.900 --> 00:26:45.060
+Free Software Foundation cares a lot about.
+
+00:26:47.240 --> 00:26:47.740
+Like you want it to be like no restrictions,
+
+00:26:49.740 --> 00:26:49.840
+legal restrictions on you as you run the
+
+00:26:52.080 --> 00:26:52.580
+model. So even if it's running Mistral,
+
+00:26:54.800 --> 00:26:55.300
+just by using the server,
+
+00:26:58.460 --> 00:26:58.660
+the company server, it will impose some
+
+00:26:59.440 --> 00:26:59.900
+restrictions on you probably,
+
+00:27:02.320 --> 00:27:02.480
+right? There's gonna be some license that you
+
+00:27:04.760 --> 00:27:05.260
+have to, or something you have to abide by.
+
+00:27:08.480 --> 00:27:08.600
+So I think, yes, it depends on how much you
+
+00:27:09.280 --> 00:27:09.780
+care about it, I guess.
+
+00:27:19.500 --> 00:27:19.640
+I should find out more about that and make
+
+00:27:21.580 --> 00:27:22.080
+sure that it's a good point that I should,
+
+00:27:23.980 --> 00:27:24.180
+you know, people should be able to run free
+
+00:27:25.920 --> 00:27:26.280
+models over the server.
+
+00:27:28.320 --> 00:27:28.440
+So I should make sure we support that in the
+
+00:27:40.360 --> 00:27:40.860
+LLM package. So, is there any other questions
+
+00:27:48.240 --> 00:27:48.740
+Or is otherwise we can end the session.
+
+00:28:00.800 --> 00:28:01.040
+Yeah, all right. Thank you.
+
+00:28:02.440 --> 00:28:02.940
+Thank you. Thank you everyone who listened.
+
+00:28:04.540 --> 00:28:05.040
+I'm super happy like I,
+
+00:28:06.560 --> 00:28:07.060
+the interest is great.
+
+00:28:08.900 --> 00:28:09.220
+I think there's great stuff to be done here
+
+00:28:10.960 --> 00:28:11.140
+and I'm kind of super excited what we're
+
+00:28:11.940 --> 00:28:12.160
+going to do in the next year,
+
+00:28:13.140 --> 00:28:13.440
+so hopefully, like next year,
+
+00:28:14.600 --> 00:28:14.760
+and the conference we have something even
+
+00:28:16.440 --> 00:28:16.560
+more exciting to say about LLM and how they
+
+00:28:17.320 --> 00:28:17.820
+can be used with Emacs.
+
+00:28:19.620 --> 00:28:20.120
+So thank
+
+00:28:30.060 --> 00:28:30.560
+you
diff --git a/2023/captions/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--main--chapters.vtt b/2023/captions/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--main--chapters.vtt
new file mode 100644
index 00000000..858d0fdb
--- /dev/null
+++ b/2023/captions/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--main--chapters.vtt
@@ -0,0 +1,41 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:25.079
+Intro to the Talk
+
+00:00:25.080 --> 00:01:56.359
+What are LLMs?
+
+00:01:56.360 --> 00:03:32.239
+Power of LLMs (Magit Demo)
+
+00:03:32.240 --> 00:05:20.119
+Drawbacks of LLMs (regex demo)
+
+00:05:20.120 --> 00:07:32.799
+Embeddings
+
+00:07:32.800 --> 00:08:48.479
+Image Generation
+
+00:08:48.480 --> 00:11:05.679
+Fine-tuning
+
+00:11:08.160 --> 00:12:02.519
+Open Source
+
+00:12:02.840 --> 00:14:04.159
+The Future
+
+00:14:08.200 --> 00:18:14.439
+LLMs in Emacs - existing packages
+
+00:18:15.960 --> 00:19:04.079
+Abstracting LLM challenges
+
+00:19:04.080 --> 00:20:01.599
+Emacs is the ideal interface for LLMs
+
+00:20:01.960 --> 00:20:26.160
+Outro
diff --git a/2023/captions/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--main.vtt b/2023/captions/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--main.vtt
new file mode 100644
index 00000000..3ac4b34c
--- /dev/null
+++ b/2023/captions/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--main.vtt
@@ -0,0 +1,1377 @@
+WEBVTT captioned by bala, checked by sachac
+
+NOTE Intro to the Talk
+
+00:00:00.000 --> 00:00:04.159
+Hello, I'm Andrew Hyatt and I'm going to talk to you
+
+00:00:04.160 --> 00:00:06.439
+about large language models and how
+
+00:00:06.440 --> 00:00:11.079
+they relate to Emacs.
+
+00:00:11.080 --> 00:00:14.919
+And I'm going to talk to you about the technology
+
+00:00:14.920 --> 00:00:18.279
+and how we're going to use it in Emacs.
+
+00:00:18.280 --> 00:00:21.159
+There'll be demos and there'll be talks about,
+
+00:00:21.160 --> 00:00:22.879
+I'll finish up by kind of talking about where
+
+00:00:22.880 --> 00:00:25.079
+I think this should go in the future.
+
+NOTE What are LLMs?
+
+00:00:25.080 --> 00:00:28.239
+So to start off with, let's just talk like,
+
+00:00:28.240 --> 00:00:29.759
+I just want to make sure everyone's on the same page.
+
+00:00:29.760 --> 00:00:30.919
+What are large language models?
+
+00:00:30.920 --> 00:00:34.639
+Not everyone may be caught up on this.
+
+00:00:34.640 --> 00:00:38.999
+Large language models are a way... Basically,
+
+00:00:39.000 --> 00:00:42.999
+the current versions of large language models
+
+00:00:43.000 --> 00:00:44.479
+are all based on the similar architecture
+
+00:00:44.480 --> 00:00:45.279
+called the transformer.
+
+00:00:45.280 --> 00:00:48.719
+It's just an efficient way to train and produce output.
+
+00:00:48.720 --> 00:00:51.919
+So these things are basically models
+
+00:00:51.920 --> 00:00:58.079
+that predict the next word or something like that.
+
+00:00:58.080 --> 00:01:02.119
+And they're trained on an enormous corpus of information
+
+00:01:02.120 --> 00:01:04.319
+and they get extremely good
+
+00:01:04.320 --> 00:01:06.079
+at predicting the next word.
+
+00:01:06.080 --> 00:01:09.679
+And from that basic ability, you can train
+
+00:01:09.680 --> 00:01:12.439
+through further tuning from human input,
+
+00:01:12.440 --> 00:01:13.959
+human ratings and things like that.
+
+00:01:13.960 --> 00:01:17.479
+You can train different models based on that
+
+00:01:17.480 --> 00:01:18.759
+that will do question answering.
+
+00:01:18.760 --> 00:01:22.519
+And this is how basically ChatGPT works.
+
+00:01:22.520 --> 00:01:25.599
+There's a base LLM, like GPT.
+
+00:01:25.600 --> 00:01:27.799
+And then you have a chat version of that,
+
+00:01:27.800 --> 00:01:29.959
+which is just trained to just... You give
+
+00:01:29.960 --> 00:01:32.199
+it a prompt, like what do you want it to do?
+
+00:01:32.200 --> 00:01:37.279
+And it gives you an output that does what you told it to do,
+
+00:01:37.280 --> 00:01:39.919
+or at least attempts to do it.
+
+00:01:39.920 --> 00:01:42.079
+Those are the power of large language models is
+
+00:01:42.080 --> 00:01:45.639
+they're extremely, extremely impressive.
+
+00:01:45.640 --> 00:01:47.199
+Certainly this is, in AI,
+
+00:01:47.200 --> 00:01:49.079
+this has been the biggest thing to happen
+
+00:01:49.080 --> 00:01:51.559
+probably in my lifetime,
+
+00:01:51.560 --> 00:01:56.359
+or at least my lifetime as my working lifetime.
+
+NOTE Power of LLMs (Magit Demo)
+
+00:01:56.360 --> 00:02:02.559
+So let me give you a demonstration of
+
+00:02:02.560 --> 00:02:06.679
+what kinds of stuff it could do in Emacs.
+
+00:02:06.680 --> 00:02:09.039
+So here I have a Emacs file.
+
+00:02:09.040 --> 00:02:12.479
+So this is my Emacs init file.
+
+00:02:12.480 --> 00:02:13.599
+I have a change.
+
+00:02:13.600 --> 00:02:16.879
+Let's commit that change.
+
+00:02:16.880 --> 00:02:19.439
+And, you know, I don't like writing commit messages,
+
+00:02:19.440 --> 00:02:23.039
+so I can generate it.
+
+00:02:23.040 --> 00:02:27.479
+And it did an actually just looking.
+
+00:02:27.480 --> 00:02:29.759
+So all it does is it's looking, it's just reading the diff.
+
+00:02:29.760 --> 00:02:32.479
+I'm just feeding it the diff with some instructions.
+
+00:02:32.480 --> 00:02:37.759
+And it is this a incredible commit message?
+
+00:02:37.760 --> 00:02:39.399
+It's not bad, actually.
+
+00:02:39.400 --> 00:02:42.319
+You can see that it actually has really extracted
+
+00:02:42.320 --> 00:02:46.439
+the meaning of what I'm doing and has written
+
+00:02:46.440 --> 00:02:48.879
+a reasonably good commit message.
+
+00:02:48.880 --> 00:02:53.159
+Now I have to edit it because this is not quite correct.
+
+00:02:53.160 --> 00:02:55.159
+But it's kind of impressive how good it is.
+
+00:02:55.160 --> 00:03:00.039
+And my editing, it's kind of easier for me to edit this
+
+00:03:00.040 --> 00:03:01.879
+than just to write a new one.
+
+00:03:01.880 --> 00:03:04.479
+And quite often it's good enough to just submit as is.
+
+00:03:04.480 --> 00:03:08.119
+So this is kind of, you know, you could say
+
+00:03:08.120 --> 00:03:09.359
+this is just commit messages.
+
+00:03:09.360 --> 00:03:10.719
+You could respond to emails.
+
+00:03:10.720 --> 00:03:15.319
+You could, you know, using your own custom instructions
+
+00:03:15.320 --> 00:03:17.839
+about what you want your email to say.
+
+00:03:17.840 --> 00:03:19.039
+It'll write the email for you.
+
+00:03:19.040 --> 00:03:19.839
+It could do like this
+
+00:03:19.840 --> 00:03:22.519
+Emacs is a way to interact with buffers.
+
+00:03:22.520 --> 00:03:24.199
+This could basically just output text.
+
+00:03:24.200 --> 00:03:27.759
+So it's super useful for
+
+00:03:27.760 --> 00:03:30.319
+understanding something and outputting text based on that,
+
+00:03:30.320 --> 00:03:32.239
+which is just useful for Emacs.
+
+NOTE Drawbacks of LLMs (regex demo)
+
+00:03:32.240 --> 00:03:39.919
+So the drawback is, yeah, it's good,
+
+00:03:39.920 --> 00:03:43.359
+but it's not that reliable.
+
+00:03:43.360 --> 00:03:45.679
+And you'd think it's very easy to get caught up in like,
+
+00:03:45.680 --> 00:03:47.639
+oh my gosh, like this is so powerful.
+
+00:03:47.640 --> 00:03:50.599
+I bet it could work this, whatever idea could work.
+
+00:03:50.600 --> 00:03:52.919
+And these ideas, like they almost can.
+
+00:03:52.920 --> 00:03:55.639
+For example, I was thinking, you know what I could do?
+
+00:03:55.640 --> 00:03:57.239
+I don't like writing regexes.
+
+00:03:57.240 --> 00:04:01.199
+Why can't I have a regex replace that's powered by LLMs?
+
+00:04:01.200 --> 00:04:03.439
+And that way I could give just an instruction
+
+00:04:03.440 --> 00:04:07.399
+to regex replace.
+
+00:04:07.400 --> 00:04:12.079
+And so for example, I could do Emacs LLM regex replace.
+
+00:04:12.080 --> 00:04:12.879
+This is not checked in anywhere.
+
+00:04:12.880 --> 00:04:17.199
+These are just my own kind of private functions.
+
+00:04:17.200 --> 00:04:19.239
+My description lowercase all the org headings.
+
+00:04:19.240 --> 00:04:20.439
+Let's see if it works.
+
+00:04:20.440 --> 00:04:21.039
+It might work.
+
+00:04:21.040 --> 00:04:22.959
+No, it doesn't work.
+
+00:04:22.960 --> 00:04:26.159
+So if I, I'm not going to bother to show you
+
+00:04:26.160 --> 00:04:28.159
+what it actually came up with, but it's something,
+
+00:04:28.160 --> 00:04:29.879
+if you looked at it, it'd be like, wow,
+
+00:04:29.880 --> 00:04:31.639
+this is very close to being...
+
+00:04:31.640 --> 00:04:34.239
+It looks like it should work, but it doesn't.
+
+00:04:34.240 --> 00:04:35.839
+Okay.
+
+00:04:35.840 --> 00:04:38.719
+It's not quite good enough to get it right.
+
+00:04:38.720 --> 00:04:41.599
+And it's possible that perhaps by giving it
+
+00:04:41.600 --> 00:04:43.639
+a few examples of, or explaining more
+
+00:04:43.640 --> 00:04:46.439
+what makes Emacs regexes different.
+
+00:04:46.440 --> 00:04:47.959
+It could do a better job
+
+00:04:47.960 --> 00:04:49.279
+and maybe could solve these problems,
+
+00:04:49.280 --> 00:04:50.679
+but it's always a little bit random.
+
+00:04:50.680 --> 00:04:52.359
+You're never quite sure what you're going to get.
+
+00:04:52.360 --> 00:04:54.839
+So this is the drawback.
+
+00:04:54.840 --> 00:04:58.479
+Like there's a lot of things that look like you could do it,
+
+00:04:58.480 --> 00:05:00.999
+but when it actually comes down to trying it,
+
+00:05:01.000 --> 00:05:03.399
+it's surprisingly hard.
+
+00:05:03.400 --> 00:05:06.319
+And, you know, and whatever you're doing,
+
+00:05:06.320 --> 00:05:08.999
+it's surprisingly hard to get something
+
+00:05:09.000 --> 00:05:13.879
+that is repeatably, that's, that is always good.
+
+00:05:13.880 --> 00:05:20.119
+So yeah, that's currently the problem.
+
+NOTE Embeddings
+
+00:05:20.120 --> 00:05:23.399
+So I want to talk about embeddings.
+
+00:05:23.400 --> 00:05:26.919
+They're another thing that LLMs offer
+
+00:05:26.920 --> 00:05:28.599
+and that are extremely useful.
+
+00:05:28.600 --> 00:05:33.119
+They are, what they do is they encode from
+
+00:05:33.120 --> 00:05:38.959
+a input text that could be a word, a sentence,
+
+00:05:38.960 --> 00:05:42.159
+a small document.
+
+00:05:42.160 --> 00:05:45.399
+It encodes a vector about what the meaning,
+
+00:05:45.400 --> 00:05:46.919
+the semantic meaning of that is.
+
+00:05:46.920 --> 00:05:51.079
+That means you could, something that is,
+
+00:05:51.080 --> 00:05:52.279
+uses completely different words,
+
+00:05:52.280 --> 00:05:54.159
+but is basically talking about the same thing,
+
+00:05:54.160 --> 00:05:57.839
+perhaps in a different language, should be pretty close
+
+00:05:57.840 --> 00:06:01.999
+as a vector to the other vector.
+
+00:06:02.000 --> 00:06:05.399
+You know, as long as they're similarly semantic things,
+
+00:06:05.400 --> 00:06:12.239
+like the words
+
+00:06:12.240 --> 00:06:18.959
+highway and Camino are two different words.
+
+00:06:18.960 --> 00:06:19.639
+They mean the same thing.
+
+00:06:19.640 --> 00:06:21.319
+They should have very similar embeddings.
+
+00:06:21.320 --> 00:06:25.119
+So it is a way to kind of encode this
+
+00:06:25.120 --> 00:06:26.199
+and then you could use this for search.
+
+00:06:26.200 --> 00:06:28.919
+For example, I haven't tried to do this yet,
+
+00:06:28.920 --> 00:06:31.479
+but you could probably just make an embedding
+
+00:06:31.480 --> 00:06:33.919
+for every paragraph in the Emacs manual
+
+00:06:33.920 --> 00:06:36.239
+and the Elisp manual.
+
+00:06:36.240 --> 00:06:39.439
+And then, and then there's a very standard technique.
+
+00:06:39.440 --> 00:06:43.439
+You just... You find that you have a query,
+
+00:06:43.440 --> 00:06:45.799
+oh, how do I do whatever, whatever in Emacs again?
+
+00:06:45.800 --> 00:06:49.479
+And you could, you just find that 20 things
+
+00:06:49.480 --> 00:06:50.319
+that are closest to whatever you're
+
+00:06:50.320 --> 00:06:51.839
+trying to... the embedding of your query.
+
+00:06:51.840 --> 00:06:55.279
+You send those things to the LLM, as you know,
+
+00:06:55.280 --> 00:06:57.799
+with the original query,
+
+00:06:57.800 --> 00:06:59.919
+and you're basically telling the--asking the LLM,
+
+00:06:59.920 --> 00:07:01.279
+look, the user is trying to do this.
+
+00:07:01.280 --> 00:07:03.039
+Here's what I found in the Emacs manual.
+
+00:07:03.040 --> 00:07:04.639
+That's on the Elisp manual.
+
+00:07:04.640 --> 00:07:07.439
+That's close to what they're trying to do.
+
+00:07:07.440 --> 00:07:12.159
+So can you kind of just tell the user what to do?
+
+00:07:12.160 --> 00:07:14.479
+And from this, and you could say,
+
+00:07:14.480 --> 00:07:17.639
+just use things from this, you know, that I give you.
+
+00:07:17.640 --> 00:07:20.679
+Don't just make up your own idea.
+
+00:07:20.680 --> 00:07:21.839
+You know, don't use your own ideas,
+
+00:07:21.840 --> 00:07:23.799
+because sometimes it likes to do that
+
+00:07:23.800 --> 00:07:24.359
+and those things are wrong.
+
+00:07:24.360 --> 00:07:26.719
+So you could try to, you know, do this and you get,
+
+00:07:26.720 --> 00:07:28.719
+you could get quite good results using this.
+
+00:07:28.720 --> 00:07:29.999
+So no one has done this yet,
+
+00:07:30.000 --> 00:07:32.799
+but that should not be hard to do.
+
+NOTE Image Generation
+
+00:07:32.800 --> 00:07:34.879
+Image generation is something that's, you know,
+
+00:07:34.880 --> 00:07:38.479
+it's not quite an LLM in the sense of...
+
+00:07:38.480 --> 00:07:43.079
+These are... It's a different technology,
+
+00:07:43.080 --> 00:07:48.439
+but these things are kind of packaged together
+
+00:07:48.440 --> 00:07:49.039
+in a sense.
+
+00:07:49.040 --> 00:07:51.639
+And you'll see that when I talk about Emacs packages,
+
+00:07:51.640 --> 00:07:54.279
+a lot of them bundle image generation
+
+00:07:54.280 --> 00:07:55.439
+and large language models.
+
+00:07:55.440 --> 00:07:59.039
+You know, the APIs are often bundled together by providers.
+
+00:07:59.040 --> 00:08:02.679
+And the general idea is it's kind of similar
+
+00:08:02.680 --> 00:08:04.399
+because it's very similar to large, you know,
+
+00:08:04.400 --> 00:08:06.559
+doing a chat thing where you, you know,
+
+00:08:06.560 --> 00:08:09.760
+the chat is like, you give it a text request,
+
+00:08:09.761 --> 00:08:12.759
+like write me a sonnet about, you know,
+
+00:08:12.760 --> 00:08:14.879
+the battle between Emacs and vi.
+
+00:08:14.880 --> 00:08:15.839
+And it could, it could do it.
+
+00:08:15.840 --> 00:08:17.159
+It could do a very good job of that.
+
+00:08:17.160 --> 00:08:22.519
+But you could also say, you know,
+
+00:08:22.520 --> 00:08:27.599
+draw me a picture of Emacs and vi as boxers,
+
+00:08:27.600 --> 00:08:30.359
+as a character-character boxing in a ring,
+
+00:08:30.360 --> 00:08:32.239
+like a, you know, political cartoon style.
+
+00:08:32.240 --> 00:08:34.999
+And it can do that as well.
+
+00:08:35.000 --> 00:08:37.679
+And so you could basically think of this
+
+00:08:37.680 --> 00:08:39.439
+as just sort of... it's kind of the
+
+00:08:39.440 --> 00:08:42.399
+same thing with what you're doing
+
+00:08:42.400 --> 00:08:43.359
+with large language models,
+
+00:08:43.360 --> 00:08:44.799
+but instead of outputting a text,
+
+00:08:44.800 --> 00:08:48.479
+you're outputting a picture.
+
+NOTE Fine-tuning
+
+00:08:48.480 --> 00:08:51.079
+There's also, I want to mention the concept of fine-tuning.
+
+00:08:51.080 --> 00:08:55.199
+Fine-tuning is a way to take your--
+
+00:08:55.200 --> 00:08:59.759
+take a corpus of inputs and outputs and just from
+
+00:08:59.760 --> 00:09:01.599
+a large language model, you're like, okay,
+
+00:09:01.600 --> 00:09:03.599
+given this base large language model,
+
+00:09:03.600 --> 00:09:06.679
+I want to make sure that when I give you input,
+
+00:09:06.680 --> 00:09:08.479
+you give me something like output.
+
+00:09:08.480 --> 00:09:10.119
+And this is what I'm just going to
+
+00:09:10.120 --> 00:09:11.799
+train you further on these,
+
+00:09:11.800 --> 00:09:14.879
+these mappings between input and output.
+
+00:09:14.880 --> 00:09:16.399
+And for example, you could do this. Like,
+
+00:09:16.400 --> 00:09:18.039
+let's say you wanted to fix that regex demo
+
+00:09:18.040 --> 00:09:20.999
+I had to make it good.
+
+00:09:21.000 --> 00:09:23.479
+I don't think it, I think it'd be
+
+00:09:23.480 --> 00:09:25.039
+relatively effective to train,
+
+00:09:25.040 --> 00:09:27.039
+to have regex descriptions
+
+00:09:27.040 --> 00:09:30.119
+and regex examples, Emacs regex examples
+
+00:09:30.120 --> 00:09:31.239
+as inputs and outputs.
+
+00:09:31.240 --> 00:09:33.999
+You could get, you know, maybe a hundred,
+
+00:09:34.000 --> 00:09:35.359
+a few hundreds of these things.
+
+00:09:35.360 --> 00:09:38.639
+You could train it.
+
+00:09:38.640 --> 00:09:40.759
+I think that is a reasonable way to,
+
+00:09:40.760 --> 00:09:43.879
+let's just say, I don't know how well it would work,
+
+00:09:43.880 --> 00:09:46.839
+but these things definitely work some of the time
+
+00:09:46.840 --> 00:09:47.999
+and produce pretty good results.
+
+00:09:48.000 --> 00:09:53.039
+And you could do this on your own machine.
+
+00:09:53.040 --> 00:09:58.999
+Corporations like OpenAI offer APIs with, you know,
+
+00:09:59.000 --> 00:10:01.519
+to build your fine tunes on top of OpenAI.
+
+00:10:01.520 --> 00:10:04.159
+And I think, I'm not a hundred percent sure,
+
+00:10:04.160 --> 00:10:05.719
+but I think then you can share your model
+
+00:10:05.720 --> 00:10:06.519
+with other people.
+
+00:10:06.520 --> 00:10:08.519
+But if not, then you just, you know,
+
+00:10:08.520 --> 00:10:10.839
+you could use your model for your own specialized purposes.
+
+00:10:10.840 --> 00:10:14.039
+But in the world of models that you could run,
+
+00:10:14.040 --> 00:10:16.874
+for example, based on Llama, which is like...
+
+00:10:16.875 --> 00:10:22.240
+Llama is this model you can run on your own machine from Meta.
+
+00:10:23.580 --> 00:10:26.880
+There's many fine-tuned models that you could download
+
+00:10:26.881 --> 00:10:28.960
+and you could run on your own.
+
+00:10:28.961 --> 00:10:30.839
+They can do very different things too.
+
+00:10:30.840 --> 00:10:33.399
+Some output Python programs, for example,
+
+00:10:33.400 --> 00:10:34.279
+that you could just run.
+
+00:10:34.280 --> 00:10:37.959
+So you just say...
+
+00:10:37.960 --> 00:10:40.639
+Tell me how old... Let's just say
+
+00:10:40.640 --> 00:10:41.999
+you have a random task, like
+
+00:10:42.000 --> 00:10:48.119
+tell me how old these five cities are in minutes,
+
+00:10:48.120 --> 00:10:49.799
+based on historical evidence.
+
+00:10:49.800 --> 00:10:53.639
+It's kind of a weird query, but it probably can figure,
+
+00:10:53.640 --> 00:10:55.119
+it could probably run that for you.
+
+00:10:55.120 --> 00:10:57.239
+It'll encode its knowledge into whatever
+
+00:10:57.240 --> 00:10:59.599
+the Python program, then use the Python program
+
+00:10:59.600 --> 00:11:01.039
+to do the correct calculations.
+
+00:11:01.040 --> 00:11:05.679
+So pretty, pretty useful stuff.
+
+NOTE Open Source
+
+00:11:08.160 --> 00:11:10.399
+So I also want to mention open source
+
+00:11:10.400 --> 00:11:12.679
+and basically free software here.
+
+00:11:12.680 --> 00:11:17.599
+These LLMs are mostly not free software.
+
+00:11:17.600 --> 00:11:19.159
+They're sometimes open source,
+
+00:11:19.160 --> 00:11:21.959
+but they're generally not free
+
+00:11:21.960 --> 00:11:23.799
+without restrictions to use.
+
+00:11:23.800 --> 00:11:27.279
+Most of these things, even Llama,
+
+00:11:27.280 --> 00:11:28.679
+which you can use on your own machine,
+
+00:11:28.680 --> 00:11:31.439
+have restrictions that you cannot use it
+
+00:11:31.440 --> 00:11:32.519
+to train your own model.
+
+00:11:32.520 --> 00:11:35.119
+This is something that, you know,
+
+00:11:35.120 --> 00:11:37.519
+it costs millions and millions of dollars
+
+00:11:37.520 --> 00:11:40.759
+to train and produce these models.
+
+00:11:40.760 --> 00:11:42.319
+And that's just computation costs.
+
+00:11:42.320 --> 00:11:45.519
+They do not want you
+
+00:11:45.520 --> 00:11:47.839
+stealing all that work by training your own models
+
+00:11:47.840 --> 00:11:48.799
+based on their output.
+
+00:11:48.800 --> 00:11:55.359
+But there are research LLMs that do, I believe,
+
+00:11:55.360 --> 00:11:57.999
+conform to free software principles.
+
+00:11:58.000 --> 00:11:59.519
+They're just not as good yet.
+
+00:11:59.520 --> 00:12:02.519
+And I think that might change in the future.
+
+NOTE The Future
+
+00:12:02.840 --> 00:12:04.119
+So speaking of the future,
+
+00:12:04.120 --> 00:12:07.519
+one of the things I'd like to point out
+
+00:12:07.520 --> 00:12:09.639
+is that like the demos I showed you are based on,
+
+00:12:09.640 --> 00:12:13.519
+I'm using OpenAI 3.5 model.
+
+00:12:13.520 --> 00:12:16.439
+That's more than, well, no,
+
+00:12:16.440 --> 00:12:18.199
+it's like a year old basically at this point.
+
+00:12:18.200 --> 00:12:21.079
+And things are moving fast.
+
+00:12:21.080 --> 00:12:22.039
+They came out with 4.0.
+
+00:12:22.040 --> 00:12:23.319
+4.0 is significantly better.
+
+00:12:23.320 --> 00:12:24.319
+I don't have access to it.
+
+00:12:24.320 --> 00:12:30.839
+Even though I'm using the API and I'm paying money for it,
+
+00:12:30.840 --> 00:12:33.639
+you only can get access to 4.0
+
+00:12:33.640 --> 00:12:34.439
+if you can spend a dollar.
+
+00:12:34.440 --> 00:12:36.319
+And I've never been able to spend,
+
+00:12:36.320 --> 00:12:38.199
+use so much API use that I've spent a dollar.
+
+00:12:38.200 --> 00:12:44.479
+So I have, I don't have 4.0, but I've tried it
+
+00:12:44.480 --> 00:12:46.639
+because I do pay for this
+
+00:12:46.640 --> 00:12:48.340
+so I could get access to 4.0
+
+00:12:48.341 --> 00:12:49.599
+and it is substantially better.
+
+00:12:49.600 --> 00:12:50.519
+By all reports, it's,
+
+00:12:50.520 --> 00:12:53.839
+the difference is extremely significant.
+
+00:12:53.840 --> 00:12:55.159
+I would not be surprised
+
+00:12:55.160 --> 00:12:59.759
+if some of the limitations and drawbacks I described
+
+00:12:59.760 --> 00:13:02.039
+mostly went away with 4.0.
+
+00:13:02.040 --> 00:13:06.679
+We're probably at a stage
+
+00:13:06.680 --> 00:13:09.239
+where regexes will work maybe 5% of the time
+
+00:13:09.240 --> 00:13:10.119
+if you try them.
+
+00:13:10.120 --> 00:13:13.639
+But with 4.0, it could work like 80% of the time.
+
+00:13:13.640 --> 00:13:14.559
+Now, is that good enough?
+
+00:13:14.560 --> 00:13:17.279
+Probably not, but it's a,
+
+00:13:17.280 --> 00:13:20.319
+I wouldn't be surprised if you got results like that.
+
+00:13:20.320 --> 00:13:22.919
+And in a year's time, in two years time,
+
+00:13:22.920 --> 00:13:26.679
+no one knows how much this is going to play out
+
+00:13:26.680 --> 00:13:27.519
+before progress stalls,
+
+00:13:27.520 --> 00:13:32.319
+but there are a lot of interesting research.
+
+00:13:32.320 --> 00:13:34.279
+I don't think, research wise,
+
+00:13:34.280 --> 00:13:35.759
+I don't think things have slowed down.
+
+00:13:35.760 --> 00:13:38.719
+You're still seeing a lot of advances.
+
+00:13:38.720 --> 00:13:40.999
+You're still seeing a lot of models coming out
+
+00:13:41.000 --> 00:13:41.839
+and that will come out.
+
+00:13:41.840 --> 00:13:46.279
+That will be each one, one upping the other one
+
+00:13:46.280 --> 00:13:49.959
+in terms of quality.
+
+00:13:49.960 --> 00:13:52.759
+It'll be really interesting to see how this all plays out.
+
+00:13:52.760 --> 00:13:55.919
+I think that message here is that
+
+00:13:55.920 --> 00:13:57.999
+we're at the beginning here.
+
+00:13:58.000 --> 00:14:01.239
+This is why I think this talk is important.
+
+00:14:01.240 --> 00:14:02.279
+I think this is why we should be
+
+00:14:02.280 --> 00:14:04.159
+paying attention to this stuff.
+
+NOTE LLMs in Emacs - existing packages
+
+00:14:08.200 --> 00:14:11.039
+Let's talk about the existing packages.
+
+00:14:11.040 --> 00:14:13.199
+Because there's a lot out there, people have,
+
+00:14:13.200 --> 00:14:17.039
+I think people have been integrating with
+
+00:14:17.040 --> 00:14:21.239
+these LLMs that often have a relatively easy to use API.
+
+00:14:21.240 --> 00:14:24.039
+So it's kind of natural that people
+
+00:14:24.040 --> 00:14:25.679
+have already put out a lot of packages.
+
+00:14:25.680 --> 00:14:28.319
+Coming off this problem from a lot of different angles,
+
+00:14:28.320 --> 00:14:30.639
+I don't have time to go through
+
+00:14:30.640 --> 00:14:31.959
+all of these packages.
+
+00:14:31.960 --> 00:14:33.559
+These are great packages though.
+
+00:14:33.560 --> 00:14:35.279
+If you're not familiar with them,
+
+00:14:35.280 --> 00:14:37.679
+please check them out.
+
+00:14:37.680 --> 00:14:40.999
+And they all are doing slightly different things.
+
+00:14:41.000 --> 00:14:43.959
+Some of these are relatively straightforward.
+
+00:14:43.960 --> 00:14:47.919
+Interactions, just a way to
+
+00:14:47.920 --> 00:14:52.679
+almost in a comment sort of way to kind of
+
+00:14:52.680 --> 00:14:54.199
+have just an interaction,
+
+00:14:54.200 --> 00:14:55.479
+long running interaction with an LLM
+
+00:14:55.480 --> 00:14:59.039
+where you kind of build off previous responses,
+
+00:14:59.040 --> 00:15:01.799
+kind of like the OpenAI's UI.
+
+00:15:01.800 --> 00:15:08.559
+Two very more Emacsy things where you can sort of
+
+00:15:08.560 --> 00:15:13.679
+embed these LLM responses within a org-mode block
+
+00:15:13.680 --> 00:15:15.239
+using the org-mode's context.
+
+00:15:15.240 --> 00:15:20.959
+Or GitHub Copilot integration where you can use it
+
+00:15:20.960 --> 00:15:23.319
+for auto completion in a very powerful,
+
+00:15:23.320 --> 00:15:27.319
+you know, this stuff is very useful if it could figure out
+
+00:15:27.320 --> 00:15:29.199
+what you're trying to do based on the context.
+
+00:15:29.200 --> 00:15:31.839
+It's quite effective.
+
+00:15:31.840 --> 00:15:36.359
+But I want to kind of call out one thing
+
+00:15:36.360 --> 00:15:38.239
+that I'd like to see change.
+
+00:15:38.240 --> 00:15:42.599
+Which is that users right now,
+
+00:15:42.600 --> 00:15:45.199
+not all of these have a choice of,
+
+00:15:45.200 --> 00:15:47.959
+first of all, there's a lot of them.
+
+00:15:47.960 --> 00:15:49.639
+Each one of them is doing their own calls.
+
+00:15:49.640 --> 00:15:53.999
+And each one of them is, so each one of them
+
+00:15:54.000 --> 00:15:55.239
+has their own interfaces.
+
+00:15:55.240 --> 00:15:57.719
+They're rewriting the interface to OpenAI or wherever.
+
+00:15:57.720 --> 00:16:00.119
+And they're not, they don't, most of these
+
+00:16:00.120 --> 00:16:05.119
+do not make it that configurable or at all configurable
+
+00:16:05.120 --> 00:16:06.599
+what LLM use.
+
+00:16:06.600 --> 00:16:07.239
+This is not good.
+
+00:16:07.240 --> 00:16:09.679
+It is important that we use,
+
+00:16:09.680 --> 00:16:15.679
+we give the user a way to change the LLM they use.
+
+00:16:15.680 --> 00:16:21.079
+And that is because you might not be comfortable
+
+00:16:21.080 --> 00:16:24.439
+sending your requests over to a private corporation
+
+00:16:24.440 --> 00:16:27.799
+where you don't get to see how they use their data.
+
+00:16:27.800 --> 00:16:29.799
+Your data, really.
+
+00:16:29.800 --> 00:16:33.319
+That's especially true with things like embeddings
+
+00:16:33.320 --> 00:16:35.039
+where you might be sending over your documents.
+
+00:16:35.040 --> 00:16:37.519
+You're just giving them your documents, basically.
+
+00:16:37.520 --> 00:16:40.759
+And, you know, that does happen.
+
+00:16:40.760 --> 00:16:43.599
+I don't think really that there's a reason
+
+00:16:43.600 --> 00:16:44.639
+to be uncomfortable with this,
+
+00:16:44.640 --> 00:16:51.439
+but that, you know, people are uncomfortable and that's okay.
+
+00:16:51.440 --> 00:16:53.239
+People might want to use a local machine,
+
+00:16:53.240 --> 00:16:58.359
+a local LLM for maximum privacy.
+
+00:16:58.360 --> 00:17:00.639
+That's something we should allow.
+
+00:17:00.640 --> 00:17:04.519
+People might want to especially use free software.
+
+00:17:04.520 --> 00:17:05.839
+That's something we should definitely allow.
+
+00:17:05.840 --> 00:17:07.279
+This is Emacs.
+
+00:17:07.280 --> 00:17:08.239
+We need to encourage that.
+
+00:17:08.240 --> 00:17:12.159
+But right now, as most of these things are written,
+
+00:17:12.160 --> 00:17:13.959
+you can't do it.
+
+00:17:13.960 --> 00:17:17.839
+And they're spending precious time
+
+00:17:17.840 --> 00:17:18.879
+just doing things themselves.
+
+00:17:18.880 --> 00:17:20.839
+This is why I wrote LLM, which is...
+
+00:17:20.840 --> 00:17:23.039
+it will just make that connection to the LLM for you
+
+00:17:23.040 --> 00:17:26.719
+and it will connect to, you know, it has plugins.
+
+00:17:26.720 --> 00:17:30.279
+So if you can, the user can configure what plugin
+
+00:17:30.280 --> 00:17:31.359
+it actually goes to.
+
+00:17:31.360 --> 00:17:32.399
+Does it go to OpenAI?
+
+00:17:32.400 --> 00:17:35.239
+Does it go to Google Cloud Vertex?
+
+00:17:35.240 --> 00:17:36.999
+Does it go to Llama on your machine?
+
+00:17:37.000 --> 00:17:38.399
+We're using Ollama,
+
+00:17:38.400 --> 00:17:40.999
+which is just a way to run Llama locally.
+
+00:17:41.000 --> 00:17:47.959
+And more things in the future, I hope.
+
+00:17:47.960 --> 00:17:52.079
+So this is, I'm hoping that we use this.
+
+00:17:52.080 --> 00:17:54.839
+It's designed to be sort of maximally usable.
+
+00:17:54.840 --> 00:17:56.279
+You don't need to install anything.
+
+00:17:56.280 --> 00:17:58.359
+It's on GNU ELPA.
+
+00:17:58.360 --> 00:17:59.879
+So even if you write something
+
+00:17:59.880 --> 00:18:01.079
+that you want to contribute to GNU ELPA,
+
+00:18:01.080 --> 00:18:02.879
+you can use it because it's on GNU ELPA.
+
+00:18:02.880 --> 00:18:06.439
+It's part of the Emacs package, Emacs core packages.
+
+00:18:06.440 --> 00:18:09.879
+So, but it has no functionality.
+
+00:18:09.880 --> 00:18:11.719
+It's really just there as a library
+
+00:18:11.720 --> 00:18:14.439
+to use by other things offering functionality. Okay.
+
+NOTE Abstracting LLM challenges
+
+00:18:15.960 --> 00:18:19.839
+And it's a little bit difficult to abstract.
+
+00:18:19.840 --> 00:18:21.159
+I want to point this out
+
+00:18:21.160 --> 00:18:23.599
+because I think it's an important point
+
+00:18:23.600 --> 00:18:29.519
+is that the, it's, some of these LLMs, for example,
+
+00:18:29.520 --> 00:18:30.439
+have image generation.
+
+00:18:30.440 --> 00:18:31.279
+Some do not.
+
+00:18:31.280 --> 00:18:35.319
+Some of them have very large context windows, even for chat.
+
+00:18:35.320 --> 00:18:36.999
+You say, okay, all these things can do chat.
+
+00:18:37.000 --> 00:18:37.319
+Okay.
+
+00:18:37.320 --> 00:18:38.079
+Yeah, kind of.
+
+00:18:38.080 --> 00:18:39.999
+Some of these things you could pass a book to,
+
+00:18:40.000 --> 00:18:41.239
+like Anthropic's API.
+
+00:18:41.240 --> 00:18:43.039
+Most, you cannot.
+
+00:18:43.040 --> 00:18:45.559
+So there really are big differences
+
+00:18:45.560 --> 00:18:46.399
+in how these things work.
+
+00:18:46.400 --> 00:18:51.539
+I hope those differences diminish in the future.
+
+00:18:51.540 --> 00:18:53.800
+But it's just one of the challenges
+
+00:18:53.801 --> 00:18:57.520
+that I hope we can work through in the LLM library.
+
+00:18:57.521 --> 00:19:02.160
+So it's compatible, but there's definitely
+
+00:19:02.161 --> 00:19:04.079
+limits to that compatibility.
+
+NOTE Emacs is the ideal interface for LLMs
+
+00:19:04.080 --> 00:19:06.160
+I want to point out just to finish off,
+
+00:19:06.161 --> 00:19:12.879
+Emacs is the, Emacs has real power here
+
+00:19:12.880 --> 00:19:15.679
+that nothing else I think in the industry is offering.
+
+00:19:15.680 --> 00:19:19.279
+First of all, people that use Emacs
+
+00:19:19.280 --> 00:19:20.439
+tend to do a lot of things in Emacs.
+
+00:19:20.440 --> 00:19:22.159
+We have our to-dos in Emacs with the org mode.
+
+00:19:22.160 --> 00:19:22.999
+We have mail.
+
+00:19:23.000 --> 00:19:25.719
+We, you know, we might read email and we might,
+
+00:19:25.720 --> 00:19:27.679
+and respond to email in Emacs.
+
+00:19:27.680 --> 00:19:29.199
+We might have notes in Emacs.
+
+00:19:29.200 --> 00:19:31.359
+This is very powerful.
+
+00:19:31.360 --> 00:19:34.159
+Using... there's not other stuff like that.
+
+00:19:34.160 --> 00:19:35.759
+And you could feed this stuff to an LLM.
+
+00:19:35.760 --> 00:19:37.039
+You could do interesting things
+
+00:19:37.040 --> 00:19:38.559
+using a combination of all this data.
+
+00:19:38.560 --> 00:19:40.399
+No one else could do this.
+
+00:19:40.400 --> 00:19:41.759
+We need to start thinking about it.
+
+00:19:41.760 --> 00:19:45.039
+Secondly, Emacs can execute commands.
+
+00:19:45.040 --> 00:19:46.239
+This might be a bad idea.
+
+00:19:46.240 --> 00:19:48.399
+This might be how the robots take over,
+
+00:19:48.400 --> 00:19:51.799
+but you could have the LLMs respond with Emacs
+
+00:19:51.800 --> 00:19:54.199
+commands and run those Emacs commands
+
+00:19:54.200 --> 00:19:57.079
+and tell the LLM the response and have it do things
+
+00:19:57.080 --> 00:19:58.679
+as your agent in the editor.
+
+00:19:58.680 --> 00:20:01.599
+I think we need to explore ideas like this.
+
+NOTE Outro
+
+00:20:01.960 --> 00:20:04.279
+And I think we need to share these ideas
+
+00:20:04.280 --> 00:20:07.039
+and we need to make sure that we're pushing the
+
+00:20:07.040 --> 00:20:10.519
+envelope for Emacs and actually, you know, doing things,
+
+00:20:10.520 --> 00:20:12.959
+sharing ideas, sharing progress,
+
+00:20:12.960 --> 00:20:15.199
+and kind of seeing how far we can push this stuff.
+
+00:20:15.200 --> 00:20:20.639
+Let's really help Emacs out, be sort of,
+
+00:20:20.640 --> 00:20:24.519
+take advantage of this super powerful technique.
+
+00:20:24.520 --> 00:20:26.160
+Thank you for listening.
diff --git a/2023/captions/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--answers.vtt b/2023/captions/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--answers.vtt
new file mode 100644
index 00000000..277f3dd1
--- /dev/null
+++ b/2023/captions/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--answers.vtt
@@ -0,0 +1,1019 @@
+WEBVTT
+
+
+00:00:03.540 --> 00:00:03.939
+[Speaker 0]: I would invite all on the,
+
+00:00:04.600 --> 00:00:04.960
+who are currently watching,
+
+00:00:06.819 --> 00:00:07.200
+who have questions, put them into the pad
+
+00:00:08.940 --> 00:00:09.440
+that I can ask them. I'm kind of monitoring
+
+00:00:16.320 --> 00:00:16.720
+the IRC concurrently. So the first question
+
+00:00:18.640 --> 00:00:18.800
+that we have on the pad is concerning why you
+
+00:00:19.600 --> 00:00:20.100
+have switched from OCaml.
+
+00:00:22.420 --> 00:00:22.800
+Maybe the person has missed it in the talk,
+
+00:00:23.480 --> 00:00:23.980
+if you've mentioned it.
+
+00:00:25.080 --> 00:00:25.320
+Why have you switched from OCaml to,
+
+00:00:25.920 --> 00:00:26.180
+in this case, I guess,
+
+00:00:26.180 --> 00:00:26.680
+Rust?
+
+00:00:30.960 --> 00:00:31.080
+[Speaker 1]: Yeah, I mentioned like with writing a
+
+00:00:34.280 --> 00:00:34.440
+language server that I wrote mine for my
+
+00:00:36.900 --> 00:00:37.120
+company in OCaml But I wouldn't recommend it
+
+00:00:38.960 --> 00:00:39.220
+just in general unless like you're doing
+
+00:00:41.720 --> 00:00:42.040
+something specific with OCaml And the reason
+
+00:00:44.180 --> 00:00:44.340
+for that and I recommended Rust or like
+
+00:00:45.780 --> 00:00:46.100
+TypeScript is like OCaml is great.
+
+00:00:49.080 --> 00:00:49.360
+It's very performant but it's cross
+
+00:00:50.739 --> 00:00:51.100
+compilation story is not great.
+
+00:00:54.100 --> 00:00:54.340
+It's like really hard to cross compile like
+
+00:00:55.840 --> 00:00:56.320
+from 1 platform to another.
+
+00:00:58.120 --> 00:00:58.540
+And then like the ecosystem and its standard
+
+00:01:00.380 --> 00:01:00.880
+library is also not great.
+
+00:01:03.460 --> 00:01:03.640
+And like Rust, its cross compilation is
+
+00:01:05.820 --> 00:01:06.320
+great. Its ecosystem is great.
+
+00:01:08.720 --> 00:01:09.060
+OCaml is great if you need to use it,
+
+00:01:10.880 --> 00:01:11.380
+but it's just it's not ideal.
+
+00:01:14.220 --> 00:01:14.340
+And there's just also no good examples of a
+
+00:01:15.240 --> 00:01:15.740
+language server in OCaml.
+
+00:01:19.119 --> 00:01:19.619
+There's the official like OCaml language
+
+00:01:22.920 --> 00:01:23.420
+server, But they use a ton of super advanced
+
+00:01:27.380 --> 00:01:27.540
+language features, like module functors and a
+
+00:01:28.440 --> 00:01:28.700
+bunch of other random stuff.
+
+00:01:29.479 --> 00:01:29.979
+So it's not really readable.
+
+00:01:31.860 --> 00:01:32.300
+But Rust, there's Rust analyzer,
+
+00:01:33.340 --> 00:01:33.780
+which is readable. In TypeScript,
+
+00:01:34.860 --> 00:01:35.360
+there's like a million different ones.
+
+00:01:39.340 --> 00:01:39.660
+So it's less of a, not OCaml is like,
+
+00:01:40.920 --> 00:01:41.280
+it's not that OCaml isn't great.
+
+00:01:43.320 --> 00:01:43.440
+It's more of a, these other languages would
+
+00:01:44.160 --> 00:01:44.660
+probably just be easier.
+
+00:01:45.280 --> 00:01:45.780
+So.
+
+00:01:48.619 --> 00:01:48.920
+[Speaker 0]: I guess since the integration to,
+
+00:01:50.820 --> 00:01:51.000
+for example, like NeoVim or some other
+
+00:01:53.320 --> 00:01:53.460
+editors are just revenue fine because of the
+
+00:01:56.920 --> 00:01:57.420
+[Speaker 1]: Sorry, can you say that again?
+
+00:01:58.580 --> 00:01:59.080
+[Speaker 0]: LSP, I guess. The LSP,
+
+00:02:01.979 --> 00:02:02.100
+so it's a standard LSP specification that
+
+00:02:03.080 --> 00:02:03.400
+you're using. So you can also,
+
+00:02:04.920 --> 00:02:05.340
+for instance, use it and other editors,
+
+00:02:06.660 --> 00:02:07.160
+like for instance, new them or so.
+
+00:02:08.680 --> 00:02:08.940
+[Speaker 1]: Yeah. Yeah. You can use it.
+
+00:02:11.680 --> 00:02:11.920
+It's most, most editors nowadays support it.
+
+00:02:13.280 --> 00:02:13.780
+Like obviously Emacs, NeoVim,
+
+00:02:16.420 --> 00:02:16.840
+Sublime, VS code, Intel,
+
+00:02:17.700 --> 00:02:18.200
+all the IntelliJ ones.
+
+00:02:21.560 --> 00:02:21.960
+So yeah, that's, that's the fun part.
+
+00:02:23.440 --> 00:02:23.760
+You don't have to write 10 different
+
+00:02:26.500 --> 00:02:27.000
+languages to get a bunch of editor support.
+
+00:02:30.200 --> 00:02:30.300
+[Speaker 0]: Also experience writing it.
+
+00:02:33.820 --> 00:02:34.040
+So I didn't have really time to hear into
+
+00:02:36.300 --> 00:02:36.560
+your talk. So I'm sorry if I ask you
+
+00:02:38.100 --> 00:02:38.600
+questions that you have already said.
+
+00:02:41.400 --> 00:02:41.900
+How was the experience of writing an LSP?
+
+00:02:44.340 --> 00:02:44.480
+So have you any knowledge beforehand or do
+
+00:02:45.600 --> 00:02:46.100
+you just read it all on yourself?
+
+00:02:49.200 --> 00:02:49.700
+[Speaker 1]: Yeah, there's not a ton of documentation,
+
+00:02:53.440 --> 00:02:53.940
+which is what motivated me to do this talk.
+
+00:02:56.380 --> 00:02:56.580
+Basically, I just looked at the
+
+00:02:58.820 --> 00:02:58.980
+specification, and I knew Rust Analyzer was
+
+00:03:00.240 --> 00:03:00.740
+cool. And so I looked at Rust Analyzer,
+
+00:03:01.600 --> 00:03:02.100
+and I looked at PyRite.
+
+00:03:04.200 --> 00:03:04.700
+And I just went from there.
+
+00:03:07.920 --> 00:03:08.420
+I found out about all this because I already
+
+00:03:10.240 --> 00:03:10.440
+using Emacs, I already knew about it.
+
+00:03:12.160 --> 00:03:12.660
+I was like, this is going to be easier than
+
+00:03:15.020 --> 00:03:15.480
+something else. So yeah,
+
+00:03:17.720 --> 00:03:18.220
+there's the experience is fine.
+
+00:03:21.060 --> 00:03:21.300
+It's just a lot of wiring stuff up.
+
+00:03:24.100 --> 00:03:24.320
+It's not a lot of like hard thinking until
+
+00:03:26.200 --> 00:03:26.700
+you get to like performance heavy stuff.
+
+00:03:27.740 --> 00:03:28.080
+Like, so for some graph,
+
+00:03:30.760 --> 00:03:31.260
+like we're doing a ton of like code parsing
+
+00:03:32.980 --> 00:03:33.480
+and like analyzing. And so that's,
+
+00:03:35.760 --> 00:03:36.260
+it takes up like a ton of processing power.
+
+00:03:37.280 --> 00:03:37.600
+So like for stuff like that,
+
+00:03:39.620 --> 00:03:39.840
+like now you have to think about caching and
+
+00:03:43.980 --> 00:03:44.380
+like ordering things. So that part's hard,
+
+00:03:47.180 --> 00:03:47.420
+but that's more of a, like very much
+
+00:03:48.640 --> 00:03:49.140
+application specific thing.
+
+00:03:58.320 --> 00:03:58.620
+[Speaker 0]: Right. Anything in the IRC chat.
+
+00:04:01.840 --> 00:04:02.340
+I think not. It's nothing I can see.
+
+00:04:13.380 --> 00:04:13.520
+No questions, that's kind of odd to be
+
+00:04:17.440 --> 00:04:17.860
+honest. I cannot really ask questions
+
+00:04:18.680 --> 00:04:19.180
+concerning LSP specific.
+
+00:04:22.400 --> 00:04:22.900
+[Speaker 1]: Yeah, no worries.
+
+00:04:31.460 --> 00:04:31.960
+[Speaker 0]: Good question, what could be asked?
+
+00:04:35.740 --> 00:04:36.140
+Let's call, let's ask something very
+
+00:04:38.260 --> 00:04:38.680
+unspecific concerning the Emacs usage.
+
+00:04:39.340 --> 00:04:39.760
+And when have you started?
+
+00:04:41.580 --> 00:04:41.780
+How did you came through it and stuff like
+
+00:04:41.780 --> 00:04:42.280
+this?
+
+00:04:46.560 --> 00:04:46.960
+[Speaker 1]: Yeah. I like and when I was in high school,
+
+00:04:48.480 --> 00:04:48.980
+me and my friends just were like,
+
+00:04:51.820 --> 00:04:52.320
+got obsessed with Linux for whatever reason.
+
+00:04:53.940 --> 00:04:54.140
+And then like we traveled down like the,
+
+00:04:55.560 --> 00:04:56.060
+like the free software,
+
+00:04:57.700 --> 00:04:57.940
+like we just thought that was like very
+
+00:05:00.040 --> 00:05:00.160
+entertaining and like interesting to read
+
+00:05:01.200 --> 00:05:01.700
+about all the free software stuff.
+
+00:05:03.120 --> 00:05:03.480
+They were like, yeah, that's cool.
+
+00:05:04.540 --> 00:05:05.040
+And so we all started using Linux.
+
+00:05:06.960 --> 00:05:07.200
+And I'm like, well, if I'm using free
+
+00:05:08.300 --> 00:05:08.740
+software, I'm going to use Emacs.
+
+00:05:12.280 --> 00:05:12.440
+And so I started using Emacs just to try it
+
+00:05:13.940 --> 00:05:14.440
+out. And then I kind of got,
+
+00:05:16.880 --> 00:05:17.380
+I feel like, Stockholm syndrome into it.
+
+00:05:18.720 --> 00:05:19.220
+And now I've realized like,
+
+00:05:21.860 --> 00:05:22.360
+I don't know, now that I've done the like
+
+00:05:23.880 --> 00:05:24.340
+actual work to get into Emacs,
+
+00:05:26.280 --> 00:05:26.480
+it's just, there's so much more I can do with
+
+00:05:30.300 --> 00:05:30.800
+it. But yeah, it was somewhat unintentional.
+
+00:05:36.100 --> 00:05:36.420
+[Speaker 0]: I probably have the same course I've started
+
+00:05:37.780 --> 00:05:38.280
+like 2 years ago using Emacs.
+
+00:05:42.720 --> 00:05:42.940
+And also just, oh, there's at first some cool
+
+00:05:45.020 --> 00:05:45.340
+people on YouTube, so systems crafters and
+
+00:05:46.300 --> 00:05:46.800
+people like this. And also,
+
+00:05:49.440 --> 00:05:49.740
+ah, VS Code, I used a lot of VS Code
+
+00:05:53.560 --> 00:05:53.860
+beforehand and then VS Codium because open
+
+00:05:55.640 --> 00:05:55.860
+source and then oh are there any other
+
+00:05:58.020 --> 00:05:58.180
+alternatives and I came to like Neovim and
+
+00:06:01.160 --> 00:06:01.440
+Emacs and often switching around but I stick
+
+00:06:03.220 --> 00:06:03.720
+to Emacs at some point to be honest.
+
+00:06:07.180 --> 00:06:07.540
+[Speaker 1]: Yeah, I think Emacs also just looks really
+
+00:06:08.500 --> 00:06:09.000
+cool. I will say that.
+
+00:06:14.240 --> 00:06:14.640
+And also just like I like Vim.
+
+00:06:16.960 --> 00:06:17.240
+Vim is cool but like being able to like write
+
+00:06:19.240 --> 00:06:19.540
+lists and like modify your editor on the fly
+
+00:06:20.920 --> 00:06:21.420
+is just like very appealing to me.
+
+00:06:23.860 --> 00:06:24.140
+I don't know, Emacs was tough at first
+
+00:06:25.520 --> 00:06:25.680
+because like all the like default key
+
+00:06:28.380 --> 00:06:28.440
+bindings are just kind of like and then and
+
+00:06:29.860 --> 00:06:30.040
+then I read somewhere someone was like yeah
+
+00:06:33.220 --> 00:06:33.460
+well Richard Stallman uses evil mode so it's
+
+00:06:36.220 --> 00:06:36.460
+okay. I was like alright I can that's like
+
+00:06:38.000 --> 00:06:38.200
+blessing enough for me Like I'm just gonna
+
+00:06:39.520 --> 00:06:39.720
+switch to evil mode. And I was like,
+
+00:06:42.160 --> 00:06:42.360
+this is way, way better as far as key
+
+00:06:42.920 --> 00:06:43.420
+bindings go.
+
+00:06:46.720 --> 00:06:47.020
+[Speaker 0]: Kind of relates. So I switched for,
+
+00:06:49.900 --> 00:06:50.040
+I think, half a year to the default key
+
+00:06:51.300 --> 00:06:51.800
+bindings from Vim beforehand.
+
+00:06:54.960 --> 00:06:55.240
+I switched back to Evil and now I'm losing
+
+00:06:56.100 --> 00:06:56.600
+some kind of hybrid styles.
+
+00:07:01.000 --> 00:07:01.120
+It's kind of weird. But we have a question on
+
+00:07:03.260 --> 00:07:03.700
+the pad. So what are the corner cases,
+
+00:07:05.380 --> 00:07:05.880
+limitations, and other issues you encountered
+
+00:07:08.860 --> 00:07:09.020
+in implementing an LSP server with client in
+
+00:07:09.940 --> 00:07:10.440
+Emacs that were surprising?
+
+00:07:13.680 --> 00:07:13.860
+[Speaker 1]: Yeah, I would say the corner cases and
+
+00:07:15.280 --> 00:07:15.780
+limitations are definitely like,
+
+00:07:16.960 --> 00:07:17.220
+once again, they're going to be very
+
+00:07:18.960 --> 00:07:19.160
+application specific, but it's usually just
+
+00:07:22.420 --> 00:07:22.680
+the performance part. So like I was saying
+
+00:07:24.680 --> 00:07:24.900
+before, right, in general if you're doing
+
+00:07:26.120 --> 00:07:26.620
+language tooling, you're gonna be doing
+
+00:07:29.760 --> 00:07:30.080
+either parsing or interpreting or something
+
+00:07:31.560 --> 00:07:31.880
+like that, which is very just like
+
+00:07:34.740 --> 00:07:35.080
+computationally heavy and so if you're trying
+
+00:07:36.900 --> 00:07:37.060
+to like do that stuff while someone is
+
+00:07:38.520 --> 00:07:39.000
+editing a file right like every keystrokes
+
+00:07:42.660 --> 00:07:42.840
+every like 1 to 2 seconds if they have a fast
+
+00:07:44.240 --> 00:07:44.540
+computer that's great but a lot of people
+
+00:07:46.400 --> 00:07:46.560
+don't have like that fast of a computer that
+
+00:07:49.480 --> 00:07:49.740
+they can go and like do compilation every
+
+00:07:51.680 --> 00:07:52.180
+single keystroke. So like,
+
+00:07:54.080 --> 00:07:54.580
+I would say, I would say the like limitation
+
+00:07:56.920 --> 00:07:57.080
+is just how fast your computer is and how
+
+00:07:59.140 --> 00:07:59.340
+good you are at like implementing caching for
+
+00:08:01.020 --> 00:08:01.520
+like whatever you're doing.
+
+00:08:04.080 --> 00:08:04.280
+That's also just the main issues I've run
+
+00:08:08.080 --> 00:08:08.580
+into is just it's a constant uphill battle.
+
+00:08:12.120 --> 00:08:12.560
+People will somehow find larger and larger
+
+00:08:14.580 --> 00:08:15.080
+files. You'll end up with files that are like
+
+00:08:17.320 --> 00:08:17.680
+thousands, like tens of thousands of lines
+
+00:08:18.700 --> 00:08:18.940
+long and you think yeah,
+
+00:08:21.340 --> 00:08:21.840
+surely no 1 would expect like instantaneous
+
+00:08:25.440 --> 00:08:25.640
+response for like like editing a file that
+
+00:08:26.820 --> 00:08:27.040
+has like tens of thousands of lines,
+
+00:08:30.000 --> 00:08:30.180
+but then they do. As far as corner cases go,
+
+00:08:31.960 --> 00:08:32.459
+I would say the corner case is like,
+
+00:08:37.760 --> 00:08:37.919
+just in general is actually distributing the
+
+00:08:41.039 --> 00:08:41.200
+language server. Cause like writing the
+
+00:08:42.340 --> 00:08:42.840
+language server is fine.
+
+00:08:44.540 --> 00:08:44.900
+Like wiring everything up is fine.
+
+00:08:47.180 --> 00:08:47.300
+But then like, once you actually have to go
+
+00:08:47.960 --> 00:08:48.120
+and distribute it, well,
+
+00:08:49.200 --> 00:08:49.700
+now you're distributing in a binary.
+
+00:08:51.660 --> 00:08:52.160
+Like I was saying before with OCaml,
+
+00:08:53.940 --> 00:08:54.440
+doesn't have great cross compilation.
+
+00:08:58.840 --> 00:08:59.340
+So for some graph for our language server,
+
+00:09:01.560 --> 00:09:02.060
+we target Linux and Mac OS,
+
+00:09:03.840 --> 00:09:04.340
+and we have a ton of people who use Windows,
+
+00:09:06.960 --> 00:09:07.440
+but compiling OCaml for Windows is basically
+
+00:09:10.080 --> 00:09:10.440
+impossible. So our corner case there,
+
+00:09:11.980 --> 00:09:12.480
+the way we solved it was now we're
+
+00:09:14.160 --> 00:09:14.660
+transpiling OCaml to JavaScript,
+
+00:09:17.080 --> 00:09:17.560
+which is a huge can of worms.
+
+00:09:18.840 --> 00:09:19.040
+Like it's a lot of fun.
+
+00:09:19.400 --> 00:09:19.900
+It's very interesting,
+
+00:09:22.860 --> 00:09:23.360
+but like it's not ideal.
+
+00:09:24.340 --> 00:09:24.720
+And so that's what I was saying before.
+
+00:09:26.360 --> 00:09:26.580
+I recommend like Rust or TypeScript because
+
+00:09:29.580 --> 00:09:29.820
+those are way more portable and a lot easier
+
+00:09:31.280 --> 00:09:31.780
+to install. And you don't have to worry about
+
+00:09:33.600 --> 00:09:34.100
+any of that weird packaging stuff.
+
+00:09:37.600 --> 00:09:38.080
+So yeah, I would say that's like the main
+
+00:09:40.260 --> 00:09:40.760
+corner case and the main limitation is just
+
+00:09:41.720 --> 00:09:42.220
+speed and caching.
+
+00:09:47.160 --> 00:09:47.640
+[Speaker 0]: You mentioned this obscure large file so
+
+00:09:49.000 --> 00:09:49.160
+someone doesn't want to refactor or
+
+00:09:51.760 --> 00:09:52.200
+something. How did you start?
+
+00:09:54.480 --> 00:09:54.620
+So did you have any way to still be
+
+00:09:56.320 --> 00:09:56.580
+relatively performant when they have big
+
+00:09:58.020 --> 00:09:58.520
+files or is it just not supported?
+
+00:09:58.920 --> 00:09:59.420
+I don't care.
+
+00:10:03.140 --> 00:10:03.640
+[Speaker 1]: Yeah, no, we, so we support larger files now
+
+00:10:05.460 --> 00:10:05.960
+And the way we ended up doing that,
+
+00:10:11.480 --> 00:10:11.980
+so SemGrep is like you write this generic
+
+00:10:14.540 --> 00:10:14.900
+pattern. You kind of write the language,
+
+00:10:17.160 --> 00:10:17.320
+but then there's these other symbols and
+
+00:10:18.760 --> 00:10:19.160
+stuff that are included in that,
+
+00:10:19.760 --> 00:10:20.260
+this like meta language.
+
+00:10:22.420 --> 00:10:22.580
+And so what happens is,
+
+00:10:23.600 --> 00:10:24.100
+is most languages get,
+
+00:10:27.720 --> 00:10:27.900
+they get parsed and then into a syntax tree,
+
+00:10:29.180 --> 00:10:29.600
+right? Like whatever the language is syntax
+
+00:10:30.620 --> 00:10:31.120
+tree is, and then they get,
+
+00:10:33.800 --> 00:10:34.000
+the syntax tree gets converted into this,
+
+00:10:35.860 --> 00:10:36.360
+like, we call it like an abstract syntax
+
+00:10:38.080 --> 00:10:38.300
+tree, which is like abstract from like any,
+
+00:10:39.860 --> 00:10:40.360
+like languages specific syntax tree.
+
+00:10:41.940 --> 00:10:42.380
+And so then we can cache that,
+
+00:10:44.480 --> 00:10:44.760
+which is really good because like if someone
+
+00:10:47.700 --> 00:10:47.920
+types something like we don't have to go
+
+00:10:50.280 --> 00:10:50.440
+through and do like the full parsing and like
+
+00:10:51.560 --> 00:10:51.760
+converting, we only have to do it
+
+00:10:54.960 --> 00:10:55.200
+incrementally. And so that's,
+
+00:10:56.100 --> 00:10:56.420
+that's how we dealt with that.
+
+00:10:58.140 --> 00:10:58.640
+Or the other option is that we just,
+
+00:11:00.720 --> 00:11:01.180
+we just cache whatever the previous results
+
+00:11:03.460 --> 00:11:03.960
+are, and then run it asynchronously,
+
+00:11:04.960 --> 00:11:05.460
+and they might get it delayed.
+
+00:11:08.200 --> 00:11:08.700
+But we've ended up doing more AST caching,
+
+00:11:09.880 --> 00:11:10.380
+which is fun and cool.
+
+00:11:15.600 --> 00:11:15.900
+[Speaker 0]: Sounds good. So we have here a question from
+
+00:11:18.240 --> 00:11:18.540
+Blaine. If Eaglet is a subset of LSP mode,
+
+00:11:21.680 --> 00:11:21.840
+can EGLOT conflict with LSP mode if both are
+
+00:11:23.400 --> 00:11:23.900
+present in your initial .el
+
+00:11:24.280 --> 00:11:24.780
+file?
+
+00:11:27.740 --> 00:11:28.240
+[Speaker 1]: Yeah, so I haven't played around with EGLOT
+
+00:11:30.580 --> 00:11:30.960
+mode a ton, so I'm not 100% sure.
+
+00:11:33.920 --> 00:11:34.420
+I think all of the key bindings and commands,
+
+00:11:36.320 --> 00:11:36.820
+if you just install it out of the box,
+
+00:11:39.020 --> 00:11:39.520
+I Think they're different.
+
+00:11:41.440 --> 00:11:41.840
+So I don't think there's like any like
+
+00:11:44.760 --> 00:11:45.040
+overlap as far as that stuff goes but you
+
+00:11:47.520 --> 00:11:47.900
+will have the overlap of like you entered,
+
+00:11:49.780 --> 00:11:49.960
+like you started a major mode for like some
+
+00:11:51.500 --> 00:11:51.720
+language, like they'll both probably start
+
+00:11:53.040 --> 00:11:53.540
+the language server and provide diagnostics
+
+00:11:55.320 --> 00:11:55.580
+and everything. And so then now you're
+
+00:11:58.180 --> 00:11:58.320
+getting like, you're just like doubling the
+
+00:11:59.340 --> 00:11:59.680
+work your computer is doing.
+
+00:12:00.480 --> 00:12:00.980
+So there's that conflict.
+
+00:12:04.160 --> 00:12:04.360
+But if you prefer EGLOT mode or LSP mode for
+
+00:12:05.200 --> 00:12:05.700
+like 1 language or framework,
+
+00:12:09.060 --> 00:12:09.440
+like 1 major mode and LSP mode for the other,
+
+00:12:10.600 --> 00:12:11.100
+I think you should be fine.
+
+00:12:14.680 --> 00:12:14.860
+[Speaker 0]: All right. Just to let you know,
+
+00:12:20.460 --> 00:12:20.640
+we have like 1 minute on the stream and then
+
+00:12:22.540 --> 00:12:23.040
+we'll switch back and to the pre-recorded
+
+00:12:24.000 --> 00:12:24.500
+stuff I guess.
+
+00:12:27.440 --> 00:12:27.740
+[Speaker 2]: Yeah yeah yeah let's hi sorry for the rude
+
+00:12:29.440 --> 00:12:29.620
+interruption but I'm just doing a little bit
+
+00:12:31.700 --> 00:12:32.060
+of time keeping so thank you so much Austin
+
+00:12:34.340 --> 00:12:34.540
+sadly I wasn't able to follow the Q&A because
+
+00:12:36.280 --> 00:12:36.780
+I was in the other track answering questions.
+
+00:12:39.960 --> 00:12:40.360
+If, Austin, you want to stay and answer some
+
+00:12:41.580 --> 00:12:42.080
+more questions, feel free to do so.
+
+00:12:45.920 --> 00:12:46.220
+People tend to start talking as soon as we go
+
+00:12:48.400 --> 00:12:48.740
+off air, And I wouldn't be surprised with LSP
+
+00:12:49.540 --> 00:12:50.040
+that people would do the same.
+
+00:12:52.800 --> 00:12:53.040
+We're gonna move on for this track.
+
+00:12:54.840 --> 00:12:55.040
+We're gonna move on in 20 seconds to the next
+
+00:12:56.920 --> 00:12:57.420
+1. So Floey, thank you for hosting.
+
+00:12:58.680 --> 00:12:59.180
+Austin, thank you for all your answers.
+
+00:13:01.460 --> 00:13:01.960
+And We'll see you in a bit.
+
+00:13:04.740 --> 00:13:05.140
+[Speaker 1]: Cool. Thanks. See you.
+
+00:13:06.700 --> 00:13:07.200
+[Speaker 0]: Thanks for the Q&A.
+
+00:13:10.120 --> 00:13:10.440
+[Speaker 2]: All right. All right. You are now off air.
+
+00:13:11.400 --> 00:13:11.720
+Thank you so much, Austin.
+
+00:13:13.100 --> 00:13:13.200
+I'm going to go back running in the
+
+00:13:13.940 --> 00:13:14.100
+background. And thank you,
+
+00:13:14.700 --> 00:13:15.200
+Flowey, for everything.
+
+00:13:20.900 --> 00:13:21.400
+[Speaker 0]: And thanks. Yeah. Have a nice,
+
+00:13:23.160 --> 00:13:23.660
+probably a nice day at your work.
+
+00:13:24.140 --> 00:13:24.240
+[Speaker 1]: Yeah, no worries. Yeah.
+
+00:13:26.380 --> 00:13:26.680
+Yeah, it's still it's like lunchtime for me.
+
+00:13:28.100 --> 00:13:28.600
+[Speaker 0]: So okay, here, it's like,
+
+00:13:34.380 --> 00:13:34.700
+09:00. 9pm. Thanks for the talk.
+
+00:13:36.300 --> 00:13:36.600
+Sorry for the inconvenience was not having
+
+00:13:37.540 --> 00:13:38.040
+any, any questions, really.
+
+00:13:39.000 --> 00:13:39.380
+[Speaker 1]: So yeah. Oh yeah, no worries.
+
+00:13:41.100 --> 00:13:41.280
+It's like, there's like no documentation on
+
+00:13:42.940 --> 00:13:43.380
+any of this stuff. So I didn't really expect
+
+00:13:43.380 --> 00:13:43.880
+any.
+
+00:13:47.220 --> 00:13:47.560
+[Speaker 0]: Yeah, I was kind of interested when I jumped
+
+00:13:51.000 --> 00:13:51.140
+into NeoVim. I write it 1 or 2 things on my
+
+00:13:53.140 --> 00:13:53.320
+own, but never really got really deep into
+
+00:13:54.520 --> 00:13:54.960
+it. And you're gonna see with like compiler
+
+00:13:55.920 --> 00:13:56.140
+design and stuff like this,
+
+00:13:57.400 --> 00:13:57.900
+but not really specific.
+
+00:13:58.320 --> 00:13:58.820
+So I was
+
+00:14:00.860 --> 00:14:01.240
+[Speaker 1]: kind of- Yeah, that's the hard part.
+
+00:14:02.440 --> 00:14:02.880
+It's like, it's, LSP is cool,
+
+00:14:05.020 --> 00:14:05.200
+but then you have to like deal with all the
+
+00:14:06.760 --> 00:14:07.200
+like compiler stuff and programming language
+
+00:14:07.200 --> 00:14:07.700
+theory.
+
+00:14:10.600 --> 00:14:10.800
+[Speaker 0]: So yeah. So it's, it shouldn't be too
+
+00:14:13.280 --> 00:14:13.660
+complicated. I had not really a question,
+
+00:14:14.700 --> 00:14:15.140
+so, but it worked out fine.
+
+00:14:16.500 --> 00:14:17.000
+Thanks for the Q and A.
+
+00:14:18.560 --> 00:14:19.060
+And if I have any questions to Oak Hamill,
+
+00:14:20.640 --> 00:14:21.140
+Elderspeak will get an email from you.
+
+00:14:21.560 --> 00:14:22.060
+[Speaker 1]: Oh yeah, definitely.
+
+00:14:23.500 --> 00:14:24.000
+[Speaker 0]: Dan?
diff --git a/2023/captions/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--main--chapters.vtt b/2023/captions/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--main--chapters.vtt
new file mode 100644
index 00000000..93edc9fb
--- /dev/null
+++ b/2023/captions/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--main--chapters.vtt
@@ -0,0 +1,56 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:16.539
+Introduction
+
+00:00:16.540 --> 00:00:40.719
+What is Semgrep?
+
+00:00:40.720 --> 00:01:37.879
+How do we show security bugs early?
+
+00:01:37.880 --> 00:02:29.039
+What is the Language Server Protocol?
+
+00:02:29.040 --> 00:03:42.759
+Case study: Rust Analyzer
+
+00:03:42.760 --> 00:04:09.959
+Rust Analyzer in action
+
+00:04:09.960 --> 00:05:36.219
+Why is this useful?
+
+00:05:36.220 --> 00:06:40.699
+So what about Emacs?
+
+00:06:40.700 --> 00:07:58.759
+Technical part - Brief communication overview
+
+00:07:58.760 --> 00:08:03.379
+Example request
+
+00:08:03.380 --> 00:09:23.379
+LSP capabilities
+
+00:09:23.380 --> 00:11:03.479
+Tips on writing a LS
+
+00:11:03.480 --> 00:12:05.999
+Supporting a LS through LSP mode in Emacs
+
+00:12:06.000 --> 00:13:07.299
+Create a client
+
+00:13:07.300 --> 00:14:11.679
+Add to list of client packages
+
+00:14:11.680 --> 00:14:17.879
+Add documentation!
+
+00:14:17.880 --> 00:15:01.359
+Adding commands and custom capabilities
+
+00:15:01.360 --> 00:16:03.920
+Thanks for listening
diff --git a/2023/captions/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--main.vtt b/2023/captions/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--main.vtt
new file mode 100644
index 00000000..cce4f460
--- /dev/null
+++ b/2023/captions/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--main.vtt
@@ -0,0 +1,1180 @@
+WEBVTT captioned by sachac, checked by sachac
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:01.839
+Hi, I'm Austin Theriault,
+
+00:00:01.840 --> 00:00:04.159
+and this is writing a language server in OCaml
+
+00:00:04.160 --> 00:00:07.639
+for Emacs, fun, and profit.
+
+00:00:07.640 --> 00:00:08.919
+Real quick, who am I?
+
+00:00:08.920 --> 00:00:10.919
+Well, I'm a software engineer at Semgrep.
+
+00:00:10.920 --> 00:00:13.239
+I work on our editor integrations,
+
+00:00:13.240 --> 00:00:15.359
+and I love working on programming languages, editors,
+
+00:00:15.360 --> 00:00:16.539
+and cryptography.
+
+NOTE What is Semgrep?
+
+00:00:16.540 --> 00:00:17.799
+What is Semgrep?
+
+00:00:17.800 --> 00:00:20.039
+We're a small cybersecurity startup
+
+00:00:20.040 --> 00:00:21.919
+whose core product is a SaaS tool,
+
+00:00:21.920 --> 00:00:24.759
+which is static application security testing.
+
+00:00:24.760 --> 00:00:27.799
+You can think of it as like a security linter.
+
+00:00:27.800 --> 00:00:30.119
+Normal linters will say, hey,
+
+00:00:30.120 --> 00:00:31.919
+you wrote ugly code, fix it.
+
+00:00:31.920 --> 00:00:35.079
+We'll say, hey, you wrote a SQL injection, fix that.
+
+00:00:35.080 --> 00:00:36.959
+We support 30+ languages,
+
+00:00:36.960 --> 00:00:39.319
+and we have lots of customers all using different IDEs.
+
+00:00:39.320 --> 00:00:40.719
+Why does that matter?
+
+NOTE How do we show security bugs early?
+
+00:00:40.720 --> 00:00:42.779
+Well, our goal is to show security bugs
+
+00:00:42.780 --> 00:00:45.239
+as early as possible in the development cycle.
+
+00:00:45.240 --> 00:00:48.479
+In the industry, we call this shifting left.
+
+00:00:48.480 --> 00:00:52.959
+And so how far left can we shift? The editor.
+
+00:00:52.960 --> 00:00:53.619
+So that's why it matters
+
+00:00:53.620 --> 00:00:56.079
+that our customers have different editors.
+
+00:00:56.080 --> 00:00:58.919
+Our goal is to have Semgrep and the editor
+
+00:00:58.920 --> 00:01:01.319
+show up like other language tooling.
+
+00:01:01.320 --> 00:01:05.199
+And what I mean by that is I wrote some bad OCaml up here,
+
+00:01:05.200 --> 00:01:07.599
+and the editor gave me that red squiggly and said,
+
+00:01:07.600 --> 00:01:12.199
+fix your OCaml, and we want Semgrep to do something similar.
+
+00:01:12.200 --> 00:01:15.519
+And so our goal then is to provide a similar experience
+
+00:01:15.520 --> 00:01:16.919
+to normal language checking.
+
+00:01:16.920 --> 00:01:18.999
+And then since we're a small startup,
+
+00:01:19.000 --> 00:01:22.079
+and there's a ton of different IDEs that our customers use,
+
+00:01:22.080 --> 00:01:24.919
+ideally, we don't want to have to rewrite a plugin
+
+00:01:24.920 --> 00:01:27.559
+for every single type of editor out there.
+
+00:01:27.560 --> 00:01:29.159
+Our other goal is abstract away
+
+00:01:29.160 --> 00:01:32.119
+editing and language features for editors to one code base.
+
+00:01:32.120 --> 00:01:33.879
+Ideally, we write it once
+
+00:01:33.880 --> 00:01:35.799
+and then plug it into all of them.
+
+00:01:35.800 --> 00:01:37.879
+So how can we do that, though?
+
+NOTE What is the Language Server Protocol?
+
+00:01:37.880 --> 00:01:40.679
+Well, in the process of working on this stuff,
+
+00:01:40.680 --> 00:01:42.999
+I found out about
+
+00:01:43.000 --> 00:01:44.879
+the Language Server Protocol.
+
+00:01:44.880 --> 00:01:47.279
+And what's great about the Language Server Protocol is
+
+00:01:47.280 --> 00:01:50.319
+it's a specification that defines all the ways
+
+00:01:50.320 --> 00:01:52.679
+that these language tools might interact
+
+00:01:52.680 --> 00:01:56.879
+with a development tool. And by development tool,
+
+00:01:56.880 --> 00:02:01.599
+I mean like VS Code, Sublime, Emacs, any of those.
+
+00:02:01.600 --> 00:02:07.279
+And by language tool, I mean something like PyRight, MyPy.
+
+00:02:07.280 --> 00:02:09.319
+So what's cool about LSP is that
+
+00:02:09.320 --> 00:02:12.999
+you can separate out those tools into language servers
+
+00:02:13.000 --> 00:02:15.519
+and the development tools into language clients.
+
+00:02:15.520 --> 00:02:18.079
+And because they share this common specification,
+
+00:02:18.080 --> 00:02:20.359
+they can now interact without knowing each other.
+
+00:02:20.360 --> 00:02:22.799
+So it's this great abstraction that means
+
+00:02:22.800 --> 00:02:25.439
+all you have to do is go write one language server
+
+00:02:25.440 --> 00:02:27.439
+and you can hook it up to a bunch of language clients
+
+00:02:27.440 --> 00:02:29.039
+and it'll just work.
+
+NOTE Case study: Rust Analyzer
+
+00:02:29.040 --> 00:02:34.039
+So let's do a quick case study on language servers in LSP,
+
+00:02:34.040 --> 00:02:37.239
+just so you get an idea of why this is super cool.
+
+00:02:37.240 --> 00:02:40.439
+So there's this language server called Rust Analyzer.
+
+00:02:40.440 --> 00:02:42.879
+It's a language server for the Rust language.
+
+00:02:42.880 --> 00:02:44.119
+If you've ever developed in Rust,
+
+00:02:44.120 --> 00:02:46.959
+you'll know that takes a really long time to compile,
+
+00:02:46.960 --> 00:02:50.359
+but the compiler gives you fantastic feedback.
+
+00:02:50.360 --> 00:02:52.359
+Rust has a lot of advanced language features,
+
+00:02:52.360 --> 00:02:55.439
+so that feedback is super important for developing.
+
+00:02:55.440 --> 00:02:58.919
+And so Rust Analyzer will give you that feedback instantly.
+
+00:02:58.920 --> 00:03:01.119
+Here's a ton of things that it gives you.
+
+00:03:01.120 --> 00:03:05.079
+Code completion, fixes, compiler errors, warnings,
+
+00:03:05.080 --> 00:03:08.679
+type signatures. Rust has a pretty strong type system.
+
+00:03:08.680 --> 00:03:12.199
+It also has this thing called lifetimes.
+
+00:03:12.200 --> 00:03:15.079
+A bunch of advanced language features in Rust Analyzer
+
+00:03:15.080 --> 00:03:16.199
+helps you manage all that
+
+00:03:16.200 --> 00:03:17.439
+and gives you all that info
+
+00:03:17.440 --> 00:03:19.219
+without having to wait for it to compile.
+
+00:03:19.220 --> 00:03:21.519
+Developing with the Rust Analyzer
+
+00:03:21.520 --> 00:03:24.319
+is just orders of magnitude easier
+
+00:03:24.320 --> 00:03:26.519
+than just trying to write Rust straight.
+
+00:03:26.520 --> 00:03:30.919
+Rust Analyzer, fantastic. They went and they developed it,
+
+00:03:30.920 --> 00:03:33.639
+and now you can go use that in Emacs, NeoVim,
+
+00:03:33.640 --> 00:03:35.239
+VS Code, wherever.
+
+00:03:35.240 --> 00:03:39.079
+So you can develop Rust in a way that's relatively efficient
+
+00:03:39.080 --> 00:03:42.759
+without having to give up your favorite editor.
+
+NOTE Rust Analyzer in action
+
+00:03:42.760 --> 00:03:44.399
+So here's a quick little demo
+
+00:03:44.400 --> 00:03:46.319
+of all the cool things it can do.
+
+00:03:46.320 --> 00:03:48.119
+So you can see I typed an error.
+
+00:03:48.120 --> 00:03:50.719
+It tells me that I wrote an error.
+
+00:03:50.720 --> 00:03:52.519
+I used the incorrect lifetime,
+
+00:03:52.520 --> 00:03:54.159
+which is some advanced language feature,
+
+00:03:54.160 --> 00:03:55.159
+and it'll let me know that.
+
+00:03:55.160 --> 00:03:57.519
+I expanded a Rust macro just there,
+
+00:03:57.520 --> 00:03:59.239
+which is similar to Lisp macros,
+
+00:03:59.240 --> 00:04:01.359
+and then I ran a single unit test,
+
+00:04:01.360 --> 00:04:04.639
+and that's really cool because I ran a single unit test
+
+00:04:04.640 --> 00:04:05.439
+from my editor.
+
+00:04:05.440 --> 00:04:07.839
+I didn't have to go and type any commands or anything.
+
+00:04:07.840 --> 00:04:09.959
+It just worked.
+
+NOTE Why is this useful?
+
+00:04:09.960 --> 00:04:13.399
+So why is this just useful in general for a user?
+
+00:04:13.400 --> 00:04:15.799
+Well, you get the same experience across editors.
+
+00:04:15.800 --> 00:04:17.119
+Like I was saying, you don't have to give up
+
+00:04:17.120 --> 00:04:18.359
+one editor for another
+
+00:04:18.360 --> 00:04:21.719
+so you get some sort of cool language feature.
+
+00:04:21.720 --> 00:04:23.559
+You can easily set up and use language servers
+
+00:04:23.560 --> 00:04:24.599
+made for other editors
+
+00:04:24.600 --> 00:04:27.859
+if developers don't support your editor of choice.
+
+00:04:27.860 --> 00:04:31.239
+Performance is not dependent on the editor.
+
+00:04:31.240 --> 00:04:35.439
+That's fantastic because to do all that Rust stuff,
+
+00:04:35.440 --> 00:04:37.439
+it takes a lot of CPU power,
+
+00:04:37.440 --> 00:04:40.499
+and so that's going to be slow
+
+00:04:40.500 --> 00:04:43.679
+if your editor language is not great, not fast.
+
+00:04:43.680 --> 00:04:47.799
+And then bug fixes, updates, all that,
+
+00:04:47.800 --> 00:04:50.119
+it all comes out at the same time.
+
+00:04:50.120 --> 00:04:53.399
+And then from the developer perspective, well,
+
+00:04:53.400 --> 00:04:55.359
+adding new editors is quick and easy.
+
+00:04:55.360 --> 00:04:58.699
+For reference, when I wrote the Semgrep language server,
+
+00:04:58.700 --> 00:05:00.519
+it took me maybe two or three weeks,
+
+00:05:00.520 --> 00:05:03.999
+but then actually going and setting it up for VS Code,
+
+00:05:04.000 --> 00:05:06.439
+that took an hour. For Emacs, 30 minutes.
+
+00:05:06.440 --> 00:05:08.359
+IntelliJ, maybe another hour.
+
+00:05:08.360 --> 00:05:10.399
+So it took me a day to add support
+
+00:05:10.400 --> 00:05:11.879
+for three different editors,
+
+00:05:11.880 --> 00:05:14.799
+which was I think something like 75% of the market share
+
+00:05:14.800 --> 00:05:16.319
+or something crazy like that.
+
+00:05:16.320 --> 00:05:20.179
+So very quick. You only need one mental model.
+
+00:05:20.180 --> 00:05:21.079
+You don't have to figure out
+
+00:05:21.080 --> 00:05:23.959
+all these different extension mental models,
+
+00:05:23.960 --> 00:05:26.519
+how those editors work, anything like that.
+
+00:05:26.520 --> 00:05:28.639
+And another thing that's cool is
+
+00:05:28.640 --> 00:05:30.399
+you only have to write tests for the language server,
+
+00:05:30.400 --> 00:05:31.959
+not necessarily for the editor.
+
+00:05:31.960 --> 00:05:33.839
+It's great to have just one set of tests
+
+00:05:33.840 --> 00:05:36.219
+that you have to pass.
+
+NOTE So what about Emacs?
+
+00:05:36.220 --> 00:05:40.159
+So why does a language server protocol matter with Emacs?
+
+00:05:40.160 --> 00:05:42.379
+Well, like I was saying before,
+
+00:05:42.380 --> 00:05:45.479
+Emacs gets the benefit from work put into other editors.
+
+00:05:45.480 --> 00:05:47.759
+So we get all this language support,
+
+00:05:47.760 --> 00:05:51.119
+and no one actually has to go and write the list for it
+
+00:05:51.120 --> 00:05:53.199
+or write those tools specific to Emacs.
+
+00:05:53.200 --> 00:05:54.919
+You get the language tooling,
+
+00:05:54.920 --> 00:05:56.759
+the CPU-intensive part of the editors.
+
+00:05:56.760 --> 00:05:58.559
+It can be written in something else.
+
+00:05:58.560 --> 00:06:01.319
+Lisp is fast. It's not that fast.
+
+00:06:01.320 --> 00:06:04.719
+Having that speed is fantastic. It's all asynchronous.
+
+00:06:04.720 --> 00:06:06.439
+It won't slow down Emacs.
+
+00:06:06.440 --> 00:06:08.919
+And then there's this package called `lsp-mode`,
+
+00:06:08.920 --> 00:06:11.359
+which is an LSP client commonly included
+
+00:06:11.360 --> 00:06:13.319
+in popular Emacs distributions.
+
+00:06:13.320 --> 00:06:15.159
+So a lot of people already have that.
+
+00:06:15.160 --> 00:06:18.679
+If you're using Emacs 29 or greater, you have `eglot-mode`,
+
+00:06:18.680 --> 00:06:21.679
+which is a lighter weight version of `lsp-mode`.
+
+00:06:21.680 --> 00:06:24.239
+It's just another LSP client.
+
+00:06:24.240 --> 00:06:26.359
+When I wrote the Semgrep language server,
+
+00:06:26.360 --> 00:06:28.319
+Emacs 29 hadn't come out yet.
+
+00:06:28.320 --> 00:06:31.479
+I'm not going to talk too much about `eglot-mode`
+
+00:06:31.480 --> 00:06:33.299
+because I did everything in `lsp-mode`,
+
+00:06:33.300 --> 00:06:37.779
+but I would imagine a lot of this stuff is very similar.
+
+00:06:37.780 --> 00:06:40.699
+Here's a list of some supported languages.
+
+NOTE Technical part - Brief communication overview
+
+00:06:40.700 --> 00:06:42.639
+Now let's get into the technical part.
+
+00:06:42.640 --> 00:06:45.039
+How does LSP actually work?
+
+00:06:45.040 --> 00:06:47.159
+So let's go over how it communicates first.
+
+00:06:47.160 --> 00:06:49.759
+It uses JSONRPC,
+
+00:06:49.760 --> 00:06:51.959
+which is just kind of like HTTP,
+
+00:06:51.960 --> 00:06:54.619
+but instead of sending plain text, you're sending JSON.
+
+00:06:54.620 --> 00:06:56.439
+So it's just sending JSON back and forth.
+
+00:06:56.440 --> 00:06:58.539
+It's great because it's a way
+
+00:06:58.540 --> 00:06:59.959
+for two programs to communicate
+
+00:06:59.960 --> 00:07:02.839
+without sharing a common programming language.
+
+00:07:02.840 --> 00:07:04.959
+Transport platform agnostic,
+
+00:07:04.960 --> 00:07:07.079
+so it could be stdin, stdout,
+
+00:07:07.080 --> 00:07:09.399
+sockets, whatever. It's just JSON.
+
+00:07:09.400 --> 00:07:11.139
+You can send it over whatever.
+
+00:07:11.140 --> 00:07:12.719
+There's two different types of messages,
+
+00:07:12.720 --> 00:07:15.839
+a request, which requires a response from the other party,
+
+00:07:15.840 --> 00:07:19.259
+and a notification, which does not expect a response.
+
+00:07:19.260 --> 00:07:21.759
+So just a quick little example,
+
+00:07:21.760 --> 00:07:23.759
+a user might open a document,
+
+00:07:23.760 --> 00:07:28.079
+and then it'll send like a text document did open
+
+00:07:28.080 --> 00:07:30.199
+and what document it was to the language server,
+
+00:07:30.200 --> 00:07:31.079
+and then they'll change it.
+
+00:07:31.080 --> 00:07:35.079
+Maybe they edit some code and introduce a syntax error.
+
+00:07:35.080 --> 00:07:37.159
+The changes will be sent to the language server,
+
+00:07:37.160 --> 00:07:39.219
+and then the language server will publish diagnostics,
+
+00:07:39.220 --> 00:07:41.199
+which is those red squigglies
+
+00:07:41.200 --> 00:07:42.559
+I was talking about earlier,
+
+00:07:42.560 --> 00:07:45.459
+and say, hey, syntax error or whatever here,
+
+00:07:45.460 --> 00:07:46.919
+or maybe the user says,
+
+00:07:46.920 --> 00:07:49.159
+I want to go to the definition of this function,
+
+00:07:49.160 --> 00:07:51.239
+and then the language server will spit back,
+
+00:07:51.240 --> 00:07:53.799
+hey, this is where that function lives.
+
+00:07:53.800 --> 00:07:55.399
+All very useful,
+
+00:07:55.400 --> 00:07:57.719
+and the communication is relatively simple,
+
+00:07:57.720 --> 00:07:58.759
+which is great.
+
+NOTE Example request
+
+00:07:58.760 --> 00:08:01.239
+This is what it looks like, what a request looks like.
+
+00:08:01.240 --> 00:08:03.379
+Notifications look somewhat similar.
+
+NOTE LSP capabilities
+
+00:08:03.380 --> 00:08:05.879
+So now we know how LSP communication works,
+
+00:08:05.880 --> 00:08:09.859
+but how does the actual protocol work?
+
+00:08:09.860 --> 00:08:12.399
+Well, almost all of the protocol is opt-in,
+
+00:08:12.400 --> 00:08:15.839
+meaning you don't have to support the entire specification,
+
+00:08:15.840 --> 00:08:17.399
+you can just pick and choose.
+
+00:08:17.400 --> 00:08:19.839
+Servers and clients will then communicate
+
+00:08:19.840 --> 00:08:21.679
+what part of the protocol they both support,
+
+00:08:21.680 --> 00:08:22.679
+so they'll both say, hey,
+
+00:08:22.680 --> 00:08:26.359
+we support being notified when a user opens a document,
+
+00:08:26.360 --> 00:08:28.879
+or if they're looking for documentation.
+
+00:08:28.880 --> 00:08:33.799
+And so then once they agree upon what they'll both support,
+
+00:08:33.800 --> 00:08:35.199
+then they'll send that stuff,
+
+00:08:35.200 --> 00:08:38.579
+those notifications and requests back and forth.
+
+00:08:38.580 --> 00:08:41.319
+Things like opening and closing files, diagnostics,
+
+00:08:41.320 --> 00:08:46.039
+code completion, hovering over stuff, type signatures,
+
+00:08:46.040 --> 00:08:48.559
+all of that. And what's cool is
+
+00:08:48.560 --> 00:08:50.239
+even though the specification is huge
+
+00:08:50.240 --> 00:08:52.039
+and probably has everything you need,
+
+00:08:52.040 --> 00:08:54.479
+you can go ahead and add custom capabilities
+
+00:08:54.480 --> 00:08:55.519
+if you really want to.
+
+00:08:55.520 --> 00:08:57.979
+So you can just define a custom method,
+
+00:08:57.980 --> 00:09:01.359
+and then now that works for you,
+
+00:09:01.360 --> 00:09:03.519
+and now you can have that in all your editors.
+
+00:09:03.520 --> 00:09:04.559
+For example, Rust Analyzer
+
+00:09:04.560 --> 00:09:06.199
+has structural search and replace,
+
+00:09:06.200 --> 00:09:08.159
+which is like find and replace,
+
+00:09:08.160 --> 00:09:11.599
+but with respect to the structure of the code.
+
+00:09:11.600 --> 00:09:13.639
+And if you choose to go down this route
+
+00:09:13.640 --> 00:09:15.159
+with the custom capabilities,
+
+00:09:15.160 --> 00:09:16.659
+you do have to remember you're going to have to
+
+00:09:16.660 --> 00:09:18.699
+implement it in every client.
+
+00:09:18.700 --> 00:09:20.399
+And that's a little bit more work,
+
+00:09:20.400 --> 00:09:23.379
+but it's better than where we were without LSP.
+
+NOTE Tips on writing a LS
+
+00:09:23.380 --> 00:09:25.439
+So some quick tips on writing a language server.
+
+00:09:25.440 --> 00:09:27.479
+I'm not going to get too into this
+
+00:09:27.480 --> 00:09:30.799
+because it's very application-specific.
+
+00:09:30.800 --> 00:09:32.759
+I wrote Semgrep's in OCaml
+
+00:09:32.760 --> 00:09:35.119
+since our code base was almost all OCaml already,
+
+00:09:35.120 --> 00:09:36.599
+and I wanted to leverage that.
+
+00:09:36.600 --> 00:09:38.039
+Would not recommend
+
+00:09:38.040 --> 00:09:41.559
+unless you also have a code base all in OCaml.
+
+00:09:41.560 --> 00:09:43.639
+Structure is similar to a Rust server,
+
+00:09:43.640 --> 00:09:45.739
+so a bunch of independent endpoints.
+
+00:09:45.740 --> 00:09:48.639
+I would do everything functionally if I were you.
+
+00:09:48.640 --> 00:09:49.919
+This is EmacsConf.
+
+00:09:49.920 --> 00:09:53.399
+We're all hopefully used to writing functional Lisp.
+
+00:09:53.400 --> 00:09:56.239
+I would recommend TypeScript or Rust, though,
+
+00:09:56.240 --> 00:09:58.319
+depending on your level of performance
+
+00:09:58.320 --> 00:10:00.839
+that you really need or whatever language
+
+00:10:00.840 --> 00:10:02.254
+you're trying to support ideally.
+
+00:10:02.255 --> 00:10:03.399
+Most languages have
+
+00:10:03.400 --> 00:10:06.499
+some sort of language server protocol already.
+
+00:10:06.500 --> 00:10:09.199
+But if they don't, then it might be easier
+
+00:10:09.200 --> 00:10:10.159
+to do it in that language.
+
+00:10:10.160 --> 00:10:12.799
+TypeScript has a lot of support, a lot of documentation,
+
+00:10:12.800 --> 00:10:14.159
+a lot of examples out there
+
+00:10:14.160 --> 00:10:17.679
+because it was what Microsoft originally intended
+
+00:10:17.680 --> 00:10:20.919
+the language server protocol to be for, for VS Code,
+
+00:10:20.920 --> 00:10:22.079
+which is written in TypeScript.
+
+00:10:22.080 --> 00:10:24.439
+Rust is fast, it's going to take more effort,
+
+00:10:24.440 --> 00:10:28.519
+but it's very fast, and Rust Analyzer has a great library
+
+00:10:28.520 --> 00:10:30.279
+that they use and that they support.
+
+00:10:30.280 --> 00:10:32.799
+So support there, examples there are great.
+
+00:10:32.800 --> 00:10:35.839
+The hard part is not really the language server protocol,
+
+00:10:35.840 --> 00:10:38.999
+but the actual logic. So, like, if you're doing, like,
+
+00:10:39.000 --> 00:10:40.199
+language tooling, you're going to have to do
+
+00:10:40.200 --> 00:10:42.679
+analysis on the code, so you need to do parsing,
+
+00:10:42.680 --> 00:10:46.999
+possibly compiling, all these different advanced features,
+
+00:10:47.000 --> 00:10:48.959
+all these advanced different things.
+
+00:10:48.960 --> 00:10:52.519
+For example, Rust Analyzer will do incremental compilation,
+
+00:10:52.520 --> 00:10:54.319
+which is really, really cool,
+
+00:10:54.320 --> 00:10:58.119
+but that's, like, a whole separate talk.
+
+00:10:58.120 --> 00:11:00.319
+If you're adapting an existing language tool,
+
+00:11:00.320 --> 00:11:01.679
+this stuff is really easy.
+
+00:11:01.680 --> 00:11:03.479
+You're basically just wiring stuff up.
+
+NOTE Supporting a LS through LSP mode in Emacs
+
+00:11:03.480 --> 00:11:08.359
+But, yeah. So, now we know all about
+
+00:11:08.360 --> 00:11:10.799
+LSP and language servers.
+
+00:11:10.800 --> 00:11:11.879
+Say you want to actually
+
+00:11:11.880 --> 00:11:14.079
+add support for a language server in Emacs.
+
+00:11:14.080 --> 00:11:19.159
+How do you do that? Well, let's look at LSP mode,
+
+00:11:19.160 --> 00:11:21.519
+because, like I said, this is what I'm most familiar with.
+
+00:11:21.520 --> 00:11:24.259
+I'm sure `eglot-mode` is pretty similar.
+
+00:11:24.260 --> 00:11:27.479
+So, `lsp-mode`'s repository is on GitHub,
+
+00:11:27.480 --> 00:11:31.499
+like everything, and it has a ton of different clients
+
+00:11:31.500 --> 00:11:34.439
+for a ton of different languages and frameworks and tools,
+
+00:11:34.440 --> 00:11:37.039
+like Semgrep, and these are available
+
+00:11:37.040 --> 00:11:39.739
+to anyone who installs LSP mode.
+
+00:11:39.740 --> 00:11:42.239
+Alternatively, you can make a separate package
+
+00:11:42.240 --> 00:11:43.679
+and just use LSP mode as a library,
+
+00:11:43.680 --> 00:11:45.479
+but I'm not going to focus on this,
+
+00:11:45.480 --> 00:11:47.879
+because there's already a ton of resources out there
+
+00:11:47.880 --> 00:11:50.799
+on packaging and Emacs.
+
+00:11:50.800 --> 00:11:54.559
+So, our steps, very quickly, are going to look like
+
+00:11:54.560 --> 00:11:58.299
+adding an Emacs Lisp file that contains some logic,
+
+00:11:58.300 --> 00:12:01.319
+add an entry somewhere, so we added a new client
+
+00:12:01.320 --> 00:12:03.719
+to the list of clients, and then do some documentation,
+
+00:12:03.720 --> 00:12:05.999
+because documentation's great.
+
+NOTE Create a client
+
+00:12:06.000 --> 00:12:07.639
+First, creating a client.
+
+00:12:07.640 --> 00:12:09.639
+In the `clients/` folder in `lsp-mode/`,
+
+00:12:09.640 --> 00:12:12.919
+literally just add, like, `lsp-` whatever it is,
+
+00:12:12.920 --> 00:12:15.759
+`require` the library, and register a client.
+
+00:12:15.760 --> 00:12:18.039
+Registering a client just means, like,
+
+00:12:18.040 --> 00:12:19.559
+saying what kind of connection it is.
+
+00:12:19.560 --> 00:12:21.479
+It's most likely going to be standard I/O,
+
+00:12:21.480 --> 00:12:24.359
+because that's pretty easy to implement,
+
+00:12:24.360 --> 00:12:26.839
+and then you just pass it the executable
+
+00:12:26.840 --> 00:12:29.559
+that you actually want to run.
+
+00:12:29.560 --> 00:12:31.719
+Say what the activation function is,
+
+00:12:31.720 --> 00:12:33.319
+so this is when the client should start,
+
+00:12:33.320 --> 00:12:36.239
+so you can specify the language
+
+00:12:36.240 --> 00:12:38.279
+or the major mode or whatever,
+
+00:12:38.760 --> 00:12:43.099
+and now your client will start whenever that's triggered,
+
+00:12:43.100 --> 00:12:45.639
+and then finally provide just a server ID,
+
+00:12:45.640 --> 00:12:48.579
+so that way it's easy to keep track of,
+
+00:12:48.580 --> 00:12:52.759
+and then run this LSP consistency check function.
+
+00:12:52.760 --> 00:12:56.579
+This just makes sure everything up there is good.
+
+00:12:56.580 --> 00:12:59.519
+You can do more advanced stuff with making an LSP client
+
+00:12:59.520 --> 00:13:01.199
+that I'm not going to get into,
+
+00:13:01.200 --> 00:13:03.799
+but just know that these aren't your only options,
+
+00:13:03.800 --> 00:13:07.299
+and then finally provide your client.
+
+NOTE Add to list of client packages
+
+00:13:07.300 --> 00:13:09.799
+Next, you just have to add your client
+
+00:13:09.800 --> 00:13:12.159
+to the list of clients that `lsp-mode` supports,
+
+00:13:12.160 --> 00:13:15.639
+and now you've added support for a whole new language,
+
+00:13:15.640 --> 00:13:17.719
+whole new framework, whole new tool to Emacs,
+
+00:13:17.720 --> 00:13:20.219
+and it's taking you, what, like, what is that,
+
+00:13:20.220 --> 00:13:23.639
+20 lines of Lisp? No, not even, like, 15.
+
+00:13:23.640 --> 00:13:26.639
+15 lines of Lisp, whole new language for Emacs.
+
+00:13:26.640 --> 00:13:31.599
+It's really exciting. Now that you have your client,
+
+00:13:31.600 --> 00:13:35.119
+let's do some documentation. Go fill out this, like, name,
+
+00:13:35.120 --> 00:13:37.919
+where the repository, the source code is,
+
+00:13:37.920 --> 00:13:39.599
+because free software is great,
+
+00:13:39.600 --> 00:13:42.179
+and you should open source your stuff.
+
+00:13:42.180 --> 00:13:44.199
+Specify the installation command.
+
+00:13:44.200 --> 00:13:45.399
+What's cool about this is
+
+00:13:45.400 --> 00:13:48.059
+this can be run automatically from Emacs,
+
+00:13:48.060 --> 00:13:50.319
+so if it's, like, `pip install pyright`, right,
+
+00:13:50.320 --> 00:13:53.399
+you can put that there, and Emacs will ask you,
+
+00:13:53.400 --> 00:13:55.279
+do you want to install the language server,
+
+00:13:55.280 --> 00:13:56.199
+and you can hit yes
+
+00:13:56.200 --> 00:13:59.539
+and users will just have it installed for them,
+
+00:13:59.540 --> 00:14:01.879
+and then you can say whether or not it's a debugger.
+
+00:14:01.880 --> 00:14:03.159
+This is completely separate,
+
+00:14:03.160 --> 00:14:05.119
+so there's this thing called DAP,
+
+00:14:05.120 --> 00:14:07.319
+which is the debugger adapter protocol,
+
+00:14:07.320 --> 00:14:09.679
+and it's similar to LSP but for debuggers,
+
+00:14:09.680 --> 00:14:11.679
+which is very cool,
+
+NOTE Add documentation!
+
+00:14:11.680 --> 00:14:14.599
+and then finally link to your documentation.
+
+00:14:14.600 --> 00:14:17.879
+Please, please document your stuff.
+
+NOTE Adding commands and custom capabilities
+
+00:14:17.880 --> 00:14:20.479
+If you want to add, like, a custom Emacs function
+
+00:14:20.480 --> 00:14:22.679
+or custom capabilities, it's super easy.
+
+00:14:22.680 --> 00:14:27.639
+It's literally just, like, calling a normal Emacs function.
+
+00:14:27.640 --> 00:14:30.559
+For example, Semgrep normally only scans files
+
+00:14:30.560 --> 00:14:34.199
+when you open them, but we added a Emacs function
+
+00:14:34.200 --> 00:14:36.719
+that will scan your entire project, right,
+
+00:14:36.720 --> 00:14:40.959
+and so that was just a client notification.
+
+00:14:40.960 --> 00:14:44.119
+It was just `lsp-notify` and then a custom method,
+
+00:14:44.120 --> 00:14:46.719
+and it's great because now you can just scan your project
+
+00:14:46.720 --> 00:14:48.719
+from a simple Emacs function.
+
+00:14:48.720 --> 00:14:52.119
+Requests, very similar to notifications.
+
+00:14:52.120 --> 00:14:56.079
+You send it and then pass it a lambda
+
+00:14:56.080 --> 00:14:58.459
+and do something with the result,
+
+00:14:58.460 --> 00:15:01.359
+and so that's adding custom capabilities.
+
+NOTE Thanks for listening
+
+00:15:01.360 --> 00:15:04.319
+That's pretty much it. Thank you for listening.
+
+00:15:04.320 --> 00:15:05.639
+Some resources here.
+
+00:15:05.640 --> 00:15:08.239
+These links are clickable if you get the PDF,
+
+00:15:08.240 --> 00:15:10.919
+if you get the slides. Semgrep: we're hiring!
+
+00:15:10.920 --> 00:15:12.119
+If you want to work on, like,
+
+00:15:12.120 --> 00:15:13.719
+programming language theory stuff,
+
+00:15:13.720 --> 00:15:18.119
+compilers, parsers, editors,
+
+00:15:18.120 --> 00:15:22.119
+email me or go look at our jobs.
+
+00:15:22.120 --> 00:15:25.119
+The LSP specification, this is, like, the holy Bible.
+
+00:15:25.120 --> 00:15:28.339
+It has all the specs, all the types, everything.
+
+00:15:28.340 --> 00:15:30.419
+`lsp-mode` and the docs.
+
+00:15:30.420 --> 00:15:33.279
+`lsp-mode`, right, that's where you want to add your client.
+
+00:15:33.280 --> 00:15:36.099
+The docs are great, super useful.
+
+00:15:36.100 --> 00:15:38.079
+Rust Analyzer is just a great reference
+
+00:15:38.080 --> 00:15:39.919
+for language servers in general
+
+00:15:39.920 --> 00:15:42.119
+if you want to write one or if you just want to, like,
+
+00:15:42.120 --> 00:15:45.399
+see how they work. It's all just really well done.
+
+00:15:45.400 --> 00:15:47.039
+It's great code, very readable.
+
+00:15:47.040 --> 00:15:50.479
+And then down here is just a long video tutorial,
+
+00:15:50.480 --> 00:15:54.699
+a longer video tutorial, not by me,
+
+00:15:54.700 --> 00:15:58.439
+by someone else, on how to add a language client to Emacs,
+
+00:15:58.440 --> 00:16:00.679
+but hopefully this is sufficient for y'all,
+
+00:16:01.480 --> 00:16:03.920
+and now it's time for some Q&A.
diff --git a/2023/captions/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--main--chapters.vtt b/2023/captions/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--main--chapters.vtt
new file mode 100644
index 00000000..80483399
--- /dev/null
+++ b/2023/captions/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--main--chapters.vtt
@@ -0,0 +1,17 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:01:40.719
+Introduction
+
+00:01:40.720 --> 00:02:23.599
+What is an LLM?
+
+00:02:23.600 --> 00:05:11.700
+Using this library
+
+00:05:11.701 --> 00:08:00.159
+Further instructions
+
+00:08:00.160 --> 00:09:33.480
+Room for improvement
diff --git a/2023/captions/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--main.vtt b/2023/captions/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--main.vtt
new file mode 100644
index 00000000..a01ffd80
--- /dev/null
+++ b/2023/captions/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--main.vtt
@@ -0,0 +1,602 @@
+WEBVTT captioned by sachac, checked by sachac
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:03.039
+Hi, my name is Abhinav and I'm going to talk about
+
+00:00:03.040 --> 00:00:06.199
+this tool that I've been working on called MatplotLLM.
+
+00:00:06.200 --> 00:00:09.519
+MatplotLLM is a natural language interface
+
+00:00:09.520 --> 00:00:12.479
+over matplotlib, which is a library I use a lot
+
+00:00:12.480 --> 00:00:14.439
+for making visualizations.
+
+00:00:14.440 --> 00:00:18.679
+It's a pretty common Python library used a lot everywhere
+
+00:00:18.680 --> 00:00:22.479
+where there's need of plotting and graphing.
+
+00:00:22.480 --> 00:00:25.359
+I usually use it in reports.
+
+00:00:25.360 --> 00:00:27.359
+Whenever I'm writing a report in org mode,
+
+00:00:27.360 --> 00:00:31.559
+I tend to write a code block which is in Python.
+
+00:00:31.560 --> 00:00:34.079
+And then that code block has usage of matplotlib
+
+00:00:34.080 --> 00:00:35.999
+to produce some reports.
+
+00:00:36.000 --> 00:00:38.319
+That works really well.
+
+00:00:38.320 --> 00:00:39.999
+But at times what happens is
+
+00:00:40.000 --> 00:00:43.959
+I have to make a very custom graph, let's say.
+
+00:00:43.960 --> 00:00:46.919
+And then while I'm writing a report,
+
+00:00:46.920 --> 00:00:50.679
+it's kind of a huge leap of abstraction
+
+00:00:50.680 --> 00:00:51.519
+when I'm working on text
+
+00:00:51.520 --> 00:00:54.879
+versus going into actual low-level matplotlib code
+
+00:00:54.880 --> 00:00:56.239
+to do that graphing.
+
+00:00:56.240 --> 00:00:59.679
+So that's something I don't want to do.
+
+00:00:59.680 --> 00:01:00.479
+Here's an example.
+
+00:01:00.480 --> 00:01:03.999
+This is a graph which is... I think it was made
+
+00:01:04.000 --> 00:01:05.839
+like five or six years back.
+
+00:01:05.840 --> 00:01:08.399
+And then there are some common things
+
+00:01:08.400 --> 00:01:09.959
+like scatter plot here,
+
+00:01:09.960 --> 00:01:12.239
+the dots that you can see here scattered.
+
+00:01:12.240 --> 00:01:16.279
+Then... But there are a few things which, to do them,
+
+00:01:16.280 --> 00:01:19.159
+to make them, you will actually have to go--at least me,
+
+00:01:19.160 --> 00:01:20.839
+I have to go to the documentation
+
+00:01:20.840 --> 00:01:24.119
+and figure out how to do it. Which is fine,
+
+00:01:24.120 --> 00:01:26.519
+but I don't want to do this, you know,
+
+00:01:26.520 --> 00:01:29.199
+spend so much time here, when I'm working on
+
+00:01:29.200 --> 00:01:32.319
+a tight deadline for a report.
+
+00:01:32.320 --> 00:01:33.919
+That's the motivation for this tool.
+
+00:01:33.920 --> 00:01:35.199
+This tool basically allows me
+
+00:01:35.200 --> 00:01:38.479
+to get rid of the complexity of the library
+
+00:01:38.480 --> 00:01:40.719
+by working via an LLM.
+
+NOTE What is an LLM?
+
+00:01:40.720 --> 00:01:43.399
+So an LLM is a large language model.
+
+00:01:43.400 --> 00:01:45.079
+These are models which are
+
+00:01:45.080 --> 00:01:49.399
+trained to produce text, generate text.
+
+00:01:49.400 --> 00:01:51.519
+And just by doing that,
+
+00:01:51.520 --> 00:01:55.079
+they actually end up learning a lot of common patterns.
+
+00:01:55.080 --> 00:01:56.799
+For example, if you ask a question,
+
+00:01:56.800 --> 00:01:58.919
+you can actually get a reasonable response.
+
+00:01:58.920 --> 00:02:00.759
+If you ask to write a code for something,
+
+00:02:00.760 --> 00:02:01.879
+you'll actually get code
+
+00:02:01.880 --> 00:02:04.759
+which can also be very reasonable.
+
+00:02:04.760 --> 00:02:06.599
+So this tool is basically a wrapper
+
+00:02:06.600 --> 00:02:10.999
+that uses an LLM. For the current version,
+
+00:02:11.000 --> 00:02:13.919
+we use GPT-4, which is OpenAI's model.
+
+00:02:13.920 --> 00:02:17.919
+It's not open in the sense of open source.
+
+00:02:17.920 --> 00:02:21.119
+So that's a problem that it has.
+
+00:02:21.120 --> 00:02:23.599
+But for this version, we are going to use that.
+
+NOTE Using this library
+
+00:02:23.600 --> 00:02:25.479
+Using this library is pretty simple.
+
+00:02:25.480 --> 00:02:27.399
+You basically require the library
+
+00:02:27.400 --> 00:02:30.719
+and then you set up your OpenAI API key here.
+
+00:02:30.720 --> 00:02:33.359
+Then you get a code block
+
+00:02:33.360 --> 00:02:35.759
+where you can specify the language as `matplotllm`.
+
+00:02:35.760 --> 00:02:38.279
+And then what you can do is,
+
+00:02:38.280 --> 00:02:40.799
+you can basically describe what you want
+
+00:02:40.800 --> 00:02:41.799
+in natural language.
+
+00:02:41.800 --> 00:02:45.279
+I'll take this example of this data set.
+
+00:02:45.280 --> 00:02:48.599
+It's called the Health and Wealth of Nations.
+
+00:02:48.600 --> 00:02:49.639
+I think that was
+
+00:02:49.640 --> 00:02:51.399
+the name of a visualization where it was used.
+
+00:02:51.400 --> 00:02:53.399
+This is basically life expectancy,
+
+00:02:53.400 --> 00:02:59.279
+GDP of various countries starting from 1800.
+
+00:02:59.280 --> 00:03:02.719
+I think it goes up to 2000 somewhere.
+
+00:03:02.720 --> 00:03:07.479
+So earlier, I would try to write code which reads this CSV
+
+00:03:07.480 --> 00:03:09.839
+and then does a lot of matplotlib stuff
+
+00:03:09.840 --> 00:03:11.679
+and then finally produces a graph.
+
+00:03:11.680 --> 00:03:13.879
+But with this tool, what I'll do is
+
+00:03:13.880 --> 00:03:17.679
+I'll just provide instructions in two forms.
+
+00:03:17.680 --> 00:03:18.879
+So the first thing I'll do is
+
+00:03:18.880 --> 00:03:21.359
+I'll just describe how the data looks like.
+
+00:03:21.360 --> 00:03:29.039
+So I'll say data is in a file called `data.csv`,
+
+00:03:29.040 --> 00:03:33.159
+which is this file, by the way, on the right.
+
+00:03:33.160 --> 00:03:39.799
+It looks like the following.
+
+00:03:39.800 --> 00:03:44.359
+I just pasted a few lines from the top, which is enough.
+
+00:03:44.360 --> 00:03:47.119
+Since it's a CSV, there's already a structure to it.
+
+00:03:47.120 --> 00:03:50.079
+But let's say if you have a log file
+
+00:03:50.080 --> 00:03:53.759
+where there's more complexities to be parsed and all,
+
+00:03:53.760 --> 00:03:55.039
+that also works out really well.
+
+00:03:55.040 --> 00:03:58.079
+You just have to describe how the data looks like
+
+00:03:58.080 --> 00:04:01.159
+and the system will figure out how to work with this.
+
+00:04:01.160 --> 00:04:06.404
+Now, let's do the plotting. So what I can do is...
+
+00:04:06.405 --> 00:04:09.559
+Let's start from a very basic plot
+
+00:04:09.560 --> 00:04:11.620
+between life expectancy and GDP per capita.
+
+00:04:11.621 --> 00:04:13.800
+I'll just do this.
+
+00:04:13.801 --> 00:04:17.280
+"Can you make a scatter plot
+
+00:04:17.281 --> 00:04:26.399
+for life expectancy and GDP per capita?"
+
+00:04:26.400 --> 00:04:29.639
+Now, you can see there are some typos,
+
+00:04:29.640 --> 00:04:31.719
+and probably there will be some grammatical mistakes
+
+00:04:31.720 --> 00:04:32.919
+also coming through.
+
+00:04:32.920 --> 00:04:37.119
+But that's all OK, because the models are supposed to
+
+00:04:37.120 --> 00:04:40.559
+handle those kinds of situations really well.
+
+00:04:40.560 --> 00:04:43.239
+So I send the request to the model.
+
+00:04:43.240 --> 00:04:47.119
+Since it's a large model--GPT-4 is really large--
+
+00:04:47.120 --> 00:04:50.519
+it actually takes a lot of time to get the response back.
+
+00:04:50.520 --> 00:04:53.359
+So this specific response took 17 seconds,
+
+00:04:53.360 --> 00:04:54.239
+which is huge.
+
+00:04:54.240 --> 00:04:57.439
+It's not something you would expect
+
+00:04:57.440 --> 00:04:59.599
+in a local file running on a computer.
+
+00:04:59.600 --> 00:05:01.879
+But I've got what I wanted. Right.
+
+00:05:01.880 --> 00:05:04.119
+So there's a scatter plot here, as you can see below,
+
+00:05:04.120 --> 00:05:08.879
+which is plotting what I specified it to do,
+
+00:05:08.880 --> 00:05:11.700
+though it looks a little dense.
+
+NOTE Further instructions
+
+00:05:11.701 --> 00:05:12.640
+What I can do is
+
+00:05:12.641 --> 00:05:16.000
+I can provide further instructions as feedback.
+
+00:05:16.001 --> 00:05:18.400
+I try to feed back on this. So I can say,
+
+00:05:18.401 --> 00:05:30.599
+"Can you only show points where year is the multiple of 50?"
+
+00:05:30.600 --> 00:05:33.519
+So since it's starting from 1800, the data points,
+
+00:05:33.520 --> 00:05:34.719
+there are too many years,
+
+00:05:34.720 --> 00:05:37.239
+so I'll just try to thin them down a little.
+
+00:05:37.240 --> 00:05:40.199
+Now what's happening in the background
+
+00:05:40.200 --> 00:05:42.719
+is that everything below this last instruction
+
+00:05:42.720 --> 00:05:45.719
+is going out as the context to the model
+
+00:05:45.720 --> 00:05:47.399
+along with the code that it wrote till now.
+
+00:05:47.400 --> 00:05:50.079
+And then this instruction is added on top of it
+
+00:05:50.080 --> 00:05:53.079
+so that it basically modifies the code to make it work
+
+00:05:53.080 --> 00:05:55.079
+according to this instruction.
+
+00:05:55.080 --> 00:05:58.439
+As you can see now, the data points are much fewer.
+
+00:05:58.440 --> 00:06:01.519
+This is what I wanted also.
+
+00:06:01.520 --> 00:06:02.799
+Let's also do a few more things.
+
+00:06:02.800 --> 00:06:05.439
+I want to see the progression through time.
+
+00:06:05.440 --> 00:06:13.079
+So maybe I'll do something like, color more recent years
+
+00:06:13.080 --> 00:06:15.439
+with a darker shade of...
+
+00:06:15.440 --> 00:06:21.719
+Let's change the color map also.
+
+00:06:21.720 --> 00:06:24.159
+Now, this again goes back to the model.
+
+00:06:24.160 --> 00:06:26.799
+Again, everything below before this line
+
+00:06:26.800 --> 00:06:29.119
+is the context along with the current code,
+
+00:06:29.120 --> 00:06:31.799
+and then this instruction is going to the model
+
+00:06:31.800 --> 00:06:37.039
+to make the changes. So now this should happen, I guess.
+
+00:06:37.040 --> 00:06:41.319
+Once this happens. Yeah. So. OK.
+
+00:06:41.320 --> 00:06:44.599
+So we have this new color map,
+
+00:06:44.600 --> 00:06:46.599
+and there's also this change of color.
+
+00:06:46.600 --> 00:06:51.719
+And also there's this range of color from 1800 to 2000,
+
+00:06:51.720 --> 00:06:53.399
+which is a nice addition.
+
+00:06:53.400 --> 00:06:55.839
+Kind of smart. I didn't expect...
+
+00:06:55.840 --> 00:06:58.959
+I didn't exactly ask for it, but it's nice.
+
+00:06:58.960 --> 00:07:00.959
+So there's a couple more things.
+
+00:07:00.960 --> 00:07:07.759
+Let's make it more minimal. "Let's make it more minimal.
+
+00:07:07.760 --> 00:07:17.319
+Can you remove the bounding box?"
+
+00:07:17.320 --> 00:07:21.399
+Also, let's annotate a few points.
+
+00:07:21.400 --> 00:07:23.719
+So I want to annotate the point
+
+00:07:23.720 --> 00:07:25.839
+which has the highest GDP per capita.
+
+00:07:25.840 --> 00:07:33.599
+"Also annotate the point with highest GDP per capita
+
+00:07:33.600 --> 00:07:36.999
+with the country and year."
+
+00:07:37.000 --> 00:07:41.599
+So again, forget about the grammar.
+
+00:07:41.600 --> 00:07:43.599
+The language model works out well.
+
+00:07:43.600 --> 00:07:46.159
+Usually it takes care of
+
+00:07:46.160 --> 00:07:47.439
+all those complexities for you.
+
+00:07:47.440 --> 00:07:53.119
+This is what we have got after that.
+
+00:07:53.120 --> 00:07:55.719
+As you can see, there's the annotation, which is here.
+
+00:07:55.720 --> 00:07:56.679
+I think it's still overlapping,
+
+00:07:56.680 --> 00:07:58.559
+so probably it could be done better,
+
+00:07:58.560 --> 00:08:00.159
+but the box is removed.
+
+NOTE Room for improvement
+
+00:08:00.160 --> 00:08:03.359
+Now, as you can see, the system is...
+
+00:08:03.360 --> 00:08:04.879
+You will be able to see this
+
+00:08:04.880 --> 00:08:07.479
+that the system is not really robust.
+
+00:08:07.480 --> 00:08:10.079
+So the GitHub repository has some examples
+
+00:08:10.080 --> 00:08:12.119
+where it fails miserably,
+
+00:08:12.120 --> 00:08:13.679
+and you'll actually have to go into the code
+
+00:08:13.680 --> 00:08:14.999
+to figure out what's happening.
+
+00:08:15.000 --> 00:08:17.879
+But we do expect that to improve slowly,
+
+00:08:17.880 --> 00:08:21.039
+because the models are improving greatly in performance.
+
+00:08:21.040 --> 00:08:22.479
+This is a very general model.
+
+00:08:22.480 --> 00:08:24.479
+This is not even tuned for this use case.
+
+00:08:24.480 --> 00:08:26.639
+The other thing is that
+
+00:08:26.640 --> 00:08:29.639
+while I was trying to provide feedback,
+
+00:08:29.640 --> 00:08:32.199
+I was still using text here all the time,
+
+00:08:32.200 --> 00:08:34.559
+but it can be made more natural.
+
+00:08:34.560 --> 00:08:36.159
+So, for example, if I have to annotate
+
+00:08:36.160 --> 00:08:37.439
+this particular point,
+
+00:08:37.440 --> 00:08:42.239
+I actually can just point my cursor to it.
+
+00:08:42.240 --> 00:08:44.519
+Emacs has a way to figure out
+
+00:08:44.520 --> 00:08:45.799
+where your mouse pointer is.
+
+00:08:45.800 --> 00:08:49.620
+And with that, you can actually go back into the code
+
+00:08:49.621 --> 00:08:51.960
+and then see which primitive
+
+00:08:51.961 --> 00:08:54.480
+is being drawn here in Matplotlib.
+
+00:08:54.481 --> 00:08:55.719
+So that there is a way to do that.
+
+00:08:55.720 --> 00:08:58.439
+And then, if you do that, then it's really nice to
+
+00:08:58.440 --> 00:09:01.319
+just be able to say
+
+00:09:01.320 --> 00:09:04.279
+put your cursor here and then say something like,
+
+00:09:04.280 --> 00:09:04.999
+"Can you make this?
+
+00:09:05.000 --> 00:09:06.599
+Can you annotate this point?"
+
+00:09:06.600 --> 00:09:10.719
+Because text is, you know... There are limitations to text.
+
+00:09:10.720 --> 00:09:12.479
+And if you're producing an image,
+
+00:09:12.480 --> 00:09:13.959
+you should be able to do that, too.
+
+00:09:13.960 --> 00:09:16.399
+So I do expect that to happen soonish.
+
+00:09:16.400 --> 00:09:19.839
+If not, from the model side, the hack that I mentioned
+
+00:09:19.840 --> 00:09:21.359
+could be made to work.
+
+00:09:21.360 --> 00:09:24.439
+So that will come in in a later version, probably.
+
+00:09:24.440 --> 00:09:27.599
+Anyway, so that's the end of my talk.
+
+00:09:27.600 --> 00:09:29.759
+You can find more details in the repository link.
+
+00:09:29.760 --> 00:09:33.480
+Thank you for listening. Goodbye.
diff --git a/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 b/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
new file mode 100644
index 00000000..3fc25b4e
--- /dev/null
+++ b/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
@@ -0,0 +1,4486 @@
+WEBVTT
+
+
+00:00:09.480 --> 00:00:09.880
+[Speaker 0]: 2 seconds. And I think we are live.
+
+00:00:10.760 --> 00:00:11.260
+Hi, Jeremy, how are you doing?
+
+00:00:11.840 --> 00:00:12.040
+[Speaker 1]: All right. I'm doing all right.
+
+00:00:12.380 --> 00:00:12.880
+How about you?
+
+00:00:14.759 --> 00:00:15.060
+[Speaker 0]: I'm doing great as well.
+
+00:00:16.480 --> 00:00:16.640
+I'm really happy to see all the talk that
+
+00:00:18.600 --> 00:00:19.100
+we're having. And I was particularly excited
+
+00:00:21.880 --> 00:00:22.240
+when I got your proposal for this talk
+
+00:00:24.080 --> 00:00:24.279
+because mentoring, as I was telling you
+
+00:00:25.040 --> 00:00:25.540
+during the check-in process,
+
+00:00:27.360 --> 00:00:27.779
+is a subject dear to my heart.
+
+00:00:28.700 --> 00:00:29.200
+So I'm really excited,
+
+00:00:30.640 --> 00:00:30.920
+not only for the talk that you've just done,
+
+00:00:32.200 --> 00:00:32.360
+but also for the question that people are
+
+00:00:32.880 --> 00:00:33.380
+going to ask you.
+
+00:00:35.760 --> 00:00:36.020
+[Speaker 1]: Yeah, I'm looking forward to answering some
+
+00:00:39.600 --> 00:00:39.880
+questions. Mentoring is also something near
+
+00:00:43.860 --> 00:00:44.320
+and dear. Something I did not mention is when
+
+00:00:45.620 --> 00:00:45.820
+folks would ask me, like,
+
+00:00:47.000 --> 00:00:47.460
+what was your most important class?
+
+00:00:48.920 --> 00:00:49.199
+Or I said, oh, easy, easy,
+
+00:00:50.180 --> 00:00:50.680
+easy, high school English.
+
+00:00:54.160 --> 00:00:54.480
+Like, it's my whatever your primary written
+
+00:00:56.320 --> 00:00:56.820
+and spoken languages I think is the most
+
+00:00:58.860 --> 00:00:59.360
+useful skill as a programmer
+
+00:01:05.379 --> 00:01:05.580
+[Speaker 0]: right so as usual people if you want to ask
+
+00:01:09.520 --> 00:01:09.660
+questions to Jeremy, feel free to find the
+
+00:01:11.440 --> 00:01:11.940
+link to the other pad either on the talk page
+
+00:01:15.440 --> 00:01:15.720
+or on IRC. We're also going to open the chat
+
+00:01:17.320 --> 00:01:17.720
+so that people can join us and ask questions.
+
+00:01:20.380 --> 00:01:20.660
+Let me just make sure that I tell Sasha can
+
+00:01:25.440 --> 00:01:25.580
+you open ID Mentor. All right so in the
+
+00:01:27.320 --> 00:01:27.520
+meantime what we'll do is that I'll be
+
+00:01:29.660 --> 00:01:29.860
+reading questions of the pad and Jeremy will
+
+00:01:31.400 --> 00:01:31.480
+be answering them whilst we wait for you to
+
+00:01:32.800 --> 00:01:33.280
+join. Now just to be clear with the time,
+
+00:01:34.640 --> 00:01:34.820
+we have a little bit of time now,
+
+00:01:36.040 --> 00:01:36.540
+a little more time than before.
+
+00:01:39.520 --> 00:01:39.720
+We have 22 minutes, so until 10 of the next
+
+00:01:41.260 --> 00:01:41.400
+hours to answer as many questions as
+
+00:01:42.520 --> 00:01:42.900
+possible. And believe me,
+
+00:01:45.040 --> 00:01:45.200
+if you people watching right now are not
+
+00:01:47.280 --> 00:01:47.440
+asking questions, I will be asking plenty of
+
+00:01:49.840 --> 00:01:50.340
+them. So please, save Jeremy from my
+
+00:01:53.800 --> 00:01:54.300
+[Speaker 1]: I look forward to it.
+
+00:01:55.320 --> 00:01:55.820
+[Speaker 0]: inquisitive mind. All right.
+
+00:01:56.960 --> 00:01:57.460
+Starting with the first question,
+
+00:01:59.240 --> 00:01:59.680
+a very trivial 1, perhaps,
+
+00:02:01.720 --> 00:02:01.920
+but always 1 that I ask myself when I look at
+
+00:02:03.840 --> 00:02:04.340
+a keyboard. Regarding super key,
+
+00:02:05.980 --> 00:02:06.480
+which key do you bind to super?
+
+00:02:09.620 --> 00:02:10.120
+[Speaker 1]: Yeah, so my left command,
+
+00:02:12.180 --> 00:02:12.680
+which is on a Mac keyboard,
+
+00:02:16.620 --> 00:02:17.120
+so the key right to the left of the space bar
+
+00:02:20.860 --> 00:02:21.000
+is super. And the key immediately to the
+
+00:02:23.000 --> 00:02:23.400
+right of spacebar, which is the right command
+
+00:02:24.320 --> 00:02:24.820
+key, is bound to hyper,
+
+00:02:28.140 --> 00:02:28.640
+which opens up a whole new suite of keys.
+
+00:02:31.080 --> 00:02:31.280
+And I thought it would take a little bit to
+
+00:02:33.160 --> 00:02:33.660
+get used to, but it's been amazing.
+
+00:02:37.800 --> 00:02:38.300
+So I definitely recommend having a hyper
+
+00:02:38.440 --> 00:02:38.940
+binding.
+
+00:02:42.440 --> 00:02:42.720
+[Speaker 0]: I will, yes. I was also going to say super
+
+00:02:43.860 --> 00:02:44.160
+binding. No, it's a hyper binding.
+
+00:02:44.800 --> 00:02:45.040
+We already have super.
+
+00:02:47.120 --> 00:02:47.280
+It's your Windows key or your Linux key or
+
+00:02:48.240 --> 00:02:48.740
+whatever you want to call it.
+
+00:02:51.140 --> 00:02:51.640
+But I will warn people though,
+
+00:02:57.720 --> 00:02:58.200
+it's the gateway into fancy keyboard setups
+
+00:03:00.900 --> 00:03:01.400
+because it starts, it's the Trojan horse of
+
+00:03:02.700 --> 00:03:03.140
+fancy keyboard setup. Just,
+
+00:03:04.320 --> 00:03:04.820
+oh I wish I could have another modifier.
+
+00:03:06.960 --> 00:03:07.280
+And then many years later,
+
+00:03:09.160 --> 00:03:09.280
+you find yourself with this little thing that
+
+00:03:11.260 --> 00:03:11.760
+I'm showing, which is a fully customized QMK
+
+00:03:12.100 --> 00:03:12.600
+keyboard.
+
+00:03:13.540 --> 00:03:14.040
+[Speaker 2]: All right.
+
+00:03:18.200 --> 00:03:18.700
+[Speaker 1]: Following on that, then meta is to the left
+
+00:03:21.880 --> 00:03:22.080
+of super, and then control is to the left of
+
+00:03:26.720 --> 00:03:26.940
+meta. And also, caps lock maps to control as
+
+00:03:31.380 --> 00:03:31.620
+well. Definitely tried a bunch of tap for
+
+00:03:35.460 --> 00:03:35.940
+this and that on a programmable keyboard,
+
+00:03:39.280 --> 00:03:39.520
+but I have settled on keep it simple and use
+
+00:03:41.580 --> 00:03:41.780
+something like carabiner elements to do most
+
+00:03:46.400 --> 00:03:46.640
+[Speaker 0]: Right. It's good that you were able to stop
+
+00:03:48.480 --> 00:03:48.760
+there. I wish I'd stopped there at some point
+
+00:03:50.940 --> 00:03:51.340
+[Speaker 1]: of the mapping. It was a terrible moment
+
+00:03:52.900 --> 00:03:53.000
+where I'm like, oh, what have I done when I
+
+00:03:53.760 --> 00:03:54.200
+was trying to type once?
+
+00:03:57.500 --> 00:03:58.000
+[Speaker 0]: in my life. All right,
+
+00:03:58.920 --> 00:03:59.420
+moving on to the next question.
+
+00:04:01.360 --> 00:04:01.560
+Great talk. What's the package you used to
+
+00:04:02.120 --> 00:04:02.620
+make the org slide?
+
+00:04:03.280 --> 00:04:03.740
+[Speaker 1]: So yeah, it's great. Yeah,
+
+00:04:13.680 --> 00:04:13.940
+so I am using Protz Logos and have,
+
+00:04:15.660 --> 00:04:16.160
+I think, like, Olivet mode.
+
+00:04:19.959 --> 00:04:20.140
+I'll post a link to the configuration for
+
+00:04:21.019 --> 00:04:21.260
+turning it on and off.
+
+00:04:24.280 --> 00:04:24.680
+But it's basically narrow region to an org
+
+00:04:27.940 --> 00:04:28.220
+heading, which is, I find that to be super
+
+00:04:30.300 --> 00:04:30.800
+helpful. Don't have to fiddle with it.
+
+00:04:32.900 --> 00:04:33.120
+[Speaker 0]: Right, just to be clear,
+
+00:04:34.920 --> 00:04:35.140
+it's Olivetti, right? I think that's the...
+
+00:04:36.460 --> 00:04:36.960
+[Speaker 1]: Oh yeah, Olivetti, yeah.
+
+00:04:39.960 --> 00:04:40.120
+[Speaker 0]: A typical Italian word that is really tough
+
+00:04:42.720 --> 00:04:42.880
+to pronounce between Europeans and people in
+
+00:04:46.080 --> 00:04:46.400
+[Speaker 1]: Yeah, I had a... For some reason I dropped
+
+00:04:48.940 --> 00:04:49.440
+the I at the end. So in my head
+
+00:04:52.660 --> 00:04:52.800
+[Speaker 0]: the US. Yeah, moving to the next question if
+
+00:04:54.440 --> 00:04:54.800
+people do get interested in picking up emacs
+
+00:04:56.520 --> 00:04:56.680
+because of what they see you do How do you
+
+00:04:58.260 --> 00:04:58.440
+recommend they say they get into it?
+
+00:04:58.440 --> 00:04:58.940
+Oh
+
+00:05:05.600 --> 00:05:06.020
+[Speaker 1]: Yeah, so I've been I think a lot of it comes
+
+00:05:09.620 --> 00:05:09.780
+down to what are the problems that they're
+
+00:05:11.600 --> 00:05:11.880
+trying to solve. And so I walked them through
+
+00:05:15.460 --> 00:05:15.660
+my journey. I worked in TextMate for a long
+
+00:05:16.980 --> 00:05:17.480
+time, then Sublime, then Atom.
+
+00:05:20.220 --> 00:05:20.720
+And then in 2020, I hopped over to Emacs,
+
+00:05:25.080 --> 00:05:25.580
+started writing in it and I chose Space Max
+
+00:05:26.680 --> 00:05:27.180
+and then I chose Doom.
+
+00:05:28.140 --> 00:05:28.640
+And then I was like, wait,
+
+00:05:33.080 --> 00:05:33.280
+start over, erase everything and just do the
+
+00:05:36.620 --> 00:05:36.760
+tutorial. So I did the tutorial and then I
+
+00:05:37.800 --> 00:05:38.000
+started writing and I was like,
+
+00:05:39.520 --> 00:05:40.020
+oh, I really want this functionality.
+
+00:05:43.380 --> 00:05:43.580
+And so I went and I looked for it and I
+
+00:05:44.060 --> 00:05:44.560
+installed the package.
+
+00:05:46.060 --> 00:05:46.560
+And then I got the functionality,
+
+00:05:47.960 --> 00:05:48.120
+went back to writing, and I'm like,
+
+00:05:49.920 --> 00:05:50.080
+oh, my editor should really be able to do
+
+00:05:52.000 --> 00:05:52.500
+this. And I thought about it.
+
+00:05:55.380 --> 00:05:55.520
+So a lot of it came down to the experience of
+
+00:05:56.320 --> 00:05:56.820
+what they're trying to accomplish.
+
+00:06:00.900 --> 00:06:01.260
+And really helping ask them that.
+
+00:06:04.600 --> 00:06:04.900
+I had 1 mentee had used Vim for a long time
+
+00:06:07.700 --> 00:06:07.940
+and then was exploring using Evil Mode and
+
+00:06:13.100 --> 00:06:13.260
+Emacs and we had conversations and it was
+
+00:06:16.840 --> 00:06:17.220
+like go back to Vim like you were using VS
+
+00:06:19.040 --> 00:06:19.280
+Code just go back to Vim and they went back
+
+00:06:20.980 --> 00:06:21.420
+to Vim and then they started writing,
+
+00:06:22.760 --> 00:06:23.260
+well, they went to NeoVim and they started
+
+00:06:27.620 --> 00:06:27.900
+writing Lua plugins for stuff and it just
+
+00:06:29.480 --> 00:06:29.980
+helped free them and they gained that
+
+00:06:31.320 --> 00:06:31.820
+ownership in their text editor.
+
+00:06:37.520 --> 00:06:37.660
+So I try to have them think through what are
+
+00:06:40.160 --> 00:06:40.440
+the common tasks that they're trying to
+
+00:06:44.180 --> 00:06:44.440
+accomplish and then thinking in terms of
+
+00:06:46.320 --> 00:06:46.480
+that. So instead of going and finding a
+
+00:06:48.340 --> 00:06:48.560
+solution, understand the problems they're
+
+00:06:52.180 --> 00:06:52.320
+experiencing, which tends to be what we
+
+00:06:53.360 --> 00:06:53.860
+should do in software development.
+
+00:06:57.720 --> 00:06:58.220
+Instead of implementing the solve a problem.
+
+00:07:02.000 --> 00:07:02.500
+Sometimes It's fun to implement an idea.
+
+00:07:04.840 --> 00:07:05.220
+[Speaker 0]: Yeah, I think it's really the crux,
+
+00:07:06.740 --> 00:07:07.120
+really, when it comes to software
+
+00:07:08.760 --> 00:07:09.060
+development, because what is at the crux of
+
+00:07:09.520 --> 00:07:09.960
+any kind of engineering?
+
+00:07:11.680 --> 00:07:11.840
+Well, it's the problem you're trying to
+
+00:07:13.480 --> 00:07:13.680
+solve. If you've got 2 islands and you need
+
+00:07:14.440 --> 00:07:14.860
+to join them up together,
+
+00:07:15.840 --> 00:07:16.340
+well, I need to build a bridge.
+
+00:07:17.160 --> 00:07:17.660
+Now, obviously with software,
+
+00:07:19.800 --> 00:07:19.940
+we have problems that defy the law of
+
+00:07:21.600 --> 00:07:21.840
+physics, which is great because we get very
+
+00:07:23.520 --> 00:07:23.720
+complex problems that are very exciting to
+
+00:07:26.380 --> 00:07:26.880
+solve. But when it comes to onboarding people
+
+00:07:28.180 --> 00:07:28.680
+into those ways of solving problems,
+
+00:07:29.540 --> 00:07:30.040
+well, I think mentoring,
+
+00:07:32.980 --> 00:07:33.480
+The key behind mentoring is that together,
+
+00:07:35.280 --> 00:07:35.460
+we're going to look at a problem and we're
+
+00:07:37.200 --> 00:07:37.680
+going to try to see how high would fix it.
+
+00:07:40.240 --> 00:07:40.740
+And you're going to try to appreciate whether
+
+00:07:42.280 --> 00:07:42.440
+this is something you would do as well or
+
+00:07:43.260 --> 00:07:43.760
+would like to do.
+
+00:07:50.080 --> 00:07:50.580
+[Speaker 1]: Yep, Absolutely. Yeah,
+
+00:07:54.340 --> 00:07:54.480
+it's really taking time to walk with them on
+
+00:07:56.500 --> 00:07:57.000
+the journey to understand what's frustrating
+
+00:07:59.700 --> 00:08:00.040
+them. I have a coworker we've been working
+
+00:08:01.240 --> 00:08:01.740
+together for a very long time.
+
+00:08:05.280 --> 00:08:05.780
+She is not a fast navigator of her editor,
+
+00:08:08.860 --> 00:08:09.200
+but as we've talked, that's not where she's
+
+00:08:09.960 --> 00:08:10.460
+looking to get better.
+
+00:08:17.380 --> 00:08:17.680
+She's looking to get better at asking the
+
+00:08:20.500 --> 00:08:20.740
+questions of the clients early so that we
+
+00:08:23.160 --> 00:08:23.660
+don't go down long paths of implementation.
+
+00:08:27.940 --> 00:08:28.320
+So it's been great because she's not looking
+
+00:08:29.820 --> 00:08:30.060
+to get better at her text editor.
+
+00:08:32.500 --> 00:08:33.000
+She's adequate for how she navigates.
+
+00:08:34.700 --> 00:08:34.900
+Other people look and they're like,
+
+00:08:35.740 --> 00:08:36.179
+man, I want to do it faster.
+
+00:08:36.820 --> 00:08:37.120
+I want to do it different.
+
+00:08:37.840 --> 00:08:38.340
+I want to do it better.
+
+00:08:39.480 --> 00:08:39.980
+And then we have a different conversation.
+
+00:08:44.480 --> 00:08:44.720
+[Speaker 0]: Right. All right. Moving on to the next
+
+00:08:46.960 --> 00:08:47.320
+question. I've been using Emacs for about 30
+
+00:08:49.120 --> 00:08:49.240
+years and I find it really difficult to
+
+00:08:50.860 --> 00:08:51.200
+figure out how to help people get started
+
+00:08:54.400 --> 00:08:54.600
+with it So I guess my question is the same as
+
+00:08:55.680 --> 00:08:55.900
+the green question right about it.
+
+00:08:57.900 --> 00:08:58.100
+I think it's slightly different though You
+
+00:09:00.860 --> 00:09:01.360
+could it is more about well go on please.
+
+00:09:01.500 --> 00:09:02.000
+Yeah
+
+00:09:06.900 --> 00:09:07.400
+[Speaker 1]: so My wife a while ago,
+
+00:09:10.680 --> 00:09:11.180
+talked about the idea of,
+
+00:09:15.860 --> 00:09:16.260
+relative to anybody, I am an expert or
+
+00:09:19.020 --> 00:09:19.200
+slightly more informed on a topic than the
+
+00:09:20.380 --> 00:09:20.880
+person quote behind me.
+
+00:09:22.360 --> 00:09:22.600
+And there's a person ahead of me who's
+
+00:09:24.240 --> 00:09:24.740
+slightly more informed than I am.
+
+00:09:27.880 --> 00:09:28.120
+And so what we're looking at is perhaps with
+
+00:09:28.820 --> 00:09:29.320
+30 years of experience,
+
+00:09:32.580 --> 00:09:32.780
+introducing someone to Emacs might be
+
+00:09:35.780 --> 00:09:35.920
+difficult because you've you're too much of
+
+00:09:41.120 --> 00:09:41.320
+an expert. So maybe the there's a an idea of
+
+00:09:42.380 --> 00:09:42.880
+like what are the principles of pedagogy.
+
+00:09:45.180 --> 00:09:45.360
+I know we that was talked about yesterday in
+
+00:09:47.180 --> 00:09:47.300
+a presentation about like here's a
+
+00:09:49.160 --> 00:09:49.280
+constraint, you're using Emacs for the
+
+00:09:54.660 --> 00:09:54.880
+course. But so it's that idea of sharing what
+
+00:09:56.880 --> 00:09:57.380
+you have, where you're at,
+
+00:10:00.220 --> 00:10:00.720
+will, I think by nature,
+
+00:10:03.360 --> 00:10:03.860
+move the entire queue of people,
+
+00:10:04.940 --> 00:10:05.380
+like they don't really exist.
+
+00:10:06.380 --> 00:10:06.680
+I mean, they do, but they don't.
+
+00:10:08.600 --> 00:10:09.100
+Behind you, it'll help move them together
+
+00:10:10.320 --> 00:10:10.820
+forward just a little bit.
+
+00:10:13.440 --> 00:10:13.940
+And maybe we all move the condition together.
+
+00:10:17.760 --> 00:10:18.240
+So It's not a only 1 person kind of thing.
+
+00:10:22.120 --> 00:10:22.540
+It's a mindset of improving shared
+
+00:10:22.540 --> 00:10:23.040
+understanding.
+
+00:10:26.520 --> 00:10:26.640
+[Speaker 0]: Exactly, and I'd like to come back on
+
+00:10:28.180 --> 00:10:28.680
+something that you mentioned in your answer,
+
+00:10:30.940 --> 00:10:31.440
+because it's, you know,
+
+00:10:33.060 --> 00:10:33.460
+what the person asking the question
+
+00:10:35.240 --> 00:10:35.740
+mentioned, 30 years of advance,
+
+00:10:36.620 --> 00:10:36.860
+basically, on starting Emacs.
+
+00:10:37.900 --> 00:10:38.400
+You know, that's a lot of time,
+
+00:10:40.600 --> 00:10:41.020
+And you tend to equate this to a massive gap
+
+00:10:42.440 --> 00:10:42.940
+in terms of skills between the 2 people.
+
+00:10:47.600 --> 00:10:47.840
+And whilst it's obvious that would be a gap
+
+00:10:50.280 --> 00:10:50.460
+of skills. You know, I find that learning in
+
+00:10:54.960 --> 00:10:55.460
+terms of pedagogy works best when the person
+
+00:10:58.180 --> 00:10:58.320
+doing the teaching is very close in terms of
+
+00:11:00.380 --> 00:11:00.880
+skill levels to the person being taught.
+
+00:11:02.620 --> 00:11:03.120
+Why is it the case? It's because it's much
+
+00:11:05.660 --> 00:11:05.800
+fresher in their memory what are the
+
+00:11:08.100 --> 00:11:08.300
+different elements that they have to go
+
+00:11:09.440 --> 00:11:09.940
+through to acquire a particular skill.
+
+00:11:12.440 --> 00:11:12.940
+To go a little bit into the theory,
+
+00:11:14.640 --> 00:11:15.060
+I'm not sure if you're familiar with Vygotsky
+
+00:11:16.380 --> 00:11:16.860
+or at least the I plus 1.
+
+00:11:17.640 --> 00:11:17.860
+Are you familiar with this,
+
+00:11:20.540 --> 00:11:21.040
+[Speaker 1]: I am not, go on.
+
+00:11:22.600 --> 00:11:23.000
+[Speaker 0]: Jeremy? So I used to be a teacher before,
+
+00:11:24.520 --> 00:11:24.960
+and it's 1 of the things they taught us.
+
+00:11:26.920 --> 00:11:27.340
+It's about the fact that when you are trying
+
+00:11:28.900 --> 00:11:29.400
+to make someone acquire a skill,
+
+00:11:31.840 --> 00:11:32.340
+I represents the current knowledge,
+
+00:11:34.960 --> 00:11:35.160
+and plus 1 is the thing that you should be
+
+00:11:38.920 --> 00:11:39.060
+teaching them and the theory behind it is
+
+00:11:41.820 --> 00:11:42.040
+that it's much easier to teach someone to
+
+00:11:44.260 --> 00:11:44.500
+teach something to someone when they only
+
+00:11:46.100 --> 00:11:46.460
+have to focus on plus 1 i.e.
+
+00:11:48.460 --> 00:11:48.900
+Something that is very close nearby to them
+
+00:11:50.580 --> 00:11:50.840
+If you go with something that is I plus 2,
+
+00:11:53.240 --> 00:11:53.740
+I plus 3, or god forbid I plus 10,
+
+00:11:55.760 --> 00:11:55.960
+it's going to be much harder for them to get
+
+00:11:58.100 --> 00:11:58.360
+to the understanding because the distance is
+
+00:12:01.720 --> 00:12:01.960
+much greater. And that's why I think
+
+00:12:05.000 --> 00:12:05.320
+mentoring can be taken in 2 ways.
+
+00:12:07.740 --> 00:12:07.860
+It could be a mentor who's merely ahead of
+
+00:12:10.380 --> 00:12:10.760
+you by plus 1, or it could be a mentor that
+
+00:12:12.040 --> 00:12:12.440
+is ahead of you by plus 10,
+
+00:12:14.380 --> 00:12:14.640
+but who has the understanding of what plus 1,
+
+00:12:15.800 --> 00:12:16.300
+plus 2, and plus 3 is.
+
+00:12:22.680 --> 00:12:23.160
+[Speaker 1]: Yeah, and it can be very challenging to
+
+00:12:27.400 --> 00:12:27.540
+unwind that. I know if we think about all of
+
+00:12:33.540 --> 00:12:33.740
+our hands or input methods have a memory of
+
+00:12:35.920 --> 00:12:36.120
+something that I honestly couldn't tell you
+
+00:12:38.440 --> 00:12:38.940
+what it is. Right? Like,
+
+00:12:40.240 --> 00:12:40.740
+I know how to do it on a keyboard,
+
+00:12:43.480 --> 00:12:43.980
+right? We've internalized so much.
+
+00:12:47.900 --> 00:12:48.040
+And so, yeah, how to walk backward is a
+
+00:12:51.940 --> 00:12:52.200
+distinct challenge and being curious with
+
+00:12:55.600 --> 00:12:56.100
+them and close to them and not asking,
+
+00:13:00.300 --> 00:13:00.800
+trying to diffuse questions and not ask like
+
+00:13:03.120 --> 00:13:03.620
+leading, not overly leading.
+
+00:13:09.280 --> 00:13:09.780
+An example, early on in my mentoring career,
+
+00:13:11.260 --> 00:13:11.760
+I was working in a community project,
+
+00:13:14.280 --> 00:13:14.480
+and I really wanted to go in and say to
+
+00:13:18.000 --> 00:13:18.500
+everybody, why do we suck at sharing code?
+
+00:13:21.020 --> 00:13:21.520
+But instead I said, wait a minute,
+
+00:13:24.880 --> 00:13:25.080
+what would be the question I could ask the
+
+00:13:27.680 --> 00:13:28.180
+group in which I could then ask my question?
+
+00:13:30.320 --> 00:13:30.720
+So instead I went into the group and I said,
+
+00:13:32.560 --> 00:13:33.060
+how are we doing about sharing code?
+
+00:13:37.120 --> 00:13:37.620
+And collectively, we were able to establish
+
+00:13:39.200 --> 00:13:39.700
+we didn't feel very good about it.
+
+00:13:42.740 --> 00:13:43.240
+And that conversation now 9 years ago,
+
+00:13:47.020 --> 00:13:47.300
+helped move a process along for the last,
+
+00:13:50.220 --> 00:13:50.380
+like it gave it energy for 9 years of how
+
+00:13:51.560 --> 00:13:52.060
+we're sharing and how we're approaching
+
+00:13:58.260 --> 00:13:58.760
+stuff. So yeah, the curious questions are
+
+00:14:00.060 --> 00:14:00.560
+super helpful.
+
+00:14:04.440 --> 00:14:04.940
+[Speaker 0]: All right, lovely way to finish this point.
+
+00:14:06.940 --> 00:14:07.200
+We have about 10 more minutes so I'm glad
+
+00:14:08.600 --> 00:14:08.800
+that we have a little bit of extra time to
+
+00:14:10.640 --> 00:14:10.920
+answer the questions because we have a little
+
+00:14:13.740 --> 00:14:13.940
+more. All right, I'm gonna switch to the next
+
+00:14:15.160 --> 00:14:15.480
+question we can come back to people reacting
+
+00:14:16.720 --> 00:14:17.220
+to what you just said a little bit later.
+
+00:14:17.440 --> 00:14:17.640
+[Speaker 2]: Sure.
+
+00:14:20.640 --> 00:14:20.860
+[Speaker 0]: All right, have you encountered anyone that
+
+00:14:23.760 --> 00:14:24.000
+are being negative about the fact that you're
+
+00:14:26.400 --> 00:14:26.600
+using Emacs, assuming that they just don't
+
+00:14:28.740 --> 00:14:28.940
+know or have misconceptions about Emacs and
+
+00:14:30.340 --> 00:14:30.700
+nothing malicious? If so,
+
+00:14:32.220 --> 00:14:32.720
+how do you handle these kinds of people?
+
+00:14:40.640 --> 00:14:40.840
+[Speaker 1]: Sure, So at work, I get a gentle elbowing of
+
+00:14:42.720 --> 00:14:43.220
+like, oh, Jeremy's going to talk about Emacs
+
+00:14:45.900 --> 00:14:46.400
+again. So it's not entirely...
+
+00:14:50.600 --> 00:14:51.100
+Maybe it's a little dismissive,
+
+00:14:56.840 --> 00:14:57.340
+but I don't actually care because like it's
+
+00:15:00.160 --> 00:15:00.240
+like being, I don't know,
+
+00:15:02.360 --> 00:15:02.480
+it's like being made fun of for using a
+
+00:15:03.560 --> 00:15:04.060
+particular type of pen.
+
+00:15:05.680 --> 00:15:06.180
+Like goal is to write something,
+
+00:15:09.080 --> 00:15:09.580
+right? And I'm using a pen that gives me joy.
+
+00:15:11.740 --> 00:15:12.240
+When I talk with my mentees,
+
+00:15:14.240 --> 00:15:14.440
+like I want to meet them exactly where
+
+00:15:16.980 --> 00:15:17.200
+they're at with their code and like what
+
+00:15:20.860 --> 00:15:21.260
+they're comfortable with and help them remove
+
+00:15:23.100 --> 00:15:23.600
+any of that potential like inadequacy,
+
+00:15:27.800 --> 00:15:27.980
+sense of inadequacy or imposter syndrome or
+
+00:15:32.980 --> 00:15:33.480
+any of those things because The goal is to,
+
+00:15:36.380 --> 00:15:36.880
+for me, to be better at computering.
+
+00:15:39.800 --> 00:15:40.300
+Like hop on my computer.
+
+00:15:45.060 --> 00:15:45.220
+I want to be able to use it at a speed of
+
+00:15:47.680 --> 00:15:47.800
+thought that doesn't introduce a lot of
+
+00:15:50.660 --> 00:15:51.160
+friction. Another speaker talked about that
+
+00:15:54.000 --> 00:15:54.200
+using HyperBowl and a couple of plugins to
+
+00:15:55.260 --> 00:15:55.760
+write stream of consciousness.
+
+00:15:57.980 --> 00:15:58.480
+And that was an important consideration.
+
+00:16:01.060 --> 00:16:01.380
+I want my text editor to flow with me.
+
+00:16:02.160 --> 00:16:02.420
+And so I'm like, well,
+
+00:16:03.560 --> 00:16:04.060
+Emacs flows with me smooth.
+
+00:16:08.220 --> 00:16:08.720
+Like you can deride it all you want.
+
+00:16:09.960 --> 00:16:10.360
+It doesn't thread very well,
+
+00:16:12.080 --> 00:16:12.580
+but it's just me on this machine.
+
+00:16:14.120 --> 00:16:14.440
+I don't need it to overly thread,
+
+00:16:15.720 --> 00:16:16.220
+at least for my use cases.
+
+00:16:22.340 --> 00:16:22.600
+[Speaker 0]: Yeah, I can only agree 100% with what you've
+
+00:16:25.800 --> 00:16:26.300
+just said. And it's very easy to dismiss
+
+00:16:28.860 --> 00:16:29.160
+stuff like Vim or Emacs based on the very
+
+00:16:31.260 --> 00:16:31.760
+trite sentences that everyone use.
+
+00:16:32.440 --> 00:16:32.640
+But at the end of the day,
+
+00:16:33.540 --> 00:16:34.040
+I really like what you said.
+
+00:16:36.280 --> 00:16:36.780
+Those are just pencil that we're using to
+
+00:16:39.000 --> 00:16:39.280
+express ourselves. And we're doing something
+
+00:16:41.820 --> 00:16:42.080
+a little more fancy than just writing words
+
+00:16:43.680 --> 00:16:44.180
+on a page. But ultimately,
+
+00:16:46.480 --> 00:16:46.880
+It's just text at the very bottom.
+
+00:16:48.560 --> 00:16:49.060
+So whatever helps us write this test,
+
+00:16:50.540 --> 00:16:51.040
+this text more easily,
+
+00:16:52.960 --> 00:16:53.460
+you know, it's always good.
+
+00:16:56.680 --> 00:16:56.980
+Yeah. All right. Moving on to the next
+
+00:16:59.360 --> 00:16:59.820
+question. I love the attitudes and worldview
+
+00:17:02.980 --> 00:17:03.160
+that infuse your blog post and your talk this
+
+00:17:05.400 --> 00:17:05.900
+weekend. Learn something every week.
+
+00:17:08.400 --> 00:17:08.680
+It's cumulative. English class was the most
+
+00:17:11.319 --> 00:17:11.520
+important. What other advice do you have and
+
+00:17:13.680 --> 00:17:13.859
+how is it generalizable to those of us who
+
+00:17:14.440 --> 00:17:14.940
+are not devs?
+
+00:17:26.280 --> 00:17:26.780
+[Speaker 1]: Sure. So I think 1 of the really big changes
+
+00:17:29.140 --> 00:17:29.320
+for me, and I talked about this in the
+
+00:17:34.700 --> 00:17:35.200
+writing Q&A, is switching my blog from a
+
+00:17:38.160 --> 00:17:38.480
+topical 1 about role-playing games and board
+
+00:17:43.320 --> 00:17:43.480
+games into anything that I think I want to
+
+00:17:47.220 --> 00:17:47.440
+write. And that shift happened about the time
+
+00:17:50.380 --> 00:17:50.560
+that I was really exploring using Emacs for
+
+00:17:54.060 --> 00:17:54.560
+writing. And so previously I had,
+
+00:17:57.860 --> 00:17:58.360
+I would write blog posts in Markdown using,
+
+00:18:00.560 --> 00:18:01.060
+or I would write it in the web interface.
+
+00:18:06.820 --> 00:18:07.060
+And getting to the point where my writing was
+
+00:18:08.480 --> 00:18:08.980
+the same as my coding,
+
+00:18:12.040 --> 00:18:12.540
+was the same as my RSS consumption,
+
+00:18:15.060 --> 00:18:15.560
+was the same of a lot of these things,
+
+00:18:21.260 --> 00:18:21.560
+freed up my general interests so that they
+
+00:18:23.860 --> 00:18:24.360
+all can kind of play in that space.
+
+00:18:27.660 --> 00:18:27.940
+So and that's the, I think,
+
+00:18:33.080 --> 00:18:33.540
+Feynman said, like, his notes are his
+
+00:18:35.860 --> 00:18:36.360
+thoughts. It's not him thinking,
+
+00:18:38.480 --> 00:18:38.980
+I mean, they are him thinking as well.
+
+00:18:40.680 --> 00:18:41.180
+So it's really framing it that way.
+
+00:18:44.180 --> 00:18:44.680
+And then for not devs,
+
+00:18:49.060 --> 00:18:49.240
+My daughter has been doing screenwriting and
+
+00:18:53.180 --> 00:18:53.480
+she just had her school license for the tool
+
+00:18:54.720 --> 00:18:55.220
+that they use for writing screenplays.
+
+00:18:57.400 --> 00:18:57.660
+She had to pay for it on her own.
+
+00:18:59.540 --> 00:18:59.680
+And I was like, hey, let's take a look at
+
+00:19:01.000 --> 00:19:01.500
+Emacs. There's a package for this.
+
+00:19:03.320 --> 00:19:03.820
+Maybe it makes sense to you.
+
+00:19:09.520 --> 00:19:09.720
+So I think the, really to summarize it is
+
+00:19:12.280 --> 00:19:12.780
+like the broad curiosity in like,
+
+00:19:14.320 --> 00:19:14.820
+I have a liberal arts degree,
+
+00:19:20.920 --> 00:19:21.420
+I have barely any computer science classwork
+
+00:19:23.940 --> 00:19:24.400
+practice. I have a lot of practical
+
+00:19:26.200 --> 00:19:26.700
+experience doing software development,
+
+00:19:28.320 --> 00:19:28.820
+but theory is minimal.
+
+00:19:32.400 --> 00:19:32.520
+Instead, I look to things like Lord of the
+
+00:19:35.340 --> 00:19:35.840
+Rings or role-playing games or poetry or
+
+00:19:40.520 --> 00:19:41.020
+history or whatever and be curious and Then
+
+00:19:47.260 --> 00:19:47.760
+be playful The introduction of git locally
+
+00:19:51.060 --> 00:19:51.340
+where I can just have a Git repo means my
+
+00:19:56.960 --> 00:19:57.340
+text is recoverable. I don't,
+
+00:19:59.060 --> 00:19:59.320
+I can play. I'll just break it,
+
+00:20:00.320 --> 00:20:00.800
+I'll change it. It's software,
+
+00:20:02.860 --> 00:20:03.360
+let it be soft. It's not hard.
+
+00:20:05.740 --> 00:20:06.100
+It can be hard to work with it,
+
+00:20:08.080 --> 00:20:08.520
+but let it be soft. Let it be pruned,
+
+00:20:09.780 --> 00:20:10.120
+let it go away, let it die,
+
+00:20:11.200 --> 00:20:11.700
+let it come back.
+
+00:20:16.360 --> 00:20:16.800
+[Speaker 0]: Yeah, That's a lovely attitude to have.
+
+00:20:20.980 --> 00:20:21.160
+I mean, I've already talked about my past as
+
+00:20:23.680 --> 00:20:23.860
+an English major in 1 of the EmacsConf talks,
+
+00:20:26.520 --> 00:20:26.780
+but just like you, I don't have a comp sci
+
+00:20:30.140 --> 00:20:30.200
+education. I just started with needing a
+
+00:20:32.120 --> 00:20:32.620
+better pen, and that was about 10 years ago.
+
+00:20:36.660 --> 00:20:37.020
+And now I find myself hosting Emacs Cons,
+
+00:20:38.760 --> 00:20:39.140
+but it was a very incremental process,
+
+00:20:40.160 --> 00:20:40.660
+a very cumulative process,
+
+00:20:42.720 --> 00:20:43.220
+to reuse the word that we used before.
+
+00:20:48.480 --> 00:20:48.740
+And What I also like about people outside of
+
+00:20:49.640 --> 00:20:50.140
+CompSight using Emacs,
+
+00:20:53.300 --> 00:20:53.480
+and we've got plenty of such examples in the
+
+00:20:54.940 --> 00:20:55.320
+presentations we've had this year,
+
+00:20:57.720 --> 00:20:57.940
+but also last year, is that you get so many
+
+00:21:00.540 --> 00:21:00.920
+different windows into how people are using
+
+00:21:03.400 --> 00:21:03.480
+Emacs, and it kind of harks back to what I
+
+00:21:06.340 --> 00:21:06.560
+was saying before about Emacs being a
+
+00:21:08.380 --> 00:21:08.880
+platform with many horizontal packages
+
+00:21:10.560 --> 00:21:11.060
+permitting any kind of workflow imaginable
+
+00:21:13.580 --> 00:21:14.080
+and some people are going to gravitate
+
+00:21:16.280 --> 00:21:16.640
+towards old mode. I think it was your sister
+
+00:21:18.520 --> 00:21:19.020
+that you mentioned that was looking into
+
+00:21:20.760 --> 00:21:21.260
+packages for writing screenplays.
+
+00:21:23.220 --> 00:21:23.520
+Well, we've got such a thing in Emacs.
+
+00:21:26.260 --> 00:21:26.760
+I mean, a screenplay is just a monospace font
+
+00:21:27.900 --> 00:21:28.400
+with some fancy formatting.
+
+00:21:29.300 --> 00:21:29.800
+It's not very complicated.
+
+00:21:32.460 --> 00:21:32.960
+And if you can get behind,
+
+00:21:36.280 --> 00:21:36.720
+you know, someone using such a stable format
+
+00:21:38.480 --> 00:21:38.940
+for writing screenplay with many rules,
+
+00:21:40.680 --> 00:21:40.840
+but ultimately all the screenplay look the
+
+00:21:42.520 --> 00:21:42.780
+same, well, Emacs is kind of just the same.
+
+00:21:45.060 --> 00:21:45.480
+It's about standardizing the way you edit
+
+00:21:47.760 --> 00:21:48.000
+text. So I think your sister was already half
+
+00:21:51.420 --> 00:21:51.760
+[Speaker 1]: Yeah, it was my it was my my daughter.
+
+00:21:52.720 --> 00:21:52.840
+I'm trying to sell her on.
+
+00:21:53.320 --> 00:21:53.800
+[Speaker 0]: on the idea. Oh, no, sorry.
+
+00:21:56.200 --> 00:21:56.640
+[Speaker 1]: Yeah, she also picked up programming just 1
+
+00:21:58.140 --> 00:21:58.640
+day and was like, I forget that.
+
+00:22:01.360 --> 00:22:01.860
+Like she was playing with a stage manager
+
+00:22:03.420 --> 00:22:03.580
+programming thing or like have a little
+
+00:22:04.640 --> 00:22:05.140
+avatars moving around.
+
+00:22:11.280 --> 00:22:11.480
+And so she's got a predisposition to like the
+
+00:22:15.620 --> 00:22:16.020
+craft of things. And I think that's another
+
+00:22:18.320 --> 00:22:18.820
+aspect is like, I'm not,
+
+00:22:21.080 --> 00:22:21.580
+I mean, I appreciate science.
+
+00:22:23.040 --> 00:22:23.540
+I'm here for a scientific approach,
+
+00:22:27.940 --> 00:22:28.440
+but I also Really enjoy the craft of things
+
+00:22:32.500 --> 00:22:33.000
+Playing with it Like this is my playground.
+
+00:22:36.000 --> 00:22:36.180
+I love kind of hacking on it and looking at
+
+00:22:39.160 --> 00:22:39.360
+packages and Seeing how I might use it pick
+
+00:22:42.120 --> 00:22:42.340
+it up for a little bit and then maybe I
+
+00:22:42.880 --> 00:22:43.380
+forget about it
+
+00:22:47.940 --> 00:22:48.440
+[Speaker 0]: Right, well Jeremy I think that was Lovely
+
+00:22:49.860 --> 00:22:50.180
+finish. Oh, sorry plasma.
+
+00:22:51.380 --> 00:22:51.760
+Oh, sorry. I thought he was someone on Mumble
+
+00:22:54.640 --> 00:22:54.780
+talking to me. I'm actually going to have to
+
+00:22:56.200 --> 00:22:56.600
+be sorry because we only have about 50
+
+00:22:58.000 --> 00:22:58.320
+seconds until we move on to the next talk.
+
+00:22:59.600 --> 00:23:00.040
+But please, Plasma Strike,
+
+00:23:01.120 --> 00:23:01.560
+If you want to ask your question to Jeremy,
+
+00:23:02.720 --> 00:23:03.220
+by all means, stay in the room.
+
+00:23:04.120 --> 00:23:04.620
+[Speaker 1]: Yep, I'll be here.
+
+00:23:07.640 --> 00:23:07.900
+[Speaker 0]: And we'll be recording all of this and we'll
+
+00:23:09.440 --> 00:23:09.940
+put this later on the talk page.
+
+00:23:12.440 --> 00:23:12.560
+So Jeremy, I'll have to say bye now because I
+
+00:23:13.660 --> 00:23:14.160
+need to prepare the next room.
+
+00:23:16.320 --> 00:23:16.440
+But It was lovely talking with you and thank
+
+00:23:17.040 --> 00:23:17.540
+you for all your answers.
+
+00:23:19.040 --> 00:23:19.540
+[Speaker 1]: Absolutely. Thank you.
+
+00:23:21.220 --> 00:23:21.720
+[Speaker 0]: Bye-bye. Bye.
+
+NOTE Start of section to review
+
+00:23:26.400 --> 00:23:26.580
+[Speaker 2]: See you. Hello. One of the things with Emacs is
+
+00:23:28.740 --> 00:23:28.900
+it's not... It's like when you change the
+
+00:23:30.860 --> 00:23:31.260
+file management, you just change very,
+
+00:23:33.480 --> 00:23:33.980
+very small amounts of what exactly you need,
+
+00:23:38.040 --> 00:23:38.360
+you want to change. Like you go from text
+
+00:23:43.440 --> 00:23:43.860
+editing to your file manager,
+
+00:23:44.720 --> 00:23:45.220
+you're not changing your theme,
+
+00:23:46.680 --> 00:23:47.180
+you're not changing your font.
+
+00:23:49.940 --> 00:23:50.060
+[Speaker 3]: And you
+
+00:23:52.360 --> 00:23:52.500
+[Speaker 2]: use your bookmarks, you use your bookmarks in
+
+00:23:54.340 --> 00:23:54.840
+your emails, you use your bookmarks in your
+
+00:23:59.380 --> 00:23:59.880
+org-mod documents, you use it in E-dub,
+
+00:24:02.460 --> 00:24:02.960
+W-W buffers if you use that,
+
+00:24:06.760 --> 00:24:06.940
+but it's just the, Yeah,
+
+00:24:10.080 --> 00:24:10.580
+it's just the least amount of Incremental
+
+00:24:10.940 --> 00:24:11.440
+changes
+
+00:24:14.620 --> 00:24:14.900
+[Speaker 1]: yeah, you're when you were talking about like
+
+00:24:18.480 --> 00:24:18.980
+the Reducing friction like turn off editing
+
+00:24:22.280 --> 00:24:22.480
+or not editing, but auto correct while you're
+
+00:24:25.440 --> 00:24:25.940
+typing, it's absolutely spot on.
+
+00:24:29.800 --> 00:24:30.300
+You're wanting to get whatever is flowing
+
+00:24:31.280 --> 00:24:31.720
+needs to keep flowing,
+
+00:24:33.700 --> 00:24:34.200
+like as a programmer or as a creative,
+
+00:24:38.100 --> 00:24:38.600
+anytime I can hit flow is my goal.
+
+00:24:42.240 --> 00:24:42.740
+And so paying attention to what removes flow
+
+00:24:48.480 --> 00:24:48.980
+or hinders it or saps energy and that unified
+
+00:24:52.800 --> 00:24:53.080
+environment of Emacs is really helpful to
+
+00:24:57.260 --> 00:24:57.760
+maintain that. So yeah.
+
+00:25:02.300 --> 00:25:02.580
+[Speaker 2]: I think it's about speed and then once after
+
+00:25:04.040 --> 00:25:04.540
+you get some of that, then you're like,
+
+00:25:06.420 --> 00:25:06.920
+well, yeah, it's important,
+
+00:25:09.320 --> 00:25:09.820
+but this is like the last thing I care about.
+
+00:25:14.280 --> 00:25:14.780
+[Speaker 1]: Right. Speed is all like,
+
+00:25:19.700 --> 00:25:20.200
+Yeah, there's a quote that I love called,
+
+00:25:22.940 --> 00:25:23.440
+I forget the author. It's,
+
+00:25:30.060 --> 00:25:30.260
+there is a connection between slowness and
+
+00:25:33.960 --> 00:25:34.460
+remembering and fastness and forgetting.
+
+00:25:39.680 --> 00:25:40.180
+And the slowness is an interesting,
+
+00:25:43.520 --> 00:25:43.840
+like it's, I am moving fast in Emacs because
+
+00:25:46.020 --> 00:25:46.520
+I've forgotten how I'm doing it.
+
+00:25:47.920 --> 00:25:48.420
+I just do it now, right?
+
+00:25:52.120 --> 00:25:52.360
+And then the slowness of like being in my
+
+00:25:57.540 --> 00:25:57.720
+thought and staying on that stream is where I
+
+00:26:01.700 --> 00:26:02.200
+want to be and ride whatever that pathway is.
+
+00:26:07.540 --> 00:26:07.680
+And a text editor is still hard to do that
+
+00:26:10.260 --> 00:26:10.520
+because if I were using a pen and paper it's
+
+00:26:11.600 --> 00:26:12.100
+more cumbersome to auto-edit.
+
+00:26:18.620 --> 00:26:18.800
+But I can't get it out without losing my
+
+00:26:21.180 --> 00:26:21.440
+thinking. And so I ended up having to type
+
+00:26:21.440 --> 00:26:21.940
+it.
+
+00:26:25.440 --> 00:26:25.640
+[Speaker 3]: Something I've been experimenting with is
+
+00:26:26.600 --> 00:26:27.100
+using, well, recording.
+
+00:26:29.440 --> 00:26:29.700
+Some other people are using dictation for
+
+00:26:31.760 --> 00:26:32.260
+this to just get the blur out of the ideas
+
+00:26:35.280 --> 00:26:35.500
+and you can go back and glean some of that
+
+00:26:36.200 --> 00:26:36.700
+stuff out of it.
+
+00:26:41.320 --> 00:26:41.680
+[Speaker 1]: Yeah, what I will do when I'm capturing like
+
+00:26:44.760 --> 00:26:45.260
+quotes or epigraphs is I will almost always
+
+00:26:47.760 --> 00:26:47.960
+turn on dictation because I got a book in 1
+
+00:26:52.020 --> 00:26:52.520
+hand. So I'm like, on goes the typing.
+
+00:26:56.640 --> 00:26:56.940
+And yeah, that is, there's a,
+
+00:26:59.900 --> 00:27:00.180
+I'm really thankful that that exists as well.
+
+00:27:01.260 --> 00:27:01.760
+Like my mother is blind.
+
+00:27:05.020 --> 00:27:05.520
+And so having that helps her and me
+
+00:27:08.560 --> 00:27:09.060
+communicate Through text because we're both
+
+00:27:12.900 --> 00:27:13.400
+able to appreciate it And use it in a way
+
+00:27:15.480 --> 00:27:15.980
+that is accessible for both of us
+
+00:27:19.120 --> 00:27:19.620
+[Speaker 3]: Go ahead
+
+00:27:23.100 --> 00:27:23.600
+[Speaker 2]: There's the L feet to package which will
+
+00:27:25.160 --> 00:27:25.200
+which will allow you to both of us.
+
+00:27:25.400 --> 00:27:25.440
+There's the ElfieTube package which will
+
+00:27:28.320 --> 00:27:28.820
+allow you to subscribe to a YouTube channel
+
+00:27:32.500 --> 00:27:33.000
+and then download the subtitles and give you
+
+00:27:36.760 --> 00:27:36.940
+remote control access to the MPV player to
+
+00:27:37.700 --> 00:27:38.200
+watch the YouTube thing.
+
+00:27:41.420 --> 00:27:41.920
+And considering you have a really big
+
+00:27:44.580 --> 00:27:44.680
+subtitle thing that you can click at the
+
+00:27:45.480 --> 00:27:45.660
+various different places,
+
+00:27:47.860 --> 00:27:48.280
+it's really surprising about how different
+
+00:27:49.300 --> 00:27:49.800
+that makes YouTube feel.
+
+00:27:50.680 --> 00:27:51.180
+[Speaker 1]: Yeah I've...
+
+00:27:54.140 --> 00:27:54.340
+[Speaker 2]: And then on top of that about how much like
+
+00:27:57.660 --> 00:27:57.800
+if you've used it why would you never have
+
+00:27:59.160 --> 00:27:59.660
+thought about that before because it's...
+
+00:28:00.720 --> 00:28:01.220
+Right. It's even better.
+
+00:28:04.840 --> 00:28:05.340
+[Speaker 1]: Right absolutely. Sasha?
+
+00:28:10.080 --> 00:28:10.440
+[Speaker 3]: Oh I would say I do use the caption slot also
+
+00:28:11.580 --> 00:28:12.040
+when I'm skimming through stuff for Emacs
+
+00:28:13.740 --> 00:28:14.240
+News. But for books specifically,
+
+00:28:18.420 --> 00:28:18.600
+I often use Google Lens to just capture the
+
+00:28:21.900 --> 00:28:22.200
+text and copy it so that I don't have to deal
+
+00:28:24.140 --> 00:28:24.640
+with recognition errors or whatever.
+
+00:28:25.760 --> 00:28:26.260
+really useful.
+
+00:28:31.780 --> 00:28:32.280
+[Speaker 1]: It's just So 1 of my hobbies is role-playing
+
+00:28:35.980 --> 00:28:36.100
+games and the tabular data that is in the
+
+00:28:38.940 --> 00:28:39.440
+role-playing books is never in correct,
+
+00:28:43.160 --> 00:28:43.380
+like copy it out. And so I was like this is
+
+00:28:46.260 --> 00:28:46.680
+really annoying And I ended up taking
+
+00:28:47.720 --> 00:28:48.220
+screenshots on my machine,
+
+00:28:50.280 --> 00:28:50.780
+running Tesseract to pipe it in,
+
+00:28:53.480 --> 00:28:53.980
+and then using Emacs to like edit it because
+
+00:28:57.940 --> 00:28:58.100
+Tesseract adheres to the column format that
+
+00:29:00.520 --> 00:29:00.680
+I'm looking for. And I'm really thankful that
+
+00:29:05.680 --> 00:29:06.100
+we're at a place where the OCR is in good
+
+00:29:09.720 --> 00:29:10.120
+shape. That's part of my day job is working
+
+00:29:14.180 --> 00:29:14.680
+on some old documents that OCR is good,
+
+00:29:18.100 --> 00:29:18.600
+but not great because of like their 19th
+
+00:29:23.720 --> 00:29:23.920
+century documents, but having that ability to
+
+00:29:28.080 --> 00:29:28.220
+me is really powerful because we're gonna be
+
+00:29:32.580 --> 00:29:32.900
+able to share that text And also then once
+
+00:29:35.860 --> 00:29:36.360
+it's understood in what it's ASCII or UTF-8
+
+00:29:39.000 --> 00:29:39.500
+encoding is, it can be translated as well.
+
+00:29:41.960 --> 00:29:42.460
+So we can make it even more generally
+
+00:29:46.480 --> 00:29:46.720
+available, which I think is a nice thing to
+
+00:29:46.720 --> 00:29:47.220
+have.
+
+00:29:51.820 --> 00:29:52.320
+[Speaker 3]: I wanted to go back to the topic of mentoring
+
+00:29:54.000 --> 00:29:54.240
+since that's something that I'm very much
+
+00:29:55.940 --> 00:29:56.400
+interested in figuring out how to facilitate
+
+00:29:56.980 --> 00:29:57.480
+in the Emacs community.
+
+00:30:00.520 --> 00:30:00.720
+Other people have been working on kind of
+
+00:30:03.440 --> 00:30:03.900
+remote mentoring initiatives with Emacs
+
+00:30:07.640 --> 00:30:07.860
+Buddy. And there are meetups as well that
+
+00:30:09.140 --> 00:30:09.340
+kind of get that sense of like,
+
+00:30:10.680 --> 00:30:10.840
+you know, what people are doing things and
+
+00:30:12.040 --> 00:30:12.500
+then somebody can look over their shoulder
+
+00:30:14.060 --> 00:30:14.260
+and say, hey, have you ever thought about
+
+00:30:15.060 --> 00:30:15.560
+[Speaker 1]: Right.
+
+00:30:17.780 --> 00:30:18.040
+[Speaker 3]: this? Is there any things that you can can
+
+00:30:20.320 --> 00:30:20.820
+suggest specifically in the context of this
+
+00:30:23.180 --> 00:30:23.680
+kind of mentoring over a distance?
+
+00:30:25.680 --> 00:30:26.180
+Any chance you've thought about it?
+
+00:30:30.800 --> 00:30:30.920
+[Speaker 1]: I'm on the Emacs buddy repo and I've had a
+
+00:30:32.600 --> 00:30:33.100
+handful of people reach out to me.
+
+00:30:37.700 --> 00:30:37.920
+Most often we start with email and every so
+
+00:30:38.980 --> 00:30:39.320
+often it'll be like, hey,
+
+00:30:44.340 --> 00:30:44.840
+let's hop on some kind of video or audio,
+
+00:30:47.320 --> 00:30:47.820
+even just done phone calls.
+
+00:30:53.140 --> 00:30:53.480
+Yeah, I haven't done any of the like shared
+
+00:30:57.220 --> 00:30:57.500
+buffer stuff. I know like at work we have
+
+00:30:59.700 --> 00:31:00.200
+replit where we can use that.
+
+00:31:02.500 --> 00:31:03.000
+Seeing the presentation on CDRT,
+
+00:31:04.440 --> 00:31:04.940
+I was like, oh, that's really great.
+
+00:31:10.760 --> 00:31:11.140
+But what I found is being able to see
+
+00:31:15.280 --> 00:31:15.720
+someone, I don't get to see them typing,
+
+00:31:17.640 --> 00:31:17.840
+but I get to see the results of what they're
+
+00:31:18.840 --> 00:31:19.340
+doing on the computer.
+
+00:31:22.840 --> 00:31:23.040
+You know paying attention to that is the big
+
+00:31:26.040 --> 00:31:26.540
+1 to help them think of a different way.
+
+00:31:28.940 --> 00:31:29.160
+Depending on where they're at when they're
+
+00:31:32.960 --> 00:31:33.460
+writing if they are like at a pause point,
+
+00:31:35.160 --> 00:31:35.460
+if I'm at my best, I'll be like,
+
+00:31:37.920 --> 00:31:38.360
+so what are you thinking?
+
+00:31:40.640 --> 00:31:41.140
+Where are you stuck? Cause maybe they're
+
+00:31:43.040 --> 00:31:43.280
+trying to navigate somewhere and that starts
+
+00:31:46.500 --> 00:31:46.720
+to create a point for a conversation of like,
+
+00:31:48.280 --> 00:31:48.780
+how do I go from here to there?
+
+00:31:57.340 --> 00:31:57.520
+And so it's looking for those moments is
+
+00:31:58.840 --> 00:31:59.340
+where I try to operate.
+
+00:32:03.740 --> 00:32:04.240
+[Speaker 3]: And sometimes, you know,
+
+00:32:05.380 --> 00:32:05.600
+so there's kind of like,
+
+00:32:06.760 --> 00:32:07.120
+how do you go from here to there?
+
+00:32:08.000 --> 00:32:08.500
+And sometimes even the,
+
+00:32:12.380 --> 00:32:12.540
+what there should I be going for is a
+
+00:32:15.060 --> 00:32:15.160
+challenge, right? Because especially with
+
+00:32:16.480 --> 00:32:16.980
+Emacs newbies, they might not necessarily
+
+00:32:19.340 --> 00:32:19.540
+know what's possible or what's nearby in
+
+00:32:21.200 --> 00:32:21.700
+terms of what their current knowledge is.
+
+00:32:23.760 --> 00:32:24.120
+And that's an interesting thing to map out.
+
+00:32:25.960 --> 00:32:26.400
+Is that something that you've thought about
+
+00:32:29.020 --> 00:32:29.280
+and as you're conversing with all these
+
+00:32:29.280 --> 00:32:29.780
+people?
+
+00:32:37.680 --> 00:32:37.840
+[Speaker 1]: The main thing, the main function that I do
+
+00:32:38.720 --> 00:32:38.940
+talk, I talked about this,
+
+00:32:41.240 --> 00:32:41.740
+I think in the, I did in the talk where it's,
+
+00:32:46.320 --> 00:32:46.660
+I need to jump between the test and the
+
+00:32:50.900 --> 00:32:51.400
+implementation. And since 2005,
+
+00:32:56.200 --> 00:32:56.480
+I've had that. And I watch folks not have
+
+00:32:57.880 --> 00:32:58.100
+that. I'm just like, Oh,
+
+00:33:00.380 --> 00:33:00.540
+my goodness, like there's a convention in the
+
+00:33:02.500 --> 00:33:02.720
+language we work in. Let's get that
+
+00:33:04.080 --> 00:33:04.580
+installed. Let's get it going.
+
+00:33:07.600 --> 00:33:07.840
+Like that's 1 thing, that's 1 access I know
+
+00:33:11.740 --> 00:33:11.880
+they're gonna go to. Another 1 is the jump to
+
+00:33:14.280 --> 00:33:14.600
+definition. And I've never gotten like C
+
+00:33:16.680 --> 00:33:16.960
+tags. I haven't really spent time on that,
+
+00:33:18.600 --> 00:33:19.100
+but with the advent of LSP,
+
+00:33:21.040 --> 00:33:21.540
+it works a lot better.
+
+00:33:24.520 --> 00:33:25.020
+And so I try to get people to use that.
+
+00:33:30.200 --> 00:33:30.640
+And what I've noticed weirdly is like VS
+
+00:33:34.200 --> 00:33:34.400
+code, it doesn't work as well as I would have
+
+00:33:36.340 --> 00:33:36.500
+thought. And there's lots of like errors and
+
+00:33:38.100 --> 00:33:38.560
+warnings popping up in the bottom corner.
+
+00:33:41.120 --> 00:33:41.280
+So I'm like, well, you gotta pay attention to
+
+00:33:45.640 --> 00:33:46.140
+that. But I try not to get into anybody's
+
+00:33:47.720 --> 00:33:48.120
+business about like, I'm like,
+
+00:33:48.900 --> 00:33:49.120
+maybe we could fix that.
+
+00:33:50.020 --> 00:33:50.280
+Maybe we can clean it up,
+
+00:33:51.740 --> 00:33:52.240
+but it's your, you know,
+
+00:33:54.440 --> 00:33:54.940
+it's your car you're driving.
+
+00:33:56.320 --> 00:33:56.760
+I'm just long for a ride.
+
+00:33:57.620 --> 00:33:58.120
+It's safe, we're fine.
+
+00:34:01.360 --> 00:34:01.860
+So yeah, that jumped to definition.
+
+00:34:07.940 --> 00:34:08.440
+And then the, I mean, search in project,
+
+00:34:10.080 --> 00:34:10.580
+like everybody understanding that.
+
+00:34:15.219 --> 00:34:15.380
+But I feel that the, like I mentioned in the
+
+00:34:17.980 --> 00:34:18.480
+talk, the advent of orderless is just huge.
+
+00:34:21.400 --> 00:34:21.659
+I did not realize how much I loved it because
+
+00:34:24.159 --> 00:34:24.480
+I don't have to think about things and can
+
+00:34:28.080 --> 00:34:28.580
+have slightly more forgiving default
+
+00:34:34.340 --> 00:34:34.840
+searches. Yeah, it's hard.
+
+00:34:39.159 --> 00:34:39.440
+The principles of organizing 10 things versus
+
+00:34:41.040 --> 00:34:41.540
+100 versus 1,000 versus 10,000
+
+00:34:44.440 --> 00:34:44.940
+are just, they're not the same.
+
+00:34:52.360 --> 00:34:52.540
+[Speaker 2]: A common hang up for, that would easily make
+
+00:34:54.320 --> 00:34:54.820
+you skip off of Emacs,
+
+00:35:00.920 --> 00:35:01.040
+Org Mode, Hyperbole is if you go into any of
+
+00:35:03.680 --> 00:35:04.040
+those with the mindset of I'm going to master
+
+00:35:05.080 --> 00:35:05.580
+it all before I use it.
+
+00:35:06.640 --> 00:35:07.140
+That's not going to work.
+
+00:35:13.660 --> 00:35:13.860
+[Speaker 1]: Absolutely. I was terrified of org mode when
+
+00:35:14.760 --> 00:35:15.060
+I started because I'm like,
+
+00:35:16.720 --> 00:35:17.040
+I don't need to organize my life.
+
+00:35:20.460 --> 00:35:20.960
+I need to like type. And then that,
+
+00:35:24.520 --> 00:35:25.020
+yes, incremental. What did I find helpful?
+
+00:35:28.580 --> 00:35:29.080
+[Speaker 2]: It's for the, for the Linux CLI toolbox,
+
+00:35:30.860 --> 00:35:31.360
+but you have to look at them as more of just,
+
+00:35:34.640 --> 00:35:35.140
+I have a whole bunch of tools available to me
+
+00:35:39.140 --> 00:35:39.360
+and I'll just pick them up as I have a
+
+00:35:42.480 --> 00:35:42.680
+problem and as I, and as the tool can be
+
+00:35:44.440 --> 00:35:44.940
+useful for this problem and incrementally.
+
+00:35:47.700 --> 00:35:48.200
+[Speaker 1]: Yeah. It's
+
+00:35:54.760 --> 00:35:55.080
+[Speaker 3]: actually, so, in fact,
+
+00:35:56.180 --> 00:35:56.400
+when when I'm mentoring people,
+
+00:35:58.440 --> 00:35:58.580
+I have to take a step back and say,
+
+00:36:00.520 --> 00:36:00.760
+OK, what are we with the note taking thing
+
+00:36:01.640 --> 00:36:02.140
+that you mentioned in your talk.
+
+00:36:03.120 --> 00:36:03.480
+How do you like to take notes?
+
+00:36:04.840 --> 00:36:05.140
+How do you like to keep track of the things
+
+00:36:06.480 --> 00:36:06.600
+that you want to work on when you have an
+
+00:36:07.540 --> 00:36:08.040
+idea? Where does it go?
+
+00:36:10.320 --> 00:36:10.820
+Because if you improve that practice,
+
+00:36:12.840 --> 00:36:13.180
+and especially if you can sneak some literate
+
+00:36:14.540 --> 00:36:15.040
+programming in without them really noticing,
+
+00:36:17.860 --> 00:36:18.160
+then it becomes the thing that they can use
+
+00:36:18.900 --> 00:36:19.400
+to learn more efficiently.
+
+00:36:23.200 --> 00:36:23.700
+[Speaker 1]: Yeah. I was presenting at,
+
+00:36:26.600 --> 00:36:27.100
+I wasn't presenting at this seminar,
+
+00:36:30.560 --> 00:36:30.920
+but I attended it and it was a crash course
+
+00:36:31.800 --> 00:36:32.300
+in command line tools.
+
+00:36:35.520 --> 00:36:36.020
+And I didn't, I mean, I went there to listen
+
+00:36:38.660 --> 00:36:38.800
+and there was a point where the people were
+
+00:36:40.560 --> 00:36:41.060
+like, I use this command line tool.
+
+00:36:42.360 --> 00:36:42.860
+I'm not a programmer, I'm a librarian,
+
+00:36:45.040 --> 00:36:45.060
+I'm an archivist. I use it,
+
+00:36:47.080 --> 00:36:47.580
+I'm like, great, I'm gonna remember this.
+
+00:36:49.640 --> 00:36:49.820
+And then I forget about it and I might use it
+
+00:36:54.340 --> 00:36:54.520
+6 months from now. And so I tried to
+
+00:36:56.880 --> 00:36:57.380
+encourage everybody, like come up with,
+
+00:37:00.580 --> 00:37:00.740
+like you have a degree in knowledge and
+
+00:37:02.320 --> 00:37:02.820
+information, management and organization,
+
+00:37:06.160 --> 00:37:06.660
+introspect, right? Spend some time on it.
+
+00:37:09.740 --> 00:37:10.240
+Think about what is a way that I can do this
+
+00:37:13.180 --> 00:37:13.360
+and ask questions to get to the point where
+
+00:37:18.960 --> 00:37:19.240
+you can create a discoverable inventory of
+
+00:37:22.500 --> 00:37:23.000
+the tools you've used and what that means.
+
+00:37:26.160 --> 00:37:26.660
+And my answer was, I use literate programming
+
+00:37:30.800 --> 00:37:31.300
+or I shove it in my bin directory in GitHub
+
+00:37:34.080 --> 00:37:34.300
+and like, I don't know if I'll remember it,
+
+00:37:35.860 --> 00:37:36.020
+but I can go there every now and then and be
+
+00:37:37.120 --> 00:37:37.620
+like, oh yeah, that command.
+
+00:37:44.220 --> 00:37:44.720
+So note taking is the most critical component
+
+00:37:46.620 --> 00:37:47.120
+of any number of work.
+
+00:37:51.960 --> 00:37:52.360
+[Speaker 3]: Sometimes I wonder if we can maybe
+
+00:37:54.000 --> 00:37:54.500
+externalize some of all this mentoring
+
+00:37:57.520 --> 00:37:57.720
+insight and kind of like this choose your own
+
+00:37:59.700 --> 00:37:59.920
+adventure thing, where the person says,
+
+00:38:01.200 --> 00:38:01.700
+OK, this is what I got at the moment.
+
+00:38:03.460 --> 00:38:03.960
+And then through a series of diagnostic
+
+00:38:05.740 --> 00:38:06.220
+questions, we can figure out what hurts,
+
+00:38:08.040 --> 00:38:08.220
+right? Where is the thing that they would
+
+00:38:08.980 --> 00:38:09.240
+like to learn more about?
+
+00:38:09.960 --> 00:38:10.460
+And then, okay, if that hurts,
+
+00:38:12.620 --> 00:38:13.120
+try this and keep that manageable.
+
+00:38:15.720 --> 00:38:15.880
+And if there's only a way to also be able to
+
+00:38:17.280 --> 00:38:17.720
+capture each person's state,
+
+00:38:19.360 --> 00:38:19.840
+the things that they know about and have
+
+00:38:20.980 --> 00:38:21.480
+absorbed into their habits.
+
+00:38:22.800 --> 00:38:23.200
+So you can say, right,
+
+00:38:25.440 --> 00:38:25.760
+you know, my recommendation for someone who's
+
+00:38:28.580 --> 00:38:28.940
+brand new to org is not the same as somebody
+
+00:38:30.060 --> 00:38:30.480
+who's like, okay, they've got their agendas
+
+00:38:31.400 --> 00:38:31.800
+and everything set up already.
+
+00:38:33.680 --> 00:38:34.180
+Just how do we represent that as like WISPs?
+
+00:38:39.520 --> 00:38:39.720
+[Speaker 1]: I've given up on trying to map that.
+
+00:38:43.180 --> 00:38:43.440
+I like the one-on-one conversations and
+
+00:38:47.480 --> 00:38:47.980
+discovery. And I think that's the part where
+
+00:38:51.980 --> 00:38:52.120
+you're looking at, you're asking about how do
+
+00:38:55.920 --> 00:38:56.320
+we make the process and like I heard,
+
+00:38:58.860 --> 00:38:59.040
+like how do we help equip those who want to
+
+00:39:01.560 --> 00:39:01.960
+mentor as well, right?
+
+00:39:05.900 --> 00:39:05.970
+Making that, reducing the barrier in a way.
+
+00:39:06.040 --> 00:39:06.180
+[Speaker 2]: I don't
+
+00:39:08.240 --> 00:39:08.740
+[Speaker 3]: know, I think what you said about enjoying
+
+00:39:10.440 --> 00:39:10.680
+the conversation and the fact that it is
+
+00:39:12.080 --> 00:39:12.580
+really unique for each person,
+
+00:39:14.760 --> 00:39:15.260
+each situation that comes up.
+
+00:39:18.480 --> 00:39:18.840
+I suspect what it just comes down to is more
+
+00:39:21.560 --> 00:39:22.020
+like capturing the good stuff of each
+
+00:39:23.160 --> 00:39:23.660
+mentoring session or whatever.
+
+00:39:25.840 --> 00:39:26.120
+Maybe it's getting the mentees to write very
+
+00:39:27.700 --> 00:39:27.900
+short blog posts about what they learned this
+
+00:39:28.780 --> 00:39:29.280
+week or whatever else.
+
+00:39:30.900 --> 00:39:31.400
+And then, oh, yeah, you know,
+
+00:39:33.700 --> 00:39:33.900
+we ran into the same problem 3 months ago.
+
+00:39:36.280 --> 00:39:36.440
+Let me go look it up. And then that becomes a
+
+00:39:37.080 --> 00:39:37.580
+reusable segment.
+
+00:39:41.280 --> 00:39:41.780
+[Speaker 1]: Yeah, when I worked at a coding bootcamp,
+
+00:39:46.420 --> 00:39:46.720
+they tried to encourage the mentors to say,
+
+00:39:49.320 --> 00:39:49.820
+like write a blog posts for the mentees.
+
+00:39:57.160 --> 00:39:57.380
+And that was, some of them did,
+
+00:40:01.980 --> 00:40:02.140
+but it was intimidating because like they
+
+00:40:03.260 --> 00:40:03.760
+didn't wanna, I don't know.
+
+00:40:06.900 --> 00:40:07.360
+Are we enculturated in an education system
+
+00:40:09.800 --> 00:40:09.920
+where we can't get it wrong or we need to
+
+00:40:11.760 --> 00:40:11.980
+look like we're more of an expert than we
+
+00:40:15.720 --> 00:40:16.220
+are? I don't know. I have a lot of like,
+
+00:40:17.720 --> 00:40:17.960
+I'm a middle aged white guy,
+
+00:40:20.140 --> 00:40:20.640
+I've got a lot of background and privilege in
+
+00:40:25.440 --> 00:40:25.680
+my career. So like, it's not as scary to put
+
+00:40:28.620 --> 00:40:28.860
+something forward for myself as it might be
+
+00:40:31.080 --> 00:40:31.240
+as like a woman in tech or a minority in
+
+00:40:35.400 --> 00:40:35.900
+tech, because that's a different place.
+
+00:40:38.900 --> 00:40:39.400
+And I want to really get done with that.
+
+00:40:40.760 --> 00:40:41.260
+I don't like that at all.
+
+00:40:43.820 --> 00:40:44.320
+And I would love our, like,
+
+00:40:46.640 --> 00:40:47.140
+just write. And it doesn't have to be public,
+
+00:40:48.540 --> 00:40:49.040
+right? You don't have to make it public,
+
+00:40:51.880 --> 00:40:52.380
+but if you make it discoverable to yourself,
+
+00:40:58.320 --> 00:40:58.820
+that's the big thing. And 1 of my coworkers,
+
+00:41:04.840 --> 00:41:05.020
+She doesn't blog, but she definitely has a
+
+00:41:07.200 --> 00:41:07.480
+large knowledge base of stuff that she
+
+00:41:08.980 --> 00:41:09.140
+references because she's pulling out all
+
+00:41:10.520 --> 00:41:10.760
+kinds of stuff and I'm like whatever you're
+
+00:41:11.120 --> 00:41:11.620
+doing is working.
+
+00:41:17.920 --> 00:41:18.420
+[Speaker 2]: I'm trying to have something.
+
+00:41:23.680 --> 00:41:24.180
+There's a good opportunity with the Emacs
+
+00:41:25.680 --> 00:41:26.180
+conference to accomplish this.
+
+00:41:28.420 --> 00:41:28.920
+So like if you make like a,
+
+00:41:31.640 --> 00:41:32.140
+because 1 of the things with it is,
+
+00:41:36.600 --> 00:41:37.080
+Sasha, you do a really good job of using all.
+
+00:41:38.800 --> 00:41:39.000
+You're the 1 who has the Emacs buffer with
+
+00:41:39.780 --> 00:41:40.080
+the time on it, right?
+
+00:41:41.820 --> 00:41:41.980
+Is that your screen that's being recorded for
+
+00:41:45.860 --> 00:41:46.360
+that? Because you have a really good example
+
+00:41:50.400 --> 00:41:50.600
+of a really consolidated emacs workflow that
+
+00:41:53.440 --> 00:41:53.920
+works really good with the Emacs conference
+
+00:41:56.520 --> 00:41:56.800
+so if you had like a page that described how
+
+00:42:00.100 --> 00:42:00.460
+you did all that stuff in the emacs
+
+00:42:04.280 --> 00:42:04.360
+conference like on that and then we then you
+
+00:42:06.140 --> 00:42:06.380
+did even more stuff with that.
+
+00:42:09.560 --> 00:42:10.060
+Like you do the org mode file that you can
+
+00:42:12.140 --> 00:42:12.340
+just put straight into your agenda for your
+
+00:42:14.720 --> 00:42:14.940
+time zone. I used that.
+
+00:42:17.540 --> 00:42:17.800
+That was really nice, just because it allowed
+
+00:42:19.600 --> 00:42:19.900
+me to reorganize and see how all the talks
+
+00:42:21.580 --> 00:42:21.880
+would work together, and which ones I wanted
+
+00:42:25.840 --> 00:42:26.060
+to do. You could add Org Mode to do tags with
+
+00:42:31.020 --> 00:42:31.520
+that, to say, plan to watch,
+
+00:42:36.080 --> 00:42:36.360
+I want to re-watch but I have to skip it
+
+00:42:37.540 --> 00:42:38.000
+because there's another talk I'm watching,
+
+00:42:40.760 --> 00:42:41.260
+you know, like a couple tags don't care about
+
+00:42:43.940 --> 00:42:44.200
+so that people can easily tag all the talks
+
+00:42:47.360 --> 00:42:47.860
+that they care about on top of that.
+
+00:42:52.660 --> 00:42:53.160
+And then with, I'm going to try to email
+
+00:42:54.660 --> 00:42:54.900
+these ideas on it too,
+
+00:42:57.980 --> 00:42:58.480
+but then you can also,
+
+00:43:00.940 --> 00:43:01.440
+you have the either pad questions,
+
+00:43:03.960 --> 00:43:04.440
+you could put all those in org-mode documents
+
+00:43:08.300 --> 00:43:08.760
+with crdt.el, post all those in the Emacs
+
+00:43:11.400 --> 00:43:11.600
+conference and then people could use that to
+
+00:43:13.820 --> 00:43:13.980
+edit all the documents at the same time so
+
+00:43:15.160 --> 00:43:15.660
+then everybody's actually collaboratively
+
+00:43:20.180 --> 00:43:20.440
+editing. And then people have all the
+
+00:43:24.520 --> 00:43:25.020
+scaffolding for if you do the Emacs meetings,
+
+00:43:27.760 --> 00:43:27.940
+buddy meetings, because they know exactly how
+
+00:43:29.820 --> 00:43:30.180
+to set it all up with that.
+
+00:43:34.040 --> 00:43:34.540
+And then you combine it with any number of
+
+00:43:38.040 --> 00:43:38.360
+whatever chat video program so that people
+
+00:43:39.780 --> 00:43:40.280
+can talk and watch each other.
+
+00:43:45.420 --> 00:43:45.920
+[Speaker 3]: I have a presentation later on EmacsConf
+
+00:43:48.920 --> 00:43:49.200
+infrastructure and I will capture the note
+
+00:43:51.380 --> 00:43:51.600
+And maybe I can include a mini tutorial in
+
+00:43:53.460 --> 00:43:53.800
+the schedule org so that people can be like,
+
+00:43:55.440 --> 00:43:55.680
+hey, by the way, you could refile these
+
+00:43:58.860 --> 00:43:59.120
+things into your own org files or tag them
+
+00:44:01.520 --> 00:44:01.720
+and here's a list thingy that filters your
+
+00:44:03.420 --> 00:44:03.740
+agenda by your tag or whatever,
+
+00:44:04.940 --> 00:44:05.200
+it'll be fine. But it's,
+
+00:44:06.100 --> 00:44:06.600
+you know, it's, it's kind of like,
+
+00:44:09.640 --> 00:44:09.800
+it is, you're right. It is an opportunity to
+
+00:44:12.440 --> 00:44:12.800
+expose people to more things that they could
+
+00:44:14.620 --> 00:44:15.120
+do in kind of a scaffolded way.
+
+00:44:16.600 --> 00:44:16.880
+That's interesting stuff,
+
+00:44:18.780 --> 00:44:19.040
+but I, your point actually driving also going
+
+00:44:21.180 --> 00:44:21.680
+back to previous parts of conversation about,
+
+00:44:24.340 --> 00:44:24.546
+it's difficult for people to share.
+
+00:44:26.420 --> 00:44:26.720
+When you realize, like I keep telling
+
+00:44:28.380 --> 00:44:28.880
+everyone, hey, if you blog about Emacs,
+
+00:44:30.720 --> 00:44:30.920
+you'll not only learn things for yourself and
+
+00:44:31.440 --> 00:44:31.920
+make things more searchable,
+
+00:44:33.520 --> 00:44:33.740
+other people will come by and tell you even
+
+00:44:34.840 --> 00:44:35.340
+better ways of doing things,
+
+00:44:36.940 --> 00:44:37.080
+which is something that always happens to me
+
+00:44:37.800 --> 00:44:37.960
+too, and I'm posting this.
+
+00:44:38.400 --> 00:44:38.900
+Has that ever happened?
+
+00:44:39.960 --> 00:44:40.460
+I'm sure that happens to you.
+
+00:44:45.020 --> 00:44:45.520
+[Speaker 1]: It's great. I love getting those things like,
+
+00:44:49.360 --> 00:44:49.700
+yeah, Howard's presentation on the game
+
+00:44:51.720 --> 00:44:52.000
+stuff. I'm like, I'm going to go explore that
+
+00:44:54.560 --> 00:44:55.060
+now. Because it's my little house.
+
+00:44:57.280 --> 00:44:57.780
+[Speaker 3]: You just have to make it less intimidating,
+
+00:45:00.600 --> 00:45:01.100
+right? And kind of change people's perception
+
+00:45:03.420 --> 00:45:03.540
+that, oh, blogging or sharing tutorials or
+
+00:45:05.460 --> 00:45:05.860
+whatever, that's then when you're an expert,
+
+00:45:06.340 --> 00:45:06.840
+when you're an experienced,
+
+00:45:09.480 --> 00:45:09.720
+to rather working out loud,
+
+00:45:11.520 --> 00:45:11.740
+thinking out loud, this is just that I'm
+
+00:45:12.800 --> 00:45:13.300
+learning along the way.
+
+00:45:15.840 --> 00:45:16.000
+And it might not be the most efficient way to
+
+00:45:17.720 --> 00:45:17.880
+do things, but this is what I'm doing right
+
+00:45:17.880 --> 00:45:18.380
+now.
+
+00:45:23.940 --> 00:45:24.180
+[Speaker 1]: Yeah. And I had a handful of times where I
+
+00:45:25.760 --> 00:45:26.000
+posted something and someone was like,
+
+00:45:27.620 --> 00:45:27.900
+Oh yeah, this is, this would have you tried
+
+00:45:30.060 --> 00:45:30.420
+this? Or I'm like, I didn't even know that
+
+00:45:32.440 --> 00:45:32.940
+existed. That makes this easier.
+
+00:45:37.540 --> 00:45:37.740
+[Speaker 3]: I've written this like little hack and I'm
+
+00:45:38.860 --> 00:45:39.140
+very proud of it because it's clever.
+
+00:45:39.760 --> 00:45:39.920
+And then someone's like,
+
+00:45:41.000 --> 00:45:41.240
+Oh yeah, there's a package for that.
+
+00:45:42.720 --> 00:45:43.220
+It's called this. Right?
+
+00:45:43.660 --> 00:45:44.160
+[Speaker 1]: Thank you. Right? Yeah.
+
+00:45:49.380 --> 00:45:49.880
+It's just it's Yeah, it the fantastic part
+
+00:45:54.140 --> 00:45:54.240
+it. I played Legos as a kid and me and my
+
+00:45:55.760 --> 00:45:56.260
+friends would play Legos at the house.
+
+00:46:00.800 --> 00:46:01.300
+And Emacs has this like feeling of playing
+
+00:46:04.360 --> 00:46:04.540
+Legos with a group of people across the
+
+00:46:06.120 --> 00:46:06.620
+world. In fact, 1 of my current,
+
+00:46:09.080 --> 00:46:09.580
+well, 1 of my best friends now,
+
+00:46:14.040 --> 00:46:14.540
+we met a year ago. And it turns out we both
+
+00:46:18.460 --> 00:46:18.620
+love Emacs. We talk every Thursday and we
+
+00:46:19.920 --> 00:46:20.420
+hang out and we talk poetry.
+
+00:46:23.500 --> 00:46:24.000
+We talk Tom Petty. We talk Emacs.
+
+00:46:24.920 --> 00:46:25.420
+We talk software development.
+
+00:46:26.840 --> 00:46:27.340
+He does Python. I do Ruby.
+
+00:46:29.860 --> 00:46:30.360
+Just anything and everything.
+
+00:46:36.660 --> 00:46:36.820
+And it's also we both are curious because we
+
+00:46:38.100 --> 00:46:38.600
+don't use it the same way.
+
+00:46:43.920 --> 00:46:44.420
+And we like how we accomplish a task.
+
+00:46:47.020 --> 00:46:47.220
+I think that's the fascinating part to me is
+
+00:46:50.140 --> 00:46:50.580
+we each get to explore our way to interact
+
+00:46:54.060 --> 00:46:54.560
+with the computer uniquely by whatever
+
+00:46:55.860 --> 00:46:56.360
+pathways are in our brain.
+
+00:46:58.340 --> 00:46:58.520
+We see stuff, we pick it up,
+
+00:47:00.060 --> 00:47:00.240
+and we're like, that doesn't quite work for
+
+00:47:01.960 --> 00:47:02.460
+me, or, oh, that worked really well.
+
+00:47:06.660 --> 00:47:07.160
+Fascinating, like, I don't know,
+
+00:47:08.200 --> 00:47:08.700
+shared art installation.
+
+00:47:13.740 --> 00:47:14.020
+[Speaker 3]: I think you're onto something that I also
+
+00:47:15.460 --> 00:47:15.640
+resonate with. 1 of the things that
+
+00:47:18.820 --> 00:47:19.060
+fascinates me about Emacs is all these
+
+00:47:21.220 --> 00:47:21.720
+people's configuration jobs are crystallized
+
+00:47:24.960 --> 00:47:25.080
+workflows. And it's really when you talk to
+
+00:47:26.580 --> 00:47:27.080
+them and you see how they're using it,
+
+00:47:29.200 --> 00:47:29.540
+and you understand a little bit of their
+
+00:47:32.140 --> 00:47:32.320
+story and things that they need,
+
+00:47:33.160 --> 00:47:33.660
+the ideas they've had,
+
+00:47:35.640 --> 00:47:36.140
+that's really fascinating.
+
+00:47:37.580 --> 00:47:37.800
+And I think that's 1 of the things that makes
+
+00:47:39.840 --> 00:47:40.080
+it possible to be perpetually curious about
+
+00:47:42.660 --> 00:47:43.160
+Emacs, because it's not just the,
+
+00:47:43.820 --> 00:47:44.060
+you know, this is the,
+
+00:47:45.520 --> 00:47:45.920
+these are all the Lego pieces there are,
+
+00:47:47.760 --> 00:47:47.920
+but you have this community of people who are
+
+00:47:50.320 --> 00:47:50.820
+using these Lego bricks in such fascinating
+
+00:47:53.440 --> 00:47:53.940
+ways and always inventing new things for it.
+
+00:47:56.100 --> 00:47:56.600
+[Speaker 1]: Yeah, new colors, new shapes,
+
+00:47:59.640 --> 00:48:00.140
+they show up. It's great.
+
+00:48:03.200 --> 00:48:03.400
+[Speaker 2]: It's like powered twice or something like
+
+00:48:06.040 --> 00:48:06.220
+that because it's like you can use Emacs with
+
+00:48:09.720 --> 00:48:10.220
+a thousand different customizations and then
+
+00:48:12.340 --> 00:48:12.720
+you can interact with people who can each
+
+00:48:16.540 --> 00:48:17.040
+also Use Emacs in a thousand different ways
+
+00:48:17.520 --> 00:48:17.800
+[Speaker 1]: Mm-hmm, Right,
+
+00:48:20.200 --> 00:48:20.280
+[Speaker 2]: Then you can both learn from each other and
+
+00:48:21.720 --> 00:48:22.040
+that can go a thousand different ways.
+
+00:48:24.000 --> 00:48:24.500
+So it's like, it's like powering your
+
+00:48:25.240 --> 00:48:25.680
+[Speaker 3]: Yep.
+
+00:48:27.400 --> 00:48:27.700
+[Speaker 2]: Something along those lines with each other
+
+00:48:30.720 --> 00:48:30.920
+and like how different and how much you can
+
+00:48:31.560 --> 00:48:32.060
+learn from it.
+
+00:48:38.480 --> 00:48:38.980
+[Speaker 1]: Yeah, the kind of touching back to the mentee
+
+00:48:41.920 --> 00:48:42.380
+that I have who went, he had originally
+
+00:48:44.480 --> 00:48:44.980
+started in Vim and then did VS code.
+
+00:48:47.420 --> 00:48:47.600
+And then we were talking and he was gonna go
+
+00:48:50.420 --> 00:48:50.860
+into Emacs and I didn't have a,
+
+00:48:52.000 --> 00:48:52.360
+I mean, sure, that'd be great.
+
+00:48:53.860 --> 00:48:54.060
+But he's like, I don't have a lot of time.
+
+00:48:56.120 --> 00:48:56.620
+And I'm like, well, go back to the place that
+
+00:48:57.840 --> 00:48:58.340
+you have that experience.
+
+00:49:01.000 --> 00:49:01.280
+And he did, And then he started writing Lua
+
+00:49:02.960 --> 00:49:03.340
+plugins. He was like, this is so much fun.
+
+00:49:05.380 --> 00:49:05.880
+I'm like, good, you're on the right path.
+
+00:49:10.840 --> 00:49:11.340
+Like maybe there'll be space like over time,
+
+00:49:13.860 --> 00:49:14.360
+how Lua plugins and Emacs,
+
+00:49:16.840 --> 00:49:17.260
+you know, who knows? I know that Lua,
+
+00:49:19.040 --> 00:49:19.540
+you can use Fennel to write Lisp.
+
+00:49:24.240 --> 00:49:24.740
+In you write Lisp and it will transpile
+
+00:49:29.060 --> 00:49:29.560
+Fennel to Lua. I forget how that plays out,
+
+00:49:31.880 --> 00:49:32.080
+but we're not too far away from those 2
+
+00:49:34.480 --> 00:49:34.980
+things being able to play.
+
+00:49:39.020 --> 00:49:39.520
+But I guess the question is,
+
+00:49:41.980 --> 00:49:42.480
+does it need to? I don't know.
+
+00:49:44.540 --> 00:49:45.040
+[Speaker 3]: Yeah, I mean, even without direct code
+
+00:49:47.620 --> 00:49:48.120
+translation, the cross-pollination of ideas
+
+00:49:51.460 --> 00:49:51.960
+is certainly enough. I love the fact that
+
+00:49:54.720 --> 00:49:54.840
+people are borrowing ideas from VS Code and
+
+00:49:57.840 --> 00:49:58.040
+from Vim and people look at Emacs videos and
+
+00:49:58.840 --> 00:49:59.020
+other things and say, hey,
+
+00:49:59.860 --> 00:50:00.060
+that's a cool thing in Emacs,
+
+00:50:01.240 --> 00:50:01.680
+but I don't want to ever use Emacs.
+
+00:50:03.240 --> 00:50:03.740
+I'm going to do that whole thing in Vim.
+
+00:50:04.600 --> 00:50:05.100
+And I think that's fantastic.
+
+00:50:07.480 --> 00:50:07.820
+[Speaker 1]: Absolutely. Yeah. I mean,
+
+00:50:10.640 --> 00:50:11.140
+monocultures die. They just do.
+
+00:50:16.840 --> 00:50:17.340
+And computer software and computer industry
+
+00:50:24.120 --> 00:50:24.280
+pushes towards monoculture because of it
+
+00:50:26.660 --> 00:50:27.160
+wants the highest efficiency.
+
+00:50:31.440 --> 00:50:31.780
+And I'm like, I'm not,
+
+00:50:33.640 --> 00:50:34.140
+I mean, sometimes I'm here for that,
+
+00:50:35.600 --> 00:50:35.980
+but most of the time I'm like,
+
+00:50:37.120 --> 00:50:37.620
+I want the bumps and the warts.
+
+00:50:40.680 --> 00:50:41.180
+I want the art, the human interaction,
+
+00:50:42.720 --> 00:50:43.220
+the like, why are we trying to accomplish
+
+00:50:43.360 --> 00:50:43.860
+this?
+
+00:50:46.440 --> 00:50:46.620
+[Speaker 2]: It determines, It depends on how you
+
+00:50:49.640 --> 00:50:50.140
+determine efficiency because Emacs is far
+
+00:50:52.840 --> 00:50:53.240
+Even if Emacs isn't multi-threaded is far
+
+00:50:56.980 --> 00:50:57.480
+more efficient because because of the mental
+
+00:51:00.060 --> 00:51:00.220
+model shifts because you're able to play and
+
+00:51:04.440 --> 00:51:04.600
+tweak with it and then have as much of a
+
+00:51:07.160 --> 00:51:07.360
+mental model shift for each task change that
+
+00:51:10.760 --> 00:51:11.260
+you want. Like, yeah, I want my file manager
+
+00:51:16.260 --> 00:51:16.760
+to not be an editable text buffer.
+
+00:51:18.660 --> 00:51:19.120
+Although sometimes when I want to rename
+
+00:51:20.320 --> 00:51:20.820
+files, I want it to be that.
+
+00:51:23.800 --> 00:51:24.300
+[Speaker 1]: Right. Yeah, and really,
+
+00:51:26.640 --> 00:51:27.040
+like, to be clear, I like the idea of Emacs
+
+00:51:29.060 --> 00:51:29.340
+as a projection of, like,
+
+00:51:30.320 --> 00:51:30.660
+how I think about stuff.
+
+00:51:33.780 --> 00:51:33.960
+So it's that whatever my neurons have made a
+
+00:51:37.040 --> 00:51:37.280
+good pathway for, I can have Emacs flow with
+
+00:51:41.660 --> 00:51:42.160
+me. That efficiency side is I want a factory,
+
+00:51:43.080 --> 00:51:43.480
+I want to stamp out widgets,
+
+00:51:44.540 --> 00:51:44.720
+I want them to be the same,
+
+00:51:45.400 --> 00:51:45.650
+chop, chop, chop, chop,
+
+00:51:51.860 --> 00:51:52.360
+chop, chop. That emacs runs in its spirit
+
+00:51:57.180 --> 00:51:57.440
+along with vim contrary to that and I like
+
+00:51:57.440 --> 00:51:57.940
+that
+
+00:52:00.530 --> 00:52:00.720
+[Speaker 2]: emacs is a 1 of the things with the like the
+
+00:52:03.480 --> 00:52:03.680
+mental model of Emacs is you should look at
+
+00:52:06.180 --> 00:52:06.660
+Emacs like this is probably something that
+
+00:52:08.100 --> 00:52:08.320
+people should think about when they are
+
+00:52:10.440 --> 00:52:10.940
+introducing Emacs to other people is Emacs is
+
+00:52:15.720 --> 00:52:15.900
+a treasure trove of conflicting ways of
+
+00:52:18.080 --> 00:52:18.580
+solving the same problem so you get,
+
+00:52:22.040 --> 00:52:22.280
+so you can individuate yourself on how you
+
+00:52:23.520 --> 00:52:24.020
+actually want to solve that problem.
+
+00:52:25.440 --> 00:52:25.600
+[Speaker 3]: Do you
+
+00:52:26.700 --> 00:52:27.200
+[Speaker 2]: want Vim bindings or not?
+
+00:52:30.200 --> 00:52:30.580
+You get to choose. Or do you want Meow
+
+00:52:31.900 --> 00:52:32.400
+bindings? You can choose.
+
+00:52:34.780 --> 00:52:35.280
+[Speaker 1]: Yep. Absolutely. Yeah.
+
+00:52:38.780 --> 00:52:39.040
+I, I came, I'm, I consider my,
+
+00:52:42.380 --> 00:52:42.660
+I, I lament because in 2005 I almost picked
+
+00:52:46.100 --> 00:52:46.240
+up Emacs and it wasn't until 2020 that I
+
+00:52:49.040 --> 00:52:49.440
+picked it up. And fortunately I picked it up
+
+00:52:54.000 --> 00:52:54.500
+when I did because I was able to look at
+
+00:52:58.020 --> 00:52:58.520
+things I had previously accomplished and find
+
+00:53:05.140 --> 00:53:05.420
+analogs And things like Helm and Ivy were
+
+00:53:08.940 --> 00:53:09.440
+both 2 different ways of doing it and consult
+
+00:53:11.600 --> 00:53:12.100
+and then, or Selectrum and then consult,
+
+00:53:15.860 --> 00:53:16.060
+like they all had these different ways And it
+
+00:53:18.900 --> 00:53:19.400
+felt great because I could find the thing
+
+00:53:24.520 --> 00:53:25.020
+that worked for me. And they're close,
+
+00:53:27.680 --> 00:53:27.840
+but then they also like branch out and do
+
+00:53:30.360 --> 00:53:30.860
+things differently. And it was so fascinating
+
+00:53:34.860 --> 00:53:35.020
+to explore each of those and spend an hour or
+
+00:53:39.100 --> 00:53:39.360
+2 on a primary task in seeing where that
+
+00:53:42.040 --> 00:53:42.540
+little thread went. It's great.
+
+00:53:47.200 --> 00:53:47.600
+[Speaker 3]: So tell me a bit more about how you got into
+
+00:53:51.040 --> 00:53:51.300
+Emacs. What pulled you
+
+00:53:55.120 --> 00:53:55.620
+[Speaker 1]: in? Yeah, this is a great little moment.
+
+00:53:59.680 --> 00:54:00.180
+I started in TextMate,
+
+00:54:03.280 --> 00:54:03.420
+That's kind of where I would say the
+
+00:54:06.460 --> 00:54:06.660
+beginning for coding for open source and
+
+00:54:07.840 --> 00:54:08.340
+using open source software.
+
+00:54:11.760 --> 00:54:11.920
+Sorry, using open source frameworks and
+
+00:54:14.540 --> 00:54:15.040
+languages. So TextMate to Sublime,
+
+00:54:18.260 --> 00:54:18.580
+basically TextMate couldn't search very well
+
+00:54:20.740 --> 00:54:21.060
+at the time. It was getting bogged down.
+
+00:54:21.640 --> 00:54:22.080
+So I moved to Sublime,
+
+00:54:23.260 --> 00:54:23.760
+which solved it, felt well,
+
+00:54:27.900 --> 00:54:28.400
+carried the same UI look with me.
+
+00:54:30.680 --> 00:54:31.180
+And then when I was at a conference,
+
+00:54:34.540 --> 00:54:34.860
+there was a talk about using an open source
+
+00:54:36.600 --> 00:54:36.880
+editor. I was like, yeah,
+
+00:54:38.720 --> 00:54:39.220
+I need to do that. I really need to.
+
+00:54:43.080 --> 00:54:43.260
+And Adam was viable. I was like,
+
+00:54:44.320 --> 00:54:44.820
+Oh, this is really close.
+
+00:54:47.120 --> 00:54:47.360
+I'll use it. And I didn't think too much
+
+00:54:49.540 --> 00:54:49.680
+about it. And then the writing was on the
+
+00:54:51.120 --> 00:54:51.620
+wall, that Adam is going away.
+
+00:54:55.760 --> 00:54:56.040
+And I was like, I need to find an open source
+
+00:54:57.100 --> 00:54:57.600
+editor that speaks to me.
+
+00:54:59.200 --> 00:54:59.440
+And I said, all right,
+
+00:55:00.760 --> 00:55:01.260
+Vim, This is my fifth time.
+
+00:55:06.300 --> 00:55:06.800
+I will try. And I gave an earnest 2 weeks.
+
+00:55:09.060 --> 00:55:09.440
+And I'm just like, I cannot get this mental
+
+00:55:11.600 --> 00:55:11.840
+model in my head. So I'm like,
+
+00:55:12.800 --> 00:55:13.200
+all right, I set it down.
+
+00:55:14.540 --> 00:55:15.040
+I can use Vim, I'm comfortable.
+
+00:55:15.940 --> 00:55:16.360
+I think it's a great tool,
+
+00:55:19.000 --> 00:55:19.500
+but my mental model doesn't map well there.
+
+00:55:21.040 --> 00:55:21.420
+And I'm like, all right,
+
+00:55:24.780 --> 00:55:25.280
+here we go, VS code. All right,
+
+00:55:28.280 --> 00:55:28.520
+you're fine. But I feel like I might
+
+00:55:31.340 --> 00:55:31.500
+accidentally charge my credit card in the
+
+00:55:33.000 --> 00:55:33.500
+text editor on the default installation.
+
+00:55:38.680 --> 00:55:39.180
+And that was alluded to by in 1 of the talks,
+
+00:55:46.120 --> 00:55:46.620
+I forget who he German about mandating Emacs
+
+00:55:48.000 --> 00:55:48.500
+in his computer science classes.
+
+00:55:51.020 --> 00:55:51.220
+He mentioned like the Microsoft Office or
+
+00:55:54.060 --> 00:55:54.560
+Microsoft Marketplace felt like it was there.
+
+00:55:58.860 --> 00:55:59.060
+So that was 1, but the moment where I was
+
+00:56:02.380 --> 00:56:02.880
+like, oh, hell no, VS Code.
+
+00:56:08.520 --> 00:56:08.940
+Or I wanted to use a commit from the command
+
+00:56:12.280 --> 00:56:12.780
+palette, and it brought up an HTML text input
+
+00:56:15.060 --> 00:56:15.560
+area, and it was 30 characters.
+
+00:56:23.000 --> 00:56:23.500
+And in that moment, I saw several things.
+
+00:56:27.040 --> 00:56:27.140
+1, I'm like, no, that's terrible because I
+
+00:56:28.100 --> 00:56:28.600
+want to write something meaningful.
+
+00:56:33.640 --> 00:56:33.900
+2, this is the behavior that this tool is
+
+00:56:38.960 --> 00:56:39.240
+modeling. That tells me that history and like
+
+00:56:41.320 --> 00:56:41.820
+how it is built is not important.
+
+00:56:47.160 --> 00:56:47.320
+And yes, I can fix it and get around it.
+
+00:56:49.240 --> 00:56:49.740
+And I kind of did. And I was like,
+
+00:56:51.440 --> 00:56:51.860
+the principles are just,
+
+00:56:53.680 --> 00:56:54.180
+they're there. And then also understanding
+
+00:56:56.100 --> 00:56:56.600
+like there's a bunch of telemetry underneath
+
+00:56:58.860 --> 00:56:59.360
+it. So I used VS Codium,
+
+00:57:00.240 --> 00:57:00.740
+there's still telemetry.
+
+00:57:03.340 --> 00:57:03.840
+And I was like, all right,
+
+00:57:07.380 --> 00:57:07.880
+2005 Jeremy, let's go try Emacs,
+
+00:57:08.940 --> 00:57:09.440
+let's see if we can do it.
+
+00:57:13.860 --> 00:57:14.360
+And I hopped in, I grabbed Space Max.
+
+00:57:16.640 --> 00:57:17.020
+I was Like, yeah, this works pretty well.
+
+00:57:18.740 --> 00:57:18.960
+Like, I don't know how to use the keys very
+
+00:57:20.880 --> 00:57:21.380
+well. I'm figuring it out.
+
+00:57:26.040 --> 00:57:26.400
+And. And I was like, you know what?
+
+00:57:27.340 --> 00:57:27.840
+Why don't I do the tutorial?
+
+00:57:30.860 --> 00:57:31.360
+And it was the tutorial that hooked me.
+
+00:57:36.820 --> 00:57:37.320
+Not because everything made 100% sense
+
+00:57:42.440 --> 00:57:42.620
+because Emacs is old. It had a lot of
+
+00:57:45.420 --> 00:57:45.920
+language that was hard to internalize,
+
+00:57:50.500 --> 00:57:50.740
+but it presented it in a conversational I'm
+
+00:57:52.360 --> 00:57:52.600
+gonna meet you where you're at and we're
+
+00:57:53.440 --> 00:57:53.940
+gonna walk with it together.
+
+00:57:56.480 --> 00:57:56.980
+And then when I was done with the tutorial,
+
+00:57:58.420 --> 00:57:58.740
+I said, you know, Space Max,
+
+00:57:59.760 --> 00:58:00.060
+I don't understand it.
+
+00:58:00.920 --> 00:58:01.420
+And it's got some performance.
+
+00:58:04.180 --> 00:58:04.300
+It looks like there's like extra stuff that I
+
+00:58:08.420 --> 00:58:08.920
+may not need. So I went vanilla,
+
+00:58:11.780 --> 00:58:12.280
+nothing Emacs and just started working.
+
+00:58:14.060 --> 00:58:14.560
+I was like, well, how do you do this?
+
+00:58:17.280 --> 00:58:17.460
+[Speaker 2]: Although 5 minutes of Space Max or any of
+
+00:58:19.600 --> 00:58:20.100
+those Emacs distribution shows you
+
+00:58:22.360 --> 00:58:22.860
+unequivocally how different it can be.
+
+00:58:25.880 --> 00:58:26.380
+[Speaker 1]: It was, it was, it was so amazing,
+
+00:58:31.600 --> 00:58:32.100
+and it was so good. But I knew my nature was,
+
+00:58:34.780 --> 00:58:35.140
+I was frustrated in, like I wrote an Atom
+
+00:58:37.780 --> 00:58:38.280
+package, and that was awful.
+
+00:58:42.860 --> 00:58:43.360
+It was so terrible. But I knew what I wanted.
+
+00:58:48.280 --> 00:58:48.480
+And then I wrote, I started writing a VS code
+
+00:58:49.640 --> 00:58:49.840
+and I'm like, oh no, no,
+
+00:58:50.800 --> 00:58:51.300
+no, we're not here for this.
+
+00:58:55.520 --> 00:58:55.800
+And so, yeah, SpaceMax showed me like this
+
+00:59:00.600 --> 00:59:00.760
+can look and feel like a space that I used to
+
+00:59:03.920 --> 00:59:04.420
+be in. And then it has more functionality,
+
+00:59:07.440 --> 00:59:07.940
+more stuff. It's gonna be great.
+
+00:59:09.960 --> 00:59:10.380
+And then I just was like,
+
+00:59:11.880 --> 00:59:12.380
+I'm gonna go find my own.
+
+00:59:15.920 --> 00:59:16.200
+I'm really happy that I took the path because
+
+00:59:19.300 --> 00:59:19.640
+I just worked, wrote, and I'm like,
+
+00:59:21.000 --> 00:59:21.380
+I bet you this, I bet you the tool,
+
+00:59:22.540 --> 00:59:22.960
+I know it can do this because it,
+
+00:59:24.620 --> 00:59:25.120
+you know, text me, did this or Adam,
+
+00:59:27.800 --> 00:59:28.300
+I'm gonna go, I went on to Melpa and I found
+
+00:59:29.440 --> 00:59:29.940
+a couple different things.
+
+00:59:31.120 --> 00:59:31.440
+I'm like, all right, let's try them.
+
+00:59:32.320 --> 00:59:32.640
+I'm like, that's the 1,
+
+00:59:34.480 --> 00:59:34.980
+great. Roll it in, keep working.
+
+00:59:36.000 --> 00:59:36.500
+I know it can do this.
+
+00:59:39.800 --> 00:59:40.160
+Find a package. And so I built up this sense
+
+00:59:46.060 --> 00:59:46.160
+of the packages and my strategy was go to
+
+00:59:49.680 --> 00:59:49.940
+Melpa, look at, that was the 1 that showed
+
+00:59:52.540 --> 00:59:53.040
+up, look at the number of downloads.
+
+00:59:54.520 --> 00:59:54.960
+So I'm like, what's the high stuff?
+
+00:59:55.900 --> 00:59:56.400
+What really gets used?
+
+00:59:57.680 --> 00:59:58.180
+There's something there.
+
+01:00:00.320 --> 01:00:00.760
+And then also look at what was most recently
+
+01:00:03.420 --> 01:00:03.580
+updated. So kind of pivot on those along with
+
+01:00:06.960 --> 01:00:07.260
+a keyword search and I found the tools that
+
+01:00:17.780 --> 01:00:18.100
+worked well. But it really came down to like
+
+01:00:19.960 --> 01:00:20.460
+that VS Code I was almost in,
+
+01:00:24.400 --> 01:00:24.640
+but I've been around long enough to know what
+
+01:00:25.560 --> 01:00:26.060
+Microsoft will do.
+
+01:00:32.240 --> 01:00:32.540
+[Speaker 2]: For me, I was always like customizing things.
+
+01:00:34.600 --> 01:00:35.100
+I think I saw some interesting emacs videos.
+
+01:00:42.320 --> 01:00:42.720
+I wanted to try Well, I wanted to try working
+
+01:00:44.500 --> 01:00:44.720
+more with the keyboard and not need I think
+
+01:00:46.800 --> 01:00:47.300
+[Speaker 1]: mm-hmm
+
+01:00:51.180 --> 01:00:51.680
+[Speaker 2]: the mouse on a laptop And so I was looking
+
+01:00:54.380 --> 01:00:54.520
+explicitly for ways to just work on the
+
+01:00:56.920 --> 01:00:57.400
+keyboard only, which meant that I wasn't
+
+01:00:59.060 --> 01:00:59.560
+looking for programs that followed Cua,
+
+01:01:04.400 --> 01:01:04.900
+which really leaves you like 2 options,
+
+01:01:10.960 --> 01:01:11.380
+Vim and Emacs. And when I looked at the 2,
+
+01:01:13.940 --> 01:01:14.100
+I saw 1 of the big differentiating factors I
+
+01:01:15.660 --> 01:01:16.020
+saw was Tramp, which was,
+
+01:01:18.480 --> 01:01:18.600
+oh, you mean I get a SSH into a machine and
+
+01:01:19.840 --> 01:01:20.340
+have my customizations too?
+
+01:01:22.740 --> 01:01:23.240
+[Speaker 1]: Yep. Yeah.
+
+01:01:29.140 --> 01:01:29.540
+[Speaker 2]: And then I started using Emacs more and more.
+
+01:01:34.440 --> 01:01:34.860
+Eventually I combined that with a tiling
+
+01:01:36.400 --> 01:01:36.900
+window manager, NixOS,
+
+01:01:40.840 --> 01:01:41.040
+and started banishing as much of the GUI as I
+
+01:01:44.060 --> 01:01:44.560
+possibly could, running MPV or VLC,
+
+01:01:49.180 --> 01:01:49.400
+so I could edit so that my config files could
+
+01:01:53.720 --> 01:01:54.020
+be keyboard oriented. My settings config
+
+01:01:55.920 --> 01:01:56.420
+menus are now keyboard oriented.
+
+01:02:00.860 --> 01:02:01.080
+And yeah, that was the incremental process of
+
+01:02:04.400 --> 01:02:04.900
+just, yeah, making the computer nicer,
+
+01:02:06.680 --> 01:02:06.860
+more efficient, and then you figure out all
+
+01:02:08.080 --> 01:02:08.580
+the other advantages of the...
+
+01:02:13.440 --> 01:02:13.780
+[Speaker 1]: Yeah. How did you get in to it,
+
+01:02:18.940 --> 01:02:19.440
+[Speaker 2]: Oh, you're lost.
+
+01:02:21.840 --> 01:02:22.340
+[Speaker 1]: Sasha? Your sound is gone.
+
+01:02:27.345 --> 01:02:27.845
+[Speaker 3]: Sorry, my face mute button.
+
+01:02:29.600 --> 01:02:29.800
+Okay, I'll tell you that story,
+
+01:02:30.840 --> 01:02:31.080
+I get thought out of my head,
+
+01:02:32.780 --> 01:02:33.240
+so I forget it. But what you described,
+
+01:02:34.900 --> 01:02:35.080
+Jerry, about kind of starting with the
+
+01:02:37.340 --> 01:02:37.540
+distribution and then pulling back and
+
+01:02:39.140 --> 01:02:39.520
+starting with vanilla and building up,
+
+01:02:41.040 --> 01:02:41.320
+kind of close the stories that I've heard
+
+01:02:42.980 --> 01:02:43.480
+from a lot of people in the community where
+
+01:02:46.600 --> 01:02:46.800
+the distribution gives them kind of an end
+
+01:02:48.140 --> 01:02:48.640
+goal, at least work requirements,
+
+01:02:50.280 --> 01:02:50.600
+So get the stuff done and they're not
+
+01:02:52.260 --> 01:02:52.760
+slugging through the weeds around the start.
+
+01:02:55.440 --> 01:02:55.760
+I have a hard time modifying it because
+
+01:02:57.440 --> 01:02:57.720
+modifying the distribution itself is very
+
+01:02:59.140 --> 01:02:59.640
+different from the tools they see.
+
+01:03:01.520 --> 01:03:01.740
+They feel like they want to understand the
+
+01:03:02.320 --> 01:03:02.820
+different possible part.
+
+01:03:04.240 --> 01:03:04.540
+And so then they pull back and say,
+
+01:03:06.300 --> 01:03:06.800
+okay, I've got this thing that can use
+
+01:03:08.360 --> 01:03:08.680
+everything to just get some quick work done,
+
+01:03:10.380 --> 01:03:10.760
+but I have this thing that I can call,
+
+01:03:13.500 --> 01:03:13.680
+that's mine. And I understand because I'm
+
+01:03:15.960 --> 01:03:16.460
+building it up from the ground up.
+
+01:03:19.540 --> 01:03:19.640
+Okay, so that's like, oh,
+
+01:03:21.500 --> 01:03:21.660
+interesting, there's a lot of people who are
+
+01:03:23.940 --> 01:03:24.280
+like that, and it really helps them to both
+
+01:03:27.240 --> 01:03:27.620
+have that insight, which is see through
+
+01:03:29.540 --> 01:03:29.780
+distributions and also videos of other
+
+01:03:32.060 --> 01:03:32.220
+people's workflows and press kind of
+
+01:03:34.080 --> 01:03:34.500
+conference presentations often about
+
+01:03:35.140 --> 01:03:35.540
+completely different topics,
+
+01:03:37.540 --> 01:03:37.700
+right? So someone whizzing through Ruby on
+
+01:03:39.920 --> 01:03:40.420
+Rails or whatever else and doing all of this.
+
+01:03:43.580 --> 01:03:44.040
+But also having 1 help them break out,
+
+01:03:46.560 --> 01:03:46.760
+okay, well, there's a lot of work from where
+
+01:03:47.900 --> 01:03:48.160
+I am to where that is.
+
+01:03:49.740 --> 01:03:50.240
+How do I do it without being overwhelmed?
+
+01:03:51.400 --> 01:03:52.960
+Because if they try to learn everything,
+
+01:03:55.520 --> 01:03:55.760
+they'll go crazy. And then they'll fall.
+
+01:03:57.500 --> 01:03:58.000
+And the brain is super important.
+
+01:04:01.500 --> 01:04:01.860
+And how I got into this whole eMac thing was
+
+01:04:03.520 --> 01:04:03.780
+I was reading all the computer science books
+
+01:04:06.180 --> 01:04:06.480
+in the university library and 1 of the Unix
+
+01:04:09.160 --> 01:04:09.360
+power tools had a chapter on Emacs and had
+
+01:04:11.040 --> 01:04:11.320
+them you know well there's another type of
+
+01:04:14.440 --> 01:04:14.760
+whatever. Okay that's interesting so I went
+
+01:04:17.080 --> 01:04:17.320
+and tried it out But the reason I really got
+
+01:04:19.280 --> 01:04:19.780
+into it was because I was using John Wigley's
+
+01:04:23.520 --> 01:04:23.760
+Planner Mode. This was before Org Mode came
+
+01:04:25.320 --> 01:04:25.600
+about. So Planner Mode was a link.
+
+01:04:27.040 --> 01:04:27.540
+I said, hey, this is great.
+
+01:04:29.380 --> 01:04:29.880
+I'm looking for ways to help out.
+
+01:04:31.560 --> 01:04:32.060
+If you need help verifying any bugs,
+
+01:04:34.160 --> 01:04:34.660
+you know, send it to me and I'll do the
+
+01:04:37.540 --> 01:04:37.840
+figuring out. He's an author and an inventor.
+
+01:04:37.960 --> 01:04:38.100
+[Speaker 2]: And then
+
+01:04:39.480 --> 01:04:39.980
+[Speaker 3]: he made me the miniature for it.
+
+01:04:42.720 --> 01:04:42.880
+So I'm like, okay. And then that's how I got
+
+01:04:44.680 --> 01:04:45.140
+to know this wonderful community of people
+
+01:04:46.840 --> 01:04:47.340
+who customize emacs so much.
+
+01:04:51.680 --> 01:04:52.180
+And it just goes there because really,
+
+01:04:54.100 --> 01:04:54.240
+when you see all these different ways that
+
+01:04:55.860 --> 01:04:56.360
+people use in all these different stories
+
+01:05:00.060 --> 01:05:00.480
+that you get send off because they're using
+
+01:05:03.960 --> 01:05:04.460
+it to bake sourdough bread and do knitting
+
+01:05:06.700 --> 01:05:06.880
+and all the crazy things that people come up
+
+01:05:08.900 --> 01:05:09.400
+with. I've been using it as an audio editor.
+
+01:05:11.000 --> 01:05:11.500
+It's just weird. It's just fun.
+
+01:05:13.100 --> 01:05:13.600
+[Speaker 1]: Yeah, that's great.
+
+01:05:19.640 --> 01:05:20.020
+[Speaker 2]: Yeah. Every, Sasha, like 2 things that I was
+
+01:05:22.900 --> 01:05:23.040
+meaning to say is every time I see the on the
+
+01:05:26.140 --> 01:05:26.580
+EMAX conference the time that the scratch
+
+01:05:29.900 --> 01:05:30.400
+buffer with the big clock that is ticking
+
+01:05:34.980 --> 01:05:35.480
+down as and the multi multiple sized fonts As
+
+01:05:37.720 --> 01:05:37.900
+I always think wow, that's really cool.
+
+01:05:38.980 --> 01:05:39.280
+I didn't know Emacs could do that.
+
+01:05:40.440 --> 01:05:40.940
+Wait, no, I saw that last year.
+
+01:05:43.860 --> 01:05:44.060
+How do you do, now, how do I do that?
+
+01:05:45.360 --> 01:05:45.480
+Cause that's not, and that's not something I
+
+01:05:46.920 --> 01:05:47.420
+normally even think about Emacs doing.
+
+01:05:48.080 --> 01:05:48.580
+[Speaker 1]: Right.
+
+01:05:51.220 --> 01:05:51.720
+[Speaker 2]: I'll think about putting
+
+01:05:55.760 --> 01:05:56.260
+[Speaker 3]: There's an EmacsConf-stream.el
+
+01:05:59.760 --> 01:06:00.260
+in the EmacsConf-el repository.
+
+01:06:03.960 --> 01:06:04.160
+Grab the link and open but you can grab the
+
+01:06:07.940 --> 01:06:08.260
+code from there. It's basically the text
+
+01:06:08.260 --> 01:06:08.760
+property.
+
+01:06:15.020 --> 01:06:15.480
+[Speaker 2]: But it's a thought that has repeated multiple
+
+01:06:17.140 --> 01:06:17.460
+years. Like, I didn't know we could do that
+
+01:06:18.220 --> 01:06:18.720
+way. I thought about that.
+
+01:06:21.260 --> 01:06:21.600
+I had this exact thought last year when I saw
+
+01:06:21.600 --> 01:06:22.100
+it.
+
+01:06:28.260 --> 01:06:28.480
+[Speaker 1]: It's, we're like, I'm at the point where it's
+
+01:06:31.220 --> 01:06:31.620
+like I have memories of remembering doing
+
+01:06:34.540 --> 01:06:35.040
+something. I don't have memories of doing it.
+
+01:06:36.680 --> 01:06:37.180
+Like all of the things.
+
+01:06:40.560 --> 01:06:41.060
+Like so it's again, we,
+
+01:06:45.240 --> 01:06:45.740
+Emacs helps expose like the,
+
+01:06:48.640 --> 01:06:49.140
+like it's, anything's possible.
+
+01:06:53.300 --> 01:06:53.560
+And we see how it becomes possible through
+
+01:06:55.640 --> 01:06:56.120
+other people. And then it gets our brains
+
+01:06:57.780 --> 01:06:58.140
+thinking about other ways of doing stuff.
+
+01:06:59.920 --> 01:07:00.420
+And I think that's the exciting part.
+
+01:07:02.360 --> 01:07:02.860
+Dog who wants to go play Frisbee.
+
+01:07:07.900 --> 01:07:08.080
+[Speaker 3]: And that's actually 1 of the reasons why I
+
+01:07:11.060 --> 01:07:11.320
+want to encourage people to not only talk
+
+01:07:12.840 --> 01:07:12.980
+about Emacs and write Emacs blog posts,
+
+01:07:15.380 --> 01:07:15.520
+but also actually demonstrate Emacs in the
+
+01:07:16.560 --> 01:07:17.060
+sense of doing something else.
+
+01:07:20.220 --> 01:07:20.720
+So for example, we can match people at Emacs
+
+01:07:23.560 --> 01:07:24.000
+if you're presenting about Ruby on Rails and
+
+01:07:27.040 --> 01:07:27.440
+you're doing all of your and education and
+
+01:07:30.240 --> 01:07:30.480
+things while you're presenting Rails,
+
+01:07:32.900 --> 01:07:33.400
+you reach all these people who are interested
+
+01:07:34.400 --> 01:07:34.780
+in Rails, developer Rails,
+
+01:07:36.260 --> 01:07:36.760
+but might not have even considered Emacs.
+
+01:07:41.920 --> 01:07:42.420
+And here, you know, you probably would.
+
+01:07:44.860 --> 01:07:45.060
+I would probably have a hard time writing an
+
+01:07:47.040 --> 01:07:47.540
+entire talk about adding text properties,
+
+01:07:49.540 --> 01:07:49.760
+but the fact that there's a thing here that
+
+01:07:50.800 --> 01:07:51.300
+shows, hey, this is possible,
+
+01:07:53.000 --> 01:07:53.300
+Emacs can get people to think,
+
+01:07:54.880 --> 01:07:55.380
+okay, so how do I get from here to there?
+
+01:07:57.440 --> 01:07:57.940
+Just showing the possible.
+
+01:08:02.120 --> 01:08:02.360
+Yeah. Which source code is in the,
+
+01:08:02.360 --> 01:08:02.860
+whatchamacallit.
+
+01:08:04.600 --> 01:08:05.100
+[Speaker 1]: Right, yeah. Yeah, I just saw that.
+
+01:08:08.240 --> 01:08:08.740
+[Speaker 2]: There's a weird interesting thing how Emacs
+
+01:08:12.540 --> 01:08:12.720
+dovetails with people who are interested in
+
+01:08:15.940 --> 01:08:16.439
+making their own local first Zettelkasten,
+
+01:08:17.720 --> 01:08:18.220
+because look at how many Zettelkasten
+
+01:08:21.300 --> 01:08:21.600
+packages you have. Especially with how much,
+
+01:08:23.800 --> 01:08:24.100
+like it feels like, it seems like Emacs has
+
+01:08:27.439 --> 01:08:27.939
+more than Vim, but Vim is bigger or VS,
+
+01:08:30.140 --> 01:08:30.420
+feels like it has more than Vim or VS Code,
+
+01:08:31.920 --> 01:08:32.319
+and VS Code's bigger. I'm not sure,
+
+01:08:36.819 --> 01:08:37.319
+but it feels like it. Same thing with that
+
+01:08:39.920 --> 01:08:40.420
+HyperCore. That HyperCore felt more like a
+
+01:08:42.540 --> 01:08:43.040
+local first peer-to-peer system.
+
+01:08:48.240 --> 01:08:48.640
+So there's a weird dovetail where they want
+
+01:08:52.279 --> 01:08:52.779
+the knowledge bases that are local first,
+
+01:08:58.260 --> 01:08:58.359
+comprehensive, because 1 of the properties of
+
+01:09:03.500 --> 01:09:03.740
+the Zettelkasten or Org Mode agendas is that
+
+01:09:07.359 --> 01:09:07.819
+it's all your notes in 1 place.
+
+01:09:14.439 --> 01:09:14.760
+It's not, you know, your notes in either pad
+
+01:09:19.540 --> 01:09:20.040
+and your notes in Google Calendar,
+
+01:09:23.180 --> 01:09:23.680
+your notes in 20 different places,
+
+01:09:24.520 --> 01:09:25.020
+your notes in Evernote.
+
+01:09:28.700 --> 01:09:29.060
+It's your notes in 1 program in 1 place
+
+01:09:30.840 --> 01:09:31.080
+because you have to deal with them And
+
+01:09:32.600 --> 01:09:32.800
+they're going to be in files on your hard
+
+01:09:34.279 --> 01:09:34.779
+drive, and you're going to have packages
+
+01:09:37.080 --> 01:09:37.359
+there. That's the other weird thing too,
+
+01:09:40.240 --> 01:09:40.600
+is how many, like, you install an Emacs
+
+01:09:41.399 --> 01:09:41.899
+package, 1 of the guarantees,
+
+01:09:43.439 --> 01:09:43.640
+some of the guarantees you seem to get with
+
+01:09:46.260 --> 01:09:46.680
+it is if it does use an external program,
+
+01:09:48.399 --> 01:09:48.580
+it's going to have a lot of configuration in
+
+01:09:51.020 --> 01:09:51.520
+Emacs. It's going to be installed.
+
+01:09:53.760 --> 01:09:54.260
+It's going to be local first.
+
+01:09:56.780 --> 01:09:57.100
+Cause like you have flow bits,
+
+01:09:59.340 --> 01:09:59.840
+but how many programs like are,
+
+01:10:05.140 --> 01:10:05.280
+are cloud first. And it feels like most of
+
+01:10:06.820 --> 01:10:07.320
+those are like org Trello,
+
+01:10:10.160 --> 01:10:10.520
+where it's like, I want to use org mode,
+
+01:10:12.040 --> 01:10:12.540
+but other people use Trello.
+
+01:10:15.460 --> 01:10:15.780
+So I'm going to be grudgingly using this org
+
+01:10:17.400 --> 01:10:17.660
+Trello to be a bridge between the 2,
+
+01:10:19.200 --> 01:10:19.640
+not because I wanted to use org,
+
+01:10:21.240 --> 01:10:21.360
+not because I wanted to use Trello in the
+
+01:10:23.200 --> 01:10:23.320
+first place or I started off with Trello and
+
+01:10:24.280 --> 01:10:24.780
+now I wanna use org mode.
+
+01:10:27.680 --> 01:10:28.180
+[Speaker 1]: Right, no, you're that local first.
+
+01:10:37.020 --> 01:10:37.400
+The Thought I have is with the 2022 interest
+
+01:10:43.080 --> 01:10:43.580
+rates going up, the era of free money,
+
+01:10:46.520 --> 01:10:47.020
+or even like getting money for more,
+
+01:10:49.960 --> 01:10:50.180
+more money than it actually costs Like it was
+
+01:10:55.600 --> 01:10:56.100
+minting money. We are going to be seeing how
+
+01:10:59.440 --> 01:10:59.940
+these organizations that had financial
+
+01:11:01.840 --> 01:11:02.340
+runways, all of these cloud services,
+
+01:11:06.760 --> 01:11:07.020
+what's not gonna last because there's no
+
+01:11:12.440 --> 01:11:12.880
+funding. And like the durability of our local
+
+01:11:16.400 --> 01:11:16.900
+first plain text, free open source stuff.
+
+01:11:21.320 --> 01:11:21.820
+Like I won't have to do a content migration
+
+01:11:24.320 --> 01:11:24.740
+unless I get a B of my bonnet and want to
+
+01:11:27.700 --> 01:11:27.880
+like change from org mode to markdown for
+
+01:11:30.660 --> 01:11:30.920
+some reason. Like I have it and Then I can
+
+01:11:32.980 --> 01:11:33.480
+send it out. So there's also like that posse
+
+01:11:36.400 --> 01:11:36.900
+principle publish on-site syndicate
+
+01:11:41.660 --> 01:11:41.820
+everywhere Is what emacs and vim like they
+
+01:11:42.780 --> 01:11:43.280
+allow for us to do?
+
+01:11:46.440 --> 01:11:46.620
+[Speaker 2]: Well, that's part of the individuation is you
+
+01:11:48.900 --> 01:11:49.080
+have multiple options of doing something so
+
+01:11:51.580 --> 01:11:51.820
+you can choose something so you can take
+
+01:11:54.360 --> 01:11:54.860
+ownership of your data in the way you want.
+
+01:12:00.220 --> 01:12:00.380
+It all dovetails into each other and I think
+
+01:12:02.840 --> 01:12:03.260
+that's something worth thinking about,
+
+01:12:05.540 --> 01:12:05.800
+especially in relation with who should learn
+
+01:12:08.040 --> 01:12:08.440
+and how should you introduce Emacs to people,
+
+01:12:14.180 --> 01:12:14.420
+because like, with the idea of people should
+
+01:12:16.560 --> 01:12:16.800
+try an Emacs distribution and then start
+
+01:12:17.240 --> 01:12:17.740
+their own from scratch,
+
+01:12:18.880 --> 01:12:19.120
+just so that they, like,
+
+01:12:20.280 --> 01:12:20.640
+if you use it for 10 minutes,
+
+01:12:24.400 --> 01:12:24.820
+you'll gain so much because you use your 3
+
+01:12:25.760 --> 01:12:26.260
+and then all of a sudden you realize,
+
+01:12:29.180 --> 01:12:29.440
+you also know how malleable Emacs can be.
+
+01:12:30.520 --> 01:12:30.960
+And then you start saying,
+
+01:12:32.000 --> 01:12:32.160
+now, how do I do that?
+
+01:12:33.240 --> 01:12:33.740
+So I get to make those choices?
+
+01:12:34.840 --> 01:12:35.340
+[Speaker 1]: Yeah.
+
+01:12:39.340 --> 01:12:39.520
+[Speaker 2]: Or you might say, this person did it well
+
+01:12:40.320 --> 01:12:40.820
+enough, I don't have to.
+
+01:12:43.500 --> 01:12:43.900
+[Speaker 3]: That reminded me of something that I also
+
+01:12:45.360 --> 01:12:45.860
+wanted to mention, shocking word,
+
+01:12:49.040 --> 01:12:49.280
+as in malleability. Another tip I came
+
+01:12:50.600 --> 01:12:50.900
+across, don't know from whom,
+
+01:12:51.500 --> 01:12:51.700
+might have been from you,
+
+01:12:53.440 --> 01:12:53.940
+I don't know, is to define aliases,
+
+01:12:56.320 --> 01:12:56.460
+because we use different words from what the
+
+01:12:58.680 --> 01:12:59.180
+functions are. It's 1 of those little meta
+
+01:13:00.420 --> 01:13:00.720
+things that, you know,
+
+01:13:02.080 --> 01:13:02.580
+If you keep calling it something else,
+
+01:13:05.900 --> 01:13:06.020
+just define it so that you can call it like
+
+01:13:06.760 --> 01:13:07.260
+commencing your words.
+
+01:13:12.440 --> 01:13:12.740
+[Speaker 1]: it's interesting. Anyway,
+
+01:13:14.020 --> 01:13:14.240
+[Speaker 3]: Yeah. Yeah, gotta go disappear and get ready
+
+01:13:17.220 --> 01:13:17.360
+for my dog. Okay, I'll listen to what you
+
+01:13:18.120 --> 01:13:18.280
+say. All right, I
+
+01:13:20.020 --> 01:13:20.520
+[Speaker 1]: I need to take my dogs out and play Frisbee.
+
+01:13:21.780 --> 01:13:22.280
+They have been so patient.
+
+01:13:26.040 --> 01:13:26.200
+So it was great talking with all of you and
+
+01:13:29.640 --> 01:13:30.040
+Sasha, thanks for the organizing energy
+
+01:13:31.680 --> 01:13:32.120
+you've put into this. Plasma Strike,
+
+01:13:32.800 --> 01:13:33.300
+thank you for your presentation.
+
+01:13:34.860 --> 01:13:35.360
+I love this conference.
+
+01:13:36.660 --> 01:13:37.160
+So thank you very much.
+
+01:13:41.760 --> 01:13:42.260
+And now have a good rest of your Sunday.
+
+01:13:43.100 --> 01:13:43.600
+Bye.
diff --git a/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 b/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
new file mode 100644
index 00000000..fb2f1603
--- /dev/null
+++ b/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
@@ -0,0 +1,696 @@
+WEBVTT captioned by hannah, checked by sachac
+
+NOTE Introduction
+
+00:00:01.380 --> 00:00:06.319
+Hi everyone, my name is Jeremy Friesen, pronouns are he/him,
+
+00:00:06.320 --> 00:00:07.879
+and today I'll be talking about
+
+00:00:07.880 --> 00:00:11.519
+mentoring VS Coders as an Emacs-ian.
+
+00:00:11.520 --> 00:00:14.999
+A little bit of background, since 2015, I've mentored
+
+00:00:15.000 --> 00:00:16.559
+about 40 software developers,
+
+00:00:16.560 --> 00:00:19.239
+many of them in career-transitioning roles,
+
+00:00:19.240 --> 00:00:21.739
+oftentimes from boot camps.
+
+00:00:21.740 --> 00:00:26.739
+I've also managed a couple of small software development teams.
+
+NOTE Framing approaches
+
+00:00:26.740 --> 00:00:30.599
+So I want to think about mentoring and the framing approaches.
+
+00:00:30.600 --> 00:00:32.939
+We all don't know what we don't know.
+
+00:00:32.940 --> 00:00:36.419
+So while mentoring, I like to be curious---asking questions,
+
+00:00:36.420 --> 00:00:37.659
+I like to be visible,
+
+00:00:37.660 --> 00:00:41.939
+and I also like to pair so that we can share.
+
+NOTE What are you looking to learn?
+
+00:00:41.940 --> 00:00:45.299
+When I start, I like to ask the following type of question:
+
+00:00:45.300 --> 00:00:47.119
+"What have you been wanting to learn more of,
+
+00:00:47.120 --> 00:00:49.359
+get better at, and improve on?"
+
+00:00:49.360 --> 00:00:52.939
+Then I like to ask further questions to get an understanding
+
+00:00:52.940 --> 00:00:55.159
+of where they've been, where they're going,
+
+00:00:55.160 --> 00:00:57.279
+and what they'd like to achieve.
+
+00:00:57.280 --> 00:01:00.139
+Later I'll ask coaching questions, "what's going well,"
+
+00:01:00.140 --> 00:01:01.419
+"where are you getting stuck,"
+
+00:01:01.420 --> 00:01:05.999
+and "if you change one thing, what would it be?"
+
+NOTE Make the work visible
+
+00:01:06.000 --> 00:01:09.839
+So like many people, I shifted to remote work in 2020,
+
+00:01:09.840 --> 00:01:13.159
+and I've noticed a higher collaboration in remote work,
+
+00:01:13.160 --> 00:01:15.919
+when folks make their work visible.
+
+00:01:15.920 --> 00:01:18.199
+So to do that I host office hours,
+
+00:01:18.200 --> 00:01:20.679
+I try to attend other people's office hours,
+
+00:01:20.680 --> 00:01:23.439
+and I'll open up a Slack huddle and just code by myself,
+
+00:01:23.440 --> 00:01:29.319
+but let folks know, please hop in.
+
+NOTE Hop in and be curious
+
+00:01:29.320 --> 00:01:32.039
+I like to pay attention to other huddles that start.
+
+00:01:32.040 --> 00:01:35.239
+If they're going still for, like, 45 minutes or so,
+
+00:01:35.240 --> 00:01:36.799
+I'll hop in and say hello.
+
+00:01:36.800 --> 00:01:39.399
+It's even odds that they're moving along just fine
+
+00:01:39.400 --> 00:01:40.799
+or that they're stuck.
+
+00:01:40.800 --> 00:01:43.279
+So by hopping into the Slack huddle,
+
+00:01:43.280 --> 00:01:45.479
+I'm helping with a common problem.
+
+00:01:45.480 --> 00:01:47.199
+How do you know when you're stuck?
+
+00:01:47.200 --> 00:01:50.639
+This is something that---as a manager---folks want to know,
+
+00:01:50.640 --> 00:01:53.439
+how can I get unstuck faster?
+
+00:01:53.440 --> 00:01:57.119
+As a human, it can be frustrating to be stuck for a long time,
+
+00:01:57.120 --> 00:01:58.599
+but you also learn stuff
+
+00:01:58.600 --> 00:02:00.759
+when you're dealing with the hard things.
+
+00:02:00.760 --> 00:02:03.219
+So you really need to balance that time,
+
+00:02:03.220 --> 00:02:07.159
+and I find hopping in, just being a gentle presence,
+
+00:02:07.160 --> 00:02:10.359
+with yes... an agenda, but just to say hi,
+
+00:02:10.360 --> 00:02:15.879
+is crucial to help the team members move along.
+
+NOTE Pairing is for sharing
+
+00:02:15.880 --> 00:02:17.239
+Pairing is for sharing.
+
+00:02:17.240 --> 00:02:19.919
+When I pair, I like to let others drive.
+
+00:02:19.920 --> 00:02:22.239
+They're typing and working to resolve the problem.
+
+00:02:22.240 --> 00:02:24.599
+I'm giving guidance, asking questions,
+
+00:02:24.600 --> 00:02:27.119
+maybe thinking through a refactor.
+
+00:02:27.120 --> 00:02:31.159
+I'm also spending time observing how they interact with their editor.
+
+00:02:31.160 --> 00:02:35.839
+In the moment, I try to limit advice to, like, one concept.
+
+00:02:35.840 --> 00:02:37.799
+A lot of folks don't know that `Control-a`
+
+00:02:37.800 --> 00:02:39.719
+will take you to the beginning of line.
+
+00:02:39.720 --> 00:02:42.679
+Just sharing that is huge sometimes.
+
+00:02:42.680 --> 00:02:46.919
+Just gently do it and let it float there.
+
+00:02:46.920 --> 00:02:48.919
+And assuming we have a regular mentoring session,
+
+00:02:48.920 --> 00:02:50.399
+I'll make sure to ask how they're feeling
+
+00:02:50.400 --> 00:02:52.679
+about using their tools afterwards.
+
+00:02:52.680 --> 00:02:55.679
+I would love to get to the point where they ask,
+
+00:02:55.680 --> 00:02:58.759
+"You saw me using my editor, what is something
+
+00:02:58.760 --> 00:03:00.959
+I could learn?"
+
+00:03:00.960 --> 00:03:03.859
+I'm working on getting to that point.
+
+NOTE Editor functions
+
+00:03:03.860 --> 00:03:05.199
+While pairing, I like to pay attention
+
+00:03:05.200 --> 00:03:07.439
+to how folks handle the following.
+
+00:03:07.440 --> 00:03:08.559
+Where do they want to go?
+
+00:03:08.560 --> 00:03:10.759
+How do they get there?
+
+00:03:10.760 --> 00:03:12.079
+Here they are, now what?
+
+00:03:12.080 --> 00:03:13.599
+How do they summarize?
+
+00:03:13.600 --> 00:03:15.239
+I know what I can do in Emacs,
+
+00:03:15.240 --> 00:03:17.399
+and I assume that VS Code can do something similar.
+
+00:03:17.400 --> 00:03:23.239
+It's a matter of helping the mentees find those packages and plugins.
+
+NOTE Where do they want to go?
+
+00:03:23.240 --> 00:03:24.239
+Where to go?
+
+00:03:24.240 --> 00:03:25.759
+Search within a project.
+
+00:03:25.760 --> 00:03:27.999
+Everybody knows about this, but one thing
+
+00:03:28.000 --> 00:03:29.799
+that has been really critical for me
+
+00:03:29.800 --> 00:03:31.959
+has been the arrival of `Orderless`.
+
+00:03:31.960 --> 00:03:34.759
+A little quick demonstration.
+
+00:03:34.760 --> 00:03:40.719
+If I look, and I have this "chicken" and I do "spell",
+
+00:03:40.720 --> 00:03:42.200
+I have found one, and they don't have
+
+00:03:42.201 --> 00:03:43.380
+to be in the right order.
+
+00:03:43.381 --> 00:03:48.039
+In fact, I can go back, and "spell" is there.
+
+00:03:48.040 --> 00:03:52.759
+Super easy, helpful, so I don't have to think about it, the order.
+
+00:03:52.760 --> 00:03:54.719
+Search across projects.
+
+00:03:54.720 --> 00:03:59.519
+Cross-repository searching is super-simple in Emacs,
+
+00:03:59.520 --> 00:04:02.739
+and I've never seen anyone do it in VS Code.
+
+00:04:02.740 --> 00:04:05.639
+I'm also trying to introduce folks to command-line tools
+
+00:04:05.640 --> 00:04:07.959
+such as RipGrep and SilverSearcher,
+
+00:04:07.960 --> 00:04:10.639
+not just to look in the project, but to go one directory up
+
+00:04:10.640 --> 00:04:11.999
+and look across projects
+
+00:04:12.000 --> 00:04:15.059
+because sometimes when you're working on lots of different projects,
+
+00:04:15.060 --> 00:04:19.959
+there might be solutions or ideas that come from there.
+
+00:04:19.960 --> 00:04:23.239
+Also notice that a lot of people use directory trees to navigate,
+
+00:04:23.240 --> 00:04:25.599
+but I favor the fuzzy text.
+
+00:04:25.600 --> 00:04:27.759
+So I can do something like `Command-t`
+
+00:04:27.760 --> 00:04:31.279
+and start looking for things in there.
+
+00:04:31.280 --> 00:04:33.759
+I just type the name of the file.
+
+00:04:33.760 --> 00:04:35.319
+I use `consult-projectile`,
+
+00:04:35.320 --> 00:04:39.539
+which has a lot of really cool functionality.
+
+00:04:39.540 --> 00:04:43.079
+The big one being I can type `r`, recent file.
+
+00:04:43.080 --> 00:04:47.719
+I can type `p` and jump to a different project,
+
+00:04:47.720 --> 00:04:53.439
+so it's a quick navigation tool that I've not seen in VS Code.
+
+NOTE How do they get there?
+
+00:04:53.440 --> 00:04:56.519
+Next up is how do they get there?
+
+00:04:56.520 --> 00:04:58.959
+I like to use LSP for the languages,
+
+00:04:58.960 --> 00:05:02.879
+and I bound `M-.` to this
+
+00:05:02.880 --> 00:05:05.519
+and jump back and forth to definitions.
+
+00:05:05.520 --> 00:05:09.439
+I just showed `projectile` or `consult-projectile`
+
+00:05:09.440 --> 00:05:12.859
+and its super-amazing multifunction finder.
+
+00:05:12.860 --> 00:05:15.519
+Also another one that I am very avid about
+
+00:05:15.520 --> 00:05:19.519
+is the jump between definition and test.
+
+00:05:19.520 --> 00:05:22.839
+I bind that to `Super-.`
+
+00:05:22.840 --> 00:05:25.839
+and it helps me jump back and forth
+
+00:05:25.840 --> 00:05:28.519
+between my production code and my test code---
+
+00:05:28.520 --> 00:05:32.119
+especially in Ruby, there's an idiom for that.
+
+00:05:32.120 --> 00:05:36.639
+There is plugins in VS Code that does this correctly.
+
+NOTE Here they are, now what?
+
+00:05:36.640 --> 00:05:39.399
+Next up, now I'm here, what do I do?
+
+00:05:39.400 --> 00:05:44.599
+Word completion, Emacs just knocks everything out of the park:
+
+00:05:44.600 --> 00:05:48.199
+`dabbrev`, `templates`, `hippie-expand`, `completion-at-point`.
+
+00:05:48.200 --> 00:05:52.079
+Sometimes it just hurts to watch people type stuff
+
+00:05:52.080 --> 00:05:54.319
+that they could quickly expand
+
+00:05:54.320 --> 00:05:56.299
+because there are words within the code.
+
+00:05:56.300 --> 00:05:57.919
+Another one is auto-formatting.
+
+00:05:57.920 --> 00:06:00.039
+Tree sitter...its arrival is great.
+
+00:06:00.040 --> 00:06:01.479
+I assume this is going to get better.
+
+00:06:01.480 --> 00:06:04.919
+I love highlighting a region, hitting `TAB`, and it's just formatted.
+
+00:06:04.920 --> 00:06:08.760
+I've seen a lot of VS Coders... that doesn't work for them.
+
+00:06:08.761 --> 00:06:11.079
+Don't know why, trying to get them to see it.
+
+00:06:11.080 --> 00:06:12.900
+Multi-cursor [`multiple-cursors`] and `iedit`...
+
+00:06:12.901 --> 00:06:14.799
+took me a long time to explore `iedit`,
+
+00:06:14.800 --> 00:06:17.839
+but the practice... but practicing was huge,
+
+00:06:17.840 --> 00:06:21.479
+and it has transformed my approach to coding and typing.
+
+00:06:21.480 --> 00:06:24.519
+Folks know about multi-cursor editing and editing-in-region
+
+00:06:24.520 --> 00:06:27.919
+but make sure that they are aware of it.
+
+00:06:27.920 --> 00:06:29.719
+It's important.
+
+00:06:29.720 --> 00:06:32.619
+Next up is inline searching.
+
+00:06:32.620 --> 00:06:35.199
+My beloved Textmate... it was the first thing.
+
+00:06:35.200 --> 00:06:38.439
+In fact, it was why I chose not to use Emacs in 2005
+
+00:06:38.440 --> 00:06:41.679
+and went with Textmate.
+
+00:06:41.680 --> 00:06:43.759
+This is something quite simple.
+
+00:06:43.760 --> 00:06:49.999
+I can do `search` within here, and I can see "introduced",
+
+00:06:50.000 --> 00:06:52.239
+and it will show me the line.
+
+00:06:52.240 --> 00:06:54.119
+What I like about that is when I'm in code,
+
+00:06:54.120 --> 00:06:56.319
+I can see the neighborhood of other things
+
+00:06:56.320 --> 00:06:58.359
+and get a good idea of what's around.
+
+00:06:58.360 --> 00:07:01.639
+Yes, there is `occur-mode` that can be super useful,
+
+00:07:01.640 --> 00:07:03.839
+but I'm used to the Textmate in it.
+
+00:07:03.840 --> 00:07:06.639
+I just love it.
+
+NOTE How do they summarize?
+
+00:07:06.640 --> 00:07:08.679
+Next up is how they summarize.
+
+00:07:08.680 --> 00:07:11.719
+I've seen a lot of bootcamp graduates write commit messages
+
+00:07:11.720 --> 00:07:14.379
+by going to the command line.
+
+00:07:14.380 --> 00:07:17.039
+In my experience, commit messages written in the command line
+
+00:07:17.040 --> 00:07:18.199
+tend to be terse.
+
+00:07:18.200 --> 00:07:19.159
+They miss something.
+
+00:07:19.160 --> 00:07:23.479
+So I try to really quickly shift folks to use their text editor,
+
+00:07:23.480 --> 00:07:24.399
+encourage them and
+
+00:07:24.400 --> 00:07:28.039
+teach them about `$GIT_EDITOR` and `$EDITOR` for the environment variables
+
+00:07:28.040 --> 00:07:30.999
+so they can make their commits from the command line.
+
+00:07:31.000 --> 00:07:34.199
+And if not there, help them improve how they do VS Code.
+
+00:07:34.200 --> 00:07:35.919
+My little screed at the top:
+
+00:07:35.920 --> 00:07:38.959
+the interface for VS Code's commit is trash.
+
+00:07:38.960 --> 00:07:44.439
+It is why I stepped away from VS Code when I was exploring editors.
+
+NOTE General strategies
+
+00:07:44.440 --> 00:07:48.439
+Next up, my goal is to encourage folks to use editors for writing,
+
+00:07:48.440 --> 00:07:52.059
+to think about owning that tool.
+
+NOTE Commit to one item of learning each week
+
+00:07:52.060 --> 00:07:54.679
+I have them try to learn one thing a week.
+
+00:07:54.680 --> 00:07:55.919
+Maybe they aren't going to learn it,
+
+00:07:55.920 --> 00:07:57.799
+but just not to overwhelm them
+
+00:07:57.800 --> 00:07:59.879
+and find those high-value things.
+
+00:07:59.880 --> 00:08:03.719
+Jump to spec, jump to code... super-valuable
+
+00:08:03.720 --> 00:08:06.519
+because I see folks doing it a lot during the day,
+
+00:08:06.520 --> 00:08:10.079
+and it can really speed up the transition time
+
+00:08:10.080 --> 00:08:12.759
+and keep the focus between the test...
+
+00:08:12.760 --> 00:08:15.479
+what you're trying to test and what you're trying to define,
+
+00:08:15.480 --> 00:08:18.959
+which can get lost if you do the tree navigation.
+
+NOTE Practice within your knowledge domain
+
+00:08:18.960 --> 00:08:22.879
+Also I encourage people to practice their domain knowledge.
+
+00:08:22.880 --> 00:08:27.159
+I learned a lot about programming by doing a bunch of things
+
+00:08:27.160 --> 00:08:30.019
+related to RPGs---role-playing games.
+
+00:08:30.020 --> 00:08:33.119
+I did this previously in Ruby---dice rollers, note takers,
+
+00:08:33.120 --> 00:08:35.879
+random table lookups---and now I'm doing it in Emacs.
+
+00:08:35.880 --> 00:08:40.519
+Knowing the domain helps me set aside the problem space
+
+00:08:40.520 --> 00:08:41.999
+and then explore how I code
+
+00:08:42.000 --> 00:08:47.119
+and how I can implement things differently.
+
+NOTE Note-taking
+
+00:08:47.120 --> 00:08:51.239
+Note-taking: pay attention to how folks create a fleeting note.
+
+00:08:51.240 --> 00:08:54.639
+It can be excruciating as they try to figure out
+
+00:08:54.640 --> 00:08:55.599
+"where am I going to put this?"
+
+00:08:55.600 --> 00:08:56.159
+"What file?"
+
+00:08:56.160 --> 00:08:57.659
+"Where does it go?"
+
+00:08:57.660 --> 00:09:01.759
+Emacs, we have the *scratch* buffer or anything else,
+
+00:09:01.760 --> 00:09:07.119
+but ask them about their note-taking habits
+
+NOTE Help them navigate the proprietary software tar pits
+
+00:09:07.120 --> 00:09:11.639
+and help them navigate the proprietary software tar pits.
+
+00:09:11.640 --> 00:09:14.359
+We know that anything that is venture-capital funded
+
+00:09:14.360 --> 00:09:16.039
+will eventually collapse.
+
+00:09:16.040 --> 00:09:20.919
+We know that things that don't have a sustainable business model
+
+00:09:20.920 --> 00:09:22.399
+without surveillance capitalism
+
+00:09:22.400 --> 00:09:25.299
+is going to also have problems.
+
+00:09:25.300 --> 00:09:28.559
+Encourage folks to think about how they're owning their notes.
+
+00:09:28.560 --> 00:09:30.639
+Do they place true value on those,
+
+00:09:30.640 --> 00:09:33.119
+or are they things that are kind of ephemeral?
+
+00:09:33.120 --> 00:09:38.519
+And then help them find the thing that makes sense for them.
+
+NOTE Help show the joy of holisting computering
+
+00:09:38.520 --> 00:09:43.239
+Put another way, I want people to think holistically
+
+00:09:43.240 --> 00:09:47.739
+about their generalized "computering" environment.
+
+NOTE Playing is for staying
+
+00:09:47.740 --> 00:09:50.079
+And I also think about the reason why
+
+00:09:50.080 --> 00:09:53.679
+I've stayed a software developer for 25-years plus
+
+00:09:53.680 --> 00:09:57.999
+is because I approach all of this as play and storytelling.
+
+00:09:58.000 --> 00:10:02.439
+Sometimes happy byproduct is that I ship features and documentation
+
+00:10:02.440 --> 00:10:05.199
+and help people get stuff done.
+
+00:10:05.200 --> 00:10:07.959
+Yet I don't tell folks to use Emacs.
+
+00:10:07.960 --> 00:10:10.719
+Instead, I'm doing my best to show a myriad of reasons
+
+00:10:10.720 --> 00:10:14.899
+for why folks should consider Emacs.
+
+NOTE Conclusion
+
+00:10:14.900 --> 00:10:18.739
+In conclusion, ask questions.
+
+00:10:18.740 --> 00:10:22.399
+Find a person who is a VS Coder and just say,
+
+00:10:22.400 --> 00:10:23.879
+"hey, I learned something new."
+
+00:10:23.880 --> 00:10:26.719
+We play this game all the time, me and my coworker Kirk.
+
+00:10:26.720 --> 00:10:27.699
+I love it.
+
+00:10:27.700 --> 00:10:31.479
+Another goal is showing the malleability of Emacs,
+
+00:10:31.480 --> 00:10:34.399
+how easy it is to extend.
+
+00:10:34.400 --> 00:10:36.679
+And obviously there's so much more than what I've highlighted,
+
+00:10:36.680 --> 00:10:38.719
+but then again, that's Emacs.
+
+00:10:38.720 --> 00:10:44.200
+Thank you, and I look forward to your questions.
diff --git a/2023/captions/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--answers.vtt b/2023/captions/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--answers.vtt
new file mode 100644
index 00000000..20053853
--- /dev/null
+++ b/2023/captions/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--answers.vtt
@@ -0,0 +1,680 @@
+WEBVTT
+
+
+00:00:03.560 --> 00:00:04.059
+[Speaker 0]: About 3
+
+00:00:16.020 --> 00:00:16.400
+seconds. And I believe we are live.
+
+00:00:17.280 --> 00:00:17.780
+Hi Edmund, how are you doing?
+
+00:00:19.240 --> 00:00:19.540
+[Speaker 1]: Hi, how's it going Leo?
+
+00:00:20.279 --> 00:00:20.560
+I'm doing well, thanks.
+
+00:00:20.560 --> 00:00:21.060
+Yourself?
+
+00:00:24.480 --> 00:00:24.640
+[Speaker 0]: I'm also doing well. So Edmund doesn't have
+
+00:00:26.980 --> 00:00:27.259
+his webcam on but he will be able to answer
+
+00:00:29.960 --> 00:00:30.360
+questions that you ask inside of the Azure
+
+00:00:32.159 --> 00:00:32.659
+pad that I've shared again on IRC.
+
+00:00:35.440 --> 00:00:35.560
+By the way, we only have 1 question and we
+
+00:00:37.120 --> 00:00:37.620
+have about 40 minutes of question time,
+
+00:00:40.380 --> 00:00:40.520
+so feel free to add as many questions as you
+
+00:00:41.940 --> 00:00:42.340
+want and in the meantime,
+
+00:00:43.380 --> 00:00:43.660
+we'll get started on the first 1.
+
+00:00:45.020 --> 00:00:45.060
+Unless, Edmond, do you have anything to say
+
+00:00:45.920 --> 00:00:46.420
+after your presentation?
+
+00:00:48.280 --> 00:00:48.780
+[Speaker 1]: No, we can jump in.
+
+00:00:51.560 --> 00:00:52.060
+[Speaker 0]: Okay, lovely. So first question,
+
+00:00:54.940 --> 00:00:55.200
+is the index, sorry, does the index really
+
+00:00:57.840 --> 00:00:58.100
+matter here? I mean his colleague is also
+
+00:01:00.380 --> 00:01:00.560
+using some A4 paper and you think that the
+
+00:01:02.400 --> 00:01:02.900
+index card is the most important thing here?
+
+00:01:04.540 --> 00:01:04.920
+[Speaker 1]: That's a great question.
+
+00:01:08.000 --> 00:01:08.200
+I mean, I think you can do anything with a
+
+00:01:09.520 --> 00:01:09.720
+larger piece of paper that you can do with a
+
+00:01:10.240 --> 00:01:10.460
+smaller piece of paper.
+
+00:01:12.280 --> 00:01:12.479
+But I actually encourage you to try this out.
+
+00:01:14.820 --> 00:01:15.020
+I did, not for research for this talk,
+
+00:01:17.040 --> 00:01:17.160
+but just when I read about Nabokov and his
+
+00:01:18.160 --> 00:01:18.400
+index cards to begin with,
+
+00:01:20.380 --> 00:01:20.660
+I kind of tried it out a little bit and wrote
+
+00:01:22.480 --> 00:01:22.720
+some shorter things on index cards and so on
+
+00:01:24.640 --> 00:01:25.120
+and there really is something about the size
+
+00:01:27.940 --> 00:01:28.440
+and the kind of ability to manipulate them.
+
+00:01:30.200 --> 00:01:30.360
+You really can bundle them and move them
+
+00:01:33.420 --> 00:01:33.720
+around easier and I think that that I think
+
+00:01:35.800 --> 00:01:35.920
+he enjoyed that. So sure I mean I think you
+
+00:01:37.540 --> 00:01:37.660
+can do anything with a4 paper that you could
+
+00:01:38.860 --> 00:01:39.140
+do with index cards but I think there's
+
+00:01:40.760 --> 00:01:41.200
+something about that form that lends itself
+
+00:01:43.840 --> 00:01:44.160
+to the especially to the reorganization maybe
+
+00:01:45.540 --> 00:01:45.820
+to the focus as well just because it's
+
+00:01:47.060 --> 00:01:47.220
+smaller but but definitely to the
+
+00:01:47.220 --> 00:01:47.720
+reorganization.
+
+00:01:53.600 --> 00:01:53.940
+[Speaker 0]: Definitely So we have a lot more questions
+
+00:01:54.640 --> 00:01:54.960
+now. So thank you, everyone,
+
+00:01:56.479 --> 00:01:56.979
+for answering my plea for more questions.
+
+00:01:59.760 --> 00:02:00.060
+Next question. How do you explore the second
+
+00:02:01.880 --> 00:02:02.080
+level headings, i.e. The scenes in this
+
+00:02:03.600 --> 00:02:04.100
+example, without the heading itself,
+
+00:02:05.740 --> 00:02:06.240
+just the content? Is that clear enough?
+
+00:02:09.240 --> 00:02:09.740
+[Speaker 1]: Great question. Yeah, so I've tried 2 ways,
+
+00:02:13.280 --> 00:02:13.440
+sorry, 3 ways with this and landed on 1 that
+
+00:02:16.080 --> 00:02:16.480
+I like. Originally I used the OX package.
+
+00:02:20.080 --> 00:02:20.220
+There's an OX ignore thing in there where you
+
+00:02:23.240 --> 00:02:23.420
+can add an ignore tag to where you don't want
+
+00:02:24.720 --> 00:02:25.140
+the headings, but you do want the content
+
+00:02:26.920 --> 00:02:27.240
+exported. I found that a little bit annoying,
+
+00:02:27.940 --> 00:02:28.280
+just visually annoying,
+
+00:02:31.320 --> 00:02:31.820
+when I'm, again, My theme here is navigating
+
+00:02:34.840 --> 00:02:35.160
+100,000 word documents effectively and having
+
+00:02:36.900 --> 00:02:37.400
+that extra visual noise was kind of a pain.
+
+00:02:40.520 --> 00:02:40.760
+So I ended up, first I just did like a dumb
+
+00:02:43.040 --> 00:02:43.180
+ox script as part of my publication kind of
+
+00:02:47.720 --> 00:02:47.980
+pipeline that removed headlines at the scene
+
+00:02:48.940 --> 00:02:49.240
+level. And then actually,
+
+00:02:50.980 --> 00:02:51.220
+because I ended up leaning so heavily on
+
+00:02:53.680 --> 00:02:53.880
+Pandoc, and Pandoc, for those of you who have
+
+00:02:56.200 --> 00:02:56.700
+not looked at recent versions of Pandoc,
+
+00:03:00.920 --> 00:03:01.300
+they've got a really fantastic way to use Lua
+
+00:03:02.420 --> 00:03:02.920
+at this point to write filters.
+
+00:03:04.940 --> 00:03:05.140
+So you can kind of take the AST of your
+
+00:03:07.120 --> 00:03:07.400
+document and run these very simple Lua
+
+00:03:09.140 --> 00:03:09.620
+filters over it. They used to be in Haskell,
+
+00:03:11.780 --> 00:03:12.120
+which I'm not smart enough to write Haskell
+
+00:03:13.140 --> 00:03:13.500
+is 1 of the things that I've discovered.
+
+00:03:14.440 --> 00:03:14.760
+I keep bouncing off of it,
+
+00:03:16.360 --> 00:03:16.720
+but I'm just smart enough to write Lua.
+
+00:03:19.480 --> 00:03:19.840
+And so I use a Lua filter now,
+
+00:03:21.180 --> 00:03:21.380
+which I'm happy to publish to anyone who's
+
+00:03:22.880 --> 00:03:23.380
+interested. That basically lets me say,
+
+00:03:27.440 --> 00:03:27.560
+you know, what level headings to get rid of
+
+00:03:28.740 --> 00:03:29.120
+the heading, but publish the content.
+
+00:03:30.320 --> 00:03:30.480
+And part of the reason that's been useful is
+
+00:03:31.920 --> 00:03:32.040
+that some of the other novels I'm working on
+
+00:03:33.540 --> 00:03:33.680
+for example have different levels of
+
+00:03:35.640 --> 00:03:35.740
+hierarchy where maybe there's a part and then
+
+00:03:37.260 --> 00:03:37.640
+you know at the top level and then chapter
+
+00:03:39.160 --> 00:03:39.520
+and then scene and it's now the third level
+
+00:03:41.400 --> 00:03:41.580
+instead of the second and it's much easier in
+
+00:03:43.840 --> 00:03:44.060
+the Lua to just be like remove the third
+
+00:03:45.400 --> 00:03:45.700
+level headings or the second level headings
+
+00:03:47.680 --> 00:03:47.860
+or whatever it is so that's been that's been
+
+00:03:47.860 --> 00:03:48.360
+helpful.
+
+00:03:53.040 --> 00:03:53.540
+[Speaker 0]: Great, Moving on to the next question,
+
+00:03:58.120 --> 00:03:58.260
+slightly off topic, where can we see your
+
+00:03:58.260 --> 00:03:58.760
+novels?
+
+00:04:01.060 --> 00:04:01.560
+[Speaker 1]: Oh well yeah, you can,
+
+00:04:05.500 --> 00:04:05.560
+they're on Amazon, there's 2 of them and a
+
+00:04:06.160 --> 00:04:06.660
+book of short stories.
+
+00:04:10.120 --> 00:04:10.440
+I think the short stories and the second
+
+00:04:11.960 --> 00:04:12.280
+novel, which is called World Enough in Time,
+
+00:04:13.940 --> 00:04:14.160
+which is the 1 that kind of prompted this
+
+00:04:16.160 --> 00:04:16.660
+talk, are probably of more interest to this,
+
+00:04:18.320 --> 00:04:18.820
+to the Emacs focused group.
+
+00:04:20.380 --> 00:04:20.740
+The first one's like a philosophical murder
+
+00:04:25.240 --> 00:04:25.440
+mystery, but the World Enough in Time is a
+
+00:04:29.820 --> 00:04:30.320
+kind of Douglas Adams inspired sci-fi comedy
+
+00:04:34.440 --> 00:04:34.940
+about kind of hijinks on a relativistic speed
+
+00:04:37.360 --> 00:04:37.480
+space cruiser, which was a lot of fun to
+
+00:04:38.980 --> 00:04:39.480
+write. It has a lot of twisty subplots,
+
+00:04:42.500 --> 00:04:42.720
+which is where I developed that technique of
+
+00:04:46.560 --> 00:04:46.780
+being able to filter down to tags and see a
+
+00:04:47.840 --> 00:04:48.340
+reduced version of the novel,
+
+00:04:51.560 --> 00:04:51.960
+which was very handy when trying to juggle 13
+
+00:04:53.520 --> 00:04:54.020
+subplots. So yeah, check it out.
+
+00:04:57.240 --> 00:04:57.340
+[Speaker 0]: Great, we'll make sure that you have the
+
+00:04:59.860 --> 00:05:00.360
+links available on the talk page afterwards.
+
+00:05:03.420 --> 00:05:03.740
+Right now I sadly have to host so I cannot
+
+00:05:05.680 --> 00:05:05.820
+look up the links but we'll make sure or if
+
+00:05:08.100 --> 00:05:08.600
+[Speaker 1]: I put it in there for you.
+
+00:05:09.020 --> 00:05:09.520
+[Speaker 0]: anyone in the chat... Oh you did?
+
+00:05:13.800 --> 00:05:13.940
+Yeah. In the meantime we'll move on to the
+
+00:05:16.560 --> 00:05:17.060
+next question. Have you looked at the Denote
+
+00:05:19.700 --> 00:05:20.080
+signature features? The hierarchical nature
+
+00:05:23.180 --> 00:05:23.520
+of Lumen's ideas and index cards works well
+
+00:05:24.100 --> 00:05:24.600
+with Denote signatures.
+
+00:05:26.120 --> 00:05:26.620
+So are you familiar with Denote first?
+
+00:05:28.740 --> 00:05:28.840
+[Speaker 1]: I am not. No, it sounds like something that I
+
+00:05:29.240 --> 00:05:29.740
+should check out.
+
+00:05:33.080 --> 00:05:33.420
+[Speaker 0]: Yeah, Denote is a way to work with slip
+
+00:05:35.460 --> 00:05:35.640
+boxes. We talked a little bit about it
+
+00:05:37.240 --> 00:05:37.740
+earlier today. We talked about Orgroam,
+
+00:05:40.600 --> 00:05:40.900
+we talked about Denote as well as a lighter
+
+00:05:41.580 --> 00:05:42.080
+alternative to Orgroam.
+
+00:05:45.520 --> 00:05:45.920
+And yeah, the organization with index cards
+
+00:05:47.360 --> 00:05:47.720
+feels like it's something that would highly
+
+00:05:50.740 --> 00:05:50.900
+benefit from linking and back links and any
+
+00:05:53.880 --> 00:05:54.380
+kind of UX functionality for relating pieces
+
+00:05:56.680 --> 00:05:56.980
+of information. So yeah,
+
+00:05:57.620 --> 00:05:58.120
+definitely look it up.
+
+00:06:00.040 --> 00:06:00.460
+[Speaker 1]: Yeah, I'm a heavy org-roam user.
+
+00:06:03.280 --> 00:06:03.680
+I use org-roam for a lot of different stuff
+
+00:06:05.740 --> 00:06:05.860
+and I would love, I will definitely check out
+
+00:06:06.740 --> 00:06:07.240
+Denote as an alternative.
+
+00:06:09.520 --> 00:06:09.960
+[Speaker 0]: Sure, I'm not particularly personally
+
+00:06:11.720 --> 00:06:12.180
+familiar with what Signature is within Denote
+
+00:06:13.940 --> 00:06:14.060
+and it'd be great if the person who asked the
+
+00:06:15.580 --> 00:06:15.980
+question could perhaps provide more details
+
+00:06:17.980 --> 00:06:18.180
+so that Edmund could get a little more
+
+00:06:20.000 --> 00:06:20.500
+information when he returns to the document.
+
+00:06:21.480 --> 00:06:21.980
+But yeah, if you're using Org-ROM,
+
+00:06:25.140 --> 00:06:25.280
+you're already within the mindset that you
+
+00:06:27.180 --> 00:06:27.500
+need, and perhaps you'd gain a little bit
+
+00:06:29.260 --> 00:06:29.760
+extra stuff from using Dino's signature,
+
+00:06:32.920 --> 00:06:33.240
+I assume. We have 8 minutes.
+
+00:06:34.040 --> 00:06:34.540
+We're still good on time.
+
+00:06:36.500 --> 00:06:36.980
+Next question, do you have a workflow
+
+00:06:39.020 --> 00:06:39.360
+combining handwritten index cards and org
+
+00:06:39.360 --> 00:06:39.860
+mode?
+
+00:06:42.400 --> 00:06:42.900
+[Speaker 1]: Great question. I do not.
+
+00:06:46.620 --> 00:06:47.120
+I do write by hand when I get,
+
+00:06:49.120 --> 00:06:49.280
+I don't know what a good term for it is,
+
+00:06:51.420 --> 00:06:51.580
+I'll call it like editorial paralysis or
+
+00:06:53.100 --> 00:06:53.320
+something when I find it very hard to move
+
+00:06:54.720 --> 00:06:54.880
+forward in something because I keep going
+
+00:06:56.940 --> 00:06:57.240
+back and tweaking. And I will handwrite stuff
+
+00:06:58.520 --> 00:06:58.660
+at that point and then type it in because
+
+00:07:02.120 --> 00:07:02.540
+it's so much harder to get stuck in editing
+
+00:07:04.480 --> 00:07:04.600
+mode when you have to move forward on the
+
+00:07:07.360 --> 00:07:07.860
+page. I don't use index cards.
+
+00:07:11.680 --> 00:07:12.080
+In the blog article that I link in my talk,
+
+00:07:14.400 --> 00:07:14.900
+the ewj.io slash emacs 1,
+
+00:07:18.240 --> 00:07:18.740
+I did try using handwritten or spreadsheet
+
+00:07:22.360 --> 00:07:22.720
+outlines at 1 point and found them very,
+
+00:07:27.640 --> 00:07:27.840
+very clumsy for novel writing just because I
+
+00:07:29.820 --> 00:07:30.320
+do so much, I mean, I do so much revision
+
+00:07:32.600 --> 00:07:32.720
+that moving things around meant that I had to
+
+00:07:34.480 --> 00:07:34.760
+keep 2 things in sync with each other,
+
+00:07:35.440 --> 00:07:35.660
+the pros and the outline.
+
+00:07:37.540 --> 00:07:38.040
+And that was what really led me to Org Mode
+
+00:07:39.800 --> 00:07:40.080
+as a way to keep the, again,
+
+00:07:42.040 --> 00:07:42.180
+I think part of the key for me is keeping the
+
+00:07:44.580 --> 00:07:45.060
+outline and the pros right next to each other
+
+00:07:46.440 --> 00:07:46.940
+in a way that they move around which is just
+
+00:07:48.800 --> 00:07:49.000
+really, I don't know, for me really really
+
+00:07:49.000 --> 00:07:49.500
+powerful.
+
+00:07:54.280 --> 00:07:54.480
+[Speaker 0]: Okay great, so we finished the list of
+
+00:07:55.840 --> 00:07:56.340
+questions available on the pad,
+
+00:07:58.260 --> 00:07:58.440
+but I see that some people have joined us on
+
+00:08:01.100 --> 00:08:01.300
+BBB, so hi everyone. If you have any
+
+00:08:03.340 --> 00:08:03.600
+questions feel free to unmute yourself and
+
+00:08:06.560 --> 00:08:06.820
+ask them. Otherwise, we might go on a break.
+
+00:08:08.360 --> 00:08:08.520
+So I'm going to give you about 10 seconds to
+
+00:08:14.480 --> 00:08:14.760
+unmute yourself. Or if you just want to add
+
+00:08:15.660 --> 00:08:15.860
+more questions on the pad,
+
+00:08:17.680 --> 00:08:17.920
+that's also fine. And that'll give you about
+
+00:08:19.540 --> 00:08:19.860
+30 seconds. Otherwise,
+
+00:08:20.660 --> 00:08:21.160
+we'll need to go on a break.
+
+00:08:24.020 --> 00:08:24.520
+And in the meantime, I'll thank you,
+
+00:08:25.600 --> 00:08:26.100
+Edmund, for your presentation,
+
+00:08:27.880 --> 00:08:28.100
+because it's always nice,
+
+00:08:31.400 --> 00:08:31.900
+you know, we The reason why we have 2 tracks,
+
+00:08:34.200 --> 00:08:34.280
+and we've been having 2 tracks for the last 2
+
+00:08:36.039 --> 00:08:36.260
+or 3 editions of EmacsConf is because it's
+
+00:08:38.799 --> 00:08:39.299
+really nice to have those talks which are
+
+00:08:43.500 --> 00:08:43.840
+still related to Emacs and to far distance
+
+00:08:45.440 --> 00:08:45.700
+developments because we are obviously using
+
+00:08:48.160 --> 00:08:48.400
+packages. But it's really nice to see when we
+
+00:08:51.960 --> 00:08:52.200
+foray into other areas like writing or any
+
+00:08:53.400 --> 00:08:53.900
+kind of academia-based topics.
+
+00:08:55.440 --> 00:08:55.840
+So thank you, it's really nice.
+
+00:09:01.500 --> 00:09:01.720
+It brings different colors to the spectrum of
+
+00:09:03.580 --> 00:09:03.900
+what EmacsConf is and what ultimately Emacs
+
+00:09:04.680 --> 00:09:05.180
+is as well. Thank you.
+
+00:09:06.960 --> 00:09:07.200
+[Speaker 1]: Well thanks to everyone who tuned in and Leo
+
+00:09:08.160 --> 00:09:08.560
+thanks to you and all the other organizers
+
+00:09:09.060 --> 00:09:09.340
+for putting this together.
+
+00:09:09.720 --> 00:09:10.220
+Appreciate it.
+
+00:09:12.720 --> 00:09:12.840
+[Speaker 0]: Thank you. All right I think we're going to
+
+00:09:14.380 --> 00:09:14.540
+go on a little break for 5 minutes because I
+
+00:09:16.060 --> 00:09:16.560
+don't see other questions being asked.
+
+00:09:18.900 --> 00:09:19.160
+So everyone we'll see you again in 5 minutes
+
+00:09:19.900 --> 00:09:20.400
+and thank you again, Edmund.
+
+00:09:20.720 --> 00:09:21.220
+[Speaker 1]: Cheers.
diff --git a/2023/captions/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--main--chapters.vtt b/2023/captions/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--main--chapters.vtt
new file mode 100644
index 00000000..0dc31572
--- /dev/null
+++ b/2023/captions/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--main--chapters.vtt
@@ -0,0 +1,17 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:45.759
+Introduction
+
+00:00:45.760 --> 00:02:24.079
+Nabokov's process of writing novels
+
+00:02:24.080 --> 00:04:46.559
+Three practical problems novelists face
+
+00:04:46.560 --> 00:08:55.599
+Org mode for writing novels
+
+00:08:55.600 --> 00:09:50.840
+Takeaways and next steps
diff --git a/2023/captions/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--main.vtt b/2023/captions/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--main.vtt
new file mode 100644
index 00000000..9bf4de03
--- /dev/null
+++ b/2023/captions/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--main.vtt
@@ -0,0 +1,767 @@
+WEBVTT captioned by bhavin192, checked by sachac
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:05.239
+Hello, fellow Emacs enthusiasts.
+
+00:00:05.240 --> 00:00:06.799
+My name is Edmund Jorgensen.
+
+00:00:06.800 --> 00:00:08.519
+I'm a software engineer by day,
+
+00:00:08.520 --> 00:00:10.599
+but by night I love to write novels,
+
+00:00:10.600 --> 00:00:11.774
+and I lean on Emacs heavily
+
+00:00:11.774 --> 00:00:13.759
+for both of these activities.
+
+00:00:13.760 --> 00:00:15.879
+Today, I would like to talk to you about how Emacs,
+
+00:00:15.880 --> 00:00:17.319
+specifically with Org mode,
+
+00:00:17.320 --> 00:00:18.440
+has helped me manage some of the practical
+
+00:00:18.840 --> 00:00:20.940
+difficulties of writing long-form prose,
+
+00:00:20.940 --> 00:00:22.039
+novels in my case,
+
+00:00:22.040 --> 00:00:24.319
+and I'd like to get at this by talking about how
+
+00:00:24.320 --> 00:00:26.439
+another, much more famous novelist managed
+
+00:00:26.440 --> 00:00:28.359
+some of those same difficulties in a way
+
+00:00:28.360 --> 00:00:30.874
+that makes me suspect he might well use Emacs
+
+00:00:30.874 --> 00:00:31.959
+and Org mode himself
+
+00:00:31.960 --> 00:00:34.519
+if he were still alive and writing today.
+
+00:00:34.520 --> 00:00:35.599
+This talk will probably be
+
+00:00:35.600 --> 00:00:36.959
+of the most interest to listeners
+
+00:00:36.960 --> 00:00:39.239
+who either already write long-form prose in Emacs
+
+00:00:39.240 --> 00:00:40.879
+or are considering doing so,
+
+00:00:40.880 --> 00:00:42.039
+but I think that anyone
+
+00:00:42.040 --> 00:00:44.079
+with an interest in literature or Emacs
+
+00:00:44.080 --> 00:00:45.759
+will find something to take away.
+
+NOTE Nabokov's process of writing novels
+
+00:00:45.760 --> 00:00:51.119
+So let's get to it.
+
+00:00:51.120 --> 00:00:53.919
+Here's a picture of a man lying on a bed,
+
+00:00:53.920 --> 00:00:55.999
+writing something on an index card.
+
+00:00:56.000 --> 00:00:57.519
+If we didn't know any better,
+
+00:00:57.520 --> 00:00:58.959
+we might think that he was just jotting down
+
+00:00:58.960 --> 00:01:01.679
+a recipe for beef stew or something like that.
+
+00:01:01.680 --> 00:01:03.839
+But in fact, this is not just any old man.
+
+00:01:03.840 --> 00:01:06.174
+This is Vladimir Nabokov, one of the most
+
+00:01:06.174 --> 00:01:08.079
+celebrated novelists of the 20th century,
+
+00:01:08.080 --> 00:01:09.279
+and he's not jotting down
+
+00:01:09.280 --> 00:01:11.479
+a recipe for beef stew in this picture.
+
+00:01:11.480 --> 00:01:12.759
+He's actually hard at work here,
+
+00:01:12.760 --> 00:01:15.007
+composing a classic of English literature
+
+00:01:15.007 --> 00:01:16.559
+on an index card.
+
+00:01:16.560 --> 00:01:18.799
+That's how he wrote all his novels, in fact,
+
+00:01:18.800 --> 00:01:20.159
+on index cards.
+
+00:01:20.160 --> 00:01:22.759
+I don't mean that he just took notes on these cards
+
+00:01:22.760 --> 00:01:24.159
+or wrote outlines on them.
+
+00:01:24.160 --> 00:01:25.679
+He did both of those things as well,
+
+00:01:25.680 --> 00:01:28.919
+but he also wrote the actual prose of his novels,
+
+00:01:28.920 --> 00:01:32.799
+word by word, sentence by sentence, on index cards.
+
+00:01:32.800 --> 00:01:37.359
+Let's see what that looked like at scale.
+
+00:01:37.360 --> 00:01:39.440
+This box you see here,
+
+00:01:39.440 --> 00:01:41.239
+full of groups of bundled cards,
+
+00:01:41.240 --> 00:01:43.919
+is what a novel in progress looked like for Nabokov.
+
+00:01:43.920 --> 00:01:46.079
+If you squint, you can see that these cards
+
+00:01:46.080 --> 00:01:47.639
+were from the composition of Lolita,
+
+00:01:47.640 --> 00:01:50.559
+probably his most famous novel.
+
+00:01:50.560 --> 00:01:53.719
+So why did he write novels on index cards?
+
+00:01:53.720 --> 00:01:56.039
+It's not necessarily an obvious choice.
+
+00:01:56.040 --> 00:01:58.999
+Yes, sadly, Emacs wasn't available to him at the time,
+
+00:01:59.000 --> 00:02:01.239
+but most writers in his day,
+
+00:02:01.240 --> 00:02:02.640
+if they weren't using typewriters,
+
+00:02:02.640 --> 00:02:03.919
+which were available,
+
+00:02:03.920 --> 00:02:05.999
+were using notebooks or loose-leaf sheets
+
+00:02:06.000 --> 00:02:07.359
+or something like that.
+
+00:02:07.360 --> 00:02:09.959
+Not these tiny little index cards.
+
+00:02:09.960 --> 00:02:11.919
+But Nabokov loved index cards.
+
+00:02:11.920 --> 00:02:14.359
+He swore by them because they represented
+
+00:02:14.360 --> 00:02:15.199
+an elegant solution
+
+00:02:15.200 --> 00:02:17.999
+to three of the most pressing practical problems
+
+00:02:18.000 --> 00:02:24.079
+that every novelist faces.
+
+NOTE Three practical problems novelists face
+
+00:02:24.080 --> 00:02:25.307
+Writing a good novel
+
+00:02:25.307 --> 00:02:27.479
+is artistically difficult, of course.
+
+00:02:27.480 --> 00:02:28.959
+You have to write something interesting
+
+00:02:28.960 --> 00:02:30.107
+with a good story,
+
+00:02:30.107 --> 00:02:31.919
+something that people want to read.
+
+00:02:31.920 --> 00:02:33.519
+But writing any novel at all,
+
+00:02:33.520 --> 00:02:34.999
+whether it's good or bad,
+
+00:02:35.000 --> 00:02:37.719
+is brutally, practically difficult.
+
+00:02:37.720 --> 00:02:39.919
+You're hacking something like 100,000 words
+
+00:02:39.920 --> 00:02:42.440
+into unified shape over a long period of time,
+
+00:02:42.440 --> 00:02:43.799
+months or years.
+
+00:02:43.800 --> 00:02:45.719
+There are organizational challenges
+
+00:02:45.720 --> 00:02:46.959
+inherent in that process,
+
+00:02:46.960 --> 00:02:48.919
+and each writer needs practical techniques
+
+00:02:48.920 --> 00:02:51.079
+to manage those challenges.
+
+00:02:51.080 --> 00:02:53.399
+The most basic challenge, of course, is that,
+
+00:02:53.400 --> 00:02:55.359
+unless you're trying to bring back
+
+00:02:55.360 --> 00:02:57.040
+the Homeric Bard tradition
+
+00:02:57.040 --> 00:02:59.599
+of reciting books from memory in firelit halls,
+
+00:02:59.600 --> 00:03:01.199
+you need to actually set down
+
+00:03:01.200 --> 00:03:03.319
+those 100,000 words on some medium.
+
+00:03:03.320 --> 00:03:05.839
+In Nabokov's case, index cards worked fine for this.
+
+00:03:05.840 --> 00:03:08.439
+A little cramped, maybe, but workable.
+
+00:03:08.440 --> 00:03:09.679
+Secondly, as you're writing,
+
+00:03:09.680 --> 00:03:11.719
+you're bound to think of little but important things
+
+00:03:11.720 --> 00:03:13.919
+about the story that you want to record.
+
+00:03:13.920 --> 00:03:16.207
+I'm not talking here about big thematic notes
+
+00:03:16.207 --> 00:03:19.039
+or research that can go in a separate document,
+
+00:03:19.040 --> 00:03:21.159
+but smaller, more contextual notes
+
+00:03:21.160 --> 00:03:23.879
+that belong right along the prose that they refer to.
+
+00:03:23.880 --> 00:03:26.639
+These might be reminders, like,
+
+00:03:26.640 --> 00:03:28.519
+"Remember to clean up this sentence,"
+
+00:03:28.520 --> 00:03:29.707
+or questions for yourself
+
+00:03:29.707 --> 00:03:31.907
+to consider during rewrites, like,
+
+00:03:31.907 --> 00:03:33.239
+"Why does Shirley feel this way here?"
+
+00:03:33.240 --> 00:03:35.599
+Nabokov recorded these notes
+
+00:03:35.600 --> 00:03:37.559
+in the margins of his cards or on the backs.
+
+00:03:37.560 --> 00:03:39.999
+Paper, in general, is great for this kind of
+
+00:03:40.000 --> 00:03:41.039
+intertextual note-taking.
+
+00:03:41.040 --> 00:03:44.599
+That's not particular to index cards.
+
+00:03:44.600 --> 00:03:47.919
+But what Nabokov really loved about index cards
+
+00:03:47.920 --> 00:03:49.519
+was how they solved the novelist's
+
+00:03:49.520 --> 00:03:52.119
+third and most difficult practical problem,
+
+00:03:52.120 --> 00:03:54.279
+which is imposing some kind of structure
+
+00:03:54.280 --> 00:03:55.599
+on this mountain of words.
+
+00:03:55.600 --> 00:03:58.519
+To have any hope of wrangling a novel into being,
+
+00:03:58.520 --> 00:04:00.119
+you need some way to break it down
+
+00:04:00.120 --> 00:04:03.639
+into parts, chapters, scenes, snatches of dialogue.
+
+00:04:03.640 --> 00:04:05.839
+You need some kind of higher-level outline
+
+00:04:05.840 --> 00:04:07.999
+that you can read, navigate, and rearrange
+
+00:04:08.000 --> 00:04:09.919
+as you consider and reconsider your story.
+
+00:04:09.920 --> 00:04:11.919
+You need structure.
+
+00:04:11.920 --> 00:04:14.879
+Index cards gave Nabokov a really powerful way
+
+00:04:14.880 --> 00:04:16.239
+to impose this structure
+
+00:04:16.240 --> 00:04:18.559
+because they created small, independent
+
+00:04:18.560 --> 00:04:18.999
+chunks of prose
+
+00:04:19.000 --> 00:04:21.359
+that he could bundle together into groups,
+
+00:04:21.360 --> 00:04:22.759
+like we saw in the box.
+
+00:04:22.760 --> 00:04:31.959
+This let him navigate his novel in progress quickly.
+
+00:04:31.960 --> 00:04:33.799
+He could just flip through those bundles,
+
+00:04:33.800 --> 00:04:36.119
+bundle by bundle, instead of card by card.
+
+00:04:36.120 --> 00:04:38.240
+He could also impose on
+
+00:04:38.240 --> 00:04:40.079
+and modify the structure of his novel
+
+00:04:40.080 --> 00:04:41.999
+just by shuffling those bundles around.
+
+00:04:42.000 --> 00:04:45.307
+So that's why Nabokov loved index cards
+
+00:04:45.307 --> 00:04:46.559
+for writing novels.
+
+NOTE Org mode for writing novels
+
+00:04:46.560 --> 00:04:48.759
+Now I'd love to talk about
+
+00:04:48.760 --> 00:04:51.279
+why I love Org mode so much for writing novels
+
+00:04:51.280 --> 00:04:53.999
+and how it helps me tackle those same challenges.
+
+00:04:54.000 --> 00:05:01.759
+The first practical challenge,
+
+00:05:01.760 --> 00:05:03.759
+recording your words on some medium,
+
+00:05:03.760 --> 00:05:04.774
+is pretty simple.
+
+00:05:04.774 --> 00:05:06.439
+Org mode is a part of Emacs,
+
+00:05:06.440 --> 00:05:09.199
+a text editor, so you can just type in your text.
+
+00:05:09.200 --> 00:05:10.919
+We're not going to spend any more time on that.
+
+00:05:10.920 --> 00:05:13.439
+For the second practical challenge,
+
+00:05:13.440 --> 00:05:16.039
+recording small intertextual notes,
+
+00:05:16.040 --> 00:05:19.039
+Org mode offers comments, like this one here.
+
+00:05:19.040 --> 00:05:21.959
+The comment, "maybe I need to say which store?",
+
+00:05:21.960 --> 00:05:23.239
+with the leading pound sign there.
+
+00:05:23.240 --> 00:05:25.874
+I think that comments are generally
+
+00:05:25.874 --> 00:05:28.240
+underappreciated outside of coding.
+
+00:05:28.240 --> 00:05:29.799
+When writing fiction, for example,
+
+00:05:29.800 --> 00:05:32.359
+I love that Org mode lets me keep these comments
+
+00:05:32.360 --> 00:05:33.959
+close to the prose they refer to.
+
+00:05:33.960 --> 00:05:37.159
+I can see right here that I'm talking about
+
+00:05:37.160 --> 00:05:39.119
+saying which store in this first line,
+
+00:05:39.120 --> 00:05:40.599
+"One day, Bob went to the store."
+
+00:05:40.600 --> 00:05:43.999
+I get to keep these things close to
+
+00:05:44.000 --> 00:05:44.999
+the prose they refer to
+
+00:05:45.000 --> 00:05:46.519
+without ever having to worry that
+
+00:05:46.520 --> 00:05:48.479
+they'll accidentally be exported to a reader.
+
+00:05:48.480 --> 00:05:50.540
+That's great.
+
+00:05:50.540 --> 00:05:52.807
+So let's talk about how Org Mode handles the third
+
+00:05:52.807 --> 00:06:00.919
+and most brutal challenge of all, which is structure.
+
+00:06:00.920 --> 00:06:03.039
+Here we've taken the same text
+
+00:06:03.040 --> 00:06:04.879
+and we've imposed some structure on it.
+
+00:06:04.880 --> 00:06:07.807
+Like index cards,
+
+00:06:07.807 --> 00:06:09.639
+this is where Org mode really shines.
+
+00:06:09.640 --> 00:06:11.999
+Org mode extends outline mode,
+
+00:06:12.000 --> 00:06:14.359
+which is built around the concept of header lines,
+
+00:06:14.360 --> 00:06:15.959
+with different levels denoted by
+
+00:06:15.960 --> 00:06:18.079
+different numbers of leading asterisks (`*`).
+
+00:06:18.080 --> 00:06:20.674
+Personally, I tend to use top line headers
+
+00:06:20.974 --> 00:06:23.359
+as chapters and second line headers as scenes.
+
+00:06:23.360 --> 00:06:26.079
+You can see that here, where chapter one says
+
+00:06:26.080 --> 00:06:27.319
+"Bob and Shirley meet."
+
+00:06:27.320 --> 00:06:29.599
+Here's a scene, "Bob goes to the store."
+
+00:06:29.600 --> 00:06:32.639
+And here below is chapter two, yet unwritten,
+
+00:06:32.640 --> 00:06:34.319
+where Bob goes to work.
+
+00:06:34.320 --> 00:06:39.679
+Pretty exciting. Since Org mode supports folding,
+
+00:06:39.680 --> 00:06:42.159
+I can read quickly through a summary of my novel
+
+00:06:42.160 --> 00:06:44.079
+at either the chapter or the scene level
+
+00:06:44.080 --> 00:06:46.040
+just by flipping through different levels of
+
+00:06:46.240 --> 00:06:48.799
+visibility, just like Nabokov could flip through
+
+00:06:48.800 --> 00:06:51.307
+different bundles of cards.
+
+00:06:51.307 --> 00:06:52.599
+So here's the chapter level.
+
+00:06:52.600 --> 00:06:54.719
+I can see at a chapter level,
+
+00:06:54.720 --> 00:06:56.679
+"Bob and Shirley meet", "Bob goes to work."
+
+00:06:56.680 --> 00:06:59.079
+And then I can get one level more specific
+
+00:06:59.080 --> 00:07:01.159
+and see the various scenes in the chapter
+
+00:07:01.160 --> 00:07:02.959
+at the second header level.
+
+00:07:02.960 --> 00:07:03.999
+And I can, if I want,
+
+00:07:04.000 --> 00:07:10.359
+I can go all the way back to the prose level.
+
+00:07:10.360 --> 00:07:12.774
+And just like Nabokov shuffling
+
+00:07:12.774 --> 00:07:13.940
+his index cards around,
+
+00:07:14.040 --> 00:07:16.759
+I can move scenes around as logical units.
+
+00:07:16.760 --> 00:07:18.199
+Let's say, for example,
+
+00:07:18.200 --> 00:07:20.399
+that we wanted to move Bob's thoughts about life,
+
+00:07:20.400 --> 00:07:22.919
+which are down here, up further.
+
+00:07:22.920 --> 00:07:26.959
+Well, I can grab "Bob thinks about life,"
+
+00:07:26.960 --> 00:07:30.479
+and I can move it up or down as a logical unit.
+
+00:07:30.480 --> 00:07:34.719
+But Org mode offers some even more powerful tricks
+
+00:07:34.720 --> 00:07:36.519
+for structuring and navigating your novel,
+
+00:07:36.520 --> 00:07:38.559
+beyond what even index cards can do.
+
+00:07:38.560 --> 00:07:41.974
+For example, you can use tags
+
+00:07:41.974 --> 00:07:44.479
+on your scene headings. You can see these here.
+
+00:07:44.480 --> 00:07:46.599
+They're the prominent colon separated words
+
+00:07:46.600 --> 00:07:47.559
+on the header lines.
+
+00:07:47.560 --> 00:07:49.839
+In this case, I'm using `bob` and `shirley`.
+
+00:07:49.840 --> 00:07:52.719
+These tags can represent characters
+
+00:07:52.720 --> 00:07:53.674
+who appear in the scene,
+
+00:07:53.674 --> 00:07:54.239
+which is what I'm doing here,
+
+00:07:54.640 --> 00:07:57.207
+or locations in which the scenes occur,
+
+00:07:57.207 --> 00:07:59.159
+or plot lines that the scenes further,
+
+00:07:59.160 --> 00:08:00.479
+really anything that you want.
+
+00:08:00.480 --> 00:08:04.239
+And you can then use Org mode's sparse view features
+
+00:08:04.240 --> 00:08:07.559
+to query a set of tags and trim your novel down to
+
+00:08:07.560 --> 00:08:09.519
+a subset of related scenes.
+
+00:08:09.520 --> 00:08:12.559
+For example, let's say we want to filter down to
+
+00:08:12.560 --> 00:08:14.799
+only the scenes in which Shirley appears.
+
+00:08:14.800 --> 00:08:25.759
+This could allow us to read quickly through
+
+00:08:25.760 --> 00:08:27.439
+just a subset of the prose,
+
+00:08:27.440 --> 00:08:29.599
+the prose that referred to Shirley in some way.
+
+00:08:29.600 --> 00:08:31.359
+Maybe we want to do that
+
+00:08:31.360 --> 00:08:33.279
+to check continuity for her character,
+
+00:08:33.280 --> 00:08:35.519
+or make sure that her character develops
+
+00:08:35.520 --> 00:08:36.999
+along a compelling arc,
+
+00:08:37.000 --> 00:08:38.319
+or even just to get a sense
+
+00:08:38.320 --> 00:08:40.399
+of how much airtime she gets in the novel.
+
+00:08:44.040 --> 00:08:49.759
+Thanks for listening to this whirlwind exploration
+
+00:08:49.760 --> 00:08:51.879
+of some of the practical challenges of writing
+
+00:08:51.880 --> 00:08:53.599
+novels and other long-form prose,
+
+00:08:53.600 --> 00:08:55.599
+and how Org mode can help tackle them.
+
+NOTE Takeaways and next steps
+
+00:08:55.600 --> 00:08:57.879
+I'd like to leave you with a couple takeaways
+
+00:08:57.880 --> 00:08:59.759
+and next steps for those who are interested.
+
+00:08:59.760 --> 00:09:01.907
+First, if you're writing a novel
+
+00:09:01.907 --> 00:09:02.840
+or other long-form prose,
+
+00:09:02.841 --> 00:09:04.874
+or even considering doing so,
+
+00:09:04.874 --> 00:09:06.107
+take a look at Org mode,
+
+00:09:06.108 --> 00:09:08.374
+especially if you're already familiar with Emacs.
+
+00:09:08.375 --> 00:09:10.474
+It won't solve the artistic problem
+
+00:09:10.475 --> 00:09:11.874
+of writing an interesting book for you,
+
+00:09:11.875 --> 00:09:13.907
+not even with a ChatGPT plugin,
+
+00:09:13.908 --> 00:09:15.874
+but it's a fantastic tool for managing
+
+00:09:15.875 --> 00:09:16.874
+some of the practical challenges
+
+00:09:16.875 --> 00:09:19.840
+that come with hacking 100,000 words into shape
+
+00:09:19.841 --> 00:09:22.740
+over the months or years that that process takes.
+
+00:09:22.741 --> 00:09:25.839
+Second, if you're interested in learning more
+
+00:09:25.840 --> 00:09:27.959
+about some of the advanced features of Org mode
+
+00:09:27.960 --> 00:09:29.519
+and how they can help in this process,
+
+00:09:29.520 --> 00:09:32.319
+I wrote a long blog post about my difficulties
+
+00:09:32.320 --> 00:09:34.879
+writing a novel with 13 interconnected subplots,
+
+00:09:34.880 --> 00:09:37.759
+and how Emacs and Org mode saved it from imploding.
+
+00:09:37.760 --> 00:09:43.999
+I'll put a link here below. [ewj.io/emacs]
+
+00:09:44.000 --> 00:09:50.840
+Thanks for listening, and Emacs on!
diff --git a/2023/captions/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--answers.vtt b/2023/captions/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--answers.vtt
new file mode 100644
index 00000000..9a1888a0
--- /dev/null
+++ b/2023/captions/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--answers.vtt
@@ -0,0 +1,1472 @@
+WEBVTT
+
+
+00:00:00.459 --> 00:00:05.460
+[Speaker 0]: So, will you, when I'm looking at my,
+
+00:00:06.279 --> 00:00:08.480
+the other screen, I don't see the chat,
+
+00:00:08.480 --> 00:00:10.380
+so maybe someone can tell me.
+
+00:00:11.259 --> 00:00:12.360
+[Speaker 1]: It's fine, don't worry about it,
+
+00:00:12.360 --> 00:00:14.320
+and we are live. So hi again everyone.
+
+00:00:15.060 --> 00:00:16.140
+Hi Tony, how are you doing?
+
+00:00:17.040 --> 00:00:18.420
+[Speaker 0]: Really well, and you?
+
+00:00:19.440 --> 00:00:21.040
+[Speaker 1]: I am doing fantastically,
+
+00:00:21.380 --> 00:00:23.460
+as fantastically as I can be doing,
+
+00:00:24.099 --> 00:00:25.820
+having to put out fire in the background
+
+00:00:30.140 --> 00:00:30.640
+[Speaker 0]: Cool!
+
+00:00:25.840 --> 00:00:31.520
+[Speaker 1]: during MaxConf. But I'm doing great! Alright,
+
+00:00:31.640 --> 00:00:34.900
+Let me just try to set up everything so that
+
+00:00:34.960 --> 00:00:37.260
+I can show the questions and all this.
+
+00:00:37.260 --> 00:00:38.600
+Do you mind if I read you the question?
+
+00:00:38.600 --> 00:00:39.960
+It might be a little more interactive and
+
+00:00:39.960 --> 00:00:42.760
+this way you can focus on either presenting
+
+00:00:42.800 --> 00:00:43.760
+stuff on your end.
+
+00:00:44.059 --> 00:00:48.680
+[Speaker 0]: Yes, tell me what are the questions and what
+
+00:00:48.680 --> 00:00:50.940
+to do and I will do that.
+
+00:00:53.420 --> 00:00:56.400
+[Speaker 1]: Okay great so what I'll do,
+
+00:00:56.400 --> 00:00:58.580
+I'll invite people to go to the pad and ask
+
+00:00:58.580 --> 00:01:00.060
+questions because it was a very interesting
+
+00:01:00.060 --> 00:01:01.480
+talk and I'm sure you have plenty of
+
+00:01:01.480 --> 00:01:03.460
+questions but I only see 1 right now.
+
+00:01:03.460 --> 00:01:05.360
+Do we have people on BigBlueButton?
+
+00:01:05.640 --> 00:01:08.580
+Yes we do have people joining right now.
+
+00:01:11.000 --> 00:01:12.620
+So reading the first question then.
+
+00:01:12.620 --> 00:01:14.380
+So what's the main motivation for this new
+
+00:01:14.380 --> 00:01:16.100
+package? I used to use org.yugo
+
+00:01:16.280 --> 00:01:18.340
+and use GitHub Actions to build a blog.
+
+00:01:18.340 --> 00:01:20.600
+So can you go in a little bit of details on
+
+00:01:20.600 --> 00:01:21.100
+this?
+
+00:01:21.540 --> 00:01:25.780
+[Speaker 0]: Yes, OK. So the main goal,
+
+00:01:30.900 --> 00:01:33.570
+I didn't want to have,
+
+00:01:33.805 --> 00:01:37.440
+to, I will push that here.
+
+00:01:38.040 --> 00:01:44.940
+So my goal was to not have to rely on another
+
+00:01:45.060 --> 00:01:49.920
+static site generator to produce my website.
+
+00:01:49.920 --> 00:01:54.780
+So if you use a Yugo, that means that you
+
+00:01:54.780 --> 00:02:01.060
+take, so this is the website that we've seen
+
+00:02:01.960 --> 00:02:07.880
+in the talk, this 1. And I didn't want to
+
+00:02:07.880 --> 00:02:13.320
+have to use a piece of software in Emacs that
+
+00:02:13.320 --> 00:02:16.960
+translate to some other files to be feed to
+
+00:02:16.960 --> 00:02:20.680
+another statistic generator because this way
+
+00:02:20.680 --> 00:02:23.680
+I have 2 things to understand.
+
+00:02:23.680 --> 00:02:26.620
+I have to understand how that software
+
+00:02:26.780 --> 00:02:32.440
+translates my files into the other files and
+
+00:02:32.440 --> 00:02:36.960
+then I have to understand how Hugo works.
+
+00:02:37.060 --> 00:02:39.480
+So if I want to change something I need to
+
+00:02:39.480 --> 00:02:43.660
+understand Hugo. So at some point I need to
+
+00:02:43.660 --> 00:02:46.200
+work with Hugo. So if I need to work with
+
+00:02:46.200 --> 00:02:49.700
+Hugo, maybe I can work with it directly.
+
+00:02:51.800 --> 00:02:56.600
+And I wanted also something that was purely
+
+00:02:56.960 --> 00:03:03.080
+Emacs-centric and working on it,
+
+00:03:03.700 --> 00:03:05.560
+I found out about that solution.
+
+00:03:05.600 --> 00:03:10.740
+And I wanted also something that we have only
+
+00:03:11.780 --> 00:03:15.140
+1 file that have all the entries.
+
+00:03:15.560 --> 00:03:18.620
+And when I thought about that,
+
+00:03:19.140 --> 00:03:22.720
+finally I found a way that maybe we can just
+
+00:03:22.720 --> 00:03:30.360
+use 1 or 3 to pass it the information of the
+
+00:03:30.360 --> 00:03:33.405
+website. And if you look,
+
+00:03:33.405 --> 00:03:37.660
+If you just try to work with Gatsby,
+
+00:03:37.920 --> 00:03:40.020
+Ugo or all those websites,
+
+00:03:40.940 --> 00:03:45.680
+when you start, you download 10,
+
+00:03:46.240 --> 00:03:52.280
+20, 30, thousand for hundreds of dependencies
+
+00:03:53.440 --> 00:03:59.620
+to do. Just to me, I'm a small guy and I just
+
+00:03:59.620 --> 00:04:02.720
+want to have some documentation on the
+
+00:04:02.720 --> 00:04:05.200
+website like this 1. It just,
+
+00:04:05.460 --> 00:04:08.980
+it shouldn't need that much of a dependency.
+
+00:04:09.160 --> 00:04:11.460
+And if you look at the website,
+
+00:04:11.460 --> 00:04:13.180
+if you want to hack on something,
+
+00:04:13.540 --> 00:04:17.320
+you need a lot of to understand how the
+
+00:04:17.320 --> 00:04:19.459
+config files work. So you need to,
+
+00:04:19.459 --> 00:04:21.060
+how does it work this config file?
+
+00:04:21.060 --> 00:04:23.320
+But I want, it's always happened that you
+
+00:04:23.320 --> 00:04:26.420
+want to add 1 thing or to add that things.
+
+00:04:26.420 --> 00:04:27.760
+What do you have to do?
+
+00:04:27.780 --> 00:04:30.340
+You have to, you can't because it's not
+
+00:04:30.340 --> 00:04:34.040
+offered by the configuration file.
+
+00:04:34.380 --> 00:04:37.980
+With that solution that I built for me first,
+
+00:04:38.920 --> 00:04:41.580
+I don't care if I need something else.
+
+00:04:42.020 --> 00:04:47.600
+I just have to go in that file.
+
+00:04:49.840 --> 00:04:52.440
+It doesn't need to be that file because as I
+
+00:04:52.440 --> 00:04:55.980
+am in Emacs if the render functions are
+
+00:04:56.120 --> 00:04:58.940
+already evaluated they exist and I can use it
+
+00:04:58.940 --> 00:05:02.520
+but I just have to change that file so if I
+
+00:05:02.520 --> 00:05:07.860
+want something more I just I go there let's
+
+00:05:07.860 --> 00:05:10.920
+say so does it answer the question or I
+
+00:05:10.920 --> 00:05:12.780
+continue to show something?
+
+00:05:14.320 --> 00:05:16.060
+[Speaker 1]: It's up to you, I think you are answering the
+
+00:05:16.060 --> 00:05:17.600
+question. I think you veered off a little bit
+
+00:05:17.600 --> 00:05:19.940
+from just why not you go but then you kind of
+
+00:05:19.940 --> 00:05:21.840
+redid part of your presentation to justify
+
+00:05:23.480 --> 00:05:26.360
+[Speaker 0]: own system. But stop me if I go because I
+
+00:05:26.360 --> 00:05:29.920
+used to want to show more things than what
+
+00:05:29.920 --> 00:05:30.900
+there is in the question.
+
+00:05:21.940 --> 00:05:32.080
+[Speaker 1]: why you had to roll your Yeah that's fine.
+
+00:05:32.080 --> 00:05:33.340
+Just for people who do not know,
+
+00:05:33.340 --> 00:05:35.500
+we tend to restrict speakers when they submit
+
+00:05:35.500 --> 00:05:36.620
+a presentation. We tell them,
+
+00:05:36.620 --> 00:05:39.000
+oh, you can do a flash talk in 10 minutes or
+
+00:05:39.000 --> 00:05:41.100
+a bit of a longer talk in 20 minutes or 40
+
+00:05:41.100 --> 00:05:43.180
+minutes. And usually, because we have a lot
+
+00:05:43.180 --> 00:05:46.260
+of speakers, we have to kind of coerce people
+
+00:05:46.260 --> 00:05:48.340
+into going to shorter formats and sometimes
+
+00:05:48.340 --> 00:05:50.260
+it's a lot about killing your darlings.
+
+00:05:51.100 --> 00:05:52.360
+But just to reassure you,
+
+00:05:52.360 --> 00:05:54.560
+we're just about to go on a launch break in
+
+00:05:54.560 --> 00:05:56.840
+about 10 minutes, so you've got the full 10
+
+00:05:56.840 --> 00:05:58.320
+minutes to use however you want,
+
+00:05:58.320 --> 00:05:59.340
+but I'll just tell you,
+
+00:05:59.340 --> 00:06:01.080
+you have a lot of questions so you might want
+
+00:06:01.080 --> 00:06:03.400
+to perhaps move on to the next 1 as soon as
+
+00:06:03.400 --> 00:06:04.060
+you can.
+
+00:06:04.540 --> 00:06:08.240
+[Speaker 0]: Yes okay so tell me the next 1 and if people
+
+00:06:08.940 --> 00:06:13.160
+want to stay more I can also stay more.
+
+00:06:14.240 --> 00:06:17.220
+Right. I understand if people need to go to
+
+00:06:17.220 --> 00:06:19.020
+lunch, they can, but people that want to
+
+00:06:19.020 --> 00:06:20.240
+stay, if it's possible,
+
+00:06:20.340 --> 00:06:22.860
+I'm here to answer any question.
+
+00:06:24.060 --> 00:06:26.240
+[Speaker 1]: Splendid. All right, so moving on to the next
+
+00:06:26.240 --> 00:06:29.180
+question. Is it possible to include the
+
+00:06:29.180 --> 00:06:31.560
+include org tag to add content from other
+
+00:06:31.560 --> 00:06:33.620
+files. Do you see what I'm talking about?
+
+00:06:35.200 --> 00:06:39.060
+[Speaker 0]: Yes, so it's not included.
+
+00:06:39.380 --> 00:06:45.240
+So the idea was really to have only 1 file
+
+00:06:45.720 --> 00:06:49.760
+and have no options. So if you look at the,
+
+00:06:49.760 --> 00:06:52.240
+let's go into, so the answer is no,
+
+00:06:52.240 --> 00:06:56.320
+but if you want, you can write the code that
+
+00:06:56.320 --> 00:07:00.520
+do it. But let's just go into one.n,
+
+00:07:02.280 --> 00:07:07.900
+so that files. So this is the files where you
+
+00:07:07.900 --> 00:07:11.440
+have everything, and there is only 2
+
+00:07:11.440 --> 00:07:13.980
+dependencies. Maybe we can see that at the
+
+00:07:13.980 --> 00:07:18.080
+top so which are htmlis on the Jack and the
+
+00:07:18.080 --> 00:07:19.840
+other are Augment. So for me,
+
+00:07:19.840 --> 00:07:21.760
+they're not dependencies because they come
+
+00:07:21.820 --> 00:07:25.440
+with Emacs. But the question is,
+
+00:07:25.440 --> 00:07:27.440
+can I add other things?
+
+00:07:27.440 --> 00:07:31.640
+If you look at that, you don't see the orange
+
+00:07:31.640 --> 00:07:33.220
+color which are viable,
+
+00:07:33.600 --> 00:07:38.080
+it's because I didn't want any configuration
+
+00:07:38.440 --> 00:07:41.060
+nor option. So there is no,
+
+00:07:41.960 --> 00:07:45.660
+if you think about, you are used to use org
+
+00:07:45.660 --> 00:07:49.540
+export normally and to use all the options
+
+00:07:49.540 --> 00:07:52.000
+that are possible on all the things they are
+
+00:07:52.000 --> 00:08:00.600
+not included. You can add them because when
+
+00:08:04.900 --> 00:08:06.500
+you are in a render function.
+
+00:08:07.060 --> 00:08:08.940
+So this is the render function that I showed
+
+00:08:08.940 --> 00:08:11.980
+in the theme. You have a page tree so you
+
+00:08:11.980 --> 00:08:18.358
+have the information but in the global I
+
+00:08:18.358 --> 00:08:20.440
+think, yes in global, you can pass anything
+
+00:08:21.020 --> 00:08:24.720
+you want and if you want you can pass the
+
+00:08:24.720 --> 00:08:27.540
+parse tree of the whole file.
+
+00:08:28.080 --> 00:08:30.840
+So if you pass the parse tree of the whole
+
+00:08:30.840 --> 00:08:34.580
+file, what you can do is that you can get it
+
+00:08:35.400 --> 00:08:38.659
+there. So I don't have it right now,
+
+00:08:38.659 --> 00:08:43.980
+but you might have your include stuff and you
+
+00:08:43.980 --> 00:08:48.040
+get it with a node property that target
+
+00:08:48.580 --> 00:08:50.940
+something in the global variable.
+
+00:08:50.940 --> 00:08:54.740
+So if we look just to be short but those 3
+
+00:08:55.320 --> 00:08:57.180
+parts, the first 1 is page tree.
+
+00:08:57.180 --> 00:08:59.160
+So it's this page that you are on the right,
+
+00:08:59.160 --> 00:09:02.220
+pages are a list of all the pages and global
+
+00:09:02.840 --> 00:09:06.240
+is something that you can set and reset once
+
+00:09:06.580 --> 00:09:10.840
+and you have the whole part street.
+
+00:09:10.840 --> 00:09:13.400
+So anything that you add in your op-files
+
+00:09:15.040 --> 00:09:16.840
+could go in global if you want,
+
+00:09:16.840 --> 00:09:18.060
+but it's not included.
+
+00:09:20.600 --> 00:09:23.140
+[Speaker 1]: All right. I think that's also answering the
+
+00:09:23.140 --> 00:09:24.840
+question. Can this generate a single file
+
+00:09:24.840 --> 00:09:26.420
+from different sources like blog.org,
+
+00:09:26.880 --> 00:09:28.820
+videos.org? I think you've just answered
+
+00:09:30.040 --> 00:09:31.280
+[Speaker 0]: Yes, I think yes.
+
+00:09:28.820 --> 00:09:32.660
+[Speaker 1]: this, right? Right. Okay.
+
+00:09:32.660 --> 00:09:34.340
+So moving on to the other question.
+
+00:09:34.660 --> 00:09:37.200
+Do you have pre-made templates already along
+
+00:09:37.200 --> 00:09:38.820
+with the 1.el package?
+
+00:09:41.680 --> 00:09:47.940
+[Speaker 0]: So, yes and no. So, The answer is if we go to
+
+00:09:49.960 --> 00:09:55.520
+1.n, so this file, so the first are blah,
+
+00:09:55.520 --> 00:10:01.780
+blah, blah. How it works,
+
+00:10:01.780 --> 00:10:06.480
+so, okay, so you have the 1-hocs,
+
+00:10:07.200 --> 00:10:11.980
+which is what can translate the org parse
+
+00:10:11.980 --> 00:10:16.180
+tree into HTML. So this is for the content of
+
+00:10:16.260 --> 00:10:18.140
+each page. So this is very useful.
+
+00:10:18.480 --> 00:10:22.660
+Then we have a bunch of functions that help
+
+00:10:22.660 --> 00:10:24.360
+to render the function,
+
+00:10:26.040 --> 00:10:30.260
+each page. And you have a bunch of...
+
+00:10:31.360 --> 00:10:33.920
+Everything that starts with dash default is a
+
+00:10:33.920 --> 00:10:36.140
+render function. So there's no template,
+
+00:10:37.480 --> 00:10:40.520
+but each page that if you want,
+
+00:10:42.240 --> 00:10:46.400
+so that 1, the home, you can use 1 default
+
+00:10:46.400 --> 00:10:48.620
+home. So, if you want to list the page,
+
+00:10:48.740 --> 00:10:53.220
+you have that 1. For a page with no table of
+
+00:10:53.220 --> 00:10:55.840
+content, you use that thing.
+
+00:10:55.840 --> 00:10:58.260
+And if you go back to be short,
+
+00:10:58.260 --> 00:11:02.660
+if we go there, I put this like that.
+
+00:11:03.900 --> 00:11:09.880
+So this that we see here is the first inline
+
+00:11:09.960 --> 00:11:14.440
+of 1.org. By the way, it doesn't have to be
+
+00:11:14.440 --> 00:11:17.120
+called 1.org. It's just as you want,
+
+00:11:17.160 --> 00:11:19.380
+but maybe we can call it.
+
+00:11:20.740 --> 00:11:23.000
+So default, what was the other 1?
+
+00:11:23.220 --> 00:11:28.280
+Default with sidebar. Or is it default with
+
+00:11:28.280 --> 00:11:30.080
+sidebar or default? Yes,
+
+00:11:30.080 --> 00:11:35.380
+with sidebar. Sidebar,
+
+00:11:36.400 --> 00:11:37.740
+if it's worked correctly.
+
+00:11:39.140 --> 00:11:46.620
+Okay, so, okay, so I don't know why the CSS
+
+00:11:46.760 --> 00:11:49.700
+is not working correctly.
+
+00:11:50.740 --> 00:11:53.860
+[Speaker 1]: It's okay. It wouldn't be a live demo without
+
+00:11:53.860 --> 00:11:55.440
+problems occurring at some point.
+
+00:11:55.440 --> 00:11:55.940
+Okay.
+
+00:11:56.980 --> 00:12:01.240
+[Speaker 0]: But so maybe we can use this 1.
+
+00:12:02.940 --> 00:12:06.980
+Or we stuck. So we are going to use this 1,
+
+00:12:06.980 --> 00:12:16.020
+we've talked this 1, but maybe better in this
+
+00:12:16.020 --> 00:12:20.240
+1 that add something. So we build it again
+
+00:12:20.340 --> 00:12:32.180
+and now, oh, come on. We have it and we have
+
+00:12:32.180 --> 00:12:36.140
+the, sorry, if we have just default,
+
+00:12:37.820 --> 00:12:41.120
+we rebuild and now this is the default layer
+
+00:12:41.120 --> 00:12:44.360
+that if we do with table of content,
+
+00:12:46.060 --> 00:12:48.580
+you have it, you have the default content.
+
+00:12:48.620 --> 00:12:53.640
+So how to change, and they are not template.
+
+00:12:53.940 --> 00:12:57.760
+They are render functions that takes your
+
+00:13:00.300 --> 00:13:05.720
+page as a tree and render HTML string.
+
+00:13:06.260 --> 00:13:09.200
+So you can build any function that you want.
+
+00:13:10.600 --> 00:13:12.280
+So yes, I think that answers the question.
+
+00:13:12.280 --> 00:13:16.400
+There is no template like in other systems.
+
+00:13:17.780 --> 00:13:18.920
+[Speaker 1]: Cool, that makes sense.
+
+00:13:19.020 --> 00:13:21.000
+We have 2 more questions and then we'll need
+
+00:13:21.000 --> 00:13:22.200
+to go on a lunch break.
+
+00:13:22.200 --> 00:13:23.740
+I don't see anyone join the room.
+
+00:13:23.740 --> 00:13:25.640
+Remember, Tony has said that he would be
+
+00:13:25.640 --> 00:13:27.500
+willing to answer more questions during the
+
+00:13:27.500 --> 00:13:29.120
+lunch break, perhaps because it's not lunch
+
+00:13:29.120 --> 00:13:30.980
+break for you. Are you in Europe right now?
+
+00:13:32.360 --> 00:13:34.600
+So that's why for us, also for me it's very
+
+00:13:34.600 --> 00:13:37.660
+dark, but it's not lunch break for us,
+
+00:13:37.660 --> 00:13:39.440
+it's going to be dinner break soon actually.
+
+00:13:31.280 --> 00:13:42.840
+[Speaker 0]: Yes. Yes, exactly, so I'm just,
+
+00:13:44.020 --> 00:13:44.700
+I'm okay.
+
+00:13:45.580 --> 00:13:49.200
+[Speaker 1]: Right, Okay, so moving on to 1 of the last 2
+
+00:13:49.200 --> 00:13:51.680
+questions. What additional features are there
+
+00:13:51.680 --> 00:13:53.660
+that you would like to add to 1.EL
+
+00:13:53.960 --> 00:13:54.780
+in the future?
+
+00:13:56.120 --> 00:14:00.440
+[Speaker 0]: Yes, there's only 1, which is a full text
+
+00:14:00.560 --> 00:14:05.500
+search done in a simple way.
+
+00:14:06.540 --> 00:14:10.020
+So I don't meet what simple way means,
+
+00:14:10.320 --> 00:14:12.380
+but when I see something complicated,
+
+00:14:12.620 --> 00:14:15.140
+it doesn't enter in 1 to me.
+
+00:14:15.400 --> 00:14:18.840
+So, but really, if you see that,
+
+00:14:19.120 --> 00:14:22.260
+I would like to have some way.
+
+00:14:22.300 --> 00:14:25.080
+So, this is the documentation and I would
+
+00:14:25.080 --> 00:14:27.480
+like to have some way to just have another
+
+00:14:27.500 --> 00:14:30.740
+function because we are not talking about
+
+00:14:31.300 --> 00:14:33.800
+those websites on the 1.L.
+
+00:14:34.440 --> 00:14:39.520
+It's not made for a big company or of your
+
+00:14:39.520 --> 00:14:42.440
+things, it's just for a random guy that have
+
+00:14:42.440 --> 00:14:46.200
+a blog or a few blogs and If you are a great
+
+00:14:46.200 --> 00:14:52.280
+blogger, maybe you are going to write 100 or
+
+00:14:53.040 --> 00:14:57.240
+200 or 300 pages in many years.
+
+00:14:57.240 --> 00:15:00.060
+So this enter in that category.
+
+00:15:00.060 --> 00:15:03.580
+So it's small. So I think it can,
+
+00:15:04.080 --> 00:15:07.580
+we could find a way to make a full text
+
+00:15:07.580 --> 00:15:10.160
+search. And that is simple.
+
+00:15:10.240 --> 00:15:12.780
+I don't need to, to go with,
+
+00:15:13.520 --> 00:15:16.620
+with solution like Algolia that is,
+
+00:15:16.620 --> 00:15:17.900
+that works super fine.
+
+00:15:17.900 --> 00:15:21.100
+But this is something that I don't control
+
+00:15:21.600 --> 00:15:26.200
+and I have to give them the data and I'm not
+
+00:15:26.200 --> 00:15:29.320
+against that but it's just that I think with
+
+00:15:29.320 --> 00:15:32.800
+a bit of work something can be done with full
+
+00:15:32.800 --> 00:15:35.600
+textile. But this is the only thing that I
+
+00:15:35.600 --> 00:15:36.980
+would like to add.
+
+00:15:38.720 --> 00:15:41.300
+[Speaker 1]: Very clear answer. Next question.
+
+00:15:41.580 --> 00:15:44.380
+Can you create navbars on a website and fancy
+
+00:15:44.380 --> 00:15:46.380
+things like carousels using 1.EL?
+
+00:15:46.800 --> 00:15:48.220
+Now carousels is just,
+
+00:15:48.260 --> 00:15:51.820
+I think, a fancy way to display pictures and
+
+00:15:51.820 --> 00:15:53.800
+please correct me whoever asked this
+
+00:15:53.800 --> 00:15:55.440
+question. Otherwise I see you taking notes
+
+00:15:55.440 --> 00:15:56.820
+for the answers, thank you very much.
+
+00:15:56.820 --> 00:15:58.740
+But if you could specify maybe carousels so
+
+00:15:58.740 --> 00:16:01.900
+that Tony and I may get a better idea.
+
+00:16:01.920 --> 00:16:03.340
+But still, first part of the question,
+
+00:16:03.340 --> 00:16:04.940
+can you create navbars on a website?
+
+00:16:05.980 --> 00:16:10.860
+[Speaker 0]: Yes. So if, for instance,
+
+00:16:10.900 --> 00:16:14.600
+you see there, to me, it's not a,
+
+00:16:14.600 --> 00:16:19.040
+it's a navbar. So you already have it.
+
+00:16:19.860 --> 00:16:23.080
+I didn't show that in the talk,
+
+00:16:23.080 --> 00:16:27.440
+but the CSS for the default function that
+
+00:16:27.440 --> 00:16:31.100
+works is responsive. So,
+
+00:16:31.720 --> 00:16:34.400
+out of the box, if you are using something,
+
+00:16:34.600 --> 00:16:37.540
+you will have an app bar done for you with
+
+00:16:37.540 --> 00:16:38.680
+all the pages that you have.
+
+00:16:38.680 --> 00:16:40.240
+So, if we go to install,
+
+00:16:40.920 --> 00:16:44.900
+we have that. And if we no longer have that,
+
+00:16:44.900 --> 00:16:49.960
+we have that sidebar there.
+
+00:16:50.220 --> 00:16:51.840
+And how it's done. So,
+
+00:16:52.660 --> 00:16:56.380
+the same way. I like simple fields that are
+
+00:16:56.380 --> 00:16:58.580
+flexible and I didn't want configuration
+
+00:16:58.860 --> 00:17:01.280
+because if you want to write the code to
+
+00:17:01.280 --> 00:17:03.480
+change something you just have to write code.
+
+00:17:03.480 --> 00:17:05.720
+So any function, render function,
+
+00:17:05.859 --> 00:17:08.760
+is yours. So you can do whatever you want and
+
+00:17:08.760 --> 00:17:11.520
+you enter the html that you want to render.
+
+00:17:11.520 --> 00:17:17.800
+So let's see how do we get that navigation
+
+00:17:17.920 --> 00:17:20.920
+bar that we have when we do that this is a
+
+00:17:20.920 --> 00:17:23.079
+CSS stuff. But when we click,
+
+00:17:23.099 --> 00:17:25.819
+this is a JS stuff that,
+
+00:17:27.040 --> 00:17:32.320
+so let's go to one.l And maybe this is a
+
+00:17:32.320 --> 00:17:35.660
+sidebar. Why that function because,
+
+00:17:36.300 --> 00:17:40.360
+okay. So when that function,
+
+00:17:40.680 --> 00:17:45.340
+so 1 default sidebar is 1 that is used to do
+
+00:17:45.340 --> 00:17:47.120
+some of the things at some point,
+
+00:17:47.120 --> 00:17:52.120
+what we return is a JackHTML that take a data
+
+00:17:52.120 --> 00:17:54.340
+structure and return a string.
+
+00:17:54.340 --> 00:17:57.280
+So this is your HTML. So you can see at the
+
+00:17:57.280 --> 00:18:00.780
+top you have the end, then you have the body,
+
+00:18:01.120 --> 00:18:06.080
+and if we go at the end we can add a script
+
+00:18:06.080 --> 00:18:08.640
+thing. So what we've seen with the sidebar
+
+00:18:08.920 --> 00:18:11.820
+it's just that much line of JavaScript.
+
+00:18:11.920 --> 00:18:17.440
+So this is the only JavaScript that there is
+
+00:18:17.440 --> 00:18:23.640
+to get what we have here when we do that.
+
+00:18:25.360 --> 00:18:29.500
+So you can add whatever you want.
+
+00:18:29.500 --> 00:18:33.420
+It's code and you're the master of that code.
+
+00:18:35.280 --> 00:18:38.600
+[Speaker 1]: Splendid, great. So to specify the carousel
+
+00:18:38.800 --> 00:18:39.860
+stuff that we mentioned before,
+
+00:18:39.860 --> 00:18:42.520
+it's pictures rolling or sliding from 1 to
+
+00:18:42.520 --> 00:18:44.620
+the other. It's kind of like having a
+
+00:18:44.620 --> 00:18:47.540
+gallery, imagine a fancy dynamic gallery
+
+00:18:47.540 --> 00:18:48.740
+where you can scroll pictures.
+
+00:18:48.740 --> 00:18:50.220
+Do you see what I'm talking about?
+
+00:18:50.380 --> 00:18:53.600
+[Speaker 0]: Yes, so that things would just be I think
+
+00:18:53.620 --> 00:18:57.620
+some javascript added somewhere and I can
+
+00:18:57.620 --> 00:18:59.280
+show you another website.
+
+00:18:59.440 --> 00:19:04.200
+So for instance if we go because there are
+
+00:19:04.200 --> 00:19:08.160
+not all the data of the website are not all
+
+00:19:08.160 --> 00:19:10.140
+public, but the website they are.
+
+00:19:10.140 --> 00:19:12.020
+So for instance, a mini-buffer,
+
+00:19:14.480 --> 00:19:18.880
+it's not a carousel, but at the home page,
+
+00:19:19.140 --> 00:19:20.900
+we can do whatever we want.
+
+00:19:22.660 --> 00:19:24.560
+Still those pages, still,
+
+00:19:24.560 --> 00:19:28.980
+this is only 1 file for each page.
+
+00:19:28.980 --> 00:19:31.580
+So if we click, we can get those things.
+
+00:19:31.720 --> 00:19:33.140
+It's just that when we,
+
+00:19:33.420 --> 00:19:35.040
+for the home page for instance,
+
+00:19:35.860 --> 00:19:38.040
+when we go back on that home page,
+
+00:19:38.160 --> 00:19:40.580
+we have the list at that point.
+
+00:19:40.580 --> 00:19:45.360
+So let's go back to that function that we're,
+
+00:19:45.540 --> 00:19:47.740
+so not that 1, maybe the 1,
+
+00:19:47.740 --> 00:19:50.760
+1 different, it's better because that 1 is
+
+00:19:50.760 --> 00:19:52.980
+simpler. So almost nothing happened.
+
+00:19:53.620 --> 00:19:55.520
+We have the list of the pages.
+
+00:19:56.240 --> 00:19:59.680
+So I can do whatever I want with that list.
+
+00:20:00.360 --> 00:20:05.400
+I can loop over and we can see that 1,
+
+00:20:06.340 --> 00:20:08.600
+that default home list of pages,
+
+00:20:08.600 --> 00:20:10.060
+so that list of the pages,
+
+00:20:10.260 --> 00:20:12.160
+and we see where is the list.
+
+00:20:13.200 --> 00:20:16.160
+Okay, so this is a, here we have a function
+
+00:20:17.680 --> 00:20:21.100
+that just, we want the pages,
+
+00:20:21.100 --> 00:20:24.100
+but I think we, but the home page,
+
+00:20:24.620 --> 00:20:28.120
+and we have that list,
+
+00:20:28.300 --> 00:20:33.020
+and then here we do that.
+
+00:20:37.740 --> 00:20:40.460
+And we get something listed,
+
+00:20:40.680 --> 00:20:44.060
+But then as you control everything that you
+
+00:20:44.060 --> 00:20:51.820
+do, you can pass any CSS class that you want
+
+00:20:51.820 --> 00:20:53.620
+to do those things. So,
+
+00:20:53.620 --> 00:20:55.020
+for instance, that div,
+
+00:20:55.260 --> 00:21:00.660
+add the class either. Yes,
+
+00:21:00.660 --> 00:21:02.840
+you can do. I don't remember the question,
+
+00:21:02.840 --> 00:21:05.660
+but I think I was answering the right 1.
+
+00:21:05.860 --> 00:21:07.260
+[Speaker 1]: No, no, you were answering it.
+
+00:21:07.260 --> 00:21:09.720
+It was about carousels and about having fancy
+
+00:21:09.720 --> 00:21:11.720
+display for image galleries.
+
+00:21:11.720 --> 00:21:12.660
+And I think you've answered.
+
+00:21:12.660 --> 00:21:14.120
+Basically, you just put your JavaScript,
+
+00:21:14.160 --> 00:21:16.100
+you embed it inside the code.
+
+00:21:16.620 --> 00:21:17.120
+[Speaker 0]: Exactly.
+
+00:21:18.620 --> 00:21:20.220
+[Speaker 1]: So, other question. Would there be an
+
+00:21:20.220 --> 00:21:22.860
+automated way to convert an existing HTML
+
+00:21:22.860 --> 00:21:24.880
+document into a JackHTML form?
+
+00:21:28.180 --> 00:21:32.060
+[Speaker 0]: Okay, so that 1, I don't have 1.
+
+00:21:32.200 --> 00:21:35.580
+It's another topic, but maybe there are some
+
+00:21:35.660 --> 00:21:37.940
+kind of session because some people that
+
+00:21:37.940 --> 00:21:41.620
+know, that are used to Lisp,
+
+00:21:43.080 --> 00:21:45.580
+common Lisp or Clojure or other,
+
+00:21:46.300 --> 00:21:49.460
+Jack-html, that function,
+
+00:21:50.740 --> 00:21:53.680
+is something classic, but I didn't find,
+
+00:21:53.680 --> 00:22:00.840
+So I wrote it because I didn't find it
+
+00:22:00.840 --> 00:22:04.520
+already done the way I want for Emacs.
+
+00:22:06.040 --> 00:22:08.980
+And this is something for E-cup closure.
+
+00:22:09.640 --> 00:22:13.260
+So really I take, it's not that I take my
+
+00:22:13.260 --> 00:22:15.060
+impression, just that when you have something
+
+00:22:15.060 --> 00:22:20.140
+that exists and you look at how it's done.
+
+00:22:20.640 --> 00:22:22.720
+So you have a eCup for Crusher,
+
+00:22:25.160 --> 00:22:26.640
+does the same thing that HTML.
+
+00:22:26.660 --> 00:22:32.140
+It's more that I do a Jack HTML do what eCup
+
+00:22:32.440 --> 00:22:37.160
+does, but maybe they do it a better way.
+
+00:22:37.800 --> 00:22:41.600
+So I think maybe in that community,
+
+00:22:42.320 --> 00:22:46.320
+it might already exist something that go from
+
+00:22:46.320 --> 00:22:52.440
+HTML to Jack. So you can see,
+
+00:22:53.640 --> 00:22:56.620
+is it big enough? I will make it big enough.
+
+00:22:57.626 --> 00:22:59.060
+[Speaker 1]: It's good enough, don't worry.
+
+00:22:56.820 --> 00:23:01.420
+[Speaker 0]: So if you see- So you have the hash HTML and
+
+00:23:01.420 --> 00:23:04.200
+you see those things. There are things that I
+
+00:23:04.200 --> 00:23:05.460
+couldn't do, for instance,
+
+00:23:05.460 --> 00:23:09.280
+for the ID, I couldn't use the hash in the
+
+00:23:09.280 --> 00:23:14.760
+name of, of how do we name that,
+
+00:23:14.760 --> 00:23:18.480
+of the keywords, because it's used for
+
+00:23:18.480 --> 00:23:21.180
+something else in a Emacs Lisp.
+
+00:23:21.180 --> 00:23:25.020
+So, I use... Anyway, so you see that you have
+
+00:23:25.520 --> 00:23:30.260
+that things but in Emacs we don't have the
+
+00:23:30.260 --> 00:23:34.960
+map with that syntax. We have a hash map but
+
+00:23:34.960 --> 00:23:37.120
+they are not with that syntax and I wanted
+
+00:23:37.120 --> 00:23:46.080
+that syntax so we use only list and Here we
+
+00:23:46.080 --> 00:23:48.660
+have an array with a hash map.
+
+00:23:49.200 --> 00:23:52.120
+So let me just say, so the question was,
+
+00:23:52.360 --> 00:23:54.100
+does it exist something?
+
+00:23:55.240 --> 00:23:58.680
+I think not, but it could be built or maybe
+
+00:23:58.680 --> 00:24:01.600
+exist for E-Cups, you are interested.
+
+00:24:03.240 --> 00:24:04.860
+[Speaker 1]: Okay, great. I think that answers the
+
+00:24:04.860 --> 00:24:07.840
+question perfectly. And our final question,
+
+00:24:08.440 --> 00:24:12.160
+does this or you use any other Emacs packages
+
+00:24:12.240 --> 00:24:14.180
+for your packages slash website,
+
+00:24:14.840 --> 00:24:16.740
+example, or publish? Like,
+
+00:24:17.020 --> 00:24:17.960
+rephrasing the question,
+
+00:24:17.960 --> 00:24:20.820
+do you use it for your own personal usage or
+
+00:24:20.820 --> 00:24:22.320
+do you interact with other packages?
+
+00:24:24.120 --> 00:24:26.180
+[Speaker 0]: I'm not sure I understand the question.
+
+00:24:26.640 --> 00:24:28.960
+Can you please repeat the question?
+
+00:24:29.820 --> 00:24:32.460
+[Speaker 1]: Yes, I will reread it as it is written and I
+
+00:24:32.460 --> 00:24:34.760
+will leave you interpret it however you want.
+
+00:24:34.760 --> 00:24:39.220
+Thank you. Does this or you use any other
+
+00:24:39.220 --> 00:24:43.060
+Emacs packages for your package slash website
+
+00:24:43.840 --> 00:24:45.100
+like org-publish?
+
+00:24:46.620 --> 00:24:49.340
+[Speaker 0]: No, no, no. I don't use nothing.
+
+00:24:49.660 --> 00:24:54.640
+I just accept dependency of 1.n.
+
+00:24:57.660 --> 00:25:01.000
+So, we are in 1.n and we go at the top and we
+
+00:25:01.000 --> 00:25:03.980
+see that those are the dependencies.
+
+00:25:04.820 --> 00:25:09.520
+I use nothing. So what I do is that I
+
+00:25:09.520 --> 00:25:12.420
+publish, I just generate the public
+
+00:25:12.620 --> 00:25:15.040
+directory. So if we go to public,
+
+00:25:16.500 --> 00:25:18.240
+this 1, no, I don't want this 1.
+
+00:25:18.240 --> 00:25:23.240
+I want to go to the website of the video.
+
+00:25:23.620 --> 00:25:27.400
+If we see here, everything is rendered in the
+
+00:25:27.400 --> 00:25:36.360
+public. Any services, if you use your own
+
+00:25:37.380 --> 00:25:39.280
+server and you save those files,
+
+00:25:39.280 --> 00:25:40.460
+you have your website.
+
+00:25:40.580 --> 00:25:42.580
+So I don't use anything else.
+
+00:25:42.580 --> 00:25:49.700
+I just git push and I'm using Netlify as a
+
+00:25:49.700 --> 00:25:52.320
+service to run to save my files,
+
+00:25:52.580 --> 00:25:54.860
+but you can use anything you want.
+
+00:25:55.900 --> 00:25:58.620
+Because your website is really what is into a
+
+00:25:58.620 --> 00:26:00.460
+public. So, this is another,
+
+00:26:01.360 --> 00:26:03.340
+It's not the concern of 1.L
+
+00:26:04.860 --> 00:26:07.180
+to answer. I'm not using org.publish.
+
+00:26:08.960 --> 00:26:10.900
+[Speaker 1]: Cool, great. Well, thank you.
+
+00:26:10.900 --> 00:26:13.000
+I think the question was also about other
+
+00:26:13.000 --> 00:26:16.500
+things, but I think If the person wants a
+
+00:26:16.500 --> 00:26:18.340
+more clear answer to their question,
+
+00:26:18.820 --> 00:26:21.260
+feel free to clarify the question and Tony
+
+00:26:21.260 --> 00:26:22.960
+might be able to answer it later on.
+
+00:26:22.960 --> 00:26:24.220
+Alright Tony, I think that's all the
+
+00:26:24.220 --> 00:26:25.760
+questions we had. Thank you so much for
+
+00:26:25.760 --> 00:26:27.680
+taking the time not only to present Adimax
+
+00:26:27.680 --> 00:26:29.240
+Kant, but also for answering all the
+
+00:26:29.240 --> 00:26:30.460
+questions people had.
+
+00:26:31.220 --> 00:26:34.080
+[Speaker 0]: Thank you to everybody participating,
+
+00:26:34.540 --> 00:26:38.000
+organizing and thank you for all those
+
+00:26:38.000 --> 00:26:42.180
+questions and you can send me any emails if
+
+00:26:42.180 --> 00:26:45.120
+you have a question and open the issues if
+
+00:26:45.180 --> 00:26:47.720
+it's not working the way it should work for
+
+00:26:47.720 --> 00:26:49.840
+you. Please send me those things.
+
+00:26:49.840 --> 00:26:50.900
+Thank you, everybody.
+
+00:26:51.940 --> 00:26:54.260
+[Speaker 1]: Splendid, thank you. And before,
+
+00:26:54.280 --> 00:26:56.140
+so right now we're gonna go on a lunch break.
+
+00:26:56.140 --> 00:26:58.660
+We'll be back in about 40 minutes for the
+
+00:26:58.660 --> 00:27:01.240
+talk called Emacs Turbocharges My Writing.
+
+00:27:01.300 --> 00:27:02.540
+And I will not tell you more.
+
+00:27:02.540 --> 00:27:04.280
+You can look at the talk page to see a little
+
+00:27:04.280 --> 00:27:06.340
+bit of a synopsis but otherwise keep the
+
+00:27:06.340 --> 00:27:08.900
+surprise. So have a good lunch or have a good
+
+00:27:08.900 --> 00:27:11.760
+dinner if you are in dinner-friendly times
+
+00:27:11.880 --> 00:27:13.180
+and I will see you afterwards.
+
+00:27:13.180 --> 00:27:14.180
+Thank you again, Tony.
+
+00:27:14.860 --> 00:27:15.600
+[Speaker 0]: See you.
+
+00:27:17.960 --> 00:27:20.320
+[Speaker 1]: All right. Let me just close everything.
+
+00:27:29.080 --> 00:27:30.480
+All right, got it. OK,
+
+00:27:30.480 --> 00:27:31.400
+so thank you so much, Tony.
+
+00:27:31.400 --> 00:27:33.520
+I just had to clear everything up on the
+
+00:27:33.520 --> 00:27:35.240
+stream. I'm going to need to...
+
+00:27:36.160 --> 00:27:39.000
+Sorry. I'm going to stop.
diff --git a/2023/captions/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--main--chapters.vtt b/2023/captions/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--main--chapters.vtt
new file mode 100644
index 00000000..ce9fc468
--- /dev/null
+++ b/2023/captions/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--main--chapters.vtt
@@ -0,0 +1,38 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:23.999
+Introduction
+
+00:00:24.000 --> 00:02:02.199
+Documentation
+
+00:02:02.200 --> 00:02:27.399
+Starting a new project
+
+00:02:27.400 --> 00:03:19.759
+Building
+
+00:03:19.760 --> 00:04:32.159
+Side by side
+
+00:04:32.160 --> 00:05:44.679
+Writing a render function
+
+00:05:44.680 --> 00:06:41.719
+New page
+
+00:06:41.720 --> 00:08:39.999
+Linking between pages
+
+00:08:40.000 --> 00:10:23.159
+CSS
+
+00:10:23.160 --> 00:19:03.199
+How to write a render function
+
+00:19:03.200 --> 00:20:37.159
+Rendering content
+
+00:20:37.160 --> 00:22:17.840
+Rendering CSS
diff --git a/2023/captions/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--main.vtt b/2023/captions/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--main.vtt
new file mode 100644
index 00000000..b6e0dfd6
--- /dev/null
+++ b/2023/captions/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--main.vtt
@@ -0,0 +1,1102 @@
+WEBVTT captioned by sachac, checked by sachac
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:04.159
+Hi, everybody. Welcome to the EmacsConf 2023.
+
+00:00:04.160 --> 00:00:06.399
+I hope you're doing well and you're having fun.
+
+00:00:06.400 --> 00:00:08.359
+I'm Tony Aldon, and in this talk,
+
+00:00:08.360 --> 00:00:11.159
+we are going to see how to build a static website
+
+00:00:11.160 --> 00:00:14.519
+with the package one.el that I wrote.
+
+00:00:14.520 --> 00:00:17.599
+But before we start, I'd like to thank
+
+00:00:17.600 --> 00:00:20.559
+all the people who organized that conference,
+
+00:00:20.560 --> 00:00:23.999
+so thank you all for the great work.
+
+NOTE Documentation
+
+00:00:24.000 --> 00:00:27.719
+Now let's jump into the documentation of one.el,
+
+00:00:27.720 --> 00:00:31.679
+which is built with one.el. In the install page,
+
+00:00:31.680 --> 00:00:33.079
+we can see that we have a sidebar
+
+00:00:33.080 --> 00:00:35.559
+with all of the pages in the documentation,
+
+00:00:35.560 --> 00:00:39.039
+some buttons to switch between pages,
+
+00:00:39.040 --> 00:00:41.959
+and we also have a table of contents
+
+00:00:41.960 --> 00:00:45.119
+for some of the pages if we need it.
+
+00:00:45.120 --> 00:00:49.439
+Now let's jump into one.el repository
+
+00:00:49.440 --> 00:00:52.559
+and see why I like how it is implemented,
+
+00:00:52.560 --> 00:00:53.839
+because the website that we've seen,
+
+00:00:53.840 --> 00:00:55.959
+the documentation, is just one file.
+
+00:00:55.960 --> 00:01:00.719
+So this is that file, with the headline of level 1
+
+00:01:00.720 --> 00:01:03.279
+being the web pages.
+
+00:01:03.280 --> 00:01:06.079
+There needs to be a web page to have the property,
+
+00:01:06.080 --> 00:01:09.239
+the Org property `:ONE:`, set to a render function.
+
+00:01:09.240 --> 00:01:11.799
+We are going to see how they work after.
+
+00:01:11.800 --> 00:01:14.639
+And the `:CUSTOM_ID:`, the value of the `:CUSTOM_ID:`,
+
+00:01:14.640 --> 00:01:17.519
+is the path of the page. So really,
+
+00:01:17.520 --> 00:01:20.079
+the website that we have on the left
+
+00:01:20.080 --> 00:01:24.639
+is this file. So to me, this is something simple like that
+
+00:01:24.640 --> 00:01:25.919
+that I wanted.
+
+00:01:25.920 --> 00:01:29.839
+And another thing is that when we want to
+
+00:01:29.840 --> 00:01:33.559
+change something with one.el,
+
+00:01:33.560 --> 00:01:36.679
+we don't change configuration
+
+00:01:36.680 --> 00:01:38.879
+or write JavaScript or anything else.
+
+00:01:38.880 --> 00:01:43.479
+We just write Emacs Lisp code or a bit of CSS.
+
+00:01:43.480 --> 00:01:45.919
+So this is what we have with a minibuffer website
+
+00:01:45.920 --> 00:01:47.959
+that is built with one.el,
+
+00:01:47.960 --> 00:01:50.279
+and the only thing that I had to do
+
+00:01:50.280 --> 00:01:51.919
+is to write Emacs Lisp code.
+
+00:01:51.920 --> 00:01:55.119
+So those are two things: the content in one file,
+
+00:01:55.120 --> 00:01:58.679
+and if we want to change the layout, CSS and Emacs Lisp.
+
+00:01:58.680 --> 00:02:02.199
+This is one.el.
+
+NOTE Starting a new project
+
+00:02:02.200 --> 00:02:03.879
+Now let's go to our node,
+
+00:02:03.880 --> 00:02:07.159
+and we are going to start a new project.
+
+00:02:07.160 --> 00:02:09.599
+How do we do that?
+
+00:02:09.600 --> 00:02:11.359
+In a new empty directory,
+
+00:02:11.360 --> 00:02:15.159
+so new project directory,
+
+00:02:15.160 --> 00:02:19.559
+we call the function `one-default-new-project`.
+
+00:02:19.560 --> 00:02:22.319
+We have that project, which is one file with the
+
+00:02:22.320 --> 00:02:25.759
+five default type of pages that we have,
+
+00:02:25.760 --> 00:02:27.399
+and one CSS file.
+
+NOTE Building
+
+00:02:27.400 --> 00:02:29.439
+How to build that website?
+
+00:02:29.440 --> 00:02:32.839
+Okay, so we call the function `one-build`.
+
+00:02:32.840 --> 00:02:33.959
+This builds the website.
+
+00:02:33.960 --> 00:02:36.799
+We jump into a terminal, and now if we run tree,
+
+00:02:36.800 --> 00:02:39.799
+we can see that the website
+
+00:02:39.800 --> 00:02:42.679
+has been built in the public directory
+
+00:02:42.680 --> 00:02:45.559
+with the information in the Org properties
+
+00:02:45.560 --> 00:02:50.159
+and the content of one.org files. Okay, cool.
+
+00:02:50.160 --> 00:02:53.919
+Now we are going to render that in the browser
+
+00:02:53.920 --> 00:02:58.079
+to serve that, and to do that
+
+00:02:58.080 --> 00:03:01.159
+we can use browser-sync utility,
+
+00:03:01.160 --> 00:03:02.559
+which is cool with that,
+
+00:03:02.560 --> 00:03:06.419
+in that each time we are going to...
+
+00:03:06.420 --> 00:03:07.860
+So we go into public...
+
+00:03:07.861 --> 00:03:11.759
+Each time we are going to change and rebuild the website,
+
+00:03:11.760 --> 00:03:14.319
+this will be reloaded in the browser.
+
+00:03:14.320 --> 00:03:19.759
+So one, this is that website, is now this one.
+
+NOTE Side by side
+
+00:03:19.760 --> 00:03:22.559
+So let's put them side by side.
+
+00:03:22.560 --> 00:03:26.319
+We go there, and we may do something like that.
+
+00:03:26.320 --> 00:03:30.239
+So one.el, the home page, so our custom ID
+
+00:03:30.240 --> 00:03:31.999
+with the value just a /,
+
+00:03:32.000 --> 00:03:36.079
+is rendered with that function `one-default-home`,
+
+00:03:36.080 --> 00:03:37.239
+which is a render function,
+
+00:03:37.240 --> 00:03:41.559
+and the first argument of that function is the headline,
+
+00:03:41.560 --> 00:03:45.599
+this current headline. So, parsed with the Org parser,
+
+00:03:45.600 --> 00:03:48.359
+and then we do the thing that we want to do,
+
+00:03:48.360 --> 00:03:52.079
+and the render function returns an HTML string
+
+00:03:52.080 --> 00:03:57.199
+that is used to build the pages at the custom ID.
+
+00:03:57.200 --> 00:04:03.279
+Now we can go to another web page, the second web page,
+
+00:04:03.280 --> 00:04:05.799
+and we see that there is a different value
+
+00:04:05.800 --> 00:04:10.119
+for the `:ONE:` property, so another render function,
+
+00:04:10.120 --> 00:04:13.999
+and the custom ID at the path of that page.
+
+00:04:14.000 --> 00:04:16.399
+So we can see that in the browser.
+
+00:04:16.400 --> 00:04:19.599
+So this is `/blog/default-home-list-pages`.
+
+00:04:19.600 --> 00:04:23.479
+So this is that. Now there are three other pages,
+
+00:04:23.480 --> 00:04:25.679
+but we can list that like that.
+
+00:04:25.680 --> 00:04:28.359
+We do a grep in that files,
+
+00:04:28.360 --> 00:04:32.159
+and we see the different default render function.
+
+NOTE Writing a render function
+
+00:04:32.160 --> 00:04:34.839
+In the second part of that talk,
+
+00:04:34.840 --> 00:04:38.399
+we are going to write a render function.
+
+00:04:38.400 --> 00:04:41.079
+So we are going to see that after.
+
+00:04:41.080 --> 00:04:47.079
+Now maybe we can go to the default page,
+
+00:04:47.080 --> 00:04:50.959
+and let's modify that default page.
+
+00:04:50.960 --> 00:04:54.639
+We see that this uses `one-default` render function,
+
+00:04:54.640 --> 00:04:56.999
+and now let's write "foo bar baz".
+
+00:04:57.000 --> 00:05:00.599
+We want to modify the content. We save.
+
+00:05:00.600 --> 00:05:10.439
+We call again one-build distribute,
+
+00:05:10.440 --> 00:05:16.199
+and we see here we have it: foo bar baz in the default page.
+
+00:05:16.200 --> 00:05:19.759
+Now we can use... When we use one-build,
+
+00:05:19.760 --> 00:05:23.799
+this also copies the files in the asset directory
+
+00:05:23.800 --> 00:05:25.919
+into the public directory.
+
+00:05:25.920 --> 00:05:28.039
+This is not always what we want to do.
+
+00:05:28.040 --> 00:05:29.879
+Sometimes we just change the content,
+
+00:05:29.880 --> 00:05:34.079
+and for that we can use `one-render-page-at-point`.
+
+00:05:34.080 --> 00:05:39.479
+If we use that one, this just renders the current page.
+
+00:05:39.480 --> 00:05:44.679
+So we see that we have again "foo bar baz" in the page.
+
+NOTE New page
+
+00:05:44.680 --> 00:05:47.919
+Now let's add a new page. To add a new page,
+
+00:05:47.920 --> 00:05:52.199
+we just have to copy one of them, maybe the default page.
+
+00:05:52.200 --> 00:05:58.319
+We are going to call it maybe emacsconf-2023.
+
+00:05:58.320 --> 00:06:01.839
+We still use one default render function to render it,
+
+00:06:01.840 --> 00:06:04.519
+but we want to change the path.
+
+00:06:04.520 --> 00:06:08.519
+So the custom ID, we are going to give it /blog
+
+00:06:08.520 --> 00:06:12.639
+and emacsconf-2023 with a slash at the end,
+
+00:06:12.640 --> 00:06:18.359
+and the content... We no longer want this one,
+
+00:06:18.360 --> 00:06:22.039
+but maybe "We're having a lot of fun".
+
+00:06:22.040 --> 00:06:28.599
+So we save that, we rebuild with `one-build` this,
+
+00:06:28.600 --> 00:06:33.599
+and now we can look at the top
+
+00:06:33.600 --> 00:06:39.279
+and pass it the path `/blog/emacsconf-2023/.
+
+00:06:39.280 --> 00:06:41.719
+So we have that new page.
+
+NOTE Linking between pages
+
+00:06:41.720 --> 00:06:44.159
+Now, how to link between pages?
+
+00:06:44.160 --> 00:06:46.079
+So we are going to write a link
+
+00:06:46.080 --> 00:06:47.999
+that links to the last page,
+
+00:06:48.000 --> 00:06:50.519
+so a page with the table of contents.
+
+00:06:50.520 --> 00:06:54.399
+To do that, we just have to use the value of the custom ID,
+
+00:06:54.400 --> 00:06:58.479
+and to link to a custom ID inside Org mode,
+
+00:06:58.480 --> 00:07:03.079
+we use the hashtag. We pass it here,
+
+00:07:03.080 --> 00:07:07.279
+then we pass it in the description,
+
+00:07:07.280 --> 00:07:09.799
+so TOC and sidebar,
+
+00:07:09.800 --> 00:07:12.799
+and now if we press RET inside Emacs,
+
+00:07:12.800 --> 00:07:15.839
+we jump to that page. So this is cool.
+
+00:07:15.840 --> 00:07:17.719
+Now we build again,
+
+00:07:17.720 --> 00:07:19.919
+and we see that we are going to have
+
+00:07:19.920 --> 00:07:22.279
+the link to the page in the browser.
+
+00:07:22.280 --> 00:07:26.999
+So this link to the default page with a table of contents,
+
+00:07:27.000 --> 00:07:29.879
+fine, but maybe what we want to do
+
+00:07:29.880 --> 00:07:32.999
+is to link to the "Headline foo" in that page.
+
+00:07:33.000 --> 00:07:34.679
+How do we do that?
+
+00:07:34.680 --> 00:07:36.919
+We do that by adding a custom id.
+
+00:07:36.920 --> 00:07:41.639
+We keep the first part,
+
+00:07:41.640 --> 00:07:43.759
+which is the page where we are,
+
+00:07:43.760 --> 00:07:46.359
+and we added hash with foo,
+
+00:07:46.360 --> 00:07:50.799
+so that Headline foo will have the ID "foo"
+
+00:07:50.800 --> 00:07:57.599
+in its H2 tag, HTML tag,
+
+00:07:57.600 --> 00:08:05.080
+and now we can link it here with still custom ID, so "foo",
+
+00:08:05.081 --> 00:08:10.539
+and now it's headline... headline with what?
+
+00:08:10.540 --> 00:08:14.799
+Headline foo in TOC page. So we have that.
+
+00:08:14.800 --> 00:08:19.159
+If we press RET, we jump to that headline in Emacs.
+
+00:08:19.160 --> 00:08:20.919
+So this is super cool.
+
+00:08:20.920 --> 00:08:23.559
+And now, if we call `one-build`,
+
+00:08:23.560 --> 00:08:25.799
+we see in the browser
+
+00:08:25.800 --> 00:08:26.799
+that we have a new link,
+
+00:08:26.800 --> 00:08:30.319
+and this link linked to that specific headline.
+
+00:08:30.320 --> 00:08:34.439
+So this is cool. So we have the link between pages
+
+00:08:34.440 --> 00:08:36.319
+that works inside Emacs
+
+00:08:36.320 --> 00:08:39.999
+and that works well also in the browser.
+
+NOTE CSS
+
+00:08:40.000 --> 00:08:44.519
+Now let's say that we want to change the CSS.
+
+00:08:44.520 --> 00:08:50.719
+So we've added a page with specific content,
+
+00:08:50.720 --> 00:08:51.719
+and we've done some links.
+
+00:08:51.720 --> 00:08:55.599
+Now we want to modify the CSS file
+
+00:08:55.600 --> 00:09:00.279
+which is in the asset directory, the one.css.
+
+00:09:00.280 --> 00:09:02.959
+Each time we change it,
+
+00:09:02.960 --> 00:09:05.199
+we want to have live reload
+
+00:09:05.200 --> 00:09:10.799
+that copy that file into the public directory,
+
+00:09:10.800 --> 00:09:14.659
+so the same. We go back here,
+
+00:09:14.660 --> 00:09:18.879
+and there is a utility called `entr`, e-n-t-r.
+
+00:09:18.880 --> 00:09:26.559
+Yes, this one, and using that, so a new terminal,
+
+00:09:26.560 --> 00:09:28.679
+we are at the beginning.
+
+00:09:28.680 --> 00:09:32.359
+This will watch the changing in what.css,
+
+00:09:32.360 --> 00:09:35.519
+and `entr` will copy it into the public directory
+
+00:09:35.520 --> 00:09:38.519
+each time this changes. Let's go back to Org mode,
+
+00:09:38.520 --> 00:09:43.319
+because I chose some color that is cool,
+
+00:09:43.320 --> 00:09:47.799
+and now we go back to the CSS files.
+
+00:09:47.800 --> 00:09:53.639
+We put them side by side, and maybe we go to the new page
+
+00:09:53.640 --> 00:09:55.639
+that we were changing,
+
+00:09:55.640 --> 00:10:00.999
+and we are going to change the body,
+
+00:10:01.000 --> 00:10:03.959
+the background color, and maybe we can change
+
+00:10:03.960 --> 00:10:06.119
+with the color that we've just taken.
+
+00:10:06.120 --> 00:10:10.219
+So we save, and we see the changing happening.
+
+00:10:10.220 --> 00:10:14.679
+We can do it again with the color
+
+00:10:14.680 --> 00:10:16.119
+that we have at the beginning,
+
+00:10:16.120 --> 00:10:18.879
+and this is the user experience
+
+00:10:18.880 --> 00:10:23.159
+that we have with one.el and the default function.
+
+NOTE How to write a render function
+
+00:10:23.160 --> 00:10:26.279
+Now that we've seen that,
+
+00:10:26.280 --> 00:10:30.460
+we've done all of that part,
+
+00:10:30.461 --> 00:10:31.919
+and now we are going to see
+
+00:10:31.920 --> 00:10:34.279
+how to write a render function.
+
+00:10:34.280 --> 00:10:36.759
+So let's go. The render function,
+
+00:10:36.760 --> 00:10:41.479
+so one.org, we remember these are the functions
+
+00:10:41.480 --> 00:10:43.399
+that are in the `:ONE:` Org property.
+
+00:10:43.400 --> 00:10:45.599
+So we are going to remove that part.
+
+00:10:45.600 --> 00:10:49.439
+We no longer want that one. We don't want this.
+
+00:10:49.440 --> 00:10:52.439
+We just keep that. `one-default`,
+
+00:10:52.440 --> 00:10:55.839
+we want this to be the home of our website.
+
+00:10:55.840 --> 00:10:57.659
+We have that. We rebuild,
+
+00:10:57.660 --> 00:11:05.079
+and now we just have one page, and we have that page.
+
+00:11:05.080 --> 00:11:10.679
+We are going to add another page that we call "foo",
+
+00:11:10.680 --> 00:11:15.519
+and here we pass it the render function foo
+
+00:11:15.520 --> 00:11:20.319
+that doesn't exist yet, and we are going to write it.
+
+00:11:20.320 --> 00:11:27.159
+So maybe with some content, and we copy, copy.
+
+00:11:27.160 --> 00:11:33.159
+We have that. We call it "bar" to have something to show.
+
+00:11:33.160 --> 00:11:39.959
+So here we are. If we build that, so we build it,
+
+00:11:39.960 --> 00:11:42.599
+and we see in the echo area at the bottom
+
+00:11:42.600 --> 00:11:43.719
+that we have an error "void",
+
+00:11:43.720 --> 00:11:46.799
+which is because the function foo doesn't exist.
+
+00:11:46.800 --> 00:11:48.799
+So now we are going to write that function,
+
+00:11:48.800 --> 00:11:53.359
+and we write it in the onerc.el
+
+00:11:53.360 --> 00:11:57.199
+where we put any Elisp code
+
+00:11:57.200 --> 00:11:58.359
+that we want to be run
+
+00:11:58.360 --> 00:12:03.479
+each time we build the website or render the pages.
+
+00:12:03.480 --> 00:12:06.519
+So we want a render function called foo.
+
+00:12:06.520 --> 00:12:09.999
+So that takes three arguments: page-tree, pages, and global.
+
+00:12:10.000 --> 00:12:16.639
+We are going to look at the page-tree in our case,
+
+00:12:16.640 --> 00:12:19.759
+and the render function return an HTML string.
+
+00:12:19.760 --> 00:12:22.319
+This is the thing that we want from them.
+
+00:12:22.320 --> 00:12:25.159
+So maybe foo, bar, and baz.
+
+00:12:25.160 --> 00:12:28.159
+Now this is something well-defined,
+
+00:12:28.160 --> 00:12:34.199
+and with one.org here, the file, we rebuild this,
+
+00:12:34.200 --> 00:12:39.619
+and we can see now in the browser,
+
+00:12:39.620 --> 00:12:42.959
+if we go to the page foo, that we have "foo bar baz".
+
+00:12:42.960 --> 00:12:45.459
+So this is exactly what we have rendered
+
+00:12:45.460 --> 00:12:47.879
+by the render function that is set,
+
+00:12:47.880 --> 00:12:51.599
+we see at the bottom in the one.org file,
+
+00:12:51.600 --> 00:12:56.119
+in the `:ONE:` property. Now this is HTML, so we can pass it,
+
+00:12:56.120 --> 00:13:00.879
+for instance, h1, the tag h1.
+
+00:13:00.880 --> 00:13:06.039
+We save that file. We go in the one.org file,
+
+00:13:06.040 --> 00:13:10.399
+we build again, and now we see that we have an h1.
+
+00:13:10.400 --> 00:13:14.839
+Okay, this is interesting, but if we would have to
+
+00:13:14.840 --> 00:13:18.119
+build this function with a string like that,
+
+00:13:18.120 --> 00:13:22.319
+this is boring and not the best way.
+
+00:13:22.320 --> 00:13:24.639
+So we can use the library Jack,
+
+00:13:24.640 --> 00:13:27.588
+which offers function `jack-html`
+
+00:13:27.589 --> 00:13:31.580
+that takes some data structure,
+
+00:13:31.581 --> 00:13:34.179
+for instance, an h1, a nested list
+
+00:13:34.180 --> 00:13:38.479
+that represents the HTML that we want to render,
+
+00:13:38.480 --> 00:13:41.039
+and transform it into an HTML string.
+
+00:13:41.040 --> 00:13:43.959
+So we have that, we saved,
+
+00:13:43.960 --> 00:13:48.279
+we rebuild in the one.org file with `one-build`,
+
+00:13:48.280 --> 00:13:55.399
+and we see now that this has been built using `jack-html`.
+
+00:13:55.400 --> 00:13:59.159
+Now what do we want to do?
+
+00:13:59.160 --> 00:14:01.999
+Okay, see, the thing that we want to do
+
+00:14:02.000 --> 00:14:04.999
+is to understand page-tree. So what is page-tree?
+
+00:14:05.000 --> 00:14:07.599
+page-tree is when we go to one.org,
+
+00:14:07.600 --> 00:14:09.479
+this is really for foo,
+
+00:14:09.480 --> 00:14:17.919
+this is the parsed data of that headline, that page.
+
+00:14:17.920 --> 00:14:23.119
+So this is done with, no, not this one, we use,
+
+00:14:23.120 --> 00:14:27.879
+so in the mini-buffer, we use `one-parse-buffer`,
+
+00:14:27.880 --> 00:14:29.999
+and we see this is the data
+
+00:14:30.000 --> 00:14:33.359
+that we have with that function, first headline,
+
+00:14:33.360 --> 00:14:34.439
+and the second headline,
+
+00:14:34.440 --> 00:14:38.199
+this is the parse tree that we have there.
+
+00:14:38.200 --> 00:14:40.719
+This is that data that is passed to
+
+00:14:40.720 --> 00:14:45.279
+the `foo` render function. One thing that is cool,
+
+00:14:45.280 --> 00:14:51.599
+so I see here, is that as we are dealing with data,
+
+00:14:51.600 --> 00:14:53.359
+we have all the data of the website,
+
+00:14:53.360 --> 00:14:57.360
+we can show them in the web page. Now, why not?
+
+00:14:57.361 --> 00:15:00.079
+It's great to write the website
+
+00:15:00.080 --> 00:15:02.839
+and also to debug if we need to debug at some point.
+
+00:15:02.840 --> 00:15:10.279
+So let's render page-tree directly in the page, one.org,
+
+00:15:10.280 --> 00:15:15.679
+and we rebuild, we reload, and we see this is what we have,
+
+00:15:15.680 --> 00:15:17.159
+this is the data that we have, okay?
+
+00:15:17.160 --> 00:15:20.599
+And we have, for instance, the `:raw-value` with this "foo",
+
+00:15:20.600 --> 00:15:22.519
+which is the headline,
+
+00:15:22.520 --> 00:15:27.039
+the content of the headline in a raw format,
+
+00:15:27.040 --> 00:15:29.719
+and we also have custom,
+
+00:15:29.720 --> 00:15:33.839
+so here we have the `:CUSTOM_ID: foo` and `:ONE: foo`,
+
+00:15:33.840 --> 00:15:34.999
+which are the properties,
+
+00:15:35.000 --> 00:15:40.359
+and when we are inside those render functions,
+
+00:15:40.360 --> 00:15:43.240
+we have access to this.
+
+00:15:43.241 --> 00:15:46.799
+So let's, what can we do now, is to,
+
+00:15:46.800 --> 00:15:48.639
+let's get the row value.
+
+00:15:48.640 --> 00:15:51.759
+So we no longer need that.
+
+00:15:51.760 --> 00:15:54.839
+Maybe we can do something like that.
+
+00:15:54.840 --> 00:16:03.999
+We create now HTML. In HTML, we want the body,
+
+00:16:04.000 --> 00:16:08.039
+we want an h1 tag, and we are going to pass it
+
+00:16:08.040 --> 00:16:10.559
+a title, and in the title,
+
+00:16:10.560 --> 00:16:13.839
+this is something that we let-bind here,
+
+00:16:13.840 --> 00:16:15.599
+so the value of the title,
+
+00:16:15.600 --> 00:16:24.719
+we get it with `org-element-property`,
+
+00:16:24.720 --> 00:16:29.759
+and the `:raw-value`, so this is the property that we want,
+
+00:16:29.760 --> 00:16:34.039
+so `raw-value`, and from which data we want that,
+
+00:16:34.040 --> 00:16:40.599
+to page-tree. So now, let's have one.org at the bottom,
+
+00:16:40.600 --> 00:16:46.039
+we build again, and now we reload,
+
+00:16:46.040 --> 00:16:50.839
+and we see that we get a foo. This is that title,
+
+00:16:50.840 --> 00:16:56.559
+the value of that variable in that data structure.
+
+00:16:56.560 --> 00:17:00.319
+Now, let's get those two properties.
+
+00:17:00.320 --> 00:17:03.039
+How do we get those two properties?
+
+00:17:03.040 --> 00:17:07.199
+The same way, `:ONE:` that we call one, so raw-value,
+
+00:17:07.200 --> 00:17:11.639
+we change that for `:ONE`, the other raw-value
+
+00:17:11.640 --> 00:17:19.359
+for `:CUSTOM_ID`, we change the title for `custom-id`,
+
+00:17:19.360 --> 00:17:23.559
+and what we want now is for instance,
+
+00:17:23.560 --> 00:17:30.159
+yes, h1 again, and org properties.
+
+00:17:30.160 --> 00:17:34.799
+We add the org properties, and let's do a list,
+
+00:17:34.800 --> 00:17:39.799
+another list, with li element, one,
+
+00:17:39.800 --> 00:17:43.159
+we want that value, and that value will be
+
+00:17:43.160 --> 00:17:45.759
+the value of the variable one.
+
+00:17:45.760 --> 00:17:52.479
+We can do that with also custom-id,
+
+00:17:52.480 --> 00:17:56.119
+and now, in the one that we have to save,
+
+00:17:56.120 --> 00:17:59.439
+and in one of our files, not like that,
+
+00:17:59.440 --> 00:18:03.199
+we rebuild that, and we see
+
+00:18:03.200 --> 00:18:05.799
+that we can get those properties.
+
+00:18:05.800 --> 00:18:06.999
+This is super cool.
+
+00:18:07.000 --> 00:18:09.159
+As we are dealing with data,
+
+00:18:09.160 --> 00:18:11.719
+and we have the information of the whole website,
+
+00:18:11.720 --> 00:18:14.039
+we can do whatever we want,
+
+00:18:14.040 --> 00:18:16.599
+because we have access to that data.
+
+00:18:16.600 --> 00:18:23.839
+Let's, for instance, add a date, the date of 2023,
+
+00:18:23.840 --> 00:18:28.319
+so I think this is 02, when there is the conference, see,
+
+00:18:28.320 --> 00:18:32.759
+and we can get access to that `one` again,
+
+00:18:32.760 --> 00:18:37.954
+here, so `date`, and we go,
+
+00:18:37.955 --> 00:18:42.359
+we change the `:CUSTOM_ID` with the `:DATE`,
+
+00:18:42.360 --> 00:18:46.639
+and in the list here,
+
+00:18:46.640 --> 00:18:53.359
+so we want in the list, this to be the date,
+
+00:18:53.360 --> 00:18:56.559
+and we build again that,
+
+00:18:56.560 --> 00:18:58.799
+and we have access to the date.
+
+00:18:58.800 --> 00:19:03.199
+Really, we can do whatever we want.
+
+NOTE Rendering content
+
+00:19:03.200 --> 00:19:06.759
+Now, we want the content. So far,
+
+00:19:06.760 --> 00:19:11.599
+we get the property, but what about the content,
+
+00:19:11.600 --> 00:19:17.039
+so h1, and now we put "Org content",
+
+00:19:17.040 --> 00:19:21.359
+and this is going to be something in the variable content,
+
+00:19:21.360 --> 00:19:25.079
+and we have to add that variable,
+
+00:19:25.080 --> 00:19:27.999
+so in the let binding, we write our content,
+
+00:19:28.000 --> 00:19:30.639
+we are going to have that content from the page-tree.
+
+00:19:30.640 --> 00:19:33.679
+To do that, we use `org-export`,
+
+00:19:33.680 --> 00:19:36.119
+so we need to export something into HTML,
+
+00:19:36.120 --> 00:19:37.599
+we export the data with the backend.
+
+00:19:37.600 --> 00:19:40.239
+So the data that we want is page-tree,
+
+00:19:40.240 --> 00:19:42.239
+but we don't want the first headline,
+
+00:19:42.240 --> 00:19:46.759
+so we use `org-element-contents`,
+
+00:19:46.760 --> 00:19:50.519
+and we pass it `page-tree`, so this is that.
+
+00:19:50.520 --> 00:19:53.119
+But for the exported, we need to pass it,
+
+00:19:53.120 --> 00:20:00.599
+and also, how do we call that, we call that an Org backend.
+
+00:20:00.600 --> 00:20:06.759
+So `one-ox` is our backend provided by one.el,
+
+00:20:06.760 --> 00:20:09.519
+and the last argument is nil.
+
+00:20:09.520 --> 00:20:14.079
+We are almost done. Now with one.org,
+
+00:20:14.080 --> 00:20:18.879
+we build the website, and we see that we have an error,
+
+00:20:18.880 --> 00:20:22.079
+it's because this is not a content,
+
+00:20:22.080 --> 00:20:27.039
+so there.. No, okay,
+
+00:20:27.040 --> 00:20:32.839
+there was this `org-element-contents`, I think,
+
+00:20:32.840 --> 00:20:37.159
+and now we build it, and we must see it here.
+
+NOTE Rendering CSS
+
+00:20:37.160 --> 00:20:39.959
+So we have the content,
+
+00:20:39.960 --> 00:20:43.319
+we have the Org values,
+
+00:20:43.320 --> 00:20:48.399
+and last thing that we can do maybe is to put some CSS.
+
+00:20:48.400 --> 00:20:51.919
+Let's have a look to `one-default` function.
+
+00:20:51.920 --> 00:20:56.399
+We can see in one.el file that we have a lot of
+
+00:20:56.400 --> 00:21:01.919
+default functions that we can use to take inspiration.
+
+00:21:01.920 --> 00:21:05.599
+The last thing that we need
+
+00:21:05.600 --> 00:21:07.999
+is to link to the one.css file,
+
+00:21:08.000 --> 00:21:14.919
+so we are going to do that `onerc` file.
+
+00:21:14.920 --> 00:21:20.319
+This is here, so `html` we don't need,
+
+00:21:20.320 --> 00:21:26.479
+we have that one, we want the head to be here,
+
+00:21:26.480 --> 00:21:37.319
+and we pass it a class, which is a title,
+
+00:21:37.320 --> 00:21:42.239
+a div with the class content. We have that.
+
+00:21:42.240 --> 00:21:46.159
+Now with one.org, we build it again,
+
+00:21:46.160 --> 00:21:50.599
+and we should see the website render with the CSS,
+
+00:21:50.600 --> 00:21:56.759
+the property, and all the content,
+
+00:21:56.760 --> 00:22:01.519
+and we've done that just with that Emacs Lisp file,
+
+00:22:01.520 --> 00:22:08.959
+so this is all I wanted to show you today with one.el,
+
+00:22:08.960 --> 00:22:14.879
+I hope you enjoyed the talk, and have a nice day,
+
+00:22:14.880 --> 00:22:17.840
+and a nice conference.
diff --git a/2023/captions/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--answers.vtt b/2023/captions/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--answers.vtt
new file mode 100644
index 00000000..2f2e9a1a
--- /dev/null
+++ b/2023/captions/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--answers.vtt
@@ -0,0 +1,638 @@
+WEBVTT
+
+
+00:00:02.899 --> 00:00:03.399
+[Speaker 0]: Out here or also you can continue discussing
+
+00:00:06.200 --> 00:00:06.700
+on IRC.
+
+00:00:23.200 --> 00:00:23.320
+So I see 2 questions coming in already on the
+
+00:00:24.400 --> 00:00:24.619
+pad. So the first question is,
+
+00:00:26.759 --> 00:00:27.040
+how did you draw the under braces and over
+
+00:00:38.360 --> 00:00:38.559
+braces? Sorry, Jeff, you're muted on the blue
+
+00:00:38.559 --> 00:00:39.059
+button.
+
+00:00:43.340 --> 00:00:43.680
+[Speaker 1]: I'm sorry for some reason I'm seeing
+
+00:00:45.960 --> 00:00:46.420
+everything twice. I'm hearing everything
+
+00:00:48.420 --> 00:00:48.600
+twice. So it's, it's about with about a 5
+
+00:00:53.400 --> 00:00:53.900
+[Speaker 0]: Probably my stream turned on
+
+00:00:57.340 --> 00:00:57.620
+[Speaker 1]: second delay. It's straight Oh,
+
+00:01:03.820 --> 00:01:04.000
+you're right Thank you so much I MPB is
+
+00:01:07.340 --> 00:01:07.840
+showing the the big blue button Okay,
+
+00:01:09.060 --> 00:01:09.380
+sorry everyone. Okay now.
+
+00:01:12.180 --> 00:01:12.260
+I'm together now Let's see How did I draw the
+
+00:01:13.140 --> 00:01:13.640
+over braces and under braces?
+
+00:01:17.120 --> 00:01:17.620
+LaTeX. That is a, that's a,
+
+00:01:25.020 --> 00:01:25.380
+yeah, and a SVG, I think,
+
+00:01:29.160 --> 00:01:29.460
+produced by LaTeX through a separate file.
+
+00:01:31.960 --> 00:01:32.460
+I tried to do like a LaTeX code block and
+
+00:01:33.940 --> 00:01:34.160
+didn't get around to it.
+
+00:01:36.900 --> 00:01:37.260
+Also, the code to produce it in TickSet was
+
+00:01:39.800 --> 00:01:39.940
+really, really long. So I didn't put it in
+
+00:01:47.300 --> 00:01:47.540
+[Speaker 0]: The next question is, you've got a nice
+
+00:01:48.840 --> 00:01:49.340
+sounding keyboard. What kind is it?
+
+00:01:50.380 --> 00:01:50.600
+[Speaker 1]: the notes. GARY ILLYES-CHAKRABARTYTT I'm so
+
+00:01:55.960 --> 00:01:56.180
+sorry. It is an Ergodox split keyboard for my
+
+00:01:59.700 --> 00:02:00.180
+wrists. Sorry about the noise.
+
+00:02:01.020 --> 00:02:01.280
+[Speaker 0]: Awesome. Yeah, no worries.
+
+00:02:02.220 --> 00:02:02.440
+I mean, I like to hear it.
+
+00:02:03.900 --> 00:02:04.400
+We like to hear it. I think a lot of us do.
+
+00:02:07.080 --> 00:02:07.580
+[Speaker 1]: Do we have anything on IRC?
+
+00:02:15.880 --> 00:02:16.380
+Let's see. Someone's asking for ligatures.
+
+00:02:23.420 --> 00:02:23.860
+Do you have any questions,
+
+00:02:26.100 --> 00:02:26.600
+Ben? Charles?
+
+00:02:35.280 --> 00:02:35.440
+[Speaker 0]: I see a bunch on the path that I can read for
+
+00:02:36.980 --> 00:02:37.480
+[Speaker 1]: Oh, yeah, please do.
+
+00:02:39.960 --> 00:02:40.140
+[Speaker 0]: now. Sure. So next question is,
+
+00:02:41.580 --> 00:02:42.080
+do you find that the invasive,
+
+00:02:44.540 --> 00:02:44.680
+quote unquote, 3-formatting interferes with
+
+00:02:44.680 --> 00:02:45.180
+navigation?
+
+00:02:48.700 --> 00:02:49.200
+[Speaker 1]: Yes, it does. That is true.
+
+00:03:01.300 --> 00:03:01.800
+Let me see. Yeah, it's weird.
+
+00:03:04.120 --> 00:03:04.340
+The good news is that,
+
+00:03:06.260 --> 00:03:06.500
+oh, you know what? The first thing I did,
+
+00:03:07.600 --> 00:03:08.100
+my first attempt at this,
+
+00:03:11.140 --> 00:03:11.480
+I actually made all of the incoming text
+
+00:03:13.440 --> 00:03:13.660
+invisible and just replaced it with my own
+
+00:03:15.440 --> 00:03:15.940
+text. And that was actually a lot worse.
+
+00:03:21.420 --> 00:03:21.680
+The more of the input that is removed or made
+
+00:03:23.600 --> 00:03:23.960
+invisible, the harder the navigation becomes.
+
+00:03:26.520 --> 00:03:26.880
+So the fact that now I'm just inserting line
+
+00:03:29.440 --> 00:03:29.640
+breaks and spaces makes it a lot easier.
+
+00:03:30.540 --> 00:03:30.920
+And I can still search.
+
+00:03:34.600 --> 00:03:34.760
+And when I get to the destination of the
+
+00:03:38.300 --> 00:03:38.800
+search, I'm still in proper normal text.
+
+00:03:41.980 --> 00:03:42.160
+So it got a little better by changing my
+
+00:03:43.740 --> 00:03:43.940
+strategy a bit, but it's still a little bit
+
+00:03:50.180 --> 00:03:50.680
+of a problem. Let's see.
+
+00:03:51.720 --> 00:03:52.220
+I'll go look at the etherpad.
+
+00:03:55.080 --> 00:03:55.520
+Where is it?
+
+00:03:57.260 --> 00:03:57.440
+[Speaker 0]: I can read the questions from etherpad if
+
+00:04:00.660 --> 00:04:00.860
+you'd like me to. And then If at any point
+
+00:04:02.720 --> 00:04:03.180
+you want to take the questions from IRC,
+
+00:04:04.320 --> 00:04:04.820
+then feel free to do that as well.
+
+00:04:07.240 --> 00:04:07.600
+[Speaker 1]: I found it. Can you show us the key bindings
+
+00:04:08.940 --> 00:04:09.440
+of your minor map for editing overlays?
+
+00:04:15.860 --> 00:04:16.360
+Well, I have a minor mode key map for
+
+00:04:21.720 --> 00:04:22.220
+increasing or decreasing the level of detail.
+
+00:04:24.640 --> 00:04:25.140
+And the key bindings are like,
+
+00:04:31.840 --> 00:04:32.340
+I can't remember what it is.
+
+00:04:34.080 --> 00:04:34.200
+If you go and you look at the source on
+
+00:04:35.640 --> 00:04:36.140
+GitHub, you can see it there.
+
+00:04:37.600 --> 00:04:38.100
+I forgot what I bound them to.
+
+00:04:40.320 --> 00:04:40.820
+Something that I'm allowed to do.
+
+00:04:45.860 --> 00:04:46.220
+They have restrictions on what key bindings
+
+00:04:47.200 --> 00:04:47.700
+you can make in minor modes.
+
+00:04:49.300 --> 00:04:49.640
+And I carefully followed the directions.
+
+00:04:50.580 --> 00:04:50.820
+I don't remember what it was.
+
+00:04:54.220 --> 00:04:54.720
+It's like Control-C-P or something like that.
+
+00:05:00.600 --> 00:05:01.100
+Or yeah. Sorry. Your examples were with C++
+
+00:05:02.640 --> 00:05:03.140
+if you experiment with any other languages.
+
+00:05:07.460 --> 00:05:07.960
+I haven't. I guess this is just a perennial
+
+00:05:10.440 --> 00:05:10.940
+pain point for C++ programmers.
+
+00:05:13.480 --> 00:05:13.860
+So that's kind of why my,
+
+00:05:15.680 --> 00:05:16.000
+and I am 1, and I guess that's why my focus
+
+00:05:17.880 --> 00:05:18.080
+was there. You probably have to rewrite some
+
+00:05:20.520 --> 00:05:21.020
+of the parsers to use something else.
+
+00:05:24.060 --> 00:05:24.160
+Would it be possible to include overlays in
+
+00:05:25.080 --> 00:05:25.580
+the source file itself?
+
+00:05:30.860 --> 00:05:31.360
+I actually don't understand this question.
+
+00:05:33.120 --> 00:05:33.440
+In the source file itself,
+
+00:05:35.160 --> 00:05:35.660
+there are language modes that do this.
+
+00:05:41.580 --> 00:05:41.740
+No, I'm not certain I understand that
+
+00:05:43.520 --> 00:05:43.700
+question. Maybe you could edit it a little
+
+00:05:45.360 --> 00:05:45.860
+bit more, overlays in the source file.
+
+00:05:48.840 --> 00:05:49.340
+What are your plans for TSP in the future?
+
+00:05:54.560 --> 00:05:55.060
+It's a little fragile.
+
+00:06:00.020 --> 00:06:00.520
+So it might be nice to investigate.
+
+00:06:02.600 --> 00:06:02.920
+I think you can get the compiler to output
+
+00:06:04.120 --> 00:06:04.620
+error messages in different formats,
+
+00:06:07.320 --> 00:06:07.800
+which might be more parsable or the parsing
+
+00:06:08.360 --> 00:06:08.860
+might be more maintainable.
+
+00:06:10.280 --> 00:06:10.520
+That might be an interesting thing to
+
+00:06:15.460 --> 00:06:15.960
+investigate. And the other thing is I have
+
+00:06:19.200 --> 00:06:19.700
+just 1 way of reformatting the output where
+
+00:06:21.360 --> 00:06:21.820
+everything on the same level is vertically
+
+00:06:23.920 --> 00:06:24.160
+aligned. But I think some people might want
+
+00:06:26.920 --> 00:06:27.040
+to make more use of the horizontal space on
+
+00:06:30.920 --> 00:06:31.260
+the screen and take the sort of sibling parts
+
+00:06:34.860 --> 00:06:35.360
+of the type and line them up straight across
+
+00:06:39.140 --> 00:06:39.640
+and take up a little bit less vertical space.
+
+00:06:47.560 --> 00:06:48.040
+Enriched mode. I don't know what enriched
+
+00:06:51.240 --> 00:06:51.500
+mode is. Interesting. Oh,
+
+00:06:52.720 --> 00:06:53.220
+what's my repository link?
+
+00:06:56.400 --> 00:06:56.900
+Let me get that then. I don't know how to
+
+00:07:00.620 --> 00:07:01.120
+format this properly, but it's just troll
+
+00:07:03.820 --> 00:07:04.320
+slash tspute. Yeah, it's on GitHub.
+
+00:07:14.820 --> 00:07:15.160
+Something like that. Let's see.
+
+00:07:16.120 --> 00:07:16.620
+This looks like the Etherpad.
+
+00:07:19.640 --> 00:07:20.140
+It looks like all the Etherpad questions.
+
+00:07:22.120 --> 00:07:22.620
+We have 1 here from Charles.
+
+00:07:24.960 --> 00:07:25.120
+Can overlays work as hypertext so you can
+
+00:07:26.680 --> 00:07:27.180
+link an error message back to the source?
+
+00:07:30.720 --> 00:07:30.920
+Yeah, actually, that's done by default in
+
+00:07:32.680 --> 00:07:33.120
+compilation mode. That's 1 of the features
+
+00:07:36.160 --> 00:07:36.660
+you get, which has been around for literally
+
+00:07:41.280 --> 00:07:41.520
+decades. Oh, yeah. Is it already there?
+
+00:07:42.240 --> 00:07:42.740
+Yes, it's already there.
+
+00:07:45.960 --> 00:07:46.460
+Let's see. Do we have anything on IRC?
+
+00:07:56.680 --> 00:07:56.880
+Let me see. OK, looks like it seems like
+
+00:07:58.000 --> 00:07:58.480
+we've run out of questions.
+
+00:07:58.860 --> 00:07:59.360
+Is that true?
+
+00:08:04.440 --> 00:08:04.640
+[Speaker 0]: Yeah, it seems so. It seems so,
+
+00:08:06.820 --> 00:08:07.200
+although we still have a couple more minutes,
+
+00:08:09.000 --> 00:08:09.480
+like maybe 3, 4 minutes on the stream.
+
+00:08:13.780 --> 00:08:14.240
+So yeah. And then, of course,
+
+00:08:15.800 --> 00:08:16.020
+once the stream does move on to the next
+
+00:08:19.120 --> 00:08:19.440
+talk. Folks are welcome to join Jeff here on
+
+00:08:22.340 --> 00:08:22.500
+BigBlueButton. If Jeff still has a few more
+
+00:08:24.640 --> 00:08:24.960
+minutes to just chat here or ask questions
+
+00:08:25.800 --> 00:08:26.300
+here, that works as well.
+
+00:08:26.920 --> 00:08:27.240
+[Speaker 1]: JEFF CROSSMAN-WILSONEY-PORTMAN Yeah,
+
+00:08:29.640 --> 00:08:30.140
+if anyone's excited about the tool.
+
+00:08:38.460 --> 00:08:38.880
+Are the notes are available online,
+
+00:08:42.100 --> 00:08:42.360
+right? I uploaded an org file that was my
+
+00:08:43.700 --> 00:08:43.940
+talk, and I actually included some
+
+00:08:48.900 --> 00:08:49.300
+references. Like at the end,
+
+00:08:50.860 --> 00:08:51.360
+there's some links and stuff like that.
+
+00:08:54.620 --> 00:08:54.820
+Whenever you see like a underlined thing in
+
+00:08:56.840 --> 00:08:56.980
+my presentation, it's like I was kind of
+
+00:08:58.520 --> 00:08:59.020
+thinking people would have access to the
+
+00:09:00.920 --> 00:09:01.160
+actual presentation itself so they could go
+
+00:09:04.640 --> 00:09:05.140
+and see what it was I was linking to some PDF
+
+00:09:07.540 --> 00:09:08.000
+somewhere. How annoying is this for multiple
+
+00:09:09.600 --> 00:09:09.960
+compilers? It's annoying,
+
+00:09:15.620 --> 00:09:15.860
+Ben. I basically have separate parsers for
+
+00:09:18.600 --> 00:09:18.760
+Clang and GCC, and I'm not supporting MSVC at
+
+00:09:23.540 --> 00:09:23.940
+the moment. So yeah, that's where I do worry
+
+00:09:26.520 --> 00:09:26.680
+about its fragility, about the way I'm kind
+
+00:09:27.720 --> 00:09:28.220
+of parsing these error messages,
+
+00:09:29.340 --> 00:09:29.840
+which are idiosyncratic.
+
+00:09:38.440 --> 00:09:38.680
+Oh, yeah, great. Thank you,
+
+00:09:49.060 --> 00:09:49.220
+Amin. That's good. Should just follow that
+
+00:09:49.600 --> 00:09:50.100
+link, I guess.
+
+00:09:56.420 --> 00:09:56.720
+[Speaker 0]: Well, yeah, it's so that you have to scroll
+
+00:09:59.020 --> 00:09:59.380
+down a little bit underneath the video
+
+00:10:00.460 --> 00:10:00.960
+embedding itself. There's timestamps.
+
+00:10:01.880 --> 00:10:02.380
+And then below the timestamps,
+
+00:10:03.240 --> 00:10:03.740
+I see a bunch of links,
+
+00:10:06.140 --> 00:10:06.640
+including 1 that says download.org.
+
+00:10:09.800 --> 00:10:10.020
+[Speaker 1]: Yeah, let's see what that is.
+
+00:10:13.080 --> 00:10:13.320
+Is that the right 1? Yeah,
+
+00:10:14.780 --> 00:10:15.280
+that's it. That's the 1.
+
+00:10:19.280 --> 00:10:19.540
+Yeah, you can also see all of my hacks to Org
+
+00:10:20.740 --> 00:10:21.240
+Present are in there as well.
+
+00:10:25.760 --> 00:10:25.920
+I followed the System Crafters thing and made
+
+00:10:27.160 --> 00:10:27.660
+a bunch of my own modifications.
+
+00:10:33.120 --> 00:10:33.420
+Org Present has this problem where every
+
+00:10:35.760 --> 00:10:36.060
+heading is a slide, which I don't like.
+
+00:10:37.080 --> 00:10:37.580
+I kind of want hierarchy.
+
+00:10:41.040 --> 00:10:41.540
+You know? Oh, no. Sorry.
+
+00:10:43.440 --> 00:10:43.940
+Every level 1 heading is a slide.
+
+00:10:46.360 --> 00:10:46.720
+And I kind of want hierarchy among the
+
+00:10:51.440 --> 00:10:51.640
+slides. And I had to sort of invent it in
+
+00:10:54.320 --> 00:10:54.820
+that system myself through navigation.
+
+00:11:03.800 --> 00:11:04.300
+It looks like things have quieted down.
+
+00:11:09.520 --> 00:11:10.020
+Shall we call it?
+
+00:11:14.020 --> 00:11:14.120
+[Speaker 0]: Yeah, sure. So yeah, thanks again for the
+
+00:11:17.780 --> 00:11:18.120
+great talk, Jeff. And also to the audience
+
+00:11:18.960 --> 00:11:19.460
+for questions and discussions.
+
+00:11:21.720 --> 00:11:21.900
+People are welcome to stay here on BBB if
+
+00:11:24.060 --> 00:11:24.160
+Jeff has time to continue the discussions and
+
+00:11:25.320 --> 00:11:25.520
+ask any questions they might have.
+
+00:11:26.820 --> 00:11:27.320
+Otherwise, yeah, we can wrap it.
+
+00:11:29.200 --> 00:11:29.380
+[Speaker 1]: Sure. Thank you so much.
+
+00:11:30.400 --> 00:11:30.880
+And I love this conference.
+
+00:11:33.900 --> 00:11:34.120
+I've been a happy attendee since like 2015 or
+
+00:11:36.760 --> 00:11:37.120
+something. So yeah, it's great.
+
+00:11:37.760 --> 00:11:38.260
+Thank you for your work.
+
+00:11:41.040 --> 00:11:41.260
+[Speaker 0]: Thank you. Cheers. I mean,
+
+00:11:43.080 --> 00:11:43.260
+in large part, thanks to awesome people like
+
+00:11:44.280 --> 00:11:44.540
+you who give these amazing talks.
+
+00:11:45.420 --> 00:11:45.920
+So Thank you as well.
+
+00:14:30.260 --> 00:14:30.460
+[Speaker 1]: You are currently the only person in this
+
+00:14:30.460 --> 00:14:30.960
+conference.
+
+00:21:15.260 --> 00:21:15.760
+You
+
+00:21:37.760 --> 00:21:38.260
+1
+
+00:22:23.260 --> 00:22:23.760
+1 1 1 1 2 1 2 1 2 1 1 3 4 1 2 4 1 1 3 4 1 1 2
+
+00:22:28.100 --> 00:22:28.600
+3 3 4 1 2 1
+
+00:24:41.445 --> 00:24:41.945
+You
diff --git a/2023/captions/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--main--chapters.vtt b/2023/captions/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--main--chapters.vtt
new file mode 100644
index 00000000..dfafd866
--- /dev/null
+++ b/2023/captions/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--main--chapters.vtt
@@ -0,0 +1,80 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:33.560
+Introduction
+
+00:00:33.560 --> 00:02:02.500
+Overlays and what they can do
+
+00:02:02.500 --> 00:02:35.700
+Simple overlay example - creating an overlay
+
+00:02:35.700 --> 00:03:10.940
+Adding properties
+
+00:03:10.940 --> 00:03:24.660
+Deleting an overlay
+
+00:03:24.660 --> 00:03:59.340
+Setting fonts the right way
+
+00:03:59.540 --> 00:04:12.580
+More properties
+
+00:04:12.580 --> 00:04:49.780
+Visibility
+
+00:04:49.780 --> 00:05:27.820
+Adding text
+
+00:05:27.820 --> 00:05:45.380
+Custom properties
+
+00:05:45.380 --> 00:06:36.100
+Notes on properties
+
+00:06:36.100 --> 00:08:17.680
+Improving C++ compiler output
+
+00:08:17.680 --> 00:08:30.240
+The problem with C++ error messages
+
+00:08:30.240 --> 00:08:47.520
+Many standard class templates have default arguments
+
+00:08:47.520 --> 00:09:20.960
+Some types are aliases for longer things, too
+
+00:09:20.960 --> 00:10:18.240
+Reporting type information accurately means long lines
+
+00:10:18.240 --> 00:11:49.320
+Emacs can help - Treat C++ type names as just another kind of balanced expression
+
+00:11:49.320 --> 00:12:22.400
+Add overlays to improve readability
+
+00:12:22.400 --> 00:12:59.500
+Create a minor mode that runs during compilation
+
+00:12:59.500 --> 00:14:16.100
+Parsing types as balanced expressions
+
+00:14:16.100 --> 00:14:52.260
+Indent and fill with overlays - Use ancient "pretty printing" algorithms"
+
+00:14:52.260 --> 00:15:14.520
+Overlays can mimic line breaks and indentation
+
+00:15:14.520 --> 00:17:12.660
+Hiding details - Marking depths with overlays
+
+00:17:12.660 --> 00:18:04.900
+Hiding to a target depth
+
+00:18:04.900 --> 00:20:10.220
+Demo
+
+00:20:10.220 --> 00:20:51.220
+Conclusion
diff --git a/2023/captions/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--main.vtt b/2023/captions/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--main.vtt
new file mode 100644
index 00000000..772f4b59
--- /dev/null
+++ b/2023/captions/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--main.vtt
@@ -0,0 +1,1319 @@
+WEBVTT captioned by sachac, checked by sachac
+
+NOTE Introduction
+
+00:00.000 --> 00:00:04.897
+Hi, I'm Jeff Trull, and today I'm going to talk to you
+
+00:00:04.898 --> 00:00:08.460
+about improving C++ compiler diagnostics
+
+00:08.460 --> 00:13.600
+using overlays and other features from Emacs.
+
+00:13.600 --> 00:15.840
+First an overview of my talk.
+
+00:15.840 --> 00:00:17.656
+I'm going to cover what overlays are
+
+00:00:17.657 --> 00:00:19.325
+and how you can use them in code,
+
+00:00:19.326 --> 00:00:21.478
+then I'm going to talk about C++
+
+00:00:21.479 --> 00:00:24.480
+and why its compiler errors can be so onerous.
+
+00:24.480 --> 00:00:26.750
+Finally, we'll take that information
+
+00:00:26.751 --> 00:00:28.447
+and build a new minor mode
+
+00:00:28.448 --> 00:00:33.560
+using overlays and other Emacs features.
+
+NOTE Overlays and what they can do
+
+00:33.560 --> 00:35.520
+First of all, overlays.
+
+00:35.520 --> 00:36.680
+What are they?
+
+00:36.680 --> 00:00:39.124
+They are objects consisting of a buffer range
+
+00:00:39.125 --> 00:00:40.400
+and a set of properties.
+
+00:40.400 --> 00:43.120
+That means that they cover a region in a buffer.
+
+00:43.120 --> 00:00:45.533
+The properties can be a certain set
+
+00:00:45.534 --> 00:00:47.344
+of special property names,
+
+00:00:47.345 --> 00:00:50.288
+in which case they can be used to cause
+
+00:00:50.289 --> 00:00:52.569
+special effects in the buffer,
+
+00:00:52.570 --> 00:00:55.660
+but they never change the underlying text.
+
+00:55.660 --> 00:59.900
+You can use them for things like hiding things.
+
+00:59.900 --> 00:01:02.886
+So, for example, overlays are working right now
+
+00:01:02.887 --> 00:01:04.660
+in this window. `org-present`,
+
+00:01:04.661 --> 00:01:07.595
+the technology I'm using for this presentation,
+
+00:01:07.596 --> 00:01:10.031
+is hiding the asterisk before every headline,
+
+00:01:10.032 --> 00:01:12.520
+as well as the things called emphasis markers;
+
+00:01:12.521 --> 00:01:16.269
+that is, those things that make things look
+
+00:01:16.270 --> 00:01:20.700
+monospaced for verbatim, or italic, or bold.
+
+01:20.700 --> 00:01:24.421
+The special characters we use to mark off those sections
+
+00:01:24.422 --> 00:01:28.940
+are also hidden by `org-present` using overlays.
+
+01:28.940 --> 00:01:30.601
+But those things are still in the buffer
+
+00:01:30.602 --> 00:01:31.980
+and they're still visible to code.
+
+01:31.980 --> 00:01:34.921
+So if I run this little snippet of code down here,
+
+00:01:34.922 --> 00:01:37.403
+it's going to go up to the headline "Overlays
+
+00:01:37.404 --> 00:01:40.051
+and what they can do," and it's going to tell us
+
+00:01:40.052 --> 00:01:41.540
+what's there in the buffer.
+
+01:41.540 --> 01:45.100
+Let's go down and run this.
+
+01:45.100 --> 00:01:48.957
+So according to this code, the contents of the buffer
+
+00:01:48.958 --> 00:01:51.990
+to the left of the headline is a star in a space,
+
+00:01:51.991 --> 00:01:55.204
+which means that even though we can't see that star,
+
+00:01:55.205 --> 00:01:58.220
+it's still there, because it's hidden by an overlay.
+
+01:58.220 --> 02:02.500
+And that's kind of the essence of what overlays are.
+
+NOTE Simple overlay example - creating an overlay
+
+02:02.500 --> 02:04.780
+Let's do a simple overlay example.
+
+02:04.780 --> 00:02:06.719
+We have some text on the right here,
+
+00:02:06.720 --> 00:02:09.340
+which is a famous poem by William Carlos Williams,
+
+02:09.340 --> 02:12.180
+which has been the subject of many memes.
+
+02:12.180 --> 02:17.860
+Let's create an overlay that covers it.
+
+02:17.860 --> 02:20.700
+I'll go down here and use this snippet of code here.
+
+02:20.700 --> 00:02:25.918
+We'll go up to the top, and we'll mark everything
+
+00:02:25.919 --> 00:02:29.540
+between `#+BEGIN_VERSE` and `#+END_VERSE`.
+
+02:29.540 --> 00:02:33.276
+You can see we've created an overlay
+
+00:02:33.277 --> 00:02:35.700
+from position 74 to 224.
+
+NOTE Adding properties
+
+02:35.700 --> 00:02:38.063
+Now we can take that overlay that we already created
+
+00:02:38.064 --> 00:02:41.211
+and add a property, in this case a `face` property,
+
+00:02:41.212 --> 00:02:43.540
+to change the appearance of the text.
+
+02:43.540 --> 00:02:46.279
+This is a poem, and it's currently using
+
+00:02:46.280 --> 00:02:48.083
+a face that is monospaced,
+
+00:02:48.084 --> 00:02:50.491
+and so it looks like a computer program,
+
+00:02:50.492 --> 00:02:51.900
+even though it's a poem.
+
+02:51.900 --> 00:02:54.585
+I think it would be nicer to use something
+
+00:02:54.586 --> 00:02:57.980
+with variable-width font, maybe with some serifs.
+
+02:57.980 --> 03:01.140
+So let's give that a try.
+
+03:01.140 --> 03:03.700
+Now you can see that the poem looks quite a bit different.
+
+03:03.700 --> 03:10.940
+It looks more like what we'd see in a book.
+
+NOTE Deleting an overlay
+
+03:10.940 --> 03:13.100
+We can also delete overlays.
+
+03:13.100 --> 03:15.140
+So I've named this one.
+
+03:15.140 --> 00:03:17.765
+So we can just go down and run `delete-overlay`
+
+00:03:17.766 --> 00:03:20.048
+and get rid of it, and it'll go back to
+
+00:03:20.049 --> 00:03:22.660
+the appearance it had before.
+
+03:22.660 --> 03:23.660
+And there it is.
+
+03:23.660 --> 03:24.660
+It's back to normal.
+
+NOTE Setting fonts the right way
+
+03:24.660 --> 00:03:28.473
+Now, if you're interested in changing all of the verses
+
+00:03:28.474 --> 00:03:31.108
+inside an Org Mode file to a different face
+
+00:03:31.109 --> 00:03:32.785
+or a different font family,
+
+00:03:32.786 --> 00:03:35.060
+this isn't the way you'd really do it.
+
+03:35.060 --> 03:37.520
+I'll just show you that real quick.
+
+03:37.520 --> 00:03:43.471
+The right way is probably to change the `org-verse` face,
+
+00:03:43.472 --> 00:03:48.868
+which is the face used for all of the verse blocks
+
+00:03:48.869 --> 00:03:51.620
+inside your Org Mode file.
+
+03:51.620 --> 03:55.100
+And so this is how you do it here:
+
+03:55.100 --> 03:56.100
+`face-remap-add-relative`.
+
+03:56.100 --> 03:58.340
+Let's give it a try.
+
+03:58.340 --> 03:59.340
+It worked!
+
+NOTE More properties
+
+03:59.540 --> 00:04:01.805
+There are more advanced things that you can do
+
+00:04:01.806 --> 00:04:03.300
+other than just changing fonts.
+
+04:03.300 --> 00:04:05.543
+There's a whole long list of them in the manual,
+
+00:04:05.544 --> 00:04:12.580
+but let's talk about the ones we're going to use today.
+
+NOTE Visibility
+
+04:12.580 --> 04:17.380
+You can make text invisible, just like `org-present` did.
+
+04:17.380 --> 04:21.820
+The simplest way is to set the `invisible` property to true,
+
+04:21.820 --> 04:24.500
+so here's a code snippet that will do that.
+
+04:24.500 --> 00:04:26.159
+What we're going to do is
+
+00:04:26.160 --> 00:04:28.966
+go and find the word "plums" inside the poem,
+
+00:04:28.967 --> 00:04:31.284
+and then we're going to make it invisible
+
+00:04:31.285 --> 00:04:33.436
+by creating an overlay that covers it,
+
+00:04:33.437 --> 00:04:36.820
+and then setting the invisible property to true.
+
+04:36.820 --> 04:37.940
+Boom!
+
+04:37.940 --> 04:38.940
+It's gone.
+
+04:38.940 --> 04:39.940
+We've eaten the plums.
+
+04:39.940 --> 04:42.180
+Visibility is a huge topic and very complicated.
+
+04:42.180 --> 04:44.220
+There are powerful mechanisms for using it.
+
+04:44.220 --> 00:04:46.626
+I suggest reading the manual
+
+00:04:46.627 --> 00:04:49.780
+if you'd like to know more about that.
+
+NOTE Adding text
+
+04:49.780 --> 00:04:52.117
+Another thing we can do with properties
+
+00:04:52.118 --> 00:04:54.980
+is to add text either before or after an overlay.
+
+04:54.980 --> 00:04:57.347
+Since we've made the word "plums" invisible,
+
+00:04:57.348 --> 00:05:00.574
+or anything that you make invisible in the buffer,
+
+00:05:00.575 --> 00:05:02.662
+if you add text then afterwards,
+
+00:05:02.663 --> 00:05:05.700
+it looks like you've replaced the original words
+
+05:05.700 --> 05:08.220
+with new words.
+
+05:08.220 --> 00:05:12.046
+So let's add a property, a `before-string` property,
+
+00:05:12.047 --> 00:05:14.193
+to the overlay that we used before
+
+00:05:14.194 --> 00:05:17.137
+to make it seem as though we're eating cherries
+
+00:05:17.138 --> 00:05:18.180
+instead of plums.
+
+05:18.180 --> 05:19.180
+Boom!
+
+05:19.580 --> 05:22.020
+There it is.
+
+05:22.020 --> 05:27.820
+So that's how you can replace words using overlays.
+
+NOTE Custom properties
+
+05:27.820 --> 00:05:29.760
+You can also have custom properties
+
+00:05:29.761 --> 00:05:31.700
+that you name and then use yourself.
+
+05:31.700 --> 05:35.320
+For example, you can use it to mark regions in the buffer.
+
+05:35.320 --> 00:05:38.008
+You can also use it to add information
+
+00:05:38.009 --> 00:05:41.180
+to regions in the buffer for your own tracking
+
+05:41.180 --> 05:45.380
+in a minor mode or something like that, which we will use.
+
+NOTE Notes on properties
+
+05:45.380 --> 05:49.620
+Finally, two notes on properties.
+
+05:49.620 --> 00:05:51.950
+We've been talking about overlay properties,
+
+00:05:51.951 --> 00:05:54.540
+but there's also something called text properties.
+
+05:54.540 --> 05:57.460
+Text properties are attached to text in a buffer.
+
+05:57.460 --> 06:00.900
+When you copy that text, the properties come along with it.
+
+06:00.900 --> 00:06:03.056
+If you modify the properties,
+
+00:06:03.057 --> 00:06:05.500
+the buffer is considered modified.
+
+06:05.500 --> 06:08.460
+Org Mode makes heavy use of text properties,
+
+06:08.460 --> 00:06:11.677
+as we can see by running this little code snippet here,
+
+00:06:11.678 --> 00:06:14.060
+which is going to tell us the properties
+
+06:14.060 --> 00:06:16.565
+and the string attached
+
+00:06:16.566 --> 00:06:20.740
+to the "Some poetry" headline on the right.
+
+06:20.740 --> 06:23.660
+There's also some controversy regarding performance.
+
+06:23.660 --> 00:06:25.520
+It may be that text properties
+
+00:06:25.521 --> 00:06:27.860
+perform better than overlay properties,
+
+06:27.860 --> 00:06:28.892
+so do some research
+
+00:06:28.893 --> 00:06:31.060
+if you're going to make heavy use of them.
+
+06:31.060 --> 06:36.100
+I prefer overlays because they're just easier to use.
+
+NOTE Improving C++ compiler output
+
+06:36.100 --> 06:37.540
+C++ compiler output.
+
+06:37.540 --> 00:06:41.170
+So my day job is C++ programmer,
+
+00:06:41.171 --> 00:06:46.560
+and although I've been an Emacser for many years,
+
+00:06:46.561 --> 00:06:52.860
+it can be a little bit of a chore dealing with errors.
+
+06:52.860 --> 00:06:55.680
+The error messages that come out of the compiler
+
+00:06:55.681 --> 00:06:57.580
+can be pretty hard to understand.
+
+06:57.580 --> 00:07:00.537
+This has often been a barrier,
+
+00:07:00.538 --> 00:07:04.640
+particularly for people who are new to C++.
+
+07:04.640 --> 07:09.040
+So let's see what that's like.
+
+07:09.040 --> 00:07:10.559
+I have an example
+
+00:07:10.560 --> 00:07:14.780
+which is generously supplied by Ben Deane of Intel.
+
+07:14.780 --> 00:07:17.082
+So let's see what it looks like
+
+00:07:17.083 --> 00:07:19.313
+when you compile a C++ program
+
+00:07:19.314 --> 00:07:24.400
+that has a difficult error in it.
+
+07:24.400 --> 07:27.400
+Okay.
+
+07:28.400 --> 07:31.400
+Okay.
+
+07:31.400 --> 07:35.680
+So you see we have a lot of fairly verbose messages.
+
+07:35.680 --> 07:39.400
+The most verbose one I think is probably here.
+
+07:39.400 --> 07:41.000
+This one here.
+
+07:41.000 --> 07:42.000
+These are pretty bad.
+
+07:42.000 --> 07:43.000
+I think there might be bigger ones.
+
+07:43.000 --> 00:07:43.720
+Oh, yeah. Here we go.
+
+00:07:43.721 --> 00:07:44.960
+Here's my favorite one.
+
+00:07:44.961 --> 00:07:51.063
+You can see... Let's look for specialization... Basically,
+
+00:07:51.064 --> 00:07:55.178
+this whole section of the buffer here,
+
+00:07:55.179 --> 00:07:58.228
+that is specifying the specific types
+
+00:07:58.229 --> 00:08:02.000
+that a function template was instantiated with.
+
+08:02.000 --> 08:04.000
+And it's a lot there.
+
+08:04.000 --> 00:08:05.473
+So if you're trying to figure out
+
+00:08:05.474 --> 00:08:06.817
+what's wrong with your program
+
+00:08:06.818 --> 00:08:08.884
+and you're looking at something like this,
+
+00:08:08.885 --> 00:08:11.000
+it can be really, really hard to understand.
+
+08:11.000 --> 08:12.000
+Okay.
+
+08:12.000 --> 08:17.680
+Back to our presentation.
+
+NOTE The problem with C++ error messages
+
+08:17.680 --> 00:08:20.063
+So it's often this way in C++
+
+00:08:20.064 --> 00:08:23.400
+because we compose types from other types.
+
+08:23.400 --> 00:08:26.216
+They can be long to begin with,
+
+00:08:26.217 --> 00:08:30.240
+but then a couple of other factors come into play.
+
+NOTE Many standard class templates have default arguments
+
+08:30.240 --> 08:33.280
+First of all, we can have default template arguments.
+
+08:33.280 --> 00:08:35.363
+These are arguments you didn't write,
+
+00:08:35.364 --> 00:08:37.008
+but that are implicitly there
+
+00:08:37.009 --> 00:08:38.325
+and can sometimes refer
+
+00:08:38.326 --> 00:08:40.300
+to the arguments that you did write,
+
+00:08:40.301 --> 00:08:42.440
+which causes them to get a bit bigger,
+
+00:08:42.441 --> 00:08:47.520
+such as these allocator arguments here and here.
+
+NOTE Some types are aliases for longer things, too
+
+08:47.520 --> 08:49.360
+Then there are type aliases.
+
+08:49.360 --> 00:08:54.014
+For example, `std::string` here expands to
+
+00:08:54.015 --> 00:08:58.320
+a type with three template arguments.
+
+08:58.320 --> 00:09:01.940
+So you can imagine, when we combine
+
+00:09:01.941 --> 00:09:04.733
+those two things together,
+
+00:09:04.734 --> 00:09:09.763
+our simple vector of maps from strings to ints
+
+00:09:09.764 --> 00:09:14.257
+becomes this humongous thing here, which...
+
+00:09:14.258 --> 00:09:17.360
+Let's run the comparison.
+
+09:18.360 --> 09:20.960
+Yeah.
+
+NOTE Reporting type information accurately means long lines
+
+09:20.960 --> 00:09:24.924
+So in summary, to properly understand an error
+
+00:09:24.925 --> 00:09:27.370
+when you're a C++ programmer
+
+00:09:27.371 --> 00:09:29.718
+requires knowing the exact types
+
+00:09:29.719 --> 00:09:32.280
+that were supplied to your function.
+
+09:32.280 --> 00:09:34.430
+And types are built recursively,
+
+00:09:34.431 --> 00:09:36.646
+and therefore the types can--
+
+00:09:36.647 --> 00:09:40.513
+the correct exact name for the type
+
+00:09:40.514 --> 00:09:42.776
+can just be really huge
+
+00:09:42.777 --> 00:09:46.360
+and have many levels and layers to it.
+
+09:46.360 --> 00:09:48.113
+So when I was trying to understand
+
+00:09:48.114 --> 00:09:49.466
+the things I'd done wrong,
+
+00:09:49.467 --> 00:09:52.401
+especially when I was a newer C++ programmer,
+
+00:09:52.402 --> 00:09:54.570
+but honestly still even recently,
+
+00:09:54.571 --> 00:09:57.440
+if I was having a really intractable problem,
+
+09:57.440 --> 00:10:00.123
+I would just copy the entire error message out,
+
+00:10:00.124 --> 00:10:01.735
+stick it in the scratch buffer,
+
+00:10:01.736 --> 00:10:03.649
+and then manually reformat it
+
+00:10:03.650 --> 00:10:05.563
+so I could see what it was telling me
+
+00:10:05.564 --> 00:10:07.261
+I'd actually called the function
+
+00:10:07.262 --> 00:10:09.320
+or whatever it was with, the exact type.
+
+10:09.320 --> 00:10:11.311
+I had to sit there
+
+00:10:11.312 --> 00:10:13.240
+and go through the whole thing.
+
+10:13.240 --> 10:15.240
+But there's a better way.
+
+10:15.240 --> 10:18.240
+Now, anyway.
+
+NOTE Emacs can help - Treat C++ type names as just another kind of balanced expression
+
+10:18.240 --> 10:23.960
+So what can Emacs do to help us with this problem?
+
+10:23.960 --> 00:10:28.870
+First of all, if you think about a type name,
+
+00:10:28.871 --> 00:10:33.080
+it's a lot like what we call S-expressions
+
+10:33.080 --> 10:35.480
+or balanced expressions.
+
+10:35.480 --> 10:38.400
+Lisp code itself is an S-expression.
+
+10:38.400 --> 00:10:41.464
+It's basically things with parentheses
+
+00:10:41.465 --> 00:10:44.214
+and little atoms or symbols in it,
+
+00:10:44.215 --> 00:10:46.520
+or strings or numbers.
+
+10:46.520 --> 00:10:50.231
+But parenthesized balanced expressions
+
+00:10:50.232 --> 00:10:55.800
+are things that Emacs was actually built to deal with.
+
+10:55.800 --> 00:10:58.944
+They were... I found an old manual from 1981,
+
+00:10:58.945 --> 00:11:02.160
+and the two major modes that they recommended
+
+11:02.160 --> 00:11:05.765
+or that they actually documented in the manual were
+
+00:11:05.766 --> 00:11:08.400
+one, assembly language, and two, Lisp.
+
+11:08.400 --> 00:11:10.652
+They mentioned that there were other modes,
+
+00:11:10.653 --> 00:11:12.700
+but they didn't say anything about them.
+
+11:12.700 --> 00:11:14.625
+So Lisp is something
+
+00:11:14.626 --> 00:11:17.440
+with a really long history with Emacs.
+
+11:17.440 --> 00:11:19.976
+Balanced expressions and manipulating them
+
+00:11:19.977 --> 00:11:21.434
+and doing them efficiently
+
+00:11:21.435 --> 00:11:24.155
+is just a thing that Emacs knows how to do,
+
+00:11:24.156 --> 00:11:25.640
+and Emacs is good at it.
+
+11:25.640 --> 00:11:27.705
+There's just a legacy
+
+00:11:27.706 --> 00:11:31.320
+of algorithms and functions for doing it.
+
+11:31.320 --> 00:11:33.182
+So we take types,
+
+00:11:33.183 --> 00:11:37.839
+and we take the angle brackets in the types,
+
+00:11:37.840 --> 00:11:40.840
+and we get the symbols right.
+
+11:40.840 --> 00:11:41.814
+Then we can treat them
+
+00:11:41.815 --> 00:11:44.312
+as though they were balanced expressions or S-expressions,
+
+00:11:44.313 --> 00:11:49.320
+the same kind that Emacs is really good at handling.
+
+NOTE Add overlays to improve readability
+
+11:49.320 --> 00:11:51.979
+Secondly, we can use overlays
+
+00:11:51.980 --> 00:11:55.260
+to improve the readability of errors.
+
+11:55.260 --> 00:11:58.012
+We can take long lines and break and indent them
+
+00:11:58.013 --> 00:12:00.160
+using `before-string`s, so the same thing
+
+12:00.200 --> 12:03.440
+I used to add "cherries" into the poem.
+
+12:03.440 --> 00:12:06.611
+We can use that to insert new lines
+
+00:12:06.612 --> 00:12:08.725
+followed by indentation
+
+00:12:08.726 --> 00:12:15.160
+and produce a much nicer-looking listing of a type.
+
+12:15.160 --> 00:12:19.641
+We can also use the `invisible` property
+
+00:12:19.642 --> 00:12:22.400
+to hide unwanted detail.
+
+NOTE Create a minor mode that runs during compilation
+
+12:22.400 --> 12:24.960
+Last of all, we can create a minor mode.
+
+12:24.960 --> 00:12:27.854
+When we're compiling things in Emacs,
+
+00:12:27.855 --> 00:12:30.140
+we often use `compilation-mode`.
+
+12:30.140 --> 00:12:32.097
+`compilation-mode` allows you to install
+
+00:12:32.098 --> 00:12:33.553
+compilation filters that run
+
+00:12:33.554 --> 00:12:36.434
+when the compiler is producing output,
+
+00:12:36.435 --> 00:12:39.980
+and at that time, then, we can add our overlays.
+
+12:39.980 --> 00:12:42.868
+We can also add in minor-mode commands
+
+00:12:42.869 --> 00:12:45.757
+that do whatever we want to the keymap.
+
+00:12:45.758 --> 00:12:48.321
+In this case, we're going to show and hide
+
+00:12:48.322 --> 00:12:50.176
+lower-level details interactively
+
+00:12:50.177 --> 00:12:53.906
+so that we can see a simplified version
+
+00:12:53.907 --> 00:12:59.500
+or a more detailed version of a type, depending on our needs.
+
+NOTE Parsing types as balanced expressions
+
+12:59.500 --> 13:03.980
+First of all, parsing types as balanced expressions.
+
+13:03.980 --> 00:13:05.686
+We need to be able to quickly locate
+
+00:13:05.687 --> 00:13:07.162
+the boundaries and the contents
+
+00:13:07.163 --> 00:13:08.500
+of parenthesized expressions,
+
+13:08.500 --> 13:12.100
+or in this case, expressions in angle brackets.
+
+13:12.100 --> 00:13:14.995
+We use a syntax table inside Emacs
+
+00:13:14.996 --> 00:13:18.800
+to allow movement functions like `forward-list`
+
+00:13:18.801 --> 00:13:21.100
+to jump between matching angle brackets.
+
+13:21.100 --> 13:23.460
+By default, they're just parentheses.
+
+13:23.460 --> 13:25.900
+First of all, let's look at our syntax table.
+
+13:25.900 --> 00:13:29.189
+We're going to add here syntax entries
+
+00:13:29.190 --> 00:13:33.900
+to handle angle brackets as though they were parentheses.
+
+13:33.900 --> 00:13:37.247
+Then we have a lot of types
+
+00:13:37.248 --> 00:13:42.980
+that have colons in them, and those are namespaces in C++.
+
+13:42.980 --> 00:13:45.766
+By default, Emacs does not recognize them
+
+00:13:45.767 --> 00:13:49.134
+as parts of symbols, so we're going to tell Emacs
+
+00:13:49.135 --> 00:13:52.839
+that a colon is something called a symbol constituent,
+
+00:13:52.840 --> 00:13:54.860
+that it can be part of a name.
+
+13:54.860 --> 00:13:57.613
+Once we do that, then we can use our functions
+
+00:13:57.614 --> 00:13:59.442
+like `forward-list`, `backward-word`,
+
+00:13:59.443 --> 00:14:03.288
+all of the navigation and movement functions that we have
+
+00:14:03.289 --> 00:14:06.623
+that do things, that do more complicated things
+
+00:14:06.624 --> 00:14:08.707
+like S-expressions and so on,
+
+00:14:08.708 --> 00:14:11.485
+can be used now with our angle brackets
+
+00:14:11.486 --> 00:14:16.100
+and inside of our types.
+
+NOTE Indent and fill with overlays - Use ancient "pretty printing" algorithms"
+
+14:16.100 --> 00:14:18.462
+The next thing we can do is
+
+00:14:18.463 --> 00:14:21.540
+perform indent and fill with overlays.
+
+14:21.540 --> 00:14:23.735
+We're going to use `before-string` properties
+
+00:14:23.736 --> 00:14:25.630
+to break lines and create indentation
+
+00:14:25.631 --> 00:14:28.900
+to make the output look a little better.
+
+14:28.900 --> 14:35.320
+Today, we fill mostly text and we indent mostly code.
+
+14:35.320 --> 00:14:37.307
+We fill text in order to prevent it
+
+00:14:37.308 --> 00:14:39.902
+from running off the side of the right margin,
+
+00:14:39.903 --> 00:14:43.940
+and we indent code to line up syntactic elements.
+
+14:43.940 --> 14:47.080
+Back in the day, they had algorithms that could do both.
+
+14:47.080 --> 14:52.260
+Those are what we're going to leverage.
+
+NOTE Overlays can mimic line breaks and indentation
+
+14:52.260 --> 00:14:54.582
+We can use the `before-string` property
+
+00:14:54.583 --> 00:14:57.760
+to insert a new line in the correct number of spaces
+
+14:57.760 --> 15:00.240
+to emulate indentation.
+
+15:00.240 --> 00:15:03.525
+As a simplified example, here's some code
+
+00:15:03.526 --> 00:15:07.280
+that will indent 4 upon each open angle bracket.
+
+15:07.280 --> 15:14.520
+Let's give it a try.
+
+NOTE Hiding details - Marking depths with overlays
+
+15:14.520 --> 15:18.280
+The next thing we're going to need to do is hide details.
+
+15:18.280 --> 00:15:22.688
+So we have nested types, and the user is going to want to
+
+00:15:22.689 --> 00:15:27.371
+be able to reveal lower-level or hide lower-level parts
+
+00:15:27.372 --> 00:15:30.131
+of the nested type interactively
+
+00:15:30.132 --> 00:15:35.480
+once we've already reformatted the error messages.
+
+15:35.480 --> 15:40.440
+Let's see how we can do that using invisible properties.
+
+15:40.440 --> 00:15:43.992
+The first thing we're going to do is
+
+00:15:43.993 --> 00:15:46.680
+mark depths within the type.
+
+15:46.680 --> 00:15:49.328
+When we're originally analyzing and formatting
+
+00:15:49.329 --> 00:15:51.920
+and doing the indentation and the line breaks,
+
+15:51.920 --> 00:15:55.071
+at the same time, we're going to go through
+
+00:15:55.072 --> 00:15:58.817
+and mark the nested levels inside the type names,
+
+00:15:58.818 --> 00:16:00.840
+just as this diagram shows.
+
+16:00.840 --> 00:16:03.573
+So depth 1, for example, will be everything
+
+00:16:03.574 --> 00:16:06.120
+inside the first level of angle brackets.
+
+16:06.120 --> 00:16:09.038
+Depth 2 will be everything inside the second level,
+
+00:16:09.039 --> 00:16:09.600
+and so on.
+
+16:09.760 --> 00:16:12.070
+And then later on, when the users request it,
+
+00:16:12.071 --> 00:16:16.303
+we can go and look at the depth that they've selected
+
+00:16:16.304 --> 00:16:19.360
+and then mark those sections invisible.
+
+16:19.360 --> 16:20.520
+Let's see how that might work.
+
+16:20.520 --> 00:16:24.022
+First of all, let's delete the overlays
+
+00:16:24.023 --> 00:16:28.400
+that we already have that created the indentation.
+
+16:28.400 --> 00:16:32.419
+Now we're going to go and do that marking
+
+00:16:32.420 --> 00:16:35.740
+with the custom depth properties here.
+
+16:35.740 --> 00:16:38.760
+To prove that I didn't pull a fast one,
+
+00:16:38.761 --> 00:16:42.082
+let's go and see what `describe-char` tells us
+
+00:16:42.083 --> 00:16:44.660
+about the depths inside here.
+
+16:44.660 --> 16:46.460
+Let's start here.
+
+16:46.460 --> 16:52.820
+Okay, so inside this part here, `std::string`,
+
+16:52.820 --> 16:54.980
+There are two overlays.
+
+16:54.980 --> 00:16:57.780
+One of them is of depth 1, and the other is of depth 2,
+
+00:16:57.781 --> 00:17:00.601
+which makes sense, because depth 1 is going to be
+
+00:17:00.602 --> 00:17:02.011
+from about here to here,
+
+00:17:02.012 --> 00:17:07.660
+and depth 2 is going to be from about here to this area.
+
+17:07.660 --> 00:17:10.829
+So it's reasonable that there should be two,
+
+00:17:10.830 --> 00:17:12.660
+and that's what we expect.
+
+NOTE Hiding to a target depth
+
+17:12.660 --> 00:17:17.353
+Now that we've marked the nested types with their depths,
+
+00:17:17.354 --> 00:17:21.380
+let's experiment with hiding details.
+
+17:21.380 --> 00:17:26.773
+This fragment of code takes a user-supplied depth,
+
+00:17:26.774 --> 00:17:29.085
+in this case 2, and will hide,
+
+00:17:29.086 --> 00:17:30.875
+based on those markings
+
+00:17:30.876 --> 00:17:33.932
+that we've already made on the overlays,
+
+00:17:33.933 --> 00:17:36.020
+the custom depth properties.
+
+17:36.020 --> 17:40.020
+We'll take those and apply your requested level of detail.
+
+17:40.020 --> 17:42.020
+So let's try it out.
+
+17:42.020 --> 17:43.020
+Depth 2.
+
+17:43.020 --> 00:17:46.005
+All right, that hid everything under the `std::map`,
+
+00:17:46.006 --> 00:17:47.260
+so the deepest level.
+
+17:47.260 --> 17:52.140
+If we make it 1, we should get a level higher than that.
+
+17:52.140 --> 17:54.540
+So now level 1 and below are hidden.
+
+17:54.540 --> 17:59.660
+Now if we put it back to 3, it should reveal everything.
+
+17:59.660 --> 18:04.900
+So that's what we're going to use in our minor mode.
+
+NOTE Demo
+
+18:04.900 --> 18:05.900
+Let's have a demo.
+
+18:05.900 --> 00:18:08.538
+We're going to revisit the initial example
+
+00:18:08.539 --> 00:18:10.380
+with the minor mode installed.
+
+18:10.380 --> 00:18:12.101
+Now we're going to have a compilation filter
+
+00:18:12.102 --> 00:18:13.593
+that will run on every chunk of output
+
+00:18:13.594 --> 00:18:15.780
+produced by the compiler.
+
+18:15.780 --> 00:18:17.849
+It's going to add those overlays
+
+00:18:17.850 --> 00:18:20.420
+with the line breaks and the indentation.
+
+18:20.420 --> 00:18:22.206
+It's also going to add overlays
+
+00:18:22.207 --> 00:18:23.880
+that mark up the nested types
+
+00:18:23.881 --> 00:18:26.220
+with the depths for each region.
+
+18:26.220 --> 18:31.580
+Let's add the hook for `tspew-mode`.
+
+18:31.580 --> 18:37.220
+And now we can compile again.
+
+18:38.220 --> 00:18:41.503
+All right, we can already see
+
+00:18:41.504 --> 00:18:47.195
+that these things are formatted a little bit better
+
+00:18:47.196 --> 00:18:49.180
+than they were before.
+
+18:49.180 --> 18:50.180
+They're not all on one line.
+
+18:50.180 --> 18:53.580
+Things are getting kind of lined up here.
+
+18:53.580 --> 19:05.620
+Here's a good example.
+
+19:05.620 --> 00:19:08.637
+And here's our big ugly one from before
+
+00:19:08.638 --> 00:19:10.900
+with all the characters in it.
+
+19:10.900 --> 19:14.500
+Let's try hiding some of this information.
+
+19:14.500 --> 00:19:17.431
+We'll just slowly decrease the level of detail
+
+00:19:17.432 --> 00:19:19.740
+and you can see how it works.
+
+19:19.740 --> 00:19:22.333
+Over here, where there's these ellipses
+
+00:19:22.334 --> 00:19:25.460
+next to string constant, the "..." there,
+
+19:25.460 --> 00:19:30.386
+that's where we are starting to hide information
+
+00:19:30.387 --> 00:19:32.900
+and go to the next level.
+
+19:32.900 --> 19:36.460
+Hiding more, hiding more, hiding more.
+
+19:36.460 --> 19:38.220
+Now we can go back and start adding it back.
+
+19:38.220 --> 00:19:42.736
+You can see here now we just have about four layers,
+
+00:19:42.737 --> 00:19:45.540
+which is a lot easier to understand.
+
+19:45.540 --> 00:19:47.733
+And if we start understanding what it is
+
+00:19:47.734 --> 00:19:52.180
+and we need more detail, we can just increase detail again.
+
+19:52.180 --> 00:19:55.402
+And every time we increase or decrease detail,
+
+00:19:55.403 --> 00:19:58.900
+it reformats so it still stays kind of consolidated
+
+19:58.900 --> 19:59.900
+and nice looking.
+
+19:59.900 --> 20:01.980
+Let's increase it a little bit more.
+
+20:02.060 --> 20:04.540
+Okay, so you can see how that worked.
+
+20:04.540 --> 20:08.340
+Let's go back to our presentation.
+
+20:08.340 --> 20:10.220
+All right.
+
+NOTE Conclusion
+
+20:10.220 --> 00:20:12.996
+In conclusion, we saw how we could solve
+
+00:20:12.997 --> 00:20:15.367
+a real problem for C++ programmers
+
+00:20:15.368 --> 00:20:18.534
+by combining several Emacs features: overlays,
+
+00:20:18.535 --> 00:20:20.489
+compilation mode extensions,
+
+00:20:20.490 --> 00:20:25.700
+and balanced expression navigation using syntax tables.
+
+20:25.700 --> 00:20:27.978
+Emacs is often compared unfavorably
+
+00:20:27.979 --> 00:20:31.460
+to newer IDEs and editors with slicker user interfaces.
+
+20:32.220 --> 00:20:36.386
+What Emacs has that they don't is powerful abstractions,
+
+00:20:36.387 --> 00:20:38.862
+tons of libraries, and decades of work
+
+00:20:38.863 --> 00:20:42.100
+by some of the luminaries in the field of software.
+
+20:42.100 --> 00:20:45.343
+I think that this project would have been much harder to do
+
+00:20:45.344 --> 00:20:48.020
+in a prettier but less powerful environment.
+
+20:48.020 --> 20:50.860
+In short, there's plenty of hope for Emacs.
+
+20:50.860 --> 20:51.220
+Thank you.
diff --git a/2023/captions/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--answers.vtt b/2023/captions/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--answers.vtt
new file mode 100644
index 00000000..0fc2d8ef
--- /dev/null
+++ b/2023/captions/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--answers.vtt
@@ -0,0 +1,767 @@
+WEBVTT
+
+
+00:00:08.620 --> 00:00:09.120
+[Speaker 0]: And I think we are live.
+
+00:00:09.620 --> 00:00:09.960
+Hello again, everyone.
+
+00:00:10.940 --> 00:00:11.440
+And hi, Lovro. How are you doing?
+
+00:00:15.339 --> 00:00:15.839
+[Speaker 1]: Just a second. Should I join the other room?
+
+00:00:18.460 --> 00:00:18.740
+[Speaker 0]: Oh, no, no, you can stay here.
+
+00:00:20.860 --> 00:00:21.360
+[Speaker 1]: I can stay in the backstage.
+
+00:00:24.140 --> 00:00:24.320
+[Speaker 0]: Everything is fine. I don't think you are
+
+00:00:25.520 --> 00:00:25.760
+technically in the backstage right now you're
+
+00:00:26.750 --> 00:00:26.820
+just in Big Blue Button with us.
+
+00:00:30.040 --> 00:00:30.160
+[Speaker 1]: Oh thanks. Oh because I have 2 of them open I
+
+00:00:30.920 --> 00:00:31.280
+thought there were 2 different rooms.
+
+00:00:32.720 --> 00:00:33.220
+1 is the backstage and the other,
+
+00:00:38.239 --> 00:00:38.360
+[Speaker 0]: whichever, I can hear you and so can the
+
+00:00:39.840 --> 00:00:40.080
+stream, so don't worry too much about which
+
+00:00:41.140 --> 00:00:41.220
+is the backstage and which is the front page.
+
+00:00:41.540 --> 00:00:41.760
+[Speaker 1]: I have no idea. Well, great,
+
+00:00:43.660 --> 00:00:43.940
+great. Okay, yeah. Yeah,
+
+00:00:45.280 --> 00:00:45.480
+I'm doing great, just to answer your
+
+00:00:45.480 --> 00:00:45.980
+question.
+
+00:00:47.379 --> 00:00:47.640
+[Speaker 0]: Okay, great, great, Okay,
+
+00:00:49.900 --> 00:00:50.280
+well splendid. So, I've pasted a link again
+
+00:00:51.520 --> 00:00:51.760
+on IRC if you want to ask your questions,
+
+00:00:53.000 --> 00:00:53.200
+and I'd invite you to do so,
+
+00:00:54.620 --> 00:00:55.040
+because we have about 9 minutes of laborious
+
+00:00:56.580 --> 00:00:57.080
+time to answer as many of them as possible.
+
+00:00:58.360 --> 00:00:58.860
+And I'm going to start with the first 1.
+
+00:01:01.100 --> 00:01:01.600
+This looks great and was very well-presented.
+
+00:01:03.240 --> 00:01:03.420
+Do you have plans to upstream this
+
+00:01:04.239 --> 00:01:04.739
+functionality into Emacs?
+
+00:01:08.000 --> 00:01:08.200
+[Speaker 1]: That's a good idea. That's something we
+
+00:01:08.860 --> 00:01:09.360
+thought about as well.
+
+00:01:11.640 --> 00:01:12.140
+Currently, we haven't really contacted anyone
+
+00:01:16.160 --> 00:01:16.660
+to do this. Also, the current implementation,
+
+00:01:19.760 --> 00:01:20.080
+so as I mentioned in the presentation towards
+
+00:01:22.120 --> 00:01:22.300
+the end, so we use a little bit of advice to
+
+00:01:24.240 --> 00:01:24.520
+sort of patch some functionality of query
+
+00:01:26.479 --> 00:01:26.600
+replace because not everything was easy to
+
+00:01:28.680 --> 00:01:29.180
+implement. The core functionality luckily
+
+00:01:32.220 --> 00:01:32.340
+was, But there's a couple of fixes we need to
+
+00:01:34.200 --> 00:01:34.340
+apply to the message function in order to
+
+00:01:36.380 --> 00:01:36.820
+display a nice message in the echo buffer
+
+00:01:39.140 --> 00:01:39.320
+because this doesn't happen on its own when
+
+00:01:41.100 --> 00:01:41.580
+we're using this trick with this big regex
+
+00:01:45.360 --> 00:01:45.720
+and whatnot. So I don't think that the code
+
+00:01:47.080 --> 00:01:47.580
+as it is would be upstreamable.
+
+00:01:50.600 --> 00:01:51.100
+I think probably if we wanted to upstream it,
+
+00:01:54.140 --> 00:01:54.280
+we would have to do some proper work on
+
+00:01:57.180 --> 00:01:57.340
+refactoring query place itself in order to
+
+00:01:58.780 --> 00:01:58.979
+integrate all of this functionality just
+
+00:02:01.880 --> 00:02:02.380
+directly without any patching left and right.
+
+00:02:05.680 --> 00:02:06.120
+But yeah, definitely something I've given
+
+00:02:10.080 --> 00:02:10.259
+some thought, but so far no progress on it.
+
+00:02:11.640 --> 00:02:11.980
+I haven't actually started doing anything
+
+00:02:12.240 --> 00:02:12.740
+about it.
+
+00:02:17.440 --> 00:02:17.780
+[Speaker 0]: Right, So I'm curious now,
+
+00:02:19.640 --> 00:02:19.900
+you developed the feature and then you moved
+
+00:02:21.600 --> 00:02:21.740
+on to the presentation or did you want to do
+
+00:02:23.080 --> 00:02:23.200
+a presentation for EmacsConf and then you
+
+00:02:24.140 --> 00:02:24.640
+worked on something like this?
+
+00:02:26.360 --> 00:02:26.860
+Which was it first, the chicken or the egg?
+
+00:02:28.220 --> 00:02:28.720
+[Speaker 1]: Yeah, it was the former.
+
+00:02:31.320 --> 00:02:31.820
+So this is a problem I've been aware of for,
+
+00:02:33.340 --> 00:02:33.840
+I mean, probably a couple of years.
+
+00:02:35.280 --> 00:02:35.640
+And, you know, I talked to my friend
+
+00:02:37.600 --> 00:02:37.840
+Valentino about it and we had like a little
+
+00:02:39.240 --> 00:02:39.740
+discussion, you know, how would we do this?
+
+00:02:41.880 --> 00:02:42.380
+And then I remember back when I was
+
+00:02:44.140 --> 00:02:44.260
+researching about this problem and the
+
+00:02:45.100 --> 00:02:45.600
+various Emacs Lisp solutions,
+
+00:02:47.780 --> 00:02:47.960
+all I could find were these solutions that
+
+00:02:49.400 --> 00:02:49.600
+would, you know, just shy away from
+
+00:02:50.640 --> 00:02:50.920
+implementing the RegEx case,
+
+00:02:52.340 --> 00:02:52.840
+which is a really complicated 1.
+
+00:02:54.720 --> 00:02:55.220
+And, after some discussion,
+
+00:02:56.140 --> 00:02:56.580
+my friend and I decided,
+
+00:02:58.080 --> 00:02:58.320
+okay, what the hell? Let's,
+
+00:02:59.280 --> 00:02:59.480
+let's try and implement this.
+
+00:03:01.800 --> 00:03:02.300
+How hard can it be? And yeah,
+
+00:03:03.280 --> 00:03:03.780
+basically in 1 afternoon,
+
+00:03:06.300 --> 00:03:06.500
+the idea, our little trick and the whole
+
+00:03:07.440 --> 00:03:07.940
+implementation was born.
+
+00:03:11.480 --> 00:03:11.680
+And then I think that was maybe around a year
+
+00:03:12.540 --> 00:03:13.040
+ago, maybe a bit less.
+
+00:03:14.480 --> 00:03:14.680
+And then through the months,
+
+00:03:15.920 --> 00:03:16.420
+we just thought, oh yeah,
+
+00:03:17.420 --> 00:03:17.640
+maybe we could present this,
+
+00:03:18.960 --> 00:03:19.200
+maybe it would be interesting for people to
+
+00:03:20.660 --> 00:03:20.920
+see and that's how we came up with the idea
+
+00:03:22.440 --> 00:03:22.940
+to present at EmacsConf.
+
+00:03:27.900 --> 00:03:28.180
+[Speaker 0]: Okay, great. I don't see other people asking
+
+00:03:30.240 --> 00:03:30.540
+questions. So people, it's nice if I ask
+
+00:03:31.100 --> 00:03:31.600
+questions but you know,
+
+00:03:33.160 --> 00:03:33.340
+the point is kind of for you to ask the
+
+00:03:35.140 --> 00:03:35.280
+questions. I see someone who's joined us on
+
+00:03:36.780 --> 00:03:37.120
+BBB. Peter, would you like to ask a question
+
+00:03:41.720 --> 00:03:41.980
+maybe? Otherwise I see another person writing
+
+00:03:43.040 --> 00:03:43.260
+a question on the pad,
+
+00:03:44.540 --> 00:03:44.700
+so we can either move for this 1.
+
+00:03:46.640 --> 00:03:46.800
+So I'll leave Peter to figure out if they
+
+00:03:47.680 --> 00:03:47.960
+want to ask a question.
+
+00:03:49.160 --> 00:03:49.660
+So I'm moving on to the next question.
+
+00:03:57.900 --> 00:03:58.180
+[Speaker 2]: I can jump in. That's a really well done talk
+
+00:04:01.780 --> 00:04:02.120
+and you really clearly laid out the problem
+
+00:04:03.000 --> 00:04:03.500
+and the solution there.
+
+00:04:05.600 --> 00:04:05.740
+While I was watching it,
+
+00:04:10.740 --> 00:04:11.040
+I was thinking maybe the nice way to name it
+
+00:04:13.140 --> 00:04:13.440
+is just to name it query replace and query
+
+00:04:15.700 --> 00:04:16.019
+replace regext, you know,
+
+00:04:18.480 --> 00:04:18.980
+overloading the original functions and then
+
+00:04:23.000 --> 00:04:23.460
+using a prefix number,
+
+00:04:26.880 --> 00:04:27.380
+like control number to indicate how many
+
+00:04:29.280 --> 00:04:29.780
+replacements you're going to do.
+
+00:04:31.640 --> 00:04:32.140
+But maybe that doesn't work with the
+
+00:04:36.680 --> 00:04:37.120
+recursive editing stuff,
+
+00:04:37.960 --> 00:04:38.180
+which I don't use much.
+
+00:04:40.440 --> 00:04:40.940
+So I don't have a good method.
+
+00:04:43.260 --> 00:04:43.760
+[Speaker 1]: I think it would definitely work.
+
+00:04:46.260 --> 00:04:46.440
+Well, the question is,
+
+00:04:47.880 --> 00:04:48.380
+if we just overwrite the definitions,
+
+00:04:51.700 --> 00:04:52.200
+then, oh, well, I guess we could do that.
+
+00:04:53.410 --> 00:04:53.560
+Nothing stops us. I mean,
+
+00:04:54.800 --> 00:04:54.880
+we're in Emacs. We could definitely do that.
+
+00:04:55.680 --> 00:04:55.920
+And then if you give, like,
+
+00:04:57.540 --> 00:04:57.720
+a prefix argument, maybe it just drops you
+
+00:04:59.060 --> 00:04:59.560
+back to the original query replace.
+
+00:05:01.000 --> 00:05:01.160
+Yeah, that's an idea. For now,
+
+00:05:02.440 --> 00:05:02.920
+we decided, OK, let's just keep everything
+
+00:05:05.000 --> 00:05:05.240
+explicitly separate just to avoid any
+
+00:05:05.240 --> 00:05:05.740
+confusion.
+
+00:05:09.220 --> 00:05:09.400
+[Speaker 2]: Yeah, I think that's the right thing to do
+
+00:05:11.820 --> 00:05:12.320
+for now. What I'm actually thinking is that
+
+00:05:13.620 --> 00:05:13.940
+when you do query replace,
+
+00:05:15.600 --> 00:05:16.100
+it just does the regular query replace.
+
+00:05:17.220 --> 00:05:17.440
+And if you're going to do,
+
+00:05:20.140 --> 00:05:20.640
+say, 3 parallel replacements,
+
+00:05:21.340 --> 00:05:21.840
+then you do Control-U,
+
+00:05:25.580 --> 00:05:26.080
+query replace. Sorry. Control-3,
+
+00:05:28.580 --> 00:05:28.860
+query replace. And then that way you don't
+
+00:05:33.400 --> 00:05:33.760
+have The final prompt that you give nothing
+
+00:05:33.760 --> 00:05:34.260
+to.
+
+00:05:36.880 --> 00:05:37.380
+[Speaker 1]: Exactly, that's actually not a bad idea.
+
+00:05:39.720 --> 00:05:40.080
+I think I like that. Yeah,
+
+00:05:40.800 --> 00:05:41.300
+that's not a bad idea.
+
+00:05:44.760 --> 00:05:44.920
+[Speaker 0]: It's always a quagmire whether to ask for an
+
+00:05:47.080 --> 00:05:47.580
+argument or to use the universal argument.
+
+00:05:51.060 --> 00:05:51.380
+When you're working with Emacs and especially
+
+00:05:52.640 --> 00:05:52.960
+the UX side of things in the package,
+
+00:05:54.900 --> 00:05:55.020
+it's so complicated to figure out which 1 you
+
+00:05:56.880 --> 00:05:57.380
+want to do. In this particular case,
+
+00:06:00.340 --> 00:06:00.840
+I think it's the better option to use the
+
+00:06:02.800 --> 00:06:03.120
+universal argument or any kind of argument
+
+00:06:04.040 --> 00:06:04.540
+with a control number before.
+
+00:06:10.240 --> 00:06:10.440
+All right, we have about 3 more minutes of
+
+00:06:12.440 --> 00:06:12.720
+questions. Peter, if you don't mind,
+
+00:06:14.440 --> 00:06:14.940
+I'll keep reading the questions in the chat.
+
+00:06:19.440 --> 00:06:19.940
+Did you use pair programming while developing
+
+00:06:21.100 --> 00:06:21.600
+it, it being a package,
+
+00:06:22.440 --> 00:06:22.940
+or did you work independently,
+
+00:06:24.840 --> 00:06:25.340
+alternating and reviewing with Valentino?
+
+00:06:28.320 --> 00:06:28.440
+[Speaker 1]: It was definitely a pair programming kind of
+
+00:06:29.440 --> 00:06:29.940
+thing. So if I remember correctly,
+
+00:06:32.760 --> 00:06:33.260
+I was sitting at the computer and Valentino
+
+00:06:36.020 --> 00:06:36.520
+was in front of a whiteboard and we were just
+
+00:06:38.400 --> 00:06:38.900
+dissecting this regex and a bunch of examples
+
+00:06:41.680 --> 00:06:41.820
+and trying to get these capture groups and
+
+00:06:44.240 --> 00:06:44.440
+stuff that we have to remap internally to get
+
+00:06:46.560 --> 00:06:46.880
+these offsets right and avoid off by 1 error
+
+00:06:48.160 --> 00:06:48.420
+and stuff like that. So yeah,
+
+00:06:49.280 --> 00:06:49.780
+definitely a team effort.
+
+00:06:53.660 --> 00:06:54.160
+[Speaker 0]: Okay, great. Moving on to the next question.
+
+00:06:55.240 --> 00:06:55.740
+What is your background in programming?
+
+00:06:57.440 --> 00:06:57.620
+Was it difficult to implement following the
+
+00:06:59.700 --> 00:07:00.040
+same API and architecture as what is already
+
+00:07:00.200 --> 00:07:00.700
+in Emacs?
+
+00:07:05.400 --> 00:07:05.680
+[Speaker 1]: So maybe just a quick back story.
+
+00:07:06.960 --> 00:07:07.440
+Both Valentino and I are actually PhD
+
+00:07:08.300 --> 00:07:08.680
+students in computer science,
+
+00:07:09.960 --> 00:07:10.460
+and we literally share an office.
+
+00:07:12.960 --> 00:07:13.180
+So that's how we even started talking about
+
+00:07:14.480 --> 00:07:14.900
+this whole thing. And we both use Emacs,
+
+00:07:18.380 --> 00:07:18.640
+of course. But I don't think this was too
+
+00:07:20.740 --> 00:07:20.880
+hard to implement because luckily all of the
+
+00:07:22.300 --> 00:07:22.540
+interactive functionality like this
+
+00:07:23.600 --> 00:07:24.100
+complicated undo, skipping,
+
+00:07:25.680 --> 00:07:26.180
+execute until the end and so on,
+
+00:07:27.980 --> 00:07:28.380
+all of this is really just already provided
+
+00:07:29.860 --> 00:07:30.360
+by the Emacs queer replace implementation.
+
+00:07:34.160 --> 00:07:34.360
+So sort of what we do is we just invoke it as
+
+00:07:36.080 --> 00:07:36.220
+a function and delegate to it.
+
+00:07:37.800 --> 00:07:38.000
+And we came up with this clever trick to
+
+00:07:42.380 --> 00:07:42.560
+basically delegate this multi-replacement to
+
+00:07:45.160 --> 00:07:45.660
+this 1 single function that's already there.
+
+00:07:47.980 --> 00:07:48.480
+So it wasn't too complicated.
+
+00:07:54.780 --> 00:07:54.960
+[Speaker 0]: Alright. And we have about 2 minutes of time
+
+00:07:55.560 --> 00:07:56.040
+for the last question.
+
+00:07:58.040 --> 00:07:58.260
+What did you learn about Emacs programming or
+
+00:08:00.020 --> 00:08:00.100
+programming in general while working on this
+
+00:08:02.320 --> 00:08:02.820
+project? A very wide question for me.
+
+00:08:05.840 --> 00:08:06.340
+[Speaker 1]: Maybe 1 thing I would like to add to the
+
+00:08:09.220 --> 00:08:09.440
+previous just answer is I don't want to say
+
+00:08:10.160 --> 00:08:10.660
+like you know we're PhDs,
+
+00:08:12.780 --> 00:08:13.260
+a PhD is required for this or anything,
+
+00:08:15.800 --> 00:08:15.920
+not at all. It's mostly just for a little bit
+
+00:08:19.220 --> 00:08:19.720
+of context, but I think obviously,
+
+00:08:20.640 --> 00:08:21.020
+even if you're not a PhD,
+
+00:08:22.360 --> 00:08:22.540
+I mean, you don't even require like
+
+00:08:24.960 --> 00:08:25.460
+university, you know, education or anything.
+
+00:08:27.540 --> 00:08:28.040
+It wasn't overly difficult to implement,
+
+00:08:30.680 --> 00:08:31.080
+sort of just read some code that's already
+
+00:08:33.539 --> 00:08:34.039
+there and you know follow what you see and
+
+00:08:35.860 --> 00:08:36.020
+poke Emacs a little bit and do a little bit
+
+00:08:38.140 --> 00:08:38.320
+of debugging on the internals and you can
+
+00:08:40.280 --> 00:08:40.440
+definitely get it. So definitely not a
+
+00:08:42.240 --> 00:08:42.400
+prerequisite to have a degree or anything to
+
+00:08:45.480 --> 00:08:45.600
+do any of this stuff. Okay so Coming back to
+
+00:08:48.420 --> 00:08:48.560
+[Speaker 0]: Yeah, I'm going to amend a little bit the
+
+00:08:49.680 --> 00:08:49.960
+question because we only have 1 minute.
+
+00:08:51.600 --> 00:08:52.100
+So just 1 thing in 10 seconds,
+
+00:08:52.490 --> 00:08:52.540
+[Speaker 2]: what did you
+
+00:08:53.040 --> 00:08:53.540
+[Speaker 0]: learn about this?
+
+00:08:54.240 --> 00:08:54.380
+[Speaker 1]: your last question. What did I learn about
+
+00:08:56.420 --> 00:08:56.920
+Emacs programming? That Emacs is so flexible
+
+00:08:59.160 --> 00:08:59.360
+that I can go and I can patch literally its
+
+00:09:01.480 --> 00:09:01.880
+message function. And that is how we achieve
+
+00:09:03.680 --> 00:09:04.180
+the nice message function in the echo buffer.
+
+00:09:06.720 --> 00:09:06.980
+So I can literally go and patch something as
+
+00:09:07.560 --> 00:09:08.060
+crucial as message.
+
+00:09:09.920 --> 00:09:10.420
+[Speaker 0]: It's great. That's a lovely 1.
+
+00:09:12.260 --> 00:09:12.380
+And I think, again, we're going back to the
+
+00:09:13.660 --> 00:09:13.780
+philosophy of Emacs. Everything is
+
+00:09:15.200 --> 00:09:15.520
+programmable and even changing the message
+
+00:09:16.640 --> 00:09:16.800
+function is great. All right,
+
+00:09:17.440 --> 00:09:17.640
+well, thank you so much,
+
+00:09:19.540 --> 00:09:19.660
+Lovro, and thanks to Valentino as well,
+
+00:09:21.820 --> 00:09:21.960
+who's not here, but who's contributed to this
+
+00:09:23.900 --> 00:09:24.400
+talk. Any last word?
+
+00:09:29.540 --> 00:09:29.800
+[Speaker 1]: Well, just if you're gonna build any
+
+00:09:31.980 --> 00:09:32.160
+solutions, try to make them as foolproof and
+
+00:09:34.360 --> 00:09:34.540
+as 100% as possible so we get more of these
+
+00:09:36.280 --> 00:09:36.420
+goodies that are nice and robust for
+
+00:09:37.000 --> 00:09:37.500
+everybody to use.
+
+00:09:39.400 --> 00:09:39.620
+[Speaker 0]: All right, lovely. Well,
+
+00:09:40.240 --> 00:09:40.580
+thank you so much, Lover,
+
+00:09:41.940 --> 00:09:42.380
+for your presentation and your answer.
+
+00:09:44.340 --> 00:09:44.640
+We'll be moving on to the next talk in just
+
+00:09:47.260 --> 00:09:47.720
+about 5 seconds, and I'll see you after.
+
+00:09:47.900 --> 00:09:48.400
+Bye, Lovro!
+
+00:09:49.760 --> 00:09:50.260
+[Speaker 1]: Yep, bye bye!
+
+00:10:01.440 --> 00:10:01.560
+[Speaker 0]: So I'm just waiting to make sure my VNC is a
+
+00:10:02.840 --> 00:10:03.000
+little slow. Okay, we switch to the next
+
+00:10:03.480 --> 00:10:03.740
+talk. All right, Lover,
+
+00:10:04.960 --> 00:10:05.460
+I'm gonna need to go get ready now.
+
+00:10:09.060 --> 00:10:09.560
+Yep. Bye-bye, and thanks for your talk.
+
+00:10:11.160 --> 00:10:11.660
+[Speaker 1]: Bye, thank you, see you.
+
+00:10:15.060 --> 00:10:15.560
+[Speaker 2]: You
diff --git a/2023/captions/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main--chapters.vtt b/2023/captions/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main--chapters.vtt
new file mode 100644
index 00000000..359a1228
--- /dev/null
+++ b/2023/captions/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main--chapters.vtt
@@ -0,0 +1,49 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:23.340
+Introduction
+
+00:00:23.440 --> 00:01:12.260
+Problem: Goal
+
+00:01:12.360 --> 00:01:34.100
+Problem: Naive Multi-pass
+
+00:01:34.200 --> 00:01:57.620
+Problem: Clever Multi-pass
+
+00:01:57.720 --> 00:03:03.340
+Problem: Terminology
+
+00:03:04.440 --> 00:03:54.820
+Problem: Scaling Multi-pass
+
+00:03:55.920 --> 00:04:17.140
+Solution: Single-pass
+
+00:04:18.240 --> 00:06:28.180
+Solution: Existing
+
+00:06:29.080 --> 00:06:54.140
+Solution: query-replace-parallel
+
+00:06:55.240 --> 00:07:51.020
+Demonstration: Swap
+
+00:07:53.970 --> 00:08:46.100
+Demonstration: LaTeX
+
+00:08:48.700 --> 00:09:31.220
+Demonstration: Regex
+
+00:09:36.320 --> 00:10:52.340
+Demonstration: Order
+
+00:10:54.440 --> 00:12:26.620
+Demonstration: Fun
+
+00:12:29.120 --> 00:14:17.140
+Implementation
+
+00:14:18.740 --> 00:14:45.560
+End
diff --git a/2023/captions/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main.vtt b/2023/captions/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main.vtt
new file mode 100644
index 00000000..ba813a81
--- /dev/null
+++ b/2023/captions/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main.vtt
@@ -0,0 +1,972 @@
+WEBVTT captioned by Lovro
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:01.540
+Hi everyone!
+
+00:00:01.640 --> 00:00:04.540
+Welcome to our talk on Parallel Text Replacement.
+
+00:00:04.640 --> 00:00:06.940
+My name is Lovro, and I'll be telling you about an
+
+00:00:07.040 --> 00:00:09.260
+interesting problem that my friend Valentino and I
+
+00:00:09.360 --> 00:00:11.660
+set out to solve one afternoon.
+
+00:00:11.760 --> 00:00:13.580
+We will describe the problem, take a look at some
+
+00:00:13.680 --> 00:00:16.780
+of the existing work and then present our solution.
+
+00:00:16.880 --> 00:00:18.980
+Afterwards, we will show some demos and conclude
+
+00:00:19.080 --> 00:00:21.420
+with a quick overview of the implementation.
+
+00:00:21.520 --> 00:00:23.340
+Let's get straight into it!
+
+NOTE Problem: Goal
+
+00:00:23.440 --> 00:00:25.700
+Here is a problem that most of us have dealt with
+
+00:00:25.800 --> 00:00:26.940
+at some point.
+
+00:00:27.040 --> 00:00:29.780
+Assume we have a piece of code such as the following.
+
+00:00:29.880 --> 00:00:32.420
+We use a code example here, but in general what we're
+
+00:00:32.520 --> 00:00:35.500
+about to discuss can be applied to any piece of text.
+
+00:00:35.600 --> 00:00:37.540
+After a bit of thinking, we decide that the names of
+
+00:00:37.640 --> 00:00:39.860
+the two variables, "foo" and "bar", should actually be
+
+00:00:39.960 --> 00:00:40.780
+swapped.
+
+00:00:40.880 --> 00:00:43.460
+That is, "foo" should be replaced with "bar", and "bar"
+
+00:00:43.560 --> 00:00:44.940
+should be replaced with "foo".
+
+00:00:45.040 --> 00:00:48.980
+The question is: what is a good way to achieve this?
+
+00:00:49.080 --> 00:00:51.660
+We could perform the edits manually if the code is
+
+00:00:51.760 --> 00:00:53.780
+small enough, and we might even be done reasonably
+
+00:00:53.880 --> 00:00:54.620
+quickly.
+
+00:00:54.720 --> 00:00:56.620
+However, consider two things.
+
+00:00:56.720 --> 00:00:58.860
+Imagine the usual case where there's just too much
+
+00:00:58.960 --> 00:01:00.660
+code to edit by hand.
+
+00:01:00.760 --> 00:01:03.580
+We have no other option than to automate the task.
+
+00:01:03.680 --> 00:01:06.020
+More importantly though, we have a whole programmable
+
+00:01:06.120 --> 00:01:08.180
+text editor right at our fingertips.
+
+00:01:08.280 --> 00:01:10.180
+We should object to doing things that the computer
+
+00:01:10.280 --> 00:01:12.260
+can do for us.
+
+NOTE Problem: Naive Multi-pass
+
+00:01:12.360 --> 00:01:15.460
+So, one way to automate it is by using our old friend
+
+00:01:15.560 --> 00:01:18.940
+query-replace (M-%) multiple times in a sequence.
+
+00:01:19.040 --> 00:01:22.140
+We first do a pass where we replace "foo" with "bar",
+
+00:01:22.240 --> 00:01:25.540
+then we do another pass where we replace "bar" with "foo".
+
+00:01:25.640 --> 00:01:26.860
+But that's clearly not right.
+
+00:01:26.960 --> 00:01:29.060
+We all know that this naive multi-pass approach
+
+00:01:29.160 --> 00:01:31.460
+doesn't work because it results in interference
+
+00:01:31.560 --> 00:01:34.100
+between the two replacements.
+
+NOTE Problem: Clever Multi-pass
+
+00:01:34.200 --> 00:01:36.700
+Instead, we have to be a bit more clever.
+
+00:01:36.800 --> 00:01:39.740
+We should first replace "foo" with a temporary string,
+
+00:01:39.840 --> 00:01:42.020
+in this case "oof", that we will call a "token".
+
+00:01:42.120 --> 00:01:45.380
+To avoid interference, we must be careful to ensure
+
+00:01:45.480 --> 00:01:48.020
+that the token does not contain whatever we're about
+
+00:01:48.120 --> 00:01:49.500
+to replace next.
+
+00:01:49.600 --> 00:01:52.620
+Then we do a second pass to replace "bar" with "foo",
+
+00:01:52.720 --> 00:01:55.980
+and finally a third pass to replace the token with "bar".
+
+00:01:56.080 --> 00:01:57.620
+This gives us the result we want.
+
+NOTE Problem: Terminology
+
+00:01:57.720 --> 00:02:01.820
+Putting the implementation aside for a moment, this style
+
+00:02:01.920 --> 00:02:05.500
+of text replacement, where we replace multiple sources
+
+00:02:05.600 --> 00:02:08.940
+with their targets, without running into interference
+
+00:02:09.040 --> 00:02:11.660
+issues between replacement pairs, is what we call
+
+00:02:11.760 --> 00:02:12.740
+a "parallel replacement".
+
+00:02:12.840 --> 00:02:16.260
+This is the essence of the problem we're trying to solve.
+
+00:02:16.360 --> 00:02:18.580
+The examples with swapping that we've shown so far
+
+00:02:18.680 --> 00:02:21.220
+are really just one of the many use cases that are
+
+00:02:21.320 --> 00:02:23.740
+supported by a general parallel replacement utility.
+
+00:02:25.040 --> 00:02:28.660
+To avoid confusion, let us clarify that the word "parallel"
+
+00:02:28.760 --> 00:02:31.660
+is not in reference to hardware parallelization, but
+
+00:02:31.760 --> 00:02:34.780
+rather comes from analogy with the Lisp let operator,
+
+00:02:34.880 --> 00:02:38.060
+where the bindings of variables are performed in parallel,
+
+00:02:38.160 --> 00:02:40.100
+rather than sequentially as in let*.
+
+00:02:40.200 --> 00:02:43.580
+Parallel in this context means that none of the bindings
+
+00:02:43.680 --> 00:02:46.780
+are in scope within any of the initial value forms.
+
+00:02:46.880 --> 00:02:50.100
+In other words, just like a let's initialization form
+
+00:02:50.200 --> 00:02:53.620
+cannot refer to any of the earlier bindings, a
+
+00:02:53.720 --> 00:02:56.660
+replacement pair's source should not be able to replace
+
+00:02:56.760 --> 00:03:00.100
+the previously substituted targets of any other pair.
+
+00:03:00.200 --> 00:03:03.340
+This is what we mean by "no interference".
+
+NOTE Problem: Scaling Multi-pass
+
+00:03:04.440 --> 00:03:07.900
+However, manually invoking multiple carefully chosen
+
+00:03:08.000 --> 00:03:11.420
+query-replace commands gets old very quickly.
+
+00:03:11.520 --> 00:03:14.100
+Say we scaled up the problem and wanted to perform n
+
+00:03:14.200 --> 00:03:18.220
+swaps instead of just two, e.g. to swap, or rather,
+
+00:03:18.320 --> 00:03:22.060
+rotate, "foo" to "bar", "bar" to "baz", "baz" to "quux"
+
+00:03:22.160 --> 00:03:23.700
+and "quux" to "foo".
+
+00:03:23.800 --> 00:03:26.260
+We would first have to perform n - 1 additional
+
+00:03:26.360 --> 00:03:29.140
+replacements to introduce the necessary tokens,
+
+00:03:29.240 --> 00:03:32.140
+effectively doubling the number of steps.
+
+00:03:32.240 --> 00:03:34.700
+Even if we tried to automate this, think about what
+
+00:03:34.800 --> 00:03:37.580
+tokens the code would have to generate if we had no
+
+00:03:37.680 --> 00:03:40.420
+prior knowledge of the replacement pairs given by the
+
+00:03:40.520 --> 00:03:41.460
+user.
+
+00:03:41.560 --> 00:03:44.060
+We would have to program defensively and use long
+
+00:03:44.160 --> 00:03:47.460
+randomly-generated strings that, one, hopefully do
+
+00:03:47.560 --> 00:03:50.180
+not interfere with any of the replacement pairs,
+
+00:03:50.280 --> 00:03:53.380
+and two, might slow down the search if they're overly long.
+
+00:03:53.480 --> 00:03:54.820
+Can we do better?
+
+NOTE Solution: Single-pass
+
+00:03:55.920 --> 00:03:56.740
+Yes we can!
+
+00:03:56.840 --> 00:03:59.580
+We can actually perform just a single pass.
+
+00:03:59.680 --> 00:04:02.180
+The trick is to alternate between the replacement
+
+00:04:02.280 --> 00:04:05.900
+pairs, replacing whichever source occurs the earliest,
+
+00:04:06.000 --> 00:04:08.340
+and making sure to continue scanning after the end
+
+00:04:08.440 --> 00:04:12.180
+of the substituted target in order to avoid interference.
+
+00:04:12.280 --> 00:04:14.420
+This interleaving of replacements is not something
+
+00:04:14.520 --> 00:04:17.140
+that's easy to do by hand with query-replace.
+
+NOTE Solution: Existing
+
+00:04:18.240 --> 00:04:20.860
+Since this is Emacs we're talking about, of course
+
+00:04:20.960 --> 00:04:23.460
+there already exist solutions that implement this idea.
+
+00:04:23.560 --> 00:04:25.860
+Here are few that we could find.
+
+00:04:25.960 --> 00:04:28.700
+The EmacsWiki has a page dedicated to this problem.
+
+00:04:28.800 --> 00:04:31.460
+Stack Overflow has an old post where a couple of
+
+00:04:31.560 --> 00:04:33.860
+users provided their solutions.
+
+00:04:33.960 --> 00:04:36.820
+Mastering Emacs also gives a method along with other
+
+00:04:36.920 --> 00:04:38.900
+interesting query-replace-regexp (C-M-%) patterns.
+
+00:04:39.000 --> 00:04:42.260
+More recently, Tony Zorman made a blogpost providing
+
+00:04:42.360 --> 00:04:44.980
+a solution with an interface based on query-replace.
+
+00:04:45.080 --> 00:04:47.540
+I encourage you to take a look at these solutions if
+
+00:04:47.640 --> 00:04:48.940
+you're interested in the details.
+
+00:04:50.040 --> 00:04:52.940
+But while a step in the right direction, these solutions
+
+00:04:53.040 --> 00:04:55.340
+are not satisfactory because they all lack one or
+
+00:04:55.440 --> 00:04:56.820
+more of the following.
+
+00:04:56.920 --> 00:04:59.900
+One, they are not completely automated and require
+
+00:05:00.000 --> 00:05:02.500
+the user to come up with a relatively complicated
+
+00:05:02.600 --> 00:05:05.380
+and verbose query-replace-regexp invocation.
+
+00:05:06.080 --> 00:05:08.940
+Two, they are restricted to performing only 2-element
+
+00:05:09.040 --> 00:05:11.780
+swaps rather than general parallel replacements.
+
+00:05:12.680 --> 00:05:15.060
+Three, they don't provide any sort of interactivity
+
+00:05:15.160 --> 00:05:17.820
+during replacement and instead perform it in one shot.
+
+00:05:18.620 --> 00:05:21.300
+Four, they don't attempt to integrate with the familiar
+
+00:05:21.400 --> 00:05:24.900
+query-replace interface, which supports skipping, undo,
+
+00:05:25.000 --> 00:05:28.340
+history and more advanced features like Lisp expressions
+
+00:05:28.440 --> 00:05:29.900
+and recursive query edits.
+
+00:05:30.700 --> 00:05:33.700
+Most importantly however, five, none of them were
+
+00:05:33.800 --> 00:05:36.380
+designed with regular expressions in mind and instead
+
+00:05:36.480 --> 00:05:38.460
+only ever consider literal strings.
+
+00:05:39.560 --> 00:05:43.060
+In fact, the only one that comes close is the
+
+00:05:43.160 --> 00:05:46.420
+half-automated solution that invokes query-replace-regexp
+
+00:05:46.520 --> 00:05:48.100
+with a specially crafted replacement.
+
+00:05:48.800 --> 00:05:51.660
+As an example, here's how you would use this technique
+
+00:05:51.760 --> 00:05:54.340
+to perform a 3-element parallel regex replacement.
+
+00:05:54.440 --> 00:05:57.740
+It uses the backslash-comma Lisp expression feature
+
+00:05:57.840 --> 00:06:01.180
+in order to choose the appropriate target to substitute.
+
+00:06:01.280 --> 00:06:03.700
+Aside from being very clumsy and tedious to write out,
+
+00:06:03.800 --> 00:06:06.860
+this approach makes it really hard to use more complex
+
+00:06:06.960 --> 00:06:09.260
+regular expressions that make use of capture groups
+
+00:06:09.360 --> 00:06:10.600
+themselves.
+
+00:06:10.800 --> 00:06:12.200
+This was the biggest limitation that we wanted
+
+00:06:12.200 --> 00:06:15.020
+to get rid of and the main motivation for our work.
+
+00:06:15.720 --> 00:06:19.820
+So, as an alternative to the existing zoo of 80% solutions,
+
+00:06:19.920 --> 00:06:24.140
+we aim to provide a 100% solution, one that handles
+
+00:06:24.240 --> 00:06:27.020
+regexes and consolidates all of the existing ideas
+
+00:06:27.120 --> 00:06:28.180
+into a single package.
+
+NOTE Solution: query-replace-parallel
+
+00:06:29.080 --> 00:06:31.260
+We call it query-replace-parallel.
+
+00:06:31.360 --> 00:06:34.060
+The package is free and open-source and can currently
+
+00:06:34.160 --> 00:06:37.300
+be found on GitHub under hokomo/query-replace-parallel.
+
+00:06:37.400 --> 00:06:40.140
+The name is not yet finalized and we're open to any
+
+00:06:40.240 --> 00:06:41.170
+suggestions.
+
+00:06:41.503 --> 00:06:43.180
+We hope to get it published on an Elisp
+
+00:06:43.280 --> 00:06:45.780
+package archive in the near future, but for now you
+
+00:06:45.880 --> 00:06:48.300
+can just download and load the main Elisp file manually.
+
+00:06:48.900 --> 00:06:51.300
+With all of that said, let's go through a few demos
+
+00:06:51.400 --> 00:06:54.140
+to illustrate some use cases and see how to use the package.
+
+NOTE Demonstration: Swap
+
+00:06:55.240 --> 00:06:57.460
+Our first demo is a simple swap, like the one we
+
+00:06:57.560 --> 00:06:59.140
+showed at the beginning of the presentation.
+
+00:06:59.240 --> 00:07:02.060
+This chunk of text is actually one of the tests
+
+00:07:02.160 --> 00:07:03.140
+from our package's code.
+
+00:07:03.840 --> 00:07:06.420
+Assuming we have loaded the package, we can execute
+
+00:07:06.520 --> 00:07:09.580
+the query-replace-parallel command, a parallel version
+
+00:07:09.680 --> 00:07:11.220
+of the standard query-replace.
+
+00:07:11.320 --> 00:07:13.940
+This command works with literal strings and will
+
+00:07:14.040 --> 00:07:15.900
+ask for each source and target in turn.
+
+00:07:16.000 --> 00:07:21.260
+Our goal is to replace "foo" with "bar"
+
+00:07:21.360 --> 00:07:22.180
+and "bar" with "foo".
+
+00:07:24.680 --> 00:07:26.940
+After inputting our replacements, we terminate the
+
+00:07:27.040 --> 00:07:29.060
+prompt by pressing enter with empty input.
+
+00:07:29.860 --> 00:07:32.500
+At this point, everything functions the same as in
+
+00:07:32.600 --> 00:07:34.380
+a standard query-replace invocation.
+
+00:07:35.280 --> 00:07:37.300
+The echo area shows the match and the replacement
+
+00:07:37.400 --> 00:07:38.603
+we're about to make.
+
+00:07:38.703 --> 00:07:40.220
+We can perform replacements,
+
+00:07:43.920 --> 00:07:46.403
+undo them,
+
+00:07:46.503 --> 00:07:49.103
+skip them,
+
+00:07:49.203 --> 00:07:50.140
+execute them until the end,
+
+00:07:50.240 --> 00:07:51.020
+and so on.
+
+NOTE Demonstration: LaTeX
+
+00:07:53.970 --> 00:07:56.180
+The second demo shows our first regex use case.
+
+00:07:56.280 --> 00:07:58.620
+Imagine we have the following LaTeX code.
+
+00:07:58.720 --> 00:08:01.380
+We realize that we haven't been completely consistent
+
+00:08:01.480 --> 00:08:03.940
+in our use and naming of macros, so we decide to
+
+00:08:04.040 --> 00:08:04.660
+fix the problem.
+
+00:08:05.536 --> 00:08:08.300
+This time we execute query-replace-parallel-regexp
+
+00:08:08.400 --> 00:08:10.900
+because we want to work with regex instead of literal
+
+00:08:11.000 --> 00:08:11.500
+strings.
+
+00:08:12.000 --> 00:08:13.420
+We want to achieve two things.
+
+00:08:13.520 --> 00:08:16.860
+First, we want to wrap all usages of the variable n
+
+00:08:16.960 --> 00:08:17.980
+with the natvar macro.
+
+00:08:18.080 --> 00:08:20.940
+Using the backslash-less-than and blackslash-greater-than
+
+00:08:21.040 --> 00:08:23.740
+constructs allows us to only match letters n not
+
+00:08:23.840 --> 00:08:25.260
+appearing as part of a larger word.
+
+00:08:25.360 --> 00:08:29.460
+Second, we want to rename natvar to intvar because
+
+00:08:29.560 --> 00:08:32.180
+the variables a, b and c are integers and not natural
+
+00:08:32.280 --> 00:08:32.700
+numbers.
+
+00:08:33.300 --> 00:08:35.660
+We enter empty input to terminate the prompt and can
+
+00:08:35.760 --> 00:08:37.180
+now perform the replacements.
+
+00:08:42.280 --> 00:08:44.380
+There we go, the fixes are done and we didn't have
+
+00:08:44.480 --> 00:08:46.100
+to think about in which order to apply them.
+
+NOTE Demonstration: Regex
+
+00:08:48.700 --> 00:08:50.900
+We now take a look at a more complicated regex
+
+00:08:51.000 --> 00:08:53.580
+example to demonstrate that even advanced query-replace
+
+00:08:53.680 --> 00:08:54.300
+features are supported.
+
+00:08:55.100 --> 00:08:57.340
+Each "foo" and "bar" in this example is followed by
+
+00:08:57.440 --> 00:08:57.740
+a number.
+
+00:08:58.440 --> 00:09:01.280
+The goal is to not only swap "foo" and "bar", but
+
+00:09:01.380 --> 00:09:03.620
+also increase or decrease the corresponding number.
+
+00:09:03.720 --> 00:09:06.500
+We first match "foo" and capture the number that
+
+00:09:06.600 --> 00:09:07.100
+follows it.
+
+00:09:07.200 --> 00:09:09.900
+For the target, we make use of the backslash-comma
+
+00:09:10.000 --> 00:09:12.500
+Lisp expression feature in order to replace the
+
+00:09:12.600 --> 00:09:14.940
+match with "bar" followed by the number's successor.
+
+00:09:15.540 --> 00:09:17.540
+We do the same thing for "bar", except that we
+
+00:09:17.640 --> 00:09:19.140
+replace the number with its predecessor.
+
+00:09:27.040 --> 00:09:29.020
+Performing the replacements, we can see how each
+
+00:09:29.120 --> 00:09:31.220
+number is incremented or decremented appropriately.
+
+NOTE Demonstration: Order
+
+00:09:36.320 --> 00:09:38.660
+We haven't covered it explicitly so some of you may
+
+00:09:38.760 --> 00:09:41.260
+be wondering how parallel replacement deals with
+
+00:09:41.360 --> 00:09:43.740
+overlapping matches and whether the order of the
+
+00:09:43.840 --> 00:09:45.380
+replacement pairs is significant.
+
+00:09:45.480 --> 00:09:47.860
+This demo will clarify the exact behavior.
+
+00:09:48.960 --> 00:09:51.700
+The first example has the sources "watch" and "stopwatch".
+
+00:09:57.500 --> 00:10:00.500
+Conceptually, the matches overlap, but the rule is
+
+00:10:00.600 --> 00:10:02.900
+that matches are always processed earliest first,
+
+00:10:03.000 --> 00:10:05.940
+regardless of their length or the ordering of the pairs.
+
+00:10:06.040 --> 00:10:08.980
+Therefore it is "stopwatch" that gets replaced,
+
+00:10:09.080 --> 00:10:10.940
+and not its substring "watch".
+
+00:10:16.040 --> 00:10:19.540
+The second example uses the sources "watch" and "watchword".
+
+00:10:19.640 --> 00:10:22.540
+Both of the matches now conceptually start at the same
+
+00:10:22.640 --> 00:10:23.020
+position.
+
+00:10:23.720 --> 00:10:26.300
+In situations like these the order of the pairs does
+
+00:10:26.400 --> 00:10:29.460
+matter, and ties are broken by prefering the pair that
+
+00:10:29.560 --> 00:10:32.180
+was entered first, which is behavior that is inherited
+
+00:10:32.280 --> 00:10:33.460
+from the Elisp regex engine.
+
+00:10:34.460 --> 00:10:37.380
+So, the substring "watch" in "watchword" is what gets
+
+00:10:37.480 --> 00:10:38.460
+replaced in this case.
+
+00:10:39.460 --> 00:10:41.740
+Situations where the order of the pairs is significant
+
+00:10:41.840 --> 00:10:44.740
+are not very common however, so the user generally
+
+00:10:44.840 --> 00:10:46.660
+doesn't have to worry about this edge case.
+
+00:10:46.760 --> 00:10:49.860
+The order only matters when two or more sources
+
+00:10:49.960 --> 00:10:52.340
+share the same prefix, as in this example.
+
+NOTE Demonstration: Fun
+
+00:10:54.440 --> 00:10:56.860
+The final demo tests the limits of the package and
+
+00:10:56.960 --> 00:10:59.660
+shows that it fully integrates with query-replace.
+
+00:10:59.760 --> 00:11:02.940
+It is really just for fun and can even serve as a
+
+00:11:03.040 --> 00:11:04.140
+small Emacs brainteaser.
+
+00:11:04.240 --> 00:11:05.460
+See if you can keep up!
+
+00:11:06.360 --> 00:11:09.060
+We open a directory and enter Writable Dired mode
+
+00:11:09.160 --> 00:11:11.780
+in order to rename the directories "foo" and "bar".
+
+00:11:11.880 --> 00:11:14.660
+Instead of doing it quickly by hand, we decide to
+
+00:11:14.760 --> 00:11:17.260
+show off and use query-replace-parallel-regexp.
+
+00:11:17.360 --> 00:11:19.900
+We enter our pairs and make use of the
+
+00:11:20.000 --> 00:11:22.380
+backslash-question-mark query edit feature.
+
+00:11:25.080 --> 00:11:27.820
+Now whenever we perform a replacement, the query
+
+00:11:27.920 --> 00:11:30.740
+edit makes Emacs stop and prompt us for additional
+
+00:11:30.840 --> 00:11:32.180
+input to use as the target.
+
+00:11:36.680 --> 00:11:39.140
+We confirm the renames and now enter the "bar-lib"
+
+00:11:39.240 --> 00:11:41.900
+directory in order to perform the same kind of
+
+00:11:42.000 --> 00:11:43.900
+replacement on "baz" and "quux".
+
+00:11:44.500 --> 00:11:47.820
+Rather than save time, we decide to be extra lazy
+
+00:11:47.920 --> 00:11:48.820
+and take the long route.
+
+00:11:48.920 --> 00:11:52.220
+We recall the first pair and initiate a recursive
+
+00:11:52.320 --> 00:11:54.460
+invocation of query-replace-parallel-regexp.
+
+00:11:54.560 --> 00:11:57.020
+We are now replacing the replacement.
+
+00:12:01.020 --> 00:12:04.540
+We apply our fixes and then do the same thing again
+
+00:12:04.640 --> 00:12:05.870
+with the second pair.
+
+00:12:05.970 --> 00:12:07.500
+Recall and recurse.
+
+00:12:16.300 --> 00:12:19.860
+We confirm the prompt and finally rename our directories.
+
+00:12:25.360 --> 00:12:26.620
+Wow, that really paid off.
+
+NOTE Implementation
+
+00:12:29.120 --> 00:12:31.380
+Before we finish, a few quick words about the
+
+00:12:31.480 --> 00:12:32.900
+implementation for the curious.
+
+00:12:33.300 --> 00:12:36.380
+Both query-replace-parallel and query-replace-parallel-regexp
+
+00:12:36.480 --> 00:12:39.140
+delegate to the complex perform-replace function
+
+00:12:39.240 --> 00:12:41.780
+which is the workhorse of query-replace's interactive
+
+00:12:41.880 --> 00:12:42.420
+mechanism.
+
+00:12:43.120 --> 00:12:45.420
+The way we achieve multiple interleaved replacements
+
+00:12:45.520 --> 00:12:49.020
+is by providing perform-replace with a big "matcher regex"
+
+00:12:49.120 --> 00:12:50.380
+and a special replacement function.
+
+00:12:50.480 --> 00:12:54.300
+Essentially, a complex parallel replacement like this
+
+00:12:54.400 --> 00:12:57.420
+is transformed into a standard replacement like this.
+
+00:12:57.520 --> 00:13:00.100
+This is similar to the trick shown earlier in the
+
+00:13:00.200 --> 00:13:00.780
+presentation.
+
+00:13:00.880 --> 00:13:03.820
+Each source is put in its own capture group to allow
+
+00:13:03.920 --> 00:13:06.340
+the replacement function to determine which one matched
+
+00:13:06.440 --> 00:13:08.380
+and return the appropriate target.
+
+00:13:08.980 --> 00:13:11.580
+However, we now take care to support arbitrary
+
+00:13:11.680 --> 00:13:13.380
+regular expressions as sources.
+
+00:13:13.480 --> 00:13:16.980
+We achieve this by converting each source regex into
+
+00:13:17.080 --> 00:13:19.820
+an equivalent one for which we can guarantee that its
+
+00:13:19.920 --> 00:13:22.820
+capture groups will not clash with our matcher regex.
+
+00:13:22.920 --> 00:13:25.900
+Information about this conversion is stored, and
+
+00:13:26.000 --> 00:13:28.220
+once the replacement function is called it has
+
+00:13:28.320 --> 00:13:30.260
+enough data to apply the replacement from the
+
+00:13:30.360 --> 00:13:32.020
+viewpoint of the original regex.
+
+00:13:32.720 --> 00:13:34.900
+The regex transformation is reliable because it
+
+00:13:35.000 --> 00:13:38.420
+uses the rx library, allowing us to treat regexes
+
+00:13:38.520 --> 00:13:41.940
+as s-expressions and avoid any nasty manual parsing.
+
+00:13:42.640 --> 00:13:46.540
+In fact, rx itself is based on one of Olin Shivers'
+
+00:13:46.640 --> 00:13:48.336
+100% solutions:
+
+00:13:48.436 --> 00:13:51.220
+SRE, or the S-expression regex notation.
+
+00:13:51.320 --> 00:13:54.340
+We all stand on the shoulders of many giants, so
+
+00:13:54.440 --> 00:13:56.500
+let's strive to design good solutions that we can
+
+00:13:56.600 --> 00:13:59.140
+all benefit from, many years into the future!
+
+00:13:59.240 --> 00:14:02.900
+Finally, because query-replace's core is not completely
+
+00:14:03.000 --> 00:14:06.060
+customizable, we did have to sprinkle in some advice
+
+00:14:06.160 --> 00:14:07.500
+to get certain things working.
+
+00:14:07.600 --> 00:14:11.060
+This concerns only minor cosmetic fixes and not the
+
+00:14:11.160 --> 00:14:13.940
+core replacement functionality, but we have nontheless
+
+00:14:14.040 --> 00:14:16.580
+tried to do it in the simplest and least intrusive way
+
+00:14:16.680 --> 00:14:17.140
+possible.
+
+NOTE End
+
+00:14:18.740 --> 00:14:21.580
+In conclusion, go download and play with the package.
+
+00:14:21.680 --> 00:14:24.460
+Even if you're not performing overlapping replacements,
+
+00:14:24.560 --> 00:14:26.780
+you can still use query-replace-parallel for the
+
+00:14:26.880 --> 00:14:29.620
+peace of mind knowing that things won't go wrong if
+
+00:14:29.720 --> 00:14:31.860
+you perform more than one replacement at a time.
+
+00:14:32.460 --> 00:14:34.540
+Feel free to let us know about any interesting or
+
+00:14:34.640 --> 00:14:37.460
+crazy use cases you might come up with, as well as
+
+00:14:37.560 --> 00:14:40.540
+improvements or bugs that make it only a 99% solution.
+
+00:14:40.640 --> 00:14:45.560
+Thanks for listening and have a great EmacsConf!
diff --git a/2023/captions/emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--original.vtt b/2023/captions/emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--original.vtt
new file mode 100644
index 00000000..8622eb0d
--- /dev/null
+++ b/2023/captions/emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--original.vtt
@@ -0,0 +1,1973 @@
+WEBVTT
+
+
+00:00:07.299 --> 00:00:07.799
+I think it's still going up.
+
+00:00:11.200 --> 00:00:11.700
+All right. I think we should be live now.
+
+00:00:12.900 --> 00:00:13.139
+So hi, everyone. And hi,
+
+00:00:13.780 --> 00:00:14.280
+Michael. How are you doing?
+
+00:00:18.080 --> 00:00:18.340
+Hi. Hello, EmacsConf. I'm pretty excited to
+
+00:00:22.420 --> 00:00:22.800
+be live at this year's EmacsConf and getting
+
+00:00:25.640 --> 00:00:25.960
+a chance to talk about my favorite program or
+
+00:00:29.140 --> 00:00:29.439
+our favorite program. Well,
+
+00:00:30.439 --> 00:00:30.820
+yeah, I'm doing pretty fine,
+
+00:00:32.680 --> 00:00:32.900
+and I'm excited. Well,
+
+00:00:35.020 --> 00:00:35.520
+so are we. So without further ado,
+
+00:00:37.640 --> 00:00:37.760
+the floor is yours. Present for as much as
+
+00:00:39.200 --> 00:00:39.700
+you want. We've already discussed the timings
+
+00:00:41.380 --> 00:00:41.880
+so I'll let you on your own.
+
+00:00:44.059 --> 00:00:44.380
+Okay so let's get started.
+
+00:00:46.560 --> 00:00:46.760
+The topic of the talk is the browser in a
+
+00:00:49.920 --> 00:00:50.420
+buffer or Poltus, a periodic web weaver.
+
+00:00:53.540 --> 00:00:53.700
+Poltus is a kind of spider and the name of
+
+00:00:55.680 --> 00:00:56.180
+the project I'm going to show you.
+
+00:01:01.400 --> 00:01:01.900
+But first let's set the stage for this
+
+00:01:04.940 --> 00:01:05.440
+project. Here we have Emacs I'm presenting
+
+00:01:07.240 --> 00:01:07.740
+from and here we have Firefox.
+
+00:01:09.600 --> 00:01:09.960
+I'm inside and there's a video.
+
+00:01:12.720 --> 00:01:13.220
+Okay, let's do this. Don't do the inception.
+
+00:01:14.900 --> 00:01:15.400
+Put it over there somewhere.
+
+00:01:17.940 --> 00:01:18.440
+Okay. So here's Firefox.
+
+00:01:20.760 --> 00:01:21.260
+It's not, it's, It's in a buffer,
+
+00:01:23.560 --> 00:01:24.060
+but it's pretty disconnected from Emacs.
+
+00:01:27.700 --> 00:01:28.200
+It's in an XWM buffer.
+
+00:01:30.880 --> 00:01:31.320
+So you can use it from inside Emacs,
+
+00:01:35.320 --> 00:01:35.440
+but they don't talk. Emacs doesn't talk to
+
+00:01:36.860 --> 00:01:37.120
+the browser and the browser doesn't talk
+
+00:01:40.320 --> 00:01:40.820
+back. And I'm going to show you something
+
+00:01:42.720 --> 00:01:43.220
+that changes this. But first,
+
+00:01:45.100 --> 00:01:45.280
+I think for many of you,
+
+00:01:47.080 --> 00:01:47.200
+it's the same, like there's Emacs and the
+
+00:01:49.120 --> 00:01:49.620
+other important program is the browser.
+
+00:01:55.340 --> 00:01:55.840
+So how do you do something?
+
+00:01:57.880 --> 00:01:58.180
+Let's continue with the stage.
+
+00:01:59.640 --> 00:02:00.140
+We have some research session.
+
+00:02:03.400 --> 00:02:03.680
+We have this EmacsConf we found this year and
+
+00:02:04.960 --> 00:02:05.460
+there are a lot of talks.
+
+00:02:07.500 --> 00:02:07.700
+This is the 1 we're watching right now and
+
+00:02:09.520 --> 00:02:10.020
+let's have a look. What else is interesting?
+
+00:02:11.980 --> 00:02:12.480
+Ah, this was yesterday.
+
+00:02:15.060 --> 00:02:15.560
+So have a look at today.
+
+00:02:17.980 --> 00:02:18.480
+There is a world of possibilities.
+
+00:02:20.320 --> 00:02:20.600
+That sounds great. Oh,
+
+00:02:23.340 --> 00:02:23.840
+that is right now. So greetings to you.
+
+00:02:27.800 --> 00:02:28.080
+Yes, the browser and the buffer and other
+
+00:02:30.200 --> 00:02:30.700
+stuff. So now we have a lot of talks,
+
+00:02:35.900 --> 00:02:36.080
+tabs open and we're going to go back to
+
+00:02:40.800 --> 00:02:41.300
+Emacs. I can't switch buffers in a dedicated
+
+00:02:43.580 --> 00:02:43.940
+window. So apparently I can't do that.
+
+00:02:50.500 --> 00:02:50.600
+Here's Emacs again. Now I'm in Emacs and I
+
+00:02:51.900 --> 00:02:52.400
+want to have something from my browser,
+
+00:02:56.080 --> 00:02:56.200
+maybe like the open tabs or I want to
+
+00:02:59.180 --> 00:02:59.380
+annotate them. I'm in org mode right now,
+
+00:03:02.400 --> 00:03:02.900
+so I would like to do it from Org Mode maybe.
+
+00:03:05.380 --> 00:03:05.740
+How do I get the tab? Okay,
+
+00:03:08.940 --> 00:03:09.440
+let's tap back. I want to annotate this page.
+
+00:03:11.860 --> 00:03:12.360
+Let's get the link, put it here.
+
+00:03:13.660 --> 00:03:13.940
+Oh, that wasn't a link.
+
+00:03:15.420 --> 00:03:15.920
+That was something totally different.
+
+00:03:19.540 --> 00:03:19.960
+So let's use the mouse.
+
+00:03:22.540 --> 00:03:23.040
+There's the link. Now we could put a title
+
+00:03:30.060 --> 00:03:30.560
+and so on. What I'm showing you here is it is
+
+00:03:34.160 --> 00:03:34.640
+pretty, no it's not too difficult,
+
+00:03:36.680 --> 00:03:36.820
+but it could be easier interacting with the
+
+00:03:40.380 --> 00:03:40.580
+browser. And there are helpers to do
+
+00:03:41.980 --> 00:03:42.480
+something like this. I had,
+
+00:03:46.440 --> 00:03:46.640
+for example, I used for a long time this
+
+00:03:50.400 --> 00:03:50.660
+extension. It's called export tabs URLs and
+
+00:03:53.000 --> 00:03:53.400
+you got a list of your tabs and you can just
+
+00:03:54.280 --> 00:03:54.780
+copy them to clipboard.
+
+00:03:55.900 --> 00:03:56.280
+So now we have the tabs,
+
+00:03:58.620 --> 00:03:58.940
+copy them to clipboard and there they are.
+
+00:04:00.640 --> 00:04:01.140
+So now we can do something with the tabs,
+
+00:04:03.240 --> 00:04:03.740
+rearrange them, take notes and so on.
+
+00:04:14.320 --> 00:04:14.640
+Okay. And there's even other stuff for while
+
+00:04:17.519 --> 00:04:18.019
+researching for this talk on this extension,
+
+00:04:21.060 --> 00:04:21.260
+I found this tab session manager where you
+
+00:04:23.080 --> 00:04:23.300
+can have a look at your tabs it does
+
+00:04:26.540 --> 00:04:27.040
+snapshots it exports it in Brazilian
+
+00:04:29.820 --> 00:04:30.320
+different formats and yeah that's even more
+
+00:04:35.600 --> 00:04:35.740
+luxurious no better but it's still not an
+
+00:04:41.380 --> 00:04:41.880
+emacs okay so how could we get it into Emacs?
+
+00:04:44.040 --> 00:04:44.540
+Maybe this thing called Pultus could help.
+
+00:04:49.000 --> 00:04:49.180
+The theme is from a browser extension and a
+
+00:04:52.440 --> 00:04:52.760
+manual workflow. As I showed you right now,
+
+00:04:54.400 --> 00:04:54.860
+we want to go to an interactive Emacs
+
+00:04:57.620 --> 00:04:57.800
+interface. How to deal with the browser and
+
+00:04:59.280 --> 00:04:59.780
+its tabs from inside Emacs.
+
+00:05:05.860 --> 00:05:06.360
+And we're gonna do just that right now.
+
+00:05:08.880 --> 00:05:09.340
+So we had this research session over there.
+
+00:05:10.320 --> 00:05:10.820
+So now it's demo time.
+
+00:05:12.620 --> 00:05:13.120
+We had this research session.
+
+00:05:14.620 --> 00:05:15.120
+Let's open it again. Here is it.
+
+00:05:18.340 --> 00:05:18.840
+And now we want to do it from inside Emacs.
+
+00:05:22.940 --> 00:05:23.300
+We say please Emacs insert this or please
+
+00:05:28.000 --> 00:05:28.200
+Poltis insert this. And now we have the
+
+00:05:30.020 --> 00:05:30.040
+browser session inside Emacs.
+
+00:05:35.280 --> 00:05:35.760
+It's a little bit roomy so you can see it
+
+00:05:40.200 --> 00:05:40.380
+over the internet. And we learned that
+
+00:05:44.120 --> 00:05:44.280
+BigBooplotten doesn't set a title or has a
+
+00:05:46.160 --> 00:05:46.360
+new line in it. I'm not actually sure what
+
+00:05:49.740 --> 00:05:50.120
+happened here. So let's have this browser
+
+00:05:51.940 --> 00:05:52.440
+session and what can we do with it?
+
+00:05:57.860 --> 00:05:58.320
+For once you can just copy stuff here,
+
+00:06:01.560 --> 00:06:01.720
+you can take notes and it updates with the
+
+00:06:03.900 --> 00:06:04.040
+browser. If you change something in the
+
+00:06:06.020 --> 00:06:06.420
+browser, maybe switch these tabs,
+
+00:06:07.720 --> 00:06:08.220
+they switch over there.
+
+00:06:12.340 --> 00:06:12.560
+Or you say, okay, I don't want to have
+
+00:06:17.340 --> 00:06:17.500
+HyperDrive in here. And I don't need the
+
+00:06:19.440 --> 00:06:19.540
+instructions for speakers because I'm not a
+
+00:06:22.500 --> 00:06:22.800
+speaker so I have a live sync to Emacs from
+
+00:06:29.440 --> 00:06:29.640
+the browser in this Org Mode interface and we
+
+00:06:31.180 --> 00:06:31.420
+can do more stuff with it,
+
+00:06:37.640 --> 00:06:37.800
+for example we could I already showed you how
+
+00:06:41.880 --> 00:06:42.380
+to rearrange stuff. We can open new tabs.
+
+00:06:46.220 --> 00:06:46.720
+We can have a look at let's say emacs-conf
+
+00:06:53.480 --> 00:06:53.680
+again and they're just updating and now it
+
+00:06:57.040 --> 00:06:57.540
+says a new tab, add another 1,
+
+00:07:02.000 --> 00:07:02.500
+okay. So I think you get the gist.
+
+00:07:05.220 --> 00:07:05.720
+Now let's take a note on this.
+
+00:07:11.460 --> 00:07:11.960
+This conference sounds interesting.
+
+00:07:20.820 --> 00:07:21.140
+Have a look. Maybe thumbs up.
+
+00:07:23.420 --> 00:07:23.920
+Okay I can do this. So now there's a link,
+
+00:07:30.920 --> 00:07:31.420
+not a link, a note. If I close it and reopen
+
+00:07:33.900 --> 00:07:34.400
+it, There's the note again.
+
+00:07:39.000 --> 00:07:39.500
+So we have persistent notes for browser tabs
+
+00:07:42.040 --> 00:07:42.400
+or not actually browser tabs,
+
+00:07:46.240 --> 00:07:46.560
+it's actually URLs. Use the browser tab.
+
+00:07:49.600 --> 00:07:50.100
+I'm gonna open another URL.
+
+00:07:51.500 --> 00:07:52.000
+Now it's not without a node.
+
+00:07:54.480 --> 00:07:54.980
+Going back, the node is back there.
+
+00:08:01.260 --> 00:08:01.760
+That's how far I can show you Politis because
+
+00:08:05.720 --> 00:08:06.220
+the interface isn't finished otherwise.
+
+00:08:11.680 --> 00:08:12.100
+But the backend is pretty cool and I'm gonna
+
+00:08:13.180 --> 00:08:13.580
+tell you more about that.
+
+00:08:15.360 --> 00:08:15.860
+The interface is right now just browser
+
+00:08:18.640 --> 00:08:18.940
+interaction 1 way from the browser into org
+
+00:08:22.240 --> 00:08:22.740
+mode, an org mode interface and it has nodes.
+
+00:08:25.080 --> 00:08:25.580
+But it's not too difficult to imagine,
+
+00:08:30.420 --> 00:08:30.920
+for example, adding tags or...
+
+00:08:32.020 --> 00:08:32.500
+I just remembered Or I just remembered
+
+00:08:39.400 --> 00:08:39.900
+something. Okay. So for example,
+
+00:08:45.060 --> 00:08:45.220
+adding texts or scheduling information or
+
+00:08:47.360 --> 00:08:47.720
+what else, all the stuff you do with org
+
+00:08:51.920 --> 00:08:52.420
+mode. Or go the other way around and sync
+
+00:08:54.920 --> 00:08:55.320
+from the org mode buffer to the browser.
+
+00:09:01.440 --> 00:09:01.560
+So I could delete this heading or rename it
+
+00:09:03.280 --> 00:09:03.420
+or stuff like that. So it's reflected in the
+
+00:09:04.840 --> 00:09:05.000
+browser. I'm not going to do it right now
+
+00:09:05.640 --> 00:09:06.140
+because it's not implemented.
+
+00:09:10.240 --> 00:09:10.440
+But just to give you an outlook of the
+
+00:09:14.960 --> 00:09:15.200
+possibilities. Good. So let's leave this
+
+00:09:24.000 --> 00:09:24.500
+browser session here. Browser session below.
+
+00:09:35.280 --> 00:09:35.500
+Okay. Change the outline structure or stuff
+
+00:09:39.380 --> 00:09:39.880
+like this. So get the browser back,
+
+00:09:43.420 --> 00:09:43.740
+debugging. Yep, this talks,
+
+00:09:44.800 --> 00:09:45.060
+I could change something here,
+
+00:09:47.920 --> 00:09:48.420
+go back to the talks page and still working.
+
+00:09:56.920 --> 00:09:57.120
+Now I showed you what it does and what can
+
+00:10:01.560 --> 00:10:01.720
+you use it for or What is it intended to be
+
+00:10:02.660 --> 00:10:03.040
+used for if it's finished,
+
+00:10:04.640 --> 00:10:05.140
+because it isn't finished as I said.
+
+00:10:07.240 --> 00:10:07.740
+Manage your open tabs.
+
+00:10:12.340 --> 00:10:12.840
+So for example my use case is I do something,
+
+00:10:16.080 --> 00:10:16.580
+have a big collection of tabs open And then I
+
+00:10:22.800 --> 00:10:22.940
+need RAM. This PC here has just 4 GB of it,
+
+00:10:25.080 --> 00:10:25.580
+so sometimes I need to close the browser too.
+
+00:10:27.260 --> 00:10:27.760
+I don't have to close the PC.
+
+00:10:32.540 --> 00:10:32.740
+And in this case I'd like to save the
+
+00:10:37.240 --> 00:10:37.740
+session. So far I just copied this clipboard
+
+00:10:40.380 --> 00:10:40.880
+thing I showed you earlier in an org mode and
+
+00:10:44.640 --> 00:10:44.900
+Captured it away and this should be the
+
+00:10:48.120 --> 00:10:48.300
+future for this workflow You just capture the
+
+00:10:49.520 --> 00:10:49.700
+browser session rearrange it.
+
+00:10:51.760 --> 00:10:51.860
+However, you like it and then you make make
+
+00:10:54.160 --> 00:10:54.520
+it offline. So this is the thing I didn't
+
+00:10:57.840 --> 00:10:58.340
+show you. You can, if you were looking here
+
+00:11:04.020 --> 00:11:04.160
+you can you see that this heading is open in
+
+00:11:08.560 --> 00:11:09.060
+tab 37, window 1. So if you would remove
+
+00:11:14.120 --> 00:11:14.480
+this, it's offline. And you keep just the org
+
+00:11:16.300 --> 00:11:16.700
+structure. It's a simple text file then.
+
+00:11:25.940 --> 00:11:26.100
+And the plan future feature is to go back to
+
+00:11:27.540 --> 00:11:28.040
+the online state. So you have a session,
+
+00:11:28.900 --> 00:11:29.400
+maybe a browser window,
+
+00:11:30.920 --> 00:11:31.420
+you save it to Org Mode,
+
+00:11:34.600 --> 00:11:34.960
+close the window and some days later or weeks
+
+00:11:38.080 --> 00:11:38.580
+later you return to this research session,
+
+00:11:40.240 --> 00:11:40.740
+maybe something about Emacs or whatever
+
+00:11:43.740 --> 00:11:44.180
+spikes your interest, and you can just reopen
+
+00:11:46.500 --> 00:11:46.920
+it from the browser, from Org Mode.
+
+00:11:48.820 --> 00:11:49.000
+So Org Mode becomes the controller of the
+
+00:11:50.320 --> 00:11:50.820
+browser. And it's not,
+
+00:11:52.440 --> 00:11:52.680
+it doesn't have to be Org Mode,
+
+00:11:53.860 --> 00:11:54.360
+but for the demo purpose,
+
+00:11:58.260 --> 00:11:58.760
+Org Mode was the most easy interface.
+
+00:12:02.540 --> 00:12:02.800
+That easy. I don't know if you're doing more
+
+00:12:05.600 --> 00:12:05.860
+complex interactive stuff in Org Mode,
+
+00:12:08.640 --> 00:12:09.140
+but there's some tricky edge cases.
+
+00:12:12.560 --> 00:12:12.920
+I just finished this demo half an hour ago,
+
+00:12:15.360 --> 00:12:15.520
+maybe an hour ago, and I'm really lucky that
+
+00:12:18.580 --> 00:12:19.080
+it worked in the end. Org mode,
+
+00:12:23.000 --> 00:12:23.400
+pretty great. So maybe you could do another
+
+00:12:25.200 --> 00:12:25.700
+interface, does not matter.
+
+00:12:29.760 --> 00:12:30.260
+Easy access to more info from inside Emacs.
+
+00:12:32.360 --> 00:12:32.580
+Yeah, Of course, you can imagine like we have
+
+00:12:34.700 --> 00:12:35.200
+just the title URL here,
+
+00:12:39.160 --> 00:12:39.360
+but you could even get at the text of the
+
+00:12:41.120 --> 00:12:41.280
+buffer. I'd show you in the,
+
+00:12:42.340 --> 00:12:42.840
+in the, how is it done section,
+
+00:12:44.540 --> 00:12:44.960
+manage and research session,
+
+00:12:48.460 --> 00:12:48.620
+tab groups. I already showed you this and
+
+00:12:49.240 --> 00:12:49.740
+browse all your links.
+
+00:12:54.780 --> 00:12:54.960
+I also showed you. So let's go over to how is
+
+00:12:57.340 --> 00:12:57.840
+it done. How is it done then?
+
+00:13:08.760 --> 00:13:08.940
+It should be quite apparent that somehow the
+
+00:13:11.660 --> 00:13:11.820
+browser has to sync its state to Emacs and
+
+00:13:13.680 --> 00:13:14.180
+Emacs has to know about the browser and
+
+00:13:15.660 --> 00:13:16.120
+there's like a bidirectional state
+
+00:13:17.560 --> 00:13:18.060
+synchronization going on here.
+
+00:13:21.480 --> 00:13:21.980
+And there's a browser side and an Emacs side.
+
+00:13:28.080 --> 00:13:28.580
+The browser side is a add-on,
+
+00:13:31.080 --> 00:13:31.580
+a web extension add-on.
+
+00:13:38.940 --> 00:13:39.380
+I first tried to use WebDriver by DIY.
+
+00:13:40.760 --> 00:13:41.040
+I don't know if you know it,
+
+00:13:43.440 --> 00:13:43.780
+you open a web socket and then you can talk
+
+00:13:47.460 --> 00:13:47.860
+to the browser, but It was so frustrating to
+
+00:13:50.440 --> 00:13:50.940
+actually get it to do what I wanted to do
+
+00:13:54.000 --> 00:13:54.280
+that I changed to the web extension and this
+
+00:13:55.580 --> 00:13:56.080
+wasn't that much better,
+
+00:13:58.520 --> 00:13:58.840
+but I finally had all the features I needed
+
+00:14:02.660 --> 00:14:02.780
+because WebDriver is like all in flux and you
+
+00:14:04.200 --> 00:14:04.540
+have to look at the Firefox bug tracker.
+
+00:14:05.860 --> 00:14:06.360
+Do they have implemented this already?
+
+00:14:09.900 --> 00:14:10.400
+And no, most often they don't.
+
+00:14:13.580 --> 00:14:13.940
+So now it's a web extension add-on and it
+
+00:14:16.280 --> 00:14:16.480
+just tells Emacs little facts about the
+
+00:14:20.060 --> 00:14:20.560
+browser. And for you to make,
+
+00:14:23.500 --> 00:14:23.720
+to, that this facts make more sense for you,
+
+00:14:27.180 --> 00:14:27.680
+I think I have to explain how the Emacs side
+
+00:14:31.560 --> 00:14:32.060
+of this works. So the Emacs side,
+
+00:14:37.160 --> 00:14:37.460
+at first I thought I make it quite simple and
+
+00:14:38.800 --> 00:14:39.300
+then I over engineered it.
+
+00:14:42.040 --> 00:14:42.540
+And now it's great, but also not finished.
+
+00:14:44.540 --> 00:14:45.040
+So the Emacs site is a database.
+
+00:14:52.580 --> 00:14:53.080
+It's a triple store or RDF database.
+
+00:14:57.800 --> 00:14:58.300
+It stores all information in triples.
+
+00:14:58.980 --> 00:14:59.480
+So you have a subject,
+
+00:15:04.280 --> 00:15:04.780
+subject, predicate, and an object.
+
+00:15:10.440 --> 00:15:10.940
+And you can query this database.
+
+00:15:14.920 --> 00:15:15.060
+For those of you who watched last year's talk
+
+00:15:19.740 --> 00:15:20.240
+of Andrew Hyatt about SQL in Emacs.
+
+00:15:23.100 --> 00:15:23.300
+He presented such a database if you want to
+
+00:15:24.960 --> 00:15:25.380
+have a closer look. And sorry,
+
+00:15:26.520 --> 00:15:27.020
+Andrew, I didn't use yours.
+
+00:15:29.540 --> 00:15:29.860
+I had to make my own. I'm not sure it's
+
+00:15:31.320 --> 00:15:31.820
+better, but it was fun.
+
+00:15:36.220 --> 00:15:36.720
+And it has some different design decisions.
+
+00:15:41.040 --> 00:15:41.200
+For those of you who don't know what's up
+
+00:15:42.440 --> 00:15:42.940
+with a database like this,
+
+00:15:47.020 --> 00:15:47.360
+maybe you know web apps like all this new Org
+
+00:15:51.960 --> 00:15:52.460
+Mode clones. How are they called?
+
+00:15:56.480 --> 00:15:56.820
+Obsidian, Roam, and so on and so on.
+
+00:15:58.260 --> 00:15:58.760
+All of these are possible because,
+
+00:16:01.300 --> 00:16:01.640
+I don't know if Obsidian too,
+
+00:16:04.360 --> 00:16:04.540
+but stuff like Roam is possible because they
+
+00:16:07.760 --> 00:16:08.000
+have a triple store in the browser and use
+
+00:16:10.520 --> 00:16:11.020
+this to power their knowledge base.
+
+00:16:14.280 --> 00:16:14.540
+And if you have had a look at Org Rome,
+
+00:16:17.160 --> 00:16:17.400
+you know it's uses a database too,
+
+00:16:19.340 --> 00:16:19.640
+because if this knowledge gets bigger,
+
+00:16:21.360 --> 00:16:21.860
+database is better to handle.
+
+00:16:27.860 --> 00:16:28.360
+And now here's a triplet store or a database
+
+00:16:31.920 --> 00:16:32.420
+to manage your browser session inside Emacs,
+
+00:16:34.240 --> 00:16:34.740
+but it's not limited to browser session.
+
+00:16:37.440 --> 00:16:37.940
+You could do nodes and stuff.
+
+00:16:40.900 --> 00:16:41.120
+I don't have a project for this,
+
+00:16:52.620 --> 00:16:53.120
+but you can look at this project from Andrew
+
+00:16:56.380 --> 00:16:56.880
+Hyatt. Has a pretty interesting notes
+
+00:16:59.620 --> 00:17:00.120
+project. So here is it in Emacs.
+
+00:17:03.960 --> 00:17:04.460
+There's the link. You can have a look.
+
+00:17:09.560 --> 00:17:10.060
+Okay. So now we have this database in Emacs.
+
+00:17:12.319 --> 00:17:12.440
+It's possible to do something like this in
+
+00:17:15.800 --> 00:17:16.300
+Emacs now because the database has Emacs
+
+00:17:21.220 --> 00:17:21.700
+SQLite integrated And the browser logs inside
+
+00:17:22.900 --> 00:17:23.359
+into this database via Emacs.
+
+00:17:26.579 --> 00:17:26.839
+It sends Emacs, it connects to Emacs via
+
+00:17:32.380 --> 00:17:32.580
+WebSocket. Emacs is a WebSocket server and
+
+00:17:35.580 --> 00:17:35.800
+then it sends little snippets like this
+
+00:17:46.420 --> 00:17:46.920
+window shows these tabs or this tab shows
+
+00:17:51.060 --> 00:17:51.300
+this URL And Emacs has triggers in this
+
+00:17:53.600 --> 00:17:53.760
+database. It can install Elisp triggers and
+
+00:17:58.420 --> 00:17:58.920
+the trigger powered the org mode frontend.
+
+00:18:06.040 --> 00:18:06.540
+Okay, so that's how it's done.
+
+00:18:08.780 --> 00:18:09.280
+It's not finished, but it does something.
+
+00:18:13.540 --> 00:18:13.820
+Now I want to do some closing remarks and
+
+00:18:14.440 --> 00:18:14.940
+maybe some more remarks.
+
+00:18:17.120 --> 00:18:17.400
+First off, an interesting concept I thought
+
+00:18:23.240 --> 00:18:23.680
+up while implementing this is cheesy garbage
+
+00:18:28.100 --> 00:18:28.580
+collect. For all you fans of dynamic
+
+00:18:31.000 --> 00:18:31.340
+languages, you know what garbage collect is.
+
+00:18:33.720 --> 00:18:34.220
+And Emacs users probably know it.
+
+00:18:38.060 --> 00:18:38.380
+Cleans up after you. You are using this Emacs
+
+00:18:40.280 --> 00:18:40.780
+and you are making lots of little objects and
+
+00:18:42.540 --> 00:18:42.920
+after some time Emacs says,
+
+00:18:45.260 --> 00:18:45.580
+okay, I'm doing some cleanup for you.
+
+00:18:46.260 --> 00:18:46.760
+That's garbage collect.
+
+00:18:49.040 --> 00:18:49.360
+And I thought why not have garbage collect
+
+00:18:52.000 --> 00:18:52.500
+for the browser? You're doing this browsing
+
+00:18:55.120 --> 00:18:55.320
+and opening all these tabs and after some
+
+00:18:58.020 --> 00:18:58.200
+time there are lots of tabs and someone has
+
+00:19:00.660 --> 00:19:01.160
+to close them. So there's the C programmers,
+
+00:19:03.160 --> 00:19:03.340
+they do all the closing themselves and
+
+00:19:03.960 --> 00:19:04.460
+they're really meticulous,
+
+00:19:06.060 --> 00:19:06.560
+but it takes some time.
+
+00:19:08.520 --> 00:19:09.020
+And there's like my style,
+
+00:19:12.880 --> 00:19:13.100
+I just let it collect stuff and after some
+
+00:19:16.220 --> 00:19:16.720
+time I close the browser and start a new 1.
+
+00:19:19.080 --> 00:19:19.280
+And now there's the garbage collect that
+
+00:19:20.800 --> 00:19:21.180
+says, let it collect the browser,
+
+00:19:22.640 --> 00:19:23.000
+let the browser collect and then garbage
+
+00:19:25.520 --> 00:19:25.960
+collect. Let's say every morning the browser
+
+00:19:28.140 --> 00:19:28.480
+closes, Emacs closes all the browser tabs,
+
+00:19:30.520 --> 00:19:30.860
+but it keeps the information And it keeps
+
+00:19:32.840 --> 00:19:33.340
+text. Maybe you said like a tag yesterday
+
+00:19:36.340 --> 00:19:36.840
+like reading. I want to read this.
+
+00:19:39.720 --> 00:19:39.960
+And next time and then after that it's in the
+
+00:19:42.720 --> 00:19:43.140
+reading list. So garbage collector
+
+00:19:45.020 --> 00:19:45.520
+compaction. However you want to know this.
+
+00:19:50.740 --> 00:19:51.240
+1 thing I thought of while doing this is
+
+00:19:57.380 --> 00:19:57.620
+also, oh my time's up,
+
+00:19:59.120 --> 00:19:59.620
+so we're almost at Q&A.
+
+00:20:04.120 --> 00:20:04.620
+1 last thing, this whole project or program
+
+00:20:06.360 --> 00:20:06.660
+works via the Emacs event loop.
+
+00:20:08.720 --> 00:20:08.880
+So there's a server listening for the
+
+00:20:11.840 --> 00:20:12.340
+browser, waiting for infos from it.
+
+00:20:16.320 --> 00:20:16.820
+It works quite fine. I wasn't sure how much
+
+00:20:20.940 --> 00:20:21.440
+performance it will cost the browser,
+
+00:20:23.120 --> 00:20:23.440
+Emacs, but it works fine.
+
+00:20:26.920 --> 00:20:27.240
+But I wonder what's the limits of Emacs event
+
+00:20:31.880 --> 00:20:32.280
+loop. Like, can I go on forever adding server
+
+00:20:34.440 --> 00:20:34.940
+stuff? How big a server can Emacs get?
+
+00:20:43.580 --> 00:20:44.080
+I don't know. So that's some open questions
+
+00:20:47.120 --> 00:20:47.620
+to ponder. With that, thank you for listening
+
+00:20:49.860 --> 00:20:50.360
+and for your interest.
+
+00:20:54.380 --> 00:20:54.640
+I'd be pretty delighted to take some
+
+00:20:57.740 --> 00:20:57.980
+questions now. Great! Well,
+
+00:20:58.680 --> 00:20:59.160
+thank you so much, Michael.
+
+00:21:01.280 --> 00:21:01.400
+Thanks for the talk. And also thanks for
+
+00:21:02.960 --> 00:21:03.460
+going a little more in depth at the end.
+
+00:21:05.800 --> 00:21:06.040
+Is that what the extra stuff that you wanted
+
+00:21:08.000 --> 00:21:08.500
+to mention? Is it what you've done just now?
+
+00:21:11.400 --> 00:21:11.900
+Sorry, I didn't understand your last,
+
+00:21:14.700 --> 00:21:14.860
+your question. When we were preparing for
+
+00:21:15.820 --> 00:21:16.320
+your presentation with Sliv,
+
+00:21:18.340 --> 00:21:18.420
+you told me that you wanted to go perhaps a
+
+00:21:20.380 --> 00:21:20.740
+little more in-depth into the garbage
+
+00:21:22.500 --> 00:21:22.640
+collection. Is it what you wanted to do or do
+
+00:21:24.080 --> 00:21:24.580
+you still have some more to tell us about?
+
+00:21:27.080 --> 00:21:27.580
+I could tell more in-depth.
+
+00:21:29.540 --> 00:21:30.040
+Yes, garbage collection is just an idea.
+
+00:21:35.740 --> 00:21:36.240
+It's maybe... I don't know.
+
+00:21:39.140 --> 00:21:39.480
+Are there questions? There are questions,
+
+00:21:41.720 --> 00:21:41.880
+that's why. We have about 13 minutes to
+
+00:21:43.380 --> 00:21:43.880
+answer as many questions as possible.
+
+00:21:46.960 --> 00:21:47.120
+By the way, Sorry for the people who were
+
+00:21:47.560 --> 00:21:48.040
+watching the presentation.
+
+00:21:49.040 --> 00:21:49.540
+There's been a little bit of manipulation
+
+00:21:51.820 --> 00:21:52.040
+trying to get all the screens in order,
+
+00:21:53.860 --> 00:21:54.360
+but it's because I've got a very shitty ping
+
+00:21:56.360 --> 00:21:56.600
+to the streaming server that we use
+
+00:21:59.380 --> 00:21:59.860
+currently. So everything is like composite
+
+00:22:00.360 --> 00:22:00.600
+everything, But don't worry,
+
+00:22:02.240 --> 00:22:02.440
+Michael, everything will be very clean once
+
+00:22:03.160 --> 00:22:03.660
+we publish it afterwards.
+
+00:22:05.140 --> 00:22:05.640
+So what I'm going to do...
+
+00:22:09.660 --> 00:22:10.160
+Sorry, could you repeat?
+
+00:22:13.020 --> 00:22:13.380
+So it was not at my end because my internet
+
+00:22:15.560 --> 00:22:16.060
+connection is not the best 1 either.
+
+00:22:17.800 --> 00:22:18.080
+No, absolutely not. Oh,
+
+00:22:19.640 --> 00:22:19.840
+by the way, this reminds me as I am
+
+00:22:20.740 --> 00:22:21.180
+compositing the windows,
+
+00:22:23.000 --> 00:22:23.300
+you might remember in the talk by Bob earlier
+
+00:22:25.380 --> 00:22:25.880
+today, I said, oh, there's a phone vibrating.
+
+00:22:28.680 --> 00:22:28.840
+I thought it was coming from the big blue
+
+00:22:30.600 --> 00:22:30.760
+button, like the room in which we are right
+
+00:22:32.960 --> 00:22:33.080
+now. And I wasn't hallucinating just to be
+
+00:22:34.440 --> 00:22:34.940
+clear. It's just that 1 of the co-organizers
+
+00:22:37.320 --> 00:22:37.820
+behind on mumble had their phone vibrating
+
+00:22:38.720 --> 00:22:39.160
+and I was very confused.
+
+00:22:41.440 --> 00:22:41.600
+Anyway that's for the Okay,
+
+00:22:42.440 --> 00:22:42.600
+so everything is set up now.
+
+00:22:43.280 --> 00:22:43.500
+So what I'm gonna do, Michael,
+
+00:22:44.760 --> 00:22:45.040
+I'm gonna... If you're okay with this,
+
+00:22:46.560 --> 00:22:46.960
+Can I read you the question from the pad and
+
+00:22:48.780 --> 00:22:48.960
+can you answer them? Yes,
+
+00:22:50.160 --> 00:22:50.660
+of course. I would love to.
+
+00:22:53.740 --> 00:22:53.940
+Okay, lovely. I'm going to try my best to
+
+00:22:56.380 --> 00:22:56.720
+display the questions on the stream.
+
+00:22:58.140 --> 00:22:58.440
+Give me just a second and in the meantime
+
+00:22:59.440 --> 00:22:59.940
+I'll read you the first 1.
+
+00:23:02.180 --> 00:23:02.680
+So, have you seen the next browser?
+
+00:23:05.020 --> 00:23:05.240
+It is the Emacs of web browsers and would
+
+00:23:07.540 --> 00:23:07.940
+probably be easier to work with as it matches
+
+00:23:08.900 --> 00:23:09.400
+a lot closer to Emacs.
+
+00:23:11.400 --> 00:23:11.640
+I think you can tag your browser tabs for
+
+00:23:16.880 --> 00:23:17.380
+example. I saw it, I never tried it.
+
+00:23:20.940 --> 00:23:21.360
+I think you can do all the stuff and I think
+
+00:23:23.620 --> 00:23:23.940
+it's pretty good idea to use it if you want
+
+00:23:26.480 --> 00:23:26.980
+because have a look at this.
+
+00:23:30.700 --> 00:23:31.200
+This lovely thing is JavaScript and it's the
+
+00:23:35.080 --> 00:23:35.320
+browser side. It was quite tricky to get
+
+00:23:40.180 --> 00:23:40.680
+working so maybe it's easier if you use Nixt
+
+00:23:47.460 --> 00:23:47.660
+but I like to use Firefox and yeah there has
+
+00:23:49.820 --> 00:23:50.000
+to be a solution for Firefox too,
+
+00:23:53.040 --> 00:23:53.480
+I think. So next question,
+
+00:23:55.900 --> 00:23:56.320
+please. Lovely. All right,
+
+00:23:59.480 --> 00:23:59.980
+so nice ideas. Needs a better name though,
+
+00:24:00.840 --> 00:24:01.280
+to attract people to it.
+
+00:24:02.920 --> 00:24:03.420
+What about Browsys or Webnote?
+
+00:24:08.400 --> 00:24:08.900
+Browsys spelled B-R-O-W-S-Y-S or Webnote?
+
+00:24:12.720 --> 00:24:13.220
+Clearer this 1. Webnote and Browsys?
+
+00:24:17.260 --> 00:24:18.300
+With a Y, yes. So instead of an IAY.
+
+00:24:21.140 --> 00:24:21.420
+Ah, okay. Yes, why not?
+
+00:24:25.240 --> 00:24:25.520
+I take note. The name is maybe a little bit
+
+00:24:28.020 --> 00:24:28.460
+confusing. It's the name of a spider.
+
+00:24:30.860 --> 00:24:31.160
+It's like a spider that does an orb web.
+
+00:24:31.920 --> 00:24:32.420
+I found it via Wikipedia.
+
+00:24:34.360 --> 00:24:34.480
+I just wanted to have like something with the
+
+00:24:37.640 --> 00:24:37.840
+web because it's weaving something and
+
+00:24:38.680 --> 00:24:39.180
+there's also the web involved.
+
+00:24:41.600 --> 00:24:41.980
+I'm not set on the name.
+
+00:24:44.640 --> 00:24:45.040
+I'm not even set on the project yet how it
+
+00:24:47.360 --> 00:24:47.520
+will turn out. So what you're seeing now is
+
+00:24:49.760 --> 00:24:49.940
+something else than what I imagined when I
+
+00:24:51.060 --> 00:24:51.560
+was planning this talk.
+
+00:24:54.880 --> 00:24:55.280
+Yeah. That's right. Keep an open mind.
+
+00:24:56.880 --> 00:24:57.140
+Next question. You know what I'm going to say
+
+00:24:58.900 --> 00:24:59.340
+about the marketing of project names?
+
+00:24:59.900 --> 00:25:00.400
+You know, they're not,
+
+00:25:01.640 --> 00:25:02.040
+they don't make sense and they're not popular
+
+00:25:02.880 --> 00:25:03.340
+until they actually are.
+
+00:25:06.040 --> 00:25:06.260
+Like what would have predestined maggots to
+
+00:25:07.680 --> 00:25:08.180
+work as a name? Perhaps nothing.
+
+00:25:10.940 --> 00:25:11.420
+I mean it felt close to magic or maggots
+
+00:25:12.540 --> 00:25:12.880
+depending on the people you ask.
+
+00:25:16.000 --> 00:25:16.160
+So you know maybe your name Pultis will be a
+
+00:25:18.160 --> 00:25:18.280
+household name give or take 6 months or a
+
+00:25:23.120 --> 00:25:23.260
+year? Yes, maybe. Because- All right,
+
+00:25:23.980 --> 00:25:24.340
+moving on to the next question.
+
+00:25:25.400 --> 00:25:25.900
+Oh, unless you wanna add something.
+
+00:25:28.740 --> 00:25:29.240
+To expand a little bit on this name,
+
+00:25:33.140 --> 00:25:33.640
+I'm not sure where it stops.
+
+00:25:35.460 --> 00:25:35.600
+Like, is it really, it's just about the
+
+00:25:37.740 --> 00:25:38.240
+browser, What I just built is something more?
+
+00:25:42.340 --> 00:25:42.580
+So I'm not sure if I should limit the name
+
+00:25:44.380 --> 00:25:44.880
+here. Okay, now let's go on.
+
+00:25:47.440 --> 00:25:47.700
+You know what? You know what they say about
+
+00:25:48.700 --> 00:25:49.180
+programming, there's only 1 fundamental
+
+00:25:50.720 --> 00:25:51.220
+problem, no sorry, 2 fundamental problems,
+
+00:25:53.400 --> 00:25:53.860
+garbage collection and naming things.
+
+00:25:55.200 --> 00:25:55.320
+So you're stuck in the second 1 and you
+
+00:25:56.200 --> 00:25:56.700
+mentioned the first 1 as well.
+
+00:25:59.580 --> 00:26:00.080
+Alright, moving on to the next question.
+
+00:26:01.860 --> 00:26:02.080
+Can you use browser extensions with this,
+
+00:26:03.700 --> 00:26:03.840
+for example uBlock, SponsorBlock or
+
+00:26:06.780 --> 00:26:07.120
+Darkreader? Yes, of course.
+
+00:26:09.020 --> 00:26:09.320
+I think someone was maybe a little bit
+
+00:26:11.140 --> 00:26:11.640
+confused that the browser is inside Emacs.
+
+00:26:14.540 --> 00:26:15.040
+This is something totally normal for us ex-WM
+
+00:26:18.040 --> 00:26:18.220
+users. It's like every program for me is
+
+00:26:21.040 --> 00:26:21.540
+inside Emacs. This is just a normal Firefox.
+
+00:26:24.320 --> 00:26:24.640
+It just doesn't have like the window
+
+00:26:26.580 --> 00:26:27.080
+decoration. So there's of course there's,
+
+00:26:31.360 --> 00:26:31.860
+no, This is the ad blocker.
+
+00:26:33.840 --> 00:26:34.340
+I don't know why it's not working here.
+
+00:26:38.560 --> 00:26:39.060
+But you can have all you have in Firefox.
+
+00:26:44.820 --> 00:26:44.920
+OK. OK, lovely. Are you ready to move on to
+
+00:26:45.920 --> 00:26:46.080
+the next question? Or do you want to add
+
+00:26:47.600 --> 00:26:48.100
+something else? Yes, next question please.
+
+00:26:51.100 --> 00:26:51.600
+All right. So are there any inherent security
+
+00:26:53.000 --> 00:26:53.500
+issues with this, like bidirectional
+
+00:26:55.640 --> 00:26:55.960
+synchronization? Sounds like a possible
+
+00:26:57.120 --> 00:26:57.620
+issue. How are they solved?
+
+00:27:00.660 --> 00:27:00.760
+Can a malicious website impact Emacs or the
+
+00:27:10.520 --> 00:27:11.020
+host system? No, the website has no intro.
+
+00:27:15.120 --> 00:27:15.620
+It can do little stuff.
+
+00:27:20.200 --> 00:27:20.700
+There's this, it's a web extension,
+
+00:27:22.880 --> 00:27:23.300
+it's a browser extension inside the browser
+
+00:27:24.800 --> 00:27:25.300
+and it has like a limited interface.
+
+00:27:27.440 --> 00:27:27.920
+It uses a web extension API,
+
+00:27:30.980 --> 00:27:31.480
+there's a tabs API, you can listen on tabs,
+
+00:27:33.820 --> 00:27:34.320
+here you can tabs, browser tabs,
+
+00:27:36.340 --> 00:27:36.820
+Please notify me if there's 1 created,
+
+00:27:37.600 --> 00:27:38.040
+updated, moved, detached,
+
+00:27:40.240 --> 00:27:40.520
+attached, removed. So the people I think
+
+00:27:44.020 --> 00:27:44.440
+working at Google Chrome put some thought
+
+00:27:49.540 --> 00:27:49.920
+into it and at least this part seems quite
+
+00:27:52.960 --> 00:27:53.300
+well designed. Okay, next question,
+
+00:27:56.880 --> 00:27:57.100
+please. All right. So when do you think
+
+00:27:57.880 --> 00:27:58.380
+you'll make a first release?
+
+00:28:00.220 --> 00:28:00.420
+I hate needing browser extensions and would
+
+00:28:01.680 --> 00:28:02.180
+love to control my tabs in Emacs.
+
+00:28:07.340 --> 00:28:07.540
+Yes, I don't know. I would like to do it
+
+00:28:09.400 --> 00:28:09.900
+soon, but I have stuff to do.
+
+00:28:13.260 --> 00:28:13.760
+This is not the simplest project.
+
+00:28:18.660 --> 00:28:19.020
+What I can tell you, I will put the code
+
+00:28:20.480 --> 00:28:20.980
+online in the next days,
+
+00:28:25.080 --> 00:28:25.360
+maybe even next week, because it's not
+
+00:28:27.980 --> 00:28:28.080
+pretty, but it's also not bad and there's a
+
+00:28:28.940 --> 00:28:29.440
+lot of stuff there already.
+
+00:28:32.120 --> 00:28:32.620
+And For those who don't mind looking at
+
+00:28:35.500 --> 00:28:36.000
+unfinished things for inspiration or maybe
+
+00:28:39.320 --> 00:28:39.820
+their own work, I want to put it online.
+
+00:28:43.620 --> 00:28:44.020
+And if it's released, I will do some bigger
+
+00:28:46.560 --> 00:28:46.860
+announcement. And if it's getting released,
+
+00:28:48.840 --> 00:28:49.040
+can you write it back in Emacs console or
+
+00:28:51.760 --> 00:28:51.940
+conf, of course? Well,
+
+00:28:53.440 --> 00:28:53.600
+no pressure. Next year you need to have it
+
+00:28:55.320 --> 00:28:55.580
+released and you'll need to give us a GitHub
+
+00:28:59.900 --> 00:29:00.060
+page. Alright, moving on to the next
+
+00:29:01.560 --> 00:29:01.880
+question. What happened to the Sway
+
+00:29:03.040 --> 00:29:03.540
+compositor you showed last year?
+
+00:29:06.720 --> 00:29:07.220
+Yeah, that's like, this is the perfect
+
+00:29:10.680 --> 00:29:11.180
+question for like after the last 1.
+
+00:29:12.600 --> 00:29:13.100
+It's also not finished.
+
+00:29:16.960 --> 00:29:17.120
+And it's also not finished Because while I
+
+00:29:19.160 --> 00:29:19.660
+did a tech demo like I did this time,
+
+00:29:20.740 --> 00:29:21.220
+I'm sorry it's not finished,
+
+00:29:23.480 --> 00:29:23.600
+but I don't have that big a need for it and
+
+00:29:25.080 --> 00:29:25.580
+it's a lot of work to get it finished.
+
+00:29:28.140 --> 00:29:28.640
+Because it's a similar architecture,
+
+00:29:31.940 --> 00:29:32.440
+like this different server clients
+
+00:29:35.640 --> 00:29:35.980
+architecture stuff and Emacs is still in the
+
+00:29:42.140 --> 00:29:42.640
+callback hell time as you call it.
+
+00:29:46.260 --> 00:29:46.440
+So it's not that easy to get it working and I
+
+00:29:49.540 --> 00:29:49.920
+don't have that much need for a valent window
+
+00:29:52.720 --> 00:29:52.920
+manager because the other 1 still works and
+
+00:29:54.520 --> 00:29:55.020
+there's more interesting stuff to do.
+
+00:29:58.020 --> 00:29:58.180
+But also I know it has a lot of potential if
+
+00:30:00.840 --> 00:30:01.000
+it works and if it is released And I know a
+
+00:30:02.320 --> 00:30:02.520
+lot of people are waiting for it,
+
+00:30:04.200 --> 00:30:04.700
+so I have it in the back of my mind.
+
+00:30:06.720 --> 00:30:07.220
+And if someone else feels compelled,
+
+00:30:10.460 --> 00:30:10.680
+please take a look at the code and do
+
+00:30:12.980 --> 00:30:13.340
+something. Yeah, whoever asked the question,
+
+00:30:14.120 --> 00:30:14.620
+this is your task now.
+
+00:30:17.580 --> 00:30:17.900
+All right, moving on to the last question.
+
+00:30:18.900 --> 00:30:19.140
+We have about 4 minutes left,
+
+00:30:20.160 --> 00:30:20.660
+so it looks like we are...
+
+00:30:22.660 --> 00:30:22.760
+By the way, Michael was worried that he
+
+00:30:24.200 --> 00:30:24.700
+wouldn't have many questions to answer,
+
+00:30:27.380 --> 00:30:27.560
+and I am very proud to say and to prove you
+
+00:30:29.540 --> 00:30:30.040
+wrong. All right, next question.
+
+00:30:31.920 --> 00:30:32.080
+Does the browser have to be Firefox for
+
+00:30:33.480 --> 00:30:33.980
+syncing or is there a choice there?
+
+00:30:39.020 --> 00:30:39.340
+I think it's not. There's a choice.
+
+00:30:42.180 --> 00:30:42.440
+You can use any browser who supports web
+
+00:30:43.940 --> 00:30:44.440
+extensions. I think it's like a standardized
+
+00:30:49.900 --> 00:30:50.080
+interface. You can use any browser who does
+
+00:30:52.440 --> 00:30:52.640
+it. Chrome does it. But they're moving to a
+
+00:30:55.260 --> 00:30:55.760
+new web extension API to block ad blockers.
+
+00:30:59.680 --> 00:31:00.040
+I don't know if that does any turmoil for my
+
+00:31:02.860 --> 00:31:03.360
+extension and I frankly don't care that much.
+
+00:31:05.680 --> 00:31:06.180
+All right, fair answer.
+
+00:31:09.960 --> 00:31:10.280
+I don't see anyone who's joined us on BBB,
+
+00:31:11.940 --> 00:31:12.080
+by the way, we're going to move on with the
+
+00:31:13.020 --> 00:31:13.480
+stream to the next talk.
+
+00:31:15.380 --> 00:31:15.660
+But if you've got any questions for Michael,
+
+00:31:17.320 --> 00:31:17.480
+Feel free to join on BBB and ask your
+
+00:31:19.280 --> 00:31:19.440
+questions. I've said before that people tend
+
+00:31:22.420 --> 00:31:22.860
+to be shy and only join when the stream goes
+
+00:31:25.900 --> 00:31:26.040
+to a next talk. But I like to remind those
+
+00:31:27.720 --> 00:31:27.880
+people, eventually those talks are going to
+
+00:31:28.280 --> 00:31:28.620
+be published. Obviously,
+
+00:31:30.480 --> 00:31:30.680
+we'll make sure that nothing private was
+
+00:31:31.720 --> 00:31:32.220
+divulged during these discussions.
+
+00:31:34.640 --> 00:31:34.760
+But, you know, it's, if you can muster up the
+
+00:31:35.580 --> 00:31:35.740
+courage to go on the scene,
+
+00:31:38.940 --> 00:31:39.160
+it's always nice to have people join and ask
+
+00:31:41.100 --> 00:31:41.400
+questions. Michael, we have about 3 minutes
+
+00:31:43.080 --> 00:31:43.580
+left. Do you have any last words on perhaps
+
+00:31:45.860 --> 00:31:46.240
+anything to add on what you've presented
+
+00:31:49.780 --> 00:31:50.160
+today? Yeah, I just thought about maybe I
+
+00:31:55.260 --> 00:31:55.760
+show something. But there's this portals.
+
+00:32:00.140 --> 00:32:00.380
+Another thing, if someone has some more
+
+00:32:02.540 --> 00:32:02.920
+names, I would be quite interested because
+
+00:32:03.900 --> 00:32:04.400
+naming stuff is difficult.
+
+00:32:11.600 --> 00:32:12.100
+And this defines the database.
+
+00:32:14.200 --> 00:32:14.700
+There's the database definition.
+
+00:32:16.440 --> 00:32:16.920
+I call the database thingy,
+
+00:32:19.600 --> 00:32:19.760
+it's called Sponti. So I don't know what
+
+00:32:20.840 --> 00:32:21.340
+you're thinking about this name.
+
+00:32:23.220 --> 00:32:23.720
+So I think I want to have a database,
+
+00:32:25.360 --> 00:32:25.860
+it's called, it's this database.
+
+00:32:28.360 --> 00:32:28.740
+And then I define the database and I define
+
+00:32:29.820 --> 00:32:30.060
+the subject predicate object.
+
+00:32:31.060 --> 00:32:31.560
+So I have a browser session,
+
+00:32:32.520 --> 00:32:33.020
+browser session has tabs,
+
+00:32:36.820 --> 00:32:37.320
+a tab has, it comes from another tab maybe,
+
+00:32:39.860 --> 00:32:40.360
+or it shows an URL. A window,
+
+00:32:42.180 --> 00:32:42.680
+a session can also have a window,
+
+00:32:44.600 --> 00:32:44.760
+a window shows tabs. And then you can
+
+00:32:46.120 --> 00:32:46.380
+annotate stuff. You can say,
+
+00:32:49.920 --> 00:32:50.100
+okay, I have a node or a URL and I can tag it
+
+00:32:51.600 --> 00:32:52.100
+with a title, date, tag,
+
+00:32:54.940 --> 00:32:55.440
+or with another node or with body text.
+
+00:32:58.640 --> 00:32:58.780
+And I have an environment that's like a
+
+00:33:01.420 --> 00:33:01.840
+machine, the PC that's running on or Emacs
+
+00:33:03.640 --> 00:33:03.840
+itself. And then you have stuff about the
+
+00:33:04.900 --> 00:33:05.280
+machine and you have a client,
+
+00:33:06.660 --> 00:33:07.160
+this is the process session actually.
+
+00:33:08.680 --> 00:33:09.180
+So maybe I should change this.
+
+00:33:17.680 --> 00:33:18.180
+Okay. And 1 last thing.
+
+00:33:20.020 --> 00:33:20.220
+I have something I wanted to show you,
+
+00:33:21.600 --> 00:33:22.100
+but it didn't finish in time.
+
+00:33:23.240 --> 00:33:23.480
+Okay, Michael, just to be clear,
+
+00:33:24.720 --> 00:33:25.220
+you've got only 1 minute left.
+
+00:33:27.880 --> 00:33:28.380
+Yes, it's not that difficult.
+
+00:33:30.140 --> 00:33:30.640
+I wanted to integrate highlight.
+
+00:33:32.300 --> 00:33:32.780
+You just go to a web page,
+
+00:33:35.660 --> 00:33:35.800
+highlight stuff, do a right click and then it
+
+00:33:39.320 --> 00:33:39.820
+says save to Emacs. And you saved it to Emacs
+
+00:33:42.500 --> 00:33:42.940
+and it's there inside the node.
+
+00:33:45.400 --> 00:33:45.900
+But no, this 1 is not finished yet.
+
+00:33:47.960 --> 00:33:48.240
+You could do it live but there's no time
+
+00:33:49.540 --> 00:33:50.040
+left. So thank you for watching.
+
+00:33:51.960 --> 00:33:52.180
+Yes, and thank you so much,
+
+00:33:54.000 --> 00:33:54.280
+Michael, for taking the time to present and
+
+00:33:54.960 --> 00:33:55.460
+to answer the questions.
+
+00:33:57.340 --> 00:33:57.540
+The stream is going to move to the next talk
+
+00:34:00.680 --> 00:34:01.080
+in about 45 seconds. It's a talk by Wasem
+
+00:34:02.680 --> 00:34:03.180
+Masa, which I'm very excited about.
+
+00:34:05.740 --> 00:34:06.240
+And other than that, Michael,
+
+00:34:08.239 --> 00:34:08.460
+I'm looking forward to seeing you again next
+
+00:34:10.760 --> 00:34:11.000
+year with new GitHub repositories to share
+
+00:34:12.500 --> 00:34:13.000
+with us. Right? No pressure.
+
+00:34:17.500 --> 00:34:17.900
+And on that note, I wish you a very good day
+
+00:34:19.400 --> 00:34:19.600
+and I'll see you next time,
+
+00:34:21.820 --> 00:34:22.199
+I suppose. Yes, of course.
+
+00:34:24.080 --> 00:34:24.580
+I would like to do it next time again.
+
+00:34:25.679 --> 00:34:26.179
+It's a lot of fun. All right.
+
+00:34:27.280 --> 00:34:27.780
+Okay. Bye-bye, Michael.
+
+00:34:33.580 --> 00:34:34.080
+Bye-bye and thanks. All right.
+
+00:34:35.540 --> 00:34:35.880
+I think, yes. Okay. We finished.
+
+00:34:36.460 --> 00:34:36.600
+So, thank you so much,
+
+00:34:38.199 --> 00:34:38.400
+Michael. I need to get ready for the next
+
+00:34:39.340 --> 00:34:39.840
+talk. So I'll see you later.
+
+00:34:40.920 --> 00:34:41.420
+I'll see you later, sorry.
+
+00:34:45.060 --> 00:34:45.560
+Yes, see you. Bye-bye.
+
+00:34:47.280 --> 00:34:47.560
+You are currently the only person in this
+
+00:34:47.560 --> 00:34:48.060
+conference.
diff --git a/2023/captions/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main--chapters.vtt b/2023/captions/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main--chapters.vtt
new file mode 100644
index 00000000..a61c9cd3
--- /dev/null
+++ b/2023/captions/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main--chapters.vtt
@@ -0,0 +1,20 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:02:06.040
+Introduction
+
+00:02:06.040 --> 00:03:14.919
+Tip about completion frameworks
+
+00:03:14.920 --> 00:05:39.320
+References file overview
+
+00:05:39.320 --> 00:08:02.719
+The Emacs Lisp code
+
+00:08:02.720 --> 00:11:41.539
+Example reference to Elfeed article
+
+00:11:41.540 --> 00:15:04.320
+Searching the references
diff --git a/2023/captions/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main.vtt b/2023/captions/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main.vtt
new file mode 100644
index 00000000..f678c7ed
--- /dev/null
+++ b/2023/captions/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main.vtt
@@ -0,0 +1,808 @@
+WEBVTT captioned by bhavin192, checked by sachac
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:04.940
+Hello, this is Christopher Howard,
+
+00:00:04.940 --> 00:00:06.520
+and welcome to my talk,
+
+00:00:06.520 --> 00:00:08.800
+"Informal Reference Tracking."
+
+00:00:08.800 --> 00:00:10.574
+This is a workflow talk,
+
+00:00:10.574 --> 00:00:12.240
+so I need to explain a little bit about
+
+00:00:12.240 --> 00:00:14.840
+what my needs were.
+
+00:00:14.840 --> 00:00:18.760
+I am not a professional scholar or academic,
+
+00:00:18.760 --> 00:00:20.200
+but there are a number of subjects
+
+00:00:20.200 --> 00:00:21.607
+that I'm interested in,
+
+00:00:21.607 --> 00:00:23.240
+and I occasionally like to write
+
+00:00:23.240 --> 00:00:25.600
+gemlog posts about them.
+
+00:00:25.600 --> 00:00:28.680
+So I needed some way to keep track of references.
+
+00:00:28.680 --> 00:00:32.960
+References to webpage articles, references to books,
+
+00:00:32.960 --> 00:00:37.280
+pages in books, and notes about them.
+
+00:00:37.280 --> 00:00:39.480
+Something that was searchable,
+
+00:00:39.480 --> 00:00:42.440
+but also something that was quick and easy to use,
+
+00:00:42.440 --> 00:00:45.200
+and something that I could set up quickly.
+
+00:00:45.200 --> 00:00:47.360
+And the approach I took, it only took me
+
+00:00:47.360 --> 00:00:49.520
+about an hour or two to figure out
+
+00:00:49.520 --> 00:00:52.160
+how to put it together.
+
+00:00:52.160 --> 00:00:53.840
+I do want to emphasize
+
+00:00:53.840 --> 00:00:56.520
+that there are better ways to do this.
+
+00:00:56.520 --> 00:00:58.960
+I'm not recommending you use my code
+
+00:00:58.960 --> 00:01:02.120
+or follow my exact approach.
+
+00:01:02.120 --> 00:01:05.940
+In particular, what I'm doing was meant to be done
+
+00:01:05.940 --> 00:01:09.240
+with Org's built-in capture
+
+00:01:09.240 --> 00:01:11.800
+and templates functionality,
+
+00:01:11.800 --> 00:01:14.907
+so that's something that's more flexible,
+
+00:01:14.907 --> 00:01:21.440
+programmable, and there's also a lot of add-ins
+
+00:01:21.440 --> 00:01:23.960
+that can be tied into that.
+
+00:01:23.960 --> 00:01:31.320
+For example, tools that allow you to search for,
+
+00:01:31.320 --> 00:01:34.480
+you know, feed in a URL, and it automatically
+
+00:01:34.480 --> 00:01:38.240
+pulls all the reference data for you.
+
+00:01:38.240 --> 00:01:39.760
+And there's tools out there
+
+00:01:39.760 --> 00:01:43.120
+that are really meant for scientific writing,
+
+00:01:43.120 --> 00:01:46.760
+so if you do this professionally,
+
+00:01:46.760 --> 00:01:49.960
+you may need to keep track of dozens of details
+
+00:01:49.960 --> 00:01:51.080
+for each reference
+
+00:01:51.080 --> 00:01:55.320
+and then have some fancy system to generate that
+
+00:01:55.320 --> 00:02:00.800
+into your, or output that into your paper.
+
+00:02:00.800 --> 00:02:02.440
+So there are better systems,
+
+00:02:02.440 --> 00:02:06.040
+but this is what worked for me and what was easy.
+
+NOTE Tip about completion frameworks
+
+00:02:06.040 --> 00:02:11.320
+I do want to emphasize that if you haven't,
+
+00:02:11.320 --> 00:02:14.640
+you really want to learn how to use helm-mode
+
+00:02:14.640 --> 00:02:20.440
+H-E-L-M, or one of the similar systems in Emacs
+
+00:02:20.440 --> 00:02:26.440
+that does fuzzy search on Emacs commands.
+
+00:02:26.440 --> 00:02:29.340
+For example, in Helm here,
+
+00:02:29.340 --> 00:02:39.007
+I input one keychord, and then I just have to remember
+
+00:02:39.007 --> 00:02:40.720
+a few characters of some command,
+
+00:02:40.720 --> 00:02:43.479
+and they don't even have to be right next to each other,
+
+00:02:43.480 --> 00:02:47.640
+like H-O-C will bring up `helm-occur`.
+
+00:02:47.640 --> 00:02:51.360
+That's based on its algorithms
+
+00:02:51.360 --> 00:02:53.000
+of what I most likely meant
+
+00:02:53.000 --> 00:02:55.160
+and the ones that I've used in the past.
+
+00:02:55.160 --> 00:02:57.920
+So it usually brings up the command that I want,
+
+00:02:57.920 --> 00:02:59.579
+or the one that I want
+
+00:02:59.580 --> 00:03:03.080
+is one or two spots away in the entry.
+
+00:03:03.080 --> 00:03:05.074
+That just saves me a lot of time
+
+00:03:05.074 --> 00:03:06.960
+[and] a lot of memorization.
+
+00:03:06.960 --> 00:03:09.120
+So if you haven't learned Helm
+
+00:03:09.120 --> 00:03:14.919
+or a similar system for Emacs, you really want to.
+
+NOTE References file overview
+
+00:03:14.920 --> 00:03:18.240
+So what is my approach?
+
+00:03:18.240 --> 00:03:24.880
+Well, basically, what it comes down to is really
+
+00:03:24.880 --> 00:03:27.307
+fundamentally nothing more than just a list
+
+00:03:27.307 --> 00:03:30.640
+of Org entries in a file.
+
+00:03:30.640 --> 00:03:35.579
+And there's one entry per reference.
+
+00:03:35.580 --> 00:03:37.207
+Fundamentally, that's all it is.
+
+00:03:37.207 --> 00:03:39.207
+But I'll go over the parts.
+
+00:03:39.207 --> 00:03:43.080
+You can see there's the title for the entry,
+
+00:03:43.080 --> 00:03:44.800
+and that's not necessarily
+
+00:03:44.800 --> 00:03:47.400
+the title of the book or the article,
+
+00:03:47.400 --> 00:03:50.840
+but that's my perspective on it,
+
+00:03:50.840 --> 00:03:52.720
+that's what I want to remember about it,
+
+00:03:52.720 --> 00:03:54.560
+and what I'll be looking for later
+
+00:03:54.560 --> 00:03:56.560
+when I do a search on my references.
+
+00:03:56.560 --> 00:04:06.659
+There's also in here the use of Org's tags
+
+00:04:06.660 --> 00:04:08.274
+here to the right of the title,
+
+00:04:08.274 --> 00:04:12.040
+very handy for searching for entries later.
+
+00:04:12.040 --> 00:04:18.160
+I use some Org properties attached to each entry.
+
+00:04:18.160 --> 00:04:21.740
+I automatically add in here an ID
+
+00:04:21.740 --> 00:04:24.074
+that can be useful if you want to
+
+00:04:24.074 --> 00:04:27.800
+link entries together later.
+
+00:04:27.800 --> 00:04:30.400
+I automatically add in here the date
+
+00:04:30.400 --> 00:04:31.840
+that the entry was created,
+
+00:04:31.840 --> 00:04:35.699
+which can be useful to me if things
+
+00:04:35.700 --> 00:04:38.360
+got sorted in a different order at some point,
+
+00:04:38.360 --> 00:04:39.940
+I could still look through
+
+00:04:39.940 --> 00:04:42.507
+the most recent entries that I had made
+
+00:04:42.507 --> 00:04:45.040
+if I wanted to do that for some reason.
+
+00:04:45.040 --> 00:04:48.640
+And sometimes I add in this publication year field
+
+00:04:48.640 --> 00:04:52.720
+with the idea that one day I might want to do
+
+00:04:52.720 --> 00:04:55.840
+a search for entries based on the publication year
+
+00:04:55.840 --> 00:04:57.360
+of the book or the article,
+
+00:04:57.360 --> 00:05:00.774
+say, only to use recent references
+
+00:05:00.774 --> 00:05:03.080
+or something like that.
+
+00:05:03.080 --> 00:05:05.360
+And then down here below the properties
+
+00:05:05.360 --> 00:05:10.080
+is where I paste in the URL to the webpage, or
+
+00:05:10.080 --> 00:05:13.007
+type in the title and author of the book
+
+00:05:13.007 --> 00:05:16.959
+on the pages, maybe the pages that were relevant,
+
+00:05:16.960 --> 00:05:21.640
+the pages of the periodical, or something like that.
+
+00:05:21.640 --> 00:05:23.920
+And I could put anything that I want down here,
+
+00:05:23.920 --> 00:05:25.840
+some other notes about what's important
+
+00:05:25.840 --> 00:05:29.939
+about this article to me.
+
+00:05:29.940 --> 00:05:32.200
+So fundamentally, that's all it is.
+
+00:05:32.200 --> 00:05:35.240
+Of course, I've added in a bit of convenience code
+
+00:05:35.240 --> 00:05:37.080
+to make this go a lot faster
+
+00:05:37.080 --> 00:05:39.320
+rather than typing all this out.
+
+NOTE The Emacs Lisp code
+
+00:05:39.320 --> 00:05:45.879
+For that, I'll switch back to my init.el file.
+
+00:05:45.880 --> 00:05:49.480
+There's really just five functions.
+
+00:05:49.480 --> 00:05:52.840
+The first two here are ones
+
+00:05:52.840 --> 00:05:54.560
+that I've adapted off the Internet.
+
+00:05:54.560 --> 00:05:56.160
+Honestly, I can't remember
+
+00:05:56.160 --> 00:05:58.239
+exactly where that I got them from,
+
+00:05:58.240 --> 00:06:00.240
+but basically, they're just some functions
+
+00:06:00.240 --> 00:06:04.240
+for making a block of text writable or readable.
+
+00:06:04.240 --> 00:06:09.299
+Writable or not writable, I should say.
+
+00:06:09.300 --> 00:06:12.200
+The idea there is that
+
+00:06:12.200 --> 00:06:13.480
+when I'm creating a new entry,
+
+00:06:13.480 --> 00:06:16.307
+I don't want to accidentally delete
+
+00:06:16.307 --> 00:06:18.960
+or write over some earlier entries that I've made.
+
+00:06:18.960 --> 00:06:24.880
+So I use a little bit of Emacs functionality for that.
+
+00:06:24.880 --> 00:06:29.440
+And then here are the three reference functions
+
+00:06:29.440 --> 00:06:32.440
+that I've actually written.
+
+00:06:32.440 --> 00:06:35.040
+Really trivial, basic stuff here.
+
+00:06:35.040 --> 00:06:41.800
+The core of it is the `new-reference` function.
+
+00:06:41.800 --> 00:06:44.840
+Basically, what that does is
+
+00:06:44.840 --> 00:06:47.560
+it opens up the references file,
+
+00:06:47.560 --> 00:06:52.040
+jumps to the end of the reference file,
+
+00:06:52.040 --> 00:06:57.440
+starts a new entry, inserts the asterisk.
+
+00:06:57.440 --> 00:07:01.520
+It jumps back to the previous text,
+
+00:07:01.520 --> 00:07:03.474
+and whatever previous text there is,
+
+00:07:03.474 --> 00:07:04.880
+it makes that read-only.
+
+00:07:04.880 --> 00:07:08.120
+Again, so that I don't accidentally delete that,
+
+00:07:08.120 --> 00:07:10.800
+or cut, or type over it, or something
+
+00:07:10.800 --> 00:07:14.579
+when I'm making a new reference.
+
+00:07:14.580 --> 00:07:17.680
+Then it goes back to the new reference,
+
+00:07:17.680 --> 00:07:21.339
+automatically adds in a unique ID for that,
+
+00:07:21.340 --> 00:07:25.360
+and then automatically stamps it with
+
+00:07:25.360 --> 00:07:28.999
+the date the entry was created — today's date.
+
+00:07:29.000 --> 00:07:32.760
+Now, I've got two other functions here.
+
+00:07:32.760 --> 00:07:34.540
+One is `view-references`,
+
+00:07:34.540 --> 00:07:37.807
+which does nothing but open up the reference file
+
+00:07:37.807 --> 00:07:39.400
+and switch to that buffer
+
+00:07:39.400 --> 00:07:42.539
+if you're not already on it.
+
+00:07:42.540 --> 00:07:45.880
+And then there's one other here, `edit-references`,
+
+00:07:45.880 --> 00:07:50.159
+which does the exact same thing except for
+
+00:07:50.160 --> 00:07:53.560
+it also goes over all the text in the buffer
+
+00:07:53.560 --> 00:07:55.040
+and makes it writable.
+
+00:07:55.040 --> 00:07:58.120
+So if I really do want to edit those other references,
+
+00:07:58.120 --> 00:08:02.719
+I've got a function to quickly make that possible.
+
+NOTE Example reference to Elfeed article
+
+00:08:02.720 --> 00:08:07.499
+Let me give an example of this.
+
+00:08:07.500 --> 00:08:13.979
+I type in here, new reference.
+
+00:08:13.980 --> 00:08:16.440
+Now I've jumped to the end of my references file.
+
+00:08:16.440 --> 00:08:19.080
+See, it's ready to take the title.
+
+00:08:19.080 --> 00:08:21.720
+Well, I guess I need to have something,
+
+00:08:21.720 --> 00:08:23.659
+some content, to put in here.
+
+00:08:23.660 --> 00:08:28.879
+Let's say I was looking through Elfeed,
+
+00:08:28.880 --> 00:08:31.600
+and let's say I found this interesting article
+
+00:08:31.600 --> 00:08:38.219
+about Mars earthquakes.
+
+00:08:38.220 --> 00:08:40.007
+Let's say I open it up [and]
+
+00:08:40.007 --> 00:08:41.159
+I read through the article.
+
+00:08:41.160 --> 00:08:43.840
+First, I'd figure out what it is
+
+00:08:43.840 --> 00:08:47.259
+that I find interesting about this, what it is that
+
+00:08:47.260 --> 00:08:51.579
+I'm going to want to remember and look up later.
+
+00:08:51.580 --> 00:08:57.479
+So I come up with a quick title based on that.
+
+00:08:57.480 --> 00:09:01.899
+Let's go back to the references with `view-reference`.
+
+00:09:01.900 --> 00:09:05.674
+And, let's just call it
+
+00:09:05.674 --> 00:09:13.879
+"Study of Mars Earthquake."
+
+00:09:13.880 --> 00:09:18.199
+Now I'm going to also want to put in some tags.
+
+00:09:18.200 --> 00:09:21.107
+On my system, that's done with
+
+00:09:21.107 --> 00:09:23.639
+Control C, Control Q (`C-c C-q`).
+
+00:09:23.640 --> 00:09:25.520
+And I can put in some tags.
+
+00:09:25.520 --> 00:09:29.160
+I like to go ahead and insert the colons.
+
+00:09:29.160 --> 00:09:30.799
+You can leave those out,
+
+00:09:30.800 --> 00:09:32.560
+but they're going to get added anyway,
+
+00:09:32.560 --> 00:09:36.779
+so I'm in the habit of using them.
+
+00:09:36.780 --> 00:09:41.120
+Let's say we'll call this 'Astronomy' as one tag,
+
+00:09:41.120 --> 00:09:47.059
+and the next tag could be 'Planets'.
+
+00:09:47.060 --> 00:09:48.400
+If I wanted to use a tag
+
+00:09:48.400 --> 00:09:50.400
+that was more than one word in the tag,
+
+00:09:50.400 --> 00:09:53.540
+I'd need to use underscores or something like that.
+
+00:09:53.540 --> 00:10:00.499
+If I wanted a tag that was 'Mars Earthquakes',
+
+00:10:00.500 --> 00:10:05.059
+I could do it like that, but that's kind of silly.
+
+00:10:05.060 --> 00:10:08.659
+Now I try not to be too clever with the tags.
+
+00:10:08.660 --> 00:10:10.600
+I don't spend a lot of time thinking about them.
+
+00:10:10.600 --> 00:10:13.107
+I just come up with some general buckets
+
+00:10:13.107 --> 00:10:15.019
+to throw things in.
+
+00:10:15.020 --> 00:10:16.880
+You can see the tags were added there,
+
+00:10:16.880 --> 00:10:19.379
+to the right of the title.
+
+00:10:19.380 --> 00:10:23.399
+Now you can see down here under PROPERTIES,
+
+00:10:23.400 --> 00:10:25.320
+the ID has already been added,
+
+00:10:25.320 --> 00:10:27.040
+the Date_Created has been added.
+
+00:10:27.040 --> 00:10:30.200
+Sometimes, I'll like to put in the publication year,
+
+00:10:30.200 --> 00:10:38.139
+and for that, I use the `org-set-property` command.
+
+00:10:38.140 --> 00:10:43.439
+Publication_Year, this year in this case.
+
+00:10:43.440 --> 00:10:46.679
+And then I just need to paste in the URL.
+
+00:10:46.680 --> 00:10:48.080
+I do that manually.
+
+00:10:48.080 --> 00:10:53.480
+I use Org's bracket format for that.
+
+00:10:53.480 --> 00:10:57.639
+So I start that, go back to the article,
+
+00:10:57.640 --> 00:11:02.099
+copy the URL, paste that in.
+
+00:11:02.100 --> 00:11:04.480
+If I want, I can add it in the title
+
+00:11:04.480 --> 00:11:07.459
+with the second pair of brackets here.
+
+00:11:07.460 --> 00:11:14.200
+Don't have to, but often like to.
+
+00:11:14.200 --> 00:11:18.560
+Close that off, and there it is.
+
+00:11:18.560 --> 00:11:20.879
+That was really it.
+
+00:11:20.880 --> 00:11:22.120
+I add a return on the end here,
+
+00:11:22.120 --> 00:11:26.619
+just so the next entry comes out with the right spacing.
+
+00:11:26.620 --> 00:11:28.307
+But really, that's it,
+
+00:11:28.307 --> 00:11:31.000
+and typically, when I'm not explaining it,
+
+00:11:31.000 --> 00:11:37.499
+that only takes 20 seconds or so, or 30 seconds.
+
+00:11:37.500 --> 00:11:41.539
+Pretty quick. Pretty easy.
+
+NOTE Searching the references
+
+00:11:41.540 --> 00:11:45.539
+What about searching later?
+
+00:11:45.540 --> 00:11:50.474
+Well, often the easiest thing is just do a simple,
+
+00:11:50.474 --> 00:11:54.639
+boring incremental search.
+
+00:11:54.640 --> 00:11:55.880
+I usually know roughly
+
+00:11:55.880 --> 00:11:58.499
+what it is that I'm looking for already.
+
+00:11:58.500 --> 00:12:02.379
+If I was looking for that wildflower article,
+
+00:12:02.380 --> 00:12:06.000
+I could just do an incremental search for wildflowers
+
+00:12:06.000 --> 00:12:07.920
+and jump through that. It's pretty simple.
+
+00:12:07.920 --> 00:12:13.200
+Not very impressive, but honestly, most of the time
+
+00:12:13.200 --> 00:12:16.439
+that gets me there pretty quick.
+
+00:12:16.440 --> 00:12:20.360
+Sometimes I find it useful to do an Occur search,
+
+00:12:20.360 --> 00:12:23.240
+more specifically a Helm Occur search.
+
+00:12:23.240 --> 00:12:31.259
+If I use the `helm-occur` command,
+
+00:12:31.260 --> 00:12:34.680
+then I like to use this to search by tag.
+
+00:12:34.680 --> 00:12:36.760
+That's where it really becomes handy.
+
+00:12:36.760 --> 00:12:39.207
+Let's say I want to narrow it down
+
+00:12:39.207 --> 00:12:42.640
+to all my astronomy references
+
+00:12:42.640 --> 00:12:50.039
+and then narrow it down a little bit more to planets.
+
+00:12:50.040 --> 00:12:54.119
+I can put spaces in between and it still works.
+
+00:12:54.120 --> 00:12:57.199
+You can see here in one window,
+
+00:12:57.200 --> 00:13:00.239
+it gives me the bottom window there.
+
+00:13:00.240 --> 00:13:03.479
+It's giving…, just because of the way
+
+00:13:03.480 --> 00:13:06.440
+the tags are formatted with the title, it gives me
+
+00:13:06.440 --> 00:13:09.519
+a list of all the titles that have those tags.
+
+00:13:09.520 --> 00:13:11.520
+And I usually find what I want pretty quick
+
+00:13:11.520 --> 00:13:13.400
+by just tapping through here.
+
+00:13:13.400 --> 00:13:16.499
+Once I find the one that I think I want,
+
+00:13:16.500 --> 00:13:24.139
+I press enter, and now I'm focused on just that entry.
+
+00:13:24.140 --> 00:13:26.960
+There is some advanced functionality, I believe,
+
+00:13:26.960 --> 00:13:29.960
+that I used in the past where you could search
+
+00:13:29.960 --> 00:13:33.119
+based on the property fields.
+
+00:13:33.120 --> 00:13:37.880
+So do something like search for publication —
+
+00:13:37.880 --> 00:13:42.439
+the most recent publications in the last 10 years.
+
+00:13:42.440 --> 00:13:46.200
+There's some kind of advanced syntax for that,
+
+00:13:46.200 --> 00:13:48.219
+which I used once or twice.
+
+00:13:48.220 --> 00:13:51.400
+Honestly, I use that so infrequently
+
+00:13:51.400 --> 00:13:54.840
+that I have to go back to the Emacs manual
+
+00:13:54.840 --> 00:13:57.739
+and figure it out each time, and figure out again
+
+00:13:57.740 --> 00:13:59.880
+how I did that the last time.
+
+00:13:59.880 --> 00:14:02.000
+But since I do it only once
+
+00:14:02.000 --> 00:14:06.679
+every three or four months, it's not a problem.
+
+00:14:06.680 --> 00:14:11.519
+So I'm not going to go over that today.
+
+00:14:11.520 --> 00:14:16.479
+That's pretty much it in a nutshell.
+
+00:14:16.480 --> 00:14:19.974
+Again, the code that I wrote, this specific approach
+
+00:14:19.974 --> 00:14:24.279
+is not really what I'm recommending.
+
+00:14:24.280 --> 00:14:31.160
+But here it is if you really do want to use it.
+
+00:14:31.160 --> 00:14:36.239
+Maybe I can make a link to the URL
+
+00:14:36.240 --> 00:14:40.059
+and share that in the chat room or something.
+
+00:14:40.060 --> 00:14:46.759
+But I consider this to be trivial code.
+
+00:14:46.760 --> 00:14:49.799
+So just use that if you want to use it.
+
+00:14:49.800 --> 00:14:53.440
+I should be signing off here now.
+
+00:14:53.440 --> 00:14:58.259
+I should be in the chat room, in the IRC chat room,
+
+00:14:58.260 --> 00:15:01.920
+or you can reach out to me by email if you'd like.
+
+00:15:01.920 --> 00:15:04.320
+Thank you very much.
diff --git a/2023/captions/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main--chapters.vtt b/2023/captions/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main--chapters.vtt
new file mode 100644
index 00000000..1179c72e
--- /dev/null
+++ b/2023/captions/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main--chapters.vtt
@@ -0,0 +1,44 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:21.560
+Intro
+
+00:00:21.560 --> 00:01:02.560
+Diagrams
+
+00:01:03.320 --> 00:02:51.360
+eev
+
+00:02:51.360 --> 00:08:52.560
+Another figure
+
+00:08:52.560 --> 00:10:44.240
+eev-wconfig, magic, and black boxes
+
+00:10:44.240 --> 00:16:10.960
+Lua
+
+00:16:10.960 --> 00:19:19.822
+Object orientation in Lua
+
+00:19:19.823 --> 00:20:31.000
+My init file
+
+00:20:31.000 --> 00:25:28.280
+LaTeX and LuaLaTeX
+
+00:25:28.280 --> 00:26:30.879
+Manim
+
+00:26:30.880 --> 00:31:03.240
+Generating diagrams from REPLs
+
+00:31:03.240 --> 00:39:03.200
+Parsers
+
+00:39:03.200 --> 00:50:04.160
+ELpeg1.lua
+
+00:50:04.160 --> 00:59:26.040
+Building lists
diff --git a/2023/captions/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main.vtt b/2023/captions/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main.vtt
new file mode 100644
index 00000000..723fc45a
--- /dev/null
+++ b/2023/captions/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main.vtt
@@ -0,0 +1,3324 @@
+WEBVTT captioned by eduardo
+Kind: captions
+Language: en-GB
+
+NOTE Intro
+
+00:00:00.000 --> 00:00:03.079
+Hi! My name is Eduardo Ochs
+
+00:00:03.080 --> 00:00:05.519
+and the title of this talk is: REPLs
+
+00:00:05.520 --> 00:00:09.399
+in strange places - Lua, LateX, LPeg, LPegRex,
+
+00:00:09.400 --> 00:00:12.119
+and TikZ. I'm the author of an Emacs
+
+00:00:12.120 --> 00:00:14.879
+package called eev, and this is a talk
+
+00:00:14.880 --> 00:00:18.479
+at the EmacsConf 2023, that is happening in
+
+00:00:18.480 --> 00:00:22.519
+December 2023, at the internets.
+
+NOTE Diagrams
+
+00:00:22.520 --> 00:00:23.079
+This is one of the
+
+00:00:23.080 --> 00:00:24.919
+examples of diagrams that we are
+
+00:00:24.920 --> 00:00:27.639
+going to see - let me show how I generate
+
+00:00:27.640 --> 00:00:30.599
+it... one second,
+
+00:00:30.600 --> 00:00:35.799
+I have to use a smaller font here...
+
+00:00:35.800 --> 00:00:39.159
+this is a file called ParseTree2.lua...
+
+00:00:39.160 --> 00:00:42.919
+let me go back to this block of tests again...
+
+00:00:42.920 --> 00:00:43.879
+and now if I run
+
+00:00:43.880 --> 00:00:47.759
+this...
+
+00:00:47.760 --> 00:00:50.159
+we get these outputs here at the
+
+00:00:50.160 --> 00:00:53.959
+right, and then in this line here it
+
+00:00:53.960 --> 00:00:58.119
+generates a PDF, and if I type f8 here it
+
+00:00:58.120 --> 00:01:03.919
+shows the PDF in the lower right window.
+
+NOTE eev
+
+00:01:03.920 --> 00:01:06.079
+Let me start by explaining
+
+00:01:06.080 --> 00:01:09.839
+briefly what is eev.
+
+00:01:09.840 --> 00:01:12.239
+First: it is something that
+
+00:01:12.240 --> 00:01:14.759
+appeared by accident in the mid-90s - I
+
+00:01:14.760 --> 00:01:16.799
+explained this story in my
+
+00:01:16.800 --> 00:01:20.159
+presentation at the EmacsConf 2019...
+
+00:01:20.160 --> 00:01:23.159
+it's a package... it's an Emacs
+
+00:01:23.160 --> 00:01:26.519
+package that is part of ELPA... it has at
+
+00:01:26.520 --> 00:01:29.679
+least 10 users - those are the ones
+
+00:01:29.680 --> 00:01:32.559
+that I know by name...
+
+00:01:32.560 --> 00:01:38.439
+eev means `emacs-execute-verbosely'...
+
+00:01:38.440 --> 00:01:40.959
+eev is something that treats eval-last-sexp
+
+00:01:40.960 --> 00:01:43.999
+as the central feature of Emacs...
+
+00:01:44.000 --> 00:01:45.599
+eev blurs the distinction between
+
+00:01:45.600 --> 00:01:48.919
+programmers and users, and it replaces
+
+00:01:48.920 --> 00:01:51.679
+the slogan "users should not be forced to
+
+00:01:51.680 --> 00:01:53.679
+see Lisp", that is something that Richard
+
+00:01:53.680 --> 00:01:57.559
+Stallman told me once, by "users should see
+
+00:01:57.560 --> 00:02:00.479
+Lisp instead of buttons" and "new users
+
+00:02:00.480 --> 00:02:03.999
+should see Lisp in the first 5 minutes"...
+
+00:02:04.000 --> 00:02:05.279
+I'm going to show
+
+00:02:05.280 --> 00:02:08.959
+some examples of that soon.
+
+00:02:08.960 --> 00:02:11.959
+Eev uses code in comments a lot,
+
+00:02:11.960 --> 00:02:15.119
+and also tests in comments...
+
+00:02:15.120 --> 00:02:17.679
+I changed my way of presenting it
+
+00:02:17.680 --> 00:02:19.679
+and it became very REPL-centric
+
+00:02:19.680 --> 00:02:22.319
+in the last few years, in the
+
+00:02:22.320 --> 00:02:24.399
+sense that I start by explaining its
+
+00:02:24.400 --> 00:02:28.679
+main features by its support for REPLs...
+
+00:02:28.680 --> 00:02:31.079
+eev supposes
+
+00:02:31.080 --> 00:02:32.639
+that we want to keep
+
+00:02:32.640 --> 00:02:35.199
+executable notes of everything - I'm also
+
+00:02:35.200 --> 00:02:37.159
+going to show examples of this in a
+
+00:02:37.160 --> 00:02:40.479
+second... eev has lots of "videos for
+
+00:02:40.480 --> 00:02:43.559
+people who hate videos", and it tries to
+
+00:02:43.560 --> 00:02:46.159
+do everything with very little magic and
+
+00:02:46.160 --> 00:02:48.839
+without black boxes - I'm going to explain
+
+00:02:48.840 --> 00:02:50.319
+many of these things very soon.
+
+NOTE Another figure
+
+00:02:50.320 --> 00:02:52.799
+This is a figure that that I'm going
+
+00:02:52.800 --> 00:02:57.119
+to show in details soon, that is
+
+00:02:57.120 --> 00:02:59.959
+about something important about Lua...
+
+00:02:59.960 --> 00:03:03.959
+the font is very bad now, so let me
+
+00:03:03.960 --> 00:03:07.559
+change the font... the figure is this one...
+
+00:03:07.560 --> 00:03:08.239
+and...
+
+00:03:08.240 --> 00:03:12.519
+what most people do when they
+
+00:03:12.520 --> 00:03:14.479
+visit a file with something
+
+00:03:14.480 --> 00:03:16.479
+interesting on it is that they just go
+
+00:03:16.480 --> 00:03:18.679
+there and they set a bookmark there, or
+
+00:03:18.680 --> 00:03:21.959
+they put the position in a register...
+
+00:03:21.960 --> 00:03:26.959
+but I prefer to keep
+
+00:03:26.960 --> 00:03:29.199
+links to everything that is interesting
+
+00:03:29.200 --> 00:03:32.119
+as elisp hyperlinks. So, for example, this is
+
+00:03:32.120 --> 00:03:35.079
+an elisp hyperlink to a file, that goes
+
+00:03:35.080 --> 00:03:37.599
+to this anchor here, and to this string
+
+00:03:37.600 --> 00:03:41.439
+after this anchor... this is a variant
+
+00:03:41.440 --> 00:03:44.239
+that opens that file in the window
+
+00:03:44.240 --> 00:03:45.479
+at the right -
+
+00:03:45.480 --> 00:03:48.879
+here... and this is
+
+00:03:48.880 --> 00:03:53.279
+a sexp that changes the font. I
+
+00:03:53.280 --> 00:03:56.679
+have a command with a very short name
+
+00:03:56.680 --> 00:03:59.439
+that does that, but I
+
+00:03:59.440 --> 00:04:02.959
+prefer to keep that as a one-liner.
+
+00:04:02.960 --> 00:04:06.919
+About the videos... we can see
+
+00:04:06.920 --> 00:04:10.079
+the list of first-class videos of eev
+
+00:04:10.080 --> 00:04:14.759
+by executing this, M-x find-1stclassvideos,
+
+00:04:14.760 --> 00:04:18.639
+or by running this alias here, M-x 1c...
+
+00:04:18.640 --> 00:04:20.679
+and then what we see is this...
+
+00:04:20.680 --> 00:04:24.239
+the first sexp here
+
+00:04:24.240 --> 00:04:26.959
+regenerates this buffer - so we can make a
+
+00:04:26.960 --> 00:04:29.399
+mess here and then run this and the
+
+00:04:29.400 --> 00:04:33.519
+original buffer is regenerated again in
+
+00:04:33.520 --> 00:04:34.959
+a clean way...
+
+00:04:34.960 --> 00:04:36.919
+each of these things here
+
+00:04:36.920 --> 00:04:40.879
+opens a buffer with information about
+
+00:04:40.880 --> 00:04:43.999
+a video... let me take a specific
+
+00:04:44.000 --> 00:04:49.159
+example here... this video here is about
+
+00:04:49.160 --> 00:04:51.039
+one of the ancestors of this talk, that
+
+00:04:51.040 --> 00:04:53.479
+is a library that I wrote
+
+00:04:53.480 --> 00:04:58.479
+for creating diagrams in LaTeX using
+
+00:04:58.480 --> 00:05:03.519
+a package called Pict2e using REPLs...
+
+00:05:03.520 --> 00:05:03.959
+anyway...
+
+00:05:03.960 --> 00:05:06.599
+the thing is that if we
+
+00:05:06.600 --> 00:05:11.599
+run a sexp like this one and we don't
+
+00:05:11.600 --> 00:05:14.679
+have a local copy of the video eev
+
+00:05:14.680 --> 00:05:17.599
+will try to download to the local copy -
+
+00:05:17.600 --> 00:05:20.119
+and instead of doing that by asking
+
+00:05:20.120 --> 00:05:21.719
+something like "do you want me
+
+00:05:21.720 --> 00:05:23.999
+to download the local copy? Blah
+
+00:05:24.000 --> 00:05:27.999
+blah blah blah blah..." it simply opens a
+
+00:05:28.000 --> 00:05:30.719
+buffer like this, I mean, if we don't
+
+00:05:30.720 --> 00:05:33.359
+have a local copy yet it will open a
+
+00:05:33.360 --> 00:05:36.359
+buffer like this one, in which these
+
+00:05:36.360 --> 00:05:39.199
+things here in comments are links to the
+
+00:05:39.200 --> 00:05:43.839
+documentation... I mean, this thing here
+
+00:05:43.840 --> 00:05:46.159
+explains the idea of local copies
+
+00:05:46.160 --> 00:05:48.759
+of files from the internet...
+
+00:05:48.760 --> 00:05:54.759
+there are more details here, and here...
+
+00:05:54.760 --> 00:05:57.159
+and this is a script that we
+
+00:05:57.160 --> 00:06:00.519
+can execute line by line, so instead of
+
+00:06:00.520 --> 00:06:02.359
+this script being hidden behind the
+
+00:06:02.360 --> 00:06:06.119
+button that we just press after a
+
+00:06:06.120 --> 00:06:08.399
+question like "Do you want me to do
+
+00:06:08.400 --> 00:06:10.239
+something blah blah blah? Yes or no?"
+
+00:06:10.240 --> 00:06:13.639
+the script is visible here and we can
+
+00:06:13.640 --> 00:06:17.599
+execute it step by step... it creates a
+
+00:06:17.600 --> 00:06:20.799
+terminal with a shell here in the
+
+00:06:20.800 --> 00:06:24.799
+right window, and when we type f8 in
+
+00:06:24.800 --> 00:06:26.839
+one of these lines here the lines are
+
+00:06:26.840 --> 00:06:29.119
+sent... (...) so this is going
+
+00:06:29.120 --> 00:06:31.759
+to download a copy of the video... the
+
+00:06:31.760 --> 00:06:36.639
+wget says that I already have a copy of
+
+00:06:36.640 --> 00:06:39.479
+the video and its subtitles... and so on.
+
+00:06:39.480 --> 00:06:43.879
+And after getting a copy of the video
+
+00:06:43.880 --> 00:06:48.159
+we can run this sexp here and it displays
+
+00:06:48.160 --> 00:06:49.919
+the video.
+
+00:06:49.920 --> 00:06:55.399
+I said that eev has lots of
+
+00:06:55.400 --> 00:06:58.399
+"videos for people who hate videos", and
+
+00:06:58.400 --> 00:06:59.679
+the idea is that very few
+
+00:06:59.680 --> 00:07:02.039
+people are going to watch the videos in
+
+00:07:02.040 --> 00:07:06.559
+real time... and most of the people that
+
+00:07:06.560 --> 00:07:08.279
+I know - or: most of the people that
+
+00:07:08.280 --> 00:07:10.639
+are interested in eev in some
+
+00:07:10.640 --> 00:07:13.479
+way... they are going to watch just
+
+00:07:13.480 --> 00:07:16.319
+small sections of the video, and most of
+
+00:07:16.320 --> 00:07:17.559
+the time they're just going to read the
+
+00:07:17.560 --> 00:07:20.799
+subtitles of the video. So, for each
+
+00:07:20.800 --> 00:07:23.479
+one of the videos we have a page
+
+00:07:23.480 --> 00:07:27.039
+about the video... let me see if I
+
+00:07:27.040 --> 00:07:29.999
+have internet here... yes. This is a
+
+00:07:30.000 --> 00:07:32.879
+page...
+
+00:07:32.880 --> 00:07:38.999
+and usually these pages have a link
+
+00:07:39.000 --> 00:07:40.759
+to another page that
+
+00:07:40.760 --> 00:07:43.239
+has all the subtitles of the
+
+00:07:43.240 --> 00:07:46.639
+video... uh, wherever... in this one
+
+00:07:46.640 --> 00:07:48.319
+it's not so visible...
+
+00:07:48.320 --> 00:07:50.599
+but anyway, there are several
+
+00:07:50.600 --> 00:07:52.479
+ways of accessing the subtitles of the
+
+00:07:52.480 --> 00:07:56.239
+video, and one of the ways is by running
+
+00:07:56.240 --> 00:07:57.519
+this sexp here,
+
+00:07:57.520 --> 00:08:01.559
+that opens a file in Lua that is
+
+00:08:01.560 --> 00:08:03.319
+what I use to generate the
+
+00:08:03.320 --> 00:08:04.479
+subtitles.
+
+00:08:04.480 --> 00:08:08.519
+Anyway... by the way, these things... each
+
+00:08:08.520 --> 00:08:12.039
+one of these things here is a hyperlink
+
+00:08:12.040 --> 00:08:15.239
+to a position of the video, so if I type
+
+00:08:15.240 --> 00:08:18.879
+this the right way it goes to that
+
+00:08:18.880 --> 00:08:24.119
+position. Anyway, let me go back...
+
+00:08:24.120 --> 00:08:27.279
+also, the tutorials of eev... the
+
+00:08:27.280 --> 00:08:31.359
+"intros" of eev, that start with "find-" and
+
+00:08:31.360 --> 00:08:34.279
+end with "-intro", they have lots of blocks
+
+00:08:34.280 --> 00:08:39.039
+that say "[Video links:]", like this one, and
+
+00:08:39.040 --> 00:08:41.359
+these blocks have links to positions
+
+00:08:41.360 --> 00:08:43.879
+in videos, and if we don't have a local
+
+00:08:43.880 --> 00:08:47.919
+copy of the video yet the thing shows
+
+00:08:47.920 --> 00:08:49.799
+us a script that lets us download the
+
+00:08:49.800 --> 00:08:50.599
+local copy.
+
+00:08:50.600 --> 00:08:54.399
+Anyway, I said that I was going
+
+00:08:54.400 --> 00:08:58.759
+to explain what I mean by "magic" and
+
+00:08:58.760 --> 00:08:59.639
+"black boxes".
+
+00:08:59.640 --> 00:09:03.119
+this is something that I've been
+
+00:09:03.120 --> 00:09:05.119
+trying to explain for a long time, and I
+
+00:09:05.120 --> 00:09:07.319
+think that I got a very good explanation
+
+00:09:07.320 --> 00:09:09.839
+about that in a video that I made
+
+00:09:09.840 --> 00:09:13.199
+about something called eev-wconfig, that
+
+00:09:13.200 --> 00:09:14.999
+is a tool for configuring eev on
+
+00:09:15.000 --> 00:09:19.199
+Windows without "magic" - without buttons
+
+00:09:19.200 --> 00:09:22.479
+that do things without explaining what
+
+00:09:22.480 --> 00:09:22.879
+they're doing.
+
+00:09:22.880 --> 00:09:25.799
+This is a part of the subtitles
+
+00:09:25.800 --> 00:09:28.039
+of the video, let me read that...
+
+00:09:28.040 --> 00:09:32.319
+eev-wconfig is an attempt to solve the
+
+00:09:32.320 --> 00:09:35.039
+problem of how to install these things
+
+00:09:35.040 --> 00:09:37.279
+on Windows both without magic and with
+
+00:09:37.280 --> 00:09:37.879
+very little
+
+00:09:37.880 --> 00:09:41.679
+magic. Remember this slogan: "any
+
+00:09:41.680 --> 00:09:44.359
+sufficiently advanced technology is
+
+00:09:44.360 --> 00:09:45.399
+indistinguishable from
+
+00:09:45.400 --> 00:09:49.679
+magic". Here in this video I'm going to
+
+00:09:49.680 --> 00:09:52.199
+use the term magic as a shorthand
+
+00:09:52.200 --> 00:09:55.239
+for sufficiently advanced technology,
+
+00:09:55.240 --> 00:09:57.799
+that is something that is complex and
+
+00:09:57.800 --> 00:10:00.199
+non-obvious and that is
+
+00:10:00.200 --> 00:10:02.119
+indistinguishable from magic in the
+
+00:10:02.120 --> 00:10:04.119
+sense of being almost impossible to
+
+00:10:04.120 --> 00:10:07.439
+understand. And I'm also going to use a
+
+00:10:07.440 --> 00:10:10.279
+the term "black box" as a near-synonym for
+
+00:10:10.280 --> 00:10:13.079
+magic, and sometimes the term
+
+00:10:13.080 --> 00:10:16.039
+"black box" is more convenient even though
+
+00:10:16.040 --> 00:10:17.919
+it's a bit longer - it has more
+
+00:10:17.920 --> 00:10:20.159
+letters - because when I use the term
+
+00:10:20.160 --> 00:10:22.599
+black box it invites us to use
+
+00:10:22.600 --> 00:10:25.479
+expressions like "opening the black box",
+
+00:10:25.480 --> 00:10:26.639
+and I'm going to use that
+
+00:10:26.640 --> 00:10:28.039
+expression a lot.
+
+00:10:28.040 --> 00:10:37.399
+Now let me try to explain what is...
+
+00:10:37.400 --> 00:10:41.039
+sorry, let me change the font...
+
+00:10:41.040 --> 00:10:45.479
+what is Lua. Lua is a minimalistic
+
+00:10:45.480 --> 00:10:49.999
+language, in the sense of
+
+00:10:50.000 --> 00:10:53.679
+"batteries not included"... it uses
+
+00:10:53.680 --> 00:10:55.999
+associative tables for most of its data
+
+00:10:56.000 --> 00:10:56.799
+structures...
+
+00:10:56.800 --> 00:11:00.239
+and it is so minimalistic
+
+00:11:00.240 --> 00:11:03.999
+that its default print function, when
+
+00:11:04.000 --> 00:11:06.679
+we tell... when we create an associative
+
+00:11:06.680 --> 00:11:09.559
+table and we ask it to print...
+
+00:11:09.560 --> 00:11:13.319
+when we ask "print" to print an
+
+00:11:13.320 --> 00:11:15.719
+associative table it just prints the
+
+00:11:15.720 --> 00:11:17.879
+address of the table. Here are some
+
+00:11:17.880 --> 00:11:21.599
+examples... here is a table, and when we
+
+00:11:21.600 --> 00:11:24.679
+ask "print" to print it it just says
+
+00:11:24.680 --> 00:11:26.839
+that it's the table at this address here.
+
+00:11:26.840 --> 00:11:30.119
+So, one of things that that most
+
+00:11:30.120 --> 00:11:32.919
+people do when they start using Lua is
+
+00:11:32.920 --> 00:11:35.239
+that either they download a package with
+
+00:11:35.240 --> 00:11:37.079
+a pretty-printing function or they write
+
+00:11:37.080 --> 00:11:39.359
+their own pretty-printing functions. My
+
+00:11:39.360 --> 00:11:41.519
+own pretty-printing function is called
+
+00:11:41.520 --> 00:11:46.159
+PP, with upper case letters, and it works
+
+00:11:46.160 --> 00:11:47.679
+like this...
+
+00:11:47.680 --> 00:11:50.279
+and it prints associative tables
+
+00:11:50.280 --> 00:11:53.839
+in a way like this. It says that for
+
+00:11:53.840 --> 00:11:57.479
+the key 1 the the value associated to
+
+00:11:57.480 --> 00:12:00.039
+it is 2, for the key 2 the value is
+
+00:12:00.040 --> 00:12:04.959
+3, and for the key 3 the value is 5.
+
+00:12:04.960 --> 00:12:11.079
+When I started using Lua one of my
+
+00:12:11.080 --> 00:12:13.839
+favorite languages was also a language
+
+00:12:13.840 --> 00:12:15.639
+that used associative tables a lot -
+
+00:12:15.640 --> 00:12:16.839
+it was called Icon...
+
+00:12:16.840 --> 00:12:21.039
+and I had to write my own
+
+00:12:21.040 --> 00:12:23.839
+pretty-printing functions for Icon, so
+
+00:12:23.840 --> 00:12:27.319
+I just had to port my pretty-printing
+
+00:12:27.320 --> 00:12:29.719
+functions to Lua... and my first
+
+00:12:29.720 --> 00:12:32.239
+version looked at something like this... it
+
+00:12:32.240 --> 00:12:35.999
+just had some some global functions... lots
+
+00:12:36.000 --> 00:12:39.639
+of them, actually...
+
+00:12:39.640 --> 00:12:42.279
+and after a while I rewrote it, and I
+
+00:12:42.280 --> 00:12:44.599
+rewrote it again, and again, and again, and
+
+00:12:44.600 --> 00:12:47.279
+this is one of the versions of that,
+
+00:12:47.280 --> 00:12:49.879
+is not even the default at this
+
+00:12:49.880 --> 00:12:51.559
+point...
+
+00:12:51.560 --> 00:12:54.119
+"Tos" is for "to string"...
+
+00:12:54.120 --> 00:12:58.279
+and this is a demo...
+
+00:12:58.280 --> 00:13:01.919
+it's very modular, so it's easy to replace
+
+00:13:01.920 --> 00:13:05.639
+parts of it, or to toggle flags... and this
+
+00:13:05.640 --> 00:13:08.119
+is an example. If I try to print the
+
+00:13:08.120 --> 00:13:09.999
+table of methods for a certain
+
+00:13:10.000 --> 00:13:14.359
+class... I will need a smaller font...
+
+00:13:14.360 --> 00:13:16.799
+it prints the table like this, with the
+
+00:13:16.800 --> 00:13:20.039
+names of the methods and then links to
+
+00:13:20.040 --> 00:13:21.719
+the source code of the functions...
+
+00:13:21.720 --> 00:13:25.399
+these links only make sense in Emacs and
+
+00:13:25.400 --> 00:13:25.959
+in eev...
+
+00:13:25.960 --> 00:13:30.359
+and when we run a link like this one...
+
+00:13:30.360 --> 00:13:32.039
+it shows the source code in the
+
+00:13:32.040 --> 00:13:35.079
+window at the right. So, for some
+
+00:13:35.080 --> 00:13:37.879
+functions the source code is three lines,
+
+00:13:37.880 --> 00:13:39.999
+for other ones it's one line... and
+
+00:13:40.000 --> 00:13:44.879
+whatever. Anyway, let me go
+
+00:13:44.880 --> 00:13:47.039
+back... Lua can be used in many different
+
+00:13:47.040 --> 00:13:50.359
+styles... most people hate other people's
+
+00:13:50.360 --> 00:13:53.839
+styles... when I started using it in the
+
+00:13:53.840 --> 00:13:57.679
+year 2000 I learned most of the basic
+
+00:13:57.680 --> 00:13:59.839
+language in a single day - it was very
+
+00:13:59.840 --> 00:14:02.119
+similar to things that I was already
+
+00:14:02.120 --> 00:14:05.639
+using... and then I rewrote the the mini-
+
+00:14:05.640 --> 00:14:10.279
+language that I was using to
+
+00:14:10.280 --> 00:14:13.559
+generate the HTML for my pages
+
+00:14:13.560 --> 00:14:16.199
+in Lua... actually I had to rewrite it
+
+00:14:16.200 --> 00:14:18.079
+many times, but the first version I
+
+00:14:18.080 --> 00:14:21.519
+certainly did in my first weeks or first
+
+00:14:21.520 --> 00:14:22.519
+months using Lua...
+
+00:14:22.520 --> 00:14:27.279
+In the beginning I was just using
+
+00:14:27.280 --> 00:14:30.159
+it for writing programs that either
+
+00:14:30.160 --> 00:14:32.759
+didn't take any input at all - because
+
+00:14:32.760 --> 00:14:35.079
+the input was already in the source file -
+
+00:14:35.080 --> 00:14:40.599
+or that worked as Unix programs,
+
+00:14:40.600 --> 00:14:43.199
+that would read files
+
+00:14:43.200 --> 00:14:45.279
+and process these files in some way
+
+00:14:45.280 --> 00:14:48.999
+and output something.
+
+00:14:49.000 --> 00:14:52.319
+I mentioned the "basic language" here...
+
+00:14:52.320 --> 00:14:54.719
+I only learned how to use closures,
+
+00:14:54.720 --> 00:14:58.479
+metatables, and coroutines many years later...
+
+00:14:58.480 --> 00:15:02.399
+in the beginning, when I started using Lua,
+
+00:15:02.400 --> 00:15:04.199
+it didn't have a package manager...
+
+00:15:04.200 --> 00:15:06.799
+it appeared later, it is called
+
+00:15:06.800 --> 00:15:10.119
+Luarocks... it has had this package
+
+00:15:10.120 --> 00:15:13.279
+manager for several years, most
+
+00:15:13.280 --> 00:15:15.719
+of the rocks for Luarocks are poorly
+
+00:15:15.720 --> 00:15:18.959
+documented and hacker-unfriendly,
+
+00:15:18.960 --> 00:15:21.199
+so you can't rely just on the
+
+00:15:21.200 --> 00:15:23.679
+documentation and you can't rely just on the
+
+00:15:23.680 --> 00:15:26.719
+source code, because, I mean... if you are
+
+00:15:26.720 --> 00:15:29.159
+a genius of course you can, but for
+
+00:15:29.160 --> 00:15:31.479
+people who are either lazy, or dumb, or
+
+00:15:31.480 --> 00:15:34.279
+whatever, like me, or unfocused...
+
+00:15:34.280 --> 00:15:36.759
+the source code is hard to
+
+00:15:36.760 --> 00:15:38.959
+understand and hard to tinker with.
+
+00:15:38.960 --> 00:15:43.319
+Some rocks are excellent. The
+
+00:15:43.320 --> 00:15:46.599
+best rocks are well documented
+
+00:15:46.600 --> 00:15:48.719
+but they are hacker-unfriendly
+
+00:15:48.720 --> 00:15:50.999
+in a sense that I hope that
+
+00:15:51.000 --> 00:15:52.879
+I'll be able to explain soon.
+
+00:15:52.880 --> 00:15:54.999
+The best rocks use local
+
+00:15:55.000 --> 00:15:58.799
+variables and metatables a lot -
+
+00:15:58.800 --> 00:16:02.519
+so if you are beginner
+
+00:16:02.520 --> 00:16:03.799
+learning Lua you're not going to
+
+00:16:03.800 --> 00:16:06.159
+understand what their source code do...
+
+00:16:06.160 --> 00:16:08.519
+they use lots of dirty tricks.
+
+NOTE Object orientation in Lua
+
+00:16:08.520 --> 00:16:12.479
+Let me talk a bit about object
+
+00:16:12.480 --> 00:16:14.959
+orientation in Lua. It can be done in
+
+00:16:14.960 --> 00:16:15.879
+many ways...
+
+00:16:15.880 --> 00:16:18.999
+the main book about Lua, called
+
+00:16:19.000 --> 00:16:21.439
+"Programming in Lua", by one of the authors
+
+00:16:21.440 --> 00:16:23.959
+of the language, Roberto Ierusalimschy,
+
+00:16:23.960 --> 00:16:26.679
+presents several ways of doing
+
+00:16:26.680 --> 00:16:29.279
+object orientation in Lua... I hated all
+
+00:16:29.280 --> 00:16:33.199
+of these ways - and also the ways that I
+
+00:16:33.200 --> 00:16:34.519
+tried from the rocks.
+
+00:16:34.520 --> 00:16:38.559
+And then I wrote my own way
+
+00:16:38.560 --> 00:16:40.639
+of doing object orientation in Lua... it's
+
+00:16:40.640 --> 00:16:43.559
+very minimalistic, it's in this file here,
+
+00:16:43.560 --> 00:16:48.679
+eoo.lua... the main code is just this five
+
+00:16:48.680 --> 00:16:49.639
+lines here...
+
+00:16:49.640 --> 00:16:53.439
+and here's an example of how it works.
+
+00:16:53.440 --> 00:16:58.439
+Here we define the class Vector,
+
+00:16:58.440 --> 00:17:02.719
+with some metamethods...
+
+00:17:02.720 --> 00:17:05.959
+this metamethod here will tell Lua
+
+00:17:05.960 --> 00:17:08.319
+what to do when the
+
+00:17:08.320 --> 00:17:12.639
+user asks to add two vectors, this one
+
+00:17:12.640 --> 00:17:15.919
+here tells Lua what to do when the user
+
+00:17:15.920 --> 00:17:18.479
+asks Lua to convert a vector to a string,
+
+00:17:18.480 --> 00:17:21.439
+and... whatever, this one is
+
+00:17:21.440 --> 00:17:24.039
+something that I'm going to explain in a
+
+00:17:24.040 --> 00:17:27.479
+second. So, here we create a vector with
+
+00:17:27.480 --> 00:17:30.279
+these coordinates, 3 and 4... here we create
+
+00:17:30.280 --> 00:17:33.319
+another Vector... if we "print" here then Lua
+
+00:17:33.320 --> 00:17:36.439
+uses this function here, in the __tostring...
+
+00:17:36.440 --> 00:17:39.759
+if we add the two vectors it uses this
+
+00:17:39.760 --> 00:17:43.479
+function here, in the __add metamethod, and
+
+00:17:43.480 --> 00:17:45.359
+if we run the method :norm...
+
+00:17:45.360 --> 00:17:49.959
+it is defined here, in the table __index.
+
+00:17:49.960 --> 00:17:57.999
+Anyway...
+
+00:17:58.000 --> 00:18:02.439
+Even this thing being so small I used
+
+00:18:02.440 --> 00:18:04.719
+to forget how its innards worked all
+
+00:18:04.720 --> 00:18:08.119
+the time. Actually I always forget how
+
+00:18:08.120 --> 00:18:09.759
+things work and I have to remember them
+
+00:18:09.760 --> 00:18:12.479
+somehow... and I have to have
+
+00:18:12.480 --> 00:18:15.959
+tricks for remembering, and tricks for
+
+00:18:15.960 --> 00:18:18.719
+summarizing things, and diagrams, and so
+
+00:18:18.720 --> 00:18:22.199
+on. And every time that I forgot how this
+
+00:18:22.200 --> 00:18:24.799
+thing worked I went back to the
+
+00:18:24.800 --> 00:18:26.879
+source code, and then I looked at the
+
+00:18:26.880 --> 00:18:29.039
+diagrams... or, of course, in the
+
+00:18:29.040 --> 00:18:31.719
+first times I had to draw the diagrams...
+
+00:18:31.720 --> 00:18:35.239
+and I run the examples, and of course in
+
+00:18:35.240 --> 00:18:36.479
+in the beginning I thought that the code
+
+00:18:36.480 --> 00:18:39.119
+was clear and my examples were very
+
+00:18:39.120 --> 00:18:41.559
+brief, and so I had to rewrite the
+
+00:18:41.560 --> 00:18:44.719
+examples many times until they became,
+
+00:18:44.720 --> 00:18:45.639
+let's say...
+
+00:18:45.640 --> 00:18:47.759
+perfect.
+
+00:18:47.760 --> 00:18:52.599
+I was saying that Lua can be used in
+
+00:18:52.600 --> 00:18:56.359
+many ways, and in my way of using Lua - in
+
+00:18:56.360 --> 00:18:59.439
+my favorite way - everything can be
+
+00:18:59.440 --> 00:19:02.159
+inspected and modified from REPLs,
+
+00:19:02.160 --> 00:19:06.319
+like we can do in Emacs and in SmallTalk,
+
+00:19:06.320 --> 00:19:08.519
+or sort of. So, in my
+
+00:19:08.520 --> 00:19:10.239
+favorite way of using Lua there's no
+
+00:19:10.240 --> 00:19:12.679
+security at all, everything can be
+
+00:19:12.680 --> 00:19:14.919
+changed at all times.
+
+00:19:14.920 --> 00:19:19.119
+Of course most people hate that...
+
+NOTE My init file
+
+00:19:19.120 --> 00:19:22.599
+My init file has lots of classes... by the
+
+00:19:22.600 --> 00:19:26.079
+way, instead of keeping many small files
+
+00:19:26.080 --> 00:19:29.639
+with many things I put lots of stuff
+
+00:19:29.640 --> 00:19:31.279
+in just one big init file.
+
+00:19:31.280 --> 00:19:34.599
+My init file has lots of classes,
+
+00:19:34.600 --> 00:19:37.959
+and lots of global functions, and
+
+00:19:37.960 --> 00:19:41.799
+lots of cruft - and people hate that,
+
+00:19:41.800 --> 00:19:44.559
+of course. This is an example...
+
+00:19:44.560 --> 00:19:46.439
+this is the index at the top
+
+00:19:46.440 --> 00:19:48.359
+of my init file,
+
+00:19:48.360 --> 00:19:53.119
+the classes start here, and then
+
+00:19:53.120 --> 00:19:59.119
+we have some functions, and
+
+00:19:59.120 --> 00:20:01.199
+then we have functions that load
+
+00:20:01.200 --> 00:20:03.839
+certain packages, and then we have... cruft.
+
+00:20:03.840 --> 00:20:04.919
+Whatever.
+
+00:20:04.920 --> 00:20:08.119
+Most people think that my style
+
+00:20:08.120 --> 00:20:10.279
+of using Lua is dirty, and dangerous...
+
+00:20:10.280 --> 00:20:12.959
+and they wouldn't touch my Lua code
+
+00:20:12.960 --> 00:20:15.479
+with a 10 feet pole... but most of the
+
+00:20:15.480 --> 00:20:18.599
+things that I'm going to present here in
+
+00:20:18.600 --> 00:20:23.199
+this presentation are ideas that should
+
+00:20:23.200 --> 00:20:28.159
+be easy to port to other environments
+
+00:20:28.160 --> 00:20:32.279
+and other languages, especially the
+
+00:20:32.280 --> 00:20:35.279
+diagrams... so the code is not so important.
+
+NOTE LaTeX and LuaLaTeX
+
+00:20:35.280 --> 00:20:39.039
+Now let me talk a bit about LuaLaTeX,
+
+00:20:39.040 --> 00:20:41.359
+that is LaTeX with a Lua interpreter
+
+00:20:41.360 --> 00:20:44.559
+embedded inside, and two ways
+
+00:20:44.560 --> 00:20:48.839
+of generating pictures in LaTeX: TikZ,
+
+00:20:48.840 --> 00:20:54.439
+that is very famous, and Pict2e, that is not
+
+00:20:54.440 --> 00:20:57.359
+very famous and that is very low level...
+
+00:20:57.360 --> 00:21:02.359
+and I think that not many people use it.
+
+00:21:02.360 --> 00:21:04.119
+I said before that when I
+
+00:21:04.120 --> 00:21:06.919
+learned Lua I realized that it was
+
+00:21:06.920 --> 00:21:09.199
+very good for writing little
+
+00:21:09.200 --> 00:21:14.919
+languages. I was doing my PhD at the
+
+00:21:14.920 --> 00:21:19.839
+time and typesetting the diagrams for
+
+00:21:19.840 --> 00:21:24.039
+my PhD thesis was very boring, so
+
+00:21:24.040 --> 00:21:29.879
+one of the things that I did was that I
+
+00:21:29.880 --> 00:21:34.439
+created a little language for typesetting
+
+00:21:34.440 --> 00:21:36.359
+the diagrams for me. it was
+
+00:21:36.360 --> 00:21:38.879
+called Dednat because initially
+
+00:21:38.880 --> 00:21:41.039
+it only generated diagrams for
+
+00:21:41.040 --> 00:21:43.759
+Natural Deduction, and then it had
+
+00:21:43.760 --> 00:21:45.119
+several versions...
+
+00:21:45.120 --> 00:21:46.679
+these are the slides for my
+
+00:21:46.680 --> 00:21:52.159
+presentation about Dednat6... "Dednat6 is
+
+00:21:52.160 --> 00:21:56.159
+an extensible semi-preprocessor for
+
+00:21:56.160 --> 00:22:01.159
+LuaLaTeX that understands diagrams in
+
+00:22:01.160 --> 00:22:05.359
+ASCII art"... in the sense that when I have
+
+00:22:05.360 --> 00:22:11.399
+a .tex file that has this, and when
+
+00:22:11.400 --> 00:22:13.279
+Dednat6 is loaded,
+
+00:22:13.280 --> 00:22:15.039
+when I give the right commands
+
+00:22:15.040 --> 00:22:19.559
+Dednat6 interprets this block here as
+
+00:22:19.560 --> 00:22:22.559
+something that defines this
+
+00:22:22.560 --> 00:22:28.239
+diagram... oops, sorry, it interprets this
+
+00:22:28.240 --> 00:22:30.599
+diagram here, this diagram in
+
+00:22:30.600 --> 00:22:34.879
+comments here, as something that defines
+
+00:22:34.880 --> 00:22:39.759
+a diagram called foo... a deduction called
+
+00:22:39.760 --> 00:22:41.439
+foo, and it generates this code here...
+
+00:22:41.440 --> 00:22:44.239
+so that we can just invoke
+
+00:22:44.240 --> 00:22:45.519
+the definition of the
+
+00:22:45.520 --> 00:22:47.719
+deduction by typing \ded{foo}.
+
+00:22:47.720 --> 00:22:50.759
+And Dednat6 also
+
+00:22:50.760 --> 00:22:57.159
+supports another language for typesetting
+
+00:22:57.160 --> 00:22:59.639
+bidimensional diagrams with
+
+00:22:59.640 --> 00:23:05.399
+arrows and stuff for category Theory and
+
+00:23:05.400 --> 00:23:08.519
+blah blah blah... the specifications of
+
+00:23:08.520 --> 00:23:12.039
+these diagrams look like this...
+
+00:23:12.040 --> 00:23:14.559
+here is a... sorry, here is a very good
+
+00:23:14.560 --> 00:23:16.719
+example, this is a huge diagram...
+
+00:23:16.720 --> 00:23:18.599
+sorry, one second...
+
+00:23:18.600 --> 00:23:20.399
+so, the source code that generates
+
+00:23:20.400 --> 00:23:25.119
+this diagram here is just this thing at
+
+00:23:25.120 --> 00:23:32.039
+the left, so it's very visual... we can
+
+00:23:32.040 --> 00:23:35.679
+typeset the diagram in ASCII art here and
+
+00:23:35.680 --> 00:23:38.759
+then in this part here we tell how
+
+00:23:38.760 --> 00:23:41.279
+the nodes are to be joined, which
+
+00:23:41.280 --> 00:23:43.799
+arrows have to to have annotations, and
+
+00:23:43.800 --> 00:23:45.039
+so on...
+
+00:23:45.040 --> 00:23:46.799
+and this language is extensible in
+
+00:23:46.800 --> 00:23:48.679
+the sense that... uh, where's that...
+
+00:23:48.680 --> 00:23:52.559
+here: comments that start with "%:"
+
+00:23:52.560 --> 00:23:54.119
+are interpreted as
+
+00:23:54.120 --> 00:23:56.079
+definitions for tree diagrams,
+
+00:23:56.080 --> 00:23:58.559
+lines that start with "%D"
+
+00:23:58.560 --> 00:24:00.639
+define 2D diagrams with arrows and
+
+00:24:00.640 --> 00:24:04.279
+stuff, and lines that start with "%L"
+
+00:24:04.280 --> 00:24:06.759
+contain blocks of Lua code
+
+00:24:06.760 --> 00:24:09.479
+that we can use to extend the interpreter
+
+00:24:09.480 --> 00:24:10.439
+on-the-fly...
+
+00:24:10.440 --> 00:24:12.679
+anyway, here are some recent
+
+00:24:12.680 --> 00:24:15.319
+examples of diagrams that I used
+
+00:24:15.320 --> 00:24:19.839
+Dednat6 to typeset... this diagram
+
+00:24:19.840 --> 00:24:21.919
+here was generated by this
+
+00:24:21.920 --> 00:24:22.879
+specification here...
+
+00:24:22.880 --> 00:24:27.239
+and this diagram here with the
+
+00:24:27.240 --> 00:24:30.719
+curved arrows was generated by this
+
+00:24:30.720 --> 00:24:32.719
+specification here.
+
+00:24:32.720 --> 00:24:39.079
+So, Dednat6 was very easy to extend,
+
+00:24:39.080 --> 00:24:41.879
+and at some point I started to use it
+
+00:24:41.880 --> 00:24:44.679
+to generate diagrams using Pict2e -
+
+00:24:44.680 --> 00:24:47.359
+mainly for the classes that I give
+
+00:24:47.360 --> 00:24:50.079
+at the University... I teach mathematics and
+
+00:24:50.080 --> 00:24:57.239
+whatever... in a bad place. Whatever...
+
+00:24:57.240 --> 00:25:00.039
+Let me show an animation... here is a
+
+00:25:00.040 --> 00:25:02.479
+diagram that I generated with Dednat6,
+
+00:25:02.480 --> 00:25:06.319
+and it is a flip book animation, like... we
+
+00:25:06.320 --> 00:25:09.279
+type PgUp and PgDn and we go
+
+00:25:09.280 --> 00:25:11.119
+to the next page of the book and to the
+
+00:25:11.120 --> 00:25:12.439
+previous page of the book...
+
+00:25:12.440 --> 00:25:16.279
+and here is the source code that generates
+
+00:25:16.280 --> 00:25:19.159
+that. This source code is not very visual,
+
+00:25:19.160 --> 00:25:22.559
+so it's quite clumsy to edit that
+
+00:25:22.560 --> 00:25:27.519
+diagram directly in the .tex file like
+
+00:25:27.520 --> 00:25:28.079
+that...
+
+NOTE Manim
+
+00:25:28.080 --> 00:25:30.199
+These diagrams were inspired
+
+00:25:30.200 --> 00:25:33.039
+by something called my Manim, that...
+
+00:25:33.040 --> 00:25:37.559
+I forgot the name of the guy, but
+
+00:25:37.560 --> 00:25:41.479
+it's a guy that makes many videos about
+
+00:25:41.480 --> 00:25:44.839
+Mathematics, and he created this library
+
+00:25:44.840 --> 00:25:48.599
+called Manim for generating his
+
+00:25:48.600 --> 00:25:51.839
+animations, and other people adapted
+
+00:25:51.840 --> 00:25:55.919
+his library to make it more accessible...
+
+00:25:55.920 --> 00:25:59.359
+I tried to learn it, but
+
+00:25:59.360 --> 00:26:01.199
+each animation, even an animation
+
+00:26:01.200 --> 00:26:03.679
+that has very few frames... each
+
+00:26:03.680 --> 00:26:07.319
+animation took ages to render, so it
+
+00:26:07.320 --> 00:26:11.159
+wasn't fun... and animations in PDFs can
+
+00:26:11.160 --> 00:26:13.639
+be rendered in seconds. So these
+
+00:26:13.640 --> 00:26:18.679
+things were fun for me, because my laptop
+
+00:26:18.680 --> 00:26:24.359
+is very very slow, and my Manim was not fun.
+
+NOTE Generating diagrams from REPLs
+
+00:26:24.360 --> 00:26:27.359
+Anyway, writing code like this
+
+00:26:27.360 --> 00:26:32.719
+inside a .tex file was not very
+
+00:26:32.720 --> 00:26:35.519
+fun because it was hard to
+
+00:26:35.520 --> 00:26:38.719
+debug... so in 2022 I started to play
+
+00:26:38.720 --> 00:26:41.319
+with ways of generating these
+
+00:26:41.320 --> 00:26:43.839
+diagrams from REPLs, and I found a
+
+00:26:43.840 --> 00:26:47.319
+way for Pict2e and a way for TikZ...
+
+00:26:47.320 --> 00:26:50.159
+each one of these ways became a video...
+
+00:26:50.160 --> 00:26:53.679
+if you go to the list of first-class
+
+00:26:53.680 --> 00:26:57.719
+videos of eev you're going to see
+
+00:26:57.720 --> 00:26:59.919
+that there's a video about Pict2e here
+
+00:26:59.920 --> 00:27:03.399
+here and a video about TikZ...
+
+00:27:03.400 --> 00:27:05.759
+here you have some some information
+
+00:27:05.760 --> 00:27:09.839
+like length, an explanation, etc...
+
+00:27:09.840 --> 00:27:11.719
+and here are the pages for these videos.
+
+00:27:11.720 --> 00:27:15.999
+My page about the video about Pict2e
+
+00:27:16.000 --> 00:27:20.079
+looks like this, it has some diagrams...
+
+00:27:20.080 --> 00:27:23.919
+whatever... and this one is much
+
+00:27:23.920 --> 00:27:26.679
+nicer, and a lot of people
+
+00:27:26.680 --> 00:27:30.599
+watched that video... I mean, I think
+
+00:27:30.600 --> 00:27:33.719
+that 250 people watched it - for me that's
+
+00:27:33.720 --> 00:27:35.599
+a million of people...
+
+00:27:35.600 --> 00:27:39.159
+and this video is about how to
+
+00:27:39.160 --> 00:27:44.079
+extract diagrams from the manual... from
+
+00:27:44.080 --> 00:27:46.599
+the TikZ manual and how to run those
+
+00:27:46.600 --> 00:27:49.759
+examples in a REPL and modify
+
+00:27:49.760 --> 00:27:53.159
+them bit by bit... this is a a
+
+00:27:53.160 --> 00:27:57.439
+screenshot... but let me go back.
+
+00:27:57.440 --> 00:28:00.959
+At that point these things were just
+
+00:28:00.960 --> 00:28:03.239
+prototypes, the code was not very nice...
+
+00:28:03.240 --> 00:28:07.519
+and in this year I wrote... I was able
+
+00:28:07.520 --> 00:28:12.399
+to unify those two ways of generating PDFs,
+
+00:28:12.400 --> 00:28:16.039
+the one for TikZ and the one for Pict2e,
+
+00:28:16.040 --> 00:28:18.719
+and I unified them with many other
+
+00:28:18.720 --> 00:28:20.879
+things that generated diagrams.
+
+00:28:20.880 --> 00:28:24.279
+The basis of these things is
+
+00:28:24.280 --> 00:28:29.319
+something called Show2.lua... I'm not going
+
+00:28:29.320 --> 00:28:35.759
+to show its details now, but its
+
+00:28:35.760 --> 00:28:39.079
+extension that generates TikZ code
+
+00:28:39.080 --> 00:28:43.039
+is just this, so we can specify a
+
+00:28:43.040 --> 00:28:45.799
+diagram with just a block like this,
+
+00:28:45.800 --> 00:28:49.079
+and then uh if we
+
+00:28:49.080 --> 00:28:54.239
+run :show00() it returns a string
+
+00:28:54.240 --> 00:28:56.199
+that is just the body... the inner
+
+00:28:56.200 --> 00:29:00.279
+body of the .tex file, if we run this we
+
+00:29:00.280 --> 00:29:02.999
+see the whole .tex file, and if we run
+
+00:29:03.000 --> 00:29:05.119
+this we save the .tex file and we
+
+00:29:05.120 --> 00:29:08.119
+compile the .tex file to generate a PDF...
+
+00:29:08.120 --> 00:29:10.959
+and if we run this we show the PDF in
+
+00:29:10.960 --> 00:29:14.239
+the lower right window.
+
+00:29:14.240 --> 00:29:17.759
+And that's the same thing for all
+
+00:29:17.760 --> 00:29:20.199
+my recent programs that generate
+
+00:29:20.200 --> 00:29:22.439
+PDFs - they are all
+
+00:29:22.440 --> 00:29:26.199
+integrated... here is the one that...
+
+00:29:26.200 --> 00:29:29.359
+the basis for all my modules that generate
+
+00:29:29.360 --> 00:29:30.719
+diagrams with Pict2e...
+
+00:29:30.720 --> 00:29:34.879
+its demos are not very interesting,
+
+00:29:34.880 --> 00:29:36.799
+so let me show some demos of
+
+00:29:36.800 --> 00:29:39.759
+extensions that do interesting things...
+
+00:29:39.760 --> 00:29:45.319
+so, this is a diagram that I created
+
+00:29:45.320 --> 00:29:47.479
+by editing it in a REPL...
+
+00:29:47.480 --> 00:29:51.279
+I create several Pict objects here...
+
+00:29:51.280 --> 00:29:54.479
+and if I execute this it
+
+00:29:54.480 --> 00:29:59.959
+compiles an object, generates a PDF, and
+
+00:29:59.960 --> 00:30:04.759
+if I tap this... here is the PDF.
+
+00:30:04.760 --> 00:30:07.599
+And if I just ask Lua to
+
+00:30:07.600 --> 00:30:10.079
+display what is "pux", here,
+
+00:30:10.080 --> 00:30:15.719
+it shows the source code in Pict2e
+
+00:30:15.720 --> 00:30:17.999
+of the diagram... and the
+
+00:30:18.000 --> 00:30:20.959
+nice thing is that it is indented, so
+
+00:30:20.960 --> 00:30:23.599
+it's easy to debug the Pict2e code.
+
+00:30:23.600 --> 00:30:25.919
+If anyone is interested the
+
+00:30:25.920 --> 00:30:28.639
+module that does the tricks for
+
+00:30:28.640 --> 00:30:31.879
+indentation is very easy to understand...
+
+00:30:31.880 --> 00:30:35.959
+it has lots of tests and test blocks,
+
+00:30:35.960 --> 00:30:38.599
+and I think that its data
+
+00:30:38.600 --> 00:30:42.079
+structures are easy to understand.
+
+00:30:42.080 --> 00:30:44.359
+Anyway... here is another
+
+00:30:44.360 --> 00:30:51.359
+example. The :show() is
+
+00:30:51.360 --> 00:30:56.439
+here... it generates a 3D diagram.
+
+NOTE Parsers
+
+00:30:56.440 --> 00:31:06.279
+Now let me talk about parsers and
+
+00:31:06.280 --> 00:31:09.559
+REPLs in VERY strange places... I mean,
+
+00:31:09.560 --> 00:31:13.359
+using REPLs to build parsers step by step
+
+00:31:13.360 --> 00:31:17.959
+and" replacing parts by more complex
+
+00:31:17.960 --> 00:31:23.039
+parts. So, I said that Lua is very
+
+00:31:23.040 --> 00:31:28.279
+minimalistic, and everybody knows that
+
+00:31:28.280 --> 00:31:30.759
+implementations of regular expressions
+
+00:31:30.760 --> 00:31:32.479
+are big and complex..
+
+00:31:32.480 --> 00:31:34.679
+so, instead of coming with
+
+00:31:34.680 --> 00:31:37.439
+full regular expressions Lua comes with
+
+00:31:37.440 --> 00:31:39.879
+something called "patterns" and a
+
+00:31:39.880 --> 00:31:43.839
+library function called "string.match".
+
+00:31:43.840 --> 00:31:44.599
+Here is
+
+00:31:44.600 --> 00:31:50.319
+a copy of the part of the manual that
+
+00:31:50.320 --> 00:31:53.399
+explains the syntax... a part of the
+
+00:31:53.400 --> 00:31:57.159
+syntax of of patterns... here's how
+
+00:31:57.160 --> 00:31:59.279
+string.match is described in the
+
+00:31:59.280 --> 00:32:03.199
+manual - it's just this... "looks for
+
+00:32:03.200 --> 00:32:05.359
+the first match of pattern in the string
+
+00:32:05.360 --> 00:32:08.039
+as blah blah blah"... and then we have to
+
+00:32:08.040 --> 00:32:10.159
+go to the other section of the menual
+
+00:32:10.160 --> 00:32:11.479
+that explains patterns.
+
+00:32:11.480 --> 00:32:20.079
+Lua patterns are so simple,
+
+00:32:20.080 --> 00:32:23.159
+so limited, that they don't even
+
+00:32:23.160 --> 00:32:26.519
+have the the alternation operator...
+
+00:32:26.520 --> 00:32:29.759
+here is how it is described in the
+
+00:32:29.760 --> 00:32:31.599
+elisp manual -
+
+00:32:31.600 --> 00:32:36.039
+backslash-pipe specifies
+
+00:32:36.040 --> 00:32:40.359
+an alternative, blah blah blah.
+
+00:32:40.360 --> 00:32:42.879
+When we want to to build more
+
+00:32:42.880 --> 00:32:45.319
+complex... regular expressions,
+
+00:32:45.320 --> 00:32:49.199
+patterns, grammars, etc... we have to use
+
+00:32:49.200 --> 00:32:52.679
+an external library for that... no,
+
+00:32:52.680 --> 00:32:56.279
+sorry, a library that is external
+
+00:32:56.280 --> 00:32:58.239
+but that was written by one of the
+
+00:32:58.240 --> 00:33:00.879
+authors of Lua itself. This library
+
+00:33:00.880 --> 00:33:05.879
+is called Lpeg, and its manual says...
+
+00:33:05.880 --> 00:33:09.599
+"Lpeg is a new pattern matching library for
+
+00:33:09.600 --> 00:33:12.039
+Lua based on Parsing Expression Grammars
+
+00:33:12.040 --> 00:33:18.759
+(PEGs)". The manual is very terse, I
+
+00:33:18.760 --> 00:33:21.559
+found it incredibly hard to read... it
+
+00:33:21.560 --> 00:33:25.439
+doesn't have any diagrams - it has some
+
+00:33:25.440 --> 00:33:29.759
+examples, though... and the Lua Wiki
+
+00:33:29.760 --> 00:33:33.879
+has a big page called Lpeg Tutorial
+
+00:33:33.880 --> 00:33:35.359
+with lots of examples...
+
+00:33:35.360 --> 00:33:38.879
+but it it also doesn't have
+
+00:33:38.880 --> 00:33:41.199
+diagrams and I found some things
+
+00:33:41.200 --> 00:33:42.719
+incredibly hard to understand.
+
+00:33:42.720 --> 00:33:45.879
+For example, this is something that is in
+
+00:33:45.880 --> 00:33:48.879
+the the manual of Lpeg that I saw and I
+
+00:33:48.880 --> 00:33:51.639
+thought: "Wow, great! This makes all sense
+
+00:33:51.640 --> 00:33:53.159
+and is going to be very useful!"...
+
+00:33:53.160 --> 00:33:54.199
+it's a way to to build
+
+00:33:54.200 --> 00:33:57.199
+grammars that can be recursive,
+
+00:33:57.200 --> 00:34:01.359
+and they sort of can encode BNF
+
+00:34:01.360 --> 00:34:03.439
+grammars... we just have to translate the
+
+00:34:03.440 --> 00:34:06.479
+BNF a bit to get rid of some
+
+00:34:06.480 --> 00:34:08.079
+recursions and to translate them to
+
+00:34:08.080 --> 00:34:08.999
+something else.
+
+00:34:09.000 --> 00:34:11.919
+And the manual also has some things
+
+00:34:11.920 --> 00:34:15.159
+that I thought: "Oh, no! I don't have any
+
+00:34:15.160 --> 00:34:18.359
+idea of what this thing does"... and in fact
+
+00:34:18.360 --> 00:34:20.399
+I saw these things for the first
+
+00:34:20.400 --> 00:34:22.359
+time more than 10 years ago and they
+
+00:34:22.360 --> 00:34:26.079
+only started to make sense one year ago.
+
+00:34:26.080 --> 00:34:30.519
+One example is group captures.
+
+00:34:30.520 --> 00:34:36.359
+Lpeg also comes with a
+
+00:34:36.360 --> 00:34:38.719
+module called the Re module... let me
+
+00:34:38.720 --> 00:34:41.719
+pronounce as it in Portuguese - the Re
+
+00:34:41.720 --> 00:34:45.759
+module... its manual says: "The Re
+
+00:34:45.760 --> 00:34:48.199
+module (provided by the file re.lua in the
+
+00:34:48.200 --> 00:34:51.159
+distribution) supports a somewhat conventional
+
+00:34:51.160 --> 00:34:56.239
+regular expression syntax for pattern usage
+
+00:34:56.240 --> 00:34:58.679
+within lpeg"... and
+
+00:34:58.680 --> 00:35:03.519
+this is a quick reference... this
+
+00:35:03.520 --> 00:35:06.319
+thing is very brief, it has some nice
+
+00:35:06.320 --> 00:35:08.919
+examples but it's hard to understand anyway...
+
+00:35:08.920 --> 00:35:13.199
+and here are some comments about
+
+00:35:13.200 --> 00:35:17.279
+my attempts to learn Re.lua. This is
+
+00:35:17.280 --> 00:35:20.639
+a class... in this case it's a very small
+
+00:35:20.640 --> 00:35:24.839
+class... this file implements a :pm()
+
+00:35:24.840 --> 00:35:28.679
+method - I'm going to show examples of
+
+00:35:28.680 --> 00:35:32.239
+other :pm() methods very soon - so, this is
+
+00:35:32.240 --> 00:35:35.799
+a :pm() method for Re.lua that lets us
+
+00:35:35.800 --> 00:35:38.719
+compare the syntax of Lua patterns, Lpeg,
+
+00:35:38.720 --> 00:35:43.999
+and Re... let's see this example here... so,
+
+00:35:44.000 --> 00:35:47.319
+if we run this it loads my version of
+
+00:35:47.320 --> 00:35:52.799
+lpeg... no, sorry, my version of lpegrex...
+
+00:35:52.800 --> 00:35:57.119
+and it shows that when we apply
+
+00:35:57.120 --> 00:36:01.199
+the :pm() method to this Lua pattern, this
+
+00:36:01.200 --> 00:36:04.879
+lpeg pattern, and this Re pattern
+
+00:36:04.880 --> 00:36:07.999
+they all give the same results. So we can
+
+00:36:08.000 --> 00:36:10.799
+use this thing... this kind of thing here
+
+00:36:10.800 --> 00:36:14.119
+to show how to translate from Lua
+
+00:36:14.120 --> 00:36:16.519
+patterns, that are familiar because
+
+00:36:16.520 --> 00:36:18.519
+they're similar to regular expressions,
+
+00:36:18.520 --> 00:36:20.199
+only weaker...
+
+00:36:20.200 --> 00:36:24.799
+to lpeg, that is super weird
+
+00:36:24.800 --> 00:36:27.759
+and to Re, that is not so weird.
+
+00:36:27.760 --> 00:36:35.159
+Anyway, the comment says that in 2012
+
+00:36:35.160 --> 00:36:37.519
+I had a project that needed a
+
+00:36:37.520 --> 00:36:40.479
+precedence passer that could parse
+
+00:36:40.480 --> 00:36:43.239
+arithmetical expressions with the right
+
+00:36:43.240 --> 00:36:46.639
+precedences... and at that point I was
+
+00:36:46.640 --> 00:36:49.919
+still struggling with pure lpeg, and I
+
+00:36:49.920 --> 00:36:52.359
+couldn't do much with it, so I tried to
+
+00:36:52.360 --> 00:36:55.519
+learn Re.lua instead, and I wrote this old
+
+00:36:55.520 --> 00:36:56.319
+class here...
+
+00:36:56.320 --> 00:37:01.039
+that allowed me to use a preprocessor
+
+00:37:01.040 --> 00:37:03.279
+on patterns for Lua. And the thing is that
+
+00:37:03.280 --> 00:37:04.879
+with this preprocessor I could
+
+00:37:04.880 --> 00:37:07.839
+specify precedence grammars using this
+
+00:37:07.840 --> 00:37:11.879
+thing here, that worked, but was super
+
+00:37:11.880 --> 00:37:15.999
+clumsy... and I gave up after a few attempts.
+
+00:37:16.000 --> 00:37:21.879
+and in 2022 I heard about something
+
+00:37:21.880 --> 00:37:23.239
+called lpegrex,
+
+00:37:23.240 --> 00:37:29.799
+that was a... a kind of extension or Re,
+
+00:37:29.800 --> 00:37:32.879
+and it was much more powerful than re.lua,
+
+00:37:32.880 --> 00:37:34.919
+but after a while I realized that it
+
+00:37:34.920 --> 00:37:37.639
+had the same defects as re.lua...
+
+00:37:37.640 --> 00:37:40.839
+and let me explain that, because
+
+00:37:40.840 --> 00:37:44.439
+it has all to do with the things about
+
+00:37:44.440 --> 00:37:48.039
+black boxes and magic that I told in the
+
+00:37:48.040 --> 00:37:52.919
+beginning. Both... I mean, sorry, neither
+
+00:37:52.920 --> 00:37:57.199
+re.lua or lpegrex had some features that
+
+00:37:57.200 --> 00:38:00.799
+I needed... they didn't let us explore...
+
+00:38:00.800 --> 00:38:03.679
+sorry, they received a pattern that was
+
+00:38:03.680 --> 00:38:06.839
+specified as a string, and it converted
+
+00:38:06.840 --> 00:38:09.679
+that into an lpeg pattern, but it didn't
+
+00:38:09.680 --> 00:38:12.559
+let us explore the the lpeg patterns
+
+00:38:12.560 --> 00:38:15.159
+that it generated...
+
+00:38:15.160 --> 00:38:18.759
+their code was written in a way
+
+00:38:18.760 --> 00:38:21.319
+that was REPL-unfriendly - I
+
+00:38:21.320 --> 00:38:24.279
+couldn't modify parts of the code
+
+00:38:24.280 --> 00:38:28.399
+bit by bit in a REPL and try to change
+
+00:38:28.400 --> 00:38:31.719
+the code without changing the
+
+00:38:31.720 --> 00:38:34.199
+original file... the code was very
+
+00:38:34.200 --> 00:38:36.839
+hard to explore, to hack, and to extend -
+
+00:38:36.840 --> 00:38:39.159
+in my opinion... the documentation was not
+
+00:38:39.160 --> 00:38:43.319
+very clear... and I sent one or two messages
+
+00:38:43.320 --> 00:38:47.159
+to the the developer of lpegrex and...
+
+00:38:47.160 --> 00:38:50.759
+he was too busy to help me. He
+
+00:38:50.760 --> 00:38:53.959
+answered it very briefly, and, uh, to be
+
+00:38:53.960 --> 00:38:56.599
+honest I felt... rejected. I felt that I
+
+00:38:56.600 --> 00:38:58.679
+wasn't doing anything interesting...
+
+00:38:58.680 --> 00:39:03.399
+whatever, whatever...
+
+00:39:03.400 --> 00:39:09.239
+So, in 2022 I was trying to learn lpegrex
+
+00:39:09.240 --> 00:39:11.559
+because I was thinking that it would
+
+00:39:11.560 --> 00:39:13.719
+solve my problems - but it didn't...
+
+00:39:13.720 --> 00:39:16.479
+it didn't have the features that I needed,
+
+00:39:16.480 --> 00:39:20.919
+it was hard to extend, hard to explore,
+
+00:39:20.920 --> 00:39:23.279
+and hard to debug, and I
+
+00:39:23.280 --> 00:39:25.039
+decided to rewrite it in a more
+
+00:39:25.040 --> 00:39:30.639
+hacker-friendly way - in the sense that...
+
+00:39:30.640 --> 00:39:33.759
+was modular, and I could replace any
+
+00:39:33.760 --> 00:39:35.399
+part of the module from a REPL...
+
+NOTE ELpeg1.lua
+
+00:39:35.400 --> 00:39:43.679
+My version of it was called ELpeg1.lua...
+
+00:39:43.680 --> 00:39:47.679
+and I decided that in my version I
+
+00:39:47.680 --> 00:39:49.639
+wouldn't have the part that
+
+00:39:49.640 --> 00:39:54.879
+receives a grammar specified as a string
+
+00:39:54.880 --> 00:39:57.519
+and converts that to lpeg... I would
+
+00:39:57.520 --> 00:40:00.959
+just have the backend part, that are the
+
+00:40:00.960 --> 00:40:03.999
+functions in lpeg that let us specify
+
+00:40:04.000 --> 00:40:05.479
+powerful grammars.
+
+00:40:05.480 --> 00:40:11.759
+Let me go back. Let me explain a
+
+00:40:11.760 --> 00:40:15.519
+bit about lpeg... Lua has
+
+00:40:15.520 --> 00:40:21.599
+coercions: the + expects to receive
+
+00:40:21.600 --> 00:40:23.999
+true numbers, and if one of its arguments,
+
+00:40:24.000 --> 00:40:26.999
+or both of them, are strings, it converts
+
+00:40:27.000 --> 00:40:29.839
+the string... the strings to numbers so in
+
+00:40:29.840 --> 00:40:33.519
+this case here, 2+"3",
+
+00:40:33.520 --> 00:40:36.159
+it returns the number 5,
+
+00:40:36.160 --> 00:40:39.359
+and this is the concatenation
+
+00:40:39.360 --> 00:40:42.119
+operator... it expects to receive
+
+00:40:42.120 --> 00:40:44.999
+strings, so in this case it will
+
+00:40:45.000 --> 00:40:47.359
+convert the number 2 to the string "2",
+
+00:40:47.360 --> 00:40:50.279
+and the concatenation of thes two
+
+00:40:50.280 --> 00:40:54.479
+things will be 23... oops, sorry, "23"
+
+00:40:54.480 --> 00:40:56.279
+as a string.
+
+00:40:56.280 --> 00:40:58.519
+Lpeg also has some coercions.
+
+00:40:58.520 --> 00:41:01.759
+I usually set these
+
+00:41:01.760 --> 00:41:05.799
+globals to let me write my grammars
+
+00:41:05.800 --> 00:41:09.719
+in a very compact way, so instead
+
+00:41:09.720 --> 00:41:14.759
+of lpeg.B, lpeg.C, etc I use these globals,
+
+00:41:14.760 --> 00:41:18.359
+like uppercase B, uppercase C, and so on...
+
+00:41:18.360 --> 00:41:21.679
+and with these globals I can write
+
+00:41:21.680 --> 00:41:26.759
+things like this: C(1)*"_"...
+
+00:41:26.760 --> 00:41:33.199
+and lpeg knows that lpeg.C...
+
+00:41:33.200 --> 00:41:38.879
+it sort of expands this to lpeg.C,
+
+00:41:38.880 --> 00:41:42.039
+but lpeg.C expects to receive
+
+00:41:42.040 --> 00:41:44.839
+an lpeg pattern, and 1 is not yet an
+
+00:41:44.840 --> 00:41:47.879
+lpeg pattern, so it is coerced into an
+
+00:41:47.880 --> 00:41:51.799
+lpeg pattern by calling lpeg.P,
+
+00:41:51.800 --> 00:41:55.679
+so this short thing here becomes
+
+00:41:55.680 --> 00:42:03.399
+equivalent to lpeg.C(lpeg.P(1)), and the
+
+00:42:03.400 --> 00:42:07.399
+multiplication, when at least one of its
+
+00:42:07.400 --> 00:42:10.759
+arguments is an lpeg pattern... it expects
+
+00:42:10.760 --> 00:42:13.199
+to receive two lpeg patterns, and in
+
+00:42:13.200 --> 00:42:15.239
+this case the one at the right is
+
+00:42:15.240 --> 00:42:18.319
+just a string, so it is coerced to an lpeg
+
+00:42:18.320 --> 00:42:20.079
+pattern by using lpeg.P.
+
+00:42:20.080 --> 00:42:25.599
+With this idea we can sort of
+
+00:42:25.600 --> 00:42:28.439
+understand the comparison here. I mean,
+
+00:42:28.440 --> 00:42:31.719
+let me run it again... this first part is
+
+00:42:31.720 --> 00:42:34.679
+very similar to a regular expression
+
+00:42:34.680 --> 00:42:35.359
+here at the left...
+
+00:42:35.360 --> 00:42:39.759
+and when we apply this... Lua pattern
+
+00:42:39.760 --> 00:42:43.639
+to this subject here the result
+
+00:42:43.640 --> 00:42:47.799
+is this thing here, this thing, this
+
+00:42:47.800 --> 00:42:54.319
+thing and this thing... I'm going to
+
+00:42:54.320 --> 00:42:56.119
+call each one of these results
+
+00:42:56.120 --> 00:42:59.519
+"captures", so each of these things
+
+00:42:59.520 --> 00:43:03.319
+between parentheses "captures" a substring
+
+00:43:03.320 --> 00:43:06.039
+of the original string and these
+
+00:43:06.040 --> 00:43:08.559
+captured substrings are returned in a
+
+00:43:08.560 --> 00:43:11.839
+certain order. Here is how to express the
+
+00:43:11.840 --> 00:43:12.759
+same thing in lpeg...
+
+00:43:12.760 --> 00:43:15.919
+it's very cryptic but it's a
+
+00:43:15.920 --> 00:43:20.719
+good way to understand the some basic
+
+00:43:20.720 --> 00:43:23.879
+operators of lpeg, I mean we can look at
+
+00:43:23.880 --> 00:43:26.479
+the manual and understand and
+
+00:43:26.480 --> 00:43:30.519
+what C, S and R do, and also
+
+00:43:30.520 --> 00:43:37.959
+exponentiation... and this strange thing
+
+00:43:37.960 --> 00:43:41.319
+here receives this string here, runs
+
+00:43:41.320 --> 00:43:43.279
+a function that I have defined, that
+
+00:43:43.280 --> 00:43:46.039
+converts it to an object of a certain
+
+00:43:46.040 --> 00:43:47.759
+class, and that class
+
+00:43:47.760 --> 00:43:52.399
+represents Re patterns, so this thing
+
+00:43:52.400 --> 00:43:54.479
+is treated as a pattern for re.lua,
+
+00:43:54.480 --> 00:43:56.479
+and it is matched against the string,
+
+00:43:56.480 --> 00:43:59.439
+and it returns the same thing as the
+
+00:43:59.440 --> 00:44:02.559
+other one.
+
+00:44:02.560 --> 00:44:05.519
+Also, this thing here also has a
+
+00:44:05.520 --> 00:44:08.479
+comparison with lpegrex, but these
+
+00:44:08.480 --> 00:44:11.559
+patterns are very trivial, they
+
+00:44:11.560 --> 00:44:13.359
+don't do anything very strange...
+
+00:44:13.360 --> 00:44:15.759
+so let's go back and see what
+
+00:44:15.760 --> 00:44:18.239
+kinds of very strange things there are.
+
+00:44:18.240 --> 00:44:26.559
+Here is the page of lpegrex at github,
+
+00:44:26.560 --> 00:44:29.719
+here's the documentation...
+
+00:44:29.720 --> 00:44:32.439
+it's relatively brief,
+
+00:44:32.440 --> 00:44:35.239
+it explains lpegrex as being an
+
+00:44:35.240 --> 00:44:39.719
+extension of Re.lua, so it explains
+
+00:44:39.720 --> 00:44:42.879
+mainly the additional features... here is a
+
+00:44:42.880 --> 00:44:45.119
+quick reference that explains only the
+
+00:44:45.120 --> 00:44:46.359
+additional features...
+
+00:44:46.360 --> 00:44:49.639
+some of the these things
+
+00:44:49.640 --> 00:44:50.919
+I was able to understand
+
+00:44:50.920 --> 00:44:57.559
+by struggling a lot, and some I wasn't
+
+00:44:57.560 --> 00:45:02.439
+able to even by spending several evenings
+
+00:45:02.440 --> 00:45:04.319
+try to to build examples...
+
+00:45:04.320 --> 00:45:12.879
+and this is something very nice. Lpegrex
+
+00:45:12.880 --> 00:45:15.879
+comes with some example parsers... and
+
+00:45:15.880 --> 00:45:18.679
+here is a parser that parses the Lua
+
+00:45:18.680 --> 00:45:22.479
+grammar - I mean, this is the the grammar
+
+00:45:22.480 --> 00:45:25.959
+for Lua 5.4 at the end of the
+
+00:45:25.960 --> 00:45:31.199
+reference manual... it's just this... this
+
+00:45:31.200 --> 00:45:34.799
+is in a kind of BNF, and this is the BNF
+
+00:45:34.800 --> 00:45:35.599
+translated
+
+00:45:35.600 --> 00:45:39.919
+to the language of lpegrex, so this
+
+00:45:39.920 --> 00:45:43.039
+thing uses many constructions that are
+
+00:45:43.040 --> 00:45:47.999
+in re.lua and some extra constructions that
+
+00:45:48.000 --> 00:45:50.959
+are described here... and with these
+
+00:45:50.960 --> 00:45:54.239
+examples I was able to to understand
+
+00:45:54.240 --> 00:45:55.159
+some of the...
+
+00:45:55.160 --> 00:45:58.079
+of these things here that are
+
+00:45:58.080 --> 00:46:00.239
+described here in the quick
+
+00:46:00.240 --> 00:46:04.719
+reference - but not all.
+
+00:46:04.720 --> 00:46:11.279
+So, I wasn't able to use lpegrex
+
+00:46:11.280 --> 00:46:14.279
+by itself, because some things didn't
+
+00:46:14.280 --> 00:46:16.199
+make much sense, and I decided to
+
+00:46:16.200 --> 00:46:18.759
+reimplement it in my own style,
+
+00:46:18.760 --> 00:46:23.679
+because that would be a way to map...
+
+00:46:23.680 --> 00:46:26.839
+to at the very least map what I had
+
+00:46:26.840 --> 00:46:29.559
+understood and what I didn't, learn
+
+00:46:29.560 --> 00:46:32.999
+one feature at a time, do comparisons, and
+
+00:46:33.000 --> 00:46:35.319
+so on.
+
+00:46:35.320 --> 00:46:38.799
+Here I pointed to two features of lpeg...
+
+00:46:38.800 --> 00:46:41.679
+in one I said "Oh, great! This thing can
+
+00:46:41.680 --> 00:46:44.319
+be used to to define grammars, even
+
+00:46:44.320 --> 00:46:45.959
+recursive grammars", and so on...
+
+00:46:45.960 --> 00:46:49.759
+and this is an "Oh, no!" feature - one
+
+00:46:49.760 --> 00:46:51.759
+thing that didn't make any sense at all...
+
+00:46:51.760 --> 00:46:56.439
+group captures. One thing that I did to
+
+00:46:56.440 --> 00:46:59.039
+understand group captures was to
+
+00:46:59.040 --> 00:47:02.319
+represent them as diagrams. Of course in
+
+00:47:02.320 --> 00:47:05.359
+the beginning I was drawing these
+
+00:47:05.360 --> 00:47:08.919
+diagrams by hand, but then I realized
+
+00:47:08.920 --> 00:47:11.559
+that I could use the bits of lpeg
+
+00:47:11.560 --> 00:47:14.759
+that I already knew to build a grammar
+
+00:47:14.760 --> 00:47:17.479
+that would parse a little language and
+
+00:47:17.480 --> 00:47:20.999
+generate these diagrams in LaTeX, and I was
+
+00:47:21.000 --> 00:47:21.919
+able to make this.
+
+00:47:21.920 --> 00:47:25.279
+In this diagram here
+
+00:47:25.280 --> 00:47:30.719
+this thing above the arrow is Lua code...
+
+00:47:30.720 --> 00:47:33.759
+a piece of Lua code that
+
+00:47:33.760 --> 00:47:37.119
+specifies an lpeg pattern... this
+
+00:47:37.120 --> 00:47:39.559
+thing here at the top is the string that
+
+00:47:39.560 --> 00:47:43.039
+is being matched, and the things below
+
+00:47:43.040 --> 00:47:46.599
+the underbraces are the captures that
+
+00:47:46.600 --> 00:47:50.639
+each thing... sorry, that each thing
+
+00:47:50.640 --> 00:47:51.319
+captures.
+
+00:47:51.320 --> 00:47:58.479
+For example, this underbrace here
+
+00:47:58.480 --> 00:48:00.279
+corresponds to this pattern here,
+
+00:48:00.280 --> 00:48:02.879
+that parses a single character but
+
+00:48:02.880 --> 00:48:05.559
+doesn't return any captures, this thing
+
+00:48:05.560 --> 00:48:08.119
+here parses a single "b" and doesn't
+
+00:48:08.120 --> 00:48:11.239
+return any captures, this thing here
+
+00:48:11.240 --> 00:48:14.399
+parses a single character and captures
+
+00:48:14.400 --> 00:48:16.879
+it, and this thing here parses the
+
+00:48:16.880 --> 00:48:21.319
+character "d" and captures it... and this
+
+00:48:21.320 --> 00:48:24.439
+other thing here transforms this
+
+00:48:24.440 --> 00:48:27.279
+pattern into another pattern...
+
+00:48:27.280 --> 00:48:33.119
+returns first a capture with all
+
+00:48:33.120 --> 00:48:35.079
+the string that was parsed by this
+
+00:48:35.080 --> 00:48:37.399
+pattern here, and then all the captures
+
+00:48:37.400 --> 00:48:41.079
+returned by this thing here before
+
+00:48:41.080 --> 00:48:42.959
+the ":".
+
+00:48:42.960 --> 00:48:45.479
+So, this was a way to build
+
+00:48:45.480 --> 00:48:48.599
+concrete examples for things that the
+
+00:48:48.600 --> 00:48:52.159
+lpag manual was explaining in a very terse
+
+00:48:52.160 --> 00:48:55.799
+way, and it worked for me - some things
+
+00:48:55.800 --> 00:48:56.999
+that were very
+
+00:48:57.000 --> 00:48:59.839
+mysterious started to make sense, and I
+
+00:48:59.840 --> 00:49:03.199
+started to have intelligent questions
+
+00:49:03.200 --> 00:49:06.079
+to ask in the mailing list.
+
+00:49:06.080 --> 00:49:10.959
+And with that I was able to
+
+00:49:10.960 --> 00:49:12.959
+understand what are group captures,
+
+00:49:12.960 --> 00:49:17.879
+and group captures that receive a name...
+
+00:49:17.880 --> 00:49:22.719
+Well, let me explain what this does.
+
+00:49:22.720 --> 00:49:27.119
+This thing here captures... sorry, parses
+
+00:49:27.120 --> 00:49:29.359
+the empty string and returns this as a
+
+00:49:29.360 --> 00:49:32.959
+constant... so, this is something that
+
+00:49:32.960 --> 00:49:35.799
+doesn't exist in regular expressions...
+
+00:49:35.800 --> 00:49:38.639
+it parses nothing and
+
+00:49:38.640 --> 00:49:41.839
+returns this as a capture... then this
+
+00:49:41.840 --> 00:49:44.599
+thing here returns these two
+
+00:49:44.600 --> 00:49:47.159
+constants here, and parses the empty
+
+00:49:47.160 --> 00:49:51.279
+string, and this thing here converts
+
+00:49:51.280 --> 00:49:54.159
+the results of this thing here into a
+
+00:49:54.160 --> 00:49:57.639
+group capture, and stores it in the label
+
+00:49:57.640 --> 00:50:03.279
+"d"... and then here's another constant
+
+00:50:03.280 --> 00:50:03.719
+capture.
+
+NOTE Building lists
+
+00:50:03.720 --> 00:50:05.679
+And I realized that these things
+
+00:50:05.680 --> 00:50:08.599
+here were similar to how Lua
+
+00:50:08.600 --> 00:50:09.839
+specifies building lists...
+
+00:50:09.840 --> 00:50:16.239
+when we build... sorry, tables. When
+
+00:50:16.240 --> 00:50:18.759
+we build a table, and we say that the
+
+00:50:18.760 --> 00:50:21.879
+first element of the table is here, this
+
+00:50:21.880 --> 00:50:23.559
+element is put at the end of the table...
+
+00:50:23.560 --> 00:50:29.399
+when after the that would say d=42...
+
+00:50:29.400 --> 00:50:31.199
+we are putting the 42
+
+00:50:31.200 --> 00:50:34.559
+in the the slot whose key is "d".
+
+00:50:34.560 --> 00:50:38.999
+This was happening with lpeg captures,
+
+00:50:39.000 --> 00:50:43.359
+but there was something very strange...
+
+00:50:43.360 --> 00:50:46.199
+these group captures could hold
+
+00:50:46.200 --> 00:50:49.199
+more than one capture - more than one
+
+00:50:49.200 --> 00:50:51.759
+value... so there was something between
+
+00:50:51.760 --> 00:50:58.039
+lists and tables. I started to use this
+
+00:50:58.040 --> 00:51:00.479
+notation to...
+
+00:51:00.480 --> 00:51:04.959
+explain in my notation what they
+
+00:51:04.960 --> 00:51:08.159
+were doing... many things started
+
+00:51:08.160 --> 00:51:10.239
+to make sense, many mysterious
+
+00:51:10.240 --> 00:51:12.879
+sentences in the manual started to
+
+00:51:12.880 --> 00:51:14.439
+make sense... but some didn't...
+
+00:51:14.440 --> 00:51:19.679
+but at least I was able to send
+
+00:51:19.680 --> 00:51:22.319
+some intelligent questions to the
+
+00:51:22.320 --> 00:51:25.199
+mailing lis,t and the author of Lua and
+
+00:51:25.200 --> 00:51:27.359
+lpeg answered some of them...
+
+00:51:27.360 --> 00:51:31.519
+he was not very happy about my
+
+00:51:31.520 --> 00:51:34.959
+questions - he... told me that those
+
+00:51:34.960 --> 00:51:37.679
+diagrams were a waste of time, the
+
+00:51:37.680 --> 00:51:40.559
+manual was perfectly clear, and so on...
+
+00:51:40.560 --> 00:51:44.919
+whatever - but I was able to...
+
+00:51:44.920 --> 00:51:48.879
+so, it was weird, but I was able to
+
+00:51:48.880 --> 00:51:51.799
+understand lots of things from his
+
+00:51:51.800 --> 00:51:56.519
+answers. This is a copy of one of
+
+00:51:56.520 --> 00:51:58.239
+my messages, then there's another one,
+
+00:51:58.240 --> 00:52:01.239
+another one, some of them had diagrams...
+
+00:52:01.240 --> 00:52:04.359
+then he complained about these diagrams,
+
+00:52:04.360 --> 00:52:08.439
+he said that these things here, that look
+
+00:52:08.440 --> 00:52:11.119
+like table constructors, "do not exist"...
+
+00:52:11.120 --> 00:52:17.199
+whatever... anyway, once I understood
+
+00:52:17.200 --> 00:52:20.679
+group captures many features
+
+00:52:20.680 --> 00:52:23.359
+were very easy to understand
+
+00:52:23.360 --> 00:52:26.039
+and I started to be able to use lpeg to
+
+00:52:26.040 --> 00:52:28.159
+to build some very interesting things...
+
+00:52:28.160 --> 00:52:33.039
+I was able to reproduce some
+
+00:52:33.040 --> 00:52:36.359
+of the features that I saw in lpegrex -
+
+00:52:36.360 --> 00:52:41.079
+remember that this... where is that?
+
+00:52:41.080 --> 00:52:46.119
+this is the syntax of Lua... here -
+
+00:52:46.120 --> 00:52:48.959
+I was able to understand
+
+00:52:48.960 --> 00:52:52.479
+how these things here were translated to
+
+00:52:52.480 --> 00:52:55.359
+lpeg code... to lpeg patterns
+
+00:52:55.360 --> 00:52:58.239
+by using group captures in a certain
+
+00:52:58.240 --> 00:53:03.039
+way... I was able to implement them
+
+00:53:03.040 --> 00:53:04.759
+in ELpeg1.lua...
+
+00:53:04.760 --> 00:53:08.719
+and after some time I was able to use
+
+00:53:08.720 --> 00:53:12.879
+ELpeg1.lua to build grammars that
+
+00:53:12.880 --> 00:53:14.159
+were able to parse
+
+00:53:14.160 --> 00:53:18.679
+arithmetical expressions with the
+
+00:53:18.680 --> 00:53:20.959
+right precedence... and here's an example
+
+00:53:20.960 --> 00:53:23.319
+in which I built the grammar step by step...
+
+00:53:23.320 --> 00:53:29.239
+and I test the current grammar, and I
+
+00:53:29.240 --> 00:53:35.079
+replace a bit, and then I test the new
+
+00:53:35.080 --> 00:53:36.599
+grammar and so on...
+
+00:53:36.600 --> 00:53:39.079
+and you can see that the result is
+
+00:53:39.080 --> 00:53:43.359
+always a tree that is drawn in a
+
+00:53:43.360 --> 00:53:44.239
+nice two dimensional way...
+
+00:53:44.240 --> 00:53:48.919
+At this point these powers here
+
+00:53:48.920 --> 00:53:50.559
+are returned as a list,
+
+00:53:50.560 --> 00:53:53.119
+as an operation "pow"
+
+00:53:53.120 --> 00:53:57.559
+with several arguments, here... and then
+
+00:53:57.560 --> 00:54:00.519
+I apply a kind of parsing combinator,
+
+00:54:00.520 --> 00:54:03.719
+here... that transforms these trees into
+
+00:54:03.720 --> 00:54:08.199
+other trees and with these combinators
+
+00:54:08.200 --> 00:54:12.199
+here I can specify that the "^" is
+
+00:54:12.200 --> 00:54:14.639
+associative in a certain direction...
+
+00:54:14.640 --> 00:54:17.519
+that the "/" is associative in
+
+00:54:17.520 --> 00:54:20.119
+another direction... the "-" uses
+
+00:54:20.120 --> 00:54:23.079
+the same direction as a the "/",
+
+00:54:23.080 --> 00:54:26.079
+and so on... and they have the
+
+00:54:26.080 --> 00:54:29.679
+right precedences.
+
+00:54:29.680 --> 00:54:34.559
+So, here are the tests...
+
+00:54:34.560 --> 00:54:38.119
+here is my file ELpeg1.lua... it has
+
+00:54:38.120 --> 00:54:41.719
+several classes, each class has tests
+
+00:54:41.720 --> 00:54:42.279
+after it...
+
+00:54:42.280 --> 00:54:46.239
+I was able to implement something
+
+00:54:46.240 --> 00:54:50.519
+that lpegrex has, that is called
+
+00:54:50.520 --> 00:54:53.519
+"keywords", that is very useful for parsing
+
+00:54:53.520 --> 00:54:56.479
+programs in programming languages...
+
+00:54:56.480 --> 00:54:59.439
+I was able to implement something
+
+00:54:59.440 --> 00:55:02.639
+similar to the debugger... to the
+
+00:55:02.640 --> 00:55:07.999
+lpeg debugger lpeg uses... I was
+
+00:55:08.000 --> 00:55:11.399
+frustrated by some limitations of
+
+00:55:11.400 --> 00:55:16.839
+the lpeg debugger, and I implemented
+
+00:55:16.840 --> 00:55:23.439
+my own that is, uh... much better!...
+
+00:55:23.440 --> 00:55:24.759
+Let me show something else... I was
+
+00:55:24.760 --> 00:55:27.119
+able to translate a good part of the
+
+00:55:27.120 --> 00:55:33.039
+Lua parser, here, to ELpeg1.lua... I haven't
+
+00:55:33.040 --> 00:55:38.399
+finished yet, but I have most of the
+
+00:55:38.400 --> 00:55:39.719
+the translation here...
+
+00:55:39.720 --> 00:55:47.279
+and after having all that I was able to
+
+00:55:47.280 --> 00:55:50.319
+build other grammars very quickly...
+
+00:55:50.320 --> 00:55:55.239
+writing new parsers finally became fun.
+
+00:55:55.240 --> 00:55:58.719
+And here's one example that I showed in the
+
+00:55:58.720 --> 00:56:00.639
+beginning.
+
+00:56:00.640 --> 00:56:05.799
+If I remember correctly...
+
+00:56:05.800 --> 00:56:10.639
+I took a figure from the Wikipedia...
+
+00:56:10.640 --> 00:56:12.439
+I don't have its link now...
+
+00:56:12.440 --> 00:56:17.079
+but I specified a grammar that parses
+
+00:56:17.080 --> 00:56:20.119
+exactly the example that appears
+
+00:56:20.120 --> 00:56:20.839
+in the Wikipedia...
+
+00:56:20.840 --> 00:56:24.679
+so, with my grammar, considering that
+
+00:56:24.680 --> 00:56:28.719
+the top level entry is "Stmt", when I
+
+00:56:28.720 --> 00:56:30.679
+parse this string here
+
+00:56:30.680 --> 00:56:36.599
+the result is this tree...
+
+00:56:36.600 --> 00:56:41.119
+and I can do some operations on that,
+
+00:56:41.120 --> 00:56:44.039
+I can define how this thing is to be
+
+00:56:44.040 --> 00:56:45.639
+converted into LaTeX,
+
+00:56:45.640 --> 00:56:49.399
+I can define other operations
+
+00:56:49.400 --> 00:56:52.999
+that convert trees into other trees, and
+
+00:56:53.000 --> 00:56:54.879
+here are some tests of these operations...
+
+00:56:54.880 --> 00:57:00.359
+This is what I showed in the beginning...
+
+00:57:00.360 --> 00:57:02.759
+I'm not going to explain all the details
+
+00:57:02.760 --> 00:57:03.999
+of this thing now...
+
+00:57:04.000 --> 00:57:09.199
+this :show() converts this thing
+
+00:57:09.200 --> 00:57:11.919
+into LaTeX in the way specified by these
+
+00:57:11.920 --> 00:57:16.159
+instructions here, that says that...
+
+00:57:16.160 --> 00:57:25.239
+well, whatever...
+
+00:57:25.240 --> 00:57:32.959
+and here's the result - the LaTeXed result...
+
+00:57:32.960 --> 00:57:41.759
+and these diagrams here are generated by
+
+00:57:41.760 --> 00:57:46.719
+this file here, that defines a simple
+
+00:57:46.720 --> 00:57:48.479
+grammar that parses this thing here,
+
+00:57:48.480 --> 00:57:51.999
+and then LaTeXes it in a certain way, and
+
+00:57:52.000 --> 00:57:56.399
+and also tests to check if this code here...
+
+00:57:56.400 --> 00:58:01.999
+this Lua code that generates an lpeg grammar...
+
+00:58:02.000 --> 00:58:05.799
+parses this subject here and
+
+00:58:05.800 --> 00:58:08.599
+returns the expected result...
+
+00:58:08.600 --> 00:58:12.239
+So: this is the code that I
+
+00:58:12.240 --> 00:58:16.719
+wanted to show. I wanted to show many
+
+00:58:16.720 --> 00:58:19.919
+more things but I wasn't able to prepare
+
+00:58:19.920 --> 00:58:23.919
+them before the conference... and I hope
+
+00:58:23.920 --> 00:58:27.519
+that soon - for some value of "soon" -
+
+00:58:27.520 --> 00:58:30.399
+I'll be able to create REPL-based
+
+00:58:30.400 --> 00:58:33.919
+tutorials for lpeg, Re, and ELpeg1.lua...
+
+00:58:33.920 --> 00:58:36.319
+where lpeg is something very famous,
+
+00:58:36.320 --> 00:58:39.199
+Re is a module of lpeg...
+
+00:58:39.200 --> 00:58:42.399
+I could also do something like this
+
+00:58:42.400 --> 00:58:47.799
+for lpegrex... and ELpeg1.lua is
+
+00:58:47.800 --> 00:58:51.159
+the thing that I wrote, the one that
+
+00:58:51.160 --> 00:58:56.799
+has test in comments, and the tests
+
+00:58:56.800 --> 00:58:59.519
+usually generate trees, and sometimes
+
+00:58:59.520 --> 00:59:00.879
+they generate TeX code.
+
+00:59:00.880 --> 00:59:04.959
+Yeah, so that's it! I wanted to
+
+00:59:04.960 --> 00:59:07.159
+present much more but I wasn't able to
+
+00:59:07.160 --> 00:59:10.480
+prepare it... so: sorry, thanks, bye! =)
diff --git a/2023/captions/emacsconf-2023-sat-close--saturday-closing-remarks--main.vtt b/2023/captions/emacsconf-2023-sat-close--saturday-closing-remarks--main.vtt
new file mode 100644
index 00000000..9398d5f8
--- /dev/null
+++ b/2023/captions/emacsconf-2023-sat-close--saturday-closing-remarks--main.vtt
@@ -0,0 +1,503 @@
+WEBVTT
+
+
+00:00:05.200 --> 00:00:06.359
+[Speaker 0]: Session is being recorded.
+
+00:00:06.819 --> 00:00:08.860
+Just waiting for Corwin and Leo.
+
+00:00:16.359 --> 00:00:17.960
+Great. Corwin, would you like to share your
+
+00:00:17.960 --> 00:00:18.460
+screen?
+
+00:00:37.620 --> 00:00:39.840
+Let's see the audio through BBB so we don't
+
+00:00:39.840 --> 00:00:41.720
+have to splice it in afterwards because it's
+
+00:00:41.720 --> 00:00:43.680
+annoying to splice things.
+
+00:00:43.680 --> 00:00:47.020
+I mean, Leo will be taking care of it,
+
+00:00:47.020 --> 00:00:50.560
+not me, so. Okay, he's going to finish up.
+
+00:00:52.720 --> 00:00:55.320
+[Speaker 1]: So, in the meantime, it's been a long day,
+
+00:00:55.320 --> 00:00:57.080
+people. Thanks for sticking around.
+
+00:00:57.180 --> 00:00:58.739
+And we're going to do a little bit of jazz
+
+00:00:58.739 --> 00:01:00.060
+handing until Corwin comes back.
+
+00:01:00.060 --> 00:01:07.650
+Smack. I
+
+00:01:14.240 --> 00:01:16.020
+[Speaker 2]: can't imagine an Emacs con without getting to
+
+00:01:16.020 --> 00:01:17.920
+enjoy Leo's famous jazz hands.
+
+00:01:21.420 --> 00:01:23.080
+[Speaker 1]: I can tell you it's a lot easier...
+
+00:01:23.160 --> 00:01:25.760
+Hello? I can tell you it's a lot easier to do
+
+00:01:25.760 --> 00:01:30.740
+jazz hands at 9am EST than it is at 5pm EST,
+
+00:01:30.860 --> 00:01:34.160
+because for me it's 11 and I've barely seen
+
+00:01:34.160 --> 00:01:39.720
+this 1 today. Okay Corwin,
+
+00:01:39.720 --> 00:01:41.880
+do you have a presentation right now?
+
+00:01:45.480 --> 00:01:47.440
+We do not seem to be able to hear you,
+
+00:01:47.440 --> 00:01:55.240
+Corwin. Okay, just bear with us,
+
+00:01:55.240 --> 00:01:57.380
+folks. We're gonna figure out this 1.
+
+00:01:57.380 --> 00:01:58.660
+This is the last bug of the day,
+
+00:01:58.660 --> 00:02:00.640
+and then we're clear until tomorrow.
+
+00:02:05.820 --> 00:02:07.700
+[Speaker 2]: I just heard you, but I don't know if it was
+
+00:02:07.700 --> 00:02:12.100
+here or via mumble. Okay.
+
+00:02:14.540 --> 00:02:17.360
+[Speaker 1]: Can we figure out? Whenever there's a problem
+
+00:02:17.360 --> 00:02:19.340
+like this, like Sash and myself are furiously
+
+00:02:19.460 --> 00:02:20.640
+typing in the background,
+
+00:02:20.640 --> 00:02:22.380
+we say, oh, can we fix this slide?
+
+00:02:22.740 --> 00:02:24.180
+But here, I'm stumped.
+
+00:02:33.180 --> 00:02:36.760
+[Speaker 2]: I think Corbin is in the GenTrack on Mumble.
+
+00:02:40.520 --> 00:02:43.680
+[Speaker 1]: Okay, so let's all switch to GenTrack and
+
+00:02:43.780 --> 00:02:46.860
+we'll be able to figure out the way.
+
+00:03:18.420 --> 00:03:21.540
+[Speaker 0]: Okay, well, while Corwin figures out how to
+
+00:03:21.540 --> 00:03:23.940
+get started, we might as well maybe do a
+
+00:03:23.940 --> 00:03:25.380
+little bit of closing remarks,
+
+00:03:25.380 --> 00:03:27.220
+and then you can jump in whenever you want.
+
+00:03:29.440 --> 00:03:30.420
+[Speaker 1]: Sounds good to me.
+
+00:03:31.980 --> 00:03:34.459
+[Speaker 0]: Okay. Thank you, everyone,
+
+00:03:34.459 --> 00:03:36.160
+for coming to Emacs Conf 2023.
+
+00:03:37.120 --> 00:03:38.980
+We made it to the end of the first day!
+
+00:03:39.140 --> 00:03:40.440
+Hooray! We're going to keep these closing
+
+00:03:40.440 --> 00:03:42.880
+remarks short because it's a long day.
+
+00:03:42.880 --> 00:03:44.920
+It's almost midnight and Leah will turn into
+
+00:03:44.920 --> 00:03:48.340
+a pumpkin very soon. So before that happens,
+
+00:03:48.580 --> 00:03:50.560
+we just want to say hello and thanks.
+
+00:03:50.640 --> 00:03:54.980
+And pre-recorded talks are already up.
+
+00:03:55.260 --> 00:03:56.520
+They're on the talk pages,
+
+00:03:56.520 --> 00:03:57.320
+they're on media.emaxcontent.org.
+
+00:03:58.860 --> 00:04:00.620
+We'll work on extracting the live talks,
+
+00:04:00.620 --> 00:04:01.920
+but it'll take a few weeks.
+
+00:04:01.920 --> 00:04:02.220
+[Speaker 3]: Maybe, you
+
+00:04:02.220 --> 00:04:03.660
+[Speaker 0]: know, we'll see how it goes.
+
+00:04:04.540 --> 00:04:06.100
+Please feel free to spread the word,
+
+00:04:06.100 --> 00:04:07.700
+because you know some people didn't actually
+
+00:04:07.720 --> 00:04:09.380
+know there was EmacsConf this weekend,
+
+00:04:09.380 --> 00:04:11.400
+so let them know, because it's a lot of fun.
+
+00:04:11.400 --> 00:04:15.020
+More talks tomorrow. And if you've got ideas
+
+00:04:15.020 --> 00:04:15.900
+for making things better,
+
+00:04:15.900 --> 00:04:17.500
+or If you'd like to tell us what's working
+
+00:04:17.500 --> 00:04:18.660
+well and what you'd like,
+
+00:04:18.940 --> 00:04:21.180
+please put them in the conference pad at
+
+00:04:21.180 --> 00:04:26.580
+pad.emaxconf.org. Anything anyone want to
+
+00:04:26.580 --> 00:04:27.080
+add?
+
+00:04:30.060 --> 00:04:30.860
+[Speaker 1]: I'm all good.
+
+00:04:32.900 --> 00:04:35.260
+[Speaker 2]: Let's see if Corwin can get his mic to work.
+
+00:04:37.740 --> 00:04:38.800
+No, it's not.
+
+00:04:43.520 --> 00:04:45.140
+[Speaker 1]: Well, I mean, did you want to say something
+
+00:04:45.140 --> 00:04:47.220
+as well? Because people have heard you talk
+
+00:04:47.220 --> 00:04:49.120
+all day long on the Dev track,
+
+00:04:49.120 --> 00:04:50.240
+but not on the general track,
+
+00:04:50.240 --> 00:04:51.540
+actually. It's the first time they hear you
+
+00:04:51.540 --> 00:04:52.040
+today.
+
+00:04:52.540 --> 00:04:55.580
+[Speaker 2]: Right. Oh, well, way to put me on the spot,
+
+00:04:56.540 --> 00:04:58.040
+but more seriously, thanks.
+
+00:04:58.040 --> 00:04:59.760
+So yeah, it's a lot of fun.
+
+00:05:00.340 --> 00:05:03.760
+You know, it's, we sort of keep coming back
+
+00:05:03.760 --> 00:05:05.580
+every year and doing this conference.
+
+00:05:06.300 --> 00:05:08.720
+It's always been fun. And we keep doing it
+
+00:05:08.720 --> 00:05:11.320
+thanks to, you know, all the people who
+
+00:05:11.320 --> 00:05:13.860
+submit all these amazing talks with these
+
+00:05:14.600 --> 00:05:16.560
+amazing sessions. And of course the audience
+
+00:05:16.560 --> 00:05:19.940
+as well. I don't have a lot to say I guess
+
+00:05:19.940 --> 00:05:21.500
+for today because I think we're hoping to
+
+00:05:21.500 --> 00:05:23.180
+keep it kind of short and sweet.
+
+00:05:24.400 --> 00:05:25.920
+So yeah, I think that's about it for me.
+
+00:05:25.920 --> 00:05:28.380
+I guess we'll maybe wait another minute or so
+
+00:05:28.380 --> 00:05:30.180
+to see if Cormen can make it.
+
+00:05:30.580 --> 00:05:32.140
+But yeah, that's all for me.
+
+00:05:34.820 --> 00:05:37.920
+[Speaker 1]: All right, great. Speaking of putting people
+
+00:05:37.920 --> 00:05:41.600
+on the spot, you might see a face in the room
+
+00:05:41.600 --> 00:05:43.680
+that you might have seen last year,
+
+00:05:43.840 --> 00:05:45.700
+but we've got Flobby Koda in the room as
+
+00:05:45.700 --> 00:05:49.400
+well, who you might not have heard of him but
+
+00:05:49.400 --> 00:05:51.140
+he's been doing a lot of the check-ins today
+
+00:05:51.140 --> 00:05:53.360
+for most of the speakers and he's been doing
+
+00:05:53.360 --> 00:05:54.520
+a wonderful job at it.
+
+00:05:54.520 --> 00:05:56.560
+Florian, do you want to say a word if only to
+
+00:05:56.560 --> 00:05:58.140
+say you're being put on the spot?
+
+00:06:00.620 --> 00:06:02.840
+[Speaker 4]: I have nothing prepared really but I just
+
+00:06:02.840 --> 00:06:05.100
+want to thank everybody who could,
+
+00:06:05.380 --> 00:06:07.260
+with who I could talk in between.
+
+00:06:07.360 --> 00:06:10.420
+So I had like wonderful 20 to 30 minute talks
+
+00:06:10.580 --> 00:06:12.900
+with every speaker before they get into the
+
+00:06:12.900 --> 00:06:15.100
+live Q&A or the live presentation.
+
+00:06:15.780 --> 00:06:16.920
+Thanks a lot for everybody,
+
+00:06:16.920 --> 00:06:19.640
+I learned quite a lot and also thank you for
+
+00:06:19.640 --> 00:06:22.360
+all of you guys and everyone for having such
+
+00:06:22.360 --> 00:06:24.060
+a beautiful experience here.
+
+00:06:25.960 --> 00:06:28.060
+[Speaker 1]: Well, thank you. We're glad to have you.
+
+00:06:29.180 --> 00:06:31.120
+Okay, Sasha, Unless you've got anything else
+
+00:06:31.120 --> 00:06:33.880
+to add, and Corwin, have you fixed your
+
+00:06:33.880 --> 00:06:38.400
+microphone? Yes, we can hear you Corwin.
+
+00:06:38.400 --> 00:06:39.160
+Okay, well let's start again.
+
+00:06:39.160 --> 00:06:40.440
+Let's forget everything you've heard for the
+
+00:06:40.440 --> 00:06:41.640
+last 20 minutes. We'll start again.
+
+00:06:41.640 --> 00:06:42.540
+I'm just kidding.
+
+00:06:35.280 --> 00:06:45.560
+[Speaker 3]: You tell me. No, I mean,
+
+00:06:45.560 --> 00:06:47.760
+I don't know what I could possibly add to all
+
+00:06:47.760 --> 00:06:50.200
+that. I think we absolutely should get some
+
+00:06:50.200 --> 00:06:51.500
+rest, save it for tomorrow.
+
+00:06:52.540 --> 00:06:55.240
+I was just looking through these notes in the
+
+00:06:55.240 --> 00:06:57.480
+couple of minutes that I had between my own
+
+00:06:57.480 --> 00:06:59.980
+talk. Thank you for your help with that.
+
+00:07:00.720 --> 00:07:02.420
+But also, especially you,
+
+00:07:02.420 --> 00:07:08.040
+Sasha, and Leo, and everybody in the IRC over
+
+00:07:08.040 --> 00:07:10.440
+the months here, just encouraging me to keep
+
+00:07:10.440 --> 00:07:12.460
+going when it was just seemed futile.
+
+00:07:13.580 --> 00:07:15.780
+Even though it just really turned into a
+
+00:07:15.780 --> 00:07:18.120
+brain dump, I appreciate getting the chance
+
+00:07:18.120 --> 00:07:20.320
+of feeling like that process is more
+
+00:07:20.320 --> 00:07:22.540
+documented now than it was before I did it.
+
+00:07:22.540 --> 00:07:23.440
+Hey, that's not nothing,
+
+00:07:23.440 --> 00:07:25.440
+right? And that's why we all do this.
+
+00:07:25.440 --> 00:07:28.360
+And I don't know, Floey really said it
+
+00:07:28.360 --> 00:07:30.520
+perfect. Like, I appreciate the chance to get
+
+00:07:30.520 --> 00:07:31.560
+to work on this with you.
+
+00:07:31.560 --> 00:07:32.700
+I learned so much.
+
+00:07:36.400 --> 00:07:38.980
+[Speaker 1]: Amazing. Well, you know what?
+
+00:07:39.020 --> 00:07:41.380
+Without further ado, I believe it's time for
+
+00:07:41.380 --> 00:07:42.840
+us to say goodbye for day 1.
+
+00:07:42.840 --> 00:07:45.340
+We will obviously be seeing you tomorrow at 9
+
+00:07:45.340 --> 00:07:48.740
+a.m. I think the schedule is actually stating
+
+00:07:48.740 --> 00:07:49.840
+we're starting at 8.59am.
+
+00:07:50.500 --> 00:07:51.220
+Is it correct?
+
+00:07:51.220 --> 00:07:53.980
+[Speaker 0]: Yes, I think the chrono tab will kick in.
+
+00:07:54.020 --> 00:07:56.020
+The video is like 6 minutes long.
+
+00:07:57.620 --> 00:07:58.660
+Actually, maybe I should,
+
+00:07:58.660 --> 00:08:00.640
+I'll give it an extra minute for safety,
+
+00:08:00.660 --> 00:08:03.660
+I think. Yeah, yeah. I'll tweak the timing.
+
+00:08:04.340 --> 00:08:06.420
+[Speaker 1]: I think that'd be wise for people we do not
+
+00:08:06.420 --> 00:08:08.460
+know basically 8.59 is when I brush my teeth
+
+00:08:08.460 --> 00:08:10.680
+before going live so we might be in a very
+
+00:08:10.680 --> 00:08:12.740
+awkward spot for me to introduce the talk if
+
+00:08:12.740 --> 00:08:15.420
+it happens. Well anyway folks thank you very
+
+00:08:15.420 --> 00:08:18.500
+much for watching and we'll see you tomorrow.
+
+00:08:19.360 --> 00:08:31.320
+Bye-bye! All right, I have closed the bbb oh
+
+00:08:31.320 --> 00:08:34.780
+it's restarting apparently oh it's we're back
+
+00:08:34.780 --> 00:08:37.480
+on the q and a between stephan and let's
+
+00:08:37.480 --> 00:08:47.420
+close this hey we are off
+
+00:08:44.700 --> 00:08:52.540
+[Speaker 3]: we are clear I am pausing the recording I
+
+00:08:52.540 --> 00:08:54.280
+don't have permission to do that in this
+
+00:08:54.280 --> 00:08:54.780
+room.
diff --git a/2023/captions/emacsconf-2023-sat-open--saturday-opening-remarks--main.vtt b/2023/captions/emacsconf-2023-sat-open--saturday-opening-remarks--main.vtt
new file mode 100644
index 00000000..96dac2e5
--- /dev/null
+++ b/2023/captions/emacsconf-2023-sat-open--saturday-opening-remarks--main.vtt
@@ -0,0 +1,364 @@
+WEBVTT captioned by sachac, checked by sachac
+
+00:00:00.000 --> 00:00:04.558
+Welcome to EmacsConf 2023, where we get to find out
+
+00:00:04.559 --> 00:00:07.697
+just how much we can do with a text editor.
+
+00:00:07.698 --> 00:00:10.316
+Just like last year, we have two tracks.
+
+00:00:10.317 --> 00:00:12.655
+There's a General track and a Development track,
+
+00:00:12.656 --> 00:00:14.234
+but really, you'll probably find
+
+00:00:14.235 --> 00:00:15.953
+interesting things on both tracks
+
+00:00:15.954 --> 00:00:18.492
+no matter what your level of experience is,
+
+00:00:18.493 --> 00:00:21.151
+so don't feel limited to one or the other.
+
+00:00:21.152 --> 00:00:24.710
+For Saturday, it's mostly Org Mode talks on the General track.
+
+00:00:24.711 --> 00:00:26.869
+The doc talk on the development track
+
+00:00:26.870 --> 00:00:30.128
+is about literate documentation with Emacs and Org Mode,
+
+00:00:30.129 --> 00:00:31.687
+and it's a general-audience talk
+
+00:00:31.688 --> 00:00:33.606
+even though it's in the Development track.
+
+00:00:33.607 --> 00:00:35.265
+I just ran out of space in the schedule.
+
+00:00:35.266 --> 00:00:38.504
+The best parts of EmacsConf are the conversations.
+
+00:00:38.505 --> 00:00:41.263
+The wiki has a page on how to watch and participate,
+
+00:00:41.264 --> 00:00:44.042
+and I'll give you a quick overview as well.
+
+00:00:44.043 --> 00:00:47.521
+You can watch both streams at live.emacsconf.org
+
+00:00:47.522 --> 00:00:50.400
+using free and open source software.
+
+00:00:50.401 --> 00:00:52.819
+Using a streaming media player like mpv
+
+00:00:52.820 --> 00:00:56.218
+seems to be the best way to watch in terms of performance
+
+00:00:56.219 --> 00:00:57.817
+but there are also web-based players
+
+00:00:57.818 --> 00:01:00.296
+just in case that's all you've got.
+
+00:01:00.297 --> 00:01:02.295
+The schedule shows the General track on top
+
+00:01:02.296 --> 00:01:03.974
+and the Development track on the bottom,
+
+00:01:03.975 --> 00:01:06.593
+so you can see what else is going on.
+
+00:01:06.594 --> 00:01:07.792
+As you're watching the talks,
+
+00:01:07.793 --> 00:01:10.691
+you can refer to the schedule in another window.
+
+00:01:10.692 --> 00:01:13.710
+Hover over the boxes to see the times and titles,
+
+00:01:13.711 --> 00:01:15.609
+and click on the boxes in the schedule
+
+00:01:15.610 --> 00:01:18.388
+to jump to the talk's page for more details.
+
+00:01:18.389 --> 00:01:20.927
+You can also get the schedule as an iCalendar file
+
+00:01:20.928 --> 00:01:23.186
+or as an Org file in different time zones.
+
+00:01:23.187 --> 00:01:24.685
+Many talks will be followed by
+
+00:01:24.686 --> 00:01:27.344
+live Q&A web conferences with the speaker,
+
+00:01:27.345 --> 00:01:30.423
+which will be done in BigBlueButton or BBB.
+
+00:01:30.424 --> 00:01:33.422
+These are indicated with a solid border on the schedule
+
+00:01:33.423 --> 00:01:36.581
+and by Q&A: BBB on the schedule page.
+
+00:01:36.582 --> 00:01:38.280
+You can join the web conference room
+
+00:01:38.281 --> 00:01:39.899
+by clicking on the BBB link
+
+00:01:39.900 --> 00:01:42.838
+on the schedule page or the talk's webpage.
+
+00:01:42.839 --> 00:01:45.757
+Then you can ask your questions yourself when the Q&A starts.
+
+00:01:45.758 --> 00:01:48.216
+To improve performance, please keep your webcam off
+
+00:01:48.217 --> 00:01:50.955
+and stay muted until it's your turn to talk.
+
+00:01:50.956 --> 00:01:53.574
+This year we're experimenting with automatically switching
+
+00:01:53.575 --> 00:01:55.933
+between talks and Q&A sessions,
+
+00:01:55.934 --> 00:01:59.132
+so the transitions on the stream might be a little sudden,
+
+00:01:59.133 --> 00:02:00.891
+but people in the BigBlueButton room
+
+00:02:00.892 --> 00:02:02.570
+can continue the conversation
+
+00:02:02.571 --> 00:02:05.409
+even after the talk moves off-stream.
+
+00:02:05.410 --> 00:02:08.768
+Other talks will have Q&A via Etherpad or IRC,
+
+00:02:08.769 --> 00:02:11.087
+depending on what the speakers prefer.
+
+00:02:11.088 --> 00:02:14.106
+This is indicated in the schedule with a dashed border
+
+00:02:14.107 --> 00:02:16.825
+and on the schedule page as well.
+
+00:02:16.826 --> 00:02:19.264
+Please ask your questions in the recommended places
+
+00:02:19.265 --> 00:02:21.783
+so that the speakers can easily see them.
+
+00:02:21.784 --> 00:02:24.502
+Some talks will have the Q&A after the event,
+
+00:02:24.503 --> 00:02:27.361
+so you can add your questions to their Etherpad.
+
+00:02:27.362 --> 00:02:29.460
+We'll e-mail the speakers afterwards
+
+00:02:29.461 --> 00:02:32.359
+and update the talk pages when they answer.
+
+00:02:32.360 --> 00:02:35.498
+The schedule pages and track pages have quick shortcuts
+
+00:02:35.499 --> 00:02:38.977
+so that you can find out more about talks, open the Etherpads,
+
+00:02:38.978 --> 00:02:42.536
+and join the Q&A sessions. The watch page has more tips
+
+00:02:42.537 --> 00:02:45.235
+on how to make the most of Q&A.
+
+00:02:45.236 --> 00:02:48.014
+If you can, please add notes and ask questions
+
+00:02:48.015 --> 00:02:51.173
+in the Etherpad for the talk. That makes it easier
+
+00:02:51.174 --> 00:02:52.832
+for everyone to share their notes,
+
+00:02:52.833 --> 00:02:55.771
+and speakers and hosts can read the questions from there.
+
+00:02:55.772 --> 00:02:59.790
+We'll copy the notes to the talk pages afterwards.
+
+00:02:59.791 --> 00:03:01.849
+We have one pad for each talk,
+
+00:03:01.850 --> 00:03:03.968
+so you can follow the links to get to the next one
+
+00:03:03.969 --> 00:03:07.127
+or go back to the schedule and get the link from there.
+
+00:03:07.128 --> 00:03:08.766
+If you have general feedback about
+
+00:03:08.767 --> 00:03:10.925
+the conference itself, please put it in
+
+00:03:10.926 --> 00:03:16.384
+pad.emacsconf.org/2023 , which is linked on each pad.
+
+00:03:16.385 --> 00:03:19.043
+You can also use this as a general community message board
+
+00:03:19.044 --> 00:03:22.182
+for things like Help Wanted.
+
+00:03:22.183 --> 00:03:25.319
+Internet Relay Chat or IRC can be another great way
+
+00:03:25.320 --> 00:03:27.960
+to be part of lots of conversations.
+
+00:03:27.961 --> 00:03:31.679
+You can use chat.emacsconf.org to join the IRC channels
+
+00:03:31.680 --> 00:03:34.518
+through your web browser. The tabs on the left can help you
+
+00:03:34.519 --> 00:03:37.077
+switch between the different channels.
+
+00:03:37.078 --> 00:03:40.339
+There's #emacsconf-gen for the General track
+
+00:03:40.340 --> 00:03:43.695
+and #emacsconf-dev for the Development track.
+
+00:03:43.696 --> 00:03:47.414
+If you need to reach us, you can join #emacsconf-org
+
+00:03:47.415 --> 00:03:52.393
+or e-mail emacsconf-org-private@gnu.org.
+
+00:03:52.394 --> 00:03:55.672
+You can use #emacsconf for hallway conversations.
+
+00:03:55.673 --> 00:03:57.791
+Of course, you can join any of these channels
+
+00:03:57.792 --> 00:04:00.070
+with your favourite IRC client.
+
+00:04:00.071 --> 00:04:03.909
+We're on the libera.chat network.
+
+00:04:03.910 --> 00:04:06.548
+Once again, we're going to be streaming with open captions
+
+00:04:06.549 --> 00:04:09.627
+for most of the talks this year, thanks to our speakers and
+
+00:04:09.628 --> 00:04:12.986
+captioning volunteers. The captioned talks are indicated
+
+00:04:12.987 --> 00:04:15.705
+on the schedule, and with any luck, we'll be posting
+
+00:04:15.706 --> 00:04:19.204
+transcripts on talk pages shortly after the talks start.
+
+00:04:19.205 --> 00:04:21.023
+If you need additional accommodations,
+
+00:04:21.024 --> 00:04:23.783
+please let us know in #emacsconf-org
+
+00:04:23.784 --> 00:04:25.682
+and we'll see if we can make things happen.
+
+00:04:25.683 --> 00:04:29.921
+If something goes down, we'll update status.emacsconf.org.
+
+00:04:29.922 --> 00:04:31.780
+If it doesn't look like we've noticed yet,
+
+00:04:31.781 --> 00:04:35.219
+please let us know in the #emacsconf-org IRC channel,
+
+00:04:35.220 --> 00:04:37.378
+where we will be quietly panicking.
+
+00:04:37.379 --> 00:04:40.077
+In all of these conversations, please keep in mind
+
+00:04:40.078 --> 00:04:43.076
+our guidelines for conduct. You can find them on the wiki,
+
+00:04:43.077 --> 00:04:46.556
+They basically boil down to: please be nice.
+
+00:04:46.557 --> 00:04:48.995
+If all goes well, the prerecorded talks and transcripts
+
+00:04:48.996 --> 00:04:50.994
+should be available from the talk pages
+
+00:04:50.995 --> 00:04:52.733
+shortly after they start playing,
+
+00:04:52.734 --> 00:04:54.632
+and we'll post the recordings of live talks
+
+00:04:54.633 --> 00:04:57.751
+and Q&A sessions within the next month or so.
+
+00:04:57.752 --> 00:05:00.270
+If you'd like to get an update, you can subscribe to
+
+00:05:00.271 --> 00:05:03.569
+the emacsconf-discuss mailing list.
+
+00:05:03.570 --> 00:05:05.128
+All right, let's get going.
+
+00:05:05.129 --> 00:05:07.528
+Leo Vivier is hosting the general track,
+
+00:05:07.529 --> 00:05:10.647
+and Amin Bandali hosting the development track.
+
+00:05:10.648 --> 00:05:13.366
+The other volunteers and I will run around mostly backstage,
+
+00:05:13.367 --> 00:05:15.445
+and you'll probably meet us in the closing remarks.
+
+00:05:15.446 --> 00:05:17.084
+That's also where we get to thank
+
+00:05:17.085 --> 00:05:18.723
+all the people and organizations
+
+00:05:18.724 --> 00:05:21.762
+who make EmacsConf even possible.
+
+00:05:21.763 --> 00:05:24.637
+Thanks for coming to EmacsConf 2023.
diff --git a/2023/captions/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--answers.vtt b/2023/captions/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--answers.vtt
new file mode 100644
index 00000000..b681859e
--- /dev/null
+++ b/2023/captions/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--answers.vtt
@@ -0,0 +1,371 @@
+WEBVTT
+
+
+00:00:16.200 --> 00:00:16.700
+[Speaker 0]: I see 2 questions on the panel already.
+
+00:00:22.660 --> 00:00:23.040
+Let's see, 1 asking how much Andrew uses
+
+00:00:26.320 --> 00:00:26.480
+these ripples remotely or versus on their own
+
+00:00:29.240 --> 00:00:29.740
+desktop. And another asking if this can be
+
+00:00:31.160 --> 00:00:31.660
+integrated with EGLOT.
+
+00:00:34.840 --> 00:00:35.060
+And I will note that it is very cool that
+
+00:00:36.580 --> 00:00:37.080
+this year we've had so many talks on Ripples.
+
+00:00:40.920 --> 00:00:41.140
+Just goes to show how powerful Emacs is and
+
+00:00:42.980 --> 00:00:43.140
+just how much or how far you can push it and
+
+00:00:44.040 --> 00:00:44.540
+how much you can do with it.
+
+00:00:53.460 --> 00:00:53.960
+And so see someone asking on IRC,
+
+00:00:57.780 --> 00:00:58.280
+if or how many people use GnuGeeks.
+
+00:01:01.400 --> 00:01:01.900
+Since we are talking about Scheme,
+
+00:01:05.740 --> 00:01:06.220
+GnuGeeks is a great platform slash operating
+
+00:01:10.380 --> 00:01:10.640
+system or distro for your test house,
+
+00:01:11.920 --> 00:01:12.420
+but also for servers and such.
+
+00:01:13.320 --> 00:01:13.780
+They do some impressive,
+
+00:01:15.240 --> 00:01:15.720
+amazing work. And it's all,
+
+00:01:19.400 --> 00:01:19.900
+pretty much all done in Gindugal's scheme.
+
+00:01:30.260 --> 00:01:30.760
+So very cool stuff. Bye.
+
+00:01:45.260 --> 00:01:45.760
+You
+
+00:03:19.940 --> 00:03:20.140
+I see another interesting question on the
+
+00:03:23.440 --> 00:03:23.940
+pad. How hard is it to add support for
+
+00:03:24.960 --> 00:03:25.460
+something other than Guile?
+
+00:03:28.040 --> 00:03:28.200
+And if it makes sense to contribute at this
+
+00:03:28.940 --> 00:03:29.440
+early stage of development?
+
+00:03:31.960 --> 00:03:32.220
+They said that they've written several
+
+00:03:34.000 --> 00:03:34.140
+packages for chicken skin before and they
+
+00:03:35.400 --> 00:03:35.900
+would like to try this 1 as well.
+
+00:05:26.380 --> 00:05:26.880
+I guess since Andrew isn't still here,
+
+00:05:29.480 --> 00:05:29.640
+and there was some chatter about GnuGeeks in
+
+00:05:32.400 --> 00:05:32.900
+the chat, maybe it might be nice for me to
+
+00:05:35.520 --> 00:05:35.800
+share my screen and plug Inukis for a little
+
+00:05:38.800 --> 00:05:39.000
+bit and introduce it or at least show its
+
+00:05:41.720 --> 00:05:41.980
+website to folks who may not have seen it yet
+
+00:05:43.380 --> 00:05:43.880
+so I'm going to try and do that now.
+
+00:05:45.260 --> 00:05:45.760
+You
+
+00:06:19.760 --> 00:06:20.260
+Okay, let's see if this works.
+
+00:06:33.540 --> 00:06:34.040
+Okay, so this is GNU Geeks' website.
+
+00:06:35.000 --> 00:06:35.500
+You can go to geeks.gnu.org.
+
+00:06:38.820 --> 00:06:39.180
+And they introduced it at the top.
+
+00:06:43.480 --> 00:06:43.980
+So it's a wholly free operating system or
+
+00:06:45.100 --> 00:06:45.600
+distribution of GNU Linux.
+
+00:06:48.600 --> 00:06:49.040
+Meaning that it only has free software
+
+00:06:50.840 --> 00:06:51.340
+packaged and no non-free packages,
+
+00:06:53.560 --> 00:06:53.940
+so it is endorsed by the FSF and the GNU
+
+00:06:56.640 --> 00:06:56.920
+project. As someone said in the chat,
+
+00:06:57.740 --> 00:06:58.240
+it's kind of like Nix,
+
+00:07:01.360 --> 00:07:01.860
+but instead built on GNU Gallop scheme.
+
+00:07:05.320 --> 00:07:05.820
+It has transactional upgrades and rollbacks.
+
+00:07:10.160 --> 00:07:10.380
+So if you do upgrade your system and let's
+
+00:07:11.180 --> 00:07:11.420
+say in the middle of it,
+
+00:07:13.200 --> 00:07:13.700
+your hardware fails or your power goes out,
+
+00:07:16.560 --> 00:07:16.720
+the likelihood of things being corrupted is
+
+00:07:18.840 --> 00:07:19.340
+very low because the upgrade is essentially
+
+00:07:21.560 --> 00:07:22.060
+prepared like in the background.
+
+00:07:24.140 --> 00:07:24.640
+And then pretty much atomically,
+
+00:07:26.780 --> 00:07:27.280
+the system is switched to it.
+
+00:07:30.400 --> 00:07:30.900
+And also if there is some kind of,
+
+00:07:32.400 --> 00:07:32.900
+sorry, I'm losing my voice here.
+
+00:07:34.840 --> 00:07:35.140
+If there is some kind of issue that makes
+
+00:07:35.800 --> 00:07:36.300
+your system unbootable,
+
+00:07:41.480 --> 00:07:41.660
+you could always go back to booting the
+
+00:07:44.600 --> 00:07:44.760
+previous revision of your system when you
+
+00:07:46.100 --> 00:07:46.600
+restart in the Grub bootloader.
+
+00:07:56.740 --> 00:07:57.180
+Yeah, so they have a nice blog where they
+
+00:07:59.340 --> 00:07:59.540
+regularly post updates and what's new in the
+
+00:08:01.000 --> 00:08:01.500
+project. You can go check that out.
+
+00:08:07.240 --> 00:08:07.500
+We also have a packages archive where you can
+
+00:08:09.360 --> 00:08:09.560
+see a list of all the software that has been
+
+00:08:11.060 --> 00:08:11.560
+packaged for GNU Geeks.
+
+00:08:13.620 --> 00:08:14.120
+It is an impressive list.
+
+00:08:16.440 --> 00:08:16.560
+I don't know how many tens of thousands of
+
+00:08:19.720 --> 00:08:20.220
+packages there are. Geeks has been growing
+
+00:08:22.360 --> 00:08:22.840
+very well. And you can search the packages
+
+00:08:29.380 --> 00:08:29.540
+here. And yeah, all kinds of things are
+
+00:08:31.800 --> 00:08:32.299
+packaged. Of course, GNU Emacs is packaged,
+
+00:08:37.260 --> 00:08:37.760
+along with many extensions or packages,
+
+00:08:41.039 --> 00:08:41.260
+GNU Emacs packages that are packaged as
+
+00:08:42.840 --> 00:08:43.340
+system packages for Geeks.
+
+00:08:46.960 --> 00:08:47.460
+Yeah, so definitely go check it out.
+
+00:08:55.680 --> 00:08:56.180
+You can use Geeks both as a standalone
+
+00:08:59.340 --> 00:08:59.840
+package manager, let's say on a Debian-based
+
+00:09:00.780 --> 00:09:01.280
+distribution like Triscale,
+
+00:09:06.180 --> 00:09:06.340
+for example, or you could install it like as
+
+00:09:08.900 --> 00:09:09.400
+a complete system distribution on its own.
+
+00:09:15.560 --> 00:09:16.000
+So the former is useful if you want to maybe
+
+00:09:18.080 --> 00:09:18.420
+get a taste for Geeks and try it out before
+
+00:09:21.140 --> 00:09:21.300
+fully committing to it and switching to it as
+
+00:09:24.620 --> 00:09:24.800
+your main distro. You can try it on top of
+
+00:09:27.720 --> 00:09:27.900
+any other distro pretty much and then you can
+
+00:09:31.080 --> 00:09:31.200
+of course install it on its own as well as a
+
+00:09:31.560 --> 00:09:32.060
+system distribution.
+
+00:09:50.940 --> 00:09:51.140
+Yeah, there are a bunch of manuals and
+
+00:09:53.040 --> 00:09:53.300
+reference cards and videos that you're
+
+00:09:55.920 --> 00:09:56.280
+welcome to watch. They have several mailing
+
+00:09:59.240 --> 00:09:59.440
+lists. It sounds like they have a wiki now as
+
+00:10:04.020 --> 00:10:04.400
+well. And the development is done on Gnu
+
+00:10:09.680 --> 00:10:10.180
+Savannah. If we go to savannah.gnu.org
+
+00:10:12.780 --> 00:10:13.280
+slash projects slash geeks,
+
+00:10:18.640 --> 00:10:18.820
+Yeah, the project is developed here and they
+
+00:10:21.300 --> 00:10:21.500
+have a bunch of repositories including the
+
+00:10:24.340 --> 00:10:24.840
+main 1 which is geeks.git
+
+00:10:28.200 --> 00:10:28.380
+itself. So yeah, folks are welcome to go
+
+00:10:32.380 --> 00:10:32.880
+check it out. Let's see,
+
+00:10:35.860 --> 00:10:36.260
+maybe we can go have a look at some package
+
+00:10:37.540 --> 00:10:37.840
+definitions, although I think we're almost
+
+00:10:38.940 --> 00:10:39.440
+out of time on the live stream.
+
+00:10:42.600 --> 00:10:43.100
+So, yeah, just quickly.
+
+00:10:45.280 --> 00:10:45.780
+Emacs to the CM has all the,
+
+00:10:48.640 --> 00:10:49.140
+Emacs packages or Emacs itself.
+
+00:10:52.120 --> 00:10:52.620
+And Emacs-xyz is where you'll find all the
+
+00:10:54.480 --> 00:10:54.980
+Emacs like ELPA packages,
+
+00:10:57.980 --> 00:10:58.260
+but package for use on GNU Geeks system or
+
+00:11:01.220 --> 00:11:01.360
+with GNU Geeks. And I think that's all the
+
+00:11:04.080 --> 00:11:04.580
+time that we have. So yeah,
+
+00:11:06.000 --> 00:11:06.300
+thanks for tuning in, folks.
+
+00:11:07.800 --> 00:11:08.300
+Please post your questions on the pad.
+
+00:11:09.280 --> 00:11:09.780
+We'll pass them on to Andrew.
+
+00:11:12.400 --> 00:11:12.720
+And yeah, hope you enjoy this.
+
+00:11:15.140 --> 00:11:15.360
+Definitely go check out Andrew's work and Gnu
+
+00:11:25.320 --> 00:11:25.580
+geeks as well. You are currently the only
+
+00:11:26.280 --> 00:11:26.780
+person in this conference.
diff --git a/2023/captions/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--main--chapters.vtt b/2023/captions/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--main--chapters.vtt
new file mode 100644
index 00000000..15bb79f9
--- /dev/null
+++ b/2023/captions/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--main--chapters.vtt
@@ -0,0 +1,68 @@
+WEBVTT
+
+
+00:00:02.120 --> 00:00:23.279
+Introduction
+
+00:00:23.280 --> 00:01:18.179
+Interactive development
+
+00:01:18.180 --> 00:02:53.719
+REPL: Read Eval Print Loop
+
+00:02:53.720 --> 00:04:07.599
+Long-lasting loops
+
+00:04:07.600 --> 00:05:23.159
+Not interruptible
+
+00:05:23.160 --> 00:05:51.479
+No protocol
+
+00:05:51.480 --> 00:07:25.859
+Not scalable
+
+00:07:25.860 --> 00:09:01.739
+nREPL
+
+00:09:01.740 --> 00:10:34.179
+Arei, Ares, and how to try
+
+00:10:34.180 --> 00:11:27.639
+Demo
+
+00:11:27.640 --> 00:12:32.459
+Continuations
+
+00:12:32.460 --> 00:13:33.419
+Reading from stdin
+
+00:13:33.420 --> 00:15:13.159
+Fancy example with continuations
+
+00:15:13.160 --> 00:17:42.059
+Guix API
+
+00:17:42.060 --> 00:17:57.019
+Support
+
+00:17:57.020 --> 00:18:46.219
+Future steps - Multiple simultaneous evaluations in different contexts
+
+00:18:46.220 --> 00:18:56.879
+Tree-sitter integration
+
+00:18:56.880 --> 00:19:22.759
+Full-fledged debugger
+
+00:19:22.760 --> 00:19:58.379
+FAQ - Does it support other Scheme implementations?
+
+00:19:58.380 --> 00:20:22.120
+Is it possible to use it with other text editors?
+
+00:20:22.121 --> 00:20:45.879
+Conclusion
+
+00:20:45.880 --> 00:21:00.680
+Contacts
diff --git a/2023/captions/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--main.vtt b/2023/captions/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--main.vtt
new file mode 100644
index 00000000..7037754b
--- /dev/null
+++ b/2023/captions/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--main.vtt
@@ -0,0 +1,1044 @@
+WEBVTT captioned by sachac, checked by sachac
+
+NOTE Introduction
+
+00:00:02.120 --> 00:00:07.399
+Hello and welcome everyone on EmacsConf 2023.
+
+00:00:07.400 --> 00:00:08.719
+I'm Andrew Tropin.
+
+00:00:08.720 --> 00:00:11.919
+I work on operating systems and programming languages.
+
+00:00:11.920 --> 00:00:16.639
+Today, we discuss Lisps, Schemes, REPLs,
+
+00:00:16.640 --> 00:00:18.139
+interactive development,
+
+00:00:18.140 --> 00:00:23.279
+and how to make your own cozy development environment.
+
+NOTE Interactive development
+
+00:00:23.280 --> 00:00:26.319
+Let's start from interactive development.
+
+00:00:26.320 --> 00:00:29.519
+Lisps are famous for a nice
+
+00:00:29.520 --> 00:00:32.479
+Interactive Development Experience.
+
+00:00:32.480 --> 00:00:33.999
+They have REPLs.
+
+00:00:34.000 --> 00:00:40.119
+Emacs Lisp has its own Lisp machine,
+
+00:00:40.120 --> 00:00:44.719
+and a lot of cool IDE with different functionality
+
+00:00:44.720 --> 00:00:47.879
+is already here and providing
+
+00:00:47.880 --> 00:00:51.619
+a nice and pleasant experience.
+
+00:00:51.620 --> 00:00:56.839
+The question is, is it enough?
+
+00:00:56.840 --> 00:00:59.920
+In most cases, yes, but for some languages,
+
+00:00:59.921 --> 00:01:04.839
+we have some white spaces, some missing pieces.
+
+00:01:04.840 --> 00:01:08.299
+And for example, in Scheme world,
+
+00:01:08.300 --> 00:01:10.879
+we already have a few tools.
+
+00:01:10.880 --> 00:01:14.599
+We have REPL, we have integration for REPL in Emacs,
+
+00:01:14.600 --> 00:01:16.679
+but is it enough?
+
+00:01:16.680 --> 00:01:18.179
+Let's see.
+
+NOTE REPL: Read Eval Print Loop
+
+00:01:18.180 --> 00:01:22.839
+We know that Emacs is very good for Lisps and REPL.
+
+00:01:22.840 --> 00:01:26.039
+Lisp and Emacs should be a perfect setup.
+
+00:01:26.040 --> 00:01:30.079
+But let's see how REPL basically works.
+
+00:01:30.080 --> 00:01:34.799
+It's an event loop which does three things.
+
+00:01:34.800 --> 00:01:37.279
+It reads an expression, it evaluates the expression,
+
+00:01:37.280 --> 00:01:40.739
+and it prints the result.
+
+00:01:40.740 --> 00:01:47.279
+We can take a simple expression, input it into REPL,
+
+00:01:47.280 --> 00:01:48.959
+and evaluate it and see the result.
+
+00:01:48.960 --> 00:01:50.819
+Very nice, very convenient.
+
+00:01:50.820 --> 00:01:55.339
+You can experiment and see immediately what is happening.
+
+00:01:55.340 --> 00:01:57.759
+You can even run a long-running process
+
+00:01:57.760 --> 00:01:58.919
+which does something.
+
+00:01:58.920 --> 00:02:07.199
+You can interrupt it and everything will be okay.
+
+00:02:07.200 --> 00:02:08.639
+But the problem appears
+
+00:02:08.640 --> 00:02:11.659
+when you start to develop a bigger project.
+
+00:02:11.660 --> 00:02:14.039
+And in most cases, you don't do
+
+00:02:14.240 --> 00:02:16.399
+your whole development in REPL.
+
+00:02:16.400 --> 00:02:18.460
+You do only a small part of it.
+
+00:02:18.461 --> 00:02:20.679
+In most cases, you just write
+
+00:02:20.680 --> 00:02:22.919
+the source code in text files,
+
+00:02:22.920 --> 00:02:26.399
+and after that, you run those snippets of code
+
+00:02:26.400 --> 00:02:30.520
+from those text files, or run the whole project.
+
+00:02:30.721 --> 00:02:33.719
+It's not very convenient to copy and paste
+
+00:02:33.720 --> 00:02:36.039
+every time the snippets of code to the REPL,
+
+00:02:36.040 --> 00:02:38.879
+see the result, modify the snippet of code,
+
+00:02:38.880 --> 00:02:41.199
+copy it again, and so on.
+
+00:02:41.200 --> 00:02:44.039
+So people invented some integration
+
+00:02:44.040 --> 00:02:46.079
+between REPL and your text editor.
+
+00:02:46.080 --> 00:02:51.599
+So you can evaluate expressions inside your text editor
+
+00:02:51.600 --> 00:02:53.719
+and see the result here.
+
+NOTE Long-lasting loops
+
+00:02:53.720 --> 00:02:56.679
+Works good so far, but what happens
+
+00:02:56.680 --> 00:03:02.299
+if we run a long-lasting loop,
+
+00:03:02.300 --> 00:03:04.999
+which does a lot of operations.
+
+00:03:05.000 --> 00:03:07.839
+As you can see here with a simple example,
+
+00:03:07.840 --> 00:03:13.599
+the output of the function,
+
+00:03:13.600 --> 00:03:16.759
+stdout of the function is presented here,
+
+00:03:16.760 --> 00:03:18.799
+and the resulting value is here.
+
+00:03:18.800 --> 00:03:22.359
+If you run a long-running process,
+
+00:03:22.360 --> 00:03:24.639
+you don't see anything happening.
+
+00:03:24.640 --> 00:03:29.259
+And you see there's a watch instead of my cursor.
+
+00:03:29.260 --> 00:03:33.719
+Maybe you don't see it, but nothing actually happens,
+
+00:03:33.720 --> 00:03:36.379
+at least from the point of view of the user.
+
+00:03:36.380 --> 00:03:38.399
+But if we interrupt the evaluation,
+
+00:03:38.400 --> 00:03:41.439
+we will see that some process in the background
+
+00:03:41.440 --> 00:03:44.239
+was launched, but we didn't see anything.
+
+00:03:44.240 --> 00:03:51.039
+Because the REPL is a single-threaded blocking process,
+
+00:03:51.040 --> 00:03:54.319
+which reads stdin and prints stdout,
+
+00:03:54.320 --> 00:03:55.679
+make the integration
+
+00:03:55.680 --> 00:03:58.540
+between the REPL and your text editor
+
+00:03:58.541 --> 00:04:02.919
+is not an easy task.
+
+00:04:02.920 --> 00:04:04.320
+And even if you do it,
+
+00:04:04.321 --> 00:04:07.599
+you have a lot of downsides, usually.
+
+NOTE Not interruptible
+
+00:04:07.600 --> 00:04:13.679
+First of all, the process is not interruptible.
+
+00:04:13.680 --> 00:04:18.479
+If you have a remote process which listens on the socket
+
+00:04:18.480 --> 00:04:21.939
+to which you connect from your development environment,
+
+00:04:21.940 --> 00:04:25.479
+and you run some infinite loop, for example,
+
+00:04:25.480 --> 00:04:28.299
+you can't interrupt it.
+
+00:04:28.300 --> 00:04:31.239
+Because interruption is done via signals,
+
+00:04:31.240 --> 00:04:35.039
+and signals to remote processes are not usually
+
+00:04:35.040 --> 00:04:38.759
+the thing in such integrations.
+
+NOTE Output is not interactive
+
+00:04:38.760 --> 00:04:41.159
+Output is also not interactive.
+
+00:04:41.160 --> 00:04:45.319
+Usually, for example, here you can see
+
+00:04:45.320 --> 00:04:47.799
+when I evaluate the expression,
+
+00:04:47.800 --> 00:04:51.119
+the output is captured on the evaluation side,
+
+00:04:51.120 --> 00:04:53.719
+and after that, after the whole evaluation
+
+00:04:53.720 --> 00:04:56.179
+of the whole expression finished,
+
+00:04:56.180 --> 00:05:06.759
+I get the result, all the stdout at once.
+
+00:05:06.760 --> 00:05:09.919
+And if I run the process which evaluates for 5 seconds,
+
+00:05:09.920 --> 00:05:13.780
+I will see the first signs of the life
+
+00:05:13.781 --> 00:05:17.039
+only after 5 seconds of evaluation.
+
+00:05:17.040 --> 00:05:23.159
+Okay, what else?
+
+NOTE No protocol
+
+00:05:23.160 --> 00:05:26.119
+When you do such integrations, you have no protocol,
+
+00:05:26.120 --> 00:05:29.759
+you have just stdin and stdout.
+
+00:05:29.760 --> 00:05:32.919
+You print to stdin from your text editor.
+
+00:05:32.920 --> 00:05:36.679
+You read from stdout of the process.
+
+00:05:36.680 --> 00:05:40.339
+It's hard to tell if evaluation is finished,
+
+00:05:40.340 --> 00:05:47.319
+if it requires stdin, and how to extend the REPL
+
+00:05:47.320 --> 00:05:51.479
+to make it more featureful, and so on.
+
+NOTE Not scalable
+
+00:05:51.480 --> 00:05:57.359
+And also, such integrations are usually not very scalable.
+
+00:05:57.360 --> 00:06:14.699
+For example, if you want to have a completion,
+
+00:06:14.700 --> 00:06:17.460
+you type something, you have the completion. Cool.
+
+00:06:17.461 --> 00:06:22.039
+But if you run the process and at the same time
+
+00:06:22.040 --> 00:06:24.620
+try to have a completion, you don't have it,
+
+00:06:24.621 --> 00:06:29.799
+because the evaluation is in progress,
+
+00:06:29.800 --> 00:06:33.279
+and you can't calculate the completion candidates
+
+00:06:33.280 --> 00:06:35.519
+at the same time. To make it more obvious,
+
+00:06:35.520 --> 00:06:41.019
+I will start a completion here.
+
+00:06:41.020 --> 00:06:43.279
+You see the completion pop-ups.
+
+00:06:43.280 --> 00:06:46.159
+I start the evaluation process,
+
+00:06:46.160 --> 00:06:49.859
+and when I try to complete something,
+
+00:06:49.860 --> 00:06:53.119
+the evaluation freezes and there is no completion.
+
+00:06:53.120 --> 00:06:55.479
+Not very convenient.
+
+00:06:55.480 --> 00:06:58.119
+Usually, you have some long-running processes
+
+00:06:58.120 --> 00:07:01.399
+and you want them to continue while you have
+
+00:07:01.400 --> 00:07:08.579
+your go to definition, completion, and other things.
+
+00:07:08.580 --> 00:07:13.659
+Overall, those issues make it quite inconvenient
+
+00:07:13.660 --> 00:07:18.419
+to integrate REPL in text editors or development environments,
+
+00:07:18.420 --> 00:07:21.379
+so you need something else
+
+00:07:21.380 --> 00:07:25.859
+to make the work comfortable.
+
+NOTE nREPL
+
+00:07:25.860 --> 00:07:28.979
+There is already a solution called nREPL.
+
+00:07:28.980 --> 00:07:31.119
+It's a synchronous protocol which allows
+
+00:07:31.120 --> 00:07:34.019
+to send operations to the server
+
+00:07:34.020 --> 00:07:37.759
+and receive responses in a synchronous manner.
+
+00:07:37.760 --> 00:07:42.159
+And here is a simple example of a few operations.
+
+00:07:42.160 --> 00:07:45.079
+First one is cloning the existing session,
+
+00:07:45.080 --> 00:07:49.240
+and as a response you will get a new session.
+
+00:07:49.241 --> 00:07:52.099
+Also you send the evaluation request with code
+
+00:07:52.100 --> 00:07:55.639
+that you want to evaluate, and you get two responses.
+
+00:07:55.640 --> 00:08:00.600
+First one says that output is captured
+
+00:08:00.601 --> 00:08:02.839
+and it's equal to "hi\n",
+
+00:08:02.840 --> 00:08:06.560
+and after that, you receive an "Evaluation completed",
+
+00:08:06.561 --> 00:08:12.439
+the value of this expression.
+
+00:08:12.440 --> 00:08:14.079
+This protocol was developed
+
+00:08:14.080 --> 00:08:15.879
+for CIDER development environment.
+
+00:08:15.880 --> 00:08:18.759
+It's a Clojure development environment for Emacs.
+
+00:08:18.760 --> 00:08:22.859
+It's very cool, featureful, reliable,
+
+00:08:22.860 --> 00:08:26.899
+and I would say production-ready.
+
+00:08:26.900 --> 00:08:31.499
+A lot of professional Clojure developers use it.
+
+00:08:31.500 --> 00:08:33.239
+The nREPL protocol is very simple.
+
+00:08:33.240 --> 00:08:38.219
+It has a few operations out of the box,
+
+00:08:38.220 --> 00:08:46.479
+and you can extend it with any arbitrary operation you want.
+
+00:08:46.480 --> 00:08:53.819
+I work a lot on Guix codebase and other Scheme projects,
+
+00:08:53.820 --> 00:08:57.299
+so the experience I had previously with nREPL
+
+00:08:57.300 --> 00:08:59.399
+was not satisfying. I decided
+
+00:08:59.400 --> 00:09:01.739
+to just implement nREPL protocol.
+
+NOTE Arei, Ares, and how to try
+
+00:09:01.740 --> 00:09:05.719
+First of all, I implemented nREPL server in Guile.
+
+00:09:05.720 --> 00:09:11.339
+I called it `guile-ares-rs`, and used it
+
+00:09:11.340 --> 00:09:13.959
+with a generic nREPL client for Emacs.
+
+00:09:13.960 --> 00:09:14.719
+It worked.
+
+00:09:14.720 --> 00:09:18.639
+It had some rough edges, but overall it was okay.
+
+00:09:18.640 --> 00:09:21.639
+And after that, to add more features
+
+00:09:21.640 --> 00:09:25.079
+to make the implementation more complete,
+
+00:09:25.080 --> 00:09:33.219
+I wrote my own nREPL client for Emacs and called it `arei`.
+
+00:09:33.220 --> 00:09:40.179
+And I got almost complete Guile IDE in two months.
+
+00:09:40.180 --> 00:09:45.319
+So `ares-rs` is nREPL server implementation.
+
+00:09:45.320 --> 00:09:49.679
+`arei` is Emacs client, which uses the same nREPL protocol.
+
+00:09:49.680 --> 00:09:54.439
+It utilizes `sesman` package for managing sessions,
+
+00:09:54.440 --> 00:10:00.079
+the association of buffers with nREPL connection.
+
+00:10:00.080 --> 00:10:04.379
+It has some roots.
+
+00:10:04.380 --> 00:10:06.639
+The implementation has some roots
+
+00:10:06.640 --> 00:10:09.979
+in Geiser, CIDER, Monroe, and Rail.
+
+00:10:09.980 --> 00:10:15.279
+I took small snippets for some parts of functionality.
+
+00:10:15.280 --> 00:10:19.479
+I used the CAPF and xref infrastructure
+
+00:10:19.480 --> 00:10:23.079
+for completion at point and cross-reference capabilities.
+
+00:10:23.080 --> 00:10:27.679
+And by the time of conference, I hope
+
+00:10:27.680 --> 00:10:30.199
+that README will be complete enough
+
+00:10:30.200 --> 00:10:34.179
+so you will be able to try it yourself.
+
+NOTE Demo
+
+00:10:34.180 --> 00:10:42.679
+Let's see what is possible with it already.
+
+00:10:42.680 --> 00:10:46.719
+Let's connect to nREPL server.
+
+00:10:51.900 --> 00:10:56.280
+After that, you can evaluate the expression.
+
+00:10:56.281 --> 00:11:02.319
+And you see the stdout and the result.
+
+00:11:02.320 --> 00:11:04.719
+Very nice, very convenient.
+
+00:11:04.720 --> 00:11:08.659
+You have different expression, you evaluate it,
+
+00:11:08.660 --> 00:11:10.359
+you get the value of the evaluation.
+
+00:11:10.360 --> 00:11:12.279
+You can run an infinite loop
+
+00:11:12.280 --> 00:11:15.639
+which prints to stderr and stdout
+
+00:11:15.640 --> 00:11:18.599
+and you see all necessary stuff.
+
+00:11:18.600 --> 00:11:19.299
+Very cool.
+
+00:11:19.300 --> 00:11:21.959
+But also, you can interrupt the evaluation,
+
+00:11:21.960 --> 00:11:25.159
+which is very convenient if you accidentally
+
+00:11:25.160 --> 00:11:27.639
+run an infinite loop.
+
+NOTE Continuations
+
+00:11:27.640 --> 00:11:32.939
+Also, do you remember here we have a few more examples
+
+00:11:32.940 --> 00:11:34.079
+that we didn't try yet?
+
+00:11:34.080 --> 00:11:39.159
+For example, on usual REPL implementation,
+
+00:11:39.160 --> 00:11:47.599
+if I evaluate this expression, I get return value.
+
+00:11:47.600 --> 00:11:50.759
+I make a continuation and save it to this variable
+
+00:11:50.760 --> 00:11:52.859
+and I try to call this evaluation
+
+00:11:52.860 --> 00:11:55.339
+and I get an exception,
+
+00:11:55.340 --> 00:11:58.399
+because the environment in which this continuation
+
+00:11:58.400 --> 00:12:03.479
+was created was different and it has redefined
+
+00:12:03.480 --> 00:12:06.159
+stdout and stderr to capture it.
+
+00:12:06.160 --> 00:12:08.979
+But when I run it one more time,
+
+00:12:08.980 --> 00:12:12.199
+when I resume the continuation,
+
+00:12:12.200 --> 00:12:15.799
+the environment changed and it doesn't work.
+
+00:12:15.800 --> 00:12:17.419
+What happens in `arei`?
+
+00:12:17.420 --> 00:12:21.759
+I define continuation, I save the continuation
+
+00:12:21.760 --> 00:12:23.479
+for the simple expression
+
+00:12:23.480 --> 00:12:27.279
+and I resume the continuation with a new argument,
+
+00:12:27.280 --> 00:12:30.139
+and you can see at the top of the screen
+
+00:12:30.140 --> 00:12:32.459
+that it works perfectly fine.
+
+NOTE Reading from stdin
+
+00:12:32.460 --> 00:12:35.559
+Also, with a usual REPL implementation,
+
+00:12:35.560 --> 00:12:40.319
+let's see what happens when we have a process
+
+00:12:40.320 --> 00:12:41.919
+which reads from stdin.
+
+00:12:41.920 --> 00:12:48.099
+I evaluate the expression and nothing visible happens.
+
+00:12:48.100 --> 00:12:52.999
+I can try to type `C-g`, `C-c`,
+
+00:12:53.000 --> 00:12:56.559
+and after some time it will say user interrupt.
+
+00:12:56.560 --> 00:13:00.439
+What actually I expect in such a case
+
+00:13:00.440 --> 00:13:04.679
+to have a minibuffer which prompts me for the input.
+
+00:13:04.680 --> 00:13:10.019
+When I evaluate the same expression in the `arei`,
+
+00:13:10.020 --> 00:13:12.199
+you see the prompt at the minibuffer
+
+00:13:12.200 --> 00:13:21.899
+and here I can tell, "Hello I'm a message from minibuffer".
+
+00:13:21.900 --> 00:13:26.099
+Cool. You will see that this message is printed to stdout,
+
+00:13:26.100 --> 00:13:28.679
+and unspecified was returned
+
+00:13:28.680 --> 00:13:33.419
+as a result of this expression.
+
+NOTE Fancy example with continuations
+
+00:13:33.420 --> 00:13:37.319
+Let's make some fancy example with continuations.
+
+00:13:37.320 --> 00:13:45.079
+Continuations is a very cool mechanism
+
+00:13:45.080 --> 00:13:47.999
+which is not the topic of today's talk,
+
+00:13:48.000 --> 00:13:50.999
+but you can find a lot of interesting information
+
+00:13:51.000 --> 00:13:54.439
+in Scheme documentation or in related books,
+
+00:13:54.440 --> 00:13:58.339
+and I advise you to do it because it's really nice thing
+
+00:13:58.340 --> 00:14:00.119
+that is actually applicable
+
+00:14:00.120 --> 00:14:03.519
+in many different programming languages.
+
+00:14:03.520 --> 00:14:05.199
+Here you can see the infinite loop
+
+00:14:05.200 --> 00:14:09.159
+which just prints values increasing one by one.
+
+00:14:09.160 --> 00:14:13.299
+And here we save a continuation on each iteration.
+
+00:14:13.300 --> 00:14:18.059
+I can call the continuation
+
+00:14:18.060 --> 00:14:21.939
+and it will resume from the previous saved step.
+
+00:14:21.940 --> 00:14:27.679
+And you can see, it resumed from the same step
+
+00:14:27.680 --> 00:14:31.640
+we interrupted earlier, but we provided a new value for it.
+another value for it.
+
+00:14:31.641 --> 00:14:33.920
+We can provide another value
+
+00:14:33.921 --> 00:14:39.199
+and it resumed from the same spot it was saved earlier.
+
+00:14:39.200 --> 00:14:42.579
+But I also can provide a `read-i` value
+
+00:14:42.580 --> 00:14:45.199
+and if I provide `read-i` value,
+
+00:14:45.200 --> 00:14:50.779
+the infinite loop will read the input from stdin
+
+00:14:50.780 --> 00:14:53.319
+and will continue the evaluation
+
+00:14:53.320 --> 00:14:56.679
+with a different `i` provided in this input.
+
+00:14:56.680 --> 00:15:03.039
+So let's try to type some arbitrary value
+
+00:15:03.040 --> 00:15:07.519
+and you see that the loop continued with this value.
+
+00:15:07.520 --> 00:15:08.039
+Very nice.
+
+00:15:08.040 --> 00:15:13.159
+And every time we could easily interrupt it.
+
+NOTE Guix API
+
+00:15:13.160 --> 00:15:17.319
+Okay, what most annoying thing that I had previously
+
+00:15:17.320 --> 00:15:19.339
+with the usual REPL implementation
+
+00:15:19.340 --> 00:15:22.759
+that I have a quite nice Guix API
+
+00:15:22.760 --> 00:15:27.579
+where I can build packages, systems and other stuff.
+
+00:15:27.580 --> 00:15:35.359
+But if I evaluate this expression, I will get an error.
+
+00:15:35.360 --> 00:15:38.039
+Okay. I will get an error
+
+00:15:38.040 --> 00:15:44.479
+because I don't have an appropriate environment.
+
+00:15:44.480 --> 00:15:51.579
+But what I can do, I can connect to the remote REPL
+
+00:15:51.580 --> 00:15:55.059
+by creating a server with `guix repl --listen` command
+
+00:15:55.060 --> 00:15:58.619
+and connecting to it with `geiser-connect` command.
+
+00:15:58.620 --> 00:16:01.819
+And now I can evaluate this expression.
+
+00:16:01.820 --> 00:16:03.359
+Right?
+
+00:16:03.360 --> 00:16:10.479
+Wow.
+
+00:16:10.480 --> 00:16:14.339
+Okay.
+
+00:16:14.340 --> 00:16:19.039
+It actually doesn't matter for my example.
+
+00:16:19.040 --> 00:16:22.879
+I will explain how it doesn't work easily.
+
+00:16:22.880 --> 00:16:26.519
+This is a long-running process which prints something
+
+00:16:26.520 --> 00:16:29.579
+and it can take up to a few minutes.
+
+00:16:29.580 --> 00:16:33.359
+And for the whole few minutes I don't see any results,
+
+00:16:33.360 --> 00:16:38.719
+the same as with this infinite loop which prints to stdout
+
+00:16:38.720 --> 00:16:42.199
+but I don't see anything interactively.
+
+00:16:42.200 --> 00:16:45.619
+With `arei`, I can run
+
+00:16:45.620 --> 00:16:47.920
+the evaluation of the same expression,
+
+00:16:51.440 --> 00:16:54.119
+and you will see instantly
+
+00:16:54.120 --> 00:17:00.200
+that stdout is presented here in slightly yellowish color.
+
+00:17:00.201 --> 00:17:02.920
+I can interrupt the evaluation
+
+00:17:02.921 --> 00:17:06.039
+if I don't want to wait until it's finished,
+
+00:17:06.040 --> 00:17:15.779
+and just after that, I can evaluate another value.
+
+00:17:15.780 --> 00:17:23.359
+So that's cool.
+
+00:17:23.360 --> 00:17:25.959
+And let's see one more thing.
+
+00:17:25.960 --> 00:17:30.339
+We have an infinite loop and we have some completion here.
+
+00:17:30.340 --> 00:17:32.579
+And completion still works,
+
+00:17:32.580 --> 00:17:33.659
+very nice,
+
+00:17:33.660 --> 00:17:40.259
+while the infinite loop is running.
+
+00:17:40.260 --> 00:17:42.059
+Okay.
+
+NOTE Support
+
+00:17:42.060 --> 00:17:44.919
+Actually it took me around two months
+
+00:17:44.920 --> 00:17:48.039
+of full-time work funded by my own savings,
+
+00:17:48.040 --> 00:17:51.599
+and you can support and help to the project
+
+00:17:51.600 --> 00:17:57.019
+using OpenCollective or by contributing on SourceHut.
+
+NOTE Future steps - Multiple simultaneous evaluations in different contexts
+
+00:17:57.020 --> 00:17:58.699
+The future steps for the project
+
+00:17:58.700 --> 00:18:03.674
+include an experimental workflow where you have
+
+00:18:03.675 --> 00:18:07.539
+multiple simultaneous evaluation in different contexts.
+
+00:18:07.540 --> 00:18:11.959
+For example, you have Fibers, you have Goblins,
+
+00:18:11.960 --> 00:18:16.919
+you have some HTTP server or some other thing,
+
+00:18:16.920 --> 00:18:22.119
+and you want to run all of them independently
+
+00:18:22.120 --> 00:18:25.319
+in slightly isolated sessions,
+
+00:18:25.320 --> 00:18:29.799
+and you want to have the ability
+
+00:18:29.800 --> 00:18:30.959
+to still interact with them.
+
+00:18:30.960 --> 00:18:33.979
+For example, if they require standard input
+
+00:18:33.980 --> 00:18:39.239
+or something else, you want to be able to provide it.
+
+00:18:39.240 --> 00:18:42.519
+You want to see the stderr and stdout
+
+00:18:42.520 --> 00:18:46.219
+of those long-running processes and so on.
+
+NOTE Tree-sitter integration
+
+00:18:46.220 --> 00:18:50.239
+The second thing is tree-sitter integration
+
+00:18:50.240 --> 00:18:53.399
+for better syntax highlighting, code navigation,
+
+00:18:53.400 --> 00:18:56.879
+and other features.
+
+NOTE Full-fledged debugger
+
+00:18:56.880 --> 00:19:01.399
+And after that, probably we will do a full-fledged debugger
+
+00:19:01.400 --> 00:19:06.239
+so you can jump expressions one by one
+
+00:19:06.240 --> 00:19:10.779
+and see the results and see some intermediate values
+
+00:19:10.780 --> 00:19:13.079
+during the evaluation.
+
+00:19:13.080 --> 00:19:14.479
+And it's very possible
+
+00:19:14.480 --> 00:19:17.079
+because nREPL is a very extensible protocol
+
+00:19:17.080 --> 00:19:18.199
+and you can implement
+
+00:19:18.200 --> 00:19:22.759
+whatever you want on top of it.
+
+NOTE FAQ - Does it support other Scheme implementations?
+
+00:19:22.760 --> 00:19:27.079
+I will answer two probably very frequent questions.
+
+00:19:27.080 --> 00:19:30.499
+Does it support other Scheme implementations?
+
+00:19:30.500 --> 00:19:32.279
+At the moment, it doesn't,
+
+00:19:32.280 --> 00:19:36.519
+but the Scheme implementation is not restricted.
+
+00:19:36.520 --> 00:19:40.639
+You have a server which is implemented in your language
+
+00:19:40.640 --> 00:19:43.974
+and you have a client--in our case, `arei`--
+
+00:19:43.975 --> 00:19:48.319
+which communicates with this protocol.
+
+00:19:48.320 --> 00:19:52.359
+So if you implement nREPL server in a different language,
+
+00:19:52.360 --> 00:19:58.379
+it should work with already implemented `arei` client.
+
+NOTE Is it possible to use it with other text editors?
+
+00:19:58.380 --> 00:20:04.079
+And is it possible to use the same functionality
+
+00:20:04.080 --> 00:20:06.999
+in other text editors, for example in VS Code,
+
+00:20:07.000 --> 00:20:08.679
+Vim, whatever?
+
+00:20:08.680 --> 00:20:13.799
+Yes, it's possible and the case is similar here.
+
+00:20:13.800 --> 00:20:16.599
+You have already implemented nREPL server
+
+00:20:16.600 --> 00:20:19.359
+and you can write your own nREPL client
+
+00:20:19.360 --> 00:20:22.120
+in a different text editor and it will work.
+
+NOTE Conclusion
+
+00:20:22.121 --> 00:20:26.759
+I would like to thank the authors and maintainers
+
+00:20:26.760 --> 00:20:30.439
+and contributors of Guile, Geiser, CIDER, Clojure,
+
+00:20:30.440 --> 00:20:33.359
+and Emacs, and all other people
+
+00:20:33.360 --> 00:20:38.779
+who are somehow related to the work on those projects
+
+00:20:38.780 --> 00:20:42.079
+involved in this talk.
+
+00:20:42.080 --> 00:20:45.879
+And I hope the Scheme programming will be enjoyable.
+
+NOTE Contacts
+
+00:20:45.880 --> 00:20:47.239
+If you want to contact me,
+
+00:20:47.240 --> 00:20:49.799
+join #tropin IRC channel at libera.chat,
+
+00:20:49.800 --> 00:20:53.039
+or drop me a message via email or feediverse
+
+00:20:53.040 --> 00:20:55.879
+using `andrew@trop.in` handle.
+
+00:20:55.880 --> 00:21:00.680
+I will see you in a bit in Q&A session.
diff --git a/2023/captions/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--answers.vtt b/2023/captions/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--answers.vtt
new file mode 100644
index 00000000..2c35ee7e
--- /dev/null
+++ b/2023/captions/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--answers.vtt
@@ -0,0 +1,1871 @@
+WEBVTT
+
+
+00:00:05.940 --> 00:00:06.060
+[Speaker 1]: Yeah, we're live. So whoever's in the
+
+00:00:08.240 --> 00:00:08.380
+background might be able to see you live in
+
+00:00:09.900 --> 00:00:10.080
+about 10 seconds as soon as the stream
+
+00:00:11.380 --> 00:00:11.880
+catches up. Hi Jacob, how are you doing?
+
+00:00:12.360 --> 00:00:12.540
+[Speaker 0]: Got that? We're live. I'm doing well.
+
+00:00:13.080 --> 00:00:13.580
+How are you doing today?
+
+00:00:16.200 --> 00:00:16.400
+[Speaker 1]: I am doing well and this is the very last
+
+00:00:17.960 --> 00:00:18.160
+talk of the day so I'm very excited not
+
+00:00:20.020 --> 00:00:20.279
+because it finishes but because I am tired
+
+00:00:22.080 --> 00:00:22.580
+[Speaker 0]: Yeah very understandable.
+
+00:00:23.860 --> 00:00:24.320
+Well thanks for all of your hard work.
+
+00:00:26.180 --> 00:00:26.320
+We all really appreciate it and all the other
+
+00:00:26.320 --> 00:00:26.820
+organizers.
+
+00:00:28.980 --> 00:00:29.160
+[Speaker 1]: and need some sleep. Well on behalf of all
+
+00:00:30.980 --> 00:00:31.220
+the organizers thank you but you know it all
+
+00:00:33.840 --> 00:00:34.120
+it makes it all worthwhile when we see the
+
+00:00:36.280 --> 00:00:36.400
+valuable contribution that every single 1 of
+
+00:00:37.160 --> 00:00:37.660
+our speakers are making,
+
+00:00:39.559 --> 00:00:39.920
+not only for recording their talks,
+
+00:00:42.180 --> 00:00:42.380
+which is a tough demand on people to say,
+
+00:00:43.420 --> 00:00:43.920
+oh, if you want to go to EmacsConf,
+
+00:00:45.480 --> 00:00:45.980
+you might want to record your talk.
+
+00:00:48.960 --> 00:00:49.120
+But then almost all of you do it and you
+
+00:00:50.440 --> 00:00:50.640
+spend a lot of time with us answering
+
+00:00:51.580 --> 00:00:51.940
+questions. So we couldn't do it.
+
+00:00:53.680 --> 00:00:53.900
+You know, we wouldn't be spending as much
+
+00:00:54.960 --> 00:00:55.460
+energy, half as much energy,
+
+00:00:58.320 --> 00:00:58.660
+if we didn't believe that it was worth it.
+
+00:01:01.120 --> 00:01:01.320
+So now it's me thanking you on behalf of all
+
+00:01:01.480 --> 00:01:01.980
+the speakers.
+
+00:01:03.900 --> 00:01:04.200
+[Speaker 0]: Well thank you that's part of what I wanted
+
+00:01:06.040 --> 00:01:06.340
+to get across in my talk was that coming
+
+00:01:08.800 --> 00:01:09.000
+together and sharing ourselves and you know
+
+00:01:11.140 --> 00:01:11.320
+not just putting little little essays out
+
+00:01:13.020 --> 00:01:13.380
+there and single videos but coming together
+
+00:01:15.720 --> 00:01:15.940
+as a community you know sharing ourselves our
+
+00:01:18.640 --> 00:01:18.800
+faces our voices you know it really brings us
+
+00:01:19.840 --> 00:01:20.340
+together and makes everyone stronger.
+
+00:01:22.940 --> 00:01:23.400
+[Speaker 1]: Exactly, and I think it's been a recurring
+
+00:01:27.280 --> 00:01:27.440
+theme. Most of the talks we have at
+
+00:01:28.840 --> 00:01:29.200
+EmacsConf, they're usually about sharing,
+
+00:01:30.580 --> 00:01:30.800
+obviously, sharing the knowledge that they've
+
+00:01:32.960 --> 00:01:33.340
+acquired, either writing a package or
+
+00:01:35.860 --> 00:01:36.040
+learning how to use Emacs as a professor in
+
+00:01:37.200 --> 00:01:37.700
+academia or stuff like this.
+
+00:01:39.380 --> 00:01:39.600
+But what I particularly like this year about
+
+00:01:41.720 --> 00:01:41.960
+the different talks we've had is that they've
+
+00:01:44.479 --> 00:01:44.979
+really made the sharing even more obvious.
+
+00:01:46.720 --> 00:01:46.840
+We've had the mentoring this afternoon and we
+
+00:01:49.640 --> 00:01:49.740
+have your talk about using videos as a
+
+00:01:51.100 --> 00:01:51.600
+different medium to get into something.
+
+00:01:54.020 --> 00:01:54.520
+And I really think in terms of accessibility
+
+00:01:58.780 --> 00:01:58.940
+to Emacs, all of you who talked about this
+
+00:01:59.960 --> 00:02:00.180
+topic are doing a wonderful job.
+
+00:02:01.400 --> 00:02:01.900
+So, thank you again for all of this.
+
+00:02:04.080 --> 00:02:04.240
+[Speaker 0]: Thank you. Yeah, do we have any questions to
+
+00:02:04.360 --> 00:02:04.860
+be answering?
+
+00:02:08.199 --> 00:02:08.560
+[Speaker 1]: Yeah, so only 1 for now and I'll invite
+
+00:02:10.860 --> 00:02:11.200
+people as usual to please add their question
+
+00:02:12.720 --> 00:02:13.220
+to the pad or to join us on BBB.
+
+00:02:15.920 --> 00:02:16.080
+Now the chat is open if you want to join us
+
+00:02:17.480 --> 00:02:17.980
+on BBB and ask your questions directly.
+
+00:02:20.520 --> 00:02:20.740
+And in the meantime, I will read the first
+
+00:02:22.700 --> 00:02:23.200
+question. So, Kroting,
+
+00:02:25.040 --> 00:02:25.520
+are you using OxReveal to make your slides?
+
+00:02:26.520 --> 00:02:26.960
+If not, what are you using?
+
+00:02:27.740 --> 00:02:28.240
+They look very elegant,
+
+00:02:28.820 --> 00:02:29.320
+and I concur.
+
+00:02:32.920 --> 00:02:33.420
+[Speaker 0]: That's true. I am using OxReveal.
+
+00:02:35.320 --> 00:02:35.580
+I have a whole entire video on it.
+
+00:02:36.020 --> 00:02:36.520
+So if you're interested,
+
+00:02:37.840 --> 00:02:38.000
+feel free to take a look.
+
+00:02:39.960 --> 00:02:40.340
+It's very simple to get started with.
+
+00:02:42.560 --> 00:02:42.780
+There are a lot of different packages to use
+
+00:02:45.640 --> 00:02:46.140
+Reveal.js and Emacs. OxReveal or OrgReveal
+
+00:02:47.320 --> 00:02:47.820
+seems to be pretty easy to use.
+
+00:02:48.840 --> 00:02:49.020
+So try that 1 out. Yeah,
+
+00:02:49.440 --> 00:02:49.940
+it's really nice.
+
+00:02:54.020 --> 00:02:54.160
+[Speaker 1]: Awesome. I'm going to give a little bit of
+
+00:02:55.840 --> 00:02:56.200
+time for the other people to finish writing
+
+00:02:56.980 --> 00:02:57.260
+their answer. In the meantime,
+
+00:02:58.260 --> 00:02:58.660
+I'll ask you 1 of my own.
+
+00:02:59.620 --> 00:02:59.960
+So you said you were in college,
+
+00:03:01.500 --> 00:03:01.780
+right? In com sci. Sorry,
+
+00:03:02.980 --> 00:03:03.480
+[Speaker 0]: Yeah.
+
+00:03:07.240 --> 00:03:07.460
+[Speaker 1]: computer science. I think it's great to find
+
+00:03:08.860 --> 00:03:09.360
+people in computer science who have,
+
+00:03:11.780 --> 00:03:12.280
+from the get-go, as soon as their bachelor,
+
+00:03:16.220 --> 00:03:16.360
+an appetite for sharing and vulgarizing a lot
+
+00:03:17.780 --> 00:03:17.900
+of knowledge. Because it feels like if you
+
+00:03:18.540 --> 00:03:18.760
+get started like this,
+
+00:03:20.580 --> 00:03:20.740
+you're gonna have a well over time as you
+
+00:03:21.500 --> 00:03:21.820
+progress with the learning.
+
+00:03:23.720 --> 00:03:23.860
+So I'm very excited to see what you do in the
+
+00:03:24.720 --> 00:03:25.220
+coming years because of this.
+
+00:03:26.420 --> 00:03:26.920
+[Speaker 0]: Thank you, thank you, yeah.
+
+00:03:29.700 --> 00:03:29.860
+And Emacs has been like very central to my
+
+00:03:32.100 --> 00:03:32.300
+education as well. It's a great way to sort
+
+00:03:34.460 --> 00:03:34.640
+of organize myself and also it's a good way
+
+00:03:36.040 --> 00:03:36.220
+to share with other people with Org Mode.
+
+00:03:38.000 --> 00:03:38.500
+I can export my code, I can export notes.
+
+00:03:39.340 --> 00:03:39.840
+It makes it so simple.
+
+00:03:42.240 --> 00:03:42.720
+My peers are also impressed by my PDF
+
+00:03:44.260 --> 00:03:44.440
+documents and whatever I can produce with
+
+00:03:48.040 --> 00:03:48.160
+[Speaker 1]: Oh yeah. If only they knew how much time it
+
+00:03:49.840 --> 00:03:50.340
+takes us to get LaTeX to behave properly.
+
+00:03:52.680 --> 00:03:52.860
+[Speaker 0]: Emacs. Right, right. I see some more
+
+00:03:53.980 --> 00:03:54.480
+questions coming in I can answer.
+
+00:03:56.940 --> 00:03:57.100
+[Speaker 1]: Sure, I'll read it for you so that it's a
+
+00:03:57.440 --> 00:03:57.940
+little more interactive.
+
+00:03:59.920 --> 00:04:00.160
+So, second question. Videos can be very
+
+00:04:01.820 --> 00:04:02.320
+inspirational to learn about something by
+
+00:04:04.860 --> 00:04:05.360
+watching it used. I often find it,
+
+00:04:07.080 --> 00:04:07.440
+I often find that I need to do some research
+
+00:04:09.120 --> 00:04:09.440
+after watching a video to learn more.
+
+00:04:10.640 --> 00:04:11.040
+Do you give people links to relevant
+
+00:04:11.820 --> 00:04:12.320
+resources or etc?
+
+00:04:15.060 --> 00:04:15.300
+[Speaker 0]: Yeah, that's something I could definitely do
+
+00:04:17.800 --> 00:04:18.300
+more of. When I make a video I try to combine
+
+00:04:20.459 --> 00:04:20.600
+all the relevant resources and make 1 sort of
+
+00:04:23.600 --> 00:04:24.100
+cohesive video. I like to think of my video
+
+00:04:26.580 --> 00:04:26.980
+as a jumping off point to the Emacs manuals
+
+00:04:30.040 --> 00:04:30.160
+because the manuals are so so full but you
+
+00:04:31.360 --> 00:04:31.800
+need to have a sort of a cursory
+
+00:04:33.800 --> 00:04:34.120
+understanding to get started with them.
+
+00:04:35.440 --> 00:04:35.600
+And then yeah, if there are other sort of
+
+00:04:36.880 --> 00:04:37.000
+GitHub links or something like that,
+
+00:04:38.220 --> 00:04:38.720
+I like to put those in the description.
+
+00:04:42.720 --> 00:04:42.980
+[Speaker 1]: Good question. Right. And I think it's arcing
+
+00:04:44.820 --> 00:04:45.320
+back also. I keep using the word arcing back.
+
+00:04:47.420 --> 00:04:47.580
+I'm sorry. It's my... Every EmacsConf I have
+
+00:04:49.440 --> 00:04:49.640
+1 word or 1 phrase that I keep saying over
+
+00:04:51.220 --> 00:04:51.360
+and over again and this 1 is not leaving but
+
+00:04:53.000 --> 00:04:53.240
+don't worry we only have about 1 more hour
+
+00:04:54.640 --> 00:04:55.140
+and then you're done with me arcing out,
+
+00:04:59.060 --> 00:04:59.540
+arcing back to stuff. I think this is
+
+00:05:03.740 --> 00:05:03.960
+reminding me of both the mentoring talk we've
+
+00:05:06.760 --> 00:05:07.120
+had today about onboarding people basically
+
+00:05:08.480 --> 00:05:08.600
+so that they can have a well of a time on
+
+00:05:11.040 --> 00:05:11.240
+their own on Emacs and I'd agree with you,
+
+00:05:13.180 --> 00:05:13.460
+you know, as much as we like to rave about
+
+00:05:15.140 --> 00:05:15.640
+Emacs as a self-documenting editor,
+
+00:05:17.700 --> 00:05:17.860
+about how complete the documentation is,
+
+00:05:18.940 --> 00:05:19.240
+As you've mentioned in your talk,
+
+00:05:21.220 --> 00:05:21.720
+it's not accessible directly to the people.
+
+00:05:23.620 --> 00:05:23.800
+We can yell as much as we want to people on
+
+00:05:26.600 --> 00:05:26.880
+IRC, you just need to RTFM or you just need
+
+00:05:29.280 --> 00:05:29.780
+to do Ctrl-H-V for the variable or Ctrl-H-F.
+
+00:05:32.040 --> 00:05:32.420
+What is a variable? I am not for computer
+
+00:05:33.240 --> 00:05:33.540
+science. What does it mean?
+
+00:05:36.580 --> 00:05:36.780
+It is really blocking a lot of people right
+
+00:05:40.800 --> 00:05:40.960
+from the get-go. And I think the element of
+
+00:05:42.340 --> 00:05:42.520
+interactivity, as you've mentioned in your
+
+00:05:45.360 --> 00:05:45.800
+talk, that is introduced by video just makes
+
+00:05:47.520 --> 00:05:48.020
+the hand-holding that much easier.
+
+00:05:50.940 --> 00:05:51.440
+And it's great to do it like this.
+
+00:05:53.400 --> 00:05:53.680
+All right, I think we've got another
+
+00:05:56.120 --> 00:05:56.320
+questions. What are your fellow codes of
+
+00:05:57.500 --> 00:05:58.000
+students using for their editors?
+
+00:06:00.200 --> 00:06:00.540
+What kinds of feedback do you get from them
+
+00:06:01.960 --> 00:06:02.460
+when they learn about you using Emacs?
+
+00:06:05.080 --> 00:06:05.580
+[Speaker 0]: That's a great question.
+
+00:06:10.360 --> 00:06:10.760
+I think professors want to make things,
+
+00:06:12.240 --> 00:06:12.740
+the entry as simple as possible.
+
+00:06:15.540 --> 00:06:15.700
+So for the first computer science course and
+
+00:06:16.640 --> 00:06:17.140
+the second, at least at Columbia,
+
+00:06:20.380 --> 00:06:20.880
+They use Codeo, which is 1 of those online
+
+00:06:25.740 --> 00:06:26.040
+whole IDEs. Now in the third course,
+
+00:06:27.520 --> 00:06:27.680
+which is sort of more the weed out as they
+
+00:06:29.820 --> 00:06:30.040
+call it, the professor gives you a choice and
+
+00:06:33.320 --> 00:06:33.820
+he says you can use Emacs or you can use Vim.
+
+00:06:36.340 --> 00:06:36.680
+And everyone uses Vim.
+
+00:06:38.720 --> 00:06:39.220
+Not a single person I know is using Emacs,
+
+00:06:43.380 --> 00:06:43.520
+simply because the professor's using Vim and
+
+00:06:45.080 --> 00:06:45.320
+that's what he shows on screen and that's
+
+00:06:46.640 --> 00:06:47.140
+just what everyone else falls into.
+
+00:06:50.220 --> 00:06:50.320
+And it's also, like, they're totally in the
+
+00:06:52.120 --> 00:06:52.320
+terminal, and that can be a big barrier of
+
+00:06:54.640 --> 00:06:55.140
+entry. So I think they see Emacs as like
+
+00:06:59.760 --> 00:07:00.060
+something like Vim, but it's not sort of the
+
+00:07:01.560 --> 00:07:01.960
+same idea. It's not what everyone uses
+
+00:07:03.840 --> 00:07:03.960
+because it's not what's being shown up on
+
+00:07:05.220 --> 00:07:05.660
+screen. So if you're not following,
+
+00:07:06.460 --> 00:07:06.880
+like if you're a new learner,
+
+00:07:08.300 --> 00:07:08.680
+if you're not following with Vim,
+
+00:07:10.320 --> 00:07:10.600
+you might have a little bit of a harder time
+
+00:07:12.740 --> 00:07:12.940
+in these classes because everyone else is
+
+00:07:14.060 --> 00:07:14.560
+also using Vim.
+
+00:07:19.640 --> 00:07:19.920
+[Speaker 1]: Right. And I'm kind of reminded again,
+
+00:07:21.260 --> 00:07:21.640
+it feels like this is the last talk,
+
+00:07:24.020 --> 00:07:24.280
+so I'm reminiscing of all the different talks
+
+00:07:25.680 --> 00:07:26.000
+we've had on the general chat,
+
+00:07:28.340 --> 00:07:28.580
+at least. And you know,
+
+00:07:30.800 --> 00:07:31.020
+it feels like we had, you know,
+
+00:07:34.160 --> 00:07:34.660
+this 1 talk, I can't remember the first name
+
+00:07:36.340 --> 00:07:36.680
+at the presentation, but it was about forcing
+
+00:07:38.760 --> 00:07:38.940
+people to use Emacs and not giving them the
+
+00:07:41.860 --> 00:07:42.040
+choice to do this. And I found it to be such
+
+00:07:45.060 --> 00:07:45.420
+a powerful move to do because usually people,
+
+00:07:47.440 --> 00:07:47.720
+maybe some classes are actually forcing Vim
+
+00:07:49.540 --> 00:07:49.920
+because it's a little more palatable I guess.
+
+00:07:51.020 --> 00:07:51.520
+Do you have something to say on this?
+
+00:07:53.760 --> 00:07:53.940
+[Speaker 0]: Yeah let me actually, I've remembered 1
+
+00:07:55.380 --> 00:07:55.720
+thing, I know there's another course,
+
+00:07:58.880 --> 00:07:59.060
+a fourth course you'd say in assembly and the
+
+00:08:00.960 --> 00:08:01.460
+professor suggests Emacs.
+
+00:08:04.240 --> 00:08:04.340
+However I know that's just 1 professor so I
+
+00:08:06.740 --> 00:08:06.980
+think broadly Vim is more of the standard and
+
+00:08:08.360 --> 00:08:08.480
+yeah what were you, can you repeat what you
+
+00:08:09.880 --> 00:08:10.380
+said about Vim being more sort of friendly?
+
+00:08:12.880 --> 00:08:13.260
+[Speaker 1]: Yeah, because it's not,
+
+00:08:14.960 --> 00:08:15.200
+okay, I'm quoting the opinions of other,
+
+00:08:17.040 --> 00:08:17.540
+you know, I would hate to insult Emacs and
+
+00:08:19.400 --> 00:08:19.840
+give myself a bad rep at Emacs comfortable
+
+00:08:23.200 --> 00:08:23.660
+things. But it feels like because modal
+
+00:08:26.280 --> 00:08:26.520
+editing is usually something that people hear
+
+00:08:28.260 --> 00:08:28.420
+from when it starts looking into how to be
+
+00:08:30.460 --> 00:08:30.920
+more efficient when they read text.
+
+00:08:32.220 --> 00:08:32.720
+It feels like the first door,
+
+00:08:35.140 --> 00:08:35.640
+the closest door to this is Vim.
+
+00:08:36.380 --> 00:08:36.880
+And so a lot of professors,
+
+00:08:39.720 --> 00:08:40.220
+because there's very little on-boarding,
+
+00:08:41.600 --> 00:08:41.980
+I mean, I'm going to say the word on-boarding
+
+00:08:42.720 --> 00:08:43.140
+and then I'm going to modulate,
+
+00:08:44.600 --> 00:08:44.760
+but there's very little on-boarding to get
+
+00:08:47.040 --> 00:08:47.480
+into modal editing. You just have your H's
+
+00:08:50.080 --> 00:08:50.380
+and your J's and your K's and your L's and
+
+00:08:51.020 --> 00:08:51.180
+everything works. You know,
+
+00:08:52.360 --> 00:08:52.680
+it does something, yes,
+
+00:08:53.640 --> 00:08:53.960
+the arrows are in weird places,
+
+00:08:55.080 --> 00:08:55.580
+but it does something that is vaguely
+
+00:08:58.260 --> 00:08:58.760
+logical. Whereas with Ctrl-Meta,
+
+00:09:03.380 --> 00:09:03.560
+Hyper, Super, J and then Ctrl-C and Meta 4
+
+00:09:04.560 --> 00:09:05.060
+for good measure, you know,
+
+00:09:08.000 --> 00:09:08.140
+It already feels a little more opaque in
+
+00:09:09.960 --> 00:09:10.460
+terms of how people are going to use this.
+
+00:09:13.780 --> 00:09:13.940
+So, I think it's also 1 good thing about the
+
+00:09:15.860 --> 00:09:16.020
+videos is that people can see you're not
+
+00:09:17.900 --> 00:09:18.400
+contorting your hands in very difficult
+
+00:09:20.920 --> 00:09:21.420
+shapes to use Emacs as the bad rep usually
+
+00:09:24.440 --> 00:09:24.620
+is. But yeah, to come back to what I was
+
+00:09:26.600 --> 00:09:27.040
+saying about Vim, I just feel like they've
+
+00:09:30.460 --> 00:09:30.760
+won the battle in terms of looking very
+
+00:09:33.840 --> 00:09:34.340
+accessible. And for us with Emacs,
+
+00:09:37.080 --> 00:09:37.580
+from the top of our ivory tower,
+
+00:09:39.940 --> 00:09:40.440
+we see the ease of getting into Vim,
+
+00:09:43.320 --> 00:09:43.660
+but we always think, but Vim script is shit,
+
+00:09:44.700 --> 00:09:45.040
+we've got Elisp for us,
+
+00:09:46.320 --> 00:09:46.820
+We can do so many things on our end.
+
+00:09:51.180 --> 00:09:51.340
+So yeah, does that evoke anything to you with
+
+00:09:52.960 --> 00:09:53.160
+regards to Vim versus Emacs in terms of
+
+00:09:53.160 --> 00:09:53.660
+apprehension?
+
+00:09:56.820 --> 00:09:57.040
+[Speaker 0]: Yeah, I think that Emacs might be more
+
+00:09:59.320 --> 00:09:59.540
+straightforward if you just plop someone down
+
+00:10:01.360 --> 00:10:01.780
+in front of their computer because you press
+
+00:10:03.800 --> 00:10:04.300
+H, you're going to see an H on the screen,
+
+00:10:06.780 --> 00:10:07.280
+right? And Vim is a whole new modal mindset.
+
+00:10:09.960 --> 00:10:10.380
+So for a student who wants to like gain
+
+00:10:13.540 --> 00:10:13.740
+efficiency, then yes, I think that Vim is
+
+00:10:15.160 --> 00:10:15.360
+definitely like, it feels like a more
+
+00:10:16.280 --> 00:10:16.760
+friendly introduction.
+
+00:10:18.340 --> 00:10:18.600
+But I think that Emacs doesn't get enough
+
+00:10:20.580 --> 00:10:20.680
+credit around here. And I'd like to see it
+
+00:10:23.000 --> 00:10:23.460
+more often, because a lot of students,
+
+00:10:25.640 --> 00:10:26.140
+they're not looking to fix the efficiencies
+
+00:10:28.080 --> 00:10:28.580
+in their text editing.
+
+00:10:31.620 --> 00:10:31.780
+They're looking to fix the efficiencies in
+
+00:10:33.620 --> 00:10:34.120
+how they do homework or how they do their
+
+00:10:34.640 --> 00:10:35.140
+programming assignments,
+
+00:10:37.280 --> 00:10:37.540
+and they would save time if they,
+
+00:10:39.320 --> 00:10:39.820
+or at least the mentality for a student,
+
+00:10:42.500 --> 00:10:42.720
+is that if you can just get it done more
+
+00:10:43.980 --> 00:10:44.160
+quickly, like it's more,
+
+00:10:45.540 --> 00:10:45.720
+you know, you do what you're used to,
+
+00:10:49.120 --> 00:10:49.300
+and Vim is just a barrier towards you know
+
+00:10:51.040 --> 00:10:51.180
+getting your work done like how do I copy and
+
+00:10:52.800 --> 00:10:52.960
+paste something it's a whole new set of
+
+00:10:55.080 --> 00:10:55.280
+challenges to learn so I think both have
+
+00:10:56.920 --> 00:10:57.420
+their deficiencies and abilities.
+
+00:11:00.760 --> 00:11:00.920
+[Speaker 1]: Yeah it's funny because I'm just 1 last thing
+
+00:11:03.440 --> 00:11:03.680
+on this it feels like modal editing because
+
+00:11:05.360 --> 00:11:05.860
+it is already weird from the get-go,
+
+00:11:08.260 --> 00:11:08.640
+perhaps it might do a better job of making
+
+00:11:10.640 --> 00:11:10.760
+people uneasy. You know how we say that
+
+00:11:11.600 --> 00:11:12.100
+constraints breeds creativity.
+
+00:11:14.820 --> 00:11:15.180
+Well, Vim constrains you from the get-go.
+
+00:11:16.160 --> 00:11:16.620
+If you do not press I,
+
+00:11:18.120 --> 00:11:18.420
+nothing is going to show up in the buffer
+
+00:11:19.040 --> 00:11:19.540
+that you're currently editing.
+
+00:11:21.840 --> 00:11:22.000
+Whereas Emacs give you this full sense of
+
+00:11:24.000 --> 00:11:24.500
+security by when you press J,
+
+00:11:27.860 --> 00:11:28.360
+[Speaker 0]: Yeah, true.
+
+00:11:29.480 --> 00:11:29.760
+[Speaker 1]: it actually inputs J. All right,
+
+00:11:30.540 --> 00:11:30.840
+moving on to another question.
+
+00:11:32.040 --> 00:11:32.540
+And by the way, we've got some time.
+
+00:11:34.740 --> 00:11:35.240
+We have technically about 6 more minutes,
+
+00:11:38.640 --> 00:11:38.940
+but I see Sasha on the other track is already
+
+00:11:40.400 --> 00:11:40.640
+answering questions that I'm in about
+
+00:11:42.840 --> 00:11:43.320
+EmacsConf. So we can go a little longer,
+
+00:11:44.760 --> 00:11:45.040
+as long as I let the organizers know.
+
+00:11:46.000 --> 00:11:46.200
+So we've got about, let's say,
+
+00:11:48.120 --> 00:11:48.320
+6 minutes for now. And we'll see if more
+
+00:11:50.020 --> 00:11:50.220
+questions crop up. All right,
+
+00:11:51.040 --> 00:11:51.540
+moving on to the next question.
+
+00:11:53.400 --> 00:11:53.760
+Did you start those university classes using
+
+00:11:55.180 --> 00:11:55.680
+Emacs, I suppose, in your first year?
+
+00:12:01.640 --> 00:12:01.780
+[Speaker 0]: Yes, yeah, I did. I started with Emacs 2
+
+00:12:02.780 --> 00:12:03.120
+years before entering college,
+
+00:12:04.280 --> 00:12:04.780
+so my junior year of high school.
+
+00:12:09.220 --> 00:12:09.480
+And I've basically over time built up a
+
+00:12:11.180 --> 00:12:11.680
+workflow of how I will take my notes,
+
+00:12:12.900 --> 00:12:13.400
+how I will organize my classes.
+
+00:12:16.280 --> 00:12:16.780
+And now that I'm taking programming classes
+
+00:12:18.280 --> 00:12:18.780
+where Emacs might be more acceptable.
+
+00:12:21.500 --> 00:12:22.000
+It's even enhanced my workflow.
+
+00:12:24.760 --> 00:12:25.260
+Taking notes in Ouro for program assists,
+
+00:12:27.540 --> 00:12:27.720
+everyone talks about it,
+
+00:12:30.640 --> 00:12:30.880
+but from the source, It doesn't get better
+
+00:12:32.860 --> 00:12:33.080
+than that, being able to write with
+
+00:12:34.280 --> 00:12:34.780
+highlighting, with syntax highlighting,
+
+00:12:38.360 --> 00:12:38.720
+with easy exports, running inline code
+
+00:12:40.960 --> 00:12:41.380
+blocks. And a lot of these programming
+
+00:12:42.960 --> 00:12:43.460
+classes, they make you code on a server.
+
+00:12:45.080 --> 00:12:45.320
+And they just say, oh,
+
+00:12:46.500 --> 00:12:46.980
+SSH, and you can use Vim.
+
+00:12:48.560 --> 00:12:49.040
+I can use Tramp, and I can use Emacs,
+
+00:12:50.440 --> 00:12:50.940
+and I'm perfectly at home.
+
+00:12:52.760 --> 00:12:53.260
+It's just such a seamless transition.
+
+00:12:55.380 --> 00:12:55.760
+It's a really amazing way to do school.
+
+00:12:58.260 --> 00:12:58.580
+Professors, you know, all they want is a PDF
+
+00:12:59.220 --> 00:12:59.340
+at the end of the day.
+
+00:13:00.520 --> 00:13:01.020
+They just want the paper on their desk.
+
+00:13:03.420 --> 00:13:03.560
+They're not so picky about how you get it
+
+00:13:04.840 --> 00:13:05.340
+there. They just want it in their hands.
+
+00:13:07.120 --> 00:13:07.540
+So, so Emacs is, it's very usable.
+
+00:13:08.040 --> 00:13:08.540
+It's very doable.
+
+00:13:11.280 --> 00:13:11.580
+[Speaker 1]: Right. I've got a little anecdote on this
+
+00:13:13.740 --> 00:13:13.860
+because you're speaking about the topic of
+
+00:13:16.120 --> 00:13:16.280
+Emacs at university from the perspective of
+
+00:13:17.600 --> 00:13:18.100
+someone who is in computer science.
+
+00:13:19.840 --> 00:13:20.340
+But for me, in the humanities,
+
+00:13:22.900 --> 00:13:23.080
+I just remember those professors who just
+
+00:13:24.940 --> 00:13:25.440
+required you not to use your laptop.
+
+00:13:28.580 --> 00:13:28.780
+And I started with Emacs roughly at the same
+
+00:13:32.460 --> 00:13:32.700
+age as you did. And I was just using it for
+
+00:13:33.160 --> 00:13:33.580
+absolutely everything,
+
+00:13:35.240 --> 00:13:35.740
+for my organization, for producing papers.
+
+00:13:37.860 --> 00:13:38.000
+And to be told that I could not use Emacs for
+
+00:13:38.680 --> 00:13:39.180
+a class for my note-taking,
+
+00:13:43.660 --> 00:13:43.860
+I felt utterly naked in the face of what I
+
+00:13:46.500 --> 00:13:46.720
+needed to do. And yeah,
+
+00:13:47.800 --> 00:13:48.120
+it's great to see those different
+
+00:13:49.120 --> 00:13:49.540
+experiences. And it just,
+
+00:13:50.440 --> 00:13:50.800
+you're always going to be weird.
+
+00:13:53.000 --> 00:13:53.120
+Like I was the weird guy using Emacs in the
+
+00:13:54.720 --> 00:13:55.080
+humanities, but I would have been weird using
+
+00:13:58.440 --> 00:13:58.940
+Vim or any kind of computers with fancy
+
+00:13:59.060 --> 00:13:59.560
+editing.
+
+00:14:02.200 --> 00:14:02.580
+[Speaker 0]: Oh yeah, yeah. And I'm in humanities classes
+
+00:14:03.840 --> 00:14:04.340
+as well, I'm not in a strictly engineering,
+
+00:14:06.720 --> 00:14:06.880
+so people will see me writing an essay about,
+
+00:14:07.780 --> 00:14:08.080
+you know, a philosophy essay,
+
+00:14:09.820 --> 00:14:09.960
+I was working on an essay about Plato and
+
+00:14:11.180 --> 00:14:11.680
+Aristotle, and they say,
+
+00:14:13.840 --> 00:14:14.040
+what are you coding, why are you coding your
+
+00:14:16.620 --> 00:14:16.880
+essay? And I say, well it's just the font
+
+00:14:17.560 --> 00:14:18.060
+looks a little bit different.
+
+00:14:19.300 --> 00:14:19.640
+Everything else is the same words,
+
+00:14:20.800 --> 00:14:21.100
+just the font looks a little different.
+
+00:14:22.160 --> 00:14:22.660
+This is how I like to do it.
+
+00:14:25.600 --> 00:14:25.760
+[Speaker 1]: Oh, those pesky monospace fonts are making us
+
+00:14:27.880 --> 00:14:28.020
+pass as hackers. But for everyone who is
+
+00:14:29.060 --> 00:14:29.560
+behind us, looking at our monitors.
+
+00:14:30.040 --> 00:14:30.540
+[Speaker 0]: Exactly.
+
+00:14:33.900 --> 00:14:34.280
+[Speaker 1]: All right. A little bit of a remark,
+
+00:14:35.760 --> 00:14:36.020
+I guess, towards me and what I said about
+
+00:14:37.480 --> 00:14:37.860
+Vim. So, quoting, before NeoVim,
+
+00:14:39.140 --> 00:14:39.640
+you had to do as much or more configuration
+
+00:14:41.280 --> 00:14:41.760
+to get basic editing done than in Emacs.
+
+00:14:43.520 --> 00:14:43.780
+It's also slower with modal editing compared
+
+00:14:45.440 --> 00:14:45.520
+to Emacs key bindings because you have to
+
+00:14:47.360 --> 00:14:47.640
+press escape and 2 keys to get things done.
+
+00:14:49.120 --> 00:14:49.540
+While in Emacs, you only have to press Ctrl
+
+00:14:52.120 --> 00:14:52.360
+or Meta something to move or search or
+
+00:14:53.400 --> 00:14:53.900
+whatever, and then write.
+
+00:14:55.960 --> 00:14:56.460
+And I tend to agree, I'm not familiar with
+
+00:14:59.260 --> 00:14:59.760
+the ages before NeoVim,
+
+00:15:03.120 --> 00:15:03.620
+But I think we are mostly talking in terms of
+
+00:15:04.900 --> 00:15:05.400
+reputation and communication,
+
+00:15:08.360 --> 00:15:08.480
+like how is Vim considered nowadays or for
+
+00:15:10.760 --> 00:15:11.260
+the last 10 years in the mindset of people
+
+00:15:13.740 --> 00:15:14.240
+choosing or about to choose an editor.
+
+00:15:17.620 --> 00:15:17.860
+And, You know, I keep spitting the fact about
+
+00:15:19.340 --> 00:15:19.480
+VimScript being bad, but I'm going to be
+
+00:15:20.800 --> 00:15:20.980
+honest, I've never actually written any
+
+00:15:24.180 --> 00:15:24.400
+VimScript. I'm just parroting whatever the
+
+00:15:26.760 --> 00:15:26.960
+giants with shoulders I'm standing have been
+
+00:15:28.260 --> 00:15:28.740
+saying to me. And it's not very intelligent,
+
+00:15:31.080 --> 00:15:31.280
+I know, but We also have a very limited pool
+
+00:15:34.340 --> 00:15:34.540
+of time, and I also think that this is a
+
+00:15:36.460 --> 00:15:36.960
+point that your talk addresses in a way.
+
+00:15:40.240 --> 00:15:40.740
+Yes, we could be starting the massive quest
+
+00:15:42.740 --> 00:15:43.180
+of reading the Emacs manual or the ELISP
+
+00:15:45.100 --> 00:15:45.480
+introductory guide or the ELISP complete
+
+00:15:47.620 --> 00:15:48.120
+guide. A lot of people are trying,
+
+00:15:48.940 --> 00:15:49.440
+very highly motivated,
+
+00:15:51.140 --> 00:15:51.220
+I'm going to get started on Emacs and I'm
+
+00:15:51.940 --> 00:15:52.440
+going to do things right.
+
+00:15:53.760 --> 00:15:54.260
+But the fact of the matter is,
+
+00:15:56.580 --> 00:15:56.820
+it's not necessarily a good use of your time
+
+00:15:57.740 --> 00:15:58.240
+to get started like this,
+
+00:16:00.680 --> 00:16:00.840
+because there are so many things you're not
+
+00:16:03.320 --> 00:16:03.660
+going to understand, it kind of goes back,
+
+00:16:04.640 --> 00:16:04.920
+didn't say iBug this time,
+
+00:16:07.700 --> 00:16:08.200
+I stopped myself, it kind of goes back to
+
+00:16:11.040 --> 00:16:11.240
+this I plus 1 Vigoski proximals on
+
+00:16:12.740 --> 00:16:12.940
+development stuff that I was talking about
+
+00:16:16.020 --> 00:16:16.520
+before. The manual is I plus 999.
+
+00:16:20.940 --> 00:16:21.140
+Your video might be I plus 3 or I plus 2 and
+
+00:16:23.240 --> 00:16:23.480
+the hand-holding really does wonders for
+
+00:16:26.120 --> 00:16:26.400
+people to eventually get closer to reading
+
+00:16:27.540 --> 00:16:28.040
+the manuals and stuff like this.
+
+00:16:31.000 --> 00:16:31.500
+[Speaker 0]: Yeah it's a great way just something about
+
+00:16:33.160 --> 00:16:33.660
+giving someone those practical
+
+00:16:35.000 --> 00:16:35.240
+demonstrations, that's something I really
+
+00:16:36.860 --> 00:16:37.080
+appreciate. A lot of these really nice
+
+00:16:38.520 --> 00:16:39.020
+presentations we've had today and yesterday
+
+00:16:41.920 --> 00:16:42.100
+show real life use cases and we get to see
+
+00:16:44.240 --> 00:16:44.480
+people typing and they're working how they
+
+00:16:46.680 --> 00:16:46.920
+would normally work. And that's a great way
+
+00:16:49.040 --> 00:16:49.200
+to begin to understand how you can apply a
+
+00:16:50.680 --> 00:16:50.800
+tool to yourself because at the end of the
+
+00:16:52.040 --> 00:16:52.360
+day Emacs is a tool for us.
+
+00:16:53.760 --> 00:16:54.060
+You know we might take joy in it,
+
+00:16:54.960 --> 00:16:55.440
+it helps us be more productive,
+
+00:16:58.040 --> 00:16:58.540
+it's fun but we're using it for a certain end
+
+00:17:00.880 --> 00:17:01.080
+and you know if we how we can understand to
+
+00:17:03.080 --> 00:17:03.280
+get to those ends and what those ends might
+
+00:17:05.740 --> 00:17:06.240
+even be. It's just great to see other people
+
+00:17:07.440 --> 00:17:07.940
+bring that forth for you.
+
+00:17:12.380 --> 00:17:12.619
+[Speaker 1]: Okay, great. Well, I don't see any more
+
+00:17:13.980 --> 00:17:14.480
+questions in the chat currently,
+
+00:17:17.020 --> 00:17:17.160
+and I don't see anyone who's joined us on the
+
+00:17:19.599 --> 00:17:19.760
+blue button. We are near the time that I said
+
+00:17:22.420 --> 00:17:22.920
+we've got about 40 seconds to go until we
+
+00:17:24.060 --> 00:17:24.400
+were due to end. Jacob,
+
+00:17:26.099 --> 00:17:26.240
+I kind of want to give you the microphone for
+
+00:17:27.339 --> 00:17:27.500
+the end. Do you have anything to say?
+
+00:17:28.359 --> 00:17:28.680
+Like you've talked about your YouTube
+
+00:17:30.480 --> 00:17:30.720
+channel, we've already ensured that the links
+
+00:17:31.960 --> 00:17:32.360
+will be everywhere on the talk page,
+
+00:17:34.280 --> 00:17:34.640
+in the pad, on IRC. But is there anything
+
+00:17:35.540 --> 00:17:35.740
+else you'd like to add?
+
+00:17:37.120 --> 00:17:37.620
+Because you're the last speaker of EmacsCon,
+
+00:17:39.640 --> 00:17:40.140
+and you've got the tough responsibility of
+
+00:17:42.040 --> 00:17:42.540
+finishing it.
+
+00:17:45.440 --> 00:17:45.920
+[Speaker 0]: Oh, well, that's not tough at all when we've
+
+00:17:47.640 --> 00:17:47.960
+had 2 days. I mean, so many people,
+
+00:17:51.300 --> 00:17:51.440
+so many presenters coming together and like I
+
+00:17:52.640 --> 00:17:53.140
+said right at the beginning to Leo,
+
+00:17:54.920 --> 00:17:55.200
+putting your face out there,
+
+00:17:56.180 --> 00:17:56.680
+putting your voice out there,
+
+00:17:57.620 --> 00:17:58.120
+putting yourself out there,
+
+00:18:00.060 --> 00:18:00.380
+it's such a great way to come together
+
+00:18:02.080 --> 00:18:02.580
+because Emacs is not the standard.
+
+00:18:04.540 --> 00:18:04.820
+You know, I've tried to teach my friends
+
+00:18:06.040 --> 00:18:06.540
+Emacs, I've tried to show it to them.
+
+00:18:08.360 --> 00:18:08.480
+You know, some people you get it or you
+
+00:18:10.320 --> 00:18:10.600
+don't. And the people who get it,
+
+00:18:11.740 --> 00:18:12.240
+we're not all in the same place.
+
+00:18:13.440 --> 00:18:13.940
+And it's great.
+
+00:18:15.720 --> 00:18:15.860
+[Speaker 1]: I'm interrupting you for a second because I
+
+00:18:17.960 --> 00:18:18.460
+think we were supposed to kill the the cron
+
+00:18:20.220 --> 00:18:20.720
+which starts the next meeting and it hasn't.
+
+00:18:22.640 --> 00:18:22.940
+Let me try to fix it. I'll talk to production
+
+00:18:25.360 --> 00:18:25.860
+[Speaker 0]: Do I wait or keep going?
+
+00:18:27.360 --> 00:18:27.560
+[Speaker 1]: in a second. Just wait a bit.
+
+00:18:29.260 --> 00:18:29.440
+I'm very sorry. I've given you the mic and
+
+00:18:35.280 --> 00:18:35.440
+then it just... Okay let me just check your
+
+00:18:35.440 --> 00:18:35.940
+production.
+
+00:18:59.660 --> 00:18:59.720
+What? All right, Jason.
+
+00:19:00.880 --> 00:19:01.120
+All right, Jacob, I'm going to put us
+
+00:19:02.080 --> 00:19:02.320
+manually back on track.
+
+00:19:03.080 --> 00:19:03.580
+So give me just a second.
+
+00:19:04.220 --> 00:19:04.720
+[Speaker 0]: Right.
+
+00:19:09.240 --> 00:19:09.740
+[Speaker 1]: I'm going to manually type the URL,
+
+00:19:12.440 --> 00:19:12.720
+because it's a janky setup that we've got
+
+00:19:13.980 --> 00:19:14.440
+right now, when whenever it's not working.
+
+00:19:20.400 --> 00:19:20.900
+All right. So tps slash slash bbb emacs first
+
+00:19:23.000 --> 00:19:23.500
+dot org html. No, that's not the 1.
+
+00:19:27.180 --> 00:19:27.440
+Let me try to type it.
+
+00:19:27.900 --> 00:19:28.400
+Probably. Bbbemaxfirst.
+
+00:19:42.700 --> 00:19:43.180
+L5H, R5D, BH0 Okay, we're getting back Okay,
+
+00:19:44.380 --> 00:19:44.740
+sorry folks about this We are,
+
+00:19:45.360 --> 00:19:45.860
+Jacob, We're back online.
+
+00:19:46.800 --> 00:19:47.080
+I'm really sorry about this.
+
+00:19:49.040 --> 00:19:49.540
+It's just that Sasha's script kicked in.
+
+00:19:51.140 --> 00:19:51.280
+I did tell you we were supposed to finish at
+
+00:19:53.940 --> 00:19:54.060
+30. And because Sasha is busy presenting in
+
+00:19:54.940 --> 00:19:55.320
+the other room, sadly,
+
+00:19:57.100 --> 00:19:57.400
+we got yanked again. So Jacob,
+
+00:19:58.280 --> 00:19:58.780
+I'm very sorry for the interruption.
+
+00:20:01.220 --> 00:20:01.560
+And you were retelling people about something
+
+00:20:02.320 --> 00:20:02.820
+you told me during the check-ins.
+
+00:20:04.440 --> 00:20:04.940
+Do you mind restarting this?
+
+00:20:09.440 --> 00:20:09.660
+[Speaker 0]: Yeah, sure. Well, you said I have the no
+
+00:20:12.180 --> 00:20:12.480
+small task of making the last words from
+
+00:20:14.440 --> 00:20:14.640
+presenters and not the organizers at
+
+00:20:16.260 --> 00:20:16.500
+EmacsConf. And I said,
+
+00:20:17.880 --> 00:20:18.380
+well, that's not hard at all.
+
+00:20:20.540 --> 00:20:20.760
+How many speakers have we had?
+
+00:20:24.480 --> 00:20:24.860
+30? And it's so incredible these past,
+
+00:20:26.880 --> 00:20:27.080
+you know, today and yesterday to have all
+
+00:20:29.700 --> 00:20:29.960
+been able to come together and not just share
+
+00:20:33.920 --> 00:20:34.420
+our ideas and our code and how we do things,
+
+00:20:38.000 --> 00:20:38.300
+but to share our faces and our voices and our
+
+00:20:39.780 --> 00:20:40.120
+lives, you know a little bit of our lives.
+
+00:20:42.100 --> 00:20:42.380
+You know to have the passion to even spend
+
+00:20:44.900 --> 00:20:45.400
+the time to on your weekend to watch this
+
+00:20:47.440 --> 00:20:47.660
+means that you have some sort of care about
+
+00:20:49.160 --> 00:20:49.660
+Emacs and it adds to your life.
+
+00:20:51.820 --> 00:20:52.080
+And you know those Emacs people aren't
+
+00:20:53.620 --> 00:20:53.980
+everywhere. I've tried to bring my friends
+
+00:20:56.040 --> 00:20:56.320
+onto Emacs and it seems like you know you're
+
+00:20:58.900 --> 00:20:59.220
+an Emacs person or you're not really an Emacs
+
+00:21:02.360 --> 00:21:02.640
+person. And those Emacs people can be really
+
+00:21:04.840 --> 00:21:05.000
+spread out. So it's great that we're able to
+
+00:21:07.900 --> 00:21:08.000
+come together and share a little bit of
+
+00:21:09.760 --> 00:21:10.260
+ourselves, a little bit of how we do things.
+
+00:21:12.440 --> 00:21:12.720
+And like I said in my talk,
+
+00:21:15.660 --> 00:21:15.880
+just increase our own joy in Emacs by coming
+
+00:21:19.360 --> 00:21:19.540
+together and being able to share our joy in
+
+00:21:21.760 --> 00:21:21.900
+Emacs. And of course, thank you to all the
+
+00:21:25.000 --> 00:21:25.120
+organizers and everyone who's contributed in
+
+00:21:27.980 --> 00:21:28.380
+any way. It means a lot to even the smallest
+
+00:21:29.700 --> 00:21:30.200
+member, the biggest member of our community.
+
+00:21:33.480 --> 00:21:33.700
+We're all really glad to be able to come
+
+00:21:36.300 --> 00:21:36.520
+together like this and share and meet each
+
+00:21:37.820 --> 00:21:38.320
+other and give nice talks.
+
+00:21:40.200 --> 00:21:40.440
+[Speaker 1]: Well, thank you so much,
+
+00:21:42.340 --> 00:21:42.780
+Jacob. And perhaps to reassure people,
+
+00:21:44.900 --> 00:21:45.060
+because yes, right now it feels like we are
+
+00:21:47.040 --> 00:21:47.300
+legions, all of us here in the same room
+
+00:21:47.960 --> 00:21:48.400
+watching the same thing.
+
+00:21:50.740 --> 00:21:50.900
+We are the Emacs' and that's a very good
+
+00:21:52.540 --> 00:21:52.840
+feeling to have. But you know,
+
+00:21:54.640 --> 00:21:55.140
+first, there's 1 thing that is certain,
+
+00:21:58.380 --> 00:21:58.660
+almost 99% certain, it's the fact that next
+
+00:22:00.300 --> 00:22:00.800
+year there'll probably be another EmacsConf
+
+00:22:02.920 --> 00:22:03.340
+and there will be more Emacs versions,
+
+00:22:04.540 --> 00:22:04.940
+there will be more augmented versions,
+
+00:22:07.300 --> 00:22:07.480
+there will be more people doing cool stuff on
+
+00:22:11.640 --> 00:22:12.040
+Melpa, on ELPA, etc. So it is still a vibrant
+
+00:22:14.200 --> 00:22:14.700
+community. But in case you're craving this
+
+00:22:17.260 --> 00:22:17.760
+little extra in-person stuff,
+
+00:22:20.280 --> 00:22:20.500
+Sash and myself, we are maintaining a list of
+
+00:22:21.560 --> 00:22:21.820
+all the Emacs user group.
+
+00:22:22.680 --> 00:22:23.080
+This is on the Emacs wiki.
+
+00:22:24.140 --> 00:22:24.440
+This is what I'm sharing on my screen
+
+00:22:27.500 --> 00:22:27.720
+currently. And we try to organize them by
+
+00:22:30.100 --> 00:22:30.340
+regional region, sorry,
+
+00:22:31.560 --> 00:22:32.020
+parts of the world like North America,
+
+00:22:32.640 --> 00:22:33.120
+South America, Europe,
+
+00:22:36.300 --> 00:22:36.680
+Africa, Asia. And we have a list of upcoming
+
+00:22:39.000 --> 00:22:39.500
+events and a lot of them are still online.
+
+00:22:41.420 --> 00:22:41.920
+Ever since we had the entire pandemic stuff,
+
+00:22:46.940 --> 00:22:47.440
+a lot of the workshops moved online and,
+
+00:22:49.960 --> 00:22:50.320
+sorry, I had someone whispering in my ear.
+
+00:22:53.100 --> 00:22:53.400
+A lot of them moved online and they are still
+
+00:22:54.960 --> 00:22:55.080
+online now because they've realized it's a
+
+00:22:57.100 --> 00:22:57.280
+very great way to get more people in the same
+
+00:22:59.640 --> 00:22:59.960
+place. And whilst it's great to have
+
+00:23:01.560 --> 00:23:01.920
+in-person meetings, We do this with Emacs
+
+00:23:05.140 --> 00:23:05.340
+Paris. Emacs Paris actually is happening is
+
+00:23:07.640 --> 00:23:07.840
+it? I think, oh I'm going to need to tell
+
+00:23:10.200 --> 00:23:10.280
+Sasha that apparently yes we do not have the
+
+00:23:12.380 --> 00:23:12.600
+next event for Emacs Paris which is next
+
+00:23:14.700 --> 00:23:15.140
+Tuesday and it is in person but for everyone
+
+00:23:18.580 --> 00:23:18.740
+and including you Jacob if you find a
+
+00:23:20.460 --> 00:23:20.640
+workshop in North America that is working for
+
+00:23:22.540 --> 00:23:23.020
+you, I'm thinking about Emacs SF,
+
+00:23:24.660 --> 00:23:24.940
+which I've attended multiple times,
+
+00:23:27.980 --> 00:23:28.220
+and Emacs Austin as well,
+
+00:23:29.060 --> 00:23:29.340
+that I've been to once,
+
+00:23:31.640 --> 00:23:31.780
+I think, It would be a lovely experience and
+
+00:23:34.160 --> 00:23:34.540
+a way to, most of them are every month,
+
+00:23:36.040 --> 00:23:36.160
+it would be a good way for you to stay in
+
+00:23:39.240 --> 00:23:39.440
+touch and to continue this sense of
+
+00:23:40.580 --> 00:23:41.080
+in-person-ness about Emacs.
+
+00:23:46.560 --> 00:23:46.800
+[Speaker 0]: Wonderful. All right, thank you so much.
+
+00:23:48.900 --> 00:23:49.400
+Should I drop off of our call now and let you
+
+00:23:50.000 --> 00:23:50.500
+close things up?
+
+00:23:52.600 --> 00:23:52.760
+[Speaker 1]: Yeah, we're probably gonna close thing up.
+
+00:23:53.600 --> 00:23:53.940
+Let me just check on Sasha.
+
+00:23:55.380 --> 00:23:55.560
+Sasha is obviously answering many many
+
+00:23:57.180 --> 00:23:57.660
+questions about how we are organizing
+
+00:23:59.540 --> 00:23:59.640
+EmacsConf. So Jacob, I'm gonna let you go.
+
+00:24:01.440 --> 00:24:01.680
+Thank you so much for your presentation and
+
+00:24:03.720 --> 00:24:03.920
+your answers. And maybe we'll see you next
+
+00:24:05.020 --> 00:24:05.240
+year. Or maybe a workshop.
+
+00:24:06.820 --> 00:24:07.320
+[Speaker 0]: Who knows? I'm so lucky I got you as my Q&A.
+
+00:24:10.440 --> 00:24:10.760
+When I saw you at my first Emacs Conf 2 years
+
+00:24:12.740 --> 00:24:13.240
+ago, I thought, maybe this guy will do mine.
+
+00:24:18.840 --> 00:24:19.240
+[Speaker 1]: Very nice. Thank you. I'm glad I was able to
+
+00:24:19.920 --> 00:24:20.280
+generate such a feeling.
+
+00:24:21.600 --> 00:24:22.100
+All right, I'll get going now.
+
+00:24:23.260 --> 00:24:23.760
+Jacob, have a wonderful evening.
+
+00:24:23.940 --> 00:24:24.140
+[Speaker 0]: And here you are. You too,
+
+00:24:24.400 --> 00:24:24.900
+see you later.
+
+00:24:28.140 --> 00:24:28.320
+[Speaker 1]: Bye-bye. And folks, what are we going to do
+
+00:24:30.300 --> 00:24:30.520
+right now? I'm going to set everything up so
+
+00:24:32.520 --> 00:24:33.020
+that we can get Sasha finished on the talk.
+
+00:24:34.840 --> 00:24:35.060
+If you're watching, squinting with both
+
+00:24:37.720 --> 00:24:38.080
+streams, you can go to Sasha's room,
+
+00:24:39.520 --> 00:24:40.020
+I mean, the development track,
+
+00:24:42.180 --> 00:24:42.680
+to maybe catch some of the answers by Sasha.
+
+00:24:45.040 --> 00:24:45.160
+Otherwise, we'll be back in roughly 5 to 10
+
+00:24:46.960 --> 00:24:47.120
+minutes to do the closing remarks on this
+
+00:24:47.720 --> 00:24:48.040
+channel. In the meantime,
+
+00:24:48.840 --> 00:24:49.340
+I'll put on some music.
+
+00:24:51.300 --> 00:24:51.800
+So bear with us and I'll see you shortly.
+
+00:25:15.660 --> 00:25:16.160
+And closing here. This BBB recording.
+
+00:25:16.360 --> 00:25:16.860
+Yay!
diff --git a/2023/captions/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--main--chapters.vtt b/2023/captions/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--main--chapters.vtt
new file mode 100644
index 00000000..99fe789d
--- /dev/null
+++ b/2023/captions/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--main--chapters.vtt
@@ -0,0 +1,26 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:48.999
+Introduction
+
+00:00:49.000 --> 00:04:03.399
+My journey of learning
+
+00:04:03.400 --> 00:05:32.119
+Straightforward Emacs
+
+00:05:32.120 --> 00:07:16.399
+Videos
+
+00:07:16.400 --> 00:08:10.359
+Clarity
+
+00:08:10.360 --> 00:09:15.919
+High-quality and accessible content
+
+00:09:15.920 --> 00:11:48.119
+The personal aspect
+
+00:11:48.120 --> 00:16:34.120
+Unity
diff --git a/2023/captions/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--main.vtt b/2023/captions/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--main.vtt
new file mode 100644
index 00000000..1e7d942e
--- /dev/null
+++ b/2023/captions/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--main.vtt
@@ -0,0 +1,1148 @@
+WEBVTT captioned by sachac, checked by sachac
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:02.439
+Hello everyone, I'm Jacob Boxerman.
+
+00:00:02.440 --> 00:00:04.319
+I'm a sophomore at Columbia University
+
+00:00:04.320 --> 00:00:06.139
+studying computer science.
+
+00:00:06.140 --> 00:00:08.519
+I'm so excited to be here today
+
+00:00:08.520 --> 00:00:11.259
+right at the end of EmacsConf 2023.
+
+00:00:11.260 --> 00:00:13.719
+So glad to be able to share with everyone today.
+
+00:00:13.720 --> 00:00:16.746
+EmacsConf is really the epitome for me
+
+00:00:16.747 --> 00:00:20.099
+of sharing and of learning about Emacs.
+
+NOTE Today's talk
+
+00:00:20.100 --> 00:00:21.539
+And in my closing keynote
+
+00:00:21.540 --> 00:00:24.419
+titled "Sharing Emacs is Caring Emacs,"
+
+00:00:24.420 --> 00:00:25.819
+I want to drive that home,
+
+00:00:25.820 --> 00:00:27.259
+and I want to make every day
+
+00:00:27.260 --> 00:00:31.419
+a day for learning and for sharing in our community.
+
+00:00:31.420 --> 00:00:33.259
+I'd like to share my own journey
+
+00:00:33.260 --> 00:00:34.979
+of sharing the joy of Emacs
+
+00:00:34.980 --> 00:00:38.459
+and convince you that sharing the ways we share
+
+00:00:38.460 --> 00:00:41.179
+and how we participate in our Emacs community,
+
+00:00:41.180 --> 00:00:42.419
+those are the most important things
+
+00:00:42.420 --> 00:00:44.339
+to both grow our community
+
+00:00:44.340 --> 00:00:48.899
+and to increase our own personal joy in Emacs.
+
+NOTE My history with Emacs
+
+00:00:48.900 --> 00:00:52.459
+My journey of sharing begins with my journey of learning.
+
+00:00:52.460 --> 00:00:55.299
+So I'll start by spending a bit of time on that.
+
+00:00:55.300 --> 00:00:57.779
+I use Emacs every day for personal organization
+
+00:00:57.780 --> 00:01:00.179
+and to-dos -- you know, schoolwork, projects,
+
+00:01:00.180 --> 00:01:03.299
+exams, readings. I use Org Mode for that,
+
+00:01:03.300 --> 00:01:05.979
+write essays, make presentations like this one.
+
+00:01:05.980 --> 00:01:08.419
+I also write in various programming languages
+
+00:01:08.420 --> 00:01:10.219
+including Java, C, Python,
+
+00:01:10.220 --> 00:01:13.139
+locally and also remotely for projects, classes,
+
+00:01:13.140 --> 00:01:14.699
+other responsibilities.
+
+00:01:14.700 --> 00:01:17.579
+I really started with Emacs during the pandemic.
+
+00:01:17.580 --> 00:01:20.059
+I had tried Emacs before, but at the time
+
+00:01:20.060 --> 00:01:22.379
+all I knew it for was `M-x tetris`.
+
+00:01:22.380 --> 00:01:25.459
+But then its power and its configurability even then
+
+00:01:25.460 --> 00:01:27.059
+especially spoke to me.
+
+00:01:27.060 --> 00:01:28.899
+So from those little humble beginnings,
+
+00:01:28.900 --> 00:01:31.459
+trying different preconfigured distros,
+
+00:01:31.460 --> 00:01:33.059
+I slowly made my way to building
+
+00:01:33.060 --> 00:01:36.339
+my own 2000+ line configuration,
+
+00:01:36.340 --> 00:01:39.219
+which actually surprisingly has about 70 stars,
+
+00:01:39.220 --> 00:01:40.539
+a few watchers, a few forks on GitHub.
+
+00:01:40.540 --> 00:01:42.379
+Pretty straightforward.
+
+NOTE Self-exploration vs learning from others
+
+00:01:42.380 --> 00:01:46.419
+But what exactly was that learning process like?
+
+00:01:46.420 --> 00:01:49.459
+Now, Emacs was such a beast to me at first.
+
+00:01:49.460 --> 00:01:51.059
+I was familiar with Python,
+
+00:01:51.060 --> 00:01:52.579
+with C, Java, languages like that.
+
+00:01:52.580 --> 00:01:55.339
+I was no stranger to the shell configuration,
+
+00:01:55.340 --> 00:01:56.579
+anything like that.
+
+00:01:56.580 --> 00:02:01.179
+But the absolute infinity of possibility with Emacs
+
+00:02:01.180 --> 00:02:02.739
+was a bit overwhelming.
+
+00:02:02.740 --> 00:02:04.739
+I find a sentiment in the community
+
+00:02:04.740 --> 00:02:06.939
+that exploring on one's own
+
+00:02:06.940 --> 00:02:11.019
+was greater than exploring and learning from others.
+
+00:02:11.020 --> 00:02:14.459
+And now I see why people say that and it's true in a sense,
+
+00:02:14.460 --> 00:02:17.219
+but it might not be fully understood.
+
+00:02:17.220 --> 00:02:21.179
+At a certain point, we need to all create our own paths.
+
+00:02:21.180 --> 00:02:24.159
+And I think that's just one of the ways Emacs is built.
+
+00:02:24.160 --> 00:02:27.739
+The minute possibilities of configurability are so vast,
+
+00:02:27.740 --> 00:02:29.899
+it's like a fingerprint or a snowflake --
+
+00:02:29.900 --> 00:02:32.179
+there are so many options to create
+
+00:02:32.180 --> 00:02:35.419
+a totally unique Emacs experience.
+
+00:02:35.420 --> 00:02:37.779
+Of course that can't be found from somebody else --
+
+00:02:37.780 --> 00:02:38.699
+It has to come from you.
+
+00:02:38.700 --> 00:02:42.339
+Still, building a strong foundation
+
+00:02:42.340 --> 00:02:45.539
+is much, much better when we have others.
+
+00:02:45.540 --> 00:02:48.579
+Expanding on that foundation is, too, actually.
+
+00:02:48.580 --> 00:02:50.299
+My own process started
+
+00:02:50.300 --> 00:02:53.219
+with a lot of Googling, blog posts, YouTube, and Reddit.
+
+NOTE Learning process
+
+00:02:53.220 --> 00:02:55.419
+I actually found Emacs on YouTube.
+
+00:02:55.420 --> 00:02:58.139
+Seeing how other people used it
+
+00:02:58.140 --> 00:03:01.419
+was what really convinced me to try it for myself.
+
+00:03:01.420 --> 00:03:03.739
+At a certain point when my confidence grew,
+
+00:03:03.740 --> 00:03:07.059
+my trial and error became less error and more success.
+
+00:03:07.060 --> 00:03:09.979
+I was also able to take what I saw other people do,
+
+00:03:09.980 --> 00:03:13.859
+learn from it, and expand, making it my own.
+
+00:03:13.860 --> 00:03:17.019
+And through that time, I learned Emacs.
+
+NOTE Emacs learning (not just learning Emacs)
+
+00:03:17.020 --> 00:03:21.019
+But I also participated in Emacs learning.
+
+00:03:21.020 --> 00:03:22.579
+What's the difference?
+
+00:03:22.580 --> 00:03:24.219
+We often discuss the former,
+
+00:03:24.220 --> 00:03:27.579
+grappling with key binds, commands.
+
+00:03:27.580 --> 00:03:31.619
+But Emacs learning goes beyond these technicalities.
+
+00:03:31.620 --> 00:03:35.859
+It's a mindset. It thrives on collaboration.
+
+00:03:35.860 --> 00:03:37.579
+It's not a solo endeavor;
+
+00:03:37.580 --> 00:03:41.139
+it flourishes best when we do it together.
+
+00:03:41.140 --> 00:03:44.099
+This involves collaborating together,
+
+00:03:44.100 --> 00:03:46.179
+creating a collaborative mindset,
+
+00:03:46.180 --> 00:03:47.979
+sharing effective strategies,
+
+00:03:47.980 --> 00:03:49.075
+lifting each other
+
+00:03:49.076 --> 00:03:51.639
+through our collective pool of knowledge.
+
+00:03:51.640 --> 00:03:55.299
+Together, we contribute to the growth of each member
+
+00:03:55.300 --> 00:03:56.979
+within our vibrant community.
+
+00:03:56.980 --> 00:04:00.259
+Emacs learning is much, much harder to do alone.
+
+00:04:00.260 --> 00:04:03.299
+And I wanted to help with that.
+
+NOTE My YouTube journey
+
+00:04:03.300 --> 00:04:05.739
+So this brings me to the second part of my talk,
+
+00:04:05.740 --> 00:04:08.659
+my Emacs journey, how I got started
+
+00:04:08.660 --> 00:04:11.459
+and where I am today with my YouTube channel,
+
+00:04:11.460 --> 00:04:14.819
+my Straightforward Emacs series with nearly 200,000 views.
+
+NOTE Why not just read the manual?
+
+00:04:14.820 --> 00:04:18.219
+The Emacs Manual is often pushed
+
+00:04:18.220 --> 00:04:20.379
+as the best way to learn Emacs.
+
+00:04:20.380 --> 00:04:21.859
+It's an all-encompassing tome.
+
+00:04:21.860 --> 00:04:23.979
+And as amazing as I think it is,
+
+00:04:23.980 --> 00:04:25.179
+I don't think it's reasonable
+
+00:04:25.180 --> 00:04:27.579
+to push the Emacs manual so hard,
+
+00:04:27.580 --> 00:04:29.059
+which is something I felt at first.
+
+00:04:29.060 --> 00:04:31.599
+It can be really daunting. It's dense.
+
+00:04:31.600 --> 00:04:32.779
+There's a lot there.
+
+00:04:32.780 --> 00:04:34.539
+It's just a bit too much for a beginner,
+
+00:04:34.540 --> 00:04:37.419
+or even someone with a little bit of experience.
+
+00:04:37.420 --> 00:04:40.259
+These qualities, I feel,
+
+00:04:40.260 --> 00:04:43.179
+apply to many of the Emacs resources we can find out there.
+
+00:04:43.180 --> 00:04:45.179
+The best word for them is heavy.
+
+00:04:45.180 --> 00:04:48.099
+They look, they feel, they come across as heavy
+
+00:04:48.100 --> 00:04:50.739
+regardless of what they may actually be.
+
+00:04:50.740 --> 00:04:53.379
+It's not even that people are too lazy,
+
+00:04:53.380 --> 00:04:56.519
+or not capable enough (because that's never true).
+
+00:04:56.520 --> 00:05:00.539
+It's just a mental block that takes some getting over,
+
+00:05:00.540 --> 00:05:03.159
+and that's okay -- so we need other things, too.
+
+00:05:03.160 --> 00:05:04.859
+For me, that was video.
+
+00:05:04.860 --> 00:05:07.539
+I wanted someone to tell and show me
+
+00:05:07.540 --> 00:05:08.939
+what I wanted to know,
+
+00:05:08.940 --> 00:05:11.739
+as well as things I didn't even know were possible.
+
+00:05:11.740 --> 00:05:15.419
+I realized this once I'd progressed a little further
+
+00:05:15.420 --> 00:05:18.019
+in my Emacs journey. I wanted to do my part.
+
+00:05:18.020 --> 00:05:20.979
+I care about Emacs. I started to really care about Emacs.
+
+NOTE Why video for Emacs
+
+00:05:20.980 --> 00:05:24.319
+So I wanted to share about Emacs.
+
+00:05:24.320 --> 00:05:27.339
+So at that point, I refocused my work with Emacs
+
+00:05:27.340 --> 00:05:30.739
+beyond just myself. I wanted to help others
+
+00:05:30.740 --> 00:05:32.719
+feel the excitement that I did.
+
+00:05:32.720 --> 00:05:35.299
+So where did I turn, and why?
+
+00:05:35.300 --> 00:05:37.779
+It's so trite, but they say that
+
+00:05:37.780 --> 00:05:40.159
+a picture is worth a thousand words.
+
+00:05:40.160 --> 00:05:41.859
+So how much is a video worth?
+
+00:05:41.860 --> 00:05:44.219
+Everyone learns differently, and that's okay.
+
+00:05:44.220 --> 00:05:46.139
+But it's absolutely certain to me
+
+00:05:46.140 --> 00:05:48.319
+that you need to see something to believe it.
+
+00:05:48.320 --> 00:05:50.499
+So for that, I turned to video.
+
+00:05:50.500 --> 00:05:54.419
+And it turns out that seeing is believing.
+
+NOTE Straightforward Emacs
+
+00:05:54.420 --> 00:05:56.899
+I made a short video showing off Emacs Org Mode.
+
+00:05:56.900 --> 00:05:58.959
+I didn't even have a voiceover.
+
+00:05:58.960 --> 00:06:01.699
+That video, less than five minutes long,
+
+00:06:01.700 --> 00:06:04.339
+but still incorporating some of my core principles,
+
+00:06:04.340 --> 00:06:06.899
+now has over 55,000 views and counting.
+
+00:06:06.900 --> 00:06:09.459
+So, something must have been right.
+
+00:06:09.460 --> 00:06:11.219
+And the positive reception to that video
+
+00:06:11.220 --> 00:06:12.979
+made me want to continue.
+
+00:06:12.980 --> 00:06:14.939
+I decided to continue with the videos
+
+00:06:14.940 --> 00:06:18.779
+in a series I titled "Straightforward Emacs."
+
+00:06:18.780 --> 00:06:20.939
+And I'm asked: who is the target audience
+
+00:06:20.940 --> 00:06:23.899
+for Straightforward Emacs? It's me.
+
+00:06:23.900 --> 00:06:27.599
+They're the videos I wish I had existed
+
+00:06:27.600 --> 00:06:28.659
+when I was figuring out
+
+00:06:28.660 --> 00:06:32.699
+Emacs' numerous and wonderful features.
+
+NOTE Challenges and benefits of video
+
+00:06:32.700 --> 00:06:36.619
+Video does, I admit, come with its own set of challenges.
+
+00:06:36.620 --> 00:06:40.399
+Complaints that video is less accessible, it's valid.
+
+00:06:40.400 --> 00:06:42.459
+They're more time consuming, it's valid too.
+
+00:06:42.460 --> 00:06:45.059
+It's harder to skim a video than a blog post,
+
+00:06:45.060 --> 00:06:47.499
+and referring back can be a little annoying.
+
+00:06:47.500 --> 00:06:48.419
+To try and solve this,
+
+00:06:48.420 --> 00:06:50.739
+I make video notes available as best I can though.
+
+00:06:50.740 --> 00:06:54.399
+It's not perfect. Despite these valid claims,
+
+00:06:54.400 --> 00:06:57.379
+I believe video offers a sense of personality
+
+00:06:57.380 --> 00:06:59.219
+that written content just can't.
+
+00:06:59.220 --> 00:07:00.779
+And that makes it well worth it.
+
+00:07:00.780 --> 00:07:03.259
+My first two videos in the series
+
+00:07:03.260 --> 00:07:06.259
+received a combined 35,000 views.
+
+00:07:06.260 --> 00:07:08.019
+I still get kind comments today
+
+00:07:08.020 --> 00:07:10.459
+from viewers thanking me, asking questions.
+
+00:07:10.460 --> 00:07:12.779
+So I must have done something right,
+
+00:07:12.780 --> 00:07:14.499
+to outweigh those cons of video,
+
+00:07:14.500 --> 00:07:16.299
+to outweigh those common complaints.
+
+NOTE Crafting tutorials that work
+
+00:07:16.300 --> 00:07:21.659
+What was it? I covered topics that had been done before.
+
+00:07:21.660 --> 00:07:24.019
+But I wanted to present them in my way.
+
+00:07:24.020 --> 00:07:26.659
+In the way that I knew people would appreciate,
+
+00:07:26.660 --> 00:07:28.299
+because it's what I would have appreciated
+
+00:07:28.300 --> 00:07:30.919
+when I started my Emacs journey.
+
+00:07:30.920 --> 00:07:34.479
+In writing, I navigated towards clarity.
+
+00:07:34.480 --> 00:07:38.179
+Crystal clear, step-by-step instructions.
+
+00:07:38.180 --> 00:07:40.699
+Fully scripted, recorded in multiple parts and
+
+00:07:40.700 --> 00:07:43.179
+spliced together. That allowed me
+
+00:07:43.180 --> 00:07:48.599
+to achieve my second goal: no wasted time, or word,
+
+00:07:48.600 --> 00:07:51.819
+or thought. I meticulously cut my videos
+
+00:07:51.820 --> 00:07:54.079
+to create smooth dialogue.
+
+00:07:54.080 --> 00:07:57.499
+I cut out large blocks of typing if not explained.
+
+00:07:57.500 --> 00:07:59.259
+Though this does vary video to video.
+
+00:07:59.260 --> 00:08:03.259
+Less scripted, more personal video receives less editing.
+
+00:08:03.260 --> 00:08:05.659
+Like this talk itself, it's not edited at all.
+
+00:08:05.660 --> 00:08:08.259
+And though prerecorded, I wanted to present
+
+00:08:08.260 --> 00:08:11.719
+my unfiltered, raw self.
+
+NOTE High-quality and accessible content
+
+00:08:11.720 --> 00:08:15.939
+Another goal of mine is high quality and accessible content.
+
+00:08:15.940 --> 00:08:18.579
+I speak carefully and I tune my volume,
+
+00:08:18.580 --> 00:08:20.679
+making it easier to listen to,
+
+00:08:20.680 --> 00:08:23.399
+and improving YouTube's auto-captioning.
+
+00:08:23.400 --> 00:08:24.899
+Something I didn't consider at first,
+
+00:08:24.900 --> 00:08:28.399
+but was mentioned to me in a comment, was color scheme.
+
+00:08:28.400 --> 00:08:29.859
+Now I try to select a scheme
+
+00:08:29.860 --> 00:08:33.279
+with good contrast and a readable font.
+
+00:08:33.280 --> 00:08:35.739
+Content-wise, I design my tutorials
+
+00:08:35.740 --> 00:08:38.219
+to ensure they cater to various skill levels,
+
+00:08:38.220 --> 00:08:40.099
+as well as learning preferences.
+
+00:08:40.100 --> 00:08:42.999
+My videos assume basic Emacs knowledge
+
+00:08:43.000 --> 00:08:44.519
+but not too much more.
+
+00:08:44.520 --> 00:08:47.199
+Importantly, they're configuration agnostic.
+
+00:08:47.200 --> 00:08:50.319
+However you feel about Emacs' 'distributions',
+
+00:08:50.320 --> 00:08:53.119
+Doom, Spacemacs, etc, they're out there,
+
+00:08:53.120 --> 00:08:57.919
+and beginners often don't distinguish.
+
+00:08:57.920 --> 00:09:02.039
+I admit it can be a bit frustrating to see a Reddit post
+
+00:09:02.040 --> 00:09:04.599
+asking a question about unexpected behavior,
+
+00:09:04.600 --> 00:09:06.179
+without mention of the fact that they have
+
+00:09:06.180 --> 00:09:09.659
+literally thousands of lines of non-standard configuration
+
+00:09:09.660 --> 00:09:12.219
+in the form of an Emacs distribution.
+
+00:09:12.220 --> 00:09:14.899
+So I do my best to mention different possible keybindings
+
+00:09:14.900 --> 00:09:17.919
+a viewer might be using.
+
+NOTE Most crucial aspect of my videos
+
+00:09:17.920 --> 00:09:19.939
+There was one thing, though, that turned out to be
+
+00:09:19.940 --> 00:09:23.299
+the most crucial part of my videos and series.
+
+00:09:23.300 --> 00:09:25.459
+And it's one of the reasons itself for this talk.
+
+00:09:25.460 --> 00:09:27.879
+You may have already picked up on it.
+
+00:09:27.880 --> 00:09:31.119
+It's the personal aspect. Sharing myself.
+
+00:09:31.120 --> 00:09:33.659
+Incorporating relatable examples,
+
+00:09:33.660 --> 00:09:36.579
+scenarios that resonate with my audience.
+
+00:09:36.580 --> 00:09:39.139
+Seeing personal use cases, examples,
+
+00:09:39.140 --> 00:09:41.459
+and demonstrations of real life Emacs use
+
+00:09:41.460 --> 00:09:44.059
+is really what began to build a community.
+
+00:09:44.060 --> 00:09:47.219
+Because that's the stuff that can jump out of the video
+
+00:09:47.220 --> 00:09:50.219
+and into the comments.
+
+NOTE A broadening community
+
+00:09:50.220 --> 00:09:53.199
+The idea for this talk started
+
+00:09:53.200 --> 00:09:55.239
+as a story of my YouTube journey.
+
+00:09:55.240 --> 00:09:57.539
+I wanted to share how I began sharing Emacs
+
+00:09:57.540 --> 00:10:00.959
+and why I like it. And I think I've done that.
+
+00:10:00.960 --> 00:10:03.719
+Thanks to the EmacsConf organizers, though,
+
+00:10:03.720 --> 00:10:06.199
+I started to see a larger vision.
+
+00:10:06.200 --> 00:10:08.259
+Each video I made took a lot of effort,
+
+00:10:08.260 --> 00:10:11.139
+from research and planning to script writing,
+
+00:10:11.140 --> 00:10:14.399
+filming and editing. But those comments made it worth it --
+
+00:10:14.400 --> 00:10:16.839
+people saying that straightforward Emacs
+
+00:10:16.840 --> 00:10:17.619
+was just what they were looking for,
+
+00:10:17.620 --> 00:10:20.719
+and that they appreciated my sharing.
+
+00:10:20.720 --> 00:10:22.419
+That's what made me want to continue.
+
+00:10:22.420 --> 00:10:25.699
+And what made me want to continue even more
+
+00:10:25.700 --> 00:10:28.499
+was the community I was building.
+
+00:10:28.500 --> 00:10:30.099
+I'd start to see repeat viewers
+
+00:10:30.100 --> 00:10:32.639
+who'd come back for my latest upload.
+
+00:10:32.640 --> 00:10:34.859
+It's hard for me to find time to produce videos.
+
+00:10:34.860 --> 00:10:38.419
+But whether it was two weeks or four months later
+
+00:10:38.420 --> 00:10:40.259
+when I finally got around to uploading,
+
+00:10:40.260 --> 00:10:43.279
+those same commenters would be there for me.
+
+00:10:43.280 --> 00:10:47.459
+And I found real joy in actively engaging with my audience.
+
+00:10:47.460 --> 00:10:49.499
+It was amazing to see how my videos --
+
+00:10:49.500 --> 00:10:51.259
+me sharing useful Emacs tips,
+
+00:10:51.260 --> 00:10:55.119
+sharing the way I do things -- sparked broader discussions.
+
+00:10:55.120 --> 00:10:56.979
+On any chat form out there, there's no doubt
+
+00:10:56.980 --> 00:10:59.719
+you'll find some sort of cross discourse.
+
+00:10:59.720 --> 00:11:02.199
+I'd see viewers replying to other commenters,
+
+00:11:02.200 --> 00:11:04.419
+and my videos were no exception. Seeing how
+
+00:11:04.420 --> 00:11:06.099
+my videos sparked conversation,
+
+00:11:06.100 --> 00:11:10.779
+debate and further interest was incredible.
+
+NOTE Sharing Emacs
+
+00:11:10.780 --> 00:11:13.999
+We've had two amazing days of sharing Emacs,
+
+00:11:14.000 --> 00:11:17.379
+putting ourselves out there, and sharing in a community.
+
+00:11:17.380 --> 00:11:19.059
+I want to emphasize how amazing
+
+00:11:19.060 --> 00:11:22.339
+a strong community with the right values is,
+
+00:11:22.340 --> 00:11:24.659
+and to inspire each and every one of us
+
+00:11:24.660 --> 00:11:27.699
+to do our part to strengthen that community.
+
+00:11:27.700 --> 00:11:30.259
+The point of my talk isn't to tell you
+
+00:11:30.260 --> 00:11:33.119
+to pick up your microphone and produce a YouTube video,
+
+00:11:33.120 --> 00:11:34.559
+though that wouldn't hurt.
+
+00:11:34.560 --> 00:11:37.779
+We're not all interested in that, and that's okay.
+
+00:11:37.780 --> 00:11:41.059
+First, I want everybody to pat themselves on the back
+
+00:11:41.060 --> 00:11:44.139
+for the mere fact that we are here together.
+
+00:11:44.140 --> 00:11:48.019
+Then let's turn to the potential within our community.
+
+NOTE Platforms
+
+00:11:48.020 --> 00:11:50.139
+First, though, I'll briefly note
+
+00:11:50.140 --> 00:11:52.339
+that everyone has their opinions about platforms,
+
+00:11:52.340 --> 00:11:53.459
+and I'm not here to make judgments,
+
+00:11:53.460 --> 00:11:56.059
+but freedom, equity, and accessibility are important,
+
+00:11:56.060 --> 00:11:57.921
+but reach is, too.
+
+NOTE Achieving unity
+
+00:11:57.922 --> 00:12:00.539
+Regardless of the platform,
+
+00:12:00.540 --> 00:12:02.699
+one thing remains certain:
+
+00:12:02.700 --> 00:12:05.399
+our strength lies in unity.
+
+00:12:05.400 --> 00:12:08.739
+Like any online community, this calls for unique ways
+
+00:12:08.740 --> 00:12:13.779
+to come together and share. How can we achieve this unity?
+
+00:12:13.780 --> 00:12:15.099
+The key is finding avenues
+
+00:12:15.100 --> 00:12:18.799
+where our collective knowledge and our support can flourish,
+
+00:12:18.800 --> 00:12:21.779
+while each person can find a place for themselves,
+
+00:12:21.780 --> 00:12:25.679
+creating a more connected and empowered Emacs community.
+
+00:12:25.680 --> 00:12:29.099
+From uplifting others with positive contributions
+
+00:12:29.100 --> 00:12:31.219
+to engaging on platforms like Reddit,
+
+00:12:31.220 --> 00:12:35.199
+both idealistic and concrete approaches are really valuable.
+
+00:12:35.200 --> 00:12:36.859
+We can continue lively debate
+
+00:12:36.860 --> 00:12:38.899
+on community forums and discussion boards,
+
+00:12:38.900 --> 00:12:41.619
+encouraging a positive and inclusive atmosphere
+
+00:12:41.620 --> 00:12:44.659
+for asking questions and seeking help.
+
+00:12:44.660 --> 00:12:48.259
+We can leverage social media platforms to share quick tips,
+
+00:12:48.260 --> 00:12:51.479
+tricks, or interesting discoveries related to Emacs.
+
+00:12:51.480 --> 00:12:52.579
+Those who enjoy writing
+
+00:12:52.580 --> 00:12:54.859
+can contribute to blogs and newsletters,
+
+00:12:54.860 --> 00:12:57.499
+sharing personal expertise and experiences
+
+00:12:57.500 --> 00:12:59.239
+with a larger audience.
+
+00:12:59.240 --> 00:13:02.959
+Let's also not underestimate the value of online video,
+
+00:13:02.960 --> 00:13:05.659
+as I've said, and learning platforms too.
+
+00:13:05.660 --> 00:13:07.539
+Creating and sharing tutorials
+
+00:13:07.540 --> 00:13:10.259
+on platforms like YouTube or educational websites
+
+00:13:10.260 --> 00:13:14.019
+addresses specific aspects of Emacs and benefits learners,
+
+00:13:14.020 --> 00:13:17.419
+while contributing a personal touch.
+
+00:13:17.420 --> 00:13:20.579
+Participating in or organizing Emacs-related courses
+
+00:13:20.580 --> 00:13:22.539
+also fosters a structured learning
+
+00:13:22.540 --> 00:13:24.259
+environment where there's so much room
+
+00:13:24.260 --> 00:13:26.079
+for mentorship and support,
+
+00:13:26.080 --> 00:13:29.999
+which is valuable for everyone involved.
+
+NOTE Every contribution is valuable
+
+00:13:30.000 --> 00:13:32.579
+We can also call on our open source [* free software] values
+
+00:13:32.580 --> 00:13:34.939
+and focus on collaborative projects,
+
+00:13:34.940 --> 00:13:38.239
+from coding projects where we can contribute and learn
+
+00:13:38.240 --> 00:13:41.019
+to building shared documentation and guides
+
+00:13:41.020 --> 00:13:44.339
+that compile collective knowledge on specific topics --
+
+00:13:44.340 --> 00:13:46.459
+the Emacs Wiki is a great place
+
+00:13:46.460 --> 00:13:49.599
+to start and continue that work as well.
+
+00:13:49.600 --> 00:13:51.659
+Especially for those who might be less willing
+
+00:13:51.660 --> 00:13:53.099
+to put themselves out there,
+
+00:13:53.100 --> 00:13:56.199
+it's essential to recognize that every contribution,
+
+00:13:56.200 --> 00:13:59.519
+regardless of its scale, adds value to our community.
+
+00:13:59.520 --> 00:14:02.119
+Documentation contributions, however small,
+
+00:14:02.120 --> 00:14:04.459
+can go a long way. So do translations,
+
+00:14:04.460 --> 00:14:07.379
+for those who are able to increase accessibility,
+
+00:14:07.380 --> 00:14:09.539
+as well as testing and bug reporting.
+
+00:14:09.540 --> 00:14:11.379
+Reporting issues to package maintainers
+
+00:14:11.380 --> 00:14:14.019
+in their desired format -- speaking as one myself,
+
+00:14:14.020 --> 00:14:16.819
+I appreciate when users give helpful feedback.
+
+00:14:16.820 --> 00:14:20.479
+There are options for everybody, big and small.
+
+00:14:20.480 --> 00:14:22.539
+Remember, the strength of our community
+
+00:14:22.540 --> 00:14:25.339
+lies in its ability to share, collaborate,
+
+00:14:25.340 --> 00:14:29.379
+and learn together. Whether through collaborative projects,
+
+00:14:29.380 --> 00:14:32.899
+sharing insights on forums, or leveraging social media,
+
+00:14:32.900 --> 00:14:34.659
+by embracing these ideas, we can build
+
+00:14:34.660 --> 00:14:40.299
+a more connected and empowered Emacs community.
+
+NOTE Conclusion
+
+00:14:40.300 --> 00:14:43.759
+Now Emacs is so very personal.
+
+00:14:43.760 --> 00:14:44.939
+Those of us who have our own
+
+00:14:44.940 --> 00:14:47.679
+carefully manicured configurations understand --
+
+00:14:47.680 --> 00:14:50.859
+Emacs molds to our liking and our person.
+
+00:14:50.860 --> 00:14:53.219
+Our configurations and use-cases
+
+00:14:53.220 --> 00:14:56.379
+are a reflection of our individuality.
+
+00:14:56.380 --> 00:14:59.319
+Nonetheless, the richness of our community
+
+00:14:59.320 --> 00:15:04.619
+lies in collaboration, sharing, and learning together.
+
+00:15:04.620 --> 00:15:06.099
+There's a lot of talk in the community
+
+00:15:06.100 --> 00:15:09.559
+about how to ensure Emacs' longevity.
+
+00:15:09.560 --> 00:15:11.139
+I agree it's important.
+
+00:15:11.140 --> 00:15:13.819
+We care because of passion, excitement,
+
+00:15:13.820 --> 00:15:16.099
+and utility. We want to share
+
+00:15:16.100 --> 00:15:19.259
+and we want to have others love what we love.
+
+00:15:19.260 --> 00:15:21.099
+We also want a stronger community
+
+00:15:21.100 --> 00:15:23.899
+that fosters new innovation.
+
+00:15:23.900 --> 00:15:26.539
+I used to buy into complaints I'd read online
+
+00:15:26.540 --> 00:15:29.499
+that Emacs' defaults are too unapproachable.
+
+00:15:29.500 --> 00:15:33.419
+The default color scheme and the font is unappealing.
+
+00:15:33.420 --> 00:15:35.699
+Fix that and people will flock.
+
+00:15:35.700 --> 00:15:37.739
+Sounds fair, I'd think.
+
+00:15:37.740 --> 00:15:40.639
+Turns out, it's not what we need.
+
+00:15:40.640 --> 00:15:42.679
+Emacs is bigger than that.
+
+00:15:42.680 --> 00:15:45.779
+What we need is like what we've done here this weekend.
+
+00:15:45.780 --> 00:15:49.659
+Like EmacsConf. It's the absolute epitome
+
+00:15:49.660 --> 00:15:53.899
+of sharing about and caring about Emacs.
+
+00:15:53.900 --> 00:15:56.859
+We are here both working to grow our community,
+
+00:15:56.860 --> 00:16:00.139
+and to strengthen what we already have.
+
+00:16:00.140 --> 00:16:02.579
+We're here because we find joy in Emacs,
+
+00:16:02.580 --> 00:16:05.859
+and that joy is amplified by sharing it
+
+00:16:05.860 --> 00:16:07.679
+with and among others.
+
+00:16:07.680 --> 00:16:10.219
+So let's continue this journey together,
+
+00:16:10.220 --> 00:16:13.459
+navigating Emacs with a spirit of collaboration,
+
+00:16:13.460 --> 00:16:17.259
+because in unity, we find not just strength
+
+00:16:17.260 --> 00:16:22.059
+but the enduring legacy of a tool that we hold very dear.
+
+00:16:22.060 --> 00:16:23.339
+Thank you to everybody here
+
+00:16:23.340 --> 00:16:26.499
+for being part of this shared adventure.
+
+00:16:26.500 --> 00:16:34.120
+Let's go forth and share, together.
diff --git a/2023/captions/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--answers.vtt b/2023/captions/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--answers.vtt
new file mode 100644
index 00000000..edf50d33
--- /dev/null
+++ b/2023/captions/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--answers.vtt
@@ -0,0 +1,1304 @@
+WEBVTT
+
+
+00:00:02.899 --> 00:00:03.260
+[Speaker 0]: Right. Okay, so hi everyone.
+
+00:00:04.540 --> 00:00:04.839
+We are now live. Hi Howard,
+
+00:00:06.339 --> 00:00:06.839
+how are you doing? Great.
+
+00:00:09.960 --> 00:00:10.460
+Lovely to hear. As usual,
+
+00:00:11.980 --> 00:00:12.480
+it's always a pleasure to see your
+
+00:00:14.440 --> 00:00:14.599
+presentation and the amount of time and
+
+00:00:15.360 --> 00:00:15.780
+energy you put into it.
+
+00:00:17.680 --> 00:00:17.860
+Slightly sorry about the shoppiness of the
+
+00:00:18.680 --> 00:00:19.119
+broadcast. Do not worry,
+
+00:00:22.700 --> 00:00:23.200
+the talk will be in its full 30 fps quality
+
+00:00:24.779 --> 00:00:25.160
+on the website after the conference.
+
+00:00:26.759 --> 00:00:26.939
+Actually, right now. It's available right
+
+00:00:30.099 --> 00:00:30.279
+now. As usual, feel free to ask your
+
+00:00:31.560 --> 00:00:31.920
+questions in the in the pad.
+
+00:00:34.200 --> 00:00:34.360
+We've linked it both on the talk page and on
+
+00:00:38.400 --> 00:00:38.760
+IRC. I think I am on the right 1,
+
+00:00:40.080 --> 00:00:40.580
+right? This is a solo.
+
+00:00:42.660 --> 00:00:43.160
+Guys, questions, where are they?
+
+00:00:45.060 --> 00:00:45.300
+Oh, we do have questions,
+
+00:00:46.920 --> 00:00:47.240
+it's just that they're not in the right part.
+
+00:00:47.960 --> 00:00:48.340
+Okay, so I'm going to start,
+
+00:00:49.739 --> 00:00:49.920
+I'm going to read the questions to Howard and
+
+00:00:50.860 --> 00:00:51.260
+Howard will be answering them.
+
+00:00:52.960 --> 00:00:53.220
+And if you are interested in asking questions
+
+00:00:54.620 --> 00:00:54.860
+directly to Howard, I see a lot of people
+
+00:00:55.640 --> 00:00:56.140
+have joined us on BBB,
+
+00:00:58.540 --> 00:00:58.780
+so we'll first go through the questions on
+
+00:01:00.800 --> 00:01:01.020
+the pad and then we'll move on to the people
+
+00:01:03.340 --> 00:01:03.560
+on BBB. So Howard, starting with the first
+
+00:01:06.300 --> 00:01:06.460
+question, does table data allow for
+
+00:01:08.640 --> 00:01:08.800
+recursion, e.g. The result that returns they
+
+00:01:10.600 --> 00:01:10.940
+are random monster haunting the cavern
+
+00:01:14.060 --> 00:01:14.280
+entrance and we roll on random monster and
+
+00:01:16.420 --> 00:01:16.700
+inject them, inject into the result?
+
+00:01:17.920 --> 00:01:18.420
+Sorry a little bit of a complicated question.
+
+00:01:21.900 --> 00:01:22.200
+Do you want me to read it again,
+
+00:01:23.620 --> 00:01:24.120
+perhaps? Yeah, I think so.
+
+00:01:25.240 --> 00:01:25.740
+I didn't quite catch that.
+
+00:01:28.860 --> 00:01:29.060
+Okay, so does the table data allow for
+
+00:01:30.180 --> 00:01:30.550
+recursion? So I think...
+
+00:01:31.560 --> 00:01:31.880
+[Speaker 1]: Oh, yeah, yeah, yeah, yeah.
+
+00:01:33.960 --> 00:01:34.240
+No, it does. I put a little,
+
+00:01:35.440 --> 00:01:35.940
+you know, there's some code that could,
+
+00:01:38.660 --> 00:01:38.940
+so you could, yeah, you get a random value
+
+00:01:41.040 --> 00:01:41.380
+that gets inserted and that random value
+
+00:01:43.280 --> 00:01:43.580
+could refer to another table and it can keep
+
+00:01:46.000 --> 00:01:46.500
+on going. I have not pushed that that hard
+
+00:01:48.320 --> 00:01:48.820
+because obviously it's,
+
+00:01:50.880 --> 00:01:50.980
+it might be a little on the heavyweight side.
+
+00:01:52.540 --> 00:01:52.760
+I can't imagine it to go too deep,
+
+00:01:52.760 --> 00:01:53.260
+though.
+
+00:01:56.820 --> 00:01:56.979
+[Speaker 0]: I'm pretty sure Emacs would be complaining if
+
+00:01:57.940 --> 00:01:58.320
+you go a little too deep.
+
+00:01:59.979 --> 00:02:00.479
+We have something as Mike's list recursion,
+
+00:02:01.420 --> 00:02:01.840
+and stuff like this. So don't worry.
+
+00:02:03.440 --> 00:02:03.940
+Go willy nilly with your recursions.
+
+00:02:07.120 --> 00:02:07.240
+We've got comments about the fact that it's a
+
+00:02:09.180 --> 00:02:09.680
+really cool project and I feel like everyone
+
+00:02:10.680 --> 00:02:11.180
+watching would be agreeing.
+
+00:02:14.100 --> 00:02:14.340
+You've got a question about where you can get
+
+00:02:16.620 --> 00:02:16.780
+this. Do you have a github repository with
+
+00:02:17.080 --> 00:02:17.580
+all of this?
+
+00:02:20.440 --> 00:02:20.600
+[Speaker 1]: Yeah, and at the well at the end of the
+
+00:02:22.840 --> 00:02:22.960
+presentation I kind of display that and I
+
+00:02:25.920 --> 00:02:26.420
+think I put it at the top of the the pad
+
+00:02:35.220 --> 00:02:35.720
+[Speaker 2]: Yeah, there's a
+
+00:02:36.760 --> 00:02:37.260
+[Speaker 0]: Yes. I don't go Gone please.
+
+00:02:38.680 --> 00:02:38.820
+[Speaker 1]: Nothing there. There's a lot of stuff that
+
+00:02:40.080 --> 00:02:40.580
+needs to be reformatted.
+
+00:02:46.820 --> 00:02:46.940
+This is all Aflacode, so obviously it's a
+
+00:02:49.180 --> 00:02:49.480
+personal hack. So people should just steal
+
+00:02:51.880 --> 00:02:52.160
+the code as opposed to looking at a real
+
+00:02:52.760 --> 00:02:53.260
+project to use.
+
+00:03:00.420 --> 00:03:00.660
+[Speaker 0]: Right, lovely. So this game plus CRDT should
+
+00:03:01.960 --> 00:03:02.460
+be great for non-solid plays.
+
+00:03:03.640 --> 00:03:04.140
+Are you familiar with CRDT?
+
+00:03:08.160 --> 00:03:08.360
+[Speaker 1]: Well, so I used to use Flubits once upon a
+
+00:03:11.880 --> 00:03:12.160
+time and after seeing the previous talk on
+
+00:03:14.060 --> 00:03:14.340
+CRDT it's like, oh, I like that,
+
+00:03:16.000 --> 00:03:16.500
+and yes, I think that would be a fun idea.
+
+00:03:19.860 --> 00:03:20.080
+[Speaker 0]: I think I remember, so I did something much
+
+00:03:21.040 --> 00:03:21.300
+more humble than you did.
+
+00:03:24.660 --> 00:03:24.960
+I did a little bit, a little package in Org
+
+00:03:27.940 --> 00:03:28.080
+Mode for rolling dice and you had like a
+
+00:03:31.560 --> 00:03:31.780
+little formula like you could write 60 20 and
+
+00:03:34.740 --> 00:03:35.240
+it would throw 6 dice with 20 faces,
+
+00:03:39.060 --> 00:03:39.560
+60 sorry, 6 die, Frenchmen here in the room,
+
+00:03:43.660 --> 00:03:43.980
+20 faces and it would average them out or
+
+00:03:45.140 --> 00:03:45.640
+provide you any kind of stats needed.
+
+00:03:48.800 --> 00:03:49.020
+And this type of stuff works really well over
+
+00:03:52.540 --> 00:03:53.040
+CRDT because it's 1 edit inside of a file.
+
+00:03:55.900 --> 00:03:56.320
+If you start making edits in different parts
+
+00:03:58.780 --> 00:03:59.040
+of your file, it starts becoming a little
+
+00:04:02.060 --> 00:04:02.260
+more complicated because CRDT struggles when
+
+00:04:04.480 --> 00:04:04.640
+you're making many discrete changes inside of
+
+00:04:05.640 --> 00:04:06.140
+the same file. Does that make sense?
+
+00:04:07.640 --> 00:04:08.140
+[Speaker 1]: It does, it does. Interesting.
+
+00:04:10.120 --> 00:04:10.280
+Okay, yeah, no, I have not played with it
+
+00:04:10.280 --> 00:04:10.780
+yet.
+
+00:04:14.280 --> 00:04:14.540
+[Speaker 0]: Well, feel free to play with it and if you've
+
+00:04:16.320 --> 00:04:16.820
+got any kind of... If it works,
+
+00:04:17.720 --> 00:04:18.120
+it works and it's amazing,
+
+00:04:20.200 --> 00:04:20.380
+but if it doesn't, feel free to send us
+
+00:04:21.180 --> 00:04:21.680
+messages because Shantan,
+
+00:04:23.240 --> 00:04:23.740
+who's the maintainer of CRDT,
+
+00:04:25.840 --> 00:04:26.000
+we've been looking into options to make it a
+
+00:04:28.380 --> 00:04:28.880
+little more resilient and work elsewhere for
+
+00:04:31.360 --> 00:04:31.860
+securely. Excellent. All right,
+
+00:04:34.600 --> 00:04:35.080
+Great. I'm going back to the previous
+
+00:04:37.160 --> 00:04:37.500
+question. So does the current version also
+
+00:04:39.020 --> 00:04:39.520
+have some utilities for doing multiplayer,
+
+00:04:41.140 --> 00:04:41.640
+like either physically or digitally,
+
+00:04:42.520 --> 00:04:43.020
+like we've done with CRUT?
+
+00:04:45.060 --> 00:04:45.300
+The question is because you mentioned you
+
+00:04:47.360 --> 00:04:47.860
+previously did multiplayer session as well?
+
+00:04:51.180 --> 00:04:51.680
+[Speaker 1]: Yeah, I mean, I was using the table,
+
+00:04:55.940 --> 00:04:56.060
+the random table at a random entry kind of
+
+00:04:58.460 --> 00:04:58.960
+thing. I was using that at my table.
+
+00:05:00.780 --> 00:05:01.280
+So, I'm an eternal DM.
+
+00:05:02.920 --> 00:05:03.420
+So I would always use that.
+
+00:05:05.020 --> 00:05:05.220
+Like somebody says, what's the name of that
+
+00:05:07.160 --> 00:05:07.400
+shopkeep? And I could just hit a key,
+
+00:05:08.440 --> 00:05:08.660
+and it'd come up with the name,
+
+00:05:10.120 --> 00:05:10.620
+and I'd just read it off.
+
+00:05:14.440 --> 00:05:14.940
+But it was still me generating it.
+
+00:05:17.120 --> 00:05:17.540
+So it wasn't something that people would see
+
+00:05:19.540 --> 00:05:19.640
+necessarily, but I would keep notes in it and
+
+00:05:20.520 --> 00:05:21.020
+then publish those notes.
+
+00:05:24.240 --> 00:05:24.620
+But yes, I don't know.
+
+00:05:25.440 --> 00:05:25.940
+This sounds all kind of,
+
+00:05:27.260 --> 00:05:27.760
+this sounds all intriguing.
+
+00:05:28.840 --> 00:05:29.340
+I think this would be fun.
+
+00:05:32.220 --> 00:05:32.720
+I think I need to get a group of like-minded
+
+00:05:35.880 --> 00:05:36.380
+Emacs people who want to play online.
+
+00:05:39.860 --> 00:05:40.120
+[Speaker 0]: I'm sure you've got plenty of people not only
+
+00:05:41.580 --> 00:05:42.080
+watching but also here in BBB.
+
+00:05:44.660 --> 00:05:44.800
+So we only have about 14 minutes until we go
+
+00:05:46.120 --> 00:05:46.360
+to the next talk and it might be a little
+
+00:05:48.200 --> 00:05:48.700
+short for a campaign, but we might just...
+
+00:05:53.220 --> 00:05:53.720
+Moving on to the next question,
+
+00:05:56.480 --> 00:05:56.920
+how does 1 become super awesome like Howard
+
+00:05:58.200 --> 00:05:58.620
+Abrams? And I very much agree.
+
+00:05:58.700 --> 00:05:59.140
+[Speaker 1]: Sure, yes. That's kind,
+
+00:06:04.460 --> 00:06:04.600
+[Speaker 0]: That's not a secret, You're not giving your
+
+00:06:09.360 --> 00:06:09.800
+[Speaker 1]: too kind, too kind. There's no trade secrets.
+
+00:06:10.580 --> 00:06:11.080
+Just follow your passions.
+
+00:06:14.540 --> 00:06:15.040
+[Speaker 0]: trade secrets. I can only conquer.
+
+00:06:16.160 --> 00:06:16.660
+All right, moving on to the next question.
+
+00:06:18.740 --> 00:06:19.200
+Please talk a little about how you produced
+
+00:06:20.460 --> 00:06:20.960
+such a slick presentation video.
+
+00:06:22.800 --> 00:06:23.300
+Everything looked completely professional,
+
+00:06:25.120 --> 00:06:25.620
+and I'd agree. So tell us more.
+
+00:06:29.260 --> 00:06:29.760
+[Speaker 1]: OK, so as you've seen my previous
+
+00:06:32.680 --> 00:06:33.180
+presentations, It's all just Emacs screen.
+
+00:06:35.920 --> 00:06:36.060
+I just felt like, oh, what I really want to
+
+00:06:39.360 --> 00:06:39.560
+talk about is how much fun I'm having and the
+
+00:06:43.680 --> 00:06:43.840
+little introduction. So my son actually is a
+
+00:06:44.980 --> 00:06:45.240
+YouTuber. So I asked him,
+
+00:06:47.200 --> 00:06:47.360
+and it's like, oh, I'll take care of your
+
+00:06:49.940 --> 00:06:50.440
+dad. And so he's the 1 that kind of prompted
+
+00:06:51.280 --> 00:06:51.780
+me. So I had a director.
+
+00:06:53.720 --> 00:06:54.220
+Don't know if that translates,
+
+00:06:58.940 --> 00:06:59.340
+[Speaker 0]: I mean, that translates amazingly.
+
+00:07:02.560 --> 00:07:03.060
+[Speaker 1]: though, but. Very good.
+
+00:07:06.900 --> 00:07:07.400
+You know, very over the top.
+
+00:07:09.440 --> 00:07:09.940
+I've never done something like this before.
+
+00:07:10.460 --> 00:07:10.600
+[Speaker 0]: I mean, the results at the end is No,
+
+00:07:11.680 --> 00:07:12.040
+but it fits you so well.
+
+00:07:14.820 --> 00:07:14.980
+I think this over the top-ness combined with
+
+00:07:15.800 --> 00:07:16.300
+the editing, it just...
+
+00:07:18.900 --> 00:07:19.200
+[Speaker 1]: I might have to keep doing it because it was
+
+00:07:20.600 --> 00:07:21.100
+fun. It was fun to do.
+
+00:07:23.160 --> 00:07:23.300
+[Speaker 0]: You've set a standard that you'll need to
+
+00:07:24.520 --> 00:07:24.860
+meet for following Emax.
+
+00:07:28.360 --> 00:07:28.860
+[Speaker 1]: I'll have to keep paying them then.
+
+00:07:30.820 --> 00:07:31.320
+[Speaker 0]: Oh no! Alright, Yes! Alright,
+
+00:07:32.360 --> 00:07:32.860
+moving on to the next question.
+
+00:07:35.380 --> 00:07:35.540
+Does table data, no sorry that's the 1 we did
+
+00:07:37.360 --> 00:07:37.680
+on recursion and we're not going to struggle
+
+00:07:38.900 --> 00:07:39.400
+through the reading of it again.
+
+00:07:41.280 --> 00:07:41.780
+Alright so with your toolkits,
+
+00:07:43.940 --> 00:07:44.060
+a list of good books would be nice to be
+
+00:07:45.300 --> 00:07:45.800
+included, example D&D,
+
+00:07:48.400 --> 00:07:48.900
+space, steampunk, cyberpunk settings.
+
+00:07:49.800 --> 00:07:50.300
+Do you have such a plan?
+
+00:07:56.120 --> 00:07:56.360
+[Speaker 1]: 00I mean, I could definitely publish a
+
+00:07:59.640 --> 00:08:00.140
+bibliography of things I'm using and reading,
+
+00:08:03.640 --> 00:08:04.140
+But I don't know if I'd be writing anything.
+
+00:08:07.420 --> 00:08:07.640
+[Speaker 0]: Oh come on, don't tell yourself short.
+
+00:08:09.000 --> 00:08:09.140
+You've already proven you were amazing in
+
+00:08:10.640 --> 00:08:11.140
+very different, very varied topics.
+
+00:08:12.840 --> 00:08:13.340
+I'm sure you should give it 1 more try.
+
+00:08:15.460 --> 00:08:15.740
+[Speaker 1]: I don't know. I've got a sabbatical coming
+
+00:08:17.580 --> 00:08:17.840
+up. I'm toying with writing something,
+
+00:08:19.860 --> 00:08:20.360
+but I don't know if it'd ever leave the Emacs
+
+00:08:20.440 --> 00:08:20.940
+buffer.
+
+00:08:23.680 --> 00:08:24.180
+[Speaker 0]: All right, I like this.
+
+00:08:28.140 --> 00:08:28.260
+Next question. Hi Howard and thanks for an
+
+00:08:28.860 --> 00:08:29.360
+outstanding presentation.
+
+00:08:31.640 --> 00:08:31.800
+What did you use to create the graphics in
+
+00:08:34.280 --> 00:08:34.440
+your presentation? Didn't we cover this 1
+
+00:08:35.059 --> 00:08:35.380
+already? I can't remember.
+
+00:08:35.740 --> 00:08:35.860
+No, that was
+
+00:08:41.980 --> 00:08:42.240
+[Speaker 1]: a good 1. So the graphics actually were just
+
+00:08:43.179 --> 00:08:43.679
+kind of hacked together.
+
+00:08:45.020 --> 00:08:45.340
+But then I just gave them to my son.
+
+00:08:47.200 --> 00:08:47.520
+And it's like, can you put the graphic right
+
+00:08:50.140 --> 00:08:50.640
+here and he goes no problem there it is like
+
+00:08:56.280 --> 00:08:56.640
+[Speaker 0]: okay great so 1 more 1 more reason to keep
+
+00:08:57.060 --> 00:08:57.560
+paying your son
+
+00:08:59.820 --> 00:09:00.180
+[Speaker 1]: perfect yeah yeah exactly so if you can get
+
+00:09:02.760 --> 00:09:03.260
+get yourself a YouTuber who knows how to use
+
+00:09:05.800 --> 00:09:06.300
+all the tools. I think he was using DaVinci,
+
+00:09:08.860 --> 00:09:09.360
+but he's got quite a few going.
+
+00:09:12.700 --> 00:09:12.900
+[Speaker 0]: Right. Alright, moving on to the next
+
+00:09:15.040 --> 00:09:15.220
+question. Any plans to borrow tables from
+
+00:09:17.980 --> 00:09:18.240
+Dungeon World or Iron Sword Starforge and
+
+00:09:20.460 --> 00:09:20.960
+publish in a TK repository?
+
+00:09:22.360 --> 00:09:22.860
+Not sure what TK is.
+
+00:09:25.380 --> 00:09:25.880
+[Speaker 1]: Yeah, yeah, okay. So yeah,
+
+00:09:30.320 --> 00:09:30.820
+so that would be fun and I'd love that.
+
+00:09:33.840 --> 00:09:34.340
+And I was just reading a way to render PDFs
+
+00:09:38.080 --> 00:09:38.480
+that you might own into Markdown format.
+
+00:09:39.140 --> 00:09:39.560
+And if it's in Markdown,
+
+00:09:41.440 --> 00:09:41.940
+it'd be easy to pull into Org Mode.
+
+00:09:43.680 --> 00:09:44.180
+So all of the Iron Sworn,
+
+00:09:45.280 --> 00:09:45.780
+that role-playing game,
+
+00:09:48.780 --> 00:09:49.280
+Since it's all under the Creative License,
+
+00:09:51.380 --> 00:09:51.600
+I think even the Star Forge is.
+
+00:09:53.940 --> 00:09:54.280
+So I think I could grab the Star Forge 1.
+
+00:09:56.820 --> 00:09:57.100
+I don't know about Dungeon World and their
+
+00:09:59.220 --> 00:09:59.380
+tables. But yeah, a lot of people are
+
+00:10:01.060 --> 00:10:01.500
+starting to publish those kind of tables.
+
+00:10:03.760 --> 00:10:04.180
+So yeah, that'd be fun.
+
+00:10:07.160 --> 00:10:07.400
+I'd like to render all those in text files
+
+00:10:08.560 --> 00:10:09.060
+that I could pull up like that.
+
+00:10:13.180 --> 00:10:13.580
+[Speaker 0]: Lovely. I think that's all for the questions
+
+00:10:15.820 --> 00:10:16.320
+we had in the pad. We still have 9 minutes.
+
+00:10:18.280 --> 00:10:18.760
+I see plenty of people have joined us,
+
+00:10:21.060 --> 00:10:21.560
+including 1 person with a microphone on BBB.
+
+00:10:23.160 --> 00:10:23.500
+PlasmaStrike, do you have a question?
+
+00:10:24.920 --> 00:10:25.180
+And would you like to unmute yourself and ask
+
+00:10:28.440 --> 00:10:28.940
+it? I'm also going to check the chat.
+
+00:10:31.640 --> 00:10:31.920
+[Speaker 1]: Oh, yeah. StarsWithoutNumber is another great
+
+00:10:33.640 --> 00:10:34.140
+1 that's got some great tables in it.
+
+00:10:37.720 --> 00:10:37.960
+Sorry, I'm just looking at the questions that
+
+00:10:38.940 --> 00:10:39.440
+are popping up here, too.
+
+00:10:42.740 --> 00:10:43.180
+[Speaker 0]: Sure. So I don't see anyone unmuting
+
+00:10:44.540 --> 00:10:44.800
+themselves. I see people typing away
+
+00:10:45.220 --> 00:10:45.400
+questions. By the way,
+
+00:10:46.120 --> 00:10:46.560
+if you're going to type questions,
+
+00:10:48.240 --> 00:10:48.680
+perhaps do not put them on BBB,
+
+00:10:50.460 --> 00:10:50.600
+put them in the pad. It's a little easier for
+
+00:10:52.380 --> 00:10:52.880
+us to archive them afterwards.
+
+00:10:56.160 --> 00:10:56.580
+I'm going to give a little bit of time.
+
+00:10:58.360 --> 00:10:58.860
+I feel bad about going on break when I have
+
+00:11:00.940 --> 00:11:01.160
+you available and ready to answer more
+
+00:11:02.680 --> 00:11:03.180
+questions. Oh, you're too kind.
+
+00:11:07.360 --> 00:11:07.860
+[Speaker 2]: How have you, as this changed,
+
+00:11:09.520 --> 00:11:09.960
+how's your visualization of the books,
+
+00:11:11.260 --> 00:11:11.760
+or of your games at all?
+
+00:11:15.180 --> 00:11:15.680
+[Speaker 1]: Sorry, can you ask that 1 more time?
+
+00:11:16.700 --> 00:11:17.200
+I didn't catch the first part.
+
+00:11:20.140 --> 00:11:20.600
+[Speaker 2]: How has this impacted,
+
+00:11:23.080 --> 00:11:23.300
+like, your imagination on the scenes and
+
+00:11:28.240 --> 00:11:28.360
+stuff like that because it's partly open and
+
+00:11:30.720 --> 00:11:30.920
+closed because you had that chart where you
+
+00:11:32.880 --> 00:11:33.380
+had that where you put it in the center of
+
+00:11:37.240 --> 00:11:37.400
+constrained by algorithms to enhance your
+
+00:11:39.780 --> 00:11:40.020
+creativity, you write it but it's not all
+
+00:11:42.700 --> 00:11:42.900
+freeform to where you have writer's block as
+
+00:11:42.900 --> 00:11:43.400
+much.
+
+00:11:46.800 --> 00:11:47.080
+[Speaker 1]: You hit the, You hit it on the head.
+
+00:11:49.640 --> 00:11:50.040
+That's exactly it. That's why I've been doing
+
+00:11:53.940 --> 00:11:54.440
+this. Creativity is a hard thing to foster.
+
+00:11:57.520 --> 00:11:57.700
+And having little prompts that you have to
+
+00:11:58.340 --> 00:11:58.840
+kind of work together,
+
+00:12:03.660 --> 00:12:04.160
+like twisty language, what does that mean?
+
+00:12:06.560 --> 00:12:06.900
+Oh, you have to kind of work with that.
+
+00:12:08.800 --> 00:12:09.160
+So yeah, that's 1 of the reasons why I got
+
+00:12:11.800 --> 00:12:12.300
+into doing the solo version of it,
+
+00:12:14.120 --> 00:12:14.600
+just because you kind of,
+
+00:12:15.980 --> 00:12:16.480
+it does really foster the creativity.
+
+00:12:23.540 --> 00:12:24.040
+Did that answer the question?
+
+00:12:28.520 --> 00:12:28.780
+[Speaker 2]: Yeah well has it kind of has it improved over
+
+00:12:30.060 --> 00:12:30.280
+time though of using it like
+
+00:12:33.200 --> 00:12:33.700
+[Speaker 1]: oh yeah oh yeah I would definitely say so
+
+00:12:36.420 --> 00:12:36.920
+While I'm still not ready to publish my files
+
+00:12:40.240 --> 00:12:40.740
+at all, but the first ones were much worse.
+
+00:12:46.160 --> 00:12:46.320
+[Speaker 2]: That was an example like after you play for
+
+00:12:47.800 --> 00:12:48.080
+like 2 months or something like that,
+
+00:12:50.320 --> 00:12:50.440
+like, could you close your eyes and see the
+
+00:12:51.420 --> 00:12:51.920
+rooms a lot better versus...
+
+00:12:54.720 --> 00:12:55.220
+[Speaker 1]: Yeah, I think so. I think so.
+
+00:13:02.150 --> 00:13:02.500
+And, you know, there's 1 solo game called A
+
+00:13:03.340 --> 00:13:03.840
+Thousand-Year-Old Vampire.
+
+00:13:05.740 --> 00:13:06.100
+I don't know if you've seen that 1 or not,
+
+00:13:08.440 --> 00:13:08.940
+but it's quite creative.
+
+00:13:09.720 --> 00:13:10.220
+It's very interesting.
+
+00:13:13.180 --> 00:13:13.680
+It's got a great setup to use.
+
+00:13:17.200 --> 00:13:17.320
+And When I was looking through it,
+
+00:13:19.320 --> 00:13:19.820
+it's like, I'm thinking of a typical vampire
+
+00:13:20.720 --> 00:13:21.220
+and this sort of thing.
+
+00:13:25.760 --> 00:13:26.040
+But then there's this YouTuber named Seth
+
+00:13:27.880 --> 00:13:28.180
+Skalkarski, if I can pronounce his name
+
+00:13:30.020 --> 00:13:30.060
+right. He was describing it.
+
+00:13:32.040 --> 00:13:32.540
+And he came up with a completely different
+
+00:13:34.540 --> 00:13:34.940
+vampire scene. And it's like,
+
+00:13:37.560 --> 00:13:37.880
+oh, I could see how people can kind of start
+
+00:13:40.600 --> 00:13:41.000
+working on these things and really see things
+
+00:13:43.080 --> 00:13:43.260
+differently. And the creativity and all that
+
+00:13:44.340 --> 00:13:44.840
+sort of stuff just really blossoms.
+
+00:13:48.040 --> 00:13:48.540
+[Speaker 2]: And then I guess as an extension of that,
+
+00:13:53.680 --> 00:13:53.920
+how has the stories changed after using this
+
+00:13:58.140 --> 00:13:58.640
+toolkit or the solo games for 2 months?
+
+00:14:00.200 --> 00:14:00.700
+Like the scenes, like how you,
+
+00:14:02.440 --> 00:14:02.940
+like the stories that you'd start generating?
+
+00:14:05.980 --> 00:14:06.460
+[Speaker 1]: Yeah, yeah, yeah. Yeah,
+
+00:14:09.000 --> 00:14:09.200
+I mean, a lot depends on just how much you're
+
+00:14:10.140 --> 00:14:10.440
+willing to put into it.
+
+00:14:13.980 --> 00:14:14.340
+But yeah, I've definitely had a lot of fun.
+
+00:14:16.360 --> 00:14:16.760
+And it's just been a lot more enjoyable and
+
+00:14:17.680 --> 00:14:18.180
+just more interesting.
+
+00:14:21.960 --> 00:14:22.120
+[Speaker 2]: Well I mean like has the types and quality of
+
+00:14:23.940 --> 00:14:24.440
+the stories changed a lot?
+
+00:14:25.240 --> 00:14:25.740
+Or more than that?
+
+00:14:30.280 --> 00:14:30.620
+[Speaker 1]: I think so, you know, but obviously the proof
+
+00:14:34.000 --> 00:14:34.500
+is if somebody else is doing the evaluation
+
+00:14:39.060 --> 00:14:39.280
+and I'm not letting that out But I think so,
+
+00:14:42.040 --> 00:14:42.500
+but I think so so but I think your mileage
+
+00:14:44.340 --> 00:14:44.840
+may vary. So yeah, try it out
+
+00:14:47.360 --> 00:14:47.860
+[Speaker 2]: Have you seen the game Dwarf Fortress?
+
+00:14:50.880 --> 00:14:51.140
+Because it's supposed to be a video game
+
+00:14:53.040 --> 00:14:53.260
+that's in a similar spirit to that,
+
+00:14:55.080 --> 00:14:55.580
+where it helps you generate stories.
+
+00:14:56.820 --> 00:14:57.320
+Dwarf Fortress, RimWorld,
+
+00:15:00.420 --> 00:15:00.920
+Kenshi is another 1.
+
+00:15:03.400 --> 00:15:03.720
+[Speaker 1]: Yeah, no, I've looked at the Dwarf Fortress,
+
+00:15:04.640 --> 00:15:04.900
+but I haven't played it.
+
+00:15:08.160 --> 00:15:08.480
+But that 1 seems a little bit more
+
+00:15:10.640 --> 00:15:10.920
+structured, but still could be a lot of fun
+
+00:15:13.700 --> 00:15:13.860
+too. And then others, it's like,
+
+00:15:15.240 --> 00:15:15.260
+how far do you want to take it?
+
+00:15:18.280 --> 00:15:18.780
+Like I just picked up this 1 called Broken
+
+00:15:21.820 --> 00:15:21.980
+Cask. There it is, where you generate a
+
+00:15:25.240 --> 00:15:25.640
+little bar tavern, and then you start rolling
+
+00:15:29.180 --> 00:15:29.540
+events. Now, it gives a lot more stuff coming
+
+00:15:30.780 --> 00:15:31.060
+out of it. It's like, oh,
+
+00:15:32.700 --> 00:15:32.980
+this person's showing up and this is what's
+
+00:15:34.700 --> 00:15:34.840
+happening, but you can elaborate on it as
+
+00:15:36.660 --> 00:15:36.880
+much as you want. And that's what I'm
+
+00:15:39.600 --> 00:15:39.840
+thinking I might do. Hi,
+
+00:15:40.600 --> 00:15:41.100
+Mike, you got a question?
+
+00:15:47.680 --> 00:15:48.180
+[Speaker 3]: Hi, Howard. Yeah, I do have a question.
+
+00:15:50.940 --> 00:15:51.440
+I'm a big fan of your work on literate DevOps
+
+00:15:53.120 --> 00:15:53.620
+and your essay and video on that topic.
+
+00:15:56.040 --> 00:15:56.260
+I'm just wondering if you still use that
+
+00:15:59.640 --> 00:15:59.820
+workflow at work and have you changed how
+
+00:16:02.160 --> 00:16:02.420
+that process works or has it evolved over
+
+00:16:04.720 --> 00:16:05.220
+time since that video and essay were written?
+
+00:16:06.840 --> 00:16:07.340
+[Speaker 1]: That's a good question.
+
+00:16:12.440 --> 00:16:12.600
+Yes, I still do it. It varies depending on
+
+00:16:13.500 --> 00:16:14.000
+the project and whatnot.
+
+00:16:16.400 --> 00:16:16.900
+But I still am using it.
+
+00:16:20.280 --> 00:16:20.520
+Yeah, yeah. In fact, I'm doing it with a lot
+
+00:16:22.760 --> 00:16:23.260
+of other things. Like all my configuration
+
+00:16:27.660 --> 00:16:28.160
+files are all in a literate style for Emacs.
+
+00:16:31.160 --> 00:16:31.660
+And even all the code that's in Ironsworn,
+
+00:16:35.060 --> 00:16:35.560
+the repo, if you go to the repo,
+
+00:16:37.440 --> 00:16:37.640
+it's the readme file. And yeah,
+
+00:16:39.720 --> 00:16:40.140
+that's just being rendered out to the Emacs
+
+00:16:41.660 --> 00:16:42.160
+file. So it is still all literate.
+
+00:16:43.440 --> 00:16:43.940
+[Speaker 3]: Very cool.
+
+00:16:46.500 --> 00:16:46.780
+[Speaker 1]: Yeah, because I don't know.
+
+00:16:48.120 --> 00:16:48.620
+Some things are just a little too complicated
+
+00:16:49.320 --> 00:16:49.820
+to just type up.
+
+00:16:56.040 --> 00:16:56.200
+[Speaker 0]: All right, sorry to be the bearer of bad
+
+00:16:58.220 --> 00:16:58.720
+news, but we have only about 3 more minutes
+
+00:16:59.840 --> 00:17:00.060
+of lifetime. By the way,
+
+00:17:02.920 --> 00:17:03.120
+feel free to stay and discuss any of the
+
+00:17:07.540 --> 00:17:08.040
+topic of today's session after we go off air
+
+00:17:10.579 --> 00:17:10.859
+and we'll be able to keep all of the nice
+
+00:17:12.260 --> 00:17:12.540
+discussion and put them on the talks page
+
+00:17:16.560 --> 00:17:17.060
+afterwards. Great. Howard,
+
+00:17:20.020 --> 00:17:20.280
+I would like to ask you if you have any last
+
+00:17:21.760 --> 00:17:21.900
+words regarding the presentation or the
+
+00:17:23.040 --> 00:17:23.540
+questions you've had. Well,
+
+00:17:24.520 --> 00:17:25.020
+the last question we had,
+
+00:17:27.500 --> 00:17:27.720
+actually, we had Mike come and ask it live.
+
+00:17:29.440 --> 00:17:29.720
+But do you have any parting words before we
+
+00:17:31.720 --> 00:17:32.220
+leave you? Okay.
+
+00:17:37.560 --> 00:17:38.000
+[Speaker 1]: I think the last thing is go and hack
+
+00:17:41.420 --> 00:17:41.720
+something. I mean, this Lisp stuff is a lot
+
+00:17:43.860 --> 00:17:44.360
+of fun. And I hope that came across.
+
+00:17:47.240 --> 00:17:47.420
+It's like, the project I made is just a
+
+00:17:50.220 --> 00:17:50.720
+personal thing and it was fun for me to make,
+
+00:17:53.100 --> 00:17:53.400
+but everybody's probably got some fun thing
+
+00:17:54.320 --> 00:17:54.820
+they could make as well.
+
+00:17:56.200 --> 00:17:56.700
+And just, I don't know,
+
+00:17:58.460 --> 00:17:58.960
+hack it yourself because all the,
+
+00:18:01.920 --> 00:18:02.420
+you know, think about adding multi-threading
+
+00:18:04.480 --> 00:18:04.740
+to Emacs. Maybe we don't want that,
+
+00:18:06.000 --> 00:18:06.360
+because that'll just complicate things.
+
+00:18:08.200 --> 00:18:08.700
+This is your own personal hacking sandbox,
+
+00:18:09.520 --> 00:18:10.020
+so go have fun.
+
+00:18:14.220 --> 00:18:14.380
+[Speaker 0]: Great. I was just going to say we were
+
+00:18:15.060 --> 00:18:15.560
+talking about Dwarf Fortress.
+
+00:18:18.680 --> 00:18:19.180
+In Dwarf Fortress, it's a very CPU intensive
+
+00:18:21.020 --> 00:18:21.240
+game because it needs to compute every single
+
+00:18:23.480 --> 00:18:23.860
+thing in the world and there's such a thing
+
+00:18:27.700 --> 00:18:27.780
+as the CPU death of the world where basically
+
+00:18:29.340 --> 00:18:29.500
+you've got too many cats that are just
+
+00:18:31.320 --> 00:18:31.440
+breeding constantly with 1 another and it
+
+00:18:33.760 --> 00:18:34.000
+creates so many entities that it just
+
+00:18:36.760 --> 00:18:36.940
+crashes, and the time it takes for the day to
+
+00:18:38.440 --> 00:18:38.940
+finish it, it just never finish.
+
+00:18:40.680 --> 00:18:41.180
+So I was going to say maybe multi-threading
+
+00:18:43.180 --> 00:18:43.660
+might be useful in this case for Emacs.
+
+00:18:46.100 --> 00:18:46.600
+So, wanting to foray into the future.
+
+00:18:48.800 --> 00:18:49.300
+[Speaker 1]: All right. Thank you.
+
+00:18:50.900 --> 00:18:51.180
+[Speaker 0]: And thank you so much,
+
+00:18:52.360 --> 00:18:52.540
+Howard, and thank you Plasma Strike for your
+
+00:18:53.320 --> 00:18:53.560
+question, as well as Mike,
+
+00:18:55.760 --> 00:18:55.900
+who joined us. We're going to go live with
+
+00:18:57.440 --> 00:18:57.940
+the next talk in about 1 minute,
+
+00:19:00.400 --> 00:19:00.580
+and until then, well, I'm not going to put
+
+00:19:02.040 --> 00:19:02.400
+music, You can wait 50 seconds without music,
+
+00:19:03.960 --> 00:19:04.460
+you Zoomers. We'll be back in a bit.
+
+00:19:05.280 --> 00:19:05.780
+[Speaker 2]: Bye-bye.
+
+00:19:09.620 --> 00:19:09.860
+[Speaker 0]: Bye, Howard. All right,
+
+00:19:11.120 --> 00:19:11.280
+we are off. Thank you so much,
+
+00:19:11.980 --> 00:19:12.480
+Howard. I need to dash.
+
+00:19:13.940 --> 00:19:14.440
+And oh, I think he's already gone.
+
+00:19:16.360 --> 00:19:16.860
+So Bye everyone, I'll see you later.
diff --git a/2023/captions/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--main--chapters.vtt b/2023/captions/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--main--chapters.vtt
new file mode 100644
index 00000000..53987434
--- /dev/null
+++ b/2023/captions/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--main--chapters.vtt
@@ -0,0 +1,41 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:01:20.679
+Introduction
+
+00:01:20.680 --> 00:02:47.439
+Solo RPGs
+
+00:02:47.440 --> 00:04:11.759
+Demo
+
+00:04:11.760 --> 00:05:31.959
+Randomization
+
+00:05:31.960 --> 00:06:03.639
+Moves
+
+00:06:03.640 --> 00:06:34.679
+Reference
+
+00:06:34.680 --> 00:07:48.679
+Story arcs
+
+00:07:48.680 --> 00:09:02.959
+Using different stats
+
+00:09:02.960 --> 00:09:34.799
+Dice rolls
+
+00:09:34.800 --> 00:10:19.679
+Dangers
+
+00:10:19.680 --> 00:11:49.679
+A strong success
+
+00:11:49.680 --> 00:13:04.719
+Other solo RPGs
+
+00:13:04.720 --> 00:14:35.920
+Conclusion
diff --git a/2023/captions/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--main.vtt b/2023/captions/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--main.vtt
new file mode 100644
index 00000000..9e8147a4
--- /dev/null
+++ b/2023/captions/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--main.vtt
@@ -0,0 +1,834 @@
+WEBVTT captioned by sachac, checked by sachac
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:05.559
+Hi there, I'm Howard Abrams. You may remember me
+
+00:00:05.560 --> 00:00:07.719
+from past conference talks
+
+00:00:07.720 --> 00:00:10.519
+as "Literate DevOps and the Temple of Doom"
+
+00:00:10.520 --> 00:00:13.399
+and "Using Eshell for Fun and Profit".
+
+00:00:13.400 --> 00:00:16.599
+I'm here to talk to you about my latest Emacs project:
+
+00:00:16.600 --> 00:00:19.479
+playing games, solo role-playing games.
+
+00:00:19.480 --> 00:00:23.159
+I started playing RPGs when I got my first copy
+
+00:00:23.160 --> 00:00:25.599
+of Dungeons & Dragons when I was 12.
+
+00:00:25.600 --> 00:00:28.279
+Yes, my original copy burned
+
+00:00:28.280 --> 00:00:30.559
+in the Great Satanic Panic of the 1980s,
+
+00:00:30.560 --> 00:00:32.359
+but that's another story.
+
+00:00:32.360 --> 00:00:37.919
+I started playing other RPGs like GURPS.
+
+00:00:37.920 --> 00:00:39.999
+These are some of my notes.
+
+00:00:40.000 --> 00:00:42.559
+Back then, I was typing them in Emacs,
+
+00:00:42.560 --> 00:00:46.079
+but I formatted them with LaTeX.
+
+00:00:46.080 --> 00:00:49.079
+Later, when I was introducing my kids
+
+00:00:49.080 --> 00:00:50.839
+to role-playing games,
+
+00:00:50.840 --> 00:00:53.580
+I actually typed them up still in Emacs,
+
+00:00:53.581 --> 00:00:57.599
+but now formatted them for a tablet.
+
+00:00:57.600 --> 00:00:59.319
+I wrote a little JavaScript code
+
+00:00:59.320 --> 00:01:03.119
+that allowed me to click on it, and it would roll dice,
+
+00:01:03.120 --> 00:01:06.679
+generate random events, keep track of turn order,
+
+00:01:06.680 --> 00:01:07.479
+you know, everything,
+
+00:01:07.480 --> 00:01:10.119
+so I didn't have to slow down the action of the game.
+
+00:01:10.120 --> 00:01:12.999
+Well, when my kids got older,
+
+00:01:13.000 --> 00:01:15.599
+I still managed to sneak in a game of D&D
+
+00:01:15.600 --> 00:01:17.319
+once a week at lunch.
+
+00:01:17.320 --> 00:01:20.679
+This pastime came to a screeching halt with the pandemic.
+
+NOTE Solo RPGs
+
+00:01:20.680 --> 00:01:23.639
+I turned to playing role-playing games by myself
+
+00:01:23.640 --> 00:01:27.999
+to get my fix. Playing these silly elf games in solo mode
+
+00:01:28.000 --> 00:01:29.879
+has been part of the game for many years,
+
+00:01:29.880 --> 00:01:32.559
+but with so many of us stuck at home,
+
+00:01:32.560 --> 00:01:35.119
+solo role-playing games really expanded,
+
+00:01:35.120 --> 00:01:40.279
+creative people releasing some amazing ideas.
+
+00:01:40.280 --> 00:01:44.399
+What's a solo RPG like? Well, it's somewhere in the middle
+
+00:01:44.400 --> 00:01:47.519
+of writing your own story, where anything's possible,
+
+00:01:47.520 --> 00:01:50.159
+but you've got to do all the imaginative work;
+
+00:01:50.160 --> 00:01:52.999
+or reading a choose-your-own-adventure book,
+
+00:01:53.000 --> 00:01:55.239
+where the text is given to you,
+
+00:01:55.240 --> 00:01:59.079
+and you have free, a few predetermined paths;
+
+00:01:59.080 --> 00:02:01.039
+and tactical battle games,
+
+00:02:01.040 --> 00:02:03.159
+where dice determines everything.
+
+00:02:03.160 --> 00:02:05.799
+It kind of fits in the sweet spot between those.
+
+00:02:05.800 --> 00:02:08.879
+While I started removing the Game Master
+
+00:02:08.880 --> 00:02:12.119
+using the Mythic GM Emulator,
+
+00:02:12.120 --> 00:02:15.319
+Ironsworn really captivated me.
+
+00:02:15.320 --> 00:02:19.199
+I began with dice, pencils, notebooks, you know,
+
+00:02:19.200 --> 00:02:23.359
+just like when I was a kid. But taking notes on paper?
+
+00:02:23.360 --> 00:02:27.999
+Yeah, you know me. That's not my jam. Org mode is.
+
+00:02:28.000 --> 00:02:31.159
+And, you know, notes have to be in Org,
+
+00:02:31.160 --> 00:02:35.159
+well, why not write a little dice roller in Lisp?
+
+00:02:35.160 --> 00:02:38.799
+Well, when Shawn Tomkin released his Ironsworn
+
+00:02:38.800 --> 00:02:41.879
+under the Creative Commons, well,
+
+00:02:41.880 --> 00:02:43.919
+I could just download the entire text.
+
+00:02:43.920 --> 00:02:47.439
+I figured I could just render the entire game in Emacs.
+
+NOTE Demo
+
+00:02:47.440 --> 00:02:51.239
+All right, enough talk. Let's get some Emacs action here,
+
+00:02:51.240 --> 00:02:55.199
+while I show you a bit of my game.
+
+00:02:55.200 --> 00:02:57.519
+When playing a solo RPG,
+
+00:02:57.520 --> 00:02:59.759
+I jot down the story notes in an Org file.
+
+00:02:59.760 --> 00:03:02.759
+I mean, did you expect anything less from me?
+
+00:03:02.760 --> 00:03:07.759
+I alternate between lengthy prose and short notes.
+
+00:03:07.760 --> 00:03:10.519
+As I'm both the writer and the audience,
+
+00:03:10.520 --> 00:03:11.999
+the goal is just enjoyment.
+
+00:03:12.000 --> 00:03:16.999
+So, this document is both a record log of my game sessions,
+
+00:03:17.000 --> 00:03:20.959
+as well as my character's character sheet.
+
+00:03:20.960 --> 00:03:24.519
+In most RPGs, a player's focus is a character sheet
+
+00:03:24.520 --> 00:03:26.999
+that lists all the attributes, the stats, equipment,
+
+00:03:27.000 --> 00:03:28.759
+powers, you know, that sort of thing.
+
+00:03:28.760 --> 00:03:32.959
+For my game, I wanted the focus to be the prose,
+
+00:03:32.960 --> 00:03:34.559
+or at least the notes.
+
+00:03:34.560 --> 00:03:38.199
+So, I put down all the stats as Org mode properties.
+
+00:03:38.200 --> 00:03:40.799
+Now, I can collapse a property drawer
+
+00:03:40.800 --> 00:03:42.119
+and have functions
+
+00:03:42.120 --> 00:03:45.759
+that just grab values from these properties.
+
+00:03:45.760 --> 00:03:50.079
+All right, let's play. While not important to my talk,
+
+00:03:50.080 --> 00:03:52.679
+I'm in the middle of a game. My character, Tegan,
+
+00:03:52.680 --> 00:03:54.959
+promised to help a village by tracking down
+
+00:03:54.960 --> 00:03:59.239
+the son of a village chief. A less-than-stellar roll
+
+00:03:59.240 --> 00:04:01.199
+meant I didn't catch him before he entered
+
+00:04:01.200 --> 00:04:03.879
+the mysterious underground structure
+
+00:04:03.880 --> 00:04:06.399
+of a relic of an ancient people.
+
+00:04:06.400 --> 00:04:08.399
+I just finished playing out the journey,
+
+00:04:08.400 --> 00:04:11.759
+and he's about to enter into the Catacombs of Svala's Blood.
+
+NOTE Randomization
+
+00:04:11.760 --> 00:04:15.199
+Why that name? Well, that was actually what came up
+
+00:04:15.200 --> 00:04:19.639
+from an extensive random number generator that I wrote.
+
+00:04:19.640 --> 00:04:21.959
+As I wrote more and more functions
+
+00:04:21.960 --> 00:04:23.279
+to help me play this game,
+
+00:04:23.280 --> 00:04:25.919
+and since I don't play all the time,
+
+00:04:25.920 --> 00:04:30.359
+I created hydra. I can roll dice,
+
+00:04:30.360 --> 00:04:34.079
+I can roll dice challenges against the character stats,
+
+00:04:34.080 --> 00:04:38.199
+I can adjust stats. Lots of random generators
+
+00:04:38.200 --> 00:04:39.479
+come from this oracle section.
+
+00:04:39.480 --> 00:04:43.159
+For instance, are footprints going through the door?
+
+00:04:43.160 --> 00:04:46.479
+I press `c`, and I'm prompted with how likely.
+
+00:04:46.480 --> 00:04:51.079
+Since the villagers gave Tegan vague directions,
+
+00:04:51.080 --> 00:04:53.239
+and he didn't see any signs the contrary,
+
+00:04:53.240 --> 00:04:58.479
+I chose "likely". And, well, it originally said yes,
+
+00:04:58.480 --> 00:05:01.599
+and that's why I jotted this information down.
+
+00:05:01.600 --> 00:05:03.479
+Now, this is different than my character's ability
+
+00:05:03.480 --> 00:05:07.639
+to notice the prints. This is about generating the story,
+
+00:05:07.640 --> 00:05:10.279
+something that the game master would do
+
+00:05:10.280 --> 00:05:12.479
+in a typical role-playing game.
+
+00:05:12.480 --> 00:05:14.719
+Now, if I wanted to name something,
+
+00:05:14.720 --> 00:05:16.039
+or even the current weather,
+
+00:05:16.040 --> 00:05:20.399
+I have random tables with the `C` keystroke.
+
+00:05:20.400 --> 00:05:27.279
+Hmm, weather. Oh, it's summer, so hey,
+
+00:05:27.280 --> 00:05:31.959
+it's nice and clear. All right, let's play.
+
+NOTE Moves
+
+00:05:31.960 --> 00:05:34.239
+The action in Ironsworn,
+
+00:05:34.240 --> 00:05:37.039
+like other Powered by the Apocalypse games,
+
+00:05:37.040 --> 00:05:44.359
+is driven by moves. So, I hit the `m` key,
+
+00:05:44.360 --> 00:05:46.879
+and all the moves show up.
+
+00:05:46.880 --> 00:05:49.479
+Now, I don't think I need to espouse
+
+00:05:49.480 --> 00:05:52.679
+the virtues of completing-read enhancements like Ivy.
+
+00:05:52.680 --> 00:05:55.559
+Here, I'm using orderless with vertico
+
+00:05:55.560 --> 00:05:57.719
+to help me find my choices.
+
+00:05:57.720 --> 00:06:03.639
+Since I've discovered a site, let's play that move.
+
+NOTE Reference
+
+00:06:03.640 --> 00:06:06.479
+I seldom remember the details for the moves,
+
+00:06:06.480 --> 00:06:09.159
+so I figured, why not put the text of the book
+
+00:06:09.160 --> 00:06:11.799
+in an Org file and show it in a side window?
+
+00:06:11.800 --> 00:06:15.439
+The prompt at the bottom, asking for a name,
+
+00:06:15.440 --> 00:06:18.199
+is driven by the content in the displayed Org file.
+
+00:06:18.200 --> 00:06:21.119
+This allows me to enhance my game without
+
+00:06:21.120 --> 00:06:25.159
+changing the original code. So, let's call this story arc,
+
+00:06:25.160 --> 00:06:31.839
+Exploring the Catacombs of Svala's Blood.
+
+00:06:31.840 --> 00:06:34.679
+Ooh, sounds epic.
+
+NOTE Story arcs
+
+00:06:34.680 --> 00:06:37.239
+Ironsworn tracks the beats of a narrative,
+
+00:06:37.240 --> 00:06:40.799
+so major plot points take up more room in the fiction
+
+00:06:40.800 --> 00:06:42.759
+than minor plot points.
+
+00:06:42.760 --> 00:06:45.039
+Similar games like Blades in the Dark
+
+00:06:45.040 --> 00:06:48.199
+use numbers to track these, so you can say something like,
+
+00:06:48.200 --> 00:06:51.079
+we're three quarters of the way through this story arc.
+
+00:06:51.080 --> 00:06:53.119
+Ironsworn just uses labels,
+
+00:06:53.120 --> 00:06:55.839
+and while I want this particular story arc
+
+00:06:55.840 --> 00:06:59.519
+to be significant, I really just want to get in,
+
+00:06:59.520 --> 00:07:00.959
+find this person, and get out.
+
+00:07:00.960 --> 00:07:04.039
+So, I'm going to call this "short".
+
+00:07:04.040 --> 00:07:09.279
+Next, it's asking about an Org mode header placement.
+
+00:07:09.280 --> 00:07:12.199
+While I originally wanted my Org files
+
+00:07:12.200 --> 00:07:13.799
+to be completely flexible,
+
+00:07:13.800 --> 00:07:15.919
+one thing I noticed in playing
+
+00:07:15.920 --> 00:07:17.999
+is that a pattern always emerged.
+
+00:07:18.000 --> 00:07:22.639
+The story became a tree. You see, story arcs
+
+00:07:22.640 --> 00:07:25.559
+were just a series of montages or scenes,
+
+00:07:25.560 --> 00:07:27.919
+and each of those were made of a series of events
+
+00:07:27.920 --> 00:07:29.119
+and challenges to overcome.
+
+00:07:29.120 --> 00:07:32.799
+So, each Org mode header has a track,
+
+00:07:32.800 --> 00:07:35.719
+which often becomes the number of subheadings.
+
+00:07:35.720 --> 00:07:40.639
+At any point, I can see how much track is being made.
+
+00:07:40.640 --> 00:07:47.239
+So, for instance, this one seems to be
+
+00:07:47.240 --> 00:07:48.679
+about a third of the way through.
+
+NOTE Using different stats
+
+00:07:48.680 --> 00:07:52.599
+So, let's dive into this ancient place.
+
+00:07:52.600 --> 00:07:55.719
+Since I've been walking through a misty forest,
+
+00:07:55.720 --> 00:07:59.319
+I can imagine vines hiding an immense door
+
+00:07:59.320 --> 00:08:01.959
+and a humid, earthy smell as I peer inside.
+
+00:08:01.960 --> 00:08:04.319
+But I don't have to write that stuff down,
+
+00:08:04.320 --> 00:08:06.919
+or if I want to practice my writing, I can.
+
+00:08:06.920 --> 00:08:09.359
+I can imagine the place is dark,
+
+00:08:09.360 --> 00:08:10.839
+so Tegan lights a torch
+
+00:08:10.840 --> 00:08:13.039
+before peering into this obscure world.
+
+00:08:13.040 --> 00:08:15.799
+As this move mentions,
+
+00:08:15.800 --> 00:08:20.279
+the next move to make is called Delve the Depths.
+
+00:08:20.280 --> 00:08:26.159
+As soon as I select this move,
+
+00:08:26.160 --> 00:08:31.319
+it shows up on the side window, and explains that,
+
+00:08:31.320 --> 00:08:34.399
+depending on how you're moving through
+
+00:08:34.400 --> 00:08:36.239
+this ancient catacombs,
+
+00:08:36.240 --> 00:08:38.759
+is what kind of stat I roll against,
+
+00:08:38.760 --> 00:08:41.039
+and those stats show up at the bottom.
+
+00:08:41.040 --> 00:08:45.479
+You know, if I'm sneaking around, you roll against "shadow".
+
+00:08:45.480 --> 00:08:47.719
+If you're trying to go as fast as you can, it's "edge".
+
+00:08:47.720 --> 00:08:51.679
+But I kind of imagine that he's thinking through,
+
+00:08:51.680 --> 00:08:53.679
+being very careful about it.
+
+00:08:53.680 --> 00:08:55.759
+So, I'm going to select "wits".
+
+00:08:55.760 --> 00:08:57.719
+And I don't have any modifiers.
+
+00:08:57.720 --> 00:08:59.559
+Just about every one of my stats prompts me
+
+00:08:59.560 --> 00:09:02.959
+if I want to add or subtract any values.
+
+NOTE Dice rolls
+
+00:09:02.960 --> 00:09:09.879
+A miss. I should explain how the dice roll in this game.
+
+00:09:09.880 --> 00:09:13.399
+The downside to Ironsworn is that
+
+00:09:13.400 --> 00:09:16.839
+the dice mechanics are more cumbersome than other games.
+
+00:09:16.840 --> 00:09:20.199
+You roll a 6-sided die, add to it your relevant stat,
+
+00:09:20.200 --> 00:09:24.599
+plus any modifiers. Next, you roll two 10-sided die
+
+00:09:24.600 --> 00:09:25.799
+and see how it compares.
+
+00:09:25.800 --> 00:09:28.679
+Of course, I programmed this in Lisp,
+
+00:09:28.680 --> 00:09:31.599
+but when I displayed it, I wanted to see all the dice.
+
+00:09:31.600 --> 00:09:34.799
+And I also just wanted to see the end results.
+
+NOTE Dangers
+
+00:09:34.800 --> 00:09:37.479
+So I colored it. I rolled a miss,
+
+00:09:37.480 --> 00:09:39.799
+which means I need to reveal a danger.
+
+00:09:39.800 --> 00:09:43.519
+Sure, I could imagine all sorts of dangers,
+
+00:09:43.520 --> 00:09:44.359
+but this is a game.
+
+00:09:44.360 --> 00:09:48.359
+I've already made a random generator for dangers.
+
+00:09:48.360 --> 00:09:51.719
+In fact, I've made a random generator
+
+00:09:51.720 --> 00:09:55.479
+for dangers in an ancient underkeep.
+
+00:09:55.480 --> 00:10:00.879
+Discovery undermines or complicates the quest.
+
+00:10:00.880 --> 00:10:09.719
+Hmm, a complication for finding the chief's son?
+
+00:10:09.720 --> 00:10:13.319
+What about a labyrinth full of hallways and levels
+
+00:10:13.320 --> 00:10:16.599
+with lots of choices and almost no way of finding them?
+
+00:10:16.600 --> 00:10:19.679
+Yeah, that sounds like it fits pretty well.
+
+NOTE A strong success
+
+00:10:19.680 --> 00:10:26.959
+Time for another move. This time, we're going to
+
+00:10:26.960 --> 00:10:28.799
+gather information,
+
+00:10:28.800 --> 00:10:32.279
+see if we can figure out which way to go.
+
+00:10:32.280 --> 00:10:34.719
+A strong hit. Excellent.
+
+00:10:34.720 --> 00:10:38.399
+I imagine Tegan noticing footprints in the dust
+
+00:10:38.400 --> 00:10:40.439
+and knowing where to go.
+
+00:10:40.440 --> 00:10:44.319
+The game suggests that when you get a strong success,
+
+00:10:44.320 --> 00:10:45.799
+you can increase your momentum.
+
+00:10:45.800 --> 00:10:48.879
+These game mechanics
+
+00:10:48.880 --> 00:10:51.754
+come into play later, but this function here
+
+00:10:51.755 --> 00:10:57.880
+allows me to adjust that stat +2.
+
+00:10:57.881 --> 00:11:01.460
+I don't even have to scroll to the top of the buffer
+
+00:11:01.461 --> 00:11:04.820
+and edit that value in my properties.
+
+00:11:04.821 --> 00:11:08.159
+At any point, I can take a look at those stats
+
+00:11:08.160 --> 00:11:10.439
+and see how they measure up.
+
+00:11:10.440 --> 00:11:13.159
+Again, I don't have to scroll up
+
+00:11:13.160 --> 00:11:14.879
+and take a look at my properties
+
+00:11:14.880 --> 00:11:16.559
+at the top of the Org mode file.
+
+00:11:16.560 --> 00:11:19.239
+That's how I play the game.
+
+00:11:19.240 --> 00:11:24.639
+It's just a recursive loop of playing a move,
+
+00:11:24.640 --> 00:11:27.319
+rolling some dice to see how it works,
+
+00:11:27.320 --> 00:11:30.159
+trying to answer the question
+
+00:11:30.160 --> 00:11:33.679
+based on your own imagination or random tables,
+
+00:11:33.680 --> 00:11:35.599
+which the game calls oracles,
+
+00:11:35.600 --> 00:11:41.199
+and play creatively until you decide to take a break
+
+00:11:41.200 --> 00:11:42.399
+and pick it up another time.
+
+00:11:42.400 --> 00:11:46.999
+I think you get the gist of how I play
+
+00:11:47.000 --> 00:11:49.679
+this dice and pencil game in Org Mode.
+
+NOTE Other solo RPGs
+
+00:11:49.680 --> 00:11:54.039
+However, I found more solo RPGs to play.
+
+00:11:54.040 --> 00:11:57.319
+And of course, I want to render them in Emacs too.
+
+00:11:57.320 --> 00:12:00.799
+This code for Ironsworn was a bit too specific,
+
+00:12:00.800 --> 00:12:04.759
+so I decided to create a role-playing game toolkit.
+
+00:12:04.760 --> 00:12:09.599
+This project is still in the early stages,
+
+00:12:09.600 --> 00:12:12.199
+but I've created some functions
+
+00:12:12.200 --> 00:12:16.719
+for mimicking rolling dice, including a mini-DSL for
+
+00:12:16.720 --> 00:12:19.799
+making dice mechanics
+
+00:12:19.800 --> 00:12:22.839
+typical of many role-playing game systems.
+
+00:12:22.840 --> 00:12:26.519
+I've also ported over the random table system.
+
+00:12:26.520 --> 00:12:30.479
+A text file can just list entries to be displayed at random.
+
+00:12:30.480 --> 00:12:33.959
+I love that I can put dice expression
+
+00:12:33.960 --> 00:12:35.799
+and word choices in the entries.
+
+00:12:35.800 --> 00:12:39.439
+One type of random table allows you
+
+00:12:39.440 --> 00:12:41.559
+to essentially copy and paste a table
+
+00:12:41.560 --> 00:12:43.799
+from a published game into a text file.
+
+00:12:43.800 --> 00:12:47.879
+A frequency table is what I'm calling
+
+00:12:47.880 --> 00:12:50.879
+a list of random entries where some entries show up
+
+00:12:50.880 --> 00:12:55.959
+more often than others. I'm working on generalizing
+
+00:12:55.960 --> 00:12:59.959
+the character sheet attributes as Org properties,
+
+00:12:59.960 --> 00:13:04.719
+so if you're interested, check out the project at Codeberg.
+
+NOTE Conclusion
+
+00:13:04.720 --> 00:13:10.359
+The point of my presentation is not to show off Ironsworn,
+
+00:13:10.360 --> 00:13:14.079
+how I programmed it, or even this new toolkit.
+
+00:13:14.080 --> 00:13:17.559
+You see, most engineers,
+
+00:13:17.560 --> 00:13:20.479
+when they get an idea for a game like mine,
+
+00:13:20.480 --> 00:13:24.079
+would make a web app. Nothing wrong with it.
+
+00:13:24.080 --> 00:13:25.959
+More people can play it,
+
+00:13:25.960 --> 00:13:28.199
+but web apps suffer from text entry.
+
+00:13:28.200 --> 00:13:30.959
+And don't tell me you prefer the keyboard interface
+
+00:13:30.960 --> 00:13:35.959
+to Google Docs. Oh, and the JavaScript framework du jour?
+
+00:13:35.960 --> 00:13:40.399
+Oh, I mean, that's a huge barrier of entry
+
+00:13:40.400 --> 00:13:42.039
+when all you want to do
+
+00:13:42.040 --> 00:13:44.359
+is have a bit of fun prototyping a game.
+
+00:13:44.360 --> 00:13:48.479
+What I'd like to impress upon you
+
+00:13:48.480 --> 00:13:53.999
+is that hacking Emacs to make personal games is a trip.
+
+00:13:54.000 --> 00:13:57.359
+Learning Lisp is, it's easy.
+
+00:13:57.360 --> 00:14:00.919
+And more, Emacs Lisp has some, well sure,
+
+00:14:00.920 --> 00:14:04.519
+it has some cruft. But really, some of those features
+
+00:14:04.520 --> 00:14:07.599
+that I would hate at a distributed system at work,
+
+00:14:07.600 --> 00:14:10.919
+like global variables, makes hacking easier
+
+00:14:10.920 --> 00:14:14.719
+when you just want to have some fun in your own system.
+
+00:14:14.720 --> 00:14:19.599
+So, grab your laptop, sink into your comfy chair,
+
+00:14:19.600 --> 00:14:21.599
+pour yourself a glass of scotch,
+
+00:14:21.600 --> 00:14:24.719
+and craft yourself an enjoyable evening.
+
+00:14:24.720 --> 00:14:35.920
+Happy hacking, my friends.
diff --git a/2023/captions/emacsconf-2023-steno--programming-with-steno--daniel-alejandro-tapia--main.vtt b/2023/captions/emacsconf-2023-steno--programming-with-steno--daniel-alejandro-tapia--main.vtt
new file mode 100644
index 00000000..c3f0d9a2
--- /dev/null
+++ b/2023/captions/emacsconf-2023-steno--programming-with-steno--daniel-alejandro-tapia--main.vtt
@@ -0,0 +1,1033 @@
+WEBVTT captioned by Daniel Alejandro Tapia
+
+00:00:00.660 --> 00:00:03.839
+Stenotypy is a system of typing
+
+00:00:03.840 --> 00:00:07.339
+where you press multiple keys at the same time,
+
+00:00:07.340 --> 00:00:13.359
+letting you send more than one letter at a time.
+
+00:00:13.360 --> 00:00:16.939
+This is a video from the 1920s.
+
+00:00:16.940 --> 00:00:23.059
+The man is holding a stenotype, a device used for stenotypy.
+
+00:00:23.060 --> 00:00:26.359
+This particular one is called Grandjean.
+
+00:00:26.360 --> 00:00:30.067
+It's made for the French language.
+
+00:00:30.068 --> 00:00:31.739
+In this demonstration,
+
+00:00:31.740 --> 00:00:34.899
+the man is going to be dictating a passage,
+
+00:00:34.900 --> 00:00:38.759
+first, slowly and then quickly.
+
+00:00:38.760 --> 00:00:42.419
+The lady on the left doesn't have trouble keeping up.
+
+00:00:42.420 --> 00:00:44.859
+She's using stenotypy.
+
+00:00:44.860 --> 00:00:48.319
+The lady on the right is a good typist,
+
+00:00:48.320 --> 00:01:13.299
+but she can't keep up when the dictation gets faster.
+
+00:01:13.300 --> 00:01:16.019
+I'm nowhere near as fast as this lady.
+
+00:01:16.020 --> 00:01:18.779
+She's extremely skilled.
+
+00:01:18.780 --> 00:01:24.539
+I'm not even a tenth of what she is.
+
+00:01:24.540 --> 00:01:28.399
+I don't use Grandjean, I use Melani,
+
+00:01:28.400 --> 00:01:33.319
+which is a system for Castilian and Italian.
+
+00:01:33.320 --> 00:01:39.539
+If I want to make the word solo, I press S, O, L,
+
+00:01:39.540 --> 00:01:43.319
+which is made by two keys, and O.
+
+00:01:43.320 --> 00:01:45.599
+Here's what that looks like.
+
+00:01:45.600 --> 00:01:50.799
+The hyphen between S and O means that
+
+00:01:50.800 --> 00:01:52.519
+the S is on the left side,
+
+00:01:52.520 --> 00:01:57.039
+and the rest of the letters are on the right side.
+
+00:01:57.040 --> 00:01:59.999
+If I want to write the word sólo,
+
+00:02:00.000 --> 00:02:02.439
+which is just like the previous word,
+
+00:02:02.440 --> 00:02:05.479
+but with the first O accented,
+
+00:02:05.480 --> 00:02:08.259
+I would press the asterisk key.
+
+00:02:08.260 --> 00:02:11.959
+In Melani, the asterisk is used
+
+00:02:11.960 --> 00:02:20.299
+to put an accent on a letter.
+
+00:02:20.300 --> 00:02:22.039
+If you speak English,
+
+00:02:22.040 --> 00:02:25.039
+then you would likely use the Ireland system.
+
+00:02:25.040 --> 00:02:28.779
+S-E-T makes the word set.
+
+00:02:28.780 --> 00:02:32.379
+In Ireland, you can make a long vowel sound
+
+00:02:32.380 --> 00:02:34.259
+by pressing the two thumb keys
+
+00:02:34.260 --> 00:02:41.699
+on the other side of the vowel you want to make long.
+
+00:02:41.700 --> 00:02:44.120
+S-long-E-T makes the word seat.
+
+00:02:50.200 --> 00:02:52.659
+This is me programming.
+
+00:02:52.660 --> 00:02:56.480
+After a few lines, I'll explain what's going on.
+
+00:03:19.580 --> 00:03:23.379
+In GNU Emacs, you can create abbreviations
+
+00:03:23.380 --> 00:03:25.539
+that expand to strings.
+
+00:03:25.540 --> 00:03:31.359
+For example, you can create an abbrev, like btwx,
+
+00:03:31.360 --> 00:03:33.979
+that will expand to "by the way"
+
+00:03:33.980 --> 00:03:40.359
+when you succeed btwx with a space or some punctuation.
+
+00:03:40.360 --> 00:03:42.439
+Here that's what I'm doing.
+
+00:03:42.440 --> 00:03:48.139
+I type d and then emacs, which expands to this.
+
+00:03:48.140 --> 00:03:50.659
+But this is a different kind of expansion
+
+00:03:50.660 --> 00:03:54.339
+from a simple string like by the way.
+
+00:03:54.340 --> 00:03:56.639
+This one has structure.
+
+00:03:56.640 --> 00:04:00.679
+It has interesting points that I can jump to.
+
+00:04:00.680 --> 00:04:01.919
+It's called a skeleton.
+
+00:04:03.740 --> 00:04:05.939
+This is the skeleton.
+
+00:04:05.940 --> 00:04:10.559
+The part that I want you to focus on is the @ symbols.
+
+00:04:10.560 --> 00:04:15.739
+Those are the interesting points that I jump to.
+
+00:04:15.740 --> 00:04:18.259
+So, at one interesting point,
+
+00:04:18.260 --> 00:04:20.699
+I can write the name of the function,
+
+00:04:20.700 --> 00:04:24.359
+at another interesting point, the arguments
+
+00:04:24.360 --> 00:04:28.619
+if the function will need them, the doc string,
+
+00:04:28.620 --> 00:04:31.799
+and finally the body.
+
+00:04:31.800 --> 00:04:34.939
+When I get to the body, I use stenotypy
+
+00:04:34.940 --> 00:04:39.059
+to write the words of the functions I'm looking for.
+
+00:04:39.060 --> 00:04:41.639
+Then I call a completion framework
+
+00:04:41.640 --> 00:04:45.059
+to choose from a list of candidates.
+
+00:04:45.060 --> 00:04:47.859
+This completion framework doesn't care
+
+00:04:47.860 --> 00:04:52.519
+what order the words are in or how many words I use.
+
+00:04:52.520 --> 00:04:56.219
+This completion framework is called Corfu,
+
+00:04:56.220 --> 00:05:00.459
+which stands for COmpletion in Region FUnction.
+
+00:05:00.460 --> 00:05:03.279
+And I'm using a package called Orderless
+
+00:05:03.280 --> 00:05:04.439
+to make it stronger.
+
+00:05:51.460 --> 00:05:57.199
+Here, I use another skeleton, the same one as before.
+
+00:05:57.200 --> 00:06:00.879
+This time, it has an argument.
+
+00:06:00.880 --> 00:06:07.239
+Then, when I get to the body, I write another skeleton,
+
+00:06:07.240 --> 00:06:12.359
+one that has an interesting point between the quotes
+
+00:06:12.360 --> 00:06:14.919
+and creates a new line
+
+00:06:14.920 --> 00:06:17.499
+right underneath it.
+
+00:06:17.500 --> 00:06:20.319
+I typed i and then emacs,
+
+00:06:20.320 --> 00:06:22.359
+and I got the interactive skeleton.
+
+00:07:16.120 --> 00:07:18.899
+Now, I use another skeleton,
+
+00:07:18.900 --> 00:07:20.479
+but these ones differ
+
+00:07:20.480 --> 00:07:23.039
+because it prompts me for a string,
+
+00:07:23.040 --> 00:07:27.299
+and I can make the skeleton as long as I want.
+
+00:07:27.300 --> 00:07:29.799
+If I keep entering text in the prompt,
+
+00:07:29.800 --> 00:07:33.839
+then Emacs will keep making the skeleton bigger.
+
+00:07:33.840 --> 00:07:37.999
+When I enter an empty string, it knows to stop asking,
+
+00:07:38.000 --> 00:07:39.999
+and it sends me to the point
+
+00:07:40.000 --> 00:07:44.619
+I've designated to go to when a skeleton is created.
+
+00:07:44.620 --> 00:07:46.439
+That's what the underscore means.
+
+00:07:48.260 --> 00:07:54.119
+I type c and then Emacs, and I get the condition skeleton.
+
+00:07:54.120 --> 00:08:00.059
+And then I use Corfu and Orderless to program.
+
+00:08:00.060 --> 00:08:03.819
+On two functions, I use a dabbrev.
+
+00:08:03.820 --> 00:08:09.499
+A dabbrev is a dynamic abbreviation.
+
+00:08:09.500 --> 00:08:11.439
+Here's how it works.
+
+00:08:11.440 --> 00:08:12.899
+If I have three strings
+
+00:08:12.900 --> 00:08:17.819
+that begin with S-T, string, strawberry, and stop,
+
+00:08:17.820 --> 00:08:22.179
+I can write S-T and then call dabbrev expand.
+
+00:08:22.180 --> 00:08:24.379
+First, this will give me stop
+
+00:08:24.380 --> 00:08:27.119
+because I'm nearest to the word stop.
+
+00:08:27.120 --> 00:08:30.499
+Then when I call it again, I'll get strawberry.
+
+00:08:30.500 --> 00:08:35.459
+And if I call it a third time, I'll get string.
+
+00:08:35.460 --> 00:08:40.139
+If I start off with S-T-R, then I'll get strawberry first
+
+00:08:40.140 --> 00:08:42.279
+and then string.
+
+00:08:42.280 --> 00:08:45.999
+I used dabbrev twice in this function.
+
+00:08:46.000 --> 00:08:48.079
+If you read the top of the screen,
+
+00:08:48.080 --> 00:08:52.000
+you can see which commands I use and how I invoke them.
+
+00:09:00.240 --> 00:09:03.119
+Finally, I use one last skeleton
+
+00:09:03.120 --> 00:09:07.039
+to map the function I just wrote to a hotkey.
+
+00:09:07.040 --> 00:09:09.500
+In this case, C-o.
+
+00:09:15.580 --> 00:09:19.219
+Here we can see what the function I just wrote does.
+
+00:09:19.220 --> 00:09:22.239
+It opens a line with the line below indented
+
+00:09:22.240 --> 00:09:23.800
+if it isn't blank.
+
+00:09:23.801 --> 00:09:29.039
+I've kept the old behavior with an argument of zero
+
+00:09:29.040 --> 00:09:33.599
+and done something for when I use a negative argument.
+
+00:09:33.600 --> 00:09:36.899
+You can see the interesting points.
+
+00:09:36.900 --> 00:09:40.980
+I could jump to any of them or cycle through them.
+
+00:09:50.000 --> 00:09:54.619
+I normally use a 9-to-16 setup.
+
+00:09:54.620 --> 00:09:58.119
+To me, Emacs, and computing in general,
+
+00:09:58.120 --> 00:10:00.880
+is much more pleasant to use that way.
+
+00:10:07.680 --> 00:10:09.620
+When I stenotype a word,
+
+00:10:10.000 --> 00:10:14.179
+a space is sent immediately afterwards.
+
+00:10:14.180 --> 00:10:17.799
+Orderless treats spaces as delimiters.
+
+00:10:17.800 --> 00:10:19.379
+This is very helpful
+
+00:10:19.380 --> 00:10:23.459
+because I can enter commands with stenotypy,
+
+00:10:23.460 --> 00:10:25.219
+without having to worry about
+
+00:10:25.220 --> 00:10:27.060
+whether words are in the right order.
+
+00:10:29.320 --> 00:10:34.219
+Lem, spelled L-E-M, is another Emacs.
+
+00:10:34.220 --> 00:10:35.900
+It's extremely powerful.
+
+00:10:35.901 --> 00:10:40.060
+But Lem doesn't have skeletons, not yet at least.
+
+00:10:40.061 --> 00:10:40.359
+So I'm going to program the traditional way.
+
+00:10:43.740 --> 00:10:47.580
+Nothing fancy, just left-to-right programming.
+
+00:11:38.800 --> 00:11:41.520
+With Plover, you have dictionaries.
+
+00:11:41.521 --> 00:11:44.860
+I added Fibonacci to my dictionary.
+
+00:11:44.861 --> 00:11:47.939
+I made my own dictionary from scratch.
+
+00:11:47.940 --> 00:11:49.780
+But if you don't want to do that,
+
+00:11:49.781 --> 00:11:52.260
+there are free dictionaries available
+
+00:11:52.261 --> 00:11:55.120
+that have many words already in them,
+
+00:11:55.121 --> 00:11:56.720
+saving you lots of time.
+
+00:11:56.721 --> 00:12:00.279
+The reason I made my dictionary from scratch
+
+00:12:00.280 --> 00:12:03.559
+is because I wanted to know my system inside and out.
+
+00:12:03.560 --> 00:12:07.960
+On one stroke, I typed T.
+
+00:12:07.961 --> 00:12:12.740
+And, on the next stroke, I stenotyped coalton.
+
+00:12:12.741 --> 00:12:16.460
+And then I got (coalton-toplevel and a new line.
+
+00:12:16.461 --> 00:12:19.519
+It's similar to what I did in GNU Emacs
+
+00:12:19.520 --> 00:12:22.579
+when I expanded a skeleton.
+
+00:12:22.580 --> 00:12:25.179
+This is actually not stenotypy,
+
+00:12:25.180 --> 00:12:29.820
+but a different kind of steno, known as serial steno.
+
+00:12:29.821 --> 00:12:32.940
+Plover is capable of this as well.
+
+00:12:32.941 --> 00:12:36.840
+Here are some things that Plover can do.
+
+00:12:36.841 --> 00:12:38.920
+Plover can glue words,
+
+00:12:38.921 --> 00:12:41.460
+like if you need to make a compound word.
+
+00:12:41.461 --> 00:12:44.360
+It can break a compound word.
+
+00:12:44.361 --> 00:12:48.060
+You can press keys to turn off Plover
+
+00:12:48.061 --> 00:12:50.120
+or to turn it back on.
+
+00:12:50.121 --> 00:12:52.720
+You can case words the way you want,
+
+00:12:52.721 --> 00:12:55.760
+uppercase, lowercase, capitalize.
+
+00:12:55.761 --> 00:12:58.820
+You can change your stenotype layout,
+
+00:12:58.821 --> 00:13:02.380
+like, say, if you want to use Grandjean for French,
+
+00:13:02.381 --> 00:13:06.379
+Melani for Castilian, and Ireland for English.
+
+00:13:06.380 --> 00:13:08.020
+All of that's possible.
+
+00:13:10.480 --> 00:13:14.619
+Here I should note that I'm using a Plover plugin
+
+00:13:14.620 --> 00:13:17.520
+called Full Keyboard Steno.
+
+00:13:17.521 --> 00:13:22.180
+It makes my entire keyboard into a stenotype.
+
+00:13:26.800 --> 00:13:30.700
+Lem also has a completion feature built in.
+
+00:13:30.701 --> 00:13:35.100
+But I didn't need it for the code that I wrote.
+
+00:13:35.101 --> 00:13:37.900
+It's quite good.
+
+00:13:38.720 --> 00:13:42.280
+In summary, if you add in the symbols
+
+00:13:42.281 --> 00:13:45.120
+that you're going to need when you're programming,
+
+00:13:45.121 --> 00:13:46.440
+you'll be fine.
+
+00:13:46.441 --> 00:13:48.620
+Even without skeletons,
+
+00:13:48.621 --> 00:13:51.400
+Plover is nice to use for programming.
+
+00:14:00.920 --> 00:14:05.620
+The search tool is the primary way of navigating in Emacs.
+
+00:14:05.621 --> 00:14:08.040
+Every Emacser can be measured
+
+00:14:08.041 --> 00:14:11.639
+by their skill with the search tool.
+
+00:14:11.640 --> 00:14:14.820
+C-s begins a forward search.
+
+00:14:14.821 --> 00:14:17.880
+The s stands for search.
+
+00:14:18.420 --> 00:14:20.740
+I'm reading Aesop's Fables,
+
+00:14:20.741 --> 00:14:23.640
+and I want to look for the word fox.
+
+00:14:23.641 --> 00:14:28.200
+So I press C-s and type fox.
+
+00:14:28.201 --> 00:14:31.599
+If I want to go back to the beginning of the word fox,
+
+00:14:31.600 --> 00:14:37.500
+I press C-r, which stands for reverse search.
+
+00:14:37.501 --> 00:14:42.320
+With Stenotypy, spaces are added to the end of words,
+
+00:14:42.740 --> 00:14:45.520
+so sometimes that causes problems.
+
+00:14:49.060 --> 00:14:52.120
+We can remedy that by changing the way
+
+00:14:52.121 --> 00:14:54.880
+Emacs interprets our whitespace.
+
+00:14:55.360 --> 00:14:57.960
+When I press C-M-s [alt control s],
+
+00:14:57.961 --> 00:15:01.300
+whitespace is interpreted as a wildcard.
+
+00:15:01.301 --> 00:15:04.159
+It's a function I made myself.
+
+00:15:04.160 --> 00:15:09.159
+fox mask will take me to the fox and the mask.
+
+00:15:09.160 --> 00:15:12.180
+The whitespace is a wildcard.
+
+00:15:12.181 --> 00:15:16.760
+For me, Ctrl-s makes the whitespace literal.
+
+00:15:16.761 --> 00:15:20.539
+I like having both options available to me:
+
+00:15:20.540 --> 00:15:25.219
+literal whitespace and wildcard whitespace.
+
+00:15:29.420 --> 00:15:32.180
+Say I want to find the cat and the fox,
+
+00:15:32.620 --> 00:15:34.859
+one of my favorite fables.
+
+00:15:34.860 --> 00:15:39.419
+I write cat fox, but I don't get what I want.
+
+00:15:39.420 --> 00:15:42.119
+I've written a function that reverses
+
+00:15:42.120 --> 00:15:44.739
+the order of my search query.
+
+00:15:45.260 --> 00:15:47.179
+Now I get what I want.
+
+00:15:47.880 --> 00:15:50.939
+Searching like this is very convenient.
+
+00:15:55.340 --> 00:15:58.539
+In Lem, we can do something similar.
+
+00:15:58.540 --> 00:16:01.419
+I want to read The Fox and the Lion.
+
+00:16:01.420 --> 00:16:08.379
+I search for Lion Fox. Notice those words are capitalized.
+
+00:16:08.380 --> 00:16:11.780
+Now I'm going to transform the last two words
+
+00:16:11.781 --> 00:16:14.299
+into a regular expression
+
+00:16:14.300 --> 00:16:18.479
+so that the order doesn't matter.
+
+00:16:18.480 --> 00:16:21.859
+And now I can find the fable I'm looking for.
+
+00:16:27.220 --> 00:16:31.899
+I did this with a plugin called Retro Stringop,
+
+00:16:31.900 --> 00:16:34.259
+op meaning operation.
+
+00:16:34.260 --> 00:16:40.059
+I can perform any operation on the last n words.
+
+00:16:40.060 --> 00:16:42.319
+Let's look at that.
+
+00:16:42.320 --> 00:16:44.699
+The 2 means that I want to do something
+
+00:16:44.700 --> 00:16:46.939
+to the last two words.
+
+00:16:46.940 --> 00:16:50.899
+The operation I'm performing is Python code.
+
+00:16:50.900 --> 00:16:54.059
+To be honest, I don't know any Python,
+
+00:16:54.060 --> 00:16:57.619
+but string manipulation is easy to understand.
+
+00:16:57.620 --> 00:17:01.700
+If you do know Python, then you can make your own plugins
+
+00:17:01.701 --> 00:17:04.939
+and even help with the development of Plover.
+
+00:17:07.820 --> 00:17:09.899
+A feature I like in Lem is that
+
+00:17:09.900 --> 00:17:15.779
+when you gracefully exit search with Enter or C-m,
+
+00:17:15.780 --> 00:17:18.499
+what you searched for is highlighted.
+
+00:17:18.500 --> 00:17:23.240
+You can cycle through the results, the highlights,
+
+00:17:23.241 --> 00:17:26.619
+and you can toggle the highlights on or off.
+
+00:17:30.160 --> 00:17:34.480
+1978, John Kulp designs a keyboard
+
+00:17:34.481 --> 00:17:37.179
+known as the Space Cadet Keyboard.
+
+00:17:37.180 --> 00:17:40.339
+This keyboard has many distinctive qualities,
+
+00:17:40.340 --> 00:17:44.419
+one being the modifiers, numbering seven in total:
+
+00:17:44.420 --> 00:17:51.139
+Shift, Control, Meta, Super, Hyper, Greek, and Top.
+
+00:17:51.900 --> 00:17:56.019
+This keyboard influences the development of Emacs.
+
+00:17:56.860 --> 00:18:02.659
+2000, designer Kiyoshi Kimura and programmer Yoji Hagia
+
+00:18:02.660 --> 00:18:07.399
+release SandS, a program that lets you turn your spacebar
+
+00:18:07.400 --> 00:18:09.659
+into a dual-function key,
+
+00:18:09.660 --> 00:18:11.499
+sending space on tap
+
+00:18:11.500 --> 00:18:15.139
+and acting as the Shift modifier on hold.
+
+00:18:16.220 --> 00:18:18.500
+This idea, the dual-function key,
+
+00:18:18.501 --> 00:18:21.379
+later revolutionizes typing.
+
+00:18:22.060 --> 00:18:25.640
+These two concepts, the space cadet modifiers
+
+00:18:25.641 --> 00:18:29.579
+and the dual-function key, can be combined.
+
+00:18:29.580 --> 00:18:32.439
+I use a program called Kanata
+
+00:18:32.440 --> 00:18:36.659
+to put all the modifiers on my homerow.
+
+00:18:36.660 --> 00:18:40.099
+When I tap the letter a, I get an a.
+
+00:18:40.100 --> 00:18:43.419
+If I hold it down for longer than 200 milliseconds,
+
+00:18:43.420 --> 00:18:46.739
+it acts as the Meta modifier,
+
+00:18:46.740 --> 00:18:48.059
+and really I can add
+
+00:18:48.060 --> 00:18:52.399
+as many layers to my keyboard as I want.
+
+00:18:52.400 --> 00:18:55.499
+I don't use a little stenotype.
+
+00:18:55.500 --> 00:18:59.139
+Thanks to Full Keyboard Steno, the Plover plugin,
+
+00:18:59.140 --> 00:19:02.019
+I use my whole keyboard.
+
+00:19:02.020 --> 00:19:05.439
+I have an alternative keyboard layout on it,
+
+00:19:05.440 --> 00:19:08.699
+so, even when I'm typing in the traditional way,
+
+00:19:08.700 --> 00:19:10.379
+it feels amazing.
+
+00:19:10.380 --> 00:19:15.699
+My layout is called Kuron, and I lay it over Melani
+
+00:19:15.700 --> 00:19:19.619
+so that I have both available to me at all times.
+
+00:19:19.620 --> 00:19:24.399
+I don't get them confused because I set them off
+
+00:19:24.400 --> 00:19:26.939
+with the way I press keys.
+
+00:19:26.940 --> 00:19:29.319
+If I press one key at a time,
+
+00:19:29.320 --> 00:19:32.419
+I'm using Kuron, my keyboard layout.
+
+00:19:32.420 --> 00:19:35.399
+If I press multiple keys at the same time
+
+00:19:35.400 --> 00:19:37.339
+and let them go quickly,
+
+00:19:37.340 --> 00:19:41.419
+then I'm using stenotypy, in my case Melani.
+
+00:19:41.420 --> 00:19:45.240
+And if I hold one key longer than 200 milliseconds,
+
+00:19:45.241 --> 00:19:51.339
+then I'm activating it as a modifier key or a layer key.
+
+00:19:51.340 --> 00:19:56.799
+I always know what state I'm in by the way I press my keys.
+
+00:19:56.800 --> 00:19:59.619
+It's impossible for me to get confused.
+
+00:20:03.800 --> 00:20:07.859
+Holding multiple modifiers is not a problem
+
+00:20:07.860 --> 00:20:13.439
+because the keycaps used for stenotypy are flat and square.
+
+00:20:13.440 --> 00:20:15.979
+Pressing two or more keys at once
+
+00:20:15.980 --> 00:20:18.899
+with the same finger is easy.
+
+00:20:18.900 --> 00:20:21.899
+Notice how close they are to each other.
+
+00:20:21.900 --> 00:20:25.659
+In stenotypy, the homerow is the border
+
+00:20:25.660 --> 00:20:28.139
+between the two rows of keys.
+
+00:20:28.560 --> 00:20:31.259
+It took me a while to get used to it,
+
+00:20:31.260 --> 00:20:35.259
+but now that I am used to it, I quite like it.
+
+00:20:35.640 --> 00:20:38.219
+So if I have to press a hotkey
+
+00:20:38.220 --> 00:20:43.979
+with all six modifiers, Shift, Control, Meta,
+
+00:20:43.980 --> 00:20:50.899
+Alt, Hyper, Super, it's easy.
+
+00:20:50.900 --> 00:20:54.659
+Thanks to Kanata, I have a Greek layer on my board.
+
+00:20:54.660 --> 00:20:58.799
+Additionally, I have alpha, beta, and gamma layers
+
+00:20:58.800 --> 00:21:03.319
+that send sequences of keys that I can use as hotkeys
+
+00:21:03.320 --> 00:21:06.539
+in both GNU Emacs and Lem.
+
+00:21:06.540 --> 00:21:10.419
+Maybe you noticed a few while I was programming.
+
+00:21:10.420 --> 00:21:12.959
+Now it's possible to bring the Space Cadet
+
+00:21:12.960 --> 00:21:17.219
+to any keyboard and to build on its wonderful ideas.
+
+00:21:20.920 --> 00:21:24.459
+Here I'll note that another Emacser, Excalamus,
+
+00:21:24.460 --> 00:21:27.539
+has made a page called Plover with Emacs,
+
+00:21:27.540 --> 00:21:30.639
+with information on how to use Emacs
+
+00:21:30.640 --> 00:21:32.539
+with the standard stenotype,
+
+00:21:32.540 --> 00:21:34.519
+the one that has two rows,
+
+00:21:34.520 --> 00:21:37.439
+the one I call a little stenotype.
+
+00:21:37.440 --> 00:21:39.599
+While I use my full keyboard,
+
+00:21:39.600 --> 00:21:43.199
+I understand how a small board can be useful.
+
+00:21:43.200 --> 00:21:46.159
+Finger movement is greatly reduced,
+
+00:21:46.160 --> 00:21:49.439
+leading to a very ergonomic typing experience.
+
+00:21:49.440 --> 00:21:53.239
+In fact, all of the speed records
+
+00:21:53.240 --> 00:21:57.239
+are set with this stenotype, the standard stenotype.
+
+00:21:58.840 --> 00:22:01.479
+There are many great ideas on this page.
+
+00:22:01.480 --> 00:22:04.319
+Thank you, Excalamus.
+
+00:22:06.800 --> 00:22:09.159
+Special thanks to Richard Stallman,
+
+00:22:09.160 --> 00:22:13.119
+the creator of GNU Emacs and the Free Software Foundation,
+
+00:22:13.420 --> 00:22:16.919
+Sasaki Ryosuke, first name Ryosuke,
+
+00:22:16.920 --> 00:22:19.599
+the creator and lead developer of Lem,
+
+00:22:20.120 --> 00:22:24.279
+Mirabai Knight, the creator of the Open Steno Project,
+
+00:22:24.280 --> 00:22:26.839
+which oversees the development of Plover,
+
+00:22:26.840 --> 00:22:31.159
+and jtroo, the creator and lead developer of Kanata.
+
+00:22:32.700 --> 00:22:36.999
+The views expressed in this talk are solely my own.
+
+00:22:37.000 --> 00:22:41.159
+I have no connection to any of the parties mentioned herein
+
+00:22:41.160 --> 00:22:43.479
+and therefore cannot be seen
+
+00:22:43.480 --> 00:22:45.359
+as representing them in any capacity.
+
+00:22:45.360 --> 00:22:49.199
+What I've said cannot be taken as medical advice.
+
+00:22:50.860 --> 00:22:54.759
+I used the TranSide theme for GNU Emacs in this talk.
+
+00:22:54.760 --> 00:22:57.199
+It's beautiful and functional.
+
+00:22:57.900 --> 00:23:01.639
+I love how the code looks, and I can read the comments.
+
+00:23:03.560 --> 00:23:05.759
+In Lem, I used Gruber.
+
+00:23:05.760 --> 00:23:10.399
+Again, the comments are readable, and the code looks nice.
+
+00:23:11.200 --> 00:23:13.839
+When I first started using Emacs,
+
+00:23:13.840 --> 00:23:16.199
+I used the Wheatgrass theme.
+
+00:23:19.980 --> 00:23:23.879
+Another theme that I love is os1.
+
+00:23:24.520 --> 00:23:28.239
+It's a light, warm, modern theme for Emacs
+
+00:23:28.240 --> 00:23:30.439
+inspired by film palettes.
+
+00:23:35.040 --> 00:23:38.499
+Regarding typography, for programming,
+
+00:23:38.500 --> 00:23:42.879
+I used JuliaMono, which was designed by Cormullion.
+
+00:23:43.520 --> 00:23:46.919
+It's extensive, and it's beautiful.
+
+00:23:48.000 --> 00:23:51.039
+For graphics, I used PromptFont,
+
+00:23:51.380 --> 00:23:53.959
+which was made by Yukari Hafner.
+
+00:23:54.840 --> 00:23:56.479
+She's very talented.
+
+00:23:56.480 --> 00:23:59.639
+I really like her work, including this font.
+
+00:24:01.180 --> 00:24:04.679
+There are so many packages that I love in Emacs.
+
+00:24:05.520 --> 00:24:07.639
+If I talked about all of them,
+
+00:24:07.640 --> 00:24:09.799
+my talk would last for days,
+
+00:24:09.800 --> 00:24:11.959
+so I'm only going to mention three.
+
+00:24:12.580 --> 00:24:14.079
+Keycast.
+
+00:24:14.400 --> 00:24:15.519
+At the top of the screen,
+
+00:24:15.520 --> 00:24:18.039
+you can see the commands I'm executing
+
+00:24:18.040 --> 00:24:20.559
+and how I'm invoking those commands.
+
+00:24:20.560 --> 00:24:21.919
+That's Keycast.
+
+00:24:21.920 --> 00:24:24.879
+Rainbow Delimiters is another one I like.
+
+00:24:25.540 --> 00:24:27.519
+It lets me know visually
+
+00:24:27.520 --> 00:24:29.919
+when my parentheses are out of balance.
+
+00:24:30.480 --> 00:24:33.199
+Very helpful when I'm programming in Lisp.
+
+00:24:35.900 --> 00:24:37.879
+Moodline is another.
+
+00:24:37.880 --> 00:24:42.899
+The modeline is where I can see relevant information
+
+00:24:42.900 --> 00:24:44.879
+about the file I'm working on.
+
+00:24:46.840 --> 00:24:50.759
+Moodline only gives me the information I want.
+
+00:24:50.760 --> 00:24:55.460
+I'm not really worried about too many things, just
+
+00:24:55.461 --> 00:25:07.160
+the file name, the mode I'm in, and where I am in the file.
diff --git a/2023/captions/emacsconf-2023-sun-open--sunday-opening-remarks--main.vtt b/2023/captions/emacsconf-2023-sun-open--sunday-opening-remarks--main.vtt
new file mode 100644
index 00000000..11cfd65f
--- /dev/null
+++ b/2023/captions/emacsconf-2023-sun-open--sunday-opening-remarks--main.vtt
@@ -0,0 +1,355 @@
+WEBVTT captioned by sachac, checked by sachac
+
+00:00:00.000 --> 00:00:04.519
+Welcome to the second day of EmacsConf 2023.
+
+00:00:04.520 --> 00:00:06.858
+There's a General track and a Development track,
+
+00:00:06.859 --> 00:00:08.437
+but really, you'll probably find
+
+00:00:08.438 --> 00:00:10.156
+interesting things on both tracks
+
+00:00:10.157 --> 00:00:12.695
+no matter what your level of experience is,
+
+00:00:12.696 --> 00:00:15.354
+so don't feel limited to one or the other.
+
+00:00:15.355 --> 00:00:17.093
+Please note that the hyperdrive talk
+
+00:00:17.094 --> 00:00:21.172
+(titled "hyperdrive.el: Peer-to-peer filesystem in Emacs")
+
+00:00:21.173 --> 00:00:23.491
+on the Development track in the afternoon
+
+00:00:23.492 --> 00:00:25.231
+is actually a general-audience talk,
+
+00:00:25.232 --> 00:00:28.091
+I just didn't have space elsewhere in the schedule.
+
+00:00:28.092 --> 00:00:31.330
+The best parts of EmacsConf are the conversations.
+
+00:00:31.331 --> 00:00:34.089
+The wiki has a page on how to watch and participate,
+
+00:00:34.090 --> 00:00:36.868
+and I'll give you a quick overview as well.
+
+00:00:36.869 --> 00:00:40.347
+You can watch both streams at live.emacsconf.org
+
+00:00:40.348 --> 00:00:43.226
+using free and open source software.
+
+00:00:43.227 --> 00:00:45.645
+Using a streaming media player like mpv
+
+00:00:45.646 --> 00:00:49.044
+seems to be the best way to watch in terms of performance
+
+00:00:49.045 --> 00:00:50.643
+but there are also web-based players
+
+00:00:50.644 --> 00:00:53.122
+just in case that's all you've got.
+
+00:00:53.123 --> 00:00:55.121
+The schedule shows the General track on top
+
+00:00:55.122 --> 00:00:56.800
+and the Development track on the bottom,
+
+00:00:56.801 --> 00:00:59.419
+so you can see what else is going on.
+
+00:00:59.420 --> 00:01:00.618
+As you're watching the talks,
+
+00:01:00.619 --> 00:01:03.517
+you can refer to the schedule in another window.
+
+00:01:03.518 --> 00:01:06.536
+Hover over the boxes to see the times and titles,
+
+00:01:06.537 --> 00:01:08.435
+and click on the boxes in the schedule
+
+00:01:08.436 --> 00:01:11.214
+to jump to the talk's page for more details.
+
+00:01:11.215 --> 00:01:13.753
+You can also get the schedule as an iCalendar file
+
+00:01:13.754 --> 00:01:16.012
+or as an Org file in different time zones.
+
+00:01:16.013 --> 00:01:17.511
+Many talks will be followed by
+
+00:01:17.512 --> 00:01:20.170
+live Q&A web conferences with the speaker,
+
+00:01:20.171 --> 00:01:23.249
+which will be done in BigBlueButton or BBB.
+
+00:01:23.250 --> 00:01:26.248
+These are indicated with a solid border on the schedule
+
+00:01:26.249 --> 00:01:29.407
+and by Q&A: BBB on the schedule page.
+
+00:01:29.408 --> 00:01:31.106
+You can join the web conference room
+
+00:01:31.107 --> 00:01:32.725
+by clicking on the BBB link
+
+00:01:32.726 --> 00:01:35.664
+on the schedule page or the talk's webpage.
+
+00:01:35.665 --> 00:01:38.583
+Then you can ask your questions yourself when the Q&A starts.
+
+00:01:38.584 --> 00:01:41.042
+To improve performance, please keep your webcam off
+
+00:01:41.043 --> 00:01:43.781
+and stay muted until it's your turn to talk.
+
+00:01:43.782 --> 00:01:46.400
+This year we're experimenting with automatically switching
+
+00:01:46.401 --> 00:01:48.759
+between talks and Q&A sessions,
+
+00:01:48.760 --> 00:01:51.958
+so the transitions on the stream might be a little sudden,
+
+00:01:51.959 --> 00:01:53.717
+but people in the BigBlueButton room
+
+00:01:53.718 --> 00:01:55.396
+can continue the conversation
+
+00:01:55.397 --> 00:01:58.235
+even after the talk moves off-stream.
+
+00:01:58.236 --> 00:02:01.594
+Other talks will have Q&A via Etherpad or IRC,
+
+00:02:01.595 --> 00:02:03.913
+depending on what the speakers prefer.
+
+00:02:03.914 --> 00:02:06.932
+This is indicated in the schedule with a dashed border
+
+00:02:06.933 --> 00:02:09.651
+and on the schedule page as well.
+
+00:02:09.652 --> 00:02:12.090
+Please ask your questions in the recommended places
+
+00:02:12.091 --> 00:02:14.609
+so that the speakers can easily see them.
+
+00:02:14.610 --> 00:02:17.328
+Some talks will have the Q&A after the event,
+
+00:02:17.329 --> 00:02:20.187
+so you can add your questions to their Etherpad.
+
+00:02:20.188 --> 00:02:21.919
+We'll e-mail the speakers afterwards
+
+00:02:21.920 --> 00:02:25.185
+and update the talk pages when they answer.
+
+00:02:25.186 --> 00:02:28.324
+The schedule pages and track pages have quick shortcuts
+
+00:02:28.325 --> 00:02:31.803
+so that you can find out more about talks, open the Etherpads,
+
+00:02:31.804 --> 00:02:35.362
+and join the Q&A sessions. The watch page has more tips
+
+00:02:35.363 --> 00:02:38.061
+on how to make the most of Q&A.
+
+00:02:38.062 --> 00:02:40.840
+If you can, please add notes and ask questions
+
+00:02:40.841 --> 00:02:43.839
+in the Etherpad for the talk. That makes it easier
+
+00:02:43.840 --> 00:02:45.658
+for everyone to share their notes,
+
+00:02:45.659 --> 00:02:48.597
+and speakers and hosts can read the questions from there.
+
+00:02:48.598 --> 00:02:52.616
+We'll copy the notes to the talk pages afterwards.
+
+00:02:52.617 --> 00:02:54.675
+We have one pad for each talk,
+
+00:02:54.676 --> 00:02:56.794
+so you can follow the links to get to the next one
+
+00:02:56.795 --> 00:02:59.953
+or go back to the schedule and get the link from there.
+
+00:02:59.954 --> 00:03:01.592
+If you have general feedback about
+
+00:03:01.593 --> 00:03:03.751
+the conference itself, please put it in
+
+00:03:03.752 --> 00:03:09.210
+pad.emacsconf.org/2023 , which is linked on each pad.
+
+00:03:09.211 --> 00:03:11.869
+You can also use this as a general community message board
+
+00:03:11.870 --> 00:03:15.008
+for things like Help Wanted.
+
+00:03:15.009 --> 00:03:18.259
+Internet Relay Chat or IRC can be another great way
+
+00:03:18.260 --> 00:03:20.786
+to be part of lots of conversations.
+
+00:03:20.787 --> 00:03:24.505
+You can use chat.emacsconf.org to join the IRC channels
+
+00:03:24.506 --> 00:03:27.344
+through your web browser. The tabs on the left can help you
+
+00:03:27.345 --> 00:03:29.903
+switch between the different channels.
+
+00:03:29.904 --> 00:03:32.959
+There's #emacsconf-gen for the General track
+
+00:03:32.960 --> 00:03:36.521
+and #emacsconf-dev for the Development track.
+
+00:03:36.522 --> 00:03:40.240
+If you need to reach us, you can join #emacsconf-org
+
+00:03:40.241 --> 00:03:45.219
+or e-mail emacsconf-org-private@gnu.org.
+
+00:03:45.220 --> 00:03:48.498
+You can use #emacsconf for hallway conversations.
+
+00:03:48.499 --> 00:03:50.617
+Of course, you can join any of these channels
+
+00:03:50.618 --> 00:03:52.759
+with your favourite IRC client.
+
+00:03:52.760 --> 00:03:56.735
+We're on the libera.chat network.
+
+00:03:56.736 --> 00:03:59.374
+Once again, we're going to be streaming with open captions
+
+00:03:59.375 --> 00:04:02.453
+for most of the talks this year, thanks to our speakers and
+
+00:04:02.454 --> 00:04:05.812
+captioning volunteers. The captioned talks are indicated
+
+00:04:05.813 --> 00:04:08.531
+on the schedule, and with any luck, we'll be posting
+
+00:04:08.532 --> 00:04:12.030
+transcripts on talk pages shortly after the talks start.
+
+00:04:12.031 --> 00:04:13.849
+If you need additional accommodations,
+
+00:04:13.850 --> 00:04:16.609
+please let us know in #emacsconf-org
+
+00:04:16.610 --> 00:04:18.508
+and we'll see if we can make things happen.
+
+00:04:18.509 --> 00:04:22.747
+If something goes down, we'll update status.emacsconf.org.
+
+00:04:22.748 --> 00:04:24.606
+If it doesn't look like we've noticed yet,
+
+00:04:24.607 --> 00:04:28.045
+please let us know in the #emacsconf-org IRC channel,
+
+00:04:28.046 --> 00:04:30.204
+where we will be quietly panicking.
+
+00:04:30.205 --> 00:04:32.903
+In all of these conversations, please keep in mind
+
+00:04:32.904 --> 00:04:35.902
+our guidelines for conduct. You can find them on the wiki,
+
+00:04:35.903 --> 00:04:39.382
+They basically boil down to: please be nice.
+
+00:04:39.383 --> 00:04:41.821
+If all goes well, the prerecorded talks and transcripts
+
+00:04:41.822 --> 00:04:43.820
+should be available from the talk pages
+
+00:04:43.821 --> 00:04:45.559
+shortly after they start playing,
+
+00:04:45.560 --> 00:04:47.458
+and we'll post the recordings of live talks
+
+00:04:47.459 --> 00:04:50.577
+and Q&A sessions within the next month or so.
+
+00:04:50.578 --> 00:04:53.096
+If you'd like to get an update, you can subscribe to
+
+00:04:53.097 --> 00:04:56.395
+the emacsconf-discuss mailing list.
+
+00:04:56.396 --> 00:04:57.954
+All right, let's get going.
+
+00:04:57.955 --> 00:05:00.354
+Leo Vivier is hosting the general track,
+
+00:05:00.355 --> 00:05:03.473
+and Amin Bandali hosting the development track.
+
+00:05:03.474 --> 00:05:06.192
+The other volunteers and I will run around mostly backstage,
+
+00:05:06.193 --> 00:05:08.271
+and you'll probably meet us in the closing remarks.
+
+00:05:08.272 --> 00:05:09.910
+That's also where we get to thank
+
+00:05:09.911 --> 00:05:11.549
+all the people and organizations
+
+00:05:11.550 --> 00:05:14.588
+who make EmacsConf even possible.
+
+00:05:14.589 --> 00:05:17.463
+Thanks for coming to EmacsConf 2023.
diff --git a/2023/captions/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--main.vtt b/2023/captions/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--main.vtt
new file mode 100644
index 00000000..c2a49049
--- /dev/null
+++ b/2023/captions/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--main.vtt
@@ -0,0 +1,649 @@
+WEBVTT captioned by daniel molina, checked by sachac
+
+NOTE Introduction
+
+00:00:01.360 --> 00:00:03.079
+Welcome everybody. My name is Daniel Molina
+
+00:00:03.080 --> 00:00:05.060
+and I'm going to give this talk
+
+00:00:05.061 --> 00:00:08.063
+"Who needs Excel? Managing your students' qualifications
+
+00:00:08.064 --> 00:00:08.959
+with Org-table".
+
+00:00:08.960 --> 00:00:10.559
+I'm a professor. I work every day.
+
+00:00:10.560 --> 00:00:12.519
+I have to qualify my students.
+
+00:00:12.520 --> 00:00:15.079
+While most would consider normal in this situation,
+
+00:00:15.080 --> 00:00:17.719
+would be to use Excel or LibreOffice
+
+00:00:17.720 --> 00:00:18.599
+for doing that.
+
+00:00:18.600 --> 00:00:21.179
+However, I think that approaching it from Emacs
+
+00:00:21.180 --> 00:00:24.479
+has several interesting advantages.
+
+00:00:24.480 --> 00:00:27.659
+First, I would like to write the qualification
+
+00:00:27.660 --> 00:00:33.599
+next to the justification, next to the student error,
+
+00:00:33.600 --> 00:00:36.639
+and in the Excel format, it's not comfortable to do that.
+
+00:00:36.640 --> 00:00:38.839
+Actually, I always prefer to write in Emacs
+
+00:00:38.840 --> 00:00:42.719
+for many reasons, as many of you.
+
+00:00:42.720 --> 00:00:46.679
+Also, I love text format because I can compare versions
+
+00:00:46.680 --> 00:00:50.279
+using a control version system like Git and easily change.
+
+00:00:50.280 --> 00:00:52.759
+This is very useful for the revision period
+
+00:00:52.760 --> 00:00:55.479
+in which a student visits me
+
+00:00:55.480 --> 00:01:01.039
+and maybe I can change the qualification for any reason.
+
+00:01:01.040 --> 00:01:03.439
+I also can export the results directly to PDF
+
+00:01:03.440 --> 00:01:08.679
+to publish them in my online campus for the student.
+
+00:01:08.680 --> 00:01:11.359
+I have many tools for doing that.
+
+00:01:11.360 --> 00:01:13.199
+I already knew about Org-table formula.
+
+00:01:13.200 --> 00:01:15.199
+I thought it was very cool and useful
+
+00:01:15.200 --> 00:01:16.159
+to use Emacs for that,
+
+00:01:16.160 --> 00:01:19.239
+and I have actually found a package `orgtbl-aggregate`
+
+00:01:19.240 --> 00:01:22.859
+that seemed adequate for doing that.
+
+00:01:22.860 --> 00:01:26.319
+Unfortunately, I didn't see a lot of information
+
+00:01:26.320 --> 00:01:29.159
+about how to do that in a painless way.
+
+00:01:29.160 --> 00:01:31.759
+So, I have to learn, training and testing,
+
+00:01:31.760 --> 00:01:34.999
+and then prepare these tools to solve that problem
+
+00:01:35.000 --> 00:01:36.639
+and to help other teachers.
+
+00:01:36.640 --> 00:01:39.959
+Anyway, it could be used not only for teaching
+
+00:01:39.960 --> 00:01:41.959
+but for more contexts.
+
+NOTE Demonstration
+
+00:01:41.960 --> 00:01:44.799
+Well, let's start.
+
+00:01:44.800 --> 00:01:46.459
+First, I have two sections,
+
+00:01:46.460 --> 00:01:53.399
+the comments and the section of the table, or results.
+
+00:01:53.400 --> 00:01:56.479
+I have... The comment for each student
+
+00:01:56.480 --> 00:01:57.559
+is in a different headline.
+
+00:01:57.560 --> 00:02:05.439
+It's very useful to check with a note.
+
+00:02:05.440 --> 00:02:10.159
+I can go directly using your helm or ivy
+
+00:02:10.160 --> 00:02:12.999
+or consult to go directly to the section.
+
+00:02:13.000 --> 00:02:14.559
+So it's very nice.
+
+00:02:14.560 --> 00:02:22.879
+Then I put the comment, right, completely wrong,
+
+00:02:22.880 --> 00:02:30.599
+it answers other questions.
+
+00:02:30.600 --> 00:02:35.839
+I put other comments here that I could send to the student,
+
+00:02:35.840 --> 00:02:37.480
+you can imagine, and then
+
+00:02:37.481 --> 00:02:40.159
+I can put the qualification, the score for each student.
+
+00:02:40.160 --> 00:02:43.159
+The thing with that is, initially,
+
+00:02:43.160 --> 00:02:46.219
+when I started doing that, I put, I don't know,
+
+00:02:46.220 --> 00:02:50.719
+the exception and a qualification with that.
+
+00:02:50.720 --> 00:02:55.679
+Okay, that's one point, this a three,
+
+00:02:55.680 --> 00:03:06.679
+and use a column total with something like that.
+
+00:03:06.680 --> 00:03:08.319
+Okay, that's nice.
+
+NOTE Range
+
+00:03:08.320 --> 00:03:11.639
+But then, when I started getting more and more parts,
+
+00:03:11.640 --> 00:03:17.081
+I considered it more useful to use,
+
+00:03:17.082 --> 00:03:20.699
+to put for each part,
+
+00:03:20.700 --> 00:03:20.700
+which is the maximum qualification,
+
+00:03:20.300 --> 00:03:22.919
+on the range of the qualification.
+
+00:03:22.920 --> 00:03:25.559
+In that case, I'm going to put,
+
+00:03:25.560 --> 00:03:28.679
+the first one is two scores, the second three points,
+
+00:03:28.680 --> 00:03:34.999
+the third one is one point, and the last one, four points.
+
+00:03:35.000 --> 00:03:37.799
+And instead of putting that in that way,
+
+00:03:37.800 --> 00:03:41.027
+I like to put one is completely right,
+
+00:03:41.028 --> 00:03:47.319
+zero is completely wrong, or maybe some intermediate values for that.
+
+00:03:47.320 --> 00:03:50.999
+Of course, I have to change the qualification,
+
+00:03:51.000 --> 00:03:54.439
+the formula, so it's very simple.
+
+00:03:54.440 --> 00:03:56.479
+I only have to put,
+
+00:03:56.480 --> 00:04:08.299
+multiply the values of the second line with that.
+
+00:04:08.300 --> 00:04:11.899
+So, it's very useful for doing that.
+
+NOTE More qualifications
+
+00:04:11.900 --> 00:04:16.639
+Okay, that's the first part, so I can put the comment,
+
+00:04:16.640 --> 00:04:19.959
+I can go to the section, I can create...
+
+00:04:19.960 --> 00:04:24.919
+I'm going to put more qualifications.
+
+00:04:24.920 --> 00:04:27.639
+Now I'm going to put the table.
+
+00:04:27.640 --> 00:04:30.459
+First I'm going to change, rename the column name,
+
+00:04:30.460 --> 00:04:39.039
+because it's easier when there is only one word.
+
+00:04:39.040 --> 00:04:47.159
+And it's very simple to use. You only have to put
+
+00:04:47.160 --> 00:04:51.439
+the name, aggregate, the name of the table,
+
+00:04:51.440 --> 00:04:54.659
+in that case group A,
+
+00:04:54.660 --> 00:04:57.199
+and in another string, the columns.
+
+00:04:57.200 --> 00:05:03.799
+For instance, name, surname, total.
+
+00:05:03.800 --> 00:05:07.439
+And you can see that you can get a lesson list
+
+00:05:07.440 --> 00:05:09.119
+with all the students,
+
+00:05:09.120 --> 00:05:16.759
+but only with the final score to publish them.
+
+00:05:16.760 --> 00:05:17.679
+Okay?
+
+00:05:17.680 --> 00:05:20.679
+Even you can update the name of the column,
+
+00:05:20.680 --> 00:05:21.800
+not in the original table,
+
+00:05:21.801 --> 00:05:29.559
+but in the lesson table using that format.
+
+00:05:29.560 --> 00:05:32.099
+Okay?
+
+00:05:32.100 --> 00:05:34.239
+That is a good option.
+
+NOTE Subsets
+
+00:05:34.240 --> 00:05:38.499
+Now we are going to see how can we use that
+
+00:05:38.500 --> 00:05:44.359
+to make a subset of the students.
+
+00:05:44.360 --> 00:05:47.839
+For instance, imagine, this is me,
+
+00:05:47.840 --> 00:05:54.799
+I'm going to put the bad, I change, now I can update,
+
+00:05:54.800 --> 00:06:02.759
+you can see this, but also I'm going to put a list
+
+00:06:02.760 --> 00:06:10.960
+with the students that have failed the exam.
+
+00:06:10.961 --> 00:06:21.259
+It's simple, because this package has the option `:cond`.
+
+00:06:21.260 --> 00:06:26.199
+I'm going to put first to see it better,
+
+00:06:26.200 --> 00:06:28.599
+I'm going to put a condition
+
+00:06:28.600 --> 00:06:37.519
+in which we aggregate less than a half, 5,
+
+00:06:37.520 --> 00:06:44.179
+and I have to use a `string-to-number` total.
+
+00:06:44.180 --> 00:06:47.259
+In that way, I can see that this is the student
+
+00:06:47.260 --> 00:06:48.839
+that has failed the exam,
+
+00:06:48.840 --> 00:06:54.079
+I could use that to make another table,
+
+00:06:54.080 --> 00:07:08.299
+this is the people that passed the exam.
+
+NOTE Sorting
+
+00:07:08.300 --> 00:07:10.980
+Another interesting feature is that
+
+00:07:10.981 --> 00:07:15.620
+I can... the lesson table can be sorted automatically.
+
+00:07:15.621 --> 00:07:20.100
+It's simple. You only have to put this symbol (`^`),
+
+00:07:20.101 --> 00:07:23.360
+and you can put next to the column you want
+
+00:07:23.361 --> 00:07:26.999
+to use for the sort, and then you can put
+
+00:07:27.000 --> 00:07:30.679
+`a` if you want to sort alphabetically,
+
+00:07:30.680 --> 00:07:33.879
+in uppercase if you want to reverse the sort,
+
+00:07:33.880 --> 00:07:38.919
+and `n` if you want to sort numerically.
+
+00:07:38.920 --> 00:07:40.759
+For instance, I can put that
+
+00:07:40.760 --> 00:07:43.959
+from the lesser score to the best score,
+
+00:07:43.960 --> 00:07:46.639
+or here from the best score to the lesser score.
+
+00:07:46.640 --> 00:07:48.960
+And this sort is completely independent
+
+00:07:48.961 --> 00:07:51.640
+to the sort of the original table.
+
+NOTE New table
+
+00:07:51.641 --> 00:07:54.520
+Now I'm going to do another different thing,
+
+00:07:54.521 --> 00:08:02.799
+we are going to put a new table,
+
+00:08:02.800 --> 00:08:07.559
+I'm going to put a new table
+
+00:08:07.560 --> 00:08:09.639
+in which I'm going to put
+
+00:08:09.640 --> 00:08:14.319
+the number of passed students, failed students
+
+00:08:14.320 --> 00:08:16.519
+and the ratio of students. It's simple.
+
+00:08:16.520 --> 00:08:26.559
+I'm going to put the pass, in that case, as column,
+
+00:08:26.560 --> 00:08:32.919
+I can put the count, of course, I can put the count,
+
+00:08:32.920 --> 00:08:35.799
+the number of students
+
+00:08:35.800 --> 00:08:42.079
+that have passed, so I'm going to put in that way, ok?
+
+00:08:42.080 --> 00:08:58.479
+I'm going to put pass, count, failed, ratio.
+
+00:08:58.480 --> 00:08:59.739
+You can see, ok?
+
+00:08:59.740 --> 00:09:01.859
+But this only the count,
+
+00:09:01.860 --> 00:09:04.519
+you are going to put the number wrong.
+
+00:09:04.520 --> 00:09:08.359
+So, it's true, but you can actually put formula here.
+
+00:09:08.360 --> 00:09:10.079
+For instance, you can say,
+
+00:09:10.080 --> 00:09:12.399
+I know that I have 3 students,
+
+00:09:12.400 --> 00:09:18.799
+so the number of failed is 3 minus the passed student.
+
+00:09:18.800 --> 00:09:24.959
+And also, I can put the formula, is the people,
+
+00:09:24.960 --> 00:09:27.719
+the students that passed,
+
+00:09:27.720 --> 00:09:36.079
+divide into the number total of students, ok?
+
+00:09:36.080 --> 00:09:41.379
+Let's go to put that in that way,
+
+00:09:41.380 --> 00:09:44.399
+is the people that passed, it is better in that way,
+
+00:09:44.400 --> 00:09:48.359
+and also I can put directly the number of,
+
+00:09:48.360 --> 00:09:50.919
+the ratio of students.
+
+00:09:50.920 --> 00:09:55.739
+So, in that way, I can have a table
+
+00:09:55.740 --> 00:09:57.519
+with the students that passed,
+
+00:09:57.520 --> 00:09:58.559
+the students that failed
+
+00:09:58.560 --> 00:10:01.279
+and the ratio of people that passed.
+
+NOTE Statistics
+
+00:10:01.280 --> 00:10:04.819
+Sometimes this type of qualification will be useful for me,
+
+00:10:04.820 --> 00:10:08.079
+to see how much has been the sound,
+
+00:10:08.080 --> 00:10:12.239
+how much good has been the exercise.
+
+00:10:12.240 --> 00:10:14.879
+Now, I'm going to put a new table.
+
+00:10:14.880 --> 00:10:22.421
+This new table is going to go some statistics,
+
+00:10:22.422 --> 00:10:32.379
+`statistics_score`, `begin: aggregate :table "final"`.
+
+00:10:32.380 --> 00:10:43.919
+In this case, I'm going to use not the original table,
+
+00:10:43.920 --> 00:10:54.019
+but a final, I'm going to put `final_group`,
+
+00:10:54.020 --> 00:11:01.399
+`final_p1`, `final_p2`, ok?
+
+00:11:01.400 --> 00:11:06.119
+And as `:cols`, I'm going to put directly
+
+00:11:06.120 --> 00:11:13.579
+how many results I have, I put number,
+
+00:11:13.580 --> 00:11:19.199
+I'm going to put also the mean.
+
+00:11:19.200 --> 00:11:21.400
+You can see that mean total is not working
+
+00:11:21.401 --> 00:11:24.519
+because I'm using this table and I renamed,
+
+00:11:24.520 --> 00:11:26.079
+the column name was renamed,
+
+00:11:26.080 --> 00:11:36.679
+so it's `mean(Score)`, mean,
+
+00:11:36.680 --> 00:12:05.919
+and then the score. You can obtain `stdiv` -- `sdev`,
+
+00:12:05.920 --> 00:12:08.959
+sorry, there was an error about that,
+
+00:12:08.960 --> 00:12:12.639
+and two decimal,
+
+00:12:12.640 --> 00:12:17.799
+and that is another interesting score.
+
+NOTE Combining
+
+00:12:17.800 --> 00:12:23.239
+Now, I'm going to finish showing how we can use.
+
+00:12:23.240 --> 00:12:25.839
+To finish it, we are going to see
+
+00:12:25.840 --> 00:12:28.299
+how we can combine several tables
+
+00:12:28.300 --> 00:12:32.479
+or even an aggregated table in a new table.
+
+00:12:32.480 --> 00:12:36.259
+For instance, you can have a table for the practice 1,
+
+00:12:36.260 --> 00:12:38.199
+you can have a table for the practice 2,
+
+00:12:38.200 --> 00:12:40.359
+so I'm going to do that.
+
+00:12:40.360 --> 00:12:48.180
+I'm going to move this table. You can copy or remove,
+
+00:12:48.181 --> 00:12:49.759
+doesn't matter the order,
+
+00:12:49.760 --> 00:12:59.519
+I'm going to put this to identify the result of practice 2,
+
+00:12:59.520 --> 00:13:03.321
+Org create an ID (`org-id-get-create`),
+
+00:13:03.322 --> 00:13:07.479
+then we have a previous result,
+
+00:13:07.480 --> 00:13:10.199
+and I have a final table.
+
+00:13:10.200 --> 00:13:11.839
+The final table could be complicated,
+
+00:13:11.840 --> 00:13:17.439
+but it's not so much complicated, it's only that,
+
+00:13:17.440 --> 00:13:21.959
+I'm going to put something that the formula wants.
+
+00:13:21.960 --> 00:13:26.588
+The formula is to make
+
+00:13:26.589 --> 00:13:34.400
+an `org-lookup-first` of the second name,
+
+00:13:34.401 --> 00:13:41.540
+considering that it's unique,
+
+00:13:41.541 --> 00:13:53.439
+`remote` of the surname,
+
+00:13:53.440 --> 00:14:05.559
+and let's say another `remote` of the `$3` element,
+
+00:14:05.560 --> 00:14:15.119
+ok, that's an error because I don't put yet the ID,
+
+00:14:15.120 --> 00:14:19.759
+so I'm going to copy -- mark and copy --
+
+00:14:19.760 --> 00:14:28.519
+and paste the unique ID generated,
+
+00:14:28.520 --> 00:14:38.519
+I'm going to put that... I think there is missing one.
+
+00:14:38.520 --> 00:14:43.399
+Finally. Okay, that's right.
+
+00:14:43.400 --> 00:14:49.579
+So imagine that I change something here, for instance,
+
+00:14:49.580 --> 00:14:56.700
+I put... I change that,
+
+00:14:56.701 --> 00:15:02.199
+actually, this is changed also, and this is changed.
+
+00:15:02.200 --> 00:15:08.599
+This is a good way to divide the classification
+
+00:15:08.600 --> 00:15:10.200
+in several files, one for the practice 1,
+
+00:15:10.201 --> 00:15:15.039
+one for the practice 2, and one final practice
+
+00:15:15.040 --> 00:15:27.639
+that I can finally export in a final table.
+
+00:15:27.640 --> 00:15:31.119
+Of course you can make it a lot more pretty,
+
+00:15:31.120 --> 00:15:33.359
+but this is all I want to show you.
+
+00:15:33.360 --> 00:15:34.799
+I hope with this talk
+
+00:15:34.800 --> 00:15:37.679
+you have learned a lot more about Org formula,
+
+00:15:37.680 --> 00:15:39.688
+[orgtbl-aggregate] package,
+
+00:15:39.689 --> 00:15:42.279
+and how you can use all this techniques
+
+00:15:42.280 --> 00:15:45.599
+to improve your qualification of a student,
+
+00:15:45.600 --> 00:15:50.480
+or for whatever you want.
diff --git a/2023/captions/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--answers.vtt b/2023/captions/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--answers.vtt
new file mode 100644
index 00000000..9852485c
--- /dev/null
+++ b/2023/captions/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--answers.vtt
@@ -0,0 +1,2654 @@
+WEBVTT
+
+
+00:00:00.599 --> 00:00:04.140
+[Speaker 0]: Again, second only live Q&A of the day.
+
+00:00:04.339 --> 00:00:06.339
+So, things are still a bit rusty,
+
+00:00:06.339 --> 00:00:08.379
+but believe me, by the end of the morning,
+
+00:00:08.380 --> 00:00:12.259
+we will be well-oiled machinery.
+
+00:00:12.340 --> 00:00:13.940
+So, hi Marcus, how are you doing?
+
+00:00:14.540 --> 00:00:15.860
+[Speaker 1]: I'm fine, Thank you.
+
+00:00:17.500 --> 00:00:20.020
+[Speaker 0]: I really liked, most people might have
+
+00:00:20.020 --> 00:00:22.180
+forgotten, but you started your presentation
+
+00:00:22.360 --> 00:00:26.340
+with the, in a very dark room and with this
+
+00:00:26.680 --> 00:00:29.340
+typical note of dry German humor that I
+
+00:00:29.340 --> 00:00:30.900
+particularly liked.
+
+00:00:31.640 --> 00:00:34.280
+[Speaker 1]: Whereas I told you we're born without humour
+
+00:00:34.280 --> 00:00:38.300
+so any sense of humour is the result of very
+
+00:00:38.300 --> 00:00:39.059
+hard work.
+
+00:00:40.940 --> 00:00:44.280
+[Speaker 0]: Well I can confirm therefore that your work
+
+00:00:44.280 --> 00:00:46.600
+is evident in this particular remark.
+
+00:00:47.780 --> 00:00:50.879
+So as we did before and perhaps this time
+
+00:00:50.940 --> 00:00:54.320
+more punctiliously, terrible adverb,
+
+00:00:54.320 --> 00:00:58.100
+that's why I'm an English major we will be
+
+00:00:58.100 --> 00:01:00.420
+taking questions first from the pad and then
+
+00:01:00.420 --> 00:01:03.740
+we'll be moving on to people in the BBV room.
+
+00:01:03.740 --> 00:01:05.540
+Let me just check if we have some people.
+
+00:01:05.540 --> 00:01:06.720
+We do have some people.
+
+00:01:06.960 --> 00:01:08.860
+All right, so Markus, I'm gonna ask you the
+
+00:01:08.860 --> 00:01:11.200
+questions in the pad unless you have
+
+00:01:11.200 --> 00:01:12.600
+something to remark first.
+
+00:01:13.080 --> 00:01:15.060
+[Speaker 1]: Yes, oh no, no, I don't have nothing to
+
+00:01:15.060 --> 00:01:17.800
+remark. I mean, only that we're coming to the
+
+00:01:17.800 --> 00:01:20.200
+end of the term here, and I think in the
+
+00:01:20.200 --> 00:01:24.140
+paper that I wrote, I expressed doubt that
+
+00:01:24.140 --> 00:01:25.560
+Emacs was good for beginners,
+
+00:01:25.560 --> 00:01:31.720
+but I've now gone back to an interactive
+
+00:01:31.780 --> 00:01:34.020
+notebook in the class without Emacs,
+
+00:01:34.080 --> 00:01:37.500
+and I've just missed it terribly the whole
+
+00:01:37.500 --> 00:01:39.220
+term. And I think I saw you walk too,
+
+00:01:39.220 --> 00:01:40.540
+so that's kind of interesting.
+
+00:01:41.380 --> 00:01:42.160
+That's it.
+
+00:01:42.270 --> 00:01:43.580
+[Speaker 0]: Right. All right, well,
+
+00:01:43.580 --> 00:01:45.040
+let's get started with the questions because
+
+00:01:45.040 --> 00:01:47.940
+I'm a little worried that we might acquire
+
+00:01:48.340 --> 00:01:50.580
+debt because of the time that we have.
+
+00:01:50.580 --> 00:01:53.040
+And just to be clear, so that you also know
+
+00:01:53.040 --> 00:01:54.479
+the time at which we're supposed to be
+
+00:01:54.479 --> 00:01:57.240
+finishing, the next talk here on this track
+
+00:01:57.240 --> 00:01:59.560
+is supposed to be at 10.40,
+
+00:01:59.700 --> 00:02:01.740
+which is in 13 minutes from now.
+
+00:02:01.800 --> 00:02:03.220
+All right, with that said,
+
+00:02:03.240 --> 00:02:04.500
+starting with the first questions.
+
+00:02:05.000 --> 00:02:07.300
+What tools do you use for making your slides?
+
+00:02:07.300 --> 00:02:09.440
+They are very nice and I concur.
+
+00:02:17.680 --> 00:02:18.180
+OrgReveal?
+
+00:02:12.280 --> 00:02:22.600
+[Speaker 1]: I use OrgReveal. It's a package,
+
+00:02:22.980 --> 00:02:26.380
+OrgReveal. I don't have the link right now,
+
+00:02:26.380 --> 00:02:31.560
+but it's an org mode package where You create
+
+00:02:31.560 --> 00:02:35.400
+some meta information and I think it's
+
+00:02:35.400 --> 00:02:39.900
+basically JavaScript, JavaScript package that
+
+00:02:39.900 --> 00:02:41.620
+will work from a bunch of different
+
+00:02:45.580 --> 00:02:49.540
+platforms, but it works particularly well
+
+00:02:49.540 --> 00:02:52.120
+from Emacs. So you use that a lot.
+
+00:02:53.740 --> 00:02:55.440
+[Speaker 0]: Right, yeah, I think it is definitely
+
+00:02:55.440 --> 00:02:57.120
+interacting with JavaScript in the background
+
+00:02:57.120 --> 00:02:59.120
+and it makes for a very clean presentation
+
+00:02:59.440 --> 00:03:01.380
+right from Emacs. I mean,
+
+00:03:01.380 --> 00:03:04.340
+it's not opened in Emacs unless you use a web
+
+00:03:04.340 --> 00:03:06.480
+browser in Emacs that supports such
+
+00:03:06.480 --> 00:03:09.400
+compositing but it's pretty convenient and I
+
+00:03:09.400 --> 00:03:10.780
+recommend looking into it.
+
+00:03:15.140 --> 00:03:19.540
+[Speaker 1]: I'm just going to share the URL here.
+
+00:03:20.080 --> 00:03:21.400
+So if anybody's interested.
+
+00:03:22.300 --> 00:03:24.140
+[Speaker 0]: Right, and we'll be putting all the links
+
+00:03:24.140 --> 00:03:25.600
+right now. So obviously right now,
+
+00:03:25.600 --> 00:03:28.180
+Marcus is writing inside of his own Emacs,
+
+00:03:28.180 --> 00:03:29.340
+but we also have the pad.
+
+00:03:29.340 --> 00:03:31.020
+We'll make sure that you have all the links
+
+00:03:31.020 --> 00:03:32.520
+accessible a little bit later.
+
+00:03:32.660 --> 00:03:34.340
+Okay, moving on to the next question,
+
+00:03:34.460 --> 00:03:35.360
+why MDPI?
+
+00:03:36.820 --> 00:03:40.520
+[Speaker 1]: Oh yeah, well that's a little bit of a longer
+
+00:03:40.520 --> 00:03:42.600
+answer, kind of boring I suppose.
+
+00:03:42.840 --> 00:03:44.680
+So when I came here to the US,
+
+00:03:45.560 --> 00:03:47.960
+I used to teach a lot of graduate courses and
+
+00:03:47.960 --> 00:03:49.280
+I had to suddenly teach a lot of
+
+00:03:49.280 --> 00:03:50.460
+undergraduate courses,
+
+00:03:50.500 --> 00:03:53.100
+which partly motivated this move because it
+
+00:03:53.100 --> 00:03:55.640
+made me realize, as I said in the
+
+00:03:55.640 --> 00:03:58.020
+presentation, how little the students
+
+00:03:58.020 --> 00:03:59.780
+understand of the underlying infrastructure
+
+00:04:00.040 --> 00:04:01.920
+and how important it is for them to work with
+
+00:04:01.920 --> 00:04:06.440
+an IDE that doesn't make coding especially
+
+00:04:06.540 --> 00:04:09.140
+convenient, but that teaches them a lot of
+
+00:04:09.140 --> 00:04:10.840
+the stuff on the side,
+
+00:04:10.840 --> 00:04:13.080
+you know, while still presenting a very
+
+00:04:13.440 --> 00:04:17.380
+smooth environment, which developers
+
+00:04:17.480 --> 00:04:22.120
+appreciate as well. So I came here and I used
+
+00:04:22.120 --> 00:04:24.520
+to publish like 4 or 5 research papers per
+
+00:04:24.520 --> 00:04:26.140
+year, but I didn't have the time.
+
+00:04:26.520 --> 00:04:28.760
+So I was contacted by MDPI.
+
+00:04:30.060 --> 00:04:34.340
+And it's 1 of those research paper mills,
+
+00:04:34.700 --> 00:04:37.160
+which seem to be springing up where authors
+
+00:04:37.200 --> 00:04:40.840
+can, really the institutions of the authors
+
+00:04:40.840 --> 00:04:42.560
+have to pay so that they can publish,
+
+00:04:42.560 --> 00:04:44.440
+right? So it's not really,
+
+00:04:44.440 --> 00:04:46.400
+and I checked them out and they seem to be
+
+00:04:46.400 --> 00:04:47.680
+proper peer review publishing,
+
+00:04:47.680 --> 00:04:49.120
+but to be absolutely sure I said,
+
+00:04:49.120 --> 00:04:50.460
+well, you can have my article,
+
+00:04:51.220 --> 00:04:52.540
+but of course for free,
+
+00:04:52.540 --> 00:04:55.080
+I'm not going to pay for you to publish it.
+
+00:04:55.080 --> 00:04:57.700
+And so that's what they did.
+
+00:04:57.880 --> 00:05:01.160
+They invited me and I submitted the paper and
+
+00:05:01.160 --> 00:05:02.240
+it was a very good process.
+
+00:05:02.240 --> 00:05:04.540
+That was a very, it was a good peer review
+
+00:05:04.540 --> 00:05:06.760
+critique. So I changed the paper quite a bit.
+
+00:05:06.760 --> 00:05:07.940
+It's still not a great paper.
+
+00:05:07.940 --> 00:05:09.320
+It's just a small case study.
+
+00:05:09.320 --> 00:05:12.100
+That's the kind of thing that you have a lot
+
+00:05:12.100 --> 00:05:14.800
+in medical research where also people don't
+
+00:05:14.800 --> 00:05:17.720
+have a lot of time to do research,
+
+00:05:17.720 --> 00:05:19.480
+proper research, which takes a very long
+
+00:05:19.480 --> 00:05:21.520
+time. And so that's why MDPI.
+
+00:05:21.820 --> 00:05:24.660
+And they are in the most of the relevant
+
+00:05:24.800 --> 00:05:27.780
+citation indices. So they are reputable
+
+00:05:27.900 --> 00:05:30.920
+enough. I mean, normally I would say for
+
+00:05:30.920 --> 00:05:33.060
+anybody who does anything like this,
+
+00:05:33.260 --> 00:05:36.420
+you might not even want to bother with the
+
+00:05:36.420 --> 00:05:37.640
+journal these days anymore.
+
+00:05:37.640 --> 00:05:39.260
+You just go straight to ArcSci,
+
+00:05:40.520 --> 00:05:41.620
+put out your preprint.
+
+00:05:41.980 --> 00:05:44.540
+And in fact, what will happen if you're on
+
+00:05:44.540 --> 00:05:46.440
+ArcSci, if somebody finds it interesting,
+
+00:05:46.440 --> 00:05:49.900
+they're going to reach out to you to capture
+
+00:05:49.900 --> 00:05:54.280
+your paper and have it published under their
+
+00:05:54.280 --> 00:05:56.120
+heading. Oh yeah, actually the other reason
+
+00:05:56.120 --> 00:05:58.660
+why I wanted MDPI is because there were open
+
+00:05:58.660 --> 00:05:59.980
+access from the start.
+
+00:06:00.720 --> 00:06:02.660
+And I really like, if you go to the paper,
+
+00:06:02.660 --> 00:06:04.200
+I really like the way it's presented.
+
+00:06:04.200 --> 00:06:07.340
+So I looked at a few papers and I thought
+
+00:06:07.340 --> 00:06:12.140
+it's a really nice online access,
+
+00:06:12.160 --> 00:06:13.980
+online open access solution.
+
+00:06:15.920 --> 00:06:17.220
+That's the long answer,
+
+00:06:17.220 --> 00:06:17.720
+sorry.
+
+00:06:18.740 --> 00:06:21.060
+[Speaker 0]: No, that was perfectly fine and you provided
+
+00:06:21.060 --> 00:06:23.760
+many details so it was far from a boring
+
+00:06:23.760 --> 00:06:25.420
+answer, let me reassure you.
+
+00:06:26.140 --> 00:06:27.100
+Moving on to the question,
+
+00:06:27.100 --> 00:06:29.120
+we only have about 8 minutes left so I'd like
+
+00:06:29.120 --> 00:06:31.500
+to finish those 2 questions and let people in
+
+00:06:31.500 --> 00:06:34.460
+the audience speak. So do you think immersion
+
+00:06:35.280 --> 00:06:37.500
+can be achieved on teaching other students
+
+00:06:37.500 --> 00:06:38.600
+with different backgrounds?
+
+00:06:39.340 --> 00:06:42.180
+[Speaker 1]: Oh yeah, that's a really good question.
+
+00:06:45.740 --> 00:06:48.380
+I had actually a discussion last night with
+
+00:06:48.380 --> 00:06:49.920
+my wife in bed about this,
+
+00:06:49.920 --> 00:06:52.860
+about the use of textbooks which are famously
+
+00:06:53.000 --> 00:06:55.840
+non-immersive because they're consumed away
+
+00:06:55.840 --> 00:06:58.640
+from the class. Very rarely you sit in class
+
+00:06:58.660 --> 00:07:00.540
+like people used to do and read something
+
+00:07:00.540 --> 00:07:02.420
+together. Maybe they did that in English.
+
+00:07:02.420 --> 00:07:04.700
+And that is of course instantly immersive.
+
+00:07:05.240 --> 00:07:06.700
+But in computer science,
+
+00:07:06.700 --> 00:07:08.180
+many other topics, psychology,
+
+00:07:08.360 --> 00:07:10.300
+you know, biology and so on,
+
+00:07:10.680 --> 00:07:12.260
+you cannot get immersion,
+
+00:07:12.260 --> 00:07:14.240
+at least not in a lecture theater.
+
+00:07:15.040 --> 00:07:16.960
+You get it in a lab because people solve the
+
+00:07:16.960 --> 00:07:18.920
+problem and then they're immersed in it.
+
+00:07:18.920 --> 00:07:20.660
+So, but my answer would be,
+
+00:07:20.660 --> 00:07:22.680
+yes, I can think totally immersion can be
+
+00:07:22.680 --> 00:07:25.520
+achieved anywhere, but what you have to do is
+
+00:07:25.520 --> 00:07:29.500
+you have to not lecture and you have to let
+
+00:07:29.500 --> 00:07:31.640
+students do work as you go along.
+
+00:07:31.640 --> 00:07:33.840
+So I used to lecture quite a bit because I
+
+00:07:33.840 --> 00:07:38.220
+was an insecure young professor and just read
+
+00:07:38.220 --> 00:07:41.400
+all my slides and my notes as I used to use,
+
+00:07:41.400 --> 00:07:43.540
+as everybody uses to when they start.
+
+00:07:44.200 --> 00:07:46.100
+But as I went along, I realized,
+
+00:07:46.100 --> 00:07:48.240
+you know, I've got such a grasp of the topic
+
+00:07:48.240 --> 00:07:51.080
+that I really everything I do now is prepared
+
+00:07:51.080 --> 00:07:53.720
+in Emacs in an interactive way so I start
+
+00:07:53.800 --> 00:07:55.480
+saying a few words and then the students
+
+00:07:55.480 --> 00:07:58.000
+immediately we get to work and they seem to
+
+00:07:58.000 --> 00:07:59.840
+love that because in most of the other
+
+00:07:59.840 --> 00:08:01.680
+classes people just talk at them they take
+
+00:08:01.680 --> 00:08:03.500
+their stuff home and work at home,
+
+00:08:03.600 --> 00:08:05.140
+which is of course is super.
+
+00:08:05.380 --> 00:08:06.680
+But most of the students,
+
+00:08:06.680 --> 00:08:08.600
+if they have, in at least in a liberal arts
+
+00:08:08.600 --> 00:08:10.220
+college, they have 5 other classes,
+
+00:08:10.440 --> 00:08:13.520
+they do not take a lot of time to do the work
+
+00:08:13.520 --> 00:08:16.880
+at home. So it's, you know,
+
+00:08:16.880 --> 00:08:18.840
+yeah, It's kind of different.
+
+00:08:18.840 --> 00:08:20.020
+It's kind of risky, yeah,
+
+00:08:20.020 --> 00:08:22.360
+but the main point I was trying to make is
+
+00:08:22.360 --> 00:08:26.740
+Emacs and Org Mode really helped me to boil
+
+00:08:26.740 --> 00:08:29.220
+that interactive session down to something
+
+00:08:29.220 --> 00:08:30.800
+that will work in the classroom.
+
+00:08:30.800 --> 00:08:32.559
+I don't have to jump around between
+
+00:08:32.559 --> 00:08:33.740
+platforms. For example,
+
+00:08:33.840 --> 00:08:35.799
+this term, and I didn't use Emacs in the
+
+00:08:35.799 --> 00:08:36.919
+class with the students,
+
+00:08:37.159 --> 00:08:40.240
+I had to render using a package.
+
+00:08:40.760 --> 00:08:42.299
+It's actually a very nice package called,
+
+00:08:42.299 --> 00:08:46.100
+what's it called? Ox, what's it called?
+
+00:08:46.100 --> 00:08:50.520
+Ox, Ox IPNB. It's called Ox IPNB.
+
+00:08:50.580 --> 00:08:53.360
+So what it does is it renders in the usual
+
+00:08:53.360 --> 00:08:55.580
+way with Emacs, Org Mode does,
+
+00:08:55.600 --> 00:08:58.700
+renders interactive notebook files in
+
+00:08:58.700 --> 00:09:01.060
+Jupyter. And that took me a lot of time.
+
+00:09:01.320 --> 00:09:03.840
+And I immediately noticed as soon as the
+
+00:09:03.840 --> 00:09:06.180
+teacher has to fight platforms themselves,
+
+00:09:06.660 --> 00:09:09.920
+they take the ball off the immersion task,
+
+00:09:09.920 --> 00:09:12.340
+you know, to keep the student on the problem.
+
+00:09:16.000 --> 00:09:18.560
+[Speaker 0]: Yeah. Oh, go on, please.
+
+00:09:19.400 --> 00:09:22.840
+Yeah. I was going to remark that.
+
+00:09:12.980 --> 00:09:23.260
+[Speaker 1]: So yeah, absolutely. Yeah,
+
+00:09:23.260 --> 00:09:25.120
+I suppose it might be MIT style.
+
+00:09:25.120 --> 00:09:26.140
+Big difference though,
+
+00:09:26.140 --> 00:09:27.900
+my classes are very, very short,
+
+00:09:27.900 --> 00:09:30.060
+small. So I have like between 10 and 15
+
+00:09:30.060 --> 00:09:32.180
+students per class. 1 of the reasons why I
+
+00:09:32.180 --> 00:09:35.080
+went to this college is because I was fed up
+
+00:09:35.080 --> 00:09:36.940
+teaching, trying to teach hundreds of
+
+00:09:36.940 --> 00:09:40.580
+students. Okay, sorry,
+
+00:09:40.580 --> 00:09:42.520
+do some of your students nag you about using
+
+00:09:42.520 --> 00:09:43.460
+VS Code? Yes, they do,
+
+00:09:43.460 --> 00:09:45.300
+but their arguments aren't very good.
+
+00:09:46.800 --> 00:09:48.740
+They hadn't really compared Emacs and VS
+
+00:09:48.740 --> 00:09:51.800
+Code. And what I do, actually I use RStudio
+
+00:09:51.980 --> 00:09:53.860
+as well, demonstrate VS Code,
+
+00:09:53.860 --> 00:10:01.060
+RStudio and Emacs. And I think it's very easy
+
+00:10:01.060 --> 00:10:02.840
+for them to see. And there are some videos
+
+00:10:02.840 --> 00:10:05.020
+about that as well, how much easier it is to
+
+00:10:05.020 --> 00:10:08.520
+get into Emacs to limit your investments to
+
+00:10:08.520 --> 00:10:09.820
+what you actually wanna do.
+
+00:10:09.820 --> 00:10:11.840
+When the problem with VS Code is it comes at
+
+00:10:11.840 --> 00:10:14.280
+you with this sort of Microsoft store
+
+00:10:14.440 --> 00:10:17.280
+ideology, like a gazillion plugins,
+
+00:10:17.420 --> 00:10:18.840
+which if you're a developer,
+
+00:10:18.900 --> 00:10:20.140
+you know what you want.
+
+00:10:21.040 --> 00:10:24.120
+And I mean, it's a bit like VS Code is like
+
+00:10:24.960 --> 00:10:27.940
+Google search for as if you were programming
+
+00:10:27.980 --> 00:10:30.820
+in Google search, a complete waste of time.
+
+00:10:31.220 --> 00:10:33.280
+Having said that, I've also seen some videos
+
+00:10:33.280 --> 00:10:36.180
+with people who really know how to use VS
+
+00:10:36.180 --> 00:10:37.420
+Code. And of course, you know,
+
+00:10:37.420 --> 00:10:41.180
+if somebody gets on the inside of a tool and
+
+00:10:41.180 --> 00:10:44.480
+spends upwards of a thousand hours in the
+
+00:10:44.480 --> 00:10:45.840
+tool, they'll be great.
+
+00:10:45.920 --> 00:10:47.580
+But that's not true for beginners.
+
+00:10:48.960 --> 00:10:50.780
+So hold on, there's another 1.
+
+00:10:51.020 --> 00:10:52.320
+I'm reading them, sorry.
+
+00:10:52.840 --> 00:10:55.420
+Leo, I can see the questions,
+
+00:10:55.680 --> 00:10:58.000
+but you may wanna turn them around.
+
+00:10:59.700 --> 00:11:00.720
+[Speaker 0]: No, No, no, please, please,
+
+00:11:00.720 --> 00:11:01.560
+you're free to read them.
+
+00:11:01.560 --> 00:11:02.900
+I'm on your fasted computer.
+
+00:11:02.960 --> 00:11:04.600
+[Speaker 1]: Some of you, too, that's the nagging.
+
+00:11:04.600 --> 00:11:06.100
+I teach simple programming at a vocational
+
+00:11:06.100 --> 00:11:07.700
+school, and even after showing the students
+
+00:11:07.700 --> 00:11:09.520
+Vim, Vim, of course, is a contender,
+
+00:11:09.520 --> 00:11:11.260
+and now I'm telling them I prefer Emacs.
+
+00:11:12.180 --> 00:11:14.260
+They still all choose VS Code as their
+
+00:11:14.260 --> 00:11:17.460
+editor. Well, okay, what I did is mandatory.
+
+00:11:17.720 --> 00:11:19.140
+I didn't let them choose.
+
+00:11:19.840 --> 00:11:21.980
+That's what I did. And I thought that was
+
+00:11:21.980 --> 00:11:23.800
+quite risky, but in the end,
+
+00:11:23.860 --> 00:11:26.400
+it turns out that the best students loved it
+
+00:11:26.400 --> 00:11:28.580
+and keep using Emacs in their jobs.
+
+00:11:28.580 --> 00:11:32.640
+I hear that now. The students in the middle
+
+00:11:33.160 --> 00:11:35.860
+were probably the ones who would pick VS Code
+
+00:11:35.860 --> 00:11:38.400
+because every tutorial they see,
+
+00:11:38.600 --> 00:11:40.440
+they learn a lot through YouTube and so
+
+00:11:40.440 --> 00:11:42.260
+everything they see is in VS Code.
+
+00:11:42.260 --> 00:11:44.180
+If there were more tutorials in Emacs,
+
+00:11:44.180 --> 00:11:45.600
+I'm trying to make some,
+
+00:11:45.700 --> 00:11:47.620
+then of course that would be different.
+
+00:11:49.280 --> 00:11:53.940
+But I think it's partly brainwashing and
+
+00:11:53.940 --> 00:11:55.840
+partly, of course, the other reason is there
+
+00:11:55.840 --> 00:12:00.320
+is no online Emacs. They use VS Code Dev,
+
+00:12:00.500 --> 00:12:02.460
+right? And that's, of course,
+
+00:12:03.340 --> 00:12:05.140
+they use an online cloud solution.
+
+00:12:05.420 --> 00:12:07.040
+Like most of the students in the high school,
+
+00:12:07.040 --> 00:12:09.360
+I teach Python in the high school right now,
+
+00:12:09.480 --> 00:12:11.600
+and the students only get Chromebooks that
+
+00:12:11.600 --> 00:12:14.160
+are completely cut down to nothing.
+
+00:12:15.060 --> 00:12:17.420
+They cannot have Linux on their Chromebooks.
+
+00:12:18.260 --> 00:12:19.900
+So what are they supposed to do?
+
+00:12:19.900 --> 00:12:21.580
+Their only choice really is Repl.
+
+00:12:21.760 --> 00:12:24.240
+Repl.com is a possibility for them to do
+
+00:12:24.240 --> 00:12:27.540
+that. But, you know, or they use code spaces,
+
+00:12:27.660 --> 00:12:29.560
+which is VS Code in GitHub.
+
+00:12:31.400 --> 00:12:32.640
+[Speaker 0]: Marcus, sorry for the interruption.
+
+00:12:32.640 --> 00:12:34.040
+We only have about 2 minutes left.
+
+00:12:34.040 --> 00:12:35.380
+So if you could take 1 question,
+
+00:12:35.380 --> 00:12:36.760
+that would be great. Sorry.
+
+00:12:30.660 --> 00:12:38.100
+[Speaker 1]: So. I'm observing the same behavior.
+
+00:12:38.100 --> 00:12:40.080
+Any more tutorials will be most welcome.
+
+00:12:40.080 --> 00:12:43.660
+Yes, I I'd love to. I spent the rest of my
+
+00:12:43.660 --> 00:12:46.100
+days on this earth making Emacs tutorials if
+
+00:12:48.263 --> 00:12:49.267
+[Speaker 0]: tutorials if I can.
+
+00:12:46.100 --> 00:12:49.769
+[Speaker 1]: I can. Thank you. DMAX Thank you.
+
+00:12:49.769 --> 00:12:51.040
+Approach to handling EDA.
+
+00:12:51.140 --> 00:12:52.700
+Oh yeah, with white data sets.
+
+00:12:56.760 --> 00:12:58.940
+Well, that's a good point.
+
+00:13:01.500 --> 00:13:03.260
+[Speaker 0]: So Markus, I don't want to put you under too
+
+00:13:03.840 --> 00:13:06.680
+[Speaker 1]: answer the question. The handling EDA,
+
+00:13:07.080 --> 00:13:08.760
+I don't know, if you look at the comments,
+
+00:13:08.760 --> 00:13:09.960
+I think these are on YouTube,
+
+00:13:09.960 --> 00:13:11.340
+right, at some point, Leo?
+
+00:13:03.260 --> 00:13:12.600
+[Speaker 0]: much pressure to Oh yes,
+
+00:13:12.600 --> 00:13:13.860
+they will definitely be on YouTube.
+
+00:13:14.200 --> 00:13:14.540
+answer the
+
+00:13:13.860 --> 00:13:15.580
+[Speaker 1]: I'm going to question you asked about the
+
+00:13:15.580 --> 00:13:17.560
+EDA, that's too long to go into right now,
+
+00:13:17.560 --> 00:13:21.100
+plus my cat is here. So I'm going to answer
+
+00:13:21.100 --> 00:13:22.620
+that in the comments, all right?
+
+00:13:23.000 --> 00:13:24.160
+Start up the conversation.
+
+00:13:24.960 --> 00:13:27.800
+Yes, I'm going to post that in the comments
+
+00:13:27.800 --> 00:13:28.480
+as well.
+
+00:13:29.320 --> 00:13:31.500
+[Speaker 0]: Sure, but Also, just to be clear,
+
+00:13:31.500 --> 00:13:32.640
+Marcus, you're going to continue the
+
+00:13:32.640 --> 00:13:35.440
+discussion. It's just a stream that will be
+
+00:13:35.440 --> 00:13:37.160
+moving on to the next talk in about 50
+
+00:13:37.160 --> 00:13:39.380
+seconds. Marcus, feel free to keep answering
+
+00:13:39.380 --> 00:13:40.760
+questions inside this room.
+
+00:13:40.760 --> 00:13:42.780
+You also have people, we're going to check
+
+00:13:42.840 --> 00:13:44.540
+aside with the stream,
+
+00:13:44.540 --> 00:13:46.280
+we have a number of people in the room.
+
+00:13:46.280 --> 00:13:48.300
+You can see them on the left on the button
+
+00:13:48.640 --> 00:13:51.360
+who are probably going to unmute themselves
+
+00:13:51.460 --> 00:13:52.580
+and ask you questions.
+
+00:13:52.740 --> 00:13:54.440
+So feel free to stay in the room,
+
+00:13:54.720 --> 00:13:57.100
+answer as lengthy as you want the questions
+
+00:13:57.100 --> 00:13:58.700
+because that's more content for us and we
+
+00:13:58.700 --> 00:14:01.640
+love it obviously. But it's just that I
+
+00:14:01.640 --> 00:14:03.760
+personally will be leaving to take care of
+
+00:14:03.760 --> 00:14:04.860
+the rest of the talks.
+
+00:14:04.960 --> 00:14:06.880
+So, Markus, do you have any last words before
+
+00:14:06.880 --> 00:14:07.740
+we move on?
+
+00:14:08.000 --> 00:14:09.680
+[Speaker 1]: No, just thank you for this wonderful...
+
+00:14:09.680 --> 00:14:11.080
+I'm going to copy this.
+
+00:14:11.660 --> 00:14:13.280
+I don't think I listened to the talk by
+
+00:14:13.280 --> 00:14:15.200
+Sascha yet, but I'm going to do that because
+
+00:14:15.200 --> 00:14:18.080
+I really want to copy this conference format.
+
+00:14:18.080 --> 00:14:19.860
+I think that is the conference format of the
+
+00:14:19.860 --> 00:14:21.820
+future, using volunteers to put together
+
+00:14:21.820 --> 00:14:23.100
+conferences. So I can't wait.
+
+00:14:23.100 --> 00:14:24.720
+Nobody wants to come to Batesville where I
+
+00:14:24.720 --> 00:14:25.840
+am, but thank you so much.
+
+00:14:25.840 --> 00:14:27.180
+That was really super professional.
+
+00:14:27.180 --> 00:14:28.040
+I love that.
+
+00:14:28.980 --> 00:14:32.420
+[Speaker 0]: Great. Okay, we are almost perfectly on time.
+
+00:14:32.420 --> 00:14:35.420
+I think we caught up about 1 or 2 seconds
+
+00:14:35.420 --> 00:14:37.200
+into the last sentence you said but otherwise
+
+00:14:37.200 --> 00:14:38.960
+we were splendidly on time.
+
+00:14:38.960 --> 00:14:40.260
+So thank you so much Marcus.
+
+00:14:40.440 --> 00:14:43.140
+[Speaker 1]: You're welcome. So I wanted to say a little
+
+00:14:43.140 --> 00:14:46.660
+bit about that question about handling EDA.
+
+00:14:51.220 --> 00:14:52.960
+[Speaker 0]: Can you see the chat on the left?
+
+00:14:52.960 --> 00:14:54.720
+Because people have started asking questions
+
+00:14:54.720 --> 00:14:56.180
+on the left. Can you see the chat?
+
+00:14:49.460 --> 00:14:56.866
+[Speaker 1]: I mean I used email. Sorry,
+
+00:14:58.860 --> 00:15:00.820
+[Speaker 0]: So you've got multiple avenues for questions.
+
+00:15:01.020 --> 00:15:01.166
+[Speaker 2]: You can
+
+00:15:01.166 --> 00:15:02.380
+[Speaker 0]: still answer questions in the chat.
+
+00:14:57.053 --> 00:15:03.760
+[Speaker 1]: sorry, sorry. Okay, I'm just going to go into
+
+00:15:03.760 --> 00:15:05.240
+that. Yeah, that's fine.
+
+00:15:05.240 --> 00:15:06.760
+[Speaker 0]: Sure, I'll need to go now.
+
+00:15:06.760 --> 00:15:08.560
+So Marcus, have a great day and I'll probably
+
+00:15:08.560 --> 00:15:09.360
+see you later.
+
+00:15:10.160 --> 00:15:12.280
+[Speaker 1]: Yeah, thank you. Sorry.
+
+00:15:13.140 --> 00:15:15.620
+Bye bye. There was a question about the,
+
+00:15:15.620 --> 00:15:17.560
+I wanted to ask the answer the question about
+
+00:15:17.560 --> 00:15:21.760
+EDA, large data sets. So,
+
+00:15:21.760 --> 00:15:24.660
+I mean, I teach undergraduate now,
+
+00:15:25.080 --> 00:15:28.100
+so there's a limited number of courses,
+
+00:15:28.660 --> 00:15:32.360
+like where I use, actually have big data
+
+00:15:32.360 --> 00:15:36.100
+issues. And I mean I'm not saying that I'm
+
+00:15:36.100 --> 00:15:38.760
+not that I don't run into performance issues
+
+00:15:38.760 --> 00:15:40.580
+with Emacs. I obviously do.
+
+00:15:40.680 --> 00:15:43.680
+But like the performance issues in Emacs are
+
+00:15:43.680 --> 00:15:45.780
+comparable to performance issues for example
+
+00:15:45.780 --> 00:15:49.580
+when using R. In R everything is in memory So
+
+00:15:49.640 --> 00:15:52.700
+you are limited to the available,
+
+00:15:52.840 --> 00:15:56.020
+what is it, 2 gigabyte or whatever memory of
+
+00:15:56.020 --> 00:15:58.180
+your computer. So you would have to find
+
+00:15:58.180 --> 00:16:00.360
+other infrastructure solutions anyway.
+
+00:16:00.660 --> 00:16:05.860
+The advantage of using Emacs is that I can,
+
+00:16:05.860 --> 00:16:07.620
+within 1 Org Mode file,
+
+00:16:08.140 --> 00:16:10.220
+connect to an external database.
+
+00:16:11.760 --> 00:16:13.840
+I can even, as probably most of you know,
+
+00:16:13.840 --> 00:16:17.860
+I can even use it as a text-based web browser
+
+00:16:17.860 --> 00:16:20.640
+if I want to. So I could look at individual
+
+00:16:22.940 --> 00:16:26.820
+files. And the other point of EDA of course
+
+00:16:26.820 --> 00:16:30.640
+is that you're not supposed to look at the
+
+00:16:30.640 --> 00:16:33.260
+tables. You're supposed to get the basic
+
+00:16:38.620 --> 00:16:41.300
+frame of your data. Is there a header?
+
+00:16:41.460 --> 00:16:43.780
+What's the approximate size and stuff like
+
+00:16:43.780 --> 00:16:45.940
+that? And then you're supposed to import it
+
+00:16:45.940 --> 00:16:47.580
+into a data frame ideally,
+
+00:16:47.960 --> 00:16:51.260
+at least in portions. And I don't think,
+
+00:16:53.240 --> 00:16:56.260
+yeah, so that's it. But the full answer is
+
+00:16:56.260 --> 00:16:59.980
+that I have not done big data analysis in
+
+00:16:59.980 --> 00:17:02.280
+Emacs. So that's actually a really nice
+
+00:17:02.380 --> 00:17:06.060
+extension. I'm going to write that down as a
+
+00:17:06.060 --> 00:17:08.260
+thing to talk about in some future talk.
+
+00:17:08.260 --> 00:17:10.819
+Okay, so ADA with big data.
+
+00:17:11.599 --> 00:17:13.940
+Even though interesting would be to know what
+
+00:17:13.940 --> 00:17:16.560
+kind of size of data you're actually talking
+
+00:17:16.560 --> 00:17:19.300
+about. So I don't know,
+
+00:17:20.920 --> 00:17:25.940
+what is it, upwards of 1 terabyte or
+
+00:17:25.940 --> 00:17:27.520
+something like that, I don't know.
+
+00:17:27.520 --> 00:17:29.020
+That'd be interesting to know.
+
+00:17:31.560 --> 00:17:34.940
+Haven't done that in class.
+
+00:17:39.240 --> 00:17:40.460
+So there's another question.
+
+00:17:41.240 --> 00:17:43.020
+Proportion of students that you think would
+
+00:17:43.020 --> 00:17:44.820
+keep on using Emacs after your course?
+
+00:17:44.820 --> 00:17:46.000
+That's not a difficult question,
+
+00:17:46.000 --> 00:17:47.880
+because as I said, I have very small classes.
+
+00:17:47.880 --> 00:17:49.200
+I've been here since 2 years.
+
+00:17:49.200 --> 00:17:51.540
+So I'm in touch with almost all the students.
+
+00:17:51.580 --> 00:17:54.760
+In fact, I'm getting them work after school.
+
+00:17:54.760 --> 00:17:55.980
+So that's really cool.
+
+00:17:56.200 --> 00:18:00.660
+And everybody who took to Emacs really
+
+00:18:00.660 --> 00:18:03.900
+seriously, so probably about 25% or so keep
+
+00:18:03.900 --> 00:18:06.160
+using Emacs after, afterwards.
+
+00:18:06.560 --> 00:18:08.360
+I mean, even in the job,
+
+00:18:08.360 --> 00:18:10.080
+right, in the professional field.
+
+00:18:10.680 --> 00:18:13.080
+Who, those who keep using Emacs after the
+
+00:18:13.080 --> 00:18:15.180
+course, I think the number is greater,
+
+00:18:15.180 --> 00:18:16.920
+but I have not followed up on that.
+
+00:18:16.920 --> 00:18:23.140
+I have to, my guess is more than half,
+
+00:18:23.140 --> 00:18:25.360
+I would say, half or more than half.
+
+00:18:26.660 --> 00:18:27.880
+Oh, Aaron, thank you so much.
+
+00:18:27.880 --> 00:18:31.320
+That's very sweet. But I didn't think the
+
+00:18:31.320 --> 00:18:32.300
+presentation was great.
+
+00:18:32.300 --> 00:18:33.840
+I was thinking about redoing it,
+
+00:18:33.840 --> 00:18:35.700
+but this is actually the first take.
+
+00:18:36.280 --> 00:18:38.860
+It was late, I had lots of other stuff to do.
+
+00:18:40.840 --> 00:18:44.700
+I think what I'm more interested in than
+
+00:18:44.700 --> 00:18:47.260
+papers is probably this idea of making
+
+00:18:48.320 --> 00:18:51.020
+Emacs-based data science videos because there
+
+00:18:51.020 --> 00:18:52.120
+aren't many out there.
+
+00:18:52.120 --> 00:18:53.600
+Most of the people who do,
+
+00:18:54.920 --> 00:18:57.240
+and computer science, most people who do that
+
+00:18:57.240 --> 00:18:59.240
+are not either developers and certainly not
+
+00:18:59.240 --> 00:19:02.080
+teachers. So I think that's a good idea.
+
+00:19:02.080 --> 00:19:03.740
+I'm gonna pick that up.
+
+00:19:03.860 --> 00:19:15.540
+So to do more Remax based data science videos
+
+00:19:19.120 --> 00:19:20.200
+Is there anything else?
+
+00:19:20.800 --> 00:19:22.360
+More people. There are some people here in
+
+00:19:22.360 --> 00:19:23.300
+the room still.
+
+00:19:23.800 --> 00:19:26.100
+[Speaker 2]: If you do a PSVL on work.
+
+00:19:27.040 --> 00:19:31.140
+What? Or wiki. What's my YouTube channel?
+
+00:19:34.460 --> 00:19:36.220
+[Speaker 1]: Oh, yeah, I'm going to give you the,
+
+00:19:36.560 --> 00:19:38.520
+I've got a bunch of different YouTube
+
+00:19:38.520 --> 00:19:40.720
+channels. I'm going to put them in the
+
+00:19:40.720 --> 00:19:43.240
+comments to my talk. Hold on,
+
+00:19:43.660 --> 00:19:46.500
+the 1 where I have the latest Emacs videos,
+
+00:19:46.640 --> 00:19:48.740
+you find my name, there's nobody in the world
+
+00:19:48.740 --> 00:19:51.060
+with my name. So if you look for Gerten Krag
+
+00:19:52.120 --> 00:19:55.740
+on YouTube, then you will find it.
+
+00:19:59.120 --> 00:20:00.300
+But I got a bunch of them.
+
+00:20:00.300 --> 00:20:01.900
+Hold on, I'm going to give you the...
+
+00:20:13.260 --> 00:20:20.040
+My channel. Okay, This 1 has only got a few
+
+00:20:20.220 --> 00:20:24.300
+videos. But so there's 1 with a lot more.
+
+00:20:25.380 --> 00:20:32.720
+Few recent videos. And I'm going to post
+
+00:20:32.740 --> 00:20:41.320
+more. Other ones in the comments of this
+
+00:20:41.320 --> 00:20:44.320
+video. Okay, what else?
+
+00:20:48.780 --> 00:20:51.140
+I'm trying to find my way back to the button.
+
+00:20:55.440 --> 00:20:59.200
+Okay, cool. Oh, yes, thank you.
+
+00:20:59.200 --> 00:21:01.500
+I will. That's very good.
+
+00:21:01.500 --> 00:21:03.120
+Thank you so much. Of course,
+
+00:21:03.120 --> 00:21:05.940
+I use Vork. I hadn't even thought of it.
+
+00:21:06.360 --> 00:21:15.140
+Very good. It's interesting,
+
+00:21:15.860 --> 00:21:18.020
+that's something that comes to my mind.
+
+00:21:18.120 --> 00:21:19.700
+When I was a young student,
+
+00:21:19.740 --> 00:21:24.020
+right, people who used Emacs and the web
+
+00:21:24.020 --> 00:21:25.920
+wasn't particularly large.
+
+00:21:25.960 --> 00:21:29.440
+So the volunteers would automatically make
+
+00:21:29.440 --> 00:21:31.420
+videos but not for commercial purposes.
+
+00:21:31.560 --> 00:21:34.740
+Now you have an army of people who make
+
+00:21:34.740 --> 00:21:37.700
+commercial videos and the videos are usually
+
+00:21:38.240 --> 00:21:41.020
+good for the first 10% of every content,
+
+00:21:41.040 --> 00:21:42.540
+but as soon as it gets a little more
+
+00:21:42.540 --> 00:21:44.760
+difficult, they either don't know what to do
+
+00:21:44.760 --> 00:21:48.600
+anymore or they don't do it because it's not
+
+00:21:48.600 --> 00:21:50.980
+commercially viable. The number of people who
+
+00:21:50.980 --> 00:21:53.720
+move on is gets smaller and smaller and
+
+00:21:53.720 --> 00:21:55.740
+smaller. So there's no commerce anymore.
+
+00:21:55.960 --> 00:21:57.840
+But when I was a student,
+
+00:21:58.740 --> 00:22:01.020
+pretty much all the documentation everywhere
+
+00:22:01.100 --> 00:22:02.360
+was created by volunteers,
+
+00:22:02.500 --> 00:22:04.840
+just like this conference or like anything in
+
+00:22:04.840 --> 00:22:09.520
+org mode. And that doesn't seem to be much of
+
+00:22:09.520 --> 00:22:12.760
+a trend anymore, but maybe we can resurrect
+
+00:22:12.860 --> 00:22:22.960
+it. So yes, I'm definitely gonna contribute
+
+00:22:22.960 --> 00:22:26.760
+to that. Multiple people are typing here.
+
+00:22:30.280 --> 00:22:36.180
+Oh, sorry. Yes. Thank you so much.
+
+00:22:37.060 --> 00:22:40.920
+I'm gonna put that, I'm gonna rectify that in
+
+00:22:40.920 --> 00:22:45.260
+the comment. Having said that,
+
+00:22:45.260 --> 00:22:49.820
+I am not 100% sure that I didn't lie here.
+
+00:22:50.500 --> 00:22:52.760
+May just be because I didn't have much time
+
+00:22:52.760 --> 00:22:54.340
+to put the presentation together.
+
+00:22:54.340 --> 00:22:56.820
+And it's perfectly possible that that's
+
+00:22:56.820 --> 00:22:59.760
+actually Google slides and not all reveal.
+
+00:23:00.040 --> 00:23:02.360
+In the classroom when I present and just do
+
+00:23:02.360 --> 00:23:04.100
+lectures, I always do reveal,
+
+00:23:04.600 --> 00:23:07.900
+but most of the time I do a tree slide.
+
+00:23:08.640 --> 00:23:10.840
+That's the quickest way to do it for me.
+
+00:23:10.840 --> 00:23:15.060
+So, so presentation. Hold on,
+
+00:23:15.060 --> 00:23:16.580
+Let me just copy this 1.
+
+00:23:17.960 --> 00:23:20.780
+Make sure that this doesn't get lost.
+
+00:23:21.880 --> 00:23:23.220
+Thank you so much for that.
+
+00:23:24.280 --> 00:23:26.100
+And presentations in class.
+
+00:23:28.780 --> 00:23:30.320
+I use sometimes org-present,
+
+00:23:30.660 --> 00:23:32.860
+but there are issues with the font sometimes.
+
+00:23:33.740 --> 00:23:36.960
+I use Treeslide most of the time and Org
+
+00:23:44.240 --> 00:23:44.740
+[Speaker 2]: tool.
+
+00:23:36.960 --> 00:23:46.780
+[Speaker 1]: Reveal. But this 1 is my top Of course,
+
+00:23:46.780 --> 00:23:49.140
+this is not org, so forget about that.
+
+00:24:02.660 --> 00:24:08.220
+Okay. Yeah, so you can send me your,
+
+00:24:10.680 --> 00:24:12.160
+you've got my email, I think,
+
+00:24:12.160 --> 00:24:14.060
+on the end, if you're interested in following
+
+00:24:14.060 --> 00:24:16.360
+up or letting me know about your stuff.
+
+00:24:16.680 --> 00:24:18.220
+It might be interesting to,
+
+00:24:18.480 --> 00:24:20.040
+I don't know, might be interesting to put
+
+00:24:20.040 --> 00:24:22.040
+together a conference or a little seminar
+
+00:24:22.040 --> 00:24:22.980
+just for educators.
+
+00:24:37.500 --> 00:24:39.025
+DF is still typing, I'm waiting.
+
+00:24:39.025 --> 00:24:39.780
+I'm waiting.
+
+00:24:44.840 --> 00:24:46.400
+[Speaker 2]: Actually, our mod maintainer,
+
+00:24:46.700 --> 00:24:52.340
+Bastien, was talking about possibility to
+
+00:24:52.340 --> 00:24:54.120
+have just org mod conference.
+
+00:24:55.760 --> 00:24:59.180
+But the question is, is it worth making a
+
+00:24:54.780 --> 00:25:02.940
+[Speaker 1]: Yeah. A whole separate 1 what?
+
+00:24:59.180 --> 00:25:05.020
+[Speaker 2]: whole separate 1? A whole separate org
+
+00:25:07.120 --> 00:25:09.600
+[Speaker 1]: Oh, I see. Yeah, probably would be.
+
+00:25:10.840 --> 00:25:11.340
+Actually.
+
+00:25:05.020 --> 00:25:13.940
+[Speaker 2]: dedicated conference. It's just like you see
+
+00:25:13.940 --> 00:25:15.980
+how EmacsConf is well done.
+
+00:25:16.800 --> 00:25:19.340
+So it's like creating anything that has good
+
+00:25:22.500 --> 00:25:25.540
+[Speaker 1]: Yes. No, I think that's a good idea.
+
+00:25:25.640 --> 00:25:26.620
+Yeah, I mean.
+
+00:25:19.340 --> 00:25:30.480
+[Speaker 2]: is tricky. I mean, Okay,
+
+00:25:30.480 --> 00:25:32.920
+it's anywhere, like half of Emacs is anywhere
+
+00:25:32.920 --> 00:25:36.880
+remote. So it's almost the same.
+
+00:25:37.500 --> 00:25:40.200
+[Speaker 1]: Yeah. Well, I suppose at this point,
+
+00:25:40.200 --> 00:25:41.520
+I don't know if that's what you mean.
+
+00:25:41.520 --> 00:25:45.020
+Org Mode is probably what attracts people to
+
+00:25:45.020 --> 00:25:47.040
+Emacs in the first place.
+
+00:25:47.040 --> 00:25:51.040
+Like, I suppose Org Roam is the,
+
+00:25:51.260 --> 00:25:54.600
+maybe the biggest 1 for people even outside
+
+00:25:54.600 --> 00:25:58.080
+of computer science. I use Org.ROM
+
+00:25:58.280 --> 00:26:02.760
+for everything. But there are...
+
+00:26:04.760 --> 00:26:05.840
+I mean, the thresholds...
+
+00:26:06.220 --> 00:26:07.900
+I think that the maintainer or maybe the
+
+00:26:07.900 --> 00:26:10.520
+creator of Org.MODE has claimed and said for
+
+00:26:10.520 --> 00:26:13.140
+many years that Org Mode itself doesn't
+
+00:26:13.140 --> 00:26:14.680
+actually necessarily need Emacs.
+
+00:26:14.680 --> 00:26:17.360
+You can have it as a completely separate
+
+00:26:17.360 --> 00:26:19.740
+application as well. But I,
+
+00:26:19.760 --> 00:26:21.040
+for a number of reasons,
+
+00:26:21.040 --> 00:26:23.440
+I don't like that. I really like the idea to
+
+00:26:28.434 --> 00:26:30.620
+[Speaker 2]: why- The current strategy is that It has to
+
+00:26:30.620 --> 00:26:33.580
+be Emacs because the configurability is 1 of
+
+00:26:33.580 --> 00:26:35.140
+the strong points anyway.
+
+00:26:23.440 --> 00:26:35.820
+[Speaker 1]: have it inside Emacs. The reason That's true.
+
+00:26:35.820 --> 00:26:37.620
+[Speaker 2]: You cannot make a separate application.
+
+00:26:37.840 --> 00:26:38.080
+No,
+
+00:26:38.080 --> 00:26:39.800
+[Speaker 1]: that's true. I was going to say that.
+
+00:26:39.800 --> 00:26:41.500
+The thing is you use the flexibility.
+
+00:26:41.680 --> 00:26:43.220
+Plus, you also use the,
+
+00:26:43.440 --> 00:26:46.080
+I don't know if that's the right word,
+
+00:26:46.080 --> 00:26:48.760
+but you use there's something about the free
+
+00:26:48.760 --> 00:26:52.600
+ideology of Emacs that is what attracted me
+
+00:26:52.600 --> 00:26:56.260
+to it in the first place when I was younger
+
+00:26:56.460 --> 00:27:00.290
+and that I find even more important now.
+
+00:27:00.765 --> 00:27:03.520
+So what they say the community aspect,
+
+00:27:06.220 --> 00:27:08.800
+the reason, the main reason why Python is so
+
+00:27:08.800 --> 00:27:13.100
+big today, really. So yeah.
+
+00:27:15.060 --> 00:27:17.860
+[Speaker 2]: But in terms of going out of Emacs,
+
+00:27:17.860 --> 00:27:21.300
+it's org syntax that is supposed to be like
+
+00:27:21.820 --> 00:27:23.260
+breaking out of Emacs.
+
+00:27:24.960 --> 00:27:28.860
+So like there's a plan to lay out the actual
+
+00:27:28.860 --> 00:27:31.420
+standard document so that you can register
+
+00:27:31.440 --> 00:27:32.540
+the format officially.
+
+00:27:23.860 --> 00:27:34.760
+[Speaker 1]: Yeah. Yeah, I think I've heard that too.
+
+00:27:34.760 --> 00:27:36.560
+I've not followed up on it much.
+
+00:27:36.880 --> 00:27:39.320
+I don't know what the,
+
+00:27:39.400 --> 00:27:41.260
+I mean, that probably would,
+
+00:27:41.480 --> 00:27:43.040
+it would strength, very likely,
+
+00:27:43.040 --> 00:27:45.100
+if you do that, it would at least for a short
+
+00:27:45.100 --> 00:27:47.660
+time, strengthen org mode and weaken emacs.
+
+00:27:49.420 --> 00:27:50.880
+I don't know what other examples,
+
+00:27:51.580 --> 00:27:54.660
+if there are other examples of applications
+
+00:27:55.120 --> 00:27:57.840
+pulled out of IDEs like that.
+
+00:27:57.840 --> 00:27:59.480
+I'm not aware of any others.
+
+00:28:00.300 --> 00:28:02.680
+[Speaker 2]: Actually, people are trying to make
+
+00:28:02.680 --> 00:28:04.920
+three-seater drama. People are trying to make
+
+00:28:04.920 --> 00:28:06.240
+like some external parsers,
+
+00:28:06.460 --> 00:28:10.320
+a lot of them. And a lot of stuff is done on
+
+00:28:10.320 --> 00:28:12.940
+mobile part. I can draw it to iOS,
+
+00:28:13.440 --> 00:28:17.780
+especially recently. So things that are Emacs
+
+00:28:17.780 --> 00:28:19.780
+independent are demanded.
+
+00:28:20.660 --> 00:28:23.040
+[Speaker 1]: Okay, yeah. I have no doubt that there is a
+
+00:28:25.440 --> 00:28:26.620
+[Speaker 2]: Especially in the environment,
+
+00:28:27.040 --> 00:28:28.040
+like every time.
+
+00:28:23.040 --> 00:28:30.680
+[Speaker 1]: demand. Yeah. I mean, I didn't get into that
+
+00:28:30.680 --> 00:28:35.020
+very much. I have some of my students have 0
+
+00:28:35.020 --> 00:28:36.900
+affinity with computers.
+
+00:28:38.240 --> 00:28:39.900
+They really don't know their way around their
+
+00:28:39.900 --> 00:28:44.320
+computers at all. And so for them,
+
+00:28:46.860 --> 00:28:51.440
+It is quite important to learn how to find
+
+00:28:51.440 --> 00:28:56.520
+your way around Emacs because it's like a
+
+00:28:56.520 --> 00:28:57.820
+little operating system,
+
+00:28:57.920 --> 00:29:00.300
+but it's not. It's an operating system
+
+00:29:00.300 --> 00:29:03.960
+without much of the obscurity.
+
+00:29:05.080 --> 00:29:07.960
+And the alternative to that would be to
+
+00:29:07.960 --> 00:29:10.520
+simply let them work only on the command
+
+00:29:10.520 --> 00:29:12.480
+line, which is another possibility.
+
+00:29:13.480 --> 00:29:16.160
+But, you know, there of course you are
+
+00:29:16.160 --> 00:29:20.540
+limited with regard to if you want to swap
+
+00:29:20.540 --> 00:29:23.500
+languages. So for example,
+
+00:29:23.940 --> 00:29:26.000
+quite often I find myself in the situation I
+
+00:29:26.000 --> 00:29:28.780
+teach data science in R and Python and in
+
+00:29:28.780 --> 00:29:31.520
+Emacs org mode I can demonstrate both of
+
+00:29:31.520 --> 00:29:35.100
+these side by side in the same file.
+
+00:29:35.280 --> 00:29:38.700
+And that's a great advantage.
+
+00:29:39.800 --> 00:29:42.540
+Not to overburden the students when they are
+
+00:29:43.060 --> 00:29:45.100
+at the beginning with things that you don't
+
+00:29:45.100 --> 00:29:47.620
+want them to necessarily learn about.
+
+00:29:48.480 --> 00:29:51.000
+And plus the thing what I like as a graduate
+
+00:29:51.000 --> 00:29:54.440
+student when I stepped onto Emacs was that it
+
+00:29:54.440 --> 00:30:00.140
+was infinite possibilities to lose myself in
+
+00:30:00.140 --> 00:30:03.060
+Emacs and you know go on and learn more stuff
+
+00:30:03.060 --> 00:30:06.680
+about it. But it's such a long time ago that
+
+00:30:07.300 --> 00:30:10.360
+I barely dare to mention it anymore.
+
+00:30:11.600 --> 00:30:12.880
+[Speaker 2]: For command line, actually,
+
+00:30:12.880 --> 00:30:17.080
+it's since the Jupyter notebooks and that
+
+00:30:17.080 --> 00:30:19.400
+Google thing they are running.
+
+00:30:20.820 --> 00:30:23.820
+It's getting so popular that it's clear that
+
+00:30:23.820 --> 00:30:26.760
+command line is just losing in popularity in
+
+00:30:28.580 --> 00:30:31.920
+[Speaker 1]: well, yes and no. I mean,
+
+00:30:26.760 --> 00:30:33.360
+[Speaker 2]: this. Yeah, of course,
+
+00:30:36.100 --> 00:30:38.400
+Not the usage. People are still using it,
+
+00:30:38.400 --> 00:30:38.900
+obviously.
+
+00:30:39.520 --> 00:30:41.020
+[Speaker 1]: I mean, in Google Colab,
+
+00:30:41.200 --> 00:30:43.620
+only the paid version allows you to go to the
+
+00:30:43.620 --> 00:30:45.460
+terminal and use the command line.
+
+00:30:46.620 --> 00:30:48.580
+But of course, the traction,
+
+00:30:48.580 --> 00:30:50.140
+and I think that's kind of interesting,
+
+00:30:50.660 --> 00:30:54.680
+1 of the reasons why IPython or any of the
+
+00:30:54.680 --> 00:30:56.960
+Jupyter notebooks are so cool is because you
+
+00:30:56.960 --> 00:30:59.940
+can use a lot of shell commands from the
+
+00:31:00.240 --> 00:31:05.080
+IPython shell. There's a whole bunch of magic
+
+00:31:05.080 --> 00:31:07.000
+commands which are quite powerful.
+
+00:31:07.040 --> 00:31:10.020
+I mean the the 1 that comes to mind is time.
+
+00:31:10.680 --> 00:31:12.940
+The time command for example you know gives
+
+00:31:12.940 --> 00:31:15.720
+you a really nice performance quick
+
+00:31:15.720 --> 00:31:17.660
+performance check. There's a bunch of
+
+00:31:17.660 --> 00:31:19.780
+different, I think probably close to a
+
+00:31:19.780 --> 00:31:22.340
+hundred magic commands that you can use in
+
+00:31:22.340 --> 00:31:25.600
+Jupyter. But I don't know JupyterLab too
+
+00:31:25.600 --> 00:31:28.840
+well, but I noticed that the companies that
+
+00:31:28.840 --> 00:31:31.080
+do online training, And they are usually the
+
+00:31:31.080 --> 00:31:34.920
+ones that are closest to what beginners want,
+
+00:31:34.920 --> 00:31:36.100
+especially in business.
+
+00:31:36.280 --> 00:31:38.220
+And what those companies do is they,
+
+00:31:38.560 --> 00:31:41.720
+you know, they take, they take JupyterLab and
+
+00:31:41.720 --> 00:31:43.740
+turn it into a presentation of their own.
+
+00:31:43.740 --> 00:31:45.320
+Another 1 is Notable, notable.io.
+
+00:31:46.840 --> 00:31:49.900
+That's another 1. They took JupyterLab and
+
+00:31:49.900 --> 00:31:51.320
+turned it into something commercial.
+
+00:31:51.340 --> 00:31:52.920
+It's boosted up a little bit.
+
+00:31:55.840 --> 00:32:00.480
+And so the shell inside the JupyterLab has
+
+00:32:00.480 --> 00:32:03.120
+some of the most more important shell
+
+00:32:03.120 --> 00:32:05.440
+properties. And so people still use the
+
+00:32:05.440 --> 00:32:07.080
+command line without knowing that they use
+
+00:32:07.080 --> 00:32:13.100
+the command line. But I also like doing,
+
+00:32:13.680 --> 00:32:15.300
+how do I use org-roam?
+
+00:32:19.360 --> 00:32:22.020
+Well, I use it, I do not have not used it
+
+00:32:22.020 --> 00:32:23.000
+with the students yet,
+
+00:32:23.000 --> 00:32:25.020
+only the best students have sort of seen me
+
+00:32:25.020 --> 00:32:29.780
+use it and copied it. But I use it probably
+
+00:32:29.780 --> 00:32:32.000
+in a very naive, trivial way.
+
+00:32:32.000 --> 00:32:33.620
+I can't say that I am,
+
+00:32:34.300 --> 00:32:36.960
+that I have a very sophisticated use.
+
+00:32:37.200 --> 00:32:39.640
+I basically, I like the fact that,
+
+00:32:39.640 --> 00:32:43.100
+I mean, it's built on the original concept of
+
+00:32:43.100 --> 00:32:44.540
+the, with the German word,
+
+00:32:44.540 --> 00:32:48.280
+Zettelkasten, right? Which is that you do not
+
+00:32:48.280 --> 00:32:50.940
+have to think about a taxonomy because as you
+
+00:32:50.940 --> 00:32:53.800
+move along, your taxonomy changes all the
+
+00:32:53.800 --> 00:32:55.580
+time. You know, what you think is important
+
+00:32:55.580 --> 00:32:57.320
+at the beginning, your root node,
+
+00:32:57.440 --> 00:32:58.940
+as you go along, you realize,
+
+00:32:58.940 --> 00:33:00.680
+oh, that's not the root node at all.
+
+00:33:00.680 --> 00:33:02.640
+There's a higher level and a higher level.
+
+00:33:02.640 --> 00:33:04.740
+And some of the lower levels are at the lower
+
+00:33:04.740 --> 00:33:06.300
+level, actually the higher level.
+
+00:33:06.320 --> 00:33:10.460
+So you're beginning to create hierarchies
+
+00:33:10.760 --> 00:33:14.340
+that are out of date as soon as you create
+
+00:33:14.340 --> 00:33:16.360
+the hierarchy. So what is the idea of the
+
+00:33:16.360 --> 00:33:18.480
+tittle custom is that anything that comes to
+
+00:33:18.480 --> 00:33:21.100
+your mind you can throw in the custom the box
+
+00:33:21.160 --> 00:33:26.580
+it literally means Box of notes and That's
+
+00:33:26.580 --> 00:33:27.740
+what I appreciate about it.
+
+00:33:27.740 --> 00:33:32.920
+So I create a I create a note pretty much for
+
+00:33:32.920 --> 00:33:35.780
+anything I do, but I've only used it for
+
+00:33:35.860 --> 00:33:38.160
+about a year and a half or so,
+
+00:33:38.220 --> 00:33:39.740
+or grown, maybe a year.
+
+00:33:40.680 --> 00:33:43.700
+So I can see that I'm coming up against the
+
+00:33:43.700 --> 00:33:46.980
+Zettelkasten or note box problems,
+
+00:33:47.120 --> 00:33:50.860
+which is that I've got so many notes now that
+
+00:33:50.860 --> 00:33:52.960
+unless I have clever aliases,
+
+00:33:54.180 --> 00:33:56.680
+there is a chance that I might forget that I
+
+00:33:58.820 --> 00:34:00.400
+[Speaker 2]: That's why you need meta notes.
+
+00:33:56.680 --> 00:34:01.600
+[Speaker 1]: have a note. So I need a- Yes,
+
+00:34:02.780 --> 00:34:04.920
+[Speaker 2]: In other words, a summarization is important,
+
+00:34:04.940 --> 00:34:06.800
+no matter what system you use.
+
+00:34:01.740 --> 00:34:09.739
+[Speaker 1]: yes. But what I'm trying to say is that's a
+
+00:34:09.739 --> 00:34:11.260
+different approach than hierarchies,
+
+00:34:11.480 --> 00:34:13.620
+right? It's the same, it's the same,
+
+00:34:13.620 --> 00:34:15.960
+it's the same principle as a relational
+
+00:34:16.080 --> 00:34:18.719
+database versus a hierarchical database.
+
+00:34:19.120 --> 00:34:23.360
+Same thing. So, yeah, and I've not used that.
+
+00:34:23.360 --> 00:34:25.400
+I've not really used, actually I have cut
+
+00:34:25.400 --> 00:34:27.020
+meta notes, of course I do.
+
+00:34:27.100 --> 00:34:29.000
+So notes that point to other notes.
+
+00:34:29.487 --> 00:34:34.924
+Yes, of course. I use those.
+
+00:34:35.412 --> 00:34:38.800
+I have not taught that part to the students
+
+00:34:38.880 --> 00:34:42.860
+because I do project work with the students,
+
+00:34:45.040 --> 00:34:46.320
+but there's only so much time.
+
+00:34:46.320 --> 00:34:48.219
+I'm already, I mean, already,
+
+00:34:48.340 --> 00:34:51.000
+I don't think there's any class that where I
+
+00:34:51.000 --> 00:34:55.860
+am able to use more than 30% of my material.
+
+00:34:55.880 --> 00:34:57.620
+And the reason is that when the students come
+
+00:34:57.620 --> 00:34:59.220
+to class, which is I pointed out in the
+
+00:34:59.220 --> 00:35:01.100
+video, they know so little.
+
+00:35:01.840 --> 00:35:03.720
+And most of the students,
+
+00:35:03.720 --> 00:35:04.960
+at least in liberal arts,
+
+00:35:04.960 --> 00:35:10.280
+spend just too little time outside of class,
+
+00:35:10.760 --> 00:35:11.600
+getting there, you know,
+
+00:35:11.600 --> 00:35:13.040
+drilling down into the,
+
+00:35:13.040 --> 00:35:14.640
+into the, into the infrastructure,
+
+00:35:14.860 --> 00:35:17.060
+into the work. Only, only the best students
+
+00:35:17.060 --> 00:35:19.320
+do that. The ones that really catch fire.
+
+00:35:20.080 --> 00:35:22.280
+[Speaker 2]: Don't you have something like a course
+
+00:35:22.280 --> 00:35:23.760
+project at the end?
+
+00:35:24.140 --> 00:35:25.760
+[Speaker 1]: Yes, I have course, not at the end.
+
+00:35:25.760 --> 00:35:27.720
+I use Scrum. Maybe I shouldn't,
+
+00:35:27.720 --> 00:35:29.640
+but I've used Scrum for many years.
+
+00:35:30.040 --> 00:35:32.600
+So I have course projects that start at the
+
+00:35:32.600 --> 00:35:35.280
+beginning and they do sprint reviews every 3
+
+00:35:35.280 --> 00:35:40.640
+or 4 weeks. So term end projects I find
+
+00:35:40.640 --> 00:35:43.080
+completely useless because the students do
+
+00:35:43.080 --> 00:35:45.060
+the work at the very end of the term.
+
+00:35:46.220 --> 00:35:49.600
+[Speaker 2]: no, by determined I mean they don't start at
+
+00:35:49.600 --> 00:35:51.880
+the end, they just report at the end.
+
+00:35:45.060 --> 00:35:52.960
+[Speaker 1]: And so I... Oh I use the IMRAD,
+
+00:35:52.960 --> 00:35:54.300
+I use the IMRAD method.
+
+00:35:54.340 --> 00:35:58.160
+So I use IMRAD, basically IMRAD plus,
+
+00:35:58.700 --> 00:36:00.300
+plus Scrum, right? So,
+
+00:36:00.300 --> 00:36:02.220
+So the first sprint review is introductory,
+
+00:36:02.500 --> 00:36:03.480
+the research proposal,
+
+00:36:03.540 --> 00:36:05.040
+the second 1 is about methodology,
+
+00:36:05.060 --> 00:36:06.360
+the third 1 about results,
+
+00:36:06.360 --> 00:36:08.040
+and the last 1 is their final presentation.
+
+00:36:09.000 --> 00:36:11.100
+And so that's the way I manage the projects,
+
+00:36:11.160 --> 00:36:16.040
+but that's about as much as I can do with
+
+00:36:16.040 --> 00:36:17.640
+them. It's a good idea.
+
+00:36:17.640 --> 00:36:19.780
+I hadn't even thought about using Org-ROM
+
+00:36:19.900 --> 00:36:22.760
+with them, but to teach them that might be a
+
+00:36:22.760 --> 00:36:24.180
+good idea, actually.
+
+00:36:25.360 --> 00:36:27.220
+[Speaker 2]: Well, for Org-ROM, actually,
+
+00:36:27.400 --> 00:36:32.360
+what I found useful during my graduate is for
+
+00:36:32.360 --> 00:36:34.740
+literature review. Yes.
+
+00:36:34.960 --> 00:36:37.360
+The other part of our program that is not
+
+00:36:37.360 --> 00:36:40.580
+about your like noting down your thoughts is
+
+00:36:40.580 --> 00:36:42.900
+about writing about literature notes.
+
+00:36:43.780 --> 00:36:45.480
+[Speaker 1]: Yeah, that's a good idea actually.
+
+00:36:45.480 --> 00:36:46.320
+And of course, I mean,
+
+00:36:46.320 --> 00:36:48.180
+there's more stuff that they should learn,
+
+00:36:48.180 --> 00:36:50.140
+you know, like another 1,
+
+00:36:50.140 --> 00:36:51.780
+since you mentioned literature,
+
+00:36:52.420 --> 00:36:54.640
+you know, latex and Bibtech is another
+
+00:36:55.760 --> 00:36:57.840
+obvious extension of that.
+
+00:36:58.780 --> 00:37:01.120
+But that is actually a good idea because the
+
+00:37:01.120 --> 00:37:03.080
+literature is what they have the hardest time
+
+00:37:04.640 --> 00:37:06.980
+[Speaker 2]: Yeah, like when you need to read like 50
+
+00:37:06.980 --> 00:37:07.480
+papers.
+
+00:37:03.080 --> 00:37:12.480
+[Speaker 1]: with. Last term, since you mentioned that,
+
+00:37:12.480 --> 00:37:16.220
+I had a really nice experience because 1 of
+
+00:37:16.220 --> 00:37:18.300
+our librarians, our digital librarian,
+
+00:37:18.420 --> 00:37:19.920
+came along and talked to the students,
+
+00:37:19.920 --> 00:37:21.580
+and he taught me about a tool called
+
+00:37:21.580 --> 00:37:23.540
+litmap.com, which is basically,
+
+00:37:24.140 --> 00:37:25.420
+I don't know how it's implemented,
+
+00:37:25.460 --> 00:37:27.180
+but it's basically a graph,
+
+00:37:28.140 --> 00:37:31.620
+a graph representation of papers organized by
+
+00:37:31.620 --> 00:37:35.580
+citation. It's very, very cool.
+
+00:37:35.900 --> 00:37:38.480
+And the students who used to only find,
+
+00:37:38.480 --> 00:37:41.080
+I don't know, 1 paper and otherwise,
+
+00:37:41.180 --> 00:37:44.880
+of course, 15 YouTube videos and 100 blogs,
+
+00:37:45.380 --> 00:37:49.360
+suddenly started finding and reading
+
+00:37:49.540 --> 00:37:52.120
+scientific papers. It was only because of
+
+00:37:52.120 --> 00:37:54.900
+this presentation. So you should take the,
+
+00:37:55.640 --> 00:37:57.580
+I think, I hope that is the right,
+
+00:37:58.320 --> 00:37:59.560
+that's the right mode,
+
+00:38:00.280 --> 00:38:02.380
+litmaps. Okay, it's not litmap,
+
+00:38:02.380 --> 00:38:05.640
+it's called Litmaps. I'm gonna give you an
+
+00:38:05.640 --> 00:38:09.000
+example. I don't know if I can share this,
+
+00:38:09.000 --> 00:38:10.240
+if you can look at that.
+
+00:38:10.240 --> 00:38:13.640
+But basically you create a,
+
+00:38:13.860 --> 00:38:16.580
+1 can use 1 of your papers as a seed,
+
+00:38:16.800 --> 00:38:18.840
+and then it will create a graph,
+
+00:38:19.660 --> 00:38:21.760
+graph representation of it for you.
+
+00:38:21.960 --> 00:38:25.220
+And this is a powerful tool in itself.
+
+00:38:25.400 --> 00:38:27.600
+But what I'm saying is that the students
+
+00:38:27.620 --> 00:38:30.900
+suddenly, their use of literature and that
+
+00:38:30.900 --> 00:38:32.560
+citation goes to the roof.
+
+00:38:33.080 --> 00:38:35.680
+And I've been waiting for that for probably
+
+00:38:36.140 --> 00:38:38.300
+15 years since I've started teaching.
+
+00:38:38.760 --> 00:38:43.420
+It's crazy. That's really cool.
+
+00:38:46.500 --> 00:38:47.720
+[Speaker 2]: Here is the same tool,
+
+00:38:47.720 --> 00:38:49.400
+it's called connected papers.
+
+00:38:49.440 --> 00:38:53.540
+It's based on the open source citation data.
+
+00:38:54.140 --> 00:38:56.340
+[Speaker 1]: Yeah, I know that as well,
+
+00:38:56.500 --> 00:38:57.180
+I think.
+
+00:39:00.060 --> 00:39:01.560
+[Speaker 2]: It's actually very useful when you just start
+
+00:39:01.560 --> 00:39:03.960
+learning the topic. It's like you find 1
+
+00:39:03.960 --> 00:39:05.800
+paper, then you look into the connections.
+
+00:39:05.800 --> 00:39:08.260
+You can quickly narrow down to the most
+
+00:39:08.260 --> 00:39:09.500
+cited, the core papers.
+
+00:39:10.840 --> 00:39:12.500
+[Speaker 1]: Of course. And that is exactly their
+
+00:39:12.500 --> 00:39:14.800
+situation, you know, and they're always at
+
+00:39:14.800 --> 00:39:16.740
+the beginning. As you go on,
+
+00:39:17.280 --> 00:39:18.680
+you develop different ways,
+
+00:39:18.680 --> 00:39:20.140
+but for these complete beginners,
+
+00:39:20.200 --> 00:39:22.680
+that's a good idea. Thank you so much for
+
+00:39:22.680 --> 00:39:30.520
+that. Okay, guys, anything else?
+
+00:39:31.240 --> 00:39:32.440
+I've enjoyed the conversation,
+
+00:39:32.920 --> 00:39:33.960
+so you should definitely,
+
+00:39:36.000 --> 00:39:37.940
+I'm going to take some of these things away.
+
+00:39:38.800 --> 00:39:42.340
+Thank you so much for that.
+
+00:39:42.340 --> 00:39:45.740
+Have you done, Yanta, have you done org mode
+
+00:39:46.300 --> 00:39:48.200
+documentations yourself on WOC?
+
+00:39:48.900 --> 00:39:52.120
+Or do you have a sort of a favorite 1?
+
+00:39:52.120 --> 00:39:53.600
+I mean, I often on walk,
+
+00:39:53.600 --> 00:39:56.740
+I often use the documentation for code
+
+00:39:56.740 --> 00:39:59.620
+blocks. I used to when I started doing that
+
+00:40:00.760 --> 00:40:02.800
+[Speaker 2]: Yeah, because it's only on work.
+
+00:40:02.800 --> 00:40:04.260
+It's not part of the manual.
+
+00:39:59.620 --> 00:40:05.280
+[Speaker 1]: for the first time. Yeah,
+
+00:40:05.280 --> 00:40:07.440
+yeah. And so I've used that a lot.
+
+00:40:07.780 --> 00:40:09.560
+[Speaker 2]: Have I done? Not really,
+
+00:40:09.720 --> 00:40:11.460
+mostly fixing the errors.
+
+00:40:12.260 --> 00:40:12.760
+Okay.
+
+00:40:14.280 --> 00:40:16.100
+[Speaker 1]: Yeah, I think that's a really good idea.
+
+00:40:16.440 --> 00:40:19.780
+All right. Well, thank you very much.
+
+00:40:19.960 --> 00:40:22.360
+And it's great to be at this conference.
+
+00:40:22.360 --> 00:40:24.440
+I think I'm going to get on.
+
+00:40:27.660 --> 00:40:29.240
+[Speaker 2]: Thanks for answering all the questions.
+
+00:40:29.840 --> 00:40:32.560
+And for the talk, It was quite interesting to
+
+00:40:32.560 --> 00:40:35.660
+see our modules in actual teaching.
+
+00:40:36.200 --> 00:40:38.600
+[Speaker 1]: Yes, thank you. And I got to thank Daniel
+
+00:40:38.600 --> 00:40:40.840
+German from Canada, the 1 of,
+
+00:40:40.840 --> 00:40:43.660
+I had him on 1 of the slides because he,
+
+00:40:43.660 --> 00:40:45.380
+he inspired me to do that.
+
+00:40:45.380 --> 00:40:47.540
+And, and I wouldn't be at the conference if I
+
+00:40:47.540 --> 00:40:49.480
+hadn't contacted him and said oh here's my
+
+00:40:49.480 --> 00:40:50.980
+paper and he said oh you should come to the
+
+00:40:50.980 --> 00:40:52.680
+conference and so that's why I came to the
+
+00:40:52.680 --> 00:40:58.480
+conference. Thank you very much and as they
+
+00:40:58.480 --> 00:41:04.100
+say keep in touch. You're welcome.
+
+00:41:04.100 --> 00:41:05.060
+Okay bye-bye. You're welcome.
+
+00:41:05.060 --> 00:41:15.820
+Okay, bye-bye. Take a copy of the chat before
+
+00:41:15.820 --> 00:41:22.360
+you go, if you can. Happy weekend to just bye
+
+00:41:22.360 --> 00:41:22.860
+bye.
+
+00:41:34.920 --> 00:41:36.840
+[Speaker 0]: You are currently the only person in this
+
+00:41:36.840 --> 00:41:37.340
+conference.
+
+00:42:00.060 --> 00:42:00.560
+[Speaker 1]: You
diff --git a/2023/captions/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--main--chapters.vtt b/2023/captions/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--main--chapters.vtt
new file mode 100644
index 00000000..6674a23c
--- /dev/null
+++ b/2023/captions/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--main--chapters.vtt
@@ -0,0 +1,53 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:54.159
+Introduction
+
+00:00:54.160 --> 00:02:08.039
+My interest in this topic
+
+00:02:08.040 --> 00:03:47.639
+What is data science?
+
+00:03:47.640 --> 00:04:52.839
+Computer science is a craft
+
+00:04:52.840 --> 00:05:36.559
+The problem
+
+00:05:36.560 --> 00:06:24.119
+The solution: Emacs + Org-mode
+
+00:06:24.120 --> 00:07:30.359
+Emacs configuration file
+
+00:07:30.360 --> 00:08:22.039
+Story + code = source + documentation
+
+00:08:22.040 --> 00:09:59.879
+What is literate programming?
+
+00:09:59.880 --> 00:11:18.959
+Emacs as a literate programming tool
+
+00:11:18.960 --> 00:12:11.279
+Case study: basic setup
+
+00:12:11.280 --> 00:12:45.799
+Emacs + Org-mode notebooks
+
+00:12:45.800 --> 00:13:40.839
+Onboarding: simplified Emacs tutorial
+
+00:13:40.840 --> 00:14:48.719
+Instruction + interaction
+
+00:14:48.720 --> 00:16:15.279
+Assignments + projects
+
+00:16:15.280 --> 00:18:19.799
+Overall results positive
+
+00:18:19.800 --> 00:19:27.280
+Conclusion & outlook
diff --git a/2023/captions/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--main.vtt b/2023/captions/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--main.vtt
new file mode 100644
index 00000000..560be0c6
--- /dev/null
+++ b/2023/captions/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--main.vtt
@@ -0,0 +1,1193 @@
+WEBVTT captioned by sachac, checked by sachac
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:04.519
+Welcome to my talk, which is pre-recorded,
+
+00:00:04.520 --> 00:00:06.959
+so please don't blame me if I come across
+
+00:00:06.960 --> 00:00:08.599
+as wooden and humorless.
+
+00:00:08.600 --> 00:00:11.319
+It's hard to work up any emotion
+
+00:00:11.320 --> 00:00:13.879
+when looking at a mechanical eye.
+
+00:00:13.880 --> 00:00:15.039
+Of course, I am German,
+
+00:00:15.040 --> 00:00:18.639
+so I am pretty wooden and humorless to begin with.
+
+00:00:18.640 --> 00:00:20.439
+What else do you need to know about me?
+
+00:00:20.440 --> 00:00:23.319
+Not much, I suppose, except that I have been
+
+00:00:23.320 --> 00:00:25.199
+an Emacs user on and off
+
+00:00:25.200 --> 00:00:26.919
+since my days as a graduate student
+
+00:00:26.920 --> 00:00:30.079
+in theoretical physics in the 1990s.
+
+00:00:30.080 --> 00:00:34.679
+I picked Emacs and Org Mode up again
+
+00:00:34.680 --> 00:00:36.239
+for teaching during COVID
+
+00:00:36.240 --> 00:00:38.039
+when I had a lot of time on my hands,
+
+00:00:38.040 --> 00:00:40.359
+and when the teaching and learning needs shifted
+
+00:00:40.360 --> 00:00:44.239
+because of the exclusive online teaching.
+
+00:00:44.240 --> 00:00:48.199
+Now I'm going to take my picture away.
+
+00:00:48.200 --> 00:00:49.559
+You had a good look at me.
+
+00:00:49.560 --> 00:00:54.159
+I think that's just going to be in the way.
+
+NOTE My interest in this topic
+
+00:00:54.160 --> 00:00:57.279
+So my interest in this topic began with
+
+00:00:57.280 --> 00:00:59.279
+an Emacs talk given by Daniel German
+
+00:00:59.280 --> 00:01:04.119
+from the University of Victoria in Canada in 2021.
+
+00:01:04.120 --> 00:01:06.439
+Daniel demonstrated in detail
+
+00:01:06.440 --> 00:01:09.199
+how he uses Emacs and Org Mode
+
+00:01:09.200 --> 00:01:12.119
+to prepare and deliver lectures
+
+00:01:12.120 --> 00:01:14.199
+on different programming languages.
+
+00:01:14.200 --> 00:01:16.319
+This gave me the idea to try the same thing
+
+00:01:16.320 --> 00:01:19.999
+with my students with an important alteration.
+
+00:01:20.000 --> 00:01:23.559
+I wanted to force them to use Emacs and Org Mode
+
+00:01:23.560 --> 00:01:25.959
+just as most computer science instructors
+
+00:01:25.960 --> 00:01:29.079
+force their students to use whatever they are using
+
+00:01:29.080 --> 00:01:32.359
+when they develop their material.
+
+00:01:32.360 --> 00:01:36.839
+I carried my plan out and mandated Emacs and Org Mode
+
+00:01:36.840 --> 00:01:40.359
+as the only programming platform and IDE
+
+00:01:40.360 --> 00:01:43.639
+for three consecutive terms in all my courses,
+
+00:01:43.640 --> 00:01:45.919
+nine courses in total.
+
+00:01:45.920 --> 00:01:47.799
+I will give more details later.
+
+00:01:47.800 --> 00:01:49.919
+I published my results as a case study
+
+00:01:49.920 --> 00:01:52.279
+in September of this year,
+
+00:01:52.280 --> 00:01:53.639
+and it contains the missing bits
+
+00:01:53.640 --> 00:01:56.159
+that I will not talk about today for lack of time,
+
+00:01:56.160 --> 00:01:58.639
+especially regarding the methodology,
+
+00:01:58.640 --> 00:02:00.119
+the assessment, et cetera.
+
+00:02:00.120 --> 00:02:04.999
+Please also use the Q&A to inquire about such details
+
+00:02:05.000 --> 00:02:08.039
+if they interest you.
+
+NOTE What is data science?
+
+00:02:08.040 --> 00:02:12.799
+I probably don't have to explain what computer science is,
+
+00:02:12.800 --> 00:02:16.359
+but not everyone may know what data science does.
+
+00:02:16.360 --> 00:02:18.239
+I teach courses in both disciplines
+
+00:02:18.240 --> 00:02:20.559
+and the boundaries between them are blurred,
+
+00:02:20.560 --> 00:02:22.639
+so much of what I'm saying about data science
+
+00:02:22.640 --> 00:02:24.719
+will also be relevant for computer science.
+
+00:02:24.720 --> 00:02:29.359
+Conceptually, data science is an interdisciplinary affair
+
+00:02:29.360 --> 00:02:31.999
+that intersects with computer science
+
+00:02:32.000 --> 00:02:34.959
+and with whatever it is that the data scientist
+
+00:02:34.960 --> 00:02:39.159
+or his or her clients know very well; their domain.
+
+00:02:39.160 --> 00:02:42.679
+Because of this interdisciplinary character,
+
+00:02:42.680 --> 00:02:45.399
+and because their focus is on the data
+
+00:02:45.400 --> 00:02:48.119
+rather than only on algorithms or mathematics,
+
+00:02:48.120 --> 00:02:52.719
+successful data scientists need to be more broadly educated
+
+00:02:52.720 --> 00:02:56.199
+than specialists in computer science or statistics.
+
+00:02:56.200 --> 00:03:00.519
+In particular, there's a need to master
+
+00:03:00.520 --> 00:03:03.479
+the entire so-called data science pipeline:
+
+00:03:03.480 --> 00:03:06.079
+from data cleaning, which you see
+
+00:03:06.080 --> 00:03:08.879
+on the very left in this slide,
+
+00:03:08.880 --> 00:03:12.119
+over coding, to statistical modeling,
+
+00:03:12.120 --> 00:03:14.719
+and to data storytelling through visualization,
+
+00:03:14.720 --> 00:03:17.159
+which you see on the very right.
+
+00:03:17.160 --> 00:03:19.079
+This is why until recently,
+
+00:03:19.080 --> 00:03:22.119
+data science was a graduate-level education
+
+00:03:22.120 --> 00:03:25.879
+only for software engineers, computer scientists,
+
+00:03:25.880 --> 00:03:31.679
+statisticians, psychologists, biologists, business people,
+
+00:03:31.680 --> 00:03:34.279
+or for whoever took a special fancy
+
+00:03:34.280 --> 00:03:37.719
+to data in their chosen field.
+
+00:03:37.720 --> 00:03:40.039
+Only with a growing interest in machine learning,
+
+00:03:40.040 --> 00:03:41.999
+this has changed.
+
+00:03:42.000 --> 00:03:45.599
+And now we train--or try to train--data scientists
+
+00:03:45.600 --> 00:03:47.639
+in undergraduate programs as well.
+
+NOTE Computer science is a craft
+
+00:03:47.640 --> 00:03:52.399
+Now, what I'm saying here, I think is true
+
+00:03:52.400 --> 00:03:54.199
+for all areas of computing,
+
+00:03:54.200 --> 00:03:56.959
+from software engineering to data science.
+
+00:03:56.960 --> 00:04:00.639
+They are mostly taught and learned like a craft
+
+00:04:00.640 --> 00:04:03.679
+rather than a science, not through research,
+
+00:04:03.680 --> 00:04:04.679
+but through drill.
+
+00:04:04.680 --> 00:04:07.799
+The elements of this drill can be illustrated
+
+00:04:07.800 --> 00:04:09.959
+by learning how to fix cars.
+
+00:04:09.960 --> 00:04:12.759
+They include taking a problem apart
+
+00:04:12.760 --> 00:04:14.119
+with the tools you already know,
+
+00:04:14.120 --> 00:04:18.239
+learn a lot more tools in the process of doing that,
+
+00:04:18.240 --> 00:04:20.639
+then solve many, many problems
+
+00:04:20.640 --> 00:04:22.199
+of increasing difficulty
+
+00:04:22.200 --> 00:04:25.719
+while being or getting more literate, as it were,
+
+00:04:25.720 --> 00:04:27.919
+about the mechanics of computing,
+
+00:04:27.920 --> 00:04:30.759
+including the hardware, the infrastructure,
+
+00:04:30.760 --> 00:04:32.639
+and finally develop a way of thinking
+
+00:04:32.640 --> 00:04:35.519
+that allows the learner to identify patterns
+
+00:04:35.520 --> 00:04:39.719
+to solve new problems better and faster.
+
+00:04:39.720 --> 00:04:42.479
+Unlike learning how to fix cars,
+
+00:04:42.480 --> 00:04:44.439
+all of the objects of our interest--
+
+00:04:44.440 --> 00:04:48.719
+both hardware and software--are evolving rapidly.
+
+00:04:48.720 --> 00:04:51.519
+In this field, radical innovation is the rule,
+
+00:04:51.520 --> 00:04:52.839
+not the exception.
+
+NOTE The problem
+
+00:04:52.840 --> 00:04:58.679
+The problem that I identified is that students,
+
+00:04:58.680 --> 00:05:00.799
+especially undergraduate students
+
+00:05:00.800 --> 00:05:02.399
+in computer and data science,
+
+00:05:02.400 --> 00:05:06.439
+often do no longer understand the infrastructure.
+
+00:05:06.440 --> 00:05:08.919
+Here are a few examples of the problems
+
+00:05:08.920 --> 00:05:10.079
+that the students seem to have.
+
+00:05:10.080 --> 00:05:13.599
+They do not understand computer architecture,
+
+00:05:13.600 --> 00:05:14.599
+except in theory.
+
+00:05:14.600 --> 00:05:18.519
+They cannot navigate their way around their own computers.
+
+00:05:18.520 --> 00:05:22.319
+They don't understand the value or the issues of networks.
+
+00:05:22.320 --> 00:05:25.079
+They are often more interested in convenience
+
+00:05:25.080 --> 00:05:28.279
+than in customization of the environment.
+
+00:05:28.280 --> 00:05:31.839
+As a result, the machines which we're meant to control
+
+00:05:31.840 --> 00:05:35.079
+have all the power--though passively,
+
+00:05:35.080 --> 00:05:36.559
+of course, for now anyway.
+
+NOTE The solution: Emacs + Org-mode
+
+00:05:36.560 --> 00:05:43.679
+Enter Emacs, the self-extensible operating system
+
+00:05:43.680 --> 00:05:45.999
+disguised as a text editor.
+
+00:05:46.000 --> 00:05:50.999
+You're at EmacsConf, so of course I don't have to tell you
+
+00:05:51.000 --> 00:05:52.199
+what Emacs can do.
+
+00:05:52.200 --> 00:05:54.319
+Here's a rundown on the right-hand side
+
+00:05:54.320 --> 00:05:56.759
+of some of its most important properties,
+
+00:05:56.760 --> 00:05:58.959
+and an Org Mode file excerpt
+
+00:05:58.960 --> 00:06:00.519
+from one of my classes on the left.
+
+00:06:00.520 --> 00:06:05.239
+What you may not know is how to onboard students who have,
+
+00:06:05.240 --> 00:06:07.439
+at the start, no interest whatsoever
+
+00:06:07.440 --> 00:06:08.919
+in leaving their comfort zone,
+
+00:06:08.920 --> 00:06:12.399
+which is defined by a lifetime of Windows,
+
+00:06:12.400 --> 00:06:16.319
+pre-configured graphical interfaces, and software bloat.
+
+00:06:16.320 --> 00:06:19.679
+In fact, when I started this, I wasn't very hopeful,
+
+00:06:19.680 --> 00:06:22.399
+but the results have made me even more optimistic
+
+00:06:22.400 --> 00:06:24.119
+than I already am by nature.
+
+NOTE Emacs configuration file
+
+00:06:24.120 --> 00:06:28.839
+So to rein in your expectations,
+
+00:06:28.840 --> 00:06:31.839
+you cannot do entirely without
+
+00:06:31.840 --> 00:06:33.799
+configuring the student's experience.
+
+00:06:33.800 --> 00:06:35.279
+An important part of this
+
+00:06:35.280 --> 00:06:37.999
+is the initial Emacs configuration shown here.
+
+00:06:38.000 --> 00:06:40.639
+The minimal configuration file,
+
+00:06:40.640 --> 00:06:42.199
+which you can see on the right-hand side,
+
+00:06:42.200 --> 00:06:46.679
+allows the students to run code in C and C++, R, SQL,
+
+00:06:46.680 --> 00:06:48.599
+SQLite, Python, and Bash.
+
+00:06:48.600 --> 00:06:52.559
+It will allow them to update Emacs packages
+
+00:06:52.560 --> 00:06:55.039
+from the stable Melpa repository,
+
+00:06:55.040 --> 00:06:58.599
+and it will allow them to create code blocks easily
+
+00:06:58.600 --> 00:07:01.919
+using skeleton commands for code blocks,
+
+00:07:01.920 --> 00:07:06.279
+and to auto-load the Emacs Speaks Statistics package,
+
+00:07:06.280 --> 00:07:09.759
+which you particularly need when you run R in Emacs,
+
+00:07:09.760 --> 00:07:14.399
+and lastly, to disable toolbar and graphical menu bars.
+
+00:07:14.400 --> 00:07:18.999
+To do that encourages the exclusive use of the keyboard
+
+00:07:19.000 --> 00:07:23.199
+to control Emacs, and to stop the students
+
+00:07:23.200 --> 00:07:25.839
+from flicking all the time to the mouse;
+
+00:07:25.840 --> 00:07:30.359
+seems to be an essential part of getting used to Emacs.
+
+NOTE Story + code = source + documentation
+
+00:07:30.360 --> 00:07:38.839
+Now Org Mode was included in Emacs in 2006 as a major mode,
+
+00:07:38.840 --> 00:07:41.959
+and as you know, it's a structured plain text format
+
+00:07:41.960 --> 00:07:45.039
+with notebook live code execution.
+
+00:07:45.040 --> 00:07:47.839
+It's an ideal platform for literate programming,
+
+00:07:47.840 --> 00:07:52.359
+which is a term for programming that intermingles code,
+
+00:07:52.360 --> 00:07:55.839
+documentation, and output within a single document,
+
+00:07:55.840 --> 00:07:59.519
+and that can, as you can see here from an org file,
+
+00:07:59.520 --> 00:08:02.559
+either be tangled into source code
+
+00:08:02.560 --> 00:08:06.999
+or woven into a documentation file, which could be PDF,
+
+00:08:07.000 --> 00:08:11.039
+could be Markdown, could be OpenOffice,
+
+00:08:11.040 --> 00:08:13.919
+could be a notebook format.
+
+00:08:13.920 --> 00:08:18.479
+This methodology was conceived by Donald Knuth in 1984,
+
+00:08:18.480 --> 00:08:22.039
+and it is therefore even older than Emacs itself.
+
+NOTE What is literate programming?
+
+00:08:22.040 --> 00:08:27.199
+The main purpose of literate programming is not only
+
+00:08:27.200 --> 00:08:31.119
+to make code or documentation or output more manageable,
+
+00:08:31.120 --> 00:08:34.759
+but to allow humans to create a data story with ease
+
+00:08:34.760 --> 00:08:37.199
+from a single source.
+
+00:08:37.200 --> 00:08:40.359
+So what you see on the slide on the left-hand side
+
+00:08:40.360 --> 00:08:45.479
+is the story and code inside a Org Mode file.
+
+00:08:45.480 --> 00:08:49.479
+The file starts with some documentation,
+
+00:08:49.480 --> 00:08:52.519
+then with the white background is the code,
+
+00:08:52.520 --> 00:08:56.239
+and at the bottom you see an output file,
+
+00:08:56.240 --> 00:09:00.159
+which is not shown here on the slide itself.
+
+00:09:00.160 --> 00:09:02.839
+In the middle, you have the source code,
+
+00:09:02.840 --> 00:09:05.759
+which is the result of tangling
+
+00:09:05.760 --> 00:09:10.799
+or of opening a buffer inside org-mode.
+
+00:09:10.800 --> 00:09:16.119
+And on the very right-hand side, you have a PDF--
+
+00:09:16.120 --> 00:09:20.159
+actually this HTML rendering of the very same file
+
+00:09:20.160 --> 00:09:22.599
+that you see on the very left.
+
+00:09:22.600 --> 00:09:26.479
+So the humans look at some of this code,
+
+00:09:26.480 --> 00:09:29.879
+and the machines will look at other parts of the code.
+
+00:09:29.880 --> 00:09:33.359
+I actually did all my programming in a literate way
+
+00:09:33.360 --> 00:09:35.959
+even in the early 1990s, not using org-mode,
+
+00:09:35.960 --> 00:09:36.799
+which didn't exist yet,
+
+00:09:36.800 --> 00:09:40.319
+but using Norman Ramsey's Noweb preprocessor.
+
+00:09:40.320 --> 00:09:43.399
+And I still use it inside org-mode today.
+
+00:09:43.400 --> 00:09:47.439
+This preprocessor, Noweb, allows you to tangle code
+
+00:09:47.440 --> 00:09:50.079
+from within an org-mode file that's a self-standing file,
+
+00:09:50.080 --> 00:09:52.799
+much like org-mode's edit functions,
+
+00:09:52.800 --> 00:09:55.639
+which export code blocks into buffers
+
+00:09:55.640 --> 00:09:59.879
+in whatever language the code block is written.
+
+NOTE Emacs as a literate programming tool
+
+00:09:59.880 --> 00:10:02.719
+In data science, these interactive notebooks
+
+00:10:02.720 --> 00:10:05.999
+in one of the interpreted languages like Julia,
+
+00:10:06.000 --> 00:10:07.839
+Python, or R dominate.
+
+00:10:07.840 --> 00:10:10.239
+The basis technology,
+
+00:10:10.240 --> 00:10:12.759
+is that of Jupyter notebooks, which take their name
+
+00:10:12.760 --> 00:10:14.439
+from Julia, Python, and R.
+
+00:10:14.440 --> 00:10:19.199
+And these notebooks use a spruced-up shell (for example,
+
+00:10:19.200 --> 00:10:23.079
+IPython for Python) with an option to add SQL cells.
+
+00:10:23.080 --> 00:10:28.079
+Org Mode inside Emacs has a large number of advantages--
+
+00:10:28.080 --> 00:10:31.479
+some of them are listed here--over these notebooks.
+
+00:10:31.480 --> 00:10:33.679
+Two of these stand out particularly.
+
+00:10:33.680 --> 00:10:39.439
+Different languages can be mixed, as shown in the image,
+
+00:10:39.440 --> 00:10:43.439
+while in Jupyter notebooks, a notebook is limited to
+
+00:10:43.440 --> 00:10:45.639
+running a kernel in one language only.
+
+00:10:45.640 --> 00:10:48.159
+So the content of the notebook--
+
+00:10:48.160 --> 00:10:50.319
+its document code or output part--
+
+00:10:50.320 --> 00:10:52.879
+can be exported in a variety of formats,
+
+00:10:52.880 --> 00:10:55.479
+which makes it much easier to share with others
+
+00:10:55.480 --> 00:10:58.479
+and to use one's work in different reporting formats;
+
+00:10:58.480 --> 00:11:02.399
+for example, to read it out into a LaTeX publication.
+
+00:11:02.400 --> 00:11:08.319
+Actually, to come back to this,
+
+00:11:08.320 --> 00:11:11.039
+the file does not show different languages.
+
+00:11:11.040 --> 00:11:14.159
+That is something you can see in a paper of mine,
+
+00:11:14.160 --> 00:11:18.959
+in one of the figures.
+
+NOTE Case study: basic setup
+
+00:11:18.960 --> 00:11:22.719
+Now, coming to the case study itself,
+
+00:11:22.720 --> 00:11:25.039
+here are some of the overall results of the case study.
+
+00:11:25.040 --> 00:11:29.039
+Now, the courses ranged from introductory to advanced,
+
+00:11:29.040 --> 00:11:32.039
+as you can see here in the table on the left-hand side.
+
+00:11:32.040 --> 00:11:37.199
+The topics covered different programming applications.
+
+00:11:37.200 --> 00:11:38.679
+The courses were taught
+
+00:11:38.680 --> 00:11:41.039
+over a period of three consecutive terms.
+
+00:11:41.040 --> 00:11:45.839
+There was between 6 and 28 participants per course.
+
+00:11:45.840 --> 00:11:49.239
+I used a few other tools besides Emacs:
+
+00:11:49.240 --> 00:11:51.919
+GitHub as the main repository for all the material,
+
+00:11:51.920 --> 00:11:55.239
+Datacamp for structured online lessons and exercises,
+
+00:11:55.240 --> 00:11:57.359
+Canvas as a learning management system,
+
+00:11:57.360 --> 00:12:00.919
+and Zoom to record the sessions for later use.
+
+00:12:00.920 --> 00:12:03.279
+Now, the material for all these courses
+
+00:12:03.280 --> 00:12:05.399
+is openly available on GitHub,
+
+00:12:05.400 --> 00:12:11.279
+and the address is on the slide at the bottom.
+
+NOTE Emacs + Org-mode notebooks
+
+00:12:11.280 --> 00:12:15.879
+I'm now going to briefly comment on
+
+00:12:15.880 --> 00:12:18.799
+the most important aspects of using Emacs and Org Mode
+
+00:12:18.800 --> 00:12:20.119
+in and outside of class.
+
+00:12:20.120 --> 00:12:24.039
+Essentially, these two--Emacs and Org Mode--
+
+00:12:24.040 --> 00:12:26.239
+were used all the time for almost everything
+
+00:12:26.240 --> 00:12:29.239
+that the students were doing in and outside of class.
+
+00:12:29.240 --> 00:12:32.319
+The only exception were multiple choice tests
+
+00:12:32.320 --> 00:12:34.039
+and online assignments
+
+00:12:34.040 --> 00:12:35.599
+on the Datacamp learning platform
+
+00:12:35.600 --> 00:12:37.199
+in the data science courses.
+
+00:12:37.200 --> 00:12:39.999
+But everything else--code-along lectures, home assignments,
+
+00:12:40.000 --> 00:12:42.439
+student projects, practice in class--
+
+00:12:42.440 --> 00:12:45.799
+was done with these two tools.
+
+NOTE Onboarding: simplified Emacs tutorial
+
+00:12:45.800 --> 00:12:47.999
+To facilitate the onboarding,
+
+00:12:48.000 --> 00:12:50.999
+so to get students used to Emacs in the first place,
+
+00:12:51.000 --> 00:12:53.279
+I developed a simplified Emacs tutorial,
+
+00:12:53.280 --> 00:12:56.519
+which was focused on the basics of literate programming.
+
+00:12:56.520 --> 00:12:59.999
+It included navigation in major modes,
+
+00:13:00.000 --> 00:13:02.839
+managing files and buffers, customizing the interface,
+
+00:13:02.840 --> 00:13:04.039
+and keyboard shortcuts.
+
+00:13:04.040 --> 00:13:06.319
+It was considerably shorter;
+
+00:13:06.320 --> 00:13:12.879
+about a quarter of the size of the standard Emacs tutorial,
+
+00:13:12.880 --> 00:13:14.319
+which contains a lot more stuff.
+
+00:13:14.320 --> 00:13:16.759
+As a result of this onboarding,
+
+00:13:16.760 --> 00:13:18.279
+by the end of the second week,
+
+00:13:18.280 --> 00:13:19.919
+most students were able
+
+00:13:19.920 --> 00:13:22.639
+to use Emacs and Org Mode competently
+
+00:13:22.640 --> 00:13:25.079
+for their assignments in and outside of class,
+
+00:13:25.080 --> 00:13:29.639
+completely independent of their previous exposure
+
+00:13:29.640 --> 00:13:31.199
+to any of these tools.
+
+00:13:31.200 --> 00:13:35.399
+Most of the students, in fact, had never heard of Emacs.
+
+00:13:35.400 --> 00:13:40.839
+All the classes were taught physically in a computer lab.
+
+NOTE Instruction + interaction
+
+00:13:40.840 --> 00:13:42.759
+Emacs with Org Mode
+
+00:13:42.760 --> 00:13:45.479
+and the necessary languages for the class
+
+00:13:45.480 --> 00:13:47.359
+were pre-installed on the computers.
+
+00:13:47.360 --> 00:13:50.199
+The computers ran Windows, unfortunately,
+
+00:13:50.200 --> 00:13:52.759
+like most of the students' personal computers.
+
+00:13:52.760 --> 00:13:57.479
+A typical class involved a lecture delivered by me
+
+00:13:57.480 --> 00:13:59.159
+in Emacs as a code-along.
+
+00:13:59.160 --> 00:14:01.559
+The students would get an Org Mode file
+
+00:14:01.560 --> 00:14:03.399
+with all the code removed.
+
+00:14:03.400 --> 00:14:04.599
+You can see an example here
+
+00:14:04.600 --> 00:14:06.799
+on the slide on the right-hand side.
+
+00:14:06.800 --> 00:14:12.239
+This example is actually only one line of code in blue,
+
+00:14:12.240 --> 00:14:15.039
+visible at the bottom for an award file.
+
+00:14:15.040 --> 00:14:17.919
+Then the students submitted home assignments
+
+00:14:17.920 --> 00:14:21.159
+also as Org Mode files, complete with documentation,
+
+00:14:21.160 --> 00:14:23.479
+code and sample output.
+
+00:14:23.480 --> 00:14:26.999
+Working this way makes the classes highly interactive.
+
+00:14:27.000 --> 00:14:28.879
+So the students are busy coding
+
+00:14:28.880 --> 00:14:31.639
+and they learn to control their environment better
+
+00:14:31.640 --> 00:14:34.919
+all the time.
+
+00:14:34.920 --> 00:14:38.599
+In my classes, the students have to complete
+
+00:14:38.600 --> 00:14:41.359
+an independent, agile research project
+
+00:14:41.360 --> 00:14:44.239
+using an adaptation of Scrum as a methodology.
+
+00:14:44.240 --> 00:14:48.079
+You can find examples of these rather high-octane projects
+
+00:14:48.080 --> 00:14:48.719
+in my paper.
+
+NOTE Assignments + projects
+
+00:14:48.720 --> 00:14:52.679
+Now, using literate programming for the projects
+
+00:14:52.680 --> 00:14:54.399
+provided some unique benefits.
+
+00:14:54.400 --> 00:14:57.959
+By having to continuously interweave documentation,
+
+00:14:57.960 --> 00:15:01.599
+references and output alongside functional code,
+
+00:15:01.600 --> 00:15:04.319
+the students learn to communicate their work
+
+00:15:04.320 --> 00:15:05.599
+throughout the term
+
+00:15:05.600 --> 00:15:07.559
+in various stages of completion,
+
+00:15:07.560 --> 00:15:09.839
+from the research question at the start,
+
+00:15:09.840 --> 00:15:12.879
+over the prototype to the finished product.
+
+00:15:12.880 --> 00:15:14.999
+And here on the right-hand side,
+
+00:15:15.000 --> 00:15:17.479
+you can see one of those assignments
+
+00:15:17.480 --> 00:15:18.839
+that the students received,
+
+00:15:18.840 --> 00:15:24.959
+including some of the metadata for their Org Mode files
+
+00:15:24.960 --> 00:15:26.159
+in the beginning of the course.
+
+00:15:26.160 --> 00:15:32.599
+Here are two graphs that I created early on
+
+00:15:32.600 --> 00:15:34.319
+when I started doing this.
+
+00:15:34.320 --> 00:15:36.439
+They show how the test results of the students
+
+00:15:36.440 --> 00:15:39.639
+in two different courses, actually three courses,
+
+00:15:39.640 --> 00:15:41.719
+changed from before to after
+
+00:15:41.720 --> 00:15:45.919
+introducing literate programming with Emacs and Org Mode.
+
+00:15:45.920 --> 00:15:49.559
+So you see the before and after
+
+00:15:49.560 --> 00:15:53.479
+introducing literate programming in the red curve before
+
+00:15:53.480 --> 00:15:54.919
+and the blue curve afterwards.
+
+00:15:54.920 --> 00:15:58.519
+And the improvement, especially on the right-hand side,
+
+00:15:58.520 --> 00:15:59.719
+is quite significant.
+
+00:15:59.720 --> 00:16:01.999
+It was this performance improvement,
+
+00:16:02.000 --> 00:16:05.119
+apart from the students who were voicing their support,
+
+00:16:05.120 --> 00:16:07.999
+that made me extend the Emacs experiment
+
+00:16:08.000 --> 00:16:09.159
+after the first term
+
+00:16:09.160 --> 00:16:15.279
+and continue for the following two terms.
+
+NOTE Overall results positive
+
+00:16:15.280 --> 00:16:18.839
+The courses... Coming to the result, the overall result...
+
+00:16:18.840 --> 00:16:20.999
+The courses were formally and informally
+
+00:16:21.000 --> 00:16:23.119
+also evaluated by the students,
+
+00:16:23.120 --> 00:16:24.599
+but you need to look at my paper
+
+00:16:24.600 --> 00:16:27.039
+for some explicit student comments,
+
+00:16:27.040 --> 00:16:28.199
+which you will find there.
+
+00:16:28.200 --> 00:16:29.879
+Here, I'm giving you only the summary.
+
+00:16:29.880 --> 00:16:34.519
+So first of all, Emacs proved to be hard to learn for some,
+
+00:16:34.520 --> 00:16:37.839
+but all students succeeded in all courses,
+
+00:16:37.840 --> 00:16:39.519
+independent of the level of
+
+00:16:39.520 --> 00:16:40.959
+their previous knowledge and skill.
+
+00:16:40.960 --> 00:16:45.919
+The documentation practices remained pretty uneven.
+
+00:16:45.920 --> 00:16:49.639
+So some students wrote a lot, others wrote little.
+
+00:16:49.640 --> 00:16:52.999
+But they were overall much higher than in classes
+
+00:16:53.000 --> 00:16:57.279
+without the use of Emacs and Org Mode.
+
+00:16:57.280 --> 00:16:59.559
+The interactivity enabled through Emacs
+
+00:16:59.560 --> 00:17:01.599
+was highly praised by the students
+
+00:17:01.600 --> 00:17:05.039
+and always identified on the evaluations.
+
+00:17:05.040 --> 00:17:08.559
+And lastly and most importantly, given the problems
+
+00:17:08.560 --> 00:17:13.279
+that I identified earlier, the computing file
+
+00:17:13.280 --> 00:17:15.079
+and data handling competence
+
+00:17:15.080 --> 00:17:18.279
+of the students who worked with Emacs throughout
+
+00:17:18.280 --> 00:17:23.399
+opening Emacs shells, running programs through Emacs,
+
+00:17:23.400 --> 00:17:26.999
+these skills increased massively.
+
+00:17:27.000 --> 00:17:30.599
+In the published paper, I have expressed
+
+00:17:30.600 --> 00:17:32.839
+a little more doubt than you see on this slide.
+
+00:17:32.840 --> 00:17:38.359
+But now, actually, I'm feeling quite hopeful again,
+
+00:17:38.360 --> 00:17:41.879
+especially because recently for one term,
+
+00:17:41.880 --> 00:17:47.679
+I have returned to Jupyter notebooks.
+
+00:17:47.680 --> 00:17:50.599
+In the current term, I abandoned Emacs again
+
+00:17:50.600 --> 00:17:53.119
+for online Jupyter notebook installations.
+
+00:17:53.120 --> 00:17:55.679
+The reason is that these Jupyter notebooks
+
+00:17:55.680 --> 00:18:00.159
+that I use from DataCamp have generative AI support
+
+00:18:00.160 --> 00:18:03.439
+from ChatGPT integrated into the notebook.
+
+00:18:03.440 --> 00:18:04.919
+And I wanted to try that.
+
+00:18:04.920 --> 00:18:08.519
+But after one term without Emacs,
+
+00:18:08.520 --> 00:18:10.199
+I regret that decision now.
+
+00:18:10.200 --> 00:18:13.199
+The AI advantage does not make up
+
+00:18:13.200 --> 00:18:15.119
+for the loss of the immersion
+
+00:18:15.120 --> 00:18:19.799
+that Emacs and Org Mode deliver.
+
+NOTE Conclusion & outlook
+
+00:18:19.800 --> 00:18:21.399
+And here's the summary.
+
+00:18:21.400 --> 00:18:23.759
+When learning computer and data science,
+
+00:18:23.760 --> 00:18:25.679
+immersion is everything.
+
+00:18:25.680 --> 00:18:29.479
+The best students will aim at immersion anyway.
+
+00:18:29.480 --> 00:18:31.239
+But for the majority of students,
+
+00:18:31.240 --> 00:18:33.679
+immersion must happen in class.
+
+00:18:33.680 --> 00:18:39.839
+Emacs and Org Mode performed throughout very well
+
+00:18:39.840 --> 00:18:42.319
+as the central literary programming platform.
+
+00:18:42.320 --> 00:18:45.959
+And the pre-configuring and the onboarding,
+
+00:18:45.960 --> 00:18:48.959
+which I showed to you, were very important
+
+00:18:48.960 --> 00:18:50.359
+to train the students quickly.
+
+00:18:50.360 --> 00:18:54.479
+In the paper, I also speculated on the impact
+
+00:18:54.480 --> 00:18:57.919
+of low-code, no-code, and AI coding assistance.
+
+00:18:57.920 --> 00:19:00.239
+And my general view on this is that
+
+00:19:00.240 --> 00:19:01.799
+the arrival of these tools
+
+00:19:01.800 --> 00:19:04.319
+make literary programming as an immersive technique
+
+00:19:04.320 --> 00:19:08.399
+focused on teaching a broad range of skills
+
+00:19:08.400 --> 00:19:09.719
+even more important.
+
+00:19:09.720 --> 00:19:13.079
+So even with AI--or especially with AI--
+
+00:19:13.080 --> 00:19:16.799
+this kind of approach, I think, could be critical.
+
+00:19:16.800 --> 00:19:18.439
+And that's it.
+
+00:19:18.440 --> 00:19:19.839
+I'm at the end of my presentation.
+
+00:19:19.840 --> 00:19:21.719
+Thank you very much for your attention.
+
+00:19:21.720 --> 00:19:22.839
+And I'm looking forward to the Q&A.
+
+00:19:22.840 --> 00:19:27.280
+Thank you.
diff --git a/2023/captions/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--answers.vtt b/2023/captions/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--answers.vtt
new file mode 100644
index 00000000..bc1bfff5
--- /dev/null
+++ b/2023/captions/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--answers.vtt
@@ -0,0 +1,1406 @@
+WEBVTT
+
+
+00:00:08.740 --> 00:00:09.240
+[Speaker 0]: Do we have any listeners?
+
+00:00:13.340 --> 00:00:13.840
+It's you and I. I have a question.
+
+00:00:16.420 --> 00:00:16.640
+How many tests do you have for hyperbole and
+
+00:00:18.800 --> 00:00:19.279
+How would you rate the test coverage compared
+
+00:00:21.279 --> 00:00:21.500
+to other packages? Well,
+
+00:00:28.279 --> 00:00:28.700
+that's a tricky 1. Shall I spell it out loud
+
+00:00:31.100 --> 00:00:31.600
+and then maybe type it at the same time?
+
+00:00:36.420 --> 00:00:36.920
+So, I believe it's around like more than 300
+
+00:00:43.660 --> 00:00:44.059
+test cases now. But I cannot compare the test
+
+00:00:45.220 --> 00:00:45.720
+coverage to any other
+
+00:01:00.020 --> 00:01:00.520
+other package. Maybe I can type that later.
+
+00:01:01.560 --> 00:01:02.060
+What do you say, Badal?
+
+00:01:02.660 --> 00:01:02.900
+[Speaker 1]: package. I have no knowledge of any Yeah,
+
+00:01:03.840 --> 00:01:04.239
+sure, yeah, that's totally fine.
+
+00:01:05.660 --> 00:01:06.160
+Feel free to just answer them with voice.
+
+00:01:08.720 --> 00:01:09.220
+[Speaker 0]: Yeah, yeah. There's another question.
+
+00:01:10.520 --> 00:01:10.920
+1 small suggestion to me,
+
+00:01:11.440 --> 00:01:11.940
+should means optional,
+
+00:01:13.660 --> 00:01:14.160
+where shall or must means required.
+
+00:01:15.940 --> 00:01:16.220
+Not sure if it is too late to make a major
+
+00:01:17.220 --> 00:01:17.540
+grammar change like that.
+
+00:01:18.080 --> 00:01:18.580
+Very nice presentation.
+
+00:01:19.840 --> 00:01:20.340
+So thanks for presentation,
+
+00:01:24.380 --> 00:01:24.780
+but the package ERT, well,
+
+00:01:27.920 --> 00:01:28.080
+it's not something that we have come up with.
+
+00:01:28.920 --> 00:01:29.340
+It's a standard package.
+
+00:01:32.320 --> 00:01:32.560
+So I believe it has been around for a long
+
+00:01:37.760 --> 00:01:38.000
+time. So, but please feel free to make
+
+00:01:39.680 --> 00:01:40.180
+suggestions and maybe you can,
+
+00:01:43.660 --> 00:01:43.860
+you know, like do a copy or like an alias for
+
+00:01:46.080 --> 00:01:46.200
+that. If you believe it makes more sense for
+
+00:01:48.080 --> 00:01:48.580
+your test cases to have that instead.
+
+00:01:53.540 --> 00:01:53.720
+And then we have another question here.
+
+00:01:55.540 --> 00:01:55.680
+For your info, you may find this helpful for
+
+00:01:58.780 --> 00:01:59.020
+running MX test lint both from a command line
+
+00:02:01.220 --> 00:02:01.720
+and from within MX with a transit menu.
+
+00:02:03.600 --> 00:02:04.040
+GitHub alpha papa make sure,
+
+00:02:06.760 --> 00:02:07.100
+yes. It also works on remote CI.
+
+00:02:08.240 --> 00:02:08.740
+Yeah, thank you, Alpha Papa.
+
+00:02:10.580 --> 00:02:11.080
+I think I've looked into that,
+
+00:02:13.440 --> 00:02:13.940
+but we haven't made any use of that.
+
+00:02:17.920 --> 00:02:18.080
+But maybe you'll inspire me to give it
+
+00:02:18.400 --> 00:02:18.900
+another look.
+
+00:02:29.260 --> 00:02:29.760
+[Speaker 2]: Hey guys.
+
+00:02:34.120 --> 00:02:34.460
+[Speaker 0]: I remember, I recognize that voice.
+
+00:02:37.160 --> 00:02:37.660
+Hi, Bob. Hey, how are you?
+
+00:02:40.240 --> 00:02:40.580
+Congratulations, man. Thanks,
+
+00:02:43.020 --> 00:02:43.320
+Hugh. Thank you. I have another question
+
+00:02:45.520 --> 00:02:45.900
+here. It is easy to run ad hoc tests inside
+
+00:02:48.400 --> 00:02:48.600
+an Emacs session given the command line
+
+00:02:51.180 --> 00:02:51.560
+scripts you need to run to get the batch test
+
+00:02:54.960 --> 00:02:55.120
+session running? You said it's to run an
+
+00:03:05.680 --> 00:03:05.920
+ad-hoc test. I'm not sure I understand that
+
+00:03:14.440 --> 00:03:14.940
+question. Yes, please.
+
+00:03:15.660 --> 00:03:16.160
+[Speaker 1]: Maybe I can rephrase. Sure.
+
+00:03:19.900 --> 00:03:20.400
+So I think what I understand is that since
+
+00:03:22.540 --> 00:03:23.040
+you have to use some of these command lines
+
+00:03:25.440 --> 00:03:25.940
+scripts to get a batch test session running,
+
+00:03:28.780 --> 00:03:29.180
+is it easy to run ad hoc tests in an Emacs
+
+00:03:30.700 --> 00:03:30.900
+session or does that, like in your
+
+00:03:32.040 --> 00:03:32.540
+experience, has that been difficult?
+
+00:03:36.820 --> 00:03:37.320
+[Speaker 0]: Well, from the command line,
+
+00:03:38.660 --> 00:03:38.940
+if you look at the command line,
+
+00:03:44.160 --> 00:03:44.340
+you'll see that it's only like a few image
+
+00:03:46.480 --> 00:03:46.980
+functions to call to get that behavior to run
+
+00:03:55.080 --> 00:03:55.240
+the batch tests. So I think we made some
+
+00:03:57.100 --> 00:03:57.600
+support function for that in hyperbole.
+
+00:04:02.800 --> 00:04:02.960
+So it's not, I don't think it's possible out
+
+00:04:05.540 --> 00:04:06.040
+of the box to do it, but it's not complicated
+
+00:04:08.060 --> 00:04:08.560
+to do it.
+
+00:04:12.190 --> 00:04:12.340
+[Speaker 2]: You can define a test anytime,
+
+00:04:14.780 --> 00:04:15.280
+right? Just like a new function.
+
+00:04:18.899 --> 00:04:19.240
+So that's ad hoc. You just write your test
+
+00:04:20.019 --> 00:04:20.519
+and you can run it.
+
+00:04:22.900 --> 00:04:23.400
+[Speaker 0]: Yeah, yeah, I mean, of course,
+
+00:04:25.900 --> 00:04:26.180
+but I got the impression it was about running
+
+00:04:28.620 --> 00:04:29.060
+all your tests like we did with the command
+
+00:04:35.740 --> 00:04:36.020
+line. Well, so the question is more about how
+
+00:04:38.260 --> 00:04:38.600
+would you run all your test cases from within
+
+00:04:44.860 --> 00:04:45.140
+Emacs? And the easy answer to that is
+
+00:04:48.420 --> 00:04:48.860
+actually you load all your test case files,
+
+00:04:51.760 --> 00:04:52.080
+and then you run ERT with the T as the test
+
+00:04:53.600 --> 00:04:53.880
+selector and then it will run all your test
+
+00:04:53.880 --> 00:04:54.380
+cases.
+
+00:05:01.780 --> 00:05:01.960
+[Speaker 1]: Right. And I think they have expanded on
+
+00:05:03.180 --> 00:05:03.520
+their question a little bit as well,
+
+00:05:04.960 --> 00:05:05.220
+clarifying that. In other words,
+
+00:05:07.200 --> 00:05:07.360
+can you tweak tests in an Emacs session and
+
+00:05:08.860 --> 00:05:09.360
+run them right away? Which I believe,
+
+00:05:11.400 --> 00:05:11.640
+if I understand correctly what Bob was
+
+00:05:13.820 --> 00:05:14.320
+saying, you can basically define or redefine
+
+00:05:15.920 --> 00:05:16.080
+functions on the fly and then have them be
+
+00:05:16.440 --> 00:05:16.940
+run, right?
+
+00:05:22.200 --> 00:05:22.360
+[Speaker 0]: Yes, yes. You just go into that test case and
+
+00:05:24.120 --> 00:05:24.620
+you just change it and you run it again.
+
+00:05:29.060 --> 00:05:29.200
+And either you have to sort of load it or you
+
+00:05:31.560 --> 00:05:32.060
+can use like the commercial thing I did.
+
+00:05:36.140 --> 00:05:36.340
+You use hyperbole and just hit meta return on
+
+00:05:38.560 --> 00:05:38.860
+the test case and it will load it and run the
+
+00:05:42.240 --> 00:05:42.360
+test case again. So that's of course what you
+
+00:05:44.220 --> 00:05:44.720
+normally do when you're defining a test or
+
+00:05:47.440 --> 00:05:47.940
+debug a test case or develop a test case.
+
+00:05:49.960 --> 00:05:50.460
+Just start with something small,
+
+00:05:52.700 --> 00:05:53.200
+just make sure maybe you can prepare the test
+
+00:05:55.320 --> 00:05:55.680
+properly and run it again and again and again
+
+00:05:56.720 --> 00:05:57.220
+until you're ready with it.
+
+00:05:59.760 --> 00:05:59.960
+That's a good point. You can definitely do
+
+00:06:02.800 --> 00:06:03.280
+that and that's part of how I normally
+
+00:06:06.420 --> 00:06:06.920
+develop the test cases that I mean start with
+
+00:06:09.160 --> 00:06:09.400
+something small so I can see that I get there
+
+00:06:12.180 --> 00:06:12.240
+maybe the right input in the buffer that I
+
+00:06:14.180 --> 00:06:14.340
+want to test on or something and I expand on
+
+00:06:18.160 --> 00:06:18.400
+that more and more and add more and more more
+
+00:06:18.460 --> 00:06:18.960
+and more more
+
+00:06:31.040 --> 00:06:31.540
+[Speaker 2]: tests to it. You might tell them a bit about
+
+00:06:33.280 --> 00:06:33.480
+how many test cases you have.
+
+00:06:36.020 --> 00:06:36.440
+I guess you commented on that and like what
+
+00:06:40.320 --> 00:06:40.820
+happens, you know, with the CICD pipeline,
+
+00:06:43.780 --> 00:06:44.020
+every time we commit, you know,
+
+00:06:46.360 --> 00:06:46.560
+across all the versions and what you have set
+
+00:06:48.760 --> 00:06:49.040
+up there because you know I wish people could
+
+00:06:53.940 --> 00:06:54.140
+see it. You can go and check on GitHub and
+
+00:06:57.440 --> 00:06:57.720
+you can see the logs right of any of the
+
+00:06:59.760 --> 00:06:59.960
+builds and but tell them a bit about that
+
+00:07:01.080 --> 00:07:01.320
+Mats because I think that's pretty
+
+00:07:01.320 --> 00:07:01.820
+impressive.
+
+00:07:07.280 --> 00:07:07.760
+[Speaker 0]: Well, that's part of more the CI,
+
+00:07:11.760 --> 00:07:12.160
+CD, part of how we developed this using
+
+00:07:15.460 --> 00:07:15.580
+GitHub and workflows that you get out of the
+
+00:07:20.740 --> 00:07:20.900
+box from there. So this more than 300 test
+
+00:07:23.440 --> 00:07:23.720
+cases on our round for I think 5 different
+
+00:07:26.480 --> 00:07:26.980
+versions of Emacs when we do a pull request
+
+00:07:33.900 --> 00:07:34.400
+or a commit. So that's a good way to ensure
+
+00:07:38.040 --> 00:07:38.540
+that it works from version 27.2
+
+00:07:42.240 --> 00:07:42.740
+up to the latest master version because
+
+00:07:45.860 --> 00:07:46.360
+there's some changes in Emacs over different
+
+00:07:48.940 --> 00:07:49.340
+versions that can affect your functions or
+
+00:07:49.600 --> 00:07:50.100
+your code.
+
+00:07:56.580 --> 00:07:56.720
+[Speaker 2]: They all run in parallel and so typically in
+
+00:08:00.580 --> 00:08:00.780
+under 60 seconds I think you've got all of
+
+00:08:03.960 --> 00:08:04.460
+them run so you've got pretty extensive
+
+00:08:08.860 --> 00:08:09.240
+testing which does catch interesting bugs
+
+00:08:09.760 --> 00:08:10.260
+here and there, right?
+
+00:08:13.320 --> 00:08:13.820
+[Speaker 0]: Yes, of course it does.
+
+00:08:18.060 --> 00:08:18.560
+I mean, you normally develop with 1 version
+
+00:08:20.280 --> 00:08:20.540
+and then you think everything is okay.
+
+00:08:21.720 --> 00:08:21.820
+But then when you're tested with the
+
+00:08:23.460 --> 00:08:23.960
+different versions, you find out that there
+
+00:08:26.080 --> 00:08:26.580
+are some changes and there are things you
+
+00:08:30.140 --> 00:08:30.400
+might not sort of keep track of what's
+
+00:08:34.340 --> 00:08:34.640
+happening also. So that's a way to get
+
+00:08:38.559 --> 00:08:38.940
+noticed that the core developers of Emacs
+
+00:08:41.120 --> 00:08:41.480
+have changed something that you sort of based
+
+00:08:44.380 --> 00:08:44.840
+your code on. Now I got another question
+
+00:08:47.900 --> 00:08:48.160
+here. Did you have to change hyperbole code
+
+00:08:50.580 --> 00:08:50.760
+and design to be more readily testable as you
+
+00:08:52.160 --> 00:08:52.660
+were increasing your test coverage?
+
+00:08:55.520 --> 00:08:56.020
+Well, we haven't done that to a lot,
+
+00:09:00.160 --> 00:09:00.320
+to a big degree, although I believe that that
+
+00:09:03.760 --> 00:09:04.260
+is an important thing for sort of the future
+
+00:09:06.020 --> 00:09:06.500
+to do that because some of the hyperbolic
+
+00:09:08.520 --> 00:09:08.720
+functions are very complicated and long and
+
+00:09:10.640 --> 00:09:11.140
+that makes testing them rather difficult.
+
+00:09:14.660 --> 00:09:14.900
+So, at a few places we have sort of broken up
+
+00:09:17.260 --> 00:09:17.720
+functions in smaller pieces so it'd be easier
+
+00:09:20.280 --> 00:09:20.660
+to do like unit tests of the different parts
+
+00:09:27.740 --> 00:09:27.980
+of it. But there's a lot of more work that
+
+00:09:28.680 --> 00:09:29.180
+has to be done there.
+
+00:09:33.820 --> 00:09:34.020
+[Speaker 2]: 1 of the nice things is you know the great
+
+00:09:36.760 --> 00:09:36.820
+environment in Lisp where we're able to do a
+
+00:09:40.520 --> 00:09:40.900
+lot of interactive bottom-up testing before
+
+00:09:42.840 --> 00:09:43.280
+we even get to lighting tech pieces.
+
+00:09:48.740 --> 00:09:49.140
+So it does tend to be more higher level bugs,
+
+00:09:51.140 --> 00:09:51.640
+I think, that get caught in cross-functional
+
+00:09:55.940 --> 00:09:56.100
+interaction. We had 1 recently that was an
+
+00:09:58.100 --> 00:09:58.600
+Emacs version change. It had been a function
+
+00:10:01.100 --> 00:10:01.600
+that had existed for a long time.
+
+00:10:03.340 --> 00:10:03.840
+It had an and rest in it,
+
+00:10:05.740 --> 00:10:06.240
+in its argument list, so it would assemble
+
+00:10:08.600 --> 00:10:09.100
+the list of arguments from individual
+
+00:10:10.320 --> 00:10:10.820
+arguments that you would give it,
+
+00:10:13.100 --> 00:10:13.600
+and they decided in a recent version,
+
+00:10:15.200 --> 00:10:15.700
+I think with Stefan's input,
+
+00:10:19.400 --> 00:10:19.840
+to change that to a list and allow the prior
+
+00:10:22.740 --> 00:10:22.900
+behavior, but it would issue a warning if you
+
+00:10:23.620 --> 00:10:24.060
+use the prior behavior.
+
+00:10:25.560 --> 00:10:25.840
+So all of a sudden, the way you were supposed
+
+00:10:27.180 --> 00:10:27.680
+to do it became semi-invalid.
+
+00:10:30.440 --> 00:10:30.940
+And so we started getting the warning,
+
+00:10:32.760 --> 00:10:33.040
+and we've tried to eliminate all those
+
+00:10:35.600 --> 00:10:36.060
+warnings in recent hyperbole developments.
+
+00:10:37.120 --> 00:10:37.620
+So we're like, what do we do?
+
+00:10:39.020 --> 00:10:39.440
+You know, because we wanted to be backward
+
+00:10:42.140 --> 00:10:42.640
+compatible to where you couldn't use a list.
+
+00:10:44.620 --> 00:10:45.120
+It required you to use individual arguments.
+
+00:10:48.380 --> 00:10:48.560
+And now it's sort of requiring you to do
+
+00:10:51.660 --> 00:10:51.820
+that. And all of that was caused by the
+
+00:10:52.940 --> 00:10:53.440
+automatic testing on it.
+
+00:11:08.680 --> 00:11:08.860
+So you said, Max, you were going to tell us
+
+00:11:12.740 --> 00:11:13.220
+what you learned. So what are the major
+
+00:11:15.368 --> 00:11:15.396
+things that you learned in doing all of this
+
+00:11:15.680 --> 00:11:16.180
+work? All of this work?
+
+00:11:26.520 --> 00:11:26.740
+[Speaker 0]: Well, I tried to cover some of it in the
+
+00:11:29.380 --> 00:11:29.800
+presentation, but as I was going along,
+
+00:11:33.420 --> 00:11:33.920
+the presentation became like twice as long as
+
+00:11:36.180 --> 00:11:36.680
+fitted into the time we had so I had to cut
+
+00:11:42.380 --> 00:11:42.880
+it out. But I think some of the core things
+
+00:11:44.340 --> 00:11:44.840
+still is in the presentation.
+
+00:11:49.560 --> 00:11:50.060
+From a personal perspective,
+
+00:11:52.440 --> 00:11:52.940
+And this might not be hard to realize,
+
+00:11:56.960 --> 00:11:57.460
+but forcing yourself to test functions,
+
+00:12:02.900 --> 00:12:03.060
+test code really forces you to understand the
+
+00:12:05.080 --> 00:12:05.280
+code a little bit better in a way that sort
+
+00:12:07.300 --> 00:12:07.400
+of makes it easier than just to read the
+
+00:12:11.460 --> 00:12:11.960
+code. I don't know how it is for the rest
+
+00:12:13.780 --> 00:12:13.980
+listening to this, but for me it works so
+
+00:12:16.580 --> 00:12:17.080
+that if I just read the code then I don't
+
+00:12:20.140 --> 00:12:20.320
+sort of become as sharp as I should be but if
+
+00:12:22.500 --> 00:12:22.640
+I try to write the test case for it then I
+
+00:12:24.680 --> 00:12:24.880
+really need to understand better of all the
+
+00:12:27.660 --> 00:12:28.160
+edge cases and all the sort of states and etc
+
+00:12:30.060 --> 00:12:30.320
+that is involved and I think that's That's
+
+00:12:33.080 --> 00:12:33.200
+what's sort of 1 of the learning things I
+
+00:12:34.960 --> 00:12:35.280
+wanted to communicate as well that I don't
+
+00:12:38.940 --> 00:12:39.080
+think I covered in detail in the
+
+00:12:41.480 --> 00:12:41.980
+presentation. Maybe all this,
+
+00:12:48.060 --> 00:12:48.340
+but try it. 1 other sort of more from the fun
+
+00:12:50.740 --> 00:12:51.000
+side is that I really think it's fun to write
+
+00:12:55.080 --> 00:12:55.440
+the test. So if you haven't tests in your
+
+00:12:58.020 --> 00:12:58.520
+package, you should start doing that because
+
+00:13:05.740 --> 00:13:06.080
+it is fun. It might feel like some extra
+
+00:13:08.080 --> 00:13:08.580
+work, but it really pays off in the long run,
+
+00:13:10.320 --> 00:13:10.760
+especially if you have it in like a pipeline
+
+00:13:12.520 --> 00:13:12.980
+and where you can run it regularly when you
+
+00:13:13.940 --> 00:13:14.380
+do new commits, et cetera.
+
+00:13:16.560 --> 00:13:17.060
+So, I mean, that's maybe obvious from,
+
+00:13:19.160 --> 00:13:19.440
+if you look from the commercial side or your
+
+00:13:21.080 --> 00:13:21.340
+work side to do it like that.
+
+00:13:22.260 --> 00:13:22.660
+But even for your hobby project,
+
+00:13:26.260 --> 00:13:26.760
+it can be very sort of pay off really well.
+
+00:13:32.900 --> 00:13:33.160
+[Speaker 2]: It's worked really well when we're adding new
+
+00:13:35.020 --> 00:13:35.180
+functionality or we're changing some of the
+
+00:13:36.560 --> 00:13:37.060
+plumbing in the system.
+
+00:13:40.400 --> 00:13:40.580
+You know, you go and you do some surgery and
+
+00:13:41.320 --> 00:13:41.820
+then you run the tests.
+
+00:13:45.400 --> 00:13:45.900
+And sometimes 6 to 10 tests will fail.
+
+00:13:48.260 --> 00:13:48.420
+And you find there, you know,
+
+00:13:50.460 --> 00:13:50.660
+it tends to be they're all interconnected and
+
+00:13:52.920 --> 00:13:53.320
+it leads you back to the single source.
+
+00:13:56.660 --> 00:13:56.980
+You fix that and you know it could be an edge
+
+00:14:00.560 --> 00:14:00.760
+case and off by 1 or Sometimes it's an
+
+00:14:03.520 --> 00:14:03.800
+assumption about the way something is used
+
+00:14:05.980 --> 00:14:06.480
+and it's not actually always true.
+
+00:14:09.520 --> 00:14:10.020
+And so, Matt's just really good at
+
+00:14:13.540 --> 00:14:14.040
+identifying some of those scenarios and
+
+00:14:17.480 --> 00:14:17.980
+keeping us honest, I guess I would say.
+
+00:14:22.900 --> 00:14:23.400
+So I love, I run it as much as I before,
+
+00:14:26.400 --> 00:14:26.900
+you know, even before I commit something.
+
+00:14:29.960 --> 00:14:30.060
+So I get to see, you know,
+
+00:14:30.940 --> 00:14:31.440
+if anything has progressed.
+
+00:14:39.480 --> 00:14:39.920
+So yeah, I really recommend this process to
+
+00:14:42.120 --> 00:14:42.620
+people. I haven't seen it done.
+
+00:14:45.720 --> 00:14:46.080
+I don't think that, I don't know any other
+
+00:14:47.800 --> 00:14:48.300
+package that has done it to this level.
+
+00:14:51.560 --> 00:14:51.820
+And it's been working really great for us.
+
+00:14:55.440 --> 00:14:55.640
+And I think, well, we'll see too when we
+
+00:14:56.780 --> 00:14:57.280
+release to the general public.
+
+00:15:04.380 --> 00:15:04.540
+[Speaker 0]: But Bob, also, maybe the test part of
+
+00:15:06.400 --> 00:15:06.560
+different packages is not the first thing you
+
+00:15:08.900 --> 00:15:09.100
+look at. So I know there are packages that
+
+00:15:10.960 --> 00:15:11.380
+have testing, a lot of testing,
+
+00:15:13.860 --> 00:15:14.160
+but how much, much testing they have or not,
+
+00:15:16.060 --> 00:15:16.220
+I don't know. It's not what you normally look
+
+00:15:17.900 --> 00:15:18.400
+into when you look at someone's else code.
+
+00:15:20.600 --> 00:15:20.820
+You look maybe on the functionality side but
+
+00:15:22.760 --> 00:15:23.000
+not on how they've done the sort of the
+
+00:15:26.540 --> 00:15:26.760
+quality side. So there could be other
+
+00:15:28.780 --> 00:15:29.280
+packages out there that are well equipped.
+
+00:15:31.800 --> 00:15:32.300
+[Speaker 2]: I hope so. I hope so.
+
+00:15:39.860 --> 00:15:40.180
+[Speaker 0]: What's the craziest bug you found when
+
+00:15:44.700 --> 00:15:45.200
+writing these tests? Well,
+
+00:15:50.760 --> 00:15:50.940
+What springs to my mind just now is that we
+
+00:15:52.760 --> 00:15:52.960
+were doing some tests or I would do some
+
+00:15:55.920 --> 00:15:56.420
+tests for when you narrow,
+
+00:15:57.940 --> 00:15:58.440
+what do you say that? When you,
+
+00:16:04.500 --> 00:16:05.000
+in outlining, when you sort of compress
+
+00:16:06.480 --> 00:16:06.980
+things in an outline, so you just,
+
+00:16:08.540 --> 00:16:09.040
+sorry Bob, maybe you have it,
+
+00:16:12.100 --> 00:16:12.600
+[Speaker 2]: When you hide text.
+
+00:16:12.740 --> 00:16:13.240
+[Speaker 0]: What I'm looking for? Yeah,
+
+00:16:15.580 --> 00:16:15.920
+when you hide. So I was doing some cursor
+
+00:16:17.780 --> 00:16:17.980
+movement over that. And I always assume that
+
+00:16:22.540 --> 00:16:22.900
+if you do like a prefix argument to like a
+
+00:16:23.800 --> 00:16:24.240
+simple cursor movement,
+
+00:16:26.420 --> 00:16:26.920
+like control F moving 1 character position,
+
+00:16:28.340 --> 00:16:28.840
+and you would give it the,
+
+00:16:36.580 --> 00:16:37.080
+and then the prefix, like you want to move
+
+00:16:39.140 --> 00:16:39.640
+like 2 or 3 positions,
+
+00:16:43.040 --> 00:16:43.140
+you would do like control U 3 and then
+
+00:16:44.240 --> 00:16:44.740
+control F and you move 3.
+
+00:16:46.560 --> 00:16:46.960
+I always assumed that that would be exactly
+
+00:16:49.240 --> 00:16:49.440
+the same as if you just hit the key control F
+
+00:16:50.740 --> 00:16:51.240
+3 times, but it's not.
+
+00:16:53.160 --> 00:16:53.560
+So it's not the bug, it's a feature,
+
+00:16:54.620 --> 00:16:55.080
+but that was the craziest thing.
+
+00:16:58.180 --> 00:16:58.360
+I spent the night trying to figure out why
+
+00:17:00.720 --> 00:17:01.000
+our code was wrong, but It turns out that's
+
+00:17:03.560 --> 00:17:04.060
+how Emacs behaves. Try it out yourself.
+
+00:17:07.920 --> 00:17:08.300
+Try to move over the 3 dots at the end of
+
+00:17:09.140 --> 00:17:09.640
+that and see what happens.
+
+00:17:14.060 --> 00:17:14.240
+Do it with cursor hitting the key or using a
+
+00:17:16.260 --> 00:17:16.680
+prefix argument and you see it behaves
+
+00:17:18.720 --> 00:17:19.220
+differently. That was the craziest thing.
+
+00:17:21.960 --> 00:17:22.339
+I think there was some other crazy thing or
+
+00:17:24.280 --> 00:17:24.480
+deep learning also, but I can't come up with
+
+00:17:26.599 --> 00:17:26.760
+it at the moment. So maybe I can write it in
+
+00:17:27.900 --> 00:17:28.400
+the Q&A later.
+
+00:17:31.200 --> 00:17:31.440
+[Speaker 1]: I think we're out of time on the stream,
+
+00:17:33.360 --> 00:17:33.600
+but people are welcome to join Mats and Bob
+
+00:17:35.280 --> 00:17:35.640
+here on BigBlueButton to further discuss
+
+00:17:36.480 --> 00:17:36.980
+this. Thank you both.
+
+00:17:38.674 --> 00:17:38.792
+[Speaker 0]: Okay, thank you. Thanks,
+
+00:17:46.100 --> 00:17:46.600
+Makaay. Thank you. I don't know,
+
+00:17:48.740 --> 00:17:49.240
+Is it only me and Bob here?
+
+00:17:50.680 --> 00:17:51.180
+So Bob, do you want to say something?
+
+00:17:57.440 --> 00:17:57.940
+[Speaker 2]: Well, I think it's been a great day.
+
+00:18:00.720 --> 00:18:01.220
+And I'm glad we did this.
+
+00:18:02.280 --> 00:18:02.780
+It takes a lot of energy.
+
+00:18:15.140 --> 00:18:15.640
+I'm just really excited about the progress
+
+00:18:20.580 --> 00:18:20.740
+that this, and we're actually doing a lot of
+
+00:18:23.940 --> 00:18:24.160
+QA at work and my professional software work
+
+00:18:28.500 --> 00:18:28.840
+and looking at you know how we can do more
+
+00:18:32.980 --> 00:18:33.480
+test driven development and so everybody's
+
+00:18:35.980 --> 00:18:36.200
+talking about this you know we've got AI over
+
+00:18:37.540 --> 00:18:38.040
+here that can generate test cases.
+
+00:18:40.200 --> 00:18:40.700
+But, you know, strangely enough,
+
+00:18:43.100 --> 00:18:43.380
+with the rapidity of development and web
+
+00:18:46.720 --> 00:18:47.220
+applications, I think the level of testing
+
+00:18:50.140 --> 00:18:50.280
+has gone down in recent years compared to
+
+00:18:51.500 --> 00:18:51.780
+where it used to be, right?
+
+00:18:53.040 --> 00:18:53.540
+Because the pace has gone up.
+
+00:18:57.340 --> 00:18:57.840
+And so I think it's starting to turn again
+
+00:18:58.740 --> 00:18:59.240
+where people are saying,
+
+00:19:01.940 --> 00:19:02.440
+we can't just release crap into the
+
+00:19:08.120 --> 00:19:08.620
+Webisphere and we have to better ourselves.
+
+00:19:13.620 --> 00:19:13.820
+And with all these advanced tool sets that
+
+00:19:16.100 --> 00:19:16.600
+you have, that you can do CICD testing,
+
+00:19:19.860 --> 00:19:20.180
+you know, I just, I just see it coming
+
+00:19:21.900 --> 00:19:22.100
+around, you know, as people develop new
+
+00:19:24.000 --> 00:19:24.160
+things. So That's kind of exciting to me
+
+00:19:26.980 --> 00:19:27.480
+because I came from a manufacturing culture
+
+00:19:30.300 --> 00:19:30.780
+originally where we, our company actually
+
+00:19:33.800 --> 00:19:34.300
+started a lot of the manufacturing quality
+
+00:19:37.420 --> 00:19:37.920
+efforts that you saw in Japan and elsewhere
+
+00:19:40.600 --> 00:19:40.740
+in America for a long time and that was you
+
+00:19:42.040 --> 00:19:42.540
+know entirely through testing.
+
+00:19:46.640 --> 00:19:47.020
+We used to just build incredible test cases
+
+00:19:49.120 --> 00:19:49.320
+because we were combining software with
+
+00:19:51.100 --> 00:19:51.380
+hardware. And if, you know,
+
+00:19:53.460 --> 00:19:53.600
+the hardware doesn't work and you ship a
+
+00:19:55.080 --> 00:19:55.520
+million units, you're,
+
+00:19:57.340 --> 00:19:57.840
+you're in trouble. So,
+
+00:20:00.260 --> 00:20:00.760
+that was just something we had to do.
+
+00:20:04.280 --> 00:20:04.780
+And so it's nice to start to see that curve
+
+00:20:07.020 --> 00:20:07.520
+come around. And I think,
+
+00:20:10.380 --> 00:20:10.880
+you know, Matt Vance is very modest,
+
+00:20:16.680 --> 00:20:16.920
+but I think he's really the 1 that started us
+
+00:20:20.400 --> 00:20:20.580
+down this path and really made it into a
+
+00:20:24.620 --> 00:20:24.840
+reality. So everybody else just gets to
+
+00:20:25.760 --> 00:20:26.260
+benefit from that work.
+
+00:20:27.540 --> 00:20:28.040
+So thanks.
+
+00:20:32.760 --> 00:20:33.260
+[Speaker 1]: That's awesome.
+
+00:20:39.960 --> 00:20:40.460
+[Speaker 0]: Thanks. Okay. Yeah. So if there's nothing
+
+00:20:43.200 --> 00:20:43.520
+more here, then maybe we should just close
+
+00:20:45.440 --> 00:20:45.940
+this and I go over to write in the etherpad
+
+00:20:47.960 --> 00:20:48.460
+the replies we had.
+
+00:20:51.900 --> 00:20:52.120
+[Speaker 1]: Right, yeah, I think, let's see,
+
+00:20:53.520 --> 00:20:53.760
+I see 1 other person here,
+
+00:20:55.080 --> 00:20:55.580
+I believe Ihor just joined us.
+
+00:20:58.780 --> 00:20:59.060
+Yeah. Yeah, so if you do want to discuss with
+
+00:21:00.220 --> 00:21:00.480
+Mats and Bob, you're welcome to,
+
+00:21:02.200 --> 00:21:02.700
+otherwise, yeah, we can close the room now.
+
+00:21:05.800 --> 00:21:06.020
+[Speaker 3]: Well, I think I missed most of the talk
+
+00:21:06.900 --> 00:21:07.400
+because I had power outage,
+
+00:21:12.180 --> 00:21:12.440
+but the part I heard was about the mock
+
+00:21:16.860 --> 00:21:17.220
+library. And you mentioned that you don't
+
+00:21:20.200 --> 00:21:20.700
+like CL-let, but instead you use mock.
+
+00:21:29.700 --> 00:21:29.800
+[Speaker 0]: Yeah, I was more saying that you have to do a
+
+00:21:31.560 --> 00:21:32.040
+lot more work when you use the CL letdef.
+
+00:21:34.540 --> 00:21:34.780
+It's for more ambitious and maybe more
+
+00:21:37.000 --> 00:21:37.500
+complicated cases where you want to really
+
+00:21:38.840 --> 00:21:39.340
+make a new implementation,
+
+00:21:41.940 --> 00:21:42.440
+test implementation. If you use the mock,
+
+00:21:44.380 --> 00:21:44.880
+you get a lot of things out of the box,
+
+00:21:47.440 --> 00:21:47.940
+verifying that you actually,
+
+00:21:50.820 --> 00:21:51.040
+like the mock was actually called for
+
+00:21:53.320 --> 00:21:53.820
+instance, whereas if you do with the CLLatf,
+
+00:21:56.520 --> 00:21:56.780
+you would have to take correct track of that
+
+00:22:02.020 --> 00:22:02.520
+yourself. And so, so a lot of more work.
+
+00:22:03.760 --> 00:22:04.260
+Oh yeah.
+
+00:22:07.940 --> 00:22:08.200
+[Speaker 3]: I'm saying that most of the time CLLess is
+
+00:22:09.720 --> 00:22:10.220
+used for simple cases actually.
+
+00:22:12.320 --> 00:22:12.820
+Because, just for example,
+
+00:22:15.100 --> 00:22:15.600
+the function always returns the same.
+
+00:22:17.980 --> 00:22:18.420
+And it tends to be simple lambda that ignores
+
+00:22:19.040 --> 00:22:19.540
+all the input arguments.
+
+00:22:23.000 --> 00:22:23.480
+So that's really trivial most of the time but
+
+00:22:25.520 --> 00:22:25.920
+I actually thought the opposite that mock is
+
+00:22:27.640 --> 00:22:28.140
+supposed to be used for non-trivial cases.
+
+00:22:32.280 --> 00:22:32.520
+[Speaker 0]: Sorry, what was the question?
+
+00:22:35.280 --> 00:22:35.780
+Mock was supposed to be used for non-trivial.
+
+00:22:47.680 --> 00:22:48.180
+Yeah I mean I don't know how to explain this.
+
+00:22:50.140 --> 00:22:50.640
+I mean, CLF can be used for non-trivial
+
+00:22:54.400 --> 00:22:54.840
+definitely. You can define then any behavior
+
+00:22:56.180 --> 00:22:56.680
+you want. You can write your own function,
+
+00:22:58.440 --> 00:22:58.660
+but you need to keep track of whether that
+
+00:22:59.620 --> 00:23:00.100
+function is called or not,
+
+00:23:06.260 --> 00:23:06.380
+for instance. So you have to make note of
+
+00:23:08.440 --> 00:23:08.940
+that the function was called so you can fire
+
+00:23:12.440 --> 00:23:12.800
+sort of an error in case your function wasn't
+
+00:23:16.960 --> 00:23:17.440
+called because that would be 1 error case.
+
+00:23:20.660 --> 00:23:20.860
+[Speaker 3]: So you mean the mock fires an error if the
+
+00:23:22.580 --> 00:23:23.080
+mocked function was actually not called?
+
+00:23:30.060 --> 00:23:30.560
+[Speaker 0]: Yes, it does. Yes. So if your assumptions,
+
+00:23:33.900 --> 00:23:34.120
+you sort of document with the mock also your
+
+00:23:37.080 --> 00:23:37.220
+assumptions how your code is going to be
+
+00:23:40.020 --> 00:23:40.380
+called. And if those are wrong,
+
+00:23:41.120 --> 00:23:41.540
+you will get an error.
+
+00:23:43.680 --> 00:23:44.060
+So you would, so if the implementation would
+
+00:23:44.840 --> 00:23:45.100
+maybe change, for instance,
+
+00:23:46.640 --> 00:23:47.140
+and not call the thing you're mocking,
+
+00:23:50.460 --> 00:23:50.960
+then you will notice that.
+
+00:23:53.100 --> 00:23:53.560
+But if you see a letdef,
+
+00:23:54.840 --> 00:23:55.040
+then you will have to keep track of that
+
+00:23:57.560 --> 00:23:58.060
+yourself. Okay, I see.
+
+00:23:58.260 --> 00:23:58.760
+I see.
+
+00:24:01.240 --> 00:24:01.740
+[Speaker 3]: And you know, our mode also uses a lot of
+
+00:24:09.340 --> 00:24:09.620
+test. In our mode, we have a lot of tests
+
+00:24:13.940 --> 00:24:14.440
+[Speaker 0]: Ah, okay. Yeah. Yeah. I'm sure I have.
+
+00:24:15.900 --> 00:24:16.400
+[Speaker 3]: also. We rely on CLLatF for,
+
+00:24:19.220 --> 00:24:19.720
+we don't use third-party libraries at all.
+
+00:24:22.140 --> 00:24:22.640
+[Speaker 0]: Oh, you use CLLatF, okay.
+
+00:24:26.680 --> 00:24:27.180
+Yeah. Yeah. Yeah. At First I found it very
+
+00:24:29.480 --> 00:24:29.700
+powerful to use that, but then I sort of,
+
+00:24:32.120 --> 00:24:32.320
+I learned more about how we can use the
+
+00:24:34.340 --> 00:24:34.840
+mocking library for what I needed.
+
+00:24:36.900 --> 00:24:37.400
+And I prefer that at the moment.
+
+00:24:40.560 --> 00:24:41.060
+[Speaker 3]: I see, that is interesting.
+
+00:24:42.500 --> 00:24:42.700
+Because I had seen it,
+
+00:24:45.440 --> 00:24:45.600
+but I didn't consider that it's gonna be
+
+00:24:46.800 --> 00:24:47.300
+useful even in simple cases.
+
+00:24:52.640 --> 00:24:53.140
+[Speaker 0]: It has its limitations.
+
+00:24:58.260 --> 00:24:58.760
+So it's like life, how you turn depends.
+
+00:25:03.740 --> 00:25:04.020
+But maybe I should look more into the org
+
+00:25:05.880 --> 00:25:06.100
+mode and the test case to learn more about
+
+00:25:07.480 --> 00:25:07.980
+that. So thanks for pointing that out.
+
+00:25:14.620 --> 00:25:15.120
+[Speaker 3]: We are trying to cover as much as we can.
+
+00:25:17.520 --> 00:25:17.740
+It's almost impossible for org.
+
+00:25:20.500 --> 00:25:21.000
+But yeah, we keep adding more tests.
+
+00:25:22.780 --> 00:25:23.280
+[Speaker 0]: That's great.
+
+00:25:52.720 --> 00:25:53.200
+Someone's typing. I don't know.
+
+00:25:54.340 --> 00:25:54.840
+Any more questions? No?
+
+00:26:01.060 --> 00:26:01.560
+Okay, then I'll go back and try to document
+
+00:26:05.200 --> 00:26:05.360
+this in the etherpad. Thank you everybody for
+
+00:26:08.860 --> 00:26:09.160
+[Speaker 1]: Thank you guys. Great work.
+
+00:26:09.400 --> 00:26:09.900
+[Speaker 0]: joining. Great. Thank you.
+
+00:26:11.100 --> 00:26:11.600
+Take care. Bye-bye.
+
+00:26:15.060 --> 00:26:15.560
+[Speaker 1]: Take care. Bye. Silence.
diff --git a/2023/captions/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--main--chapters.vtt b/2023/captions/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--main--chapters.vtt
new file mode 100644
index 00000000..ea8a679b
--- /dev/null
+++ b/2023/captions/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--main--chapters.vtt
@@ -0,0 +1,68 @@
+WEBVTT
+
+
+00:00:03.120 --> 00:03:11.159
+Introduction
+
+00:03:11.160 --> 00:04:14.359
+ERT: Emacs Lisp Regression Testing
+
+00:04:14.360 --> 00:04:56.919
+Assertions with `should`
+
+00:04:56.920 --> 00:06:54.559
+Running a test case
+
+00:06:54.560 --> 00:07:46.960
+Debug a test
+
+00:07:50.380 --> 00:09:10.479
+Commercial break: Hyperbole
+
+00:09:10.480 --> 00:10:39.119
+Instrument function on the fly
+
+00:10:39.120 --> 00:14:41.239
+Mocking
+
+00:14:41.240 --> 00:15:24.099
+cl-letf
+
+00:15:24.100 --> 00:15:55.719
+Hooks
+
+00:15:55.720 --> 00:17:05.099
+Side effects and initial buffer state
+
+00:17:05.100 --> 00:17:16.519
+with-temp-buffer
+
+00:17:16.520 --> 00:17:33.287
+make-temp-file
+
+00:17:33.288 --> 00:18:09.919
+buffer-string
+
+00:18:09.920 --> 00:18:51.979
+buffer-name
+
+00:18:51.980 --> 00:19:02.679
+major-mode
+
+00:19:02.680 --> 00:20:15.099
+unwind-protect
+
+00:20:15.100 --> 00:21:38.459
+Input, with-simulated-input
+
+00:21:38.460 --> 00:23:03.219
+Running all tests
+
+00:23:03.220 --> 00:24:05.059
+Batch mode
+
+00:24:05.060 --> 00:26:05.160
+Skipping tests
+
+00:26:08.460 --> 00:26:55.240
+Conclusion
diff --git a/2023/captions/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--main.vtt b/2023/captions/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--main.vtt
new file mode 100644
index 00000000..d07b8201
--- /dev/null
+++ b/2023/captions/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--main.vtt
@@ -0,0 +1,1371 @@
+WEBVTT captioned by sachac, checked by sachac
+
+NOTE Introduction
+
+00:00:03.120 --> 00:00:07.439
+Hi everyone! I'm Mats Lidell.
+
+00:00:07.440 --> 00:00:09.879
+I'm going to talk about my journey
+
+00:00:09.880 --> 00:00:12.480
+writing test cases for GNU Hyperbole
+
+00:00:12.481 --> 00:00:19.399
+and what I learned on the way.
+
+00:00:19.400 --> 00:00:24.079
+So, why write tests for GNU Hyperbole?
+
+00:00:24.080 --> 00:00:25.679
+There is some background.
+
+00:00:25.680 --> 00:00:27.959
+I'm the co-maintainer of GNU Hyperbole
+
+00:00:27.960 --> 00:00:33.479
+together with Bob Weiner. Bob is the author of the package.
+
+00:00:33.480 --> 00:00:34.680
+The package is available through
+
+00:00:34.681 --> 00:00:38.799
+the Emacs package manager and GNU Elpa
+
+00:00:38.800 --> 00:00:42.599
+if you would want to try it out.
+
+00:00:42.600 --> 00:00:46.359
+The package has some age. I think it dates back to
+
+00:00:46.360 --> 00:00:50.119
+a first release around 1993, which is also
+
+00:00:50.120 --> 00:00:54.799
+when I got in contact with the package the first time.
+
+00:00:54.800 --> 00:00:58.239
+I was a user of the package for many years.
+
+00:00:58.240 --> 00:01:03.119
+Later, I became the maintainer of the package for the FSF.
+
+00:01:03.120 --> 00:01:04.679
+That was although I did not have
+
+00:01:04.680 --> 00:01:09.039
+much knowledge of Emacs Lisp,
+
+00:01:09.040 --> 00:01:12.679
+and I still have a lot to learn.
+
+00:01:12.680 --> 00:01:15.959
+A few years ago, we started to work actively on the package,
+
+00:01:15.960 --> 00:01:20.839
+with setting up goals and having meetings.
+
+00:01:20.840 --> 00:01:24.959
+So my starting point is that I had experience
+
+00:01:24.960 --> 00:01:27.439
+with test automation from development
+
+00:01:27.440 --> 00:01:30.599
+in C++, Java and Python
+
+00:01:30.600 --> 00:01:37.239
+using different x-unit frameworks like cppunit, junit.
+
+00:01:37.240 --> 00:01:40.039
+That was in my daytime work where
+
+00:01:40.040 --> 00:01:41.959
+the technique of using pull requests
+
+00:01:41.960 --> 00:01:46.719
+with changes backed up by tests were the daily routine.
+
+00:01:46.720 --> 00:01:49.199
+It was really a requirement for a change to go in
+
+00:01:49.200 --> 00:01:52.159
+to have supporting test cases.
+
+00:01:52.160 --> 00:01:58.559
+I believe, a quite common setup and requirement these days.
+
+00:01:58.560 --> 00:02:02.039
+I also had been an Emacs user for many years,
+
+00:02:02.040 --> 00:02:04.279
+but with focus on being a user.
+
+00:02:04.280 --> 00:02:09.839
+So as I mentioned, I have limited Emacs Lisp knowledge.
+
+00:02:09.840 --> 00:02:11.359
+When we decided to start
+
+00:02:11.360 --> 00:02:13.959
+to work actively on Hyperbole again,
+
+00:02:13.960 --> 00:02:15.519
+it was natural for me to look into
+
+00:02:15.520 --> 00:02:18.679
+raising the quality by adding unit tests.
+
+00:02:18.680 --> 00:02:20.679
+This also goes hand in hand
+
+00:02:20.680 --> 00:02:25.239
+with running these regularly as part of a build process.
+
+00:02:25.240 --> 00:02:28.439
+All in all, following the current best practice
+
+00:02:28.440 --> 00:02:31.359
+of software development.
+
+00:02:31.360 --> 00:02:36.479
+But since Hyperbole had no tests at all,
+
+00:02:36.480 --> 00:02:38.719
+it would not be enough just to add tests
+
+00:02:38.720 --> 00:02:41.799
+for new or changed functionality.
+
+00:02:41.800 --> 00:02:44.639
+We wanted to add it even broader; ideally, everywhere.
+
+00:02:44.640 --> 00:02:48.399
+So work started with adding tests here and there
+
+00:02:48.400 --> 00:02:52.039
+based on our gut feeling where it would be most useful.
+
+00:02:52.040 --> 00:02:55.799
+This work is still ongoing.
+
+00:02:55.800 --> 00:02:58.119
+So this is where my journey starts
+
+00:02:58.120 --> 00:03:00.759
+with much functionality to test,
+
+00:03:00.760 --> 00:03:03.359
+no knowledge of what testing frameworks existed,
+
+00:03:03.360 --> 00:03:11.159
+and not really knowing a lot about Emacs Lisp at all.
+
+NOTE ERT: Emacs Lisp Regression Testing
+
+00:03:11.160 --> 00:03:13.799
+Luckily there is a package for writing tests in Emacs.
+
+00:03:13.800 --> 00:03:17.919
+It is called ERT: Emacs Lisp Regression Testing.
+
+00:03:17.920 --> 00:03:20.959
+It contains both support for defining tests and running them.
+
+00:03:20.960 --> 00:03:24.639
+Defining a test is done with the macro `ert-deftest`.
+
+00:03:24.640 --> 00:03:28.919
+In its simplest form, a test has a name, a doc string, and a body.
+
+00:03:28.920 --> 00:03:31.439
+The doc string is where you typically can give
+
+00:03:31.440 --> 00:03:33.799
+a detailed description of the test
+
+00:03:33.800 --> 00:03:35.559
+and has space for more info
+
+00:03:35.560 --> 00:03:42.279
+than what can be given in the test name.
+
+00:03:42.280 --> 00:03:45.239
+The body is where all the interesting things happen.
+
+00:03:45.240 --> 00:03:51.959
+It is here you prepare the test, run it and verify the outcome.
+
+00:03:51.960 --> 00:03:54.239
+Schematically, it looks like this.
+
+00:03:54.240 --> 00:04:00.239
+You have the ert-deftest, you have the test name,
+
+00:04:00.240 --> 00:04:02.799
+and the doc string, and then the body.
+
+00:04:02.800 --> 00:04:06.559
+It is in the body where everything interesting happens.
+
+00:04:06.560 --> 00:04:09.759
+The test is prepared, the function of the test is executed,
+
+00:04:09.760 --> 00:04:13.119
+and the outcome of the test is evaluated.
+
+00:04:13.120 --> 00:04:14.359
+Did the test succeed or not?
+
+NOTE Assertions with `should`
+
+00:04:14.360 --> 00:04:18.479
+The verification of a test is performed with
+
+00:04:18.480 --> 00:04:21.479
+one or more so-called assertions.
+
+00:04:21.480 --> 00:04:24.999
+In ERT, they are implemented
+
+00:04:25.000 --> 00:04:26.599
+with the macro `should`
+
+00:04:26.600 --> 00:04:33.559
+together with a set of related macros.
+
+00:04:33.560 --> 00:04:35.519
+`should` takes a form as argument,
+
+00:04:35.520 --> 00:04:37.839
+and if the form evaluates to nil,
+
+00:04:37.840 --> 00:04:48.580
+the test has failed. So let's look at an example.
+
+00:04:48.581 --> 00:04:51.919
+This simple test verifies that the function `+`
+
+00:04:51.920 --> 00:04:56.919
+can add the numbers 2 and 3 and get the result 5.
+
+NOTE Running a test case
+
+00:04:56.920 --> 00:05:01.959
+So now we have defined a test case. How do we run it?
+
+00:05:01.960 --> 00:05:03.919
+The ERT package has the function (or
+
+00:05:03.920 --> 00:05:09.519
+rather convenience alias) `ert`. It takes a test selector.
+
+00:05:09.520 --> 00:05:19.759
+The test name works as a selector for running just one test.
+
+00:05:19.760 --> 00:05:27.900
+So here we have the example. Let's evaluate it.
+
+00:05:27.901 --> 00:05:34.519
+We define it and then we run it using ERT.
+
+00:05:34.520 --> 00:05:42.399
+As you see, we get prompted for a test selector
+
+00:05:42.400 --> 00:05:46.319
+but we only have one test case defined at the moment.
+
+00:05:46.320 --> 00:05:55.919
+It's the example 0. So let's hit RET.
+
+00:05:55.920 --> 00:05:58.959
+As you see here, we get some output
+
+00:05:58.960 --> 00:06:01.359
+describing what we have just done.
+
+00:06:01.360 --> 00:06:04.839
+There is one test case it has passed, zero failed,
+
+00:06:04.840 --> 00:06:07.839
+zero skipped, total 1 of 1 test case
+
+00:06:07.840 --> 00:06:14.439
+and some time stamps for the execution.
+
+00:06:14.440 --> 00:06:18.519
+We also see this green mark here indicating one test case
+
+00:06:18.520 --> 00:06:23.039
+and that it was successful.
+
+00:06:23.040 --> 00:06:29.659
+For inspecting the test, we can hit the letter `l`
+
+00:06:29.660 --> 00:06:32.839
+which shows all the `should` forms
+
+00:06:32.840 --> 00:06:37.779
+that was executed during this test case.
+
+00:06:37.780 --> 00:06:39.919
+So here we see that we have the `should`,
+
+00:06:39.920 --> 00:06:47.999
+one `should` executed, and we see the form equals to 2,
+
+00:06:48.000 --> 00:06:49.799
+and it was 5 equals to 5.
+
+00:06:49.800 --> 00:06:54.559
+So a good example of a successful test case.
+
+NOTE Debug a test
+
+00:06:54.560 --> 00:06:57.919
+So now we've seen how we can run a test case.
+
+00:06:57.920 --> 00:07:03.799
+Can we debug it? Yes. For debugging a test case,
+
+00:07:03.800 --> 00:07:07.939
+the `ert-deftest` can be set up using `edebug-defun`,
+
+00:07:07.940 --> 00:07:10.319
+just as a function or macro is set up
+
+00:07:10.320 --> 00:07:18.819
+or instrumented for debugging. So let's try that.
+
+00:07:18.820 --> 00:07:24.119
+So we try `edebug-defun` here.
+
+00:07:24.120 --> 00:07:28.279
+Now it's instrumented for debugging.
+
+00:07:28.280 --> 00:07:35.659
+And we run it, `ert`, and we're inside the debugger,
+
+00:07:35.660 --> 00:07:40.679
+and we can inspect here what's happening.
+
+00:07:40.680 --> 00:07:46.960
+Step through it and yes it succeeded just as before.
+
+NOTE Commercial break: Hyperbole
+
+00:07:50.380 --> 00:07:56.879
+It's time for a commercial break!
+
+00:07:56.880 --> 00:08:00.079
+Hyperbole itself can help with running tests
+
+00:08:00.080 --> 00:08:03.639
+and also help with running them in debug mode.
+
+00:08:03.640 --> 00:08:08.519
+That is because hyperbole identifies the `ert-deftest`
+
+00:08:08.520 --> 00:08:12.679
+as an implicit button. An implicit button is basically
+
+00:08:12.680 --> 00:08:13.759
+a string or pattern
+
+00:08:13.760 --> 00:08:16.799
+that Hyperbole has assigned some meaning to.
+
+00:08:16.800 --> 00:08:19.959
+For the string `ert-deftest`, it is to run the test case.
+
+00:08:19.960 --> 00:08:24.559
+You activate the button with the action-key.
+
+00:08:24.560 --> 00:08:27.079
+The standard binding is the middle mouse button,
+
+00:08:27.080 --> 00:08:33.040
+or from the keyboard, M-RET.
+
+00:08:33.041 --> 00:08:34.799
+So let's try that.
+
+00:08:34.800 --> 00:08:42.219
+We move the cursor here and then we type M-RET.
+
+00:08:42.220 --> 00:08:47.959
+And boom, the test case was executed.
+
+00:08:47.960 --> 00:08:54.479
+And to run it in debug mode we type C-u M-RET
+
+00:08:54.480 --> 00:08:57.719
+to get the assist key, and then we're in the debugger.
+
+00:08:57.720 --> 00:09:10.479
+So that's pretty useful and convenient.
+
+NOTE Instrument function on the fly
+
+00:09:10.480 --> 00:09:13.719
+A related useful feature here is the step-in functionality
+
+00:09:13.720 --> 00:09:16.399
+bound to the letter i in `debug-mode`.
+
+00:09:16.400 --> 00:09:18.119
+It allows you to step into a function
+
+00:09:18.120 --> 00:09:20.479
+and continue debugging from there.
+
+00:09:20.480 --> 00:09:22.839
+For the cases where your test does not do what you want,
+
+00:09:22.840 --> 00:09:25.119
+looking at what happens in the function of the test
+
+00:09:25.120 --> 00:09:37.259
+can be really useful. Let's try that with another example.
+
+00:09:37.260 --> 00:09:43.359
+So here we have two helper functions, one `f1-add`,
+
+00:09:43.360 --> 00:09:47.439
+that use the built-in `+` function
+
+00:09:47.440 --> 00:09:52.239
+and then we have `my-add` that uses that function.
+
+00:09:52.240 --> 00:09:59.399
+So we're going to test myadd.
+
+00:09:59.400 --> 00:10:02.919
+And then let's run this.
+
+00:10:02.920 --> 00:10:05.959
+Let's run this using hyperbole in debug mode
+
+00:10:05.960 --> 00:10:10.079
+C-u M-RET. We're in the debugger again,
+
+00:10:10.080 --> 00:10:15.639
+and let's step up front to my function under test
+
+00:10:15.640 --> 00:10:19.359
+and then press `i` for getting it instrumented
+
+00:10:19.360 --> 00:10:23.019
+and going into it for debugging.
+
+00:10:23.020 --> 00:10:25.139
+And here we can expect that it's getting
+
+00:10:25.140 --> 00:10:26.559
+the arguments 1 and 3,
+
+00:10:26.560 --> 00:10:30.999
+and it returns the result 4 as expected.
+
+00:10:31.000 --> 00:10:39.119
+And yes, of course, our test case will then succeed.
+
+NOTE Mocking
+
+00:10:39.120 --> 00:10:41.839
+The next tool in our toolbox is mocking.
+
+00:10:41.840 --> 00:10:46.239
+Mocking is needed when we want to simulate the response
+
+00:10:46.240 --> 00:10:49.279
+from a function used by the function under test.
+
+00:10:49.280 --> 00:10:53.139
+That is the implementation of the function.
+
+00:10:53.140 --> 00:10:56.119
+This could be for various reasons.
+
+00:10:56.120 --> 00:11:00.879
+One example could be because it would be hard or impossible
+
+00:11:00.880 --> 00:11:04.199
+in the test setup to get the behavior you want to test for,
+
+00:11:04.200 --> 00:11:06.279
+like an external error case.
+
+00:11:06.280 --> 00:11:08.679
+But the mock can also be used to verify
+
+00:11:08.680 --> 00:11:11.619
+that the function is called with a specific argument.
+
+00:11:11.620 --> 00:11:14.559
+We can view it as a way to isolate the function on the test
+
+00:11:14.560 --> 00:11:16.719
+from its dependencies.
+
+00:11:16.720 --> 00:11:18.959
+So in order to test the function in isolation,
+
+00:11:18.960 --> 00:11:22.079
+we need to cut out any dependencies to external behavior.
+
+00:11:22.080 --> 00:11:25.839
+Most obvious would be dependencies to external resources,
+
+00:11:25.840 --> 00:11:27.639
+such as web pages. As an example:
+
+00:11:27.640 --> 00:11:30.639
+Hyperbole contains functionality to link you to
+
+00:11:30.640 --> 00:11:34.239
+social media resources and other resources on the net.
+
+00:11:34.240 --> 00:11:37.899
+Testing that would require the test system to call out
+
+00:11:37.900 --> 00:11:39.639
+to the social media resources
+
+00:11:39.640 --> 00:11:43.539
+and would depend on it being available, etc.
+
+00:11:43.540 --> 00:11:45.479
+Nothing technically stops a test case
+
+00:11:45.480 --> 00:11:47.239
+to depend on the external resources,
+
+00:11:47.240 --> 00:11:51.319
+but would, if nothing else, be flaky or slow.
+
+00:11:51.320 --> 00:11:53.759
+It could be part of an end-to-end suite
+
+00:11:53.760 --> 00:11:57.179
+where we want to test that it works all the way.
+
+00:11:57.180 --> 00:11:59.719
+In this case, we want to look at the isolated case
+
+00:11:59.720 --> 00:12:04.099
+that can be run with no dependency on external resources.
+
+00:12:04.100 --> 00:12:06.679
+What you want to do is to replace the function with a mock
+
+00:12:06.680 --> 00:12:10.339
+that behaves as the real function would do.
+
+00:12:10.340 --> 00:12:11.639
+The package I have found
+
+00:12:11.640 --> 00:12:14.319
+and have used for mocking is `el-mock`.
+
+00:12:14.320 --> 00:12:21.839
+The workhorse in this package is the `with-mock` macro.
+
+00:12:21.840 --> 00:12:26.519
+It looks like this: `with-mock` followed by a body.
+
+00:12:26.520 --> 00:12:30.439
+In the execution of the body, stubs and mocks
+
+00:12:30.440 --> 00:12:32.899
+defined in the body is respected.
+
+00:12:32.900 --> 00:12:39.199
+Let's look at some examples to make that clearer.
+
+00:12:39.200 --> 00:12:42.079
+In this case, we have the macro `with-mock`.
+
+00:12:42.080 --> 00:12:43.959
+It works so that the expression
+
+00:12:43.960 --> 00:12:48.639
+`stub + => 10` is interpreted
+
+00:12:48.640 --> 00:12:51.919
+so that the function `+` will be replaced with the stub.
+
+00:12:51.920 --> 00:12:56.779
+The stub will return 10 regardless how it is called.
+
+00:12:56.780 --> 00:12:58.119
+Note that the stub function
+
+00:12:58.120 --> 00:13:00.199
+does not have to be called at this level
+
+00:13:00.200 --> 00:13:02.799
+but could be called at any level in the call chain.
+
+00:13:02.800 --> 00:13:07.479
+By knowing how the function under test is implemented
+
+00:13:07.480 --> 00:13:09.319
+and how the implementation works,
+
+00:13:09.320 --> 00:13:11.959
+you can find function calls you want to mock
+
+00:13:11.960 --> 00:13:14.999
+to force certain behavior that you want to test,
+
+00:13:15.000 --> 00:13:18.999
+or to avoid calls to external resources, slow calls, etc.
+
+00:13:19.000 --> 00:13:21.959
+Simply isolate the function under test
+
+00:13:21.960 --> 00:13:26.119
+and simulate its environment.
+
+00:13:26.120 --> 00:13:28.639
+Mock is a little bit more sophisticated
+
+00:13:28.640 --> 00:13:30.079
+and depends on the arguments
+
+00:13:30.080 --> 00:13:31.479
+that the mock function is called with.
+
+00:13:31.480 --> 00:13:33.847
+Or more precise, it is checked
+
+00:13:33.848 --> 00:13:35.519
+after the `with-mock` clause
+
+00:13:35.520 --> 00:13:38.079
+that the arguments match the arguments it was called with
+
+00:13:38.080 --> 00:13:39.759
+or even if it was called at all.
+
+00:13:39.760 --> 00:13:41.839
+If it is called with other arguments
+
+00:13:41.840 --> 00:13:43.719
+there will be an error,
+
+00:13:43.720 --> 00:13:46.479
+and if it's not called, it is also an error.
+
+00:13:46.480 --> 00:13:48.359
+So this way, we are sure that the function
+
+00:13:48.360 --> 00:13:51.319
+we were expected to be called actually was called.
+
+00:13:51.320 --> 00:13:53.399
+An important piece of the testing.
+
+00:13:53.400 --> 00:13:56.239
+So we are sure that the mock we have provided
+
+00:13:56.240 --> 00:14:03.999
+actually is triggered by the test case.
+
+00:14:04.000 --> 00:14:08.159
+So here we have an example of `with-mock`
+
+00:14:08.160 --> 00:14:18.879
+where the `f1-add` function is mocked,
+
+00:14:18.880 --> 00:14:21.999
+so that if it's called with 2 and 3 as arguments,
+
+00:14:22.000 --> 00:14:24.919
+it will return 10. Then we have a test case
+
+00:14:24.920 --> 00:14:27.999
+where we try the `my-add` function,
+
+00:14:28.000 --> 00:14:30.319
+as you might remember, and call that with 2 and 3
+
+00:14:30.320 --> 00:14:32.799
+and see that it should also then return 10
+
+00:14:32.800 --> 00:14:41.239
+because it's using `f1-add`.
+
+NOTE cl-letf
+
+00:14:41.240 --> 00:14:44.559
+Moving over to `cl-letf`.
+
+00:14:44.560 --> 00:14:47.679
+In rare occasions, the limitations of `el-mock` means
+
+00:14:47.680 --> 00:14:50.239
+you would want to implement a full-fledged function
+
+00:14:50.240 --> 00:14:52.979
+to be used under test.
+
+00:14:52.980 --> 00:14:55.439
+Then the macro `cl-letf` can be useful.
+
+00:14:55.440 --> 00:14:57.879
+However, you need to handle the case yourself
+
+00:14:57.880 --> 00:15:00.099
+if the function was not called.
+
+00:15:00.100 --> 00:15:03.519
+Looking through the test cases where I have used `cl-letf`,
+
+00:15:03.520 --> 00:15:06.119
+I think most can be implemented using plain mocking.
+
+00:15:06.120 --> 00:15:11.239
+Cases left is where the args to the mock might be different
+
+00:15:11.240 --> 00:15:13.739
+due to environment issues.
+
+00:15:13.740 --> 00:15:24.099
+In that case, a static mock will not work.
+
+NOTE Hooks
+
+00:15:24.100 --> 00:15:30.719
+Another trick is that functions that uses hooks.
+
+00:15:30.720 --> 00:15:35.639
+You can overload or replace the hooks to do the testing.
+
+00:15:35.640 --> 00:15:40.759
+So you can use the hook function just to do the verification
+
+00:15:40.760 --> 00:15:43.119
+and not do anything useful in the hook.
+
+00:15:43.120 --> 00:15:45.079
+Also, here you need to be careful
+
+00:15:45.080 --> 00:15:55.719
+to make sure the test handler is called and nothing else.
+
+NOTE Side effects and initial buffer state
+
+00:15:55.720 --> 00:15:57.679
+So far we have been talking about testing
+
+00:15:57.680 --> 00:15:59.039
+and what the function returns.
+
+00:15:59.040 --> 00:16:01.119
+In the best of words, we have a pure function
+
+00:16:01.120 --> 00:16:02.959
+that only depends on its arguments
+
+00:16:02.960 --> 00:16:04.939
+and produces no side effects.
+
+00:16:04.940 --> 00:16:06.899
+Many operations produce side effects
+
+00:16:06.900 --> 00:16:09.479
+or operate on the contents of buffers
+
+00:16:09.480 --> 00:16:12.379
+such as writing a message in the message buffer,
+
+00:16:12.380 --> 00:16:15.659
+change the state of a buffer, move point etc.
+
+00:16:15.660 --> 00:16:18.859
+Hyperbole is not an exception. Quite the contrary.
+
+00:16:18.860 --> 00:16:20.839
+Much of the functions creating links
+
+00:16:20.840 --> 00:16:24.420
+are just about updating buffers.
+
+00:16:24.421 --> 00:16:28.559
+This poses a special problem for tests.
+
+00:16:28.560 --> 00:16:29.839
+The test gets longer
+
+00:16:29.840 --> 00:16:31.919
+since you need to create buffers and files,
+
+00:16:31.920 --> 00:16:33.279
+initialize the contents.
+
+00:16:33.280 --> 00:16:35.159
+Verifying the outcome becomes trickier
+
+00:16:35.160 --> 00:16:39.019
+since you need to make sure you look at the right place.
+
+00:16:39.020 --> 00:16:41.039
+At the end of the test, you need to clean up,
+
+00:16:41.040 --> 00:16:43.439
+both for not leaving a lot of garbage
+
+00:16:43.440 --> 00:16:45.279
+in buffers and files around,
+
+00:16:45.280 --> 00:16:48.479
+and even worse, not cause later tests
+
+00:16:48.480 --> 00:16:50.959
+to depend on the leftovers from the other tests.
+
+00:16:50.960 --> 00:16:53.079
+Here are some functions and variables
+
+00:16:53.080 --> 00:17:05.099
+I have found useful for this.
+
+NOTE with-temp-buffer
+
+00:17:05.100 --> 00:17:09.199
+For creating tests: `with-temp-buffer`:
+
+00:17:09.200 --> 00:17:11.919
+it provides you a temp buffer that you visit,
+
+00:17:11.920 --> 00:17:13.719
+and afterwards, there is no need to clean up.
+
+00:17:13.720 --> 00:17:16.519
+This is the first choice if that is all you need.
+
+NOTE make-temp-file
+
+00:17:16.520 --> 00:17:20.519
+`make-temp-file`: If you need a file,
+
+00:17:20.520 --> 00:17:21.959
+this is the function to use.
+
+00:17:21.960 --> 00:17:24.279
+It creates a temp file or a directory.
+
+00:17:24.280 --> 00:17:26.959
+The file can be filled with initial contents.
+
+00:17:26.960 --> 00:17:31.019
+This needs to be cleaned up after a test.
+
+00:17:31.020 --> 00:17:33.287
+Moving on to verifying and debugging:
+
+NOTE buffer-string
+
+00:17:33.288 --> 00:17:38.247
+`buffer-string`: returns the full contents
+
+00:17:38.248 --> 00:17:39.499
+of the buffer as a string.
+
+00:17:39.500 --> 00:17:41.399
+That can sound a bit voluminous,
+
+00:17:41.400 --> 00:17:46.139
+but since tests are normally small, this often works well.
+
+00:17:46.140 --> 00:17:48.439
+I have in particular found good use of comparing
+
+00:17:48.440 --> 00:17:50.399
+the contents of buffers with the empty string.
+
+00:17:50.400 --> 00:17:53.359
+That would give an error, but as we have seen
+
+00:17:53.360 --> 00:17:56.079
+with the output produced by the `should` assertion,
+
+00:17:56.080 --> 00:17:58.079
+this is almost like a print statement
+
+00:17:58.080 --> 00:18:01.199
+and can be compared with the good old technique
+
+00:18:01.200 --> 00:18:04.399
+of debugging with print statements.
+
+00:18:04.400 --> 00:18:06.247
+There might be other ways to do the same
+
+00:18:06.248 --> 00:18:09.919
+as we saw with debugging.
+
+NOTE buffer-name
+
+00:18:09.920 --> 00:18:13.719
+buffer-name: Getting the buffer name is good
+
+00:18:13.720 --> 00:18:16.239
+to verify what buffer we are looking at.
+
+00:18:16.240 --> 00:18:18.359
+I often found it useful to check
+
+00:18:18.360 --> 00:18:21.119
+that my assumptions on what buffer I am acting on
+
+00:18:21.120 --> 00:18:23.399
+is correct by adding `should` clauses
+
+00:18:23.400 --> 00:18:25.399
+in the middle of the test execution
+
+00:18:25.400 --> 00:18:27.399
+or after preparing the test input.
+
+00:18:27.400 --> 00:18:31.679
+Sometimes Emacs can switch buffers in strange ways,
+
+00:18:31.680 --> 00:18:34.199
+maybe because the test case is badly written,
+
+00:18:34.200 --> 00:18:37.239
+and making sure your assumptions are correct
+
+00:18:37.240 --> 00:18:40.339
+is a good sanity check.
+
+00:18:40.340 --> 00:18:42.239
+Even the ert package does
+
+00:18:42.240 --> 00:18:44.879
+some buffer and windows manipulation for its reporting
+
+00:18:44.880 --> 00:18:47.487
+that I have not fully learned how to master,
+
+00:18:47.488 --> 00:18:51.979
+so assertion for checking the sanity of the test is good.
+
+NOTE major-mode
+
+00:18:51.980 --> 00:18:55.679
+Finally, `major-mode`: Verify the buffer has the proper mode.
+
+00:18:55.680 --> 00:19:02.679
+Can also be very useful and is a good sanity check.
+
+NOTE unwind-protect
+
+00:19:02.680 --> 00:19:06.599
+Finally, cleaning up. `unwind-protect`.
+
+00:19:06.600 --> 00:19:09.039
+The tool for cleaning up is the `unwind-protect` form
+
+00:19:09.040 --> 00:19:12.479
+which ensures that the unwind forms
+
+00:19:12.480 --> 00:19:15.439
+always are executed regardless of the outcome of the body.
+
+00:19:15.440 --> 00:19:20.419
+So if your test fails, you are sure the cleanup is executed.
+
+00:19:20.420 --> 00:19:22.759
+Let's look at unwind-protect together with
+
+00:19:22.760 --> 00:19:30.519
+the temporary file example. Many tests look like this.
+
+00:19:30.520 --> 00:19:35.279
+You create some resource, you call `unwind-protect`,
+
+00:19:35.280 --> 00:19:42.759
+you do the test, and then afterwards you do the cleanup.
+
+00:19:42.760 --> 00:19:46.359
+The cleanup for a file and a buffer is so common,
+
+00:19:46.360 --> 00:19:50.999
+so I have created a helper for that.
+
+00:19:51.000 --> 00:19:56.559
+It looks like this.
+
+00:19:56.560 --> 00:19:59.179
+The trick with the `buffer-modified` flag
+
+00:19:59.180 --> 00:20:00.719
+is to avoid getting prompted
+
+00:20:00.720 --> 00:20:03.219
+for killing a buffer that is not saved.
+
+00:20:03.220 --> 00:20:05.439
+The test buffers are often in the state
+
+00:20:05.440 --> 00:20:15.099
+where they have not been saved but modified.
+
+NOTE Input, with-simulated-input
+
+00:20:15.100 --> 00:20:19.679
+Another problem for tests are input.
+
+00:20:19.680 --> 00:20:21.559
+In the middle of execution a function
+
+00:20:21.560 --> 00:20:24.039
+might want to have some interaction with the user.
+
+00:20:24.040 --> 00:20:26.959
+Testing this poses a problem, not only in that
+
+00:20:26.960 --> 00:20:31.199
+the input matters, but also as how even to get the test case
+
+00:20:31.200 --> 00:20:34.079
+to recognize the input!?
+
+00:20:34.080 --> 00:20:36.039
+Ideally the tests are run in batch mode,
+
+00:20:36.040 --> 00:20:38.919
+which in some sense means no user interaction.
+
+00:20:38.920 --> 00:20:42.999
+In batch mode, there is no event loop running.
+
+00:20:43.000 --> 00:20:47.179
+Fortunately, there is a package `with-simulated-input`
+
+00:20:47.180 --> 00:20:53.259
+that gets you around these issues.
+
+00:20:53.260 --> 00:20:55.399
+This is a macro that allows us
+
+00:20:55.400 --> 00:20:56.999
+to define a set of characters
+
+00:20:57.000 --> 00:20:59.079
+that will be read by the function under the test,
+
+00:20:59.080 --> 00:21:02.579
+and all of this works in batch mode. It looks like this.
+
+00:21:02.580 --> 00:21:04.159
+We have `with-simulated-input`,
+
+00:21:04.160 --> 00:21:09.839
+and then a string of characters, and then a body.
+
+00:21:09.840 --> 00:21:11.647
+The form takes a string of keys
+
+00:21:11.648 --> 00:21:13.119
+and runs the rest of the body,
+
+00:21:13.120 --> 00:21:15.439
+and if there are input required,
+
+00:21:15.440 --> 00:21:18.119
+it is picked from the string of keys.
+
+00:21:18.120 --> 00:21:20.421
+In our example, the `read-string` call
+
+00:21:20.422 --> 00:21:21.719
+will read up until RET,
+
+00:21:21.720 --> 00:21:26.119
+and then return the characters read.
+
+00:21:26.120 --> 00:21:29.639
+As you see in the example, space needs to be provided
+
+00:21:29.640 --> 00:21:38.459
+by the string SPC, as return by the string RET.
+
+NOTE Running all tests
+
+00:21:38.460 --> 00:21:40.799
+So now we have seen ways to create test cases
+
+00:21:40.800 --> 00:21:43.219
+and even make it possible to run some of them
+
+00:21:43.220 --> 00:21:44.679
+that has I/O in batch mode.
+
+00:21:44.680 --> 00:21:47.279
+But the initial goal was to run them all at once.
+
+00:21:47.280 --> 00:21:48.919
+How do you do that?
+
+00:21:48.920 --> 00:21:51.759
+Let's go back to the `ert` command.
+
+00:21:51.760 --> 00:21:53.799
+It prompts for a test selector.
+
+00:21:53.800 --> 00:21:56.279
+If we give it the selector `t`,
+
+00:21:56.280 --> 00:21:59.259
+it will run all tests we have currently defined.
+
+00:21:59.260 --> 00:22:05.779
+Let's try that with the subset of the Hyperbole tests.
+
+00:22:05.780 --> 00:22:09.559
+Here is the test folder in the Hyperbole directory.
+
+00:22:09.560 --> 00:22:18.819
+Let's go up here and load all the demo tests.
+
+00:22:18.820 --> 00:22:21.207
+And then try to run `ert`.
+
+00:22:21.208 --> 00:22:26.119
+Now we see that we have a bunch of test cases.
+
+00:22:26.120 --> 00:22:27.919
+We can all run them individually,
+
+00:22:27.920 --> 00:22:31.719
+but we can run them with `t` instead.
+
+00:22:31.720 --> 00:22:35.459
+We will run them all at once.
+
+00:22:35.460 --> 00:22:51.419
+So now, ert is executing all our test cases.
+
+00:22:51.420 --> 00:22:57.079
+So here we have a nice green display
+
+00:22:57.080 --> 00:23:03.219
+with all the test cases.
+
+NOTE Batch mode
+
+00:23:03.220 --> 00:23:08.159
+So that was fine, but we were still running it manually
+
+00:23:08.160 --> 00:23:11.980
+by calling ert. How could we run it from the command line?
+
+00:23:17.180 --> 00:23:21.499
+Ert comes with functions for running it in batch mode.
+
+00:23:21.500 --> 00:23:25.639
+For Hyperbole, we use `make` for repetitive tasks.
+
+00:23:25.640 --> 00:23:27.119
+So we have a make target
+
+00:23:27.120 --> 00:23:29.279
+that uses the ert batch functionality,
+
+00:23:29.280 --> 00:23:33.259
+and this is the line from the Makefile.
+
+00:23:33.260 --> 00:23:35.479
+This is a bit detailed,
+
+00:23:35.480 --> 00:23:37.539
+but you see that we have a part here
+
+00:23:37.540 --> 00:23:40.779
+where we load the test dependencies.
+
+00:23:40.780 --> 00:23:43.520
+For getting the packages
+
+00:23:43.521 --> 00:23:48.459
+such as `el-mock` and `with-simulated-input` etc. loaded.
+
+00:23:48.460 --> 00:23:53.559
+We also have... I also want to point out here the call to
+
+00:23:53.560 --> 00:23:58.159
+or the setting of `auto-save-default` to `nil`
+
+00:23:58.160 --> 00:24:02.439
+to get away with the prompt for excessive backup files
+
+00:24:02.440 --> 00:24:05.059
+that can pile up after running the tests a few times.
+
+NOTE Skipping tests
+
+00:24:05.060 --> 00:24:06.879
+Even with the help of simulated input,
+
+00:24:06.880 --> 00:24:08.919
+not all tests can be run in batch mode.
+
+00:24:08.920 --> 00:24:10.559
+They would simply not work there
+
+00:24:10.560 --> 00:24:12.439
+and have to be run in an interactive Emacs
+
+00:24:12.440 --> 00:24:14.179
+with the running event loop.
+
+00:24:14.180 --> 00:24:17.919
+One trick still to be able to use batch mode for automation
+
+00:24:17.920 --> 00:24:20.319
+is to put the guard at the top of each test case
+
+00:24:20.320 --> 00:24:22.559
+as the first thing to be executed,
+
+00:24:22.560 --> 00:24:25.719
+so that it kicks in before anything else and stops Emacs
+
+00:24:25.720 --> 00:24:27.199
+to try to run the test case.
+
+00:24:27.200 --> 00:24:35.519
+Now, it looks like this: `(skip-unless (not noninteractive))`.
+
+00:24:35.520 --> 00:24:38.639
+So when ert sees that the test should be skipped, it skips it
+
+00:24:38.640 --> 00:24:40.439
+and makes a note of that,
+
+00:24:40.440 --> 00:24:44.579
+so you will see how many tests that have been skipped.
+
+00:24:44.580 --> 00:24:47.559
+Too bad. We have a number of test cases defined,
+
+00:24:47.560 --> 00:24:51.359
+and to run them, we need to run them manually. Well sort of.
+
+00:24:51.360 --> 00:24:53.807
+Not being able to run all tests easily
+
+00:24:53.808 --> 00:24:58.419
+is a bit counterproductive
+
+00:24:58.420 --> 00:25:00.999
+since our goal is to run all tests.
+
+00:25:01.000 --> 00:25:04.719
+There is however no ert function to run tests in batch mode
+
+00:25:04.720 --> 00:25:06.779
+with an interactive Emacs.
+
+00:25:06.780 --> 00:25:08.479
+The closest I have got is either
+
+00:25:08.480 --> 00:25:10.079
+to start the Emacs from the command line
+
+00:25:10.080 --> 00:25:12.439
+calling the ert function as we just have seen,
+
+00:25:12.440 --> 00:25:14.799
+and then killing it manually when done;
+
+00:25:14.800 --> 00:25:19.599
+or add a function to extract the contents of the ERT buffer
+
+00:25:19.600 --> 00:25:24.599
+when done and echo it to standard output.
+
+00:25:24.600 --> 00:25:27.800
+This is how it looks in the Makefile
+
+00:25:27.801 --> 00:25:31.207
+to get the behavior of cutting and paste,
+
+00:25:31.208 --> 00:25:34.580
+getting the ERT output into a file
+
+00:25:34.581 --> 00:25:36.239
+so we can then kill Emacs
+
+00:25:36.240 --> 00:25:44.799
+and spit out the content of the ERT buffer.
+
+00:25:44.800 --> 00:25:47.739
+One final word here is that
+
+00:25:47.740 --> 00:25:54.559
+when you run this in a continuous integration pipeline,
+
+00:25:54.560 --> 00:25:59.399
+you might not have a TTY for getting Emacs to start,
+
+00:25:59.400 --> 00:26:03.200
+and that is then another problem
+
+00:26:03.201 --> 00:26:05.160
+with getting the interactive mode.
+
+NOTE Conclusion
+
+00:26:08.460 --> 00:26:11.120
+We have reached the end of the talk.
+
+00:26:11.121 --> 00:26:14.159
+If you have any new ideas
+
+00:26:14.160 --> 00:26:16.759
+or have some suggestions for improvements,
+
+00:26:16.760 --> 00:26:18.239
+feel free to reach out
+
+00:26:18.240 --> 00:26:21.100
+because I am still on the learning curve of writing,
+
+00:26:21.101 --> 00:26:25.299
+how to write good test cases.
+
+00:26:25.300 --> 00:26:27.639
+If you look at the test cases we have in Hyperbole
+
+00:26:27.640 --> 00:26:29.799
+and you think they might contradict what I am saying here,
+
+00:26:29.800 --> 00:26:32.579
+it is OK. It is probably right.
+
+00:26:32.580 --> 00:26:34.599
+I have changed the style as I go
+
+00:26:34.600 --> 00:26:36.639
+and we have not yet refactored all tests
+
+00:26:36.640 --> 00:26:38.579
+to benefit from new designs.
+
+00:26:38.580 --> 00:26:40.599
+That is also the beauty of the test case.
+
+00:26:40.600 --> 00:26:43.319
+As long as it serves its purpose, it is not terrible
+
+00:26:43.320 --> 00:26:47.799
+if it is not optimal or not having the best style.
+
+00:26:47.800 --> 00:26:55.240
+And yes, thanks for listening. Bye.
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
new file mode 100644
index 00000000..a10fafef
--- /dev/null
+++ b/2023/captions/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--main.vtt
@@ -0,0 +1,788 @@
+WEBVTT
+
+
+00:00:01.220 --> 00:00:03.580
+Hello, I'm Alexey Bychkadov,
+
+00:00:03.740 --> 00:00:06.899
+and I'm talking about unentangling projects
+
+00:00:06.899 --> 00:00:09.679
+and repositories, or maybe entangling them,
+
+00:00:09.679 --> 00:00:11.340
+depending on how you look at that.
+
+00:00:12.980 --> 00:00:15.740
+So there's going to be a short workflow note.
+
+00:00:16.619 --> 00:00:19.460
+I work as a researcher,
+
+00:00:19.940 --> 00:00:23.380
+So there are 3 main components to my work,
+
+00:00:23.680 --> 00:00:26.000
+I guess. First, I think,
+
+00:00:26.000 --> 00:00:28.140
+so I try to come up with a new ideas that
+
+00:00:28.140 --> 00:00:31.580
+usually results in some collection of notes I
+
+00:00:31.580 --> 00:00:33.760
+have. Second, I try things out.
+
+00:00:33.760 --> 00:00:36.180
+So it usually means that I write code.
+
+00:00:36.820 --> 00:00:38.540
+And third, I communicate.
+
+00:00:38.739 --> 00:00:40.739
+So I prepare papers, presentations,
+
+00:00:41.260 --> 00:00:43.160
+memos, and so on and so forth.
+
+00:00:44.120 --> 00:00:47.940
+And so The workflow problem I had is
+
+00:00:49.160 --> 00:00:53.000
+sometimes all this does not really fit into a
+
+00:00:53.000 --> 00:00:56.180
+concept of a single repository per project.
+
+00:00:56.200 --> 00:00:57.540
+So I might want to have,
+
+00:00:58.180 --> 00:01:01.160
+for example, a source code in 1 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
+
+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
+
+00:01:12.500 --> 00:01:15.840
+your workflows and I figured I should share
+
+00:01:16.240 --> 00:01:18.100
+what I used and what works for me.
+
+00:01:20.560 --> 00:01:24.900
+So, 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
+
+00:01:30.720 --> 00:01:33.240
+components of Emacs. So it's a projectile org
+
+00:01:33.240 --> 00:01:35.360
+mode with this capture templates and other
+
+00:01:35.360 --> 00:01:38.100
+things. Then I sustained a collection of
+
+00:01:38.100 --> 00:01:40.360
+nodes in something that is called org-roam,
+
+00:01:40.680 --> 00:01:43.520
+which is essentially it's a glorified
+
+00:01:43.580 --> 00:01:45.580
+collection of org mode files.
+
+00:01:46.100 --> 00:01:48.160
+Then I used directory local variables,
+
+00:01:48.260 --> 00:01:51.140
+maybe a C text to jump through the source
+
+00:01:51.140 --> 00:01:54.920
+code and very, very little LELisp glue to
+
+00:01:54.920 --> 00:01:57.620
+make this all work, but that's not really
+
+00:01:58.620 --> 00:02:00.400
+rocket science. So that's the workflow I
+
+00:02:00.400 --> 00:02:02.180
+would like to talk about today.
+
+00:02:04.860 --> 00:02:07.120
+So what I mean by all that,
+
+00:02:07.960 --> 00:02:10.280
+it's pretty straightforward to make Emacs,
+
+00:02:10.680 --> 00:02:12.720
+to make it easy to jump around a single
+
+00:02:12.720 --> 00:02:14.980
+repository in Emacs. So if I,
+
+00:02:15.060 --> 00:02:16.640
+Now I have Doom Emacs,
+
+00:02:16.640 --> 00:02:18.740
+but that's not really specific to a Doom
+
+00:02:19.120 --> 00:02:23.160
+that'll work in any Emacs configuration.
+
+00:02:23.400 --> 00:02:27.720
+Well, key bindings might be different,
+
+00:02:27.720 --> 00:02:28.820
+but that's not the point,
+
+00:02:28.820 --> 00:02:29.940
+I guess, for the workflow.
+
+00:02:30.060 --> 00:02:31.960
+So if I hit space 2 times,
+
+00:02:31.960 --> 00:02:34.640
+I have all the list of files within my
+
+00:02:34.640 --> 00:02:38.200
+project, right? So if I create a couple of
+
+00:02:38.200 --> 00:02:42.780
+custom shortcuts, so if I press a magic
+
+00:02:42.780 --> 00:02:45.280
+button, hyper-OP, don't worry about
+
+00:02:45.280 --> 00:02:47.460
+hyper-key. So I want it to have a modifier
+
+00:02:47.560 --> 00:02:50.140
+key all to myself, so that would,
+
+00:02:50.320 --> 00:02:53.200
+no program on my computer would use that
+
+00:02:53.200 --> 00:02:55.680
+except Emacs. Emacs would use that only when
+
+00:02:55.680 --> 00:02:57.540
+I tell it to, so I have a hyper key instead
+
+00:02:57.540 --> 00:03:00.720
+of caps lock. That's pretty easy to do in GNU
+
+00:03:00.720 --> 00:03:04.940
+Linux system. So when I press this magic
+
+00:03:04.940 --> 00:03:07.400
+keys, I have a menu that's a normal key
+
+00:03:07.400 --> 00:03:09.940
+binding. Yeah, essentially an Emacs.
+
+00:03:10.240 --> 00:03:12.260
+And if I hit, for example,
+
+00:03:12.540 --> 00:03:15.200
+R, I end up in a readme file within this
+
+00:03:15.200 --> 00:03:17.320
+specific repository I was sitting in,
+
+00:03:17.320 --> 00:03:19.000
+right? So if I want to document something
+
+00:03:19.000 --> 00:03:21.420
+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,
+
+00:03:25.280 --> 00:03:27.440
+right? So I have a list of changes and the
+
+00:03:27.440 --> 00:03:29.480
+way it works usually, for example,
+
+00:03:29.480 --> 00:03:31.140
+if I'm working in some code,
+
+00:03:32.220 --> 00:03:34.280
+I created a couple of dummy files in there,
+
+00:03:34.280 --> 00:03:36.560
+so I'm working in some code and then I
+
+00:03:36.560 --> 00:03:41.780
+implemented something and I can just use the
+
+00:03:42.020 --> 00:03:46.860
+org mode capture mechanisms to keep track of
+
+00:03:46.860 --> 00:03:48.880
+what I want to discuss with colleagues next
+
+00:03:48.880 --> 00:03:52.160
+time. For example, I could just hit capture
+
+00:03:52.440 --> 00:03:56.200
+repo specific changelog entry and I
+
+00:03:56.200 --> 00:04:02.620
+implemented a feature and I can continue
+
+00:04:02.620 --> 00:04:04.340
+working without this context switching.
+
+00:04:04.340 --> 00:04:06.500
+And then if I want to go to the change log,
+
+00:04:06.880 --> 00:04:11.320
+well, it is there. And next time I talk to
+
+00:04:11.320 --> 00:04:12.720
+the colleagues about the source code,
+
+00:04:12.720 --> 00:04:14.340
+I can open the change log and go through
+
+00:04:14.340 --> 00:04:16.800
+entries 1 by 1 and discuss what I haven't
+
+00:04:16.800 --> 00:04:18.980
+implemented last time.
+
+00:04:19.540 --> 00:04:22.580
+I could go to project specific,
+
+00:04:24.100 --> 00:04:26.320
+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
+
+00:04:29.020 --> 00:04:31.320
+within a repository. And for example,
+
+00:04:31.320 --> 00:04:34.020
+I could have a high level structure here,
+
+00:04:34.640 --> 00:04:36.460
+work distribution between team members and
+
+00:04:36.460 --> 00:04:39.380
+other things that sort of face outer world,
+
+00:04:39.380 --> 00:04:41.260
+so to speak. And of course,
+
+00:04:42.840 --> 00:04:45.400
+there are very many ways to jump through the
+
+00:04:45.400 --> 00:04:46.420
+source code conveniently.
+
+00:04:46.560 --> 00:04:49.960
+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
+
+00:04:53.320 --> 00:04:56.420
+it works is just I call projectile regenerate
+
+00:04:56.680 --> 00:05:00.460
+tags and it creates the special tags file
+
+00:05:00.460 --> 00:05:05.260
+within the repository and then I can again
+
+00:05:06.240 --> 00:05:11.260
+run it I usually just hit a single keystroke
+
+00:05:11.520 --> 00:05:14.060
+and here is all the symbols that are there in
+
+00:05:14.060 --> 00:05:17.160
+my source code, regardless of the language,
+
+00:05:17.160 --> 00:05:19.540
+right? So I can jump to the main function and
+
+00:05:19.540 --> 00:05:21.020
+that'll be a C++ file.
+
+00:05:21.020 --> 00:05:22.740
+Or I could go to the super function,
+
+00:05:22.740 --> 00:05:25.340
+which I had in my Python file.
+
+00:05:25.380 --> 00:05:27.120
+And this comes in pretty convenient if I have
+
+00:05:27.120 --> 00:05:28.220
+a mixture of languages.
+
+00:05:28.360 --> 00:05:30.800
+Sometimes I can have some algorithm specific
+
+00:05:30.800 --> 00:05:33.000
+code in Julia, and then I can have some
+
+00:05:33.280 --> 00:05:35.380
+Python glue within the same source code
+
+00:05:35.380 --> 00:05:37.940
+repository, it makes it really convenient to
+
+00:05:39.720 --> 00:05:41.780
+jump between all of those.
+
+00:05:43.080 --> 00:05:46.980
+But I have a few problems here.
+
+00:05:47.360 --> 00:05:49.800
+So just to give you a little bit of context,
+
+00:05:49.860 --> 00:05:53.100
+for example, here is a real project that
+
+00:05:53.100 --> 00:05:54.440
+corresponds to real paper.
+
+00:05:55.840 --> 00:05:59.060
+I have a single note about that project where
+
+00:05:59.060 --> 00:06:01.780
+I keep all the things related to that project
+
+00:06:01.780 --> 00:06:03.260
+here, but that's a private note.
+
+00:06:03.260 --> 00:06:04.860
+So for example, again,
+
+00:06:04.860 --> 00:06:08.040
+I hit a special key that invokes my org-roam
+
+00:06:08.640 --> 00:06:12.680
+function that gives me a menu of my notes.
+
+00:06:13.080 --> 00:06:15.200
+And so here is the paper,
+
+00:06:15.200 --> 00:06:17.500
+essentially. And I can have a paper timeline,
+
+00:06:17.900 --> 00:06:21.180
+and I can have a list of all the dates what
+
+00:06:21.180 --> 00:06:23.940
+happened to the paper with links to my email,
+
+00:06:24.060 --> 00:06:27.700
+right? So for example if I hit this link that
+
+00:06:27.700 --> 00:06:30.160
+will open a specific email and that doesn't
+
+00:06:30.160 --> 00:06:31.280
+work outside of my computer,
+
+00:06:31.280 --> 00:06:33.140
+doesn't make any sense to keep it in the
+
+00:06:33.340 --> 00:06:35.500
+outer world facing repository,
+
+00:06:35.500 --> 00:06:37.360
+for example. So that's something to myself,
+
+00:06:37.360 --> 00:06:41.420
+right? Sometimes I want to have like this
+
+00:06:41.480 --> 00:06:43.940
+list of working notes,
+
+00:06:43.940 --> 00:06:45.780
+right, that contain like,
+
+00:06:45.780 --> 00:06:49.200
+for example, yeah, I might produce this kind
+
+00:06:49.200 --> 00:06:50.620
+of things for internal discussion,
+
+00:06:50.640 --> 00:06:52.500
+right? It has some marks,
+
+00:06:52.500 --> 00:06:54.620
+it has some margin notes and things like
+
+00:06:54.620 --> 00:06:57.620
+that. Maybe again, health-based ideas that
+
+00:06:57.620 --> 00:07:00.300
+may or may not end up in a repository,
+
+00:07:01.020 --> 00:07:03.220
+in the final paper or in a source code,
+
+00:07:03.220 --> 00:07:05.880
+but still I want to have it somewhere.
+
+00:07:07.120 --> 00:07:08.600
+And well, long story short,
+
+00:07:08.800 --> 00:07:11.680
+I need a project folder that would be
+
+00:07:11.680 --> 00:07:16.120
+unrelated to the source code or to the source
+
+00:07:16.120 --> 00:07:19.440
+code repository or to the paper itself or a
+
+00:07:19.440 --> 00:07:22.780
+final report, right? And 1 way,
+
+00:07:22.960 --> 00:07:24.720
+as usual, there are multiple ways to achieve
+
+00:07:24.720 --> 00:07:27.660
+that, I suppose. And 1 way to do that is,
+
+00:07:29.040 --> 00:07:33.160
+so I create a special folder within my
+
+00:07:33.160 --> 00:07:38.100
+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
+
+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,
+
+00:07:46.720 --> 00:07:48.280
+full blown version control for that.
+
+00:07:48.280 --> 00:07:49.760
+I'm okay with just having a couple of
+
+00:07:49.760 --> 00:07:52.900
+backups, right? So this is the folder you see
+
+00:07:52.900 --> 00:07:55.320
+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:08:01.680 --> 00:08:04.940
+So I have a folder per project in there,
+
+00:08:05.020 --> 00:08:07.900
+essentially. And here I can have all the
+
+00:08:07.900 --> 00:08:11.480
+stuff that kind of belongs to me and I do not
+
+00:08:11.480 --> 00:08:14.180
+publish it anywhere. And then,
+
+00:08:15.420 --> 00:08:20.280
+For example, a source code repository knows
+
+00:08:20.460 --> 00:08:23.240
+about that folder and a paper repository
+
+00:08:23.460 --> 00:08:25.120
+knows about that folder.
+
+00:08:25.120 --> 00:08:26.820
+And anything else that might leave in
+
+00:08:26.820 --> 00:08:28.820
+separate places all over my system can know
+
+00:08:28.820 --> 00:08:30.800
+about that folder. How do I achieve that?
+
+00:08:30.940 --> 00:08:33.539
+Well, essentially this is 1 of the use cases
+
+00:08:34.400 --> 00:08:35.940
+for the directory local variables,
+
+00:08:36.360 --> 00:08:39.100
+right? So for example,
+
+00:08:39.520 --> 00:08:41.539
+how does it work from the user perspective?
+
+00:08:41.580 --> 00:08:43.760
+So if I hit a special key,
+
+00:08:44.380 --> 00:08:46.900
+oh, sorry, if I hit a special key,
+
+00:08:48.280 --> 00:08:51.060
+that would be open project.
+
+00:08:51.680 --> 00:08:55.920
+And then for example, org mode file,
+
+00:08:55.920 --> 00:08:58.260
+right? So this is my personal notes about the
+
+00:08:58.260 --> 00:09:01.260
+maxconf, not specifically about this very
+
+00:09:01.260 --> 00:09:02.580
+talk, but I can have, you know,
+
+00:09:02.580 --> 00:09:04.580
+the house baked ideas here again,
+
+00:09:04.760 --> 00:09:06.680
+presentation tools and things like that.
+
+00:09:07.440 --> 00:09:09.860
+And how does that happen?
+
+00:09:09.940 --> 00:09:13.080
+If we try to like look at the code,
+
+00:09:13.080 --> 00:09:14.660
+the e-list magic here,
+
+00:09:15.040 --> 00:09:17.560
+what is happening is it's just a couple of
+
+00:09:17.560 --> 00:09:18.720
+lines of code, in fact,
+
+00:09:18.720 --> 00:09:21.100
+so let me just press Control,
+
+00:09:22.540 --> 00:09:28.140
+help key. And so the key I was pressing is
+
+00:09:28.140 --> 00:09:30.220
+open project or my file.
+
+00:09:30.480 --> 00:09:32.220
+And so what we see here,
+
+00:09:32.220 --> 00:09:34.760
+there is a single, so it's just a call to a
+
+00:09:34.760 --> 00:09:37.200
+find file function. So I opened that file and
+
+00:09:37.200 --> 00:09:40.580
+there is a special function that figures out
+
+00:09:40.580 --> 00:09:44.620
+what is the like umbrella project nose file
+
+00:09:44.620 --> 00:09:46.600
+and that's, again, that's very easy.
+
+00:09:47.380 --> 00:09:51.420
+So essentially if a variable describing this,
+
+00:09:51.820 --> 00:09:54.860
+the name for that project is defined,
+
+00:09:54.860 --> 00:09:57.440
+then I use that as my project folder name.
+
+00:09:57.440 --> 00:09:59.700
+If not, I take the project name from the
+
+00:10:00.480 --> 00:10:03.340
+project tile. Well, that's pretty much it.
+
+00:10:03.340 --> 00:10:08.800
+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:17.440 --> 00:10:20.380
+And then whenever I go into that folder or
+
+00:10:20.380 --> 00:10:22.300
+any of its children folders,
+
+00:10:22.300 --> 00:10:23.860
+I get this variable defined.
+
+00:10:24.840 --> 00:10:26.260
+And that's pretty much it.
+
+00:10:26.280 --> 00:10:28.880
+That's how it works for me.
+
+00:10:31.860 --> 00:10:34.620
+I guess 1 thing that I wanted to emphasize
+
+00:10:35.380 --> 00:10:37.360
+specifically about that is of course,
+
+00:10:37.940 --> 00:10:39.720
+it is a time tracking,
+
+00:10:39.720 --> 00:10:42.260
+right? So what is I find especially important
+
+00:10:42.260 --> 00:10:44.280
+when I work in something and I want to clock
+
+00:10:44.340 --> 00:10:47.620
+time, I usually do not want this information
+
+00:10:47.800 --> 00:10:50.340
+to be in a source code repository or in a
+
+00:10:50.340 --> 00:10:52.600
+paper repository because other people I work
+
+00:10:52.600 --> 00:10:54.840
+with will not be particularly happy about
+
+00:10:54.840 --> 00:10:57.540
+that, especially if most of them do not use
+
+00:10:57.540 --> 00:11:00.720
+Emacs and they'll see this long list of org
+
+00:11:00.720 --> 00:11:03.820
+clocked data and that doesn't look nice in a
+
+00:11:03.820 --> 00:11:07.540
+plain text format. So what I usually do if I
+
+00:11:07.540 --> 00:11:10.240
+want to clock in some time and then later
+
+00:11:10.240 --> 00:11:12.560
+analyze what I've been spending time on,
+
+00:11:12.560 --> 00:11:16.880
+so I go to my org mode file and I go to the,
+
+00:11:16.880 --> 00:11:21.820
+my current project to-dos and I clock in
+
+00:11:21.820 --> 00:11:23.940
+there. And that's how it works.
+
+00:11:23.940 --> 00:11:28.860
+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
+
+00:11:31.500 --> 00:11:34.240
+file I jumped in into and that's I jumped
+
+00:11:34.240 --> 00:11:35.900
+from so that's also pretty handy.
+
+00:11:36.220 --> 00:11:38.800
+So again no no rocket science in there.
+
+00:11:40.380 --> 00:11:42.660
+So I create a directory local variable that
+
+00:11:42.660 --> 00:11:46.100
+helps me to figure out what umbrella project
+
+00:11:46.620 --> 00:11:49.720
+does this particular folder belongs to.
+
+00:11:49.940 --> 00:11:53.260
+And this way I make Emacs aware of,
+
+00:11:53.260 --> 00:11:54.480
+for example, facts like,
+
+00:11:54.480 --> 00:11:56.740
+so this source code belongs to that project.
+
+00:11:56.740 --> 00:11:59.080
+And this paper, this repository with a paper
+
+00:11:59.180 --> 00:12:00.640
+also belongs to that project.
+
+00:12:01.060 --> 00:12:04.040
+And I can have capture templates that would
+
+00:12:04.060 --> 00:12:07.580
+save my notes into the my private notes file
+
+00:12:07.800 --> 00:12:10.460
+and my to-dos and go to my private note files
+
+00:12:10.920 --> 00:12:12.260
+and so on and so forth.
+
+00:12:12.260 --> 00:12:15.520
+So I find it pretty simple but that really
+
+00:12:15.520 --> 00:12:19.540
+helps to reduce this context switching.
+
+00:12:19.600 --> 00:12:22.040
+And I don't believe it allows me to save
+
+00:12:22.040 --> 00:12:26.260
+time, but that probably helps me to stay
+
+00:12:26.260 --> 00:12:28.420
+focused. And this is what is really
+
+00:12:28.420 --> 00:12:31.400
+important, I believe. So thank you very much.
+
+00:12:31.400 --> 00:12:33.220
+And if you have any comments or suggestions
+
+00:12:33.320 --> 00:12:35.940
+to that, please do jump into the discussion.
+
+00:12:37.120 --> 00:12:38.900
+Yeah, after the talk, thank you.
diff --git a/2023/captions/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--answers.vtt b/2023/captions/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--answers.vtt
new file mode 100644
index 00000000..0b52ec59
--- /dev/null
+++ b/2023/captions/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--answers.vtt
@@ -0,0 +1,1202 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:01.839
+[Speaker 0]: You can hear us. Can you perhaps do it for
+
+00:00:01.839 --> 00:00:03.740
+me? Great. The little angels in the
+
+00:00:03.740 --> 00:00:05.140
+background have done it for me.
+
+00:00:05.240 --> 00:00:07.759
+So now finally that everything is ready.
+
+00:00:07.759 --> 00:00:09.099
+Hi James, how are you doing?
+
+00:00:13.780 --> 00:00:14.599
+Good morning. Hello. Well,
+
+00:00:14.599 --> 00:00:16.320
+thank you for your talk and sorry for the
+
+00:00:16.320 --> 00:00:19.240
+little hiccup at the middle we had to pull
+
+00:00:19.240 --> 00:00:20.900
+out a fire with the audio going out in the
+
+00:00:20.900 --> 00:00:22.580
+middle and sorry about this.
+
+00:00:23.140 --> 00:00:24.040
+[Speaker 1]: It's no trouble.
+
+00:00:25.240 --> 00:00:28.680
+[Speaker 0]: So James, you've obviously told us about your
+
+00:00:28.680 --> 00:00:30.220
+very fancy setup with the green screen and
+
+00:00:30.220 --> 00:00:32.840
+I'm sad to see that you haven't put out the
+
+00:00:32.840 --> 00:00:35.579
+green screen for your BBB session right now.
+
+00:00:35.579 --> 00:00:37.060
+Do you have it in the background just for
+
+00:00:37.060 --> 00:00:40.400
+you? Right, okay, it wasn't that far.
+
+00:00:40.600 --> 00:00:44.180
+Great. So I'm just going to ask,
+
+00:00:44.180 --> 00:00:47.440
+so this is the first live Q&A that we have
+
+00:00:47.440 --> 00:00:49.300
+for the session so things might be coming
+
+00:00:49.300 --> 00:00:51.600
+into place so pardon us if we take a little
+
+00:00:51.600 --> 00:00:54.340
+bit of time to put the questions on the
+
+00:00:54.340 --> 00:00:55.780
+screen and all of this.
+
+00:00:56.400 --> 00:00:57.940
+What I'm going to do, I'm just going to load
+
+00:00:57.940 --> 00:01:02.660
+up the pad. I would invite James to also open
+
+00:01:02.660 --> 00:01:04.200
+the pad on his hand. So yeah,
+
+00:01:04.200 --> 00:01:05.740
+I've got people talking in my ears and it's
+
+00:01:05.740 --> 00:01:07.740
+been a while since I've last had this.
+
+00:01:08.260 --> 00:01:11.979
+And okay, so opening the talks right now,
+
+00:01:12.100 --> 00:01:14.120
+opening the pad if I can find it.
+
+00:01:14.120 --> 00:01:19.020
+Open up the pad. Okay.
+
+00:01:19.200 --> 00:01:21.240
+So have you got a pad open on your end,
+
+00:01:21.240 --> 00:01:22.800
+James? So I can read the question.
+
+00:01:23.119 --> 00:01:26.740
+So, okay, great. Opening it on my end as
+
+00:01:26.740 --> 00:01:28.360
+well. What I'm going to do,
+
+00:01:28.360 --> 00:01:30.360
+folks, I see some of you have joined us.
+
+00:01:39.900 --> 00:01:42.500
+I'm going to start doing is first taking
+
+00:01:42.500 --> 00:01:44.220
+questions in the other part because it's a
+
+00:01:44.220 --> 00:01:46.200
+little faster to ask questions like this.
+
+00:01:46.520 --> 00:01:48.160
+And then as soon as we've finished,
+
+00:01:48.160 --> 00:01:49.920
+feel free to unmute yourself and ask your
+
+00:01:49.920 --> 00:01:54.180
+questions. All right so I've got some
+
+00:01:54.180 --> 00:01:57.660
+reactions about OBS being cool and yes both
+
+00:01:57.660 --> 00:01:59.340
+James and I will be able to tell you that
+
+00:01:59.340 --> 00:02:01.720
+it's very cool we do very fancy stuff like
+
+00:02:04.060 --> 00:02:05.640
+when I need to talk to production in the
+
+00:02:05.640 --> 00:02:07.540
+background and all the stuff obviously that
+
+00:02:07.540 --> 00:02:09.160
+James has been able to show you with a green
+
+00:02:09.160 --> 00:02:12.800
+screen. So I don't see a whole lot of
+
+00:02:12.800 --> 00:02:15.560
+questions so far. I see a lot of reactions on
+
+00:02:16.020 --> 00:02:17.760
+publishing lectures book and of a classic
+
+00:02:17.760 --> 00:02:19.700
+example is John Kitchens obviously.
+
+00:02:20.900 --> 00:02:22.180
+Pedagogy first developments.
+
+00:02:23.360 --> 00:02:24.660
+Macros are a cool idea.
+
+00:02:25.680 --> 00:02:28.820
+Okay questions. So how do you overlap
+
+00:02:28.820 --> 00:02:30.160
+yourself with a presentation.
+
+00:02:30.420 --> 00:02:34.680
+It's so cool. It's quite simple.
+
+00:02:36.420 --> 00:02:40.200
+[Speaker 1]: OBS provides filters for every...
+
+00:02:40.200 --> 00:02:42.440
+You can have a separate filter for each video
+
+00:02:42.440 --> 00:02:44.960
+feed and 1 of the filters that's available is
+
+00:02:44.960 --> 00:02:47.840
+chroma key. You just choose a color to make
+
+00:02:47.840 --> 00:02:52.020
+transparent and just make sure that the
+
+00:02:52.020 --> 00:02:56.140
+webcam is at the top of the composition.
+
+00:02:57.180 --> 00:03:00.900
+And the thing that surprised me the most was
+
+00:03:00.900 --> 00:03:05.420
+how quickly my brain was able to mirror
+
+00:03:05.420 --> 00:03:07.360
+everything and control my body from a
+
+00:03:07.360 --> 00:03:10.720
+separate point of view like the way weather
+
+00:03:10.720 --> 00:03:15.300
+broadcasts are done. It took seconds to be
+
+00:03:15.300 --> 00:03:16.980
+able to do that. Well,
+
+00:03:16.980 --> 00:03:20.200
+and now I have years of practice because that
+
+00:03:20.320 --> 00:03:22.740
+set up that you saw that I used to record
+
+00:03:22.740 --> 00:03:26.960
+this video. I used for years during the
+
+00:03:26.960 --> 00:03:32.180
+pandemic for 4 or 5 semesters to because my
+
+00:03:32.180 --> 00:03:33.760
+courses are all have 2,
+
+00:03:33.760 --> 00:03:36.440
+3, 400 students, except for the English
+
+00:03:36.440 --> 00:03:38.200
+class, which has, you know,
+
+00:03:38.200 --> 00:03:41.100
+30 students. And so during the pandemic,
+
+00:03:41.200 --> 00:03:44.040
+and even after lockdowns were no longer
+
+00:03:44.040 --> 00:03:46.160
+mandated, I taught online just because I
+
+00:03:46.160 --> 00:03:48.340
+didn't want to have so many students in the
+
+00:03:48.340 --> 00:03:49.500
+room at the same time.
+
+00:03:49.600 --> 00:03:53.680
+So I've yeah, I'm it. I have a lot of
+
+00:03:53.680 --> 00:03:54.840
+practice doing that.
+
+00:03:56.120 --> 00:03:58.300
+[Speaker 0]: But it pays off because it looks so natural,
+
+00:03:58.300 --> 00:04:00.140
+you know, it feels like it's the same thing
+
+00:04:00.140 --> 00:04:01.520
+with weathercasters, you know,
+
+00:04:01.520 --> 00:04:03.940
+it sounds very it looks very easy to do,
+
+00:04:03.940 --> 00:04:05.780
+but it also takes quite a bit of practice.
+
+00:04:07.020 --> 00:04:08.300
+1 of the things that you also need to
+
+00:04:08.300 --> 00:04:10.160
+remember if you're using a chroma key that
+
+00:04:10.160 --> 00:04:11.880
+James has explained is that you need to have
+
+00:04:11.880 --> 00:04:14.360
+very good lighting, basically for the color
+
+00:04:14.440 --> 00:04:16.320
+to pop out in the background and for your
+
+00:04:16.320 --> 00:04:18.360
+body to be easily highlightable.
+
+00:04:19.399 --> 00:04:21.240
+Okay, were you finished with this question?
+
+00:04:23.240 --> 00:04:24.980
+[Speaker 1]: Yeah, let's take another 1.
+
+00:04:25.640 --> 00:04:28.580
+[Speaker 0]: Sure. So how do you deal with video in Beam?
+
+00:04:28.700 --> 00:04:30.720
+I found it so hard to do that.
+
+00:04:30.720 --> 00:04:33.060
+PPT on the other end is easier to achieve.
+
+00:04:36.380 --> 00:04:41.480
+[Speaker 1]: Yeah, so remember that the slides get
+
+00:04:41.480 --> 00:04:46.960
+produced from Org Mode as PDFs.
+
+00:04:47.540 --> 00:04:50.080
+Well, and in fact, I even before when I was
+
+00:04:50.080 --> 00:04:52.540
+using other software to produce slides,
+
+00:04:52.580 --> 00:04:54.220
+I produced them as PDFs,
+
+00:04:54.720 --> 00:04:56.840
+precisely because I wanted to be able to mark
+
+00:04:56.840 --> 00:05:00.040
+them up on on the screen with the stylus.
+
+00:05:02.100 --> 00:05:05.960
+And so I don't do video in the slides.
+
+00:05:06.140 --> 00:05:09.140
+I use OBS to switch from static slides that I
+
+00:05:09.140 --> 00:05:12.540
+mark up with the stylus over to some kind of
+
+00:05:12.840 --> 00:05:15.360
+video viewer and then back.
+
+00:05:15.620 --> 00:05:17.820
+And again, that's how I can use Firefox.
+
+00:05:17.900 --> 00:05:21.880
+I use OBS to switch between Firefox and video
+
+00:05:22.360 --> 00:05:26.380
+and the Shornell plus plus program where I
+
+00:05:26.380 --> 00:05:31.060
+can mark up slides. So those functionalities
+
+00:05:31.160 --> 00:05:35.140
+are that's why I use different software and
+
+00:05:35.140 --> 00:05:37.440
+pull it all together with OBS so that I can
+
+00:05:37.440 --> 00:05:41.700
+have lots of functional flexibility.
+
+00:05:44.660 --> 00:05:47.700
+[Speaker 0]: Great. Do you ever use things like
+
+00:05:47.700 --> 00:05:50.960
+org-present and stay for the PowerPoint
+
+00:05:51.060 --> 00:05:53.200
+slides? I'm not sure exactly how to read this
+
+00:05:53.200 --> 00:05:54.860
+particular question but at least we can focus
+
+00:05:54.860 --> 00:05:56.840
+on org-present. Are you familiar with what it
+
+00:05:56.840 --> 00:05:57.340
+is?
+
+00:05:58.080 --> 00:06:01.920
+[Speaker 1]: I have played around with org-present and
+
+00:06:02.380 --> 00:06:07.640
+again I guess you could use org-present to
+
+00:06:07.640 --> 00:06:12.160
+show images and to show headings as slides.
+
+00:06:13.140 --> 00:06:17.680
+But again, because I'm it's such a crucial
+
+00:06:18.100 --> 00:06:21.520
+functionality to be able to mark them up with
+
+00:06:22.120 --> 00:06:25.760
+stylus. I didn't really show this very much,
+
+00:06:25.760 --> 00:06:27.780
+but I also highlight things the way I would
+
+00:06:27.780 --> 00:06:30.080
+highlight using a laser pointer on the
+
+00:06:30.080 --> 00:06:36.300
+screen. And again, I don't see Emacs being
+
+00:06:36.300 --> 00:06:38.500
+able to do that for another couple of
+
+00:06:38.560 --> 00:06:42.800
+generations. So really the only thing I use
+
+00:06:42.800 --> 00:06:47.360
+Emacs for during presentations is to narrow
+
+00:06:48.940 --> 00:06:52.100
+headings that we can focus on particular text
+
+00:06:52.600 --> 00:06:53.100
+excerpts.
+
+00:06:55.680 --> 00:06:59.200
+[Speaker 0]: Right. Yeah. A lot of our presentation at
+
+00:06:59.200 --> 00:07:00.420
+EmacsConf are usually,
+
+00:07:00.420 --> 00:07:02.260
+especially the Org Mode ones are done with
+
+00:07:02.260 --> 00:07:06.740
+OrgPresent. And. Sorry,
+
+00:07:06.740 --> 00:07:08.920
+I had again someone talk to me in a year.
+
+00:07:09.240 --> 00:07:11.440
+You know, the problem with EmacsConf is that
+
+00:07:11.680 --> 00:07:13.440
+every year, you know, you have to relearn a
+
+00:07:13.440 --> 00:07:16.780
+lot of skills. And by the time we finished by
+
+00:07:16.780 --> 00:07:19.900
+Sunday evening we are masters of it and then
+
+00:07:19.900 --> 00:07:21.820
+we forget everything by the time the next
+
+00:07:21.820 --> 00:07:24.280
+year comes around. What I was going to say is
+
+00:07:24.280 --> 00:07:26.780
+that org-present is often used by people
+
+00:07:27.440 --> 00:07:30.940
+inside Emacs conf presenting about org-mode
+
+00:07:31.100 --> 00:07:32.800
+but yeah whenever you need to do something a
+
+00:07:32.800 --> 00:07:34.340
+little more visual, it gets a little more
+
+00:07:34.340 --> 00:07:36.540
+complicated. Some people have tried to do
+
+00:07:36.540 --> 00:07:39.200
+fancy stuff with SVG, which is probably the
+
+00:07:39.200 --> 00:07:41.180
+path forward for this type of stuff.
+
+00:07:41.400 --> 00:07:43.220
+But yeah, if you need to draw,
+
+00:07:43.380 --> 00:07:44.480
+if you need to highlight,
+
+00:07:44.760 --> 00:07:46.360
+it is pretty complicated.
+
+00:07:46.820 --> 00:07:48.340
+Perhaps something that you might want to be
+
+00:07:48.340 --> 00:07:50.940
+interested, James, in checking out is PDF
+
+00:07:50.940 --> 00:07:56.040
+tools, which is a way to open up a PDF in
+
+00:07:56.040 --> 00:07:59.440
+Emacs. And this allows you to have basic PDF
+
+00:07:59.440 --> 00:08:01.560
+annotations, like putting a little bit of a
+
+00:08:01.560 --> 00:08:04.160
+Nikon on it. Perhaps you've already played
+
+00:08:04.160 --> 00:08:04.900
+with it.
+
+00:08:06.260 --> 00:08:09.980
+[Speaker 1]: I have used that. PDF tools is an incredible
+
+00:08:10.080 --> 00:08:14.560
+package but until it allows me to make a mark
+
+00:08:14.560 --> 00:08:18.280
+on the screen that shows up in a video
+
+00:08:18.280 --> 00:08:21.000
+compositor. It's not going to replace
+
+00:08:21.420 --> 00:08:21.920
+Shortenel.
+
+00:08:23.240 --> 00:08:24.600
+[Speaker 0]: Definitely. All right.
+
+00:08:24.600 --> 00:08:25.940
+Moving on to the next question.
+
+00:08:26.400 --> 00:08:28.900
+Is the triple-accolade syntax an Org Mode
+
+00:08:28.900 --> 00:08:31.360
+core feature that I missed so far or did you
+
+00:08:31.360 --> 00:08:33.120
+program that and thank you for the great
+
+00:08:33.120 --> 00:08:33.620
+talk.
+
+00:08:36.659 --> 00:08:38.360
+[Speaker 1]: Thank you very much. No,
+
+00:08:38.360 --> 00:08:43.220
+it's just part of all of the export backends.
+
+00:08:43.299 --> 00:08:45.060
+Actually, I think the way it works is it
+
+00:08:45.060 --> 00:08:47.040
+precedes all of the export backends.
+
+00:08:47.040 --> 00:08:50.280
+When you export, the first thing that happens
+
+00:08:50.280 --> 00:08:52.360
+is expansion of macros.
+
+00:08:52.720 --> 00:08:56.260
+And that's a built-in org mode feature.
+
+00:08:56.640 --> 00:08:59.690
+It's definitely beyond my Emacs Lisp powers
+
+00:08:59.690 --> 00:09:01.360
+to be able to have made something that
+
+00:09:01.360 --> 00:09:06.920
+powerful. That's right.
+
+00:09:07.020 --> 00:09:08.540
+I have come a long way.
+
+00:09:02.640 --> 00:09:11.500
+[Speaker 0]: For now. You know, we always,
+
+00:09:11.720 --> 00:09:13.380
+you know, most of the people who show up to
+
+00:09:13.380 --> 00:09:15.480
+Max Conf. Especially talking about stuff that
+
+00:09:15.480 --> 00:09:18.160
+has to do with presentations or what they do
+
+00:09:18.260 --> 00:09:19.160
+in academia. You know,
+
+00:09:19.160 --> 00:09:20.520
+they always say, oh, but,
+
+00:09:20.600 --> 00:09:22.589
+you know, I couldn't have done all this,
+
+00:09:22.589 --> 00:09:24.260
+you know, it's just far away.
+
+00:09:24.260 --> 00:09:26.320
+And then they come back 1 year or 2 years
+
+00:09:26.320 --> 00:09:27.980
+later and then, oh, I've made my entire
+
+00:09:27.980 --> 00:09:29.680
+library for presentation and stuff like this.
+
+00:09:29.680 --> 00:09:32.980
+So Be hopeful about what the future holds for
+
+00:09:32.980 --> 00:09:34.960
+you in terms of coming up with crazy new
+
+00:09:34.960 --> 00:09:36.720
+features for the entire ecosystem.
+
+00:09:37.740 --> 00:09:39.100
+[Speaker 1]: Well, let me tell you,
+
+00:09:39.560 --> 00:09:42.540
+since the pandemic, I have written,
+
+00:09:42.980 --> 00:09:44.760
+I wrote my first major mode.
+
+00:09:44.760 --> 00:09:47.000
+It's trivial, but it provides functionality
+
+00:09:47.220 --> 00:09:52.660
+that is very useful to me and it's it's going
+
+00:09:52.660 --> 00:09:54.380
+to sound like I'm just trying to butter
+
+00:09:54.380 --> 00:09:57.260
+everyone up but seeing a lot of the names in
+
+00:09:57.260 --> 00:10:00.820
+the IRC channel people who have taught me so
+
+00:10:00.820 --> 00:10:05.220
+much on their YouTube channels and in their
+
+00:10:05.220 --> 00:10:07.920
+blog posts and on Reddit and on Mastodon.
+
+00:10:09.600 --> 00:10:12.220
+Without many of the people who are here today
+
+00:10:12.620 --> 00:10:15.300
+watching my talk, it's very fun to have
+
+00:10:15.820 --> 00:10:18.160
+people who have helped me learn so much about
+
+00:10:18.160 --> 00:10:20.140
+Emacs. So thanks to all of you.
+
+00:10:21.580 --> 00:10:24.140
+[Speaker 0]: Well, and yeah, and now you're becoming part
+
+00:10:24.140 --> 00:10:27.380
+of this crew of people inspiring others to do
+
+00:10:27.380 --> 00:10:29.160
+very much the same. So thank you for joining
+
+00:10:31.460 --> 00:10:32.520
+[Speaker 1]: Thank you very much.
+
+00:10:29.160 --> 00:10:35.020
+[Speaker 0]: the crew. Great. Moving on to the 2 last
+
+00:10:35.020 --> 00:10:36.660
+questions and then we'll open up the mic to
+
+00:10:36.660 --> 00:10:38.340
+other people on Big Blue Button.
+
+00:10:39.160 --> 00:10:40.900
+What kind of comparative feedback are
+
+00:10:40.900 --> 00:10:42.740
+students giving you regarding your approach?
+
+00:10:44.960 --> 00:10:48.340
+[Speaker 1]: Oh, my gosh. Students were ready to during
+
+00:10:48.340 --> 00:10:53.040
+the pandemic especially when most of the
+
+00:10:53.040 --> 00:10:55.880
+courses were just being taught over zoom by
+
+00:10:55.880 --> 00:10:57.340
+people sharing their screen.
+
+00:10:57.340 --> 00:10:58.660
+[Speaker 0]: Just a second. Sorry. Sorry for the
+
+00:10:58.660 --> 00:10:59.800
+interruption. Very rude interruption.
+
+00:10:59.800 --> 00:11:01.220
+We've got the intro for the next talk playing
+
+00:11:01.220 --> 00:11:02.520
+and I'm not sure what's going on.
+
+00:11:02.520 --> 00:11:03.580
+Give me just a second.
+
+00:11:04.440 --> 00:11:04.940
+Sasha.
+
+00:11:05.060 --> 00:11:05.560
+[Speaker 1]: Okay.
+
+00:11:19.320 --> 00:11:24.290
+Yeah, I think it's started.
+
+00:11:26.716 --> 00:11:31.740
+Okay so yeah I think it's not a
+
+00:11:34.860 --> 00:11:37.760
+[Speaker 0]: sure 1 I got the times wrong apparently
+
+00:11:37.760 --> 00:11:40.240
+because of the little delay we had getting
+
+00:11:40.240 --> 00:11:43.740
+the audio fixed up. The good news is that
+
+00:11:43.740 --> 00:11:45.880
+we're still recording the talk right now and
+
+00:11:45.880 --> 00:11:47.140
+we still have James around.
+
+00:11:47.180 --> 00:11:49.740
+Obviously James you're no longer on being
+
+00:11:49.740 --> 00:11:53.040
+broadcast on General but if you want to keep
+
+00:11:53.040 --> 00:11:55.800
+answering questions or if you want to anyone
+
+00:11:55.800 --> 00:11:57.340
+in the room right now wants to ask you
+
+00:11:57.340 --> 00:11:58.940
+questions feel free to do so.
+
+00:11:59.440 --> 00:12:01.060
+I'm going to need to hop off because I need
+
+00:12:01.060 --> 00:12:03.020
+to get other things ready for the next talks
+
+00:12:04.280 --> 00:12:06.780
+[Speaker 1]: But James, thank you so much.
+
+00:12:03.080 --> 00:12:10.020
+[Speaker 0]: sadly. Right and so sorry I'm a little tense
+
+00:12:10.020 --> 00:12:12.660
+obviously because I was not expecting this to
+
+00:12:12.660 --> 00:12:15.960
+happen and that led to a very abrupt end to
+
+00:12:15.960 --> 00:12:18.480
+this discussion but people afterwards on
+
+00:12:18.480 --> 00:12:21.980
+emacsmo.org slash 2023 slash talks will be
+
+00:12:21.980 --> 00:12:24.020
+able to find all the content here.
+
+00:12:24.020 --> 00:12:25.420
+So I'll have to leave now.
+
+00:12:25.840 --> 00:12:28.020
+Thank you so much James for doing the
+
+00:12:28.020 --> 00:12:30.060
+difficult task of opening up EmacsConf and
+
+00:12:30.060 --> 00:12:31.980
+I'll probably see you later.
+
+00:12:32.780 --> 00:12:35.260
+[Speaker 1]: Thank you, Leo. Bye bye.
+
+00:12:52.020 --> 00:12:57.440
+[Speaker 2]: On your journal program.
+
+00:12:58.360 --> 00:13:03.500
+Yes. You are using the tablet as a monitor,
+
+00:13:03.520 --> 00:13:05.940
+right? Touch screen monitor with that?
+
+00:13:06.480 --> 00:13:08.800
+[Speaker 1]: That's exactly right. So it's a tablet so you
+
+00:13:08.800 --> 00:13:11.980
+know I can. It has a touch screen and so.
+
+00:13:13.080 --> 00:13:15.580
+So basically the functionality that that
+
+00:13:15.580 --> 00:13:20.580
+program provides is to be able to just mark
+
+00:13:20.580 --> 00:13:22.160
+up PDFs with a stylus,
+
+00:13:23.360 --> 00:13:25.280
+you know, in the way that you would use any
+
+00:13:25.280 --> 00:13:30.600
+other tablet. And to be able to take that
+
+00:13:30.600 --> 00:13:33.420
+video signal and put it into another machine.
+
+00:13:33.840 --> 00:13:36.100
+That was the that was the key.
+
+00:13:36.100 --> 00:13:37.340
+That's the killer app.
+
+00:13:39.340 --> 00:13:41.880
+[Speaker 2]: I've thought about grabbing 1 for the purpose
+
+00:13:41.940 --> 00:13:45.460
+of like changing my laptop into a tablet to
+
+00:13:45.460 --> 00:13:49.640
+read manga, browse the web and kind of
+
+00:13:49.640 --> 00:13:51.840
+curious if it works well like as a wireless
+
+00:13:52.300 --> 00:13:57.440
+monitor with a tablet or how well it like you
+
+00:13:57.440 --> 00:14:01.920
+can use Emacs with it in a tablet mode or
+
+00:14:02.080 --> 00:14:03.000
+were you just
+
+00:14:03.820 --> 00:14:10.800
+[Speaker 1]: or you just use the tablet that I use is this
+
+00:14:10.800 --> 00:14:14.340
+is it it's just a Microsoft Surface and so it
+
+00:14:14.340 --> 00:14:17.780
+comes with a keyboard so you can take the
+
+00:14:17.780 --> 00:14:20.940
+keyboard off. Yeah, but I use it.
+
+00:14:20.940 --> 00:14:23.240
+I use it with the keyboard as well.
+
+00:14:24.560 --> 00:14:25.660
+And I just.
+
+00:14:30.060 --> 00:14:31.420
+[Speaker 2]: You're cutting off right now
+
+00:14:53.880 --> 00:15:27.671
+[Speaker 1]: Audio Your audio is cutting off right now.
+
+00:15:32.680 --> 00:15:34.580
+I bumped the mute button on the mic.
+
+00:15:36.820 --> 00:15:38.300
+Yeah. So again, this is,
+
+00:15:38.500 --> 00:15:41.540
+[Speaker 2]: is the 16 mute buttons you use.
+
+00:15:38.300 --> 00:15:45.660
+[Speaker 1]: this It's just the surface pro 3 that I got
+
+00:15:45.660 --> 00:15:48.920
+used and it runs Emacs.
+
+00:15:49.280 --> 00:15:54.300
+I mean it runs. You know Linux really well.
+
+00:15:54.940 --> 00:15:59.720
+And the trouble is that the hard drive you
+
+00:15:59.720 --> 00:16:02.920
+know the SSE drive is small and the RAM is
+
+00:16:02.920 --> 00:16:06.920
+small, but it works for the purposes.
+
+00:16:07.580 --> 00:16:10.080
+Basically, if I had a couple thousand
+
+00:16:10.080 --> 00:16:13.860
+dollars, I could probably buy a touchscreen
+
+00:16:14.280 --> 00:16:17.680
+machine where I could run everything on it
+
+00:16:17.680 --> 00:16:21.360
+and do the streaming and do the video capture
+
+00:16:21.380 --> 00:16:25.460
+and do the PDF markup.
+
+00:16:26.020 --> 00:16:28.480
+But since both of these are so,
+
+00:16:28.860 --> 00:16:31.980
+the hardware that I use is so old and cheap
+
+00:16:31.980 --> 00:16:33.800
+and weak I have to split it across 2
+
+00:16:33.800 --> 00:16:34.300
+machines.
+
+00:16:35.020 --> 00:16:37.660
+[Speaker 2]: There's also a beauty in making the stuff
+
+00:16:37.660 --> 00:16:40.080
+having specific purposes for specific things
+
+00:16:40.080 --> 00:16:46.020
+where it's just not. Yeah it's like I don't
+
+00:16:46.020 --> 00:16:49.840
+want a smart TV that plays Netflix I want a
+
+00:16:50.140 --> 00:16:53.860
+smart TV that has all the smarts that I turn
+
+00:16:53.860 --> 00:16:58.780
+my smart TV into a TV monitor I don't want to
+
+00:16:58.780 --> 00:16:59.280
+yeah
+
+00:17:02.200 --> 00:17:08.539
+[Speaker 1]: I totally feel that ethic I totally I totally
+
+00:17:08.659 --> 00:17:11.640
+feel that ethic. Oh, on
+
+00:17:11.760 --> 00:17:15.300
+[Speaker 2]: the some other things like if you want you to
+
+00:17:15.300 --> 00:17:17.300
+do highlighting in an org mode document.
+
+00:17:17.300 --> 00:17:19.060
+You can use org web tools.
+
+00:17:19.060 --> 00:17:20.020
+I wrote this in the notes,
+
+00:17:20.020 --> 00:17:21.940
+but you can use org web tools to download a
+
+00:17:21.940 --> 00:17:25.400
+web page and then you can use org remark to
+
+00:17:25.400 --> 00:17:28.860
+start highlighting in the org mode web page
+
+00:17:28.860 --> 00:17:30.860
+and then because an org mode document now you
+
+00:17:30.860 --> 00:17:32.180
+can just edit it directly.
+
+00:17:35.600 --> 00:17:38.240
+If you want other people to join in on an
+
+00:17:38.240 --> 00:17:40.680
+Emacs session you could use a package like
+
+00:17:40.680 --> 00:17:45.040
+what's it called? CRDT.EL
+
+00:17:47.020 --> 00:17:50.160
+that will allow 2 people with 2 different
+
+00:17:50.160 --> 00:17:52.820
+Emacs configurations to edit the same buffer.
+
+00:17:54.140 --> 00:17:58.980
+And you have a host that can host a buffer
+
+00:17:58.980 --> 00:18:05.960
+too. It works with, and they have 1 optional
+
+00:18:06.000 --> 00:18:08.180
+extension for org mode that will synchronize
+
+00:18:08.680 --> 00:18:10.600
+the folding of the org drawers.
+
+00:18:12.320 --> 00:18:14.720
+[Speaker 1]: Interesting. I will look into that.
+
+00:18:15.060 --> 00:18:15.560
+Like
+
+00:18:19.660 --> 00:18:22.720
+[Speaker 2]: having I don't like if you want students like
+
+00:18:22.720 --> 00:18:25.740
+you have each highlight line mode these are
+
+00:18:25.740 --> 00:18:27.620
+just some ideas like you can have like
+
+00:18:27.620 --> 00:18:30.060
+highlight line mode so people can easily see
+
+00:18:30.060 --> 00:18:35.040
+which line you're on cursor tracking and then
+
+00:18:35.040 --> 00:18:38.680
+you can have other people join in students or
+
+00:18:43.180 --> 00:18:45.300
+[Speaker 1]: yeah that's just a possible idea.
+
+00:18:45.300 --> 00:18:49.680
+Is there anyone else in the in the big blue
+
+00:18:49.680 --> 00:18:52.180
+button room who has a question?
+
+00:19:01.360 --> 00:19:03.280
+All right, I'm going to go over to the pad
+
+00:19:03.280 --> 00:19:05.280
+and see if there are any pending questions I
+
+00:19:05.280 --> 00:19:07.560
+can address. Thanks, Plasma Strike.
+
+00:19:27.500 --> 00:19:33.140
+[Speaker 3]: Yep. Which could be PDF,
+
+00:19:33.340 --> 00:19:36.680
+could be Markdown, could be OpenOffice,
+
+00:19:38.560 --> 00:19:40.100
+could be a notebook format.
+
+00:19:40.960 --> 00:19:43.340
+This methodology was conceived by Donald
+
+00:19:43.340 --> 00:19:51.980
+Knuth in 1984. The main purpose of literal
+
+00:19:51.980 --> 00:19:54.700
+programming is not only to make code or
+
+00:19:54.700 --> 00:19:57.220
+documentation or output more manageable,
+
+00:19:57.800 --> 00:20:01.240
+but to allow humans to create a data story to
+
+00:20:01.240 --> 00:20:03.420
+be used from a single source.
+
+00:20:04.540 --> 00:20:06.300
+What you see on the slide on the left-hand
+
+00:20:06.300 --> 00:20:09.400
+side is the story and code inside an org-mod
+
+00:20:09.400 --> 00:20:14.440
+file. The file starts with some
+
+00:20:14.440 --> 00:20:17.720
+documentation, then you write back down this
+
+00:20:18.420 --> 00:20:22.060
+code, and at the bottom you see the output
+
+00:20:22.060 --> 00:20:26.540
+file, which is not shown in the slide itself.
+
+00:20:26.800 --> 00:20:28.440
+In the middle you have the source code,
+
+00:20:28.440 --> 00:20:33.980
+which is the result of tangling or opening a
+
+00:20:33.980 --> 00:20:36.880
+buffer inside offload.
+
+00:20:37.660 --> 00:20:42.380
+On the very right hand side we have a PDF,
+
+00:20:42.580 --> 00:20:47.740
+actually this HTML, very same file that you
+
+00:20:47.740 --> 00:20:48.960
+see in memory language.
+
+00:20:49.600 --> 00:20:53.080
+So the humans look at some of this code and
+
+00:20:53.080 --> 00:20:55.400
+the machines look at other parts of the code.
+
+00:20:56.260 --> 00:20:58.320
+I actually did all my programming in the
+
+00:20:58.320 --> 00:21:00.260
+literary world even in the early 1990s,
+
+00:21:00.920 --> 00:21:03.040
+not using Org Mode, which didn't exist yet,
+
+00:21:03.040 --> 00:21:06.160
+but using Norman Ramsey's Norep preprocessor.
+
+00:21:07.240 --> 00:21:09.720
+They still use it inside the Org-Mode today.
+
+00:21:10.400 --> 00:21:11.920
+This preprocessor, Norep,
+
+00:21:11.920 --> 00:21:14.240
+allows you to tangle code from within an
+
+00:21:14.240 --> 00:21:16.360
+Org-Mode file that is self-standing file,
+
+00:21:16.360 --> 00:21:18.820
+much like Org-mode's edit functions,
+
+00:21:19.540 --> 00:21:21.900
+which export code blocks into buffers in
+
+00:21:21.900 --> 00:21:23.540
+whatever language the code blocks.
+
+00:21:25.940 --> 00:21:28.760
+In data science, these interactive notebooks,
+
+00:21:29.640 --> 00:21:32.776
+in 1 of the interpreted languages like Julia,
+
+00:21:32.776 --> 00:21:34.680
+Python, or R dominating?
+
+00:21:34.680 --> 00:21:37.420
+The basic technology is that of Jupyter
+
+00:21:37.420 --> 00:21:39.840
+notebooks, which take their name from Julia,
+
+00:21:39.860 --> 00:21:43.040
+Python, and R. And these notebooks use a
+
+00:21:43.040 --> 00:21:44.880
+spruce-dark shell, for example,
+
+00:21:44.920 --> 00:21:49.240
+IPython, and an option to add SQL cells.
+
+00:21:50.460 --> 00:21:53.340
+All good inside Emacs has a large number of
+
+00:21:53.340 --> 00:21:56.800
+advantages. Some of them are listed here over
+
+00:21:56.800 --> 00:21:59.180
+these notebooks. 2 of these stand out
+
+00:21:59.180 --> 00:22:02.860
+particularly. Different languages can be
+
+00:22:02.860 --> 00:22:05.640
+mixed as shown in the image.
+
+00:22:06.460 --> 00:22:07.700
+While in Jupyter notebooks,
+
+00:22:07.920 --> 00:22:10.900
+a notebook is limited to running a kernel in
+
+00:22:10.900 --> 00:22:14.440
+1 language only. The content of the notebook,
+
+00:22:14.440 --> 00:22:16.980
+its document code or output part can be
+
+00:22:16.980 --> 00:22:19.020
+exported in a variety of forms.
diff --git a/2023/captions/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--main--chapters.vtt b/2023/captions/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--main--chapters.vtt
new file mode 100644
index 00000000..e626f55f
--- /dev/null
+++ b/2023/captions/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--main--chapters.vtt
@@ -0,0 +1,47 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:01:12.439
+Introduction
+
+00:01:12.440 --> 00:01:47.819
+Presenting
+
+00:01:47.820 --> 00:04:46.609
+Hardware
+
+00:04:46.610 --> 00:05:30.518
+Example setup
+
+00:05:30.520 --> 00:07:05.949
+Presentation software: flexibility in function
+
+00:07:05.950 --> 00:07:59.849
+Live demonstration
+
+00:07:59.850 --> 00:10:26.059
+OBS
+
+00:10:26.060 --> 00:10:51.399
+Animation
+
+00:10:55.790 --> 00:11:42.259
+Emacs
+
+00:11:42.260 --> 00:13:22.679
+Making slides and handouts with Org Mode
+
+00:13:22.680 --> 00:16:17.789
+Pedagogy first
+
+00:16:17.790 --> 00:19:38.249
+org-teach
+
+00:19:38.330 --> 00:19:47.369
+Blank slides
+
+00:19:50.050 --> 00:20:19.269
+Animations
+
+00:20:19.270 --> 00:20:53.169
+Conclusion
diff --git a/2023/captions/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--main.vtt b/2023/captions/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--main.vtt
new file mode 100644
index 00000000..f03826a8
--- /dev/null
+++ b/2023/captions/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--main.vtt
@@ -0,0 +1,1557 @@
+WEBVTT captioned by James Howell, checked by sachac
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:01.939
+Hello everyone. I'm James Howell.
+
+00:00:01.940 --> 00:00:03.539
+I teach biochemistry and
+
+00:00:03.540 --> 00:00:07.219
+molecular biology at Penn State University.
+
+00:00:07.220 --> 00:00:08.879
+I'm going to talk today
+
+00:00:08.880 --> 00:00:11.479
+about using Emacs to make all of
+
+00:00:11.480 --> 00:00:13.619
+the materials for presenting
+
+00:00:13.620 --> 00:00:15.679
+course meetings in my courses.
+
+00:00:15.680 --> 00:00:18.819
+Everything that you're going to see today is
+
+00:00:18.820 --> 00:00:20.439
+what I've made using
+
+00:00:20.440 --> 00:00:23.519
+the methods that I'm going to describe.
+
+00:00:26.200 --> 00:00:29.719
+The main point is that you can take
+
+00:00:29.720 --> 00:00:32.079
+an Org document and
+
+00:00:32.080 --> 00:00:34.469
+with a single Emacs document,
+
+00:00:34.470 --> 00:00:39.079
+make both a pretty text document
+
+00:00:39.080 --> 00:00:40.379
+that a student can have
+
+00:00:40.380 --> 00:00:42.039
+on the desk and take notes on.
+
+00:00:42.040 --> 00:00:44.439
+And also, I hope,
+
+00:00:44.440 --> 00:00:49.039
+fairly useful and attractive slides
+
+00:00:49.040 --> 00:00:51.339
+like the ones that I'm presenting right now.
+
+00:00:51.340 --> 00:00:52.859
+Both of these
+
+00:00:52.860 --> 00:00:56.659
+from a single source document.
+
+00:00:56.660 --> 00:00:59.259
+Okay. If you'd like
+
+00:00:59.260 --> 00:01:00.919
+to see the handout that goes along with this,
+
+00:01:00.920 --> 00:01:02.799
+you can download it
+
+00:01:02.800 --> 00:01:04.059
+at the [Sourcehut] repository where
+
+00:01:04.060 --> 00:01:05.959
+I've put— everything's here.
+
+00:01:05.960 --> 00:01:07.819
+So if you'd like to go look at it,
+
+00:01:07.820 --> 00:01:09.939
+you can follow with the handout.
+
+00:01:09.940 --> 00:01:11.239
+So I promised to talk about
+
+00:01:11.240 --> 00:01:12.439
+both authoring and presenting.
+
+NOTE Presenting
+
+00:01:12.440 --> 00:01:14.619
+And first I'm going to talk about presenting.
+
+00:01:14.620 --> 00:01:16.599
+I'm not the only one who does this.
+
+00:01:16.600 --> 00:01:19.299
+You might have seen System Crafters [David Wilson]
+
+00:01:19.300 --> 00:01:20.639
+or Prot's [Protesilaos Stavrou's] channel or
+
+00:01:20.640 --> 00:01:23.059
+Mike Zemansky's channel on Youtube.
+
+00:01:23.060 --> 00:01:26.679
+(Prot actually is going to be presenting tomorrow.)
+
+00:01:26.680 --> 00:01:28.419
+Maybe you've seen this
+
+00:01:28.420 --> 00:01:30.179
+chemical engineer at Carnegie Mellon,
+
+00:01:30.180 --> 00:01:32.159
+John Kitchin or Eric Fraga
+
+00:01:32.160 --> 00:01:34.139
+or Olivier Berger all have made
+
+00:01:34.140 --> 00:01:36.519
+blog posts about using Org mode
+
+00:01:36.520 --> 00:01:39.419
+to produce course materials.
+
+00:01:39.420 --> 00:01:41.459
+This pair Ro and Namkoon
+
+00:01:41.460 --> 00:01:43.739
+actually published a peer reviewed paper.
+
+00:01:43.740 --> 00:01:45.739
+There's prior art here
+
+00:01:45.740 --> 00:01:47.819
+that I'd like to acknowledge.
+
+NOTE Hardware
+
+00:01:47.820 --> 00:01:50.839
+Let me talk about my practices:
+
+00:01:50.840 --> 00:01:51.518
+First, the hardware.
+
+00:01:51.520 --> 00:01:55.339
+This is the hardware that I'm using to
+
+00:01:55.340 --> 00:01:59.738
+record this recording at the very moment,
+
+00:01:59.740 --> 00:02:01.259
+but also I carry these
+
+00:02:01.260 --> 00:02:05.059
+into every course meeting.
+
+00:02:05.060 --> 00:02:07.119
+I've done this for quite a while,
+
+00:02:07.120 --> 00:02:09.618
+this entire semester,
+
+00:02:09.620 --> 00:02:11.438
+and a few previous semesters
+
+00:02:11.440 --> 00:02:14.239
+where everything fits in a backpack.
+
+00:02:14.240 --> 00:02:18.459
+I do every meeting with this tablet—
+
+00:02:18.460 --> 00:02:20.839
+it's a Microsoft Surface that I put
+
+00:02:20.840 --> 00:02:26.599
+a Linux distribution on—and this laptop.
+
+00:02:26.600 --> 00:02:29.599
+I've got a bag full of
+
+00:02:29.600 --> 00:02:34.078
+dongles and connectors and so forth.
+
+00:02:34.080 --> 00:02:35.339
+It all fits in a backpack.
+
+00:02:35.340 --> 00:02:36.259
+This is very mobile.
+
+00:02:36.260 --> 00:02:38.179
+I can set it up and tear it down
+
+00:02:38.180 --> 00:02:39.699
+before and after every class
+
+00:02:39.700 --> 00:02:41.219
+with just a couple minutes.
+
+00:02:41.220 --> 00:02:42.739
+There's the laptop and the
+
+00:02:42.740 --> 00:02:45.018
+tablet with a stylus.
+
+00:02:45.020 --> 00:02:46.579
+Where's my stylus?
+
+00:02:46.580 --> 00:02:51.498
+So that I can draw...
+
+00:02:51.500 --> 00:02:52.519
+... which is very useful.
+
+00:02:52.520 --> 00:02:55.858
+Obviously, I need a camera.
+
+00:02:55.860 --> 00:02:57.459
+Today, I'm using a desk mic,
+
+00:02:57.460 --> 00:02:59.099
+but when I'm remote,
+
+00:02:59.100 --> 00:03:01.738
+I use a lapel mic.
+
+00:03:01.740 --> 00:03:02.899
+and a video converter,
+
+00:03:02.900 --> 00:03:04.379
+and I'll show you why that's important.
+
+00:03:04.380 --> 00:03:09.018
+And then all of the ancillary equipment.
+
+00:03:09.020 --> 00:03:11.139
+One thing that's nice about using
+
+00:03:11.140 --> 00:03:14.019
+a completely free software stack is
+
+00:03:14.020 --> 00:03:15.219
+that it tends to run
+
+00:03:15.220 --> 00:03:18.318
+on underpowered hardware,
+
+00:03:18.320 --> 00:03:20.539
+and none of the software cost anything.
+
+00:03:20.540 --> 00:03:23.219
+I could have spent much less than this
+
+00:03:23.220 --> 00:03:25.459
+on a used computer and
+
+00:03:25.460 --> 00:03:28.199
+a used tablet. And everything else,
+
+00:03:28.200 --> 00:03:30.299
+these are high estimates.
+
+00:03:30.300 --> 00:03:31.679
+I spent way less than
+
+00:03:31.680 --> 00:03:34.019
+$1,000 for all of this equipment.
+
+00:03:34.020 --> 00:03:35.619
+And it's my equipment,
+
+00:03:35.620 --> 00:03:37.259
+so I have hardware
+
+00:03:37.260 --> 00:03:38.959
+and software control over it,
+
+00:03:38.960 --> 00:03:41.099
+Which is nice.
+
+00:03:41.100 --> 00:03:43.239
+If you have an attitude of upcycling and building,
+
+00:03:43.240 --> 00:03:45.189
+and [if] this is a hobby anyway,
+
+00:03:45.190 --> 00:03:47.129
+this is an easy way—
+
+00:03:47.130 --> 00:03:48.649
+what I'm saying is—
+
+00:03:48.650 --> 00:03:51.369
+the entry into using these things,
+
+00:03:51.370 --> 00:03:58.018
+there's certainly a very low cost barrier.
+
+00:03:58.020 --> 00:04:01.429
+Because the hardware is so weak,
+
+00:04:01.430 --> 00:04:05.249
+I have the tablet for doing tablet stuff,
+
+00:04:05.250 --> 00:04:06.629
+and then I use the laptop to
+
+00:04:06.630 --> 00:04:08.909
+do all of the streaming and recording.
+
+00:04:08.910 --> 00:04:11.609
+I take the video output
+
+00:04:11.610 --> 00:04:13.829
+of the tablet and convert it to
+
+00:04:13.830 --> 00:04:19.898
+USB input into the laptop.
+
+00:04:19.900 --> 00:04:21.929
+Just to give you a diagram here,
+
+00:04:21.930 --> 00:04:23.709
+there's a laptop and there's a tablet.
+
+00:04:23.710 --> 00:04:25.929
+The tablet has a stylus.
+
+00:04:25.930 --> 00:04:29.449
+They both run GNU/Linux distributions.
+
+00:04:29.450 --> 00:04:30.949
+You've got a webcam that
+
+00:04:30.950 --> 00:04:32.129
+goes into the laptop.
+
+00:04:32.130 --> 00:04:33.618
+You've got video output
+
+00:04:33.620 --> 00:04:37.889
+from the tablet that goes into the laptop.
+
+00:04:37.890 --> 00:04:39.349
+There's a microphone that
+
+00:04:39.350 --> 00:04:40.469
+goes into the laptop,
+
+00:04:40.470 --> 00:04:43.209
+and then audio and video come out of
+
+00:04:43.210 --> 00:04:44.409
+the laptop and go into
+
+00:04:44.410 --> 00:04:46.609
+some AV system or another.
+
+NOTE Example setup
+
+00:04:46.610 --> 00:04:49.069
+Okay. This was Wednesday,
+
+00:04:49.070 --> 00:04:51.069
+teaching microbiology.
+
+00:04:51.070 --> 00:04:53.229
+There's the tablet, there's the laptop.
+
+00:04:53.230 --> 00:04:55.369
+There's the external screen
+
+00:04:55.370 --> 00:04:57.209
+in the podium here you can
+
+00:04:57.210 --> 00:04:59.549
+plug into the AV system.
+
+00:05:00.470 --> 00:05:04.209
+There it is. From where I stand,
+
+00:05:04.210 --> 00:05:06.009
+this is what the screen looks like.
+
+00:05:06.010 --> 00:05:08.224
+This is what students are seeing,
+
+00:05:08.225 --> 00:05:09.459
+on the live stream
+
+00:05:09.460 --> 00:05:10.779
+and later on the recording.
+
+00:05:10.780 --> 00:05:11.719
+And students in the room
+
+00:05:11.720 --> 00:05:12.639
+can see this as well.
+
+00:05:12.640 --> 00:05:15.099
+So you notice this is kind of meta,
+
+00:05:15.100 --> 00:05:17.139
+but the camera and
+
+00:05:17.140 --> 00:05:18.759
+the contents of the screen are
+
+00:05:18.760 --> 00:05:20.499
+there when I wander around,
+
+00:05:20.500 --> 00:05:22.219
+and when I stand in front of the screen,
+
+00:05:22.220 --> 00:05:23.939
+the students who aren't in the room can
+
+00:05:23.940 --> 00:05:27.398
+still see what I'm pointing to on the screen.
+
+00:05:27.400 --> 00:05:30.518
+Nobody gets left out.
+
+NOTE Presentation software: flexibility in function
+
+00:05:30.520 --> 00:05:31.479
+Let's talk about
+
+00:05:31.480 --> 00:05:33.579
+the software that I use.
+
+00:05:33.900 --> 00:05:35.979
+There's a lot of different things that
+
+00:05:35.980 --> 00:05:37.639
+I want to be able to show.
+
+00:05:37.640 --> 00:05:39.299
+And so I need a few different
+
+00:05:39.300 --> 00:05:42.399
+software packages— besides Emacs.
+
+00:05:42.400 --> 00:05:45.079
+For drawing on the tablet, I use
+
+00:05:45.080 --> 00:05:48.359
+(I don't know quite how this is pronounced:
+
+00:05:48.360 --> 00:05:51.139
+I think it's) Xournal++
+
+00:05:51.200 --> 00:05:54.039
+I use the web quite a bit,
+
+00:05:54.040 --> 00:05:55.719
+especially if I want to just
+
+00:05:55.720 --> 00:05:57.759
+spontaneously look something up.
+
+00:05:57.760 --> 00:05:59.679
+Often I use video,
+
+00:05:59.680 --> 00:06:01.499
+especially molecular animations.
+
+00:06:01.500 --> 00:06:04.699
+And that's incredibly powerful.
+
+00:06:04.700 --> 00:06:06.939
+And then now and again, I want to look at text.
+
+00:06:06.940 --> 00:06:08.059
+Especially in
+
+00:06:08.060 --> 00:06:09.799
+the English course that I teach,
+
+00:06:09.800 --> 00:06:11.839
+there's quite a bit of text.
+
+00:06:11.840 --> 00:06:14.239
+I'll use Emacs for that.
+
+00:06:15.000 --> 00:06:18.439
+The video compositor, the thing that
+
+00:06:18.440 --> 00:06:22.479
+puts this video and me in the green screen.
+
+00:06:22.480 --> 00:06:25.419
+and all of this stuff together, is called
+
+00:06:25.420 --> 00:06:34.818
+OBS Studio—and that also does recording.
+
+00:06:34.820 --> 00:06:37.509
+It's ALMOST a completely free software stack.
+
+00:06:37.510 --> 00:06:38.749
+I use Zoom to do
+
+00:06:38.750 --> 00:06:39.929
+the streaming and video
+
+00:06:39.930 --> 00:06:41.029
+conferencing because all of
+
+00:06:41.030 --> 00:06:42.409
+the students are forced to use it for
+
+00:06:42.410 --> 00:06:44.218
+their other classes and
+
+00:06:44.220 --> 00:06:45.409
+I've gone along with it.
+
+00:06:45.410 --> 00:06:46.669
+But a good alternative is
+
+00:06:46.670 --> 00:06:48.858
+Jitsi Meet. There are others.
+
+00:06:48.860 --> 00:06:50.729
+Okay. Again, here's
+
+00:06:50.730 --> 00:06:53.789
+the hardware setup. On the tablet,
+
+00:06:53.790 --> 00:06:56.589
+I'm running Xournal++. On the laptop,
+
+00:06:56.590 --> 00:07:00.229
+I've got Firefox and VLC, and Emacs.
+
+00:07:00.230 --> 00:07:02.889
+OBS is compositing that together.
+
+00:07:02.890 --> 00:07:05.949
+And I use Zoom, but you could use Jitsi.
+
+NOTE Live demonstration
+
+00:07:05.950 --> 00:07:07.929
+All right, let's
+
+00:07:07.930 --> 00:07:09.689
+demonstrate this live. Here we go.
+
+00:07:09.690 --> 00:07:13.609
+Here goes, nothing. The drawing program
+
+00:07:13.610 --> 00:07:15.049
+is really good because I can draw
+
+00:07:15.050 --> 00:07:17.529
+with the stylus on a tablet.
+
+00:07:17.970 --> 00:07:20.089
+It's a remarkable thing—
+
+00:07:20.090 --> 00:07:22.409
+I teach in these big lecture halls,
+
+00:07:22.410 --> 00:07:24.409
+and I guess they want them to be fancy?
+
+00:07:24.410 --> 00:07:25.969
+And so they don't have blackboards and
+
+00:07:25.970 --> 00:07:29.009
+whiteboards! If I want to be able to draw,
+
+00:07:29.010 --> 00:07:32.169
+if I want to do anything approaching analog,
+
+00:07:32.170 --> 00:07:34.769
+it has to be with this software!
+
+00:07:35.290 --> 00:07:37.809
+In this presentation, I
+
+00:07:37.810 --> 00:07:39.489
+don't have very many diagrams,
+
+00:07:39.490 --> 00:07:41.509
+but in my courses, most of
+
+00:07:41.510 --> 00:07:44.249
+the slides are complicated diagrams.
+
+00:07:44.250 --> 00:07:45.809
+Being able to annotate them
+
+00:07:45.810 --> 00:07:47.549
+is really important.
+
+00:07:47.550 --> 00:07:50.629
+This is why I don't use Emacs for
+
+00:07:50.630 --> 00:07:54.529
+presenting these kinds of documents,
+
+00:07:54.530 --> 00:07:55.809
+because I want to be able
+
+00:07:55.810 --> 00:07:57.449
+to mark them up visually.
+
+00:07:57.450 --> 00:07:59.849
+I can show you what that looks like.
+
+NOTE OBS
+
+00:07:59.850 --> 00:08:02.829
+By the way, here's how OBS works:
+
+00:08:02.830 --> 00:08:04.469
+I can go from different "scenes"
+
+00:08:04.470 --> 00:08:06.069
+So I can just do just me,
+
+00:08:06.070 --> 00:08:08.129
+or I can show you the slides,
+
+00:08:08.130 --> 00:08:10.789
+or I can show you what I see on the tablet.
+
+00:08:10.790 --> 00:08:12.269
+On the tablet, I can go
+
+00:08:12.270 --> 00:08:14.229
+through all of the— notice here,
+
+00:08:14.230 --> 00:08:16.129
+I'm scrolling through all
+
+00:08:16.130 --> 00:08:17.349
+of the different slides.
+
+00:08:17.350 --> 00:08:19.989
+I've got all kinds of different markup tools,
+
+00:08:19.990 --> 00:08:23.169
+and tools for controlling
+
+00:08:23.170 --> 00:08:24.829
+zoom and what page I'm on,
+
+00:08:24.830 --> 00:08:27.189
+but you don't have to see that.
+
+NOTE Firefox
+
+00:08:27.190 --> 00:08:32.389
+Okay. Firefox, boy, I do a lot of this.
+
+00:08:32.390 --> 00:08:36.789
+All of the quizzes,
+
+00:08:36.790 --> 00:08:38.459
+quizzes and exams in my courses
+
+00:08:38.460 --> 00:08:40.129
+are online on this
+
+00:08:40.130 --> 00:08:43.369
+web platform called Canvas,
+
+00:08:43.370 --> 00:08:45.429
+which is good enough.
+
+00:08:45.430 --> 00:08:49.589
+It's based on a GPL3 package,
+
+00:08:49.590 --> 00:08:53.069
+but this one is proprietary for Penn State.
+
+00:08:53.070 --> 00:08:55.129
+Notice that there's a quiz
+
+00:08:55.130 --> 00:08:57.049
+every day, and this quiz,
+
+00:08:57.050 --> 00:08:59.469
+every quiz has a recording from
+
+00:08:59.470 --> 00:09:00.629
+that day and you notice
+
+00:09:00.630 --> 00:09:01.889
+there's a picture of me teaching,
+
+00:09:01.890 --> 00:09:05.029
+pointing to the slides.
+
+00:09:05.030 --> 00:09:06.969
+There's the slides themselves.
+
+00:09:06.970 --> 00:09:09.589
+I use OBS to composite in
+
+00:09:09.590 --> 00:09:12.769
+the Zoom chat because I teach this hybrid.
+
+00:09:12.770 --> 00:09:13.709
+There's people in the room
+
+00:09:13.710 --> 00:09:14.569
+and there's people at
+
+00:09:14.570 --> 00:09:17.629
+other campuses who are in this course.
+
+00:09:17.630 --> 00:09:19.389
+Having the Zoom chat in
+
+00:09:19.390 --> 00:09:22.649
+the live feed is very useful.
+
+00:09:22.650 --> 00:09:25.729
+Then the quiz—
+
+00:09:25.730 --> 00:09:26.669
+at the next class meeting,
+
+00:09:26.670 --> 00:09:27.889
+we'll go through this quiz.
+
+00:09:27.890 --> 00:09:30.049
+Here's some experimental data
+
+00:09:30.050 --> 00:09:31.649
+and here's a question where they're
+
+00:09:31.650 --> 00:09:36.589
+supposed to interpret these data.
+
+00:09:36.590 --> 00:09:38.849
+We can in class together,
+
+00:09:38.850 --> 00:09:41.629
+we can review those.
+
+00:09:41.630 --> 00:09:45.369
+That's why Firefox is useful.
+
+00:09:47.970 --> 00:09:50.569
+Being able to inhabit,
+
+00:09:50.570 --> 00:09:52.829
+being able to inhabit
+
+00:09:52.830 --> 00:09:56.869
+figures like this is incredibly powerful.
+
+00:09:56.870 --> 00:09:59.349
+This is the silver lining of being
+
+00:09:59.350 --> 00:10:02.129
+forced to teach online during the pandemic,
+
+00:10:02.130 --> 00:10:03.069
+because I couldn't do
+
+00:10:03.070 --> 00:10:05.759
+this before I had a green screen.
+
+00:10:05.760 --> 00:10:09.539
+But even more powerful than this—
+
+00:10:09.540 --> 00:10:10.819
+For years, I showed students
+
+00:10:10.820 --> 00:10:12.339
+this figure by standing in front
+
+00:10:12.340 --> 00:10:13.699
+of it or by having a
+
+00:10:13.700 --> 00:10:15.239
+projector screen above me.
+
+00:10:15.240 --> 00:10:18.459
+And I said, "This is the B form of DNA."
+
+00:10:18.460 --> 00:10:20.379
+"This is the most common form of DNA."
+
+00:10:20.380 --> 00:10:22.579
+"You see here that there's this minor groove."
+
+00:10:22.580 --> 00:10:23.419
+"And then this feature
+
+00:10:23.420 --> 00:10:24.419
+is called the major groove."
+
+00:10:24.420 --> 00:10:26.059
+And students couldn't see it.
+
+NOTE Animation
+
+00:10:26.060 --> 00:10:29.439
+But if you animate it—
+
+00:10:29.440 --> 00:10:30.279
+if you just have it
+
+00:10:30.280 --> 00:10:33.319
+move, the apparent movement,
+
+00:10:33.320 --> 00:10:34.399
+It's not really movement,
+
+00:10:34.400 --> 00:10:35.379
+it's apparent movement.
+
+00:10:35.380 --> 00:10:37.819
+And it tricks your visual cortex into
+
+00:10:37.820 --> 00:10:40.319
+adding three dimensional structure to this.
+
+00:10:40.620 --> 00:10:42.579
+You can see this feature is
+
+00:10:42.580 --> 00:10:45.339
+the major groove and that feature
+
+00:10:45.340 --> 00:10:47.219
+is the minor groove. And a static
+
+00:10:47.220 --> 00:10:48.319
+image just can't provide
+
+00:10:48.320 --> 00:10:51.399
+that understanding, while moving image can.
+
+NOTE Emacs
+
+00:10:55.790 --> 00:10:58.179
+I use Emacs to look at text.
+
+00:10:58.180 --> 00:11:02.519
+Where's Emacs? Here's Emacs! We read
+
+00:11:02.520 --> 00:11:04.279
+Vonnegut in this English class that I
+
+00:11:04.280 --> 00:11:07.759
+teach and I'm going to tab over to Emacs.
+
+00:11:07.760 --> 00:11:09.859
+It's nice to be able
+
+00:11:09.860 --> 00:11:12.419
+to have text jump
+
+00:11:12.420 --> 00:11:14.159
+around and be dynamic, right?
+
+00:11:14.160 --> 00:11:16.859
+If you, if you want to look
+
+00:11:16.860 --> 00:11:18.039
+at this passage and I'll
+
+00:11:18.040 --> 00:11:19.259
+have somebody read it aloud.
+
+00:11:19.260 --> 00:11:20.819
+And then we talk about why he chose
+
+00:11:20.820 --> 00:11:22.499
+this word and why he chose that word,
+
+00:11:22.500 --> 00:11:25.179
+and the cadence, and the alliteration.
+
+00:11:25.180 --> 00:11:30.839
+Then we can go to another particular excerpt
+
+00:11:30.840 --> 00:11:33.439
+and pick that apart on the screen together.
+
+00:11:33.440 --> 00:11:34.899
+That would be difficult to do with
+
+00:11:34.900 --> 00:11:36.819
+other software that would be very tedious
+
+00:11:36.820 --> 00:11:39.399
+to do on the chalkboard.
+
+00:11:39.400 --> 00:11:42.259
+So Emacs is really good for that sort of thing.
+
+NOTE Making slides and handouts with Org Mode
+
+00:11:42.260 --> 00:11:45.379
+Mostly what I use Emacs for is not to
+
+00:11:45.380 --> 00:11:50.339
+present but to make slides and handouts.
+
+00:11:50.340 --> 00:11:52.359
+Okay. Again, the thing that I want to
+
+00:11:52.360 --> 00:11:54.219
+stress is that the slides
+
+00:11:54.220 --> 00:11:56.739
+and the handouts can be produced from
+
+00:11:56.740 --> 00:12:01.179
+a single Org mode document.
+
+00:12:01.180 --> 00:12:04.059
+This entire presentation
+
+00:12:04.060 --> 00:12:05.699
+was assembled in Emacs.
+
+00:12:05.700 --> 00:12:07.939
+I'll show you how I did that.
+
+00:12:08.420 --> 00:12:11.619
+I think everybody
+
+00:12:11.620 --> 00:12:13.159
+probably knows what Org mode is.
+
+00:12:13.160 --> 00:12:14.639
+But for our purposes, it's a way
+
+00:12:14.640 --> 00:12:16.119
+to write documents in plain text.
+
+00:12:16.120 --> 00:12:19.839
+That's very important because one of
+
+00:12:19.840 --> 00:12:22.019
+the biggest advantages of this is
+
+00:12:22.020 --> 00:12:24.739
+being able to do version control.
+
+00:12:24.740 --> 00:12:27.779
+I don't have Powerpoint decks
+
+00:12:27.780 --> 00:12:29.359
+everywhere with slides that
+
+00:12:29.360 --> 00:12:31.239
+there's no way to keep track of them.
+
+00:12:31.240 --> 00:12:32.459
+Having these be plain text
+
+00:12:32.460 --> 00:12:33.579
+means that I can just put them in
+
+00:12:33.580 --> 00:12:36.139
+a git repository.
+
+00:12:36.140 --> 00:12:37.899
+Very clean and human readable markup
+
+00:12:37.900 --> 00:12:41.159
+including handling tables
+
+00:12:41.160 --> 00:12:43.339
+which is just incredibly powerful.
+
+00:12:43.340 --> 00:12:45.459
+You can manage projects and tasks.
+
+00:12:45.460 --> 00:12:47.299
+But the fact that it's an outline
+
+00:12:47.300 --> 00:12:48.979
+that you can produce a document that's
+
+00:12:48.980 --> 00:12:51.279
+hierarchical and fold and
+
+00:12:51.280 --> 00:12:52.979
+reveal different parts of it.
+
+00:12:52.980 --> 00:12:57.119
+But to produce a book length lectures for
+
+00:12:57.120 --> 00:12:58.919
+an entire semester and use
+
+00:12:58.920 --> 00:13:01.399
+those to produce both slides and handouts,
+
+00:13:01.400 --> 00:13:03.179
+that's very powerful,
+
+00:13:03.180 --> 00:13:04.999
+at least for my brain. To be able to
+
+00:13:05.000 --> 00:13:06.779
+put it all together and have it be
+
+00:13:06.780 --> 00:13:08.399
+discursive rather
+
+00:13:08.400 --> 00:13:09.919
+than having to be graphical.
+
+00:13:09.920 --> 00:13:11.879
+You can export to
+
+00:13:11.880 --> 00:13:15.059
+a million different formats including
+
+00:13:15.060 --> 00:13:16.999
+PDF documents like the handouts as
+
+00:13:17.000 --> 00:13:22.679
+LaTeX, and slides like these through Beamer export.
+
+NOTE Pedagogy first
+
+00:13:22.680 --> 00:13:24.919
+The approach is to think
+
+00:13:24.920 --> 00:13:26.899
+about pedagogy rather than thinking
+
+00:13:26.900 --> 00:13:28.279
+about software or thinking
+
+00:13:28.280 --> 00:13:30.999
+about graphic design.
+
+00:13:31.000 --> 00:13:32.599
+To think about how can
+
+00:13:32.600 --> 00:13:34.379
+I make the best argument?
+
+00:13:34.380 --> 00:13:35.979
+How can I make the best,
+
+00:13:35.980 --> 00:13:40.879
+the most effective sequence of ideas?
+
+00:13:40.880 --> 00:13:44.999
+All I've done is make a few tweaks to
+
+00:13:45.000 --> 00:13:47.979
+the export backends for LaTeX and
+
+00:13:47.980 --> 00:13:49.979
+Beamer to customize them
+
+00:13:49.980 --> 00:13:51.499
+for my particular needs.
+
+00:13:51.500 --> 00:13:54.599
+And I'll show you what I've done.
+
+00:13:54.600 --> 00:13:58.059
+You've seen this already. I'll put
+
+00:13:58.060 --> 00:14:00.899
+one idea in big text on the screen.
+
+00:14:00.900 --> 00:14:04.619
+I find it to be effective to
+
+00:14:04.620 --> 00:14:09.119
+make a single idea explicit at one time.
+
+00:14:09.120 --> 00:14:12.259
+Now, some concepts can
+
+00:14:12.260 --> 00:14:14.799
+be explained with words or text,
+
+00:14:14.800 --> 00:14:20.259
+but many ideas are best just illustrated.
+
+00:14:20.260 --> 00:14:22.539
+In contrast, we've
+
+00:14:22.540 --> 00:14:23.979
+all used Powerpoint, right?
+
+00:14:23.980 --> 00:14:25.699
+And Edward Tufte has taught us
+
+00:14:25.700 --> 00:14:27.479
+about how Powerpoint is so
+
+00:14:27.480 --> 00:14:29.239
+terrible from a cognitive point of
+
+00:14:29.240 --> 00:14:31.799
+view and from a communications point of view.
+
+00:14:31.800 --> 00:14:35.398
+So using Org mode is much better.
+
+00:14:35.400 --> 00:14:36.759
+How is it better?
+
+00:14:36.760 --> 00:14:41.479
+Well, Tufte also tells us that
+
+00:14:42.040 --> 00:14:49.049
+any oral presentation that is substantive at all
+
+00:14:49.050 --> 00:14:52.629
+has to have some physical handout
+
+00:14:52.630 --> 00:14:55.709
+that the audience can use to take notes on.
+
+00:14:55.710 --> 00:14:58.749
+Slides are terrible handouts.
+
+00:14:59.030 --> 00:15:02.129
+And notes are usually terrible slides.
+
+00:15:02.130 --> 00:15:03.689
+Having one document where you
+
+00:15:03.690 --> 00:15:05.849
+can produce both and have them be,
+
+00:15:05.850 --> 00:15:08.409
+have the same organization,
+
+00:15:08.410 --> 00:15:10.349
+but different structures and
+
+00:15:10.350 --> 00:15:14.749
+different visual organization is
+
+00:15:14.750 --> 00:15:16.609
+something that I wanted
+
+00:15:16.610 --> 00:15:18.629
+for a long time and I can only do it
+
+00:15:18.630 --> 00:15:20.019
+with Emacs.
+
+00:15:20.020 --> 00:15:21.409
+Being able
+
+00:15:21.410 --> 00:15:22.729
+also for my brain to
+
+00:15:22.730 --> 00:15:25.309
+separate the work of writing and developing
+
+00:15:25.310 --> 00:15:28.469
+ideas and developing explanations
+
+00:15:28.470 --> 00:15:30.049
+and developing arguments
+
+00:15:30.050 --> 00:15:31.429
+and scaffolding them.
+
+00:15:31.430 --> 00:15:33.689
+That's jargon in pedagogy
+
+00:15:33.690 --> 00:15:36.889
+for bringing the student along.
+
+00:15:36.890 --> 00:15:41.349
+Separate that work from wrangling slides.
+
+00:15:41.350 --> 00:15:44.529
+That's super helpful for me.
+
+00:15:44.530 --> 00:15:46.709
+Again, you have
+
+00:15:46.710 --> 00:15:48.229
+an Org document that makes
+
+00:15:48.230 --> 00:15:51.369
+both the handouts and the slides.
+
+00:15:51.370 --> 00:15:53.449
+What's beautiful about it is
+
+00:15:53.450 --> 00:15:54.649
+that everything is an outline.
+
+00:15:54.650 --> 00:15:56.429
+And again, it's very discursive.
+
+00:15:56.430 --> 00:15:59.109
+Here's Tufte's famous poster where he's making
+
+00:15:59.110 --> 00:16:02.009
+fun of the psychology of Powerpoint.
+
+00:16:02.010 --> 00:16:05.749
+I don't know about you, but I have the kind of brain
+
+00:16:05.750 --> 00:16:07.609
+and I'm in the kind of job
+
+00:16:07.610 --> 00:16:09.909
+and I'm at the age where I don't have extra
+
+00:16:09.910 --> 00:16:12.049
+cognitive function! You know?
+
+00:16:12.050 --> 00:16:15.729
+So streamlining this workflow
+
+00:16:15.730 --> 00:16:17.789
+has been really helpful.
+
+NOTE org-teach
+
+00:16:17.790 --> 00:16:19.309
+All right, so let me show
+
+00:16:19.310 --> 00:16:21.649
+you what I've developed.
+
+00:16:21.650 --> 00:16:24.489
+Let's look at the Org doc.
+
+00:16:24.490 --> 00:16:25.829
+Okay. So what you see is you have
+
+00:16:25.830 --> 00:16:30.769
+a typical Org mode buffer.
+
+00:16:30.770 --> 00:16:32.849
+There's two headings here.
+
+00:16:32.850 --> 00:16:35.529
+One of them is stuff that I've deleted and
+
+00:16:35.530 --> 00:16:39.269
+the other is the talk.
+
+00:16:39.270 --> 00:16:43.109
+And so all of these subheadings have
+
+00:16:43.110 --> 00:16:46.389
+various things underneath including
+
+00:16:46.390 --> 00:16:48.969
+these macros that I wrote like `include-slide`,
+
+00:16:48.970 --> 00:16:51.229
+`impact-slide`, `subsection-slide`,
+
+00:16:51.230 --> 00:16:54.909
+et cetera, and then a bunch of stuff.
+
+00:16:54.950 --> 00:16:59.309
+Then I've got this include
+
+00:16:59.310 --> 00:17:01.629
+file that just has
+
+00:17:01.630 --> 00:17:03.289
+the macros that I've written.
+
+00:17:03.290 --> 00:17:05.449
+You can look at this on the repo.
+
+00:17:05.450 --> 00:17:06.289
+I'm not going to take
+
+00:17:06.290 --> 00:17:07.569
+the time to walk through it and
+
+00:17:07.570 --> 00:17:10.369
+explain what all the LaTeX means.
+
+00:17:10.370 --> 00:17:16.509
+But the upshot is
+
+00:17:16.510 --> 00:17:20.549
+that by including that file
+
+00:17:20.550 --> 00:17:22.429
+that has all the macro definitions,
+
+00:17:22.430 --> 00:17:25.649
+you get things like this macro pause
+
+00:17:25.650 --> 00:17:27.689
+or newline or whitespace-break,
+
+00:17:27.690 --> 00:17:30.809
+which just allow—
+
+00:17:30.810 --> 00:17:33.009
+pause splits a slide into two frames,
+
+00:17:33.010 --> 00:17:34.569
+so you can get these overlays,
+
+00:17:34.570 --> 00:17:36.309
+so you can go through paragraphs one by one.
+
+00:17:36.310 --> 00:17:38.629
+These just put
+
+00:17:38.630 --> 00:17:42.649
+white space in.
+
+00:17:44.650 --> 00:17:47.109
+Text-slides: This thing here, this title
+
+00:17:47.110 --> 00:17:49.169
+is level three heading.
+
+00:17:49.170 --> 00:17:50.189
+Figure-slides:
+
+00:17:50.190 --> 00:17:52.049
+the same thing are level three headings.
+
+00:17:52.050 --> 00:17:54.009
+One of the most powerful things
+
+00:17:54.010 --> 00:17:56.229
+is that I can take other files,
+
+00:17:56.230 --> 00:18:00.149
+I can take other Org files that have level
+
+00:18:00.150 --> 00:18:02.789
+three headings that are slides and those can
+
+00:18:02.790 --> 00:18:06.209
+be in some other repository.
+
+00:18:06.210 --> 00:18:08.509
+I only need to have one version of
+
+00:18:08.510 --> 00:18:09.909
+that slide that I
+
+00:18:09.910 --> 00:18:12.749
+can use in multiple courses.
+
+00:18:13.230 --> 00:18:17.109
+Just that functionality is
+
+00:18:17.110 --> 00:18:19.909
+incredibly helpful for keeping
+
+00:18:19.910 --> 00:18:22.809
+track of work from a few years ago.
+
+00:18:22.810 --> 00:18:24.269
+All of these I'm going to
+
+00:18:24.270 --> 00:18:25.929
+explain in the next few slides.
+
+00:18:25.930 --> 00:18:27.709
+The section slides
+
+00:18:27.710 --> 00:18:29.909
+correspond to course modules.
+
+00:18:29.910 --> 00:18:31.129
+Each of these is going to
+
+00:18:31.130 --> 00:18:32.549
+be a few weeks of a course.
+
+00:18:32.550 --> 00:18:34.629
+This is a major division of a course.
+
+00:18:34.630 --> 00:18:36.909
+I have some macros so that I can decorate
+
+00:18:36.910 --> 00:18:41.389
+this with relevant information.
+
+00:18:41.390 --> 00:18:43.469
+Then for every subsection,
+
+00:18:43.470 --> 00:18:45.569
+level two headline, that
+
+00:18:45.570 --> 00:18:46.729
+corresponds to a major
+
+00:18:46.730 --> 00:18:48.589
+course topic in the module.
+
+00:18:48.590 --> 00:18:50.209
+Then text slides, again,
+
+00:18:50.210 --> 00:18:52.849
+level three headlines become
+
+00:18:52.850 --> 00:18:53.969
+titles for the slide,
+
+00:18:53.970 --> 00:18:58.859
+and level four headlines become text elements.
+
+00:18:58.900 --> 00:19:01.679
+Most of my slides look like this.
+
+00:19:01.680 --> 00:19:03.139
+They're figures.
+
+00:19:03.140 --> 00:19:05.859
+Here's the glycolytic pathway.
+
+00:19:06.020 --> 00:19:09.979
+Level three gives you the title.
+
+00:19:11.420 --> 00:19:14.279
+It's missing here actually,
+
+00:19:14.280 --> 00:19:16.719
+but there's a way you can put in captions.
+
+00:19:16.720 --> 00:19:18.959
+This line here just tells
+
+00:19:18.960 --> 00:19:21.039
+the LaTeX export backend
+
+00:19:21.040 --> 00:19:24.219
+how big you want it and stuff like that.
+
+00:19:24.220 --> 00:19:29.139
+Impact slides, they have to go under H1 or H2.
+
+00:19:29.140 --> 00:19:32.179
+And they just give you one of these text slides.
+
+00:19:32.450 --> 00:19:35.649
+For an entire slide being an image,
+
+00:19:35.650 --> 00:19:38.249
+you can use this image-slide macro.
+
+NOTE Blank slides
+
+00:19:38.330 --> 00:19:41.129
+I often put in blank slides to
+
+00:19:41.130 --> 00:19:43.269
+remind myself that this is a time to stop.
+
+00:19:43.270 --> 00:19:44.789
+Often there's something for me to
+
+00:19:44.790 --> 00:19:47.369
+draw here with the stylus.
+
+NOTE Animations
+
+00:19:50.050 --> 00:19:53.149
+I often use— it used to be Powerpoint,
+
+00:19:53.150 --> 00:19:56.069
+now I use LibreOffice Impress—to make
+
+00:19:56.070 --> 00:19:58.309
+multi slide animations like
+
+00:19:58.310 --> 00:20:01.309
+the sphere and the donut and the GI tract.
+
+00:20:01.310 --> 00:20:03.249
+And this hardware thing
+
+00:20:03.250 --> 00:20:05.269
+that I did for you today,
+
+00:20:05.270 --> 00:20:07.949
+I export those animations as PDFs.
+
+00:20:07.950 --> 00:20:14.469
+Then I can just slurp them up into the slides.
+
+00:20:14.470 --> 00:20:16.669
+Just into the slides, not into
+
+00:20:16.670 --> 00:20:19.269
+the handouts with this macro.
+
+NOTE Conclusion
+
+00:20:19.270 --> 00:20:21.489
+I hope that you find this useful.
+
+00:20:21.490 --> 00:20:22.449
+I hope you share it with
+
+00:20:22.450 --> 00:20:24.089
+other educators that you know.
+
+00:20:24.090 --> 00:20:27.149
+Here is the sourcehut repo,
+
+00:20:27.150 --> 00:20:29.069
+here's how to get in touch with me.
+
+00:20:29.070 --> 00:20:32.569
+I look forward to addressing your questions.
+
+00:20:32.690 --> 00:20:34.989
+I want to say thank you
+
+00:20:34.990 --> 00:20:36.609
+to Sacha [Chua] and the organizers,
+
+00:20:36.610 --> 00:20:38.449
+and to everyone who made this possible and
+
+00:20:38.450 --> 00:20:40.689
+to all of you in the community.
+
+00:20:40.690 --> 00:20:42.769
+Because as we all know,
+
+00:20:42.770 --> 00:20:47.429
+that that's what makes Emacs such a strong
+
+00:20:47.430 --> 00:20:50.089
+and powerful package is
+
+00:20:50.090 --> 00:20:51.329
+all of the people behind it.
+
+00:20:51.330 --> 00:20:53.169
+Thanks everybody.
diff --git a/2023/captions/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--answers.vtt b/2023/captions/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--answers.vtt
new file mode 100644
index 00000000..034faf8b
--- /dev/null
+++ b/2023/captions/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--answers.vtt
@@ -0,0 +1,3361 @@
+WEBVTT
+
+
+00:00:00.480 --> 00:00:00.980
+[Speaker 0]: Dictation.
+
+00:00:06.020 --> 00:00:06.520
+[Speaker 1]: Right. All right I think we are live now.
+
+00:00:08.980 --> 00:00:09.179
+The stream is here. So folks if you would
+
+00:00:11.320 --> 00:00:11.820
+please post your questions on the pad and
+
+00:00:13.259 --> 00:00:13.759
+we'll take them up here.
+
+00:00:20.500 --> 00:00:21.000
+[Speaker 0]: Boy so I don't have myself set up with the
+
+00:00:25.140 --> 00:00:25.279
+[Speaker 1]: Oh, I can read the questions to you if you
+
+00:00:26.939 --> 00:00:27.439
+[Speaker 0]: pad. That would be fantastic.
+
+00:00:27.900 --> 00:00:28.400
+Thank you.
+
+00:00:28.779 --> 00:00:29.220
+[Speaker 1]: would prefer that. Sure.
+
+00:00:29.220 --> 00:00:29.720
+Thanks.
+
+00:00:58.380 --> 00:00:58.500
+[Speaker 0]: Well, for the purpose of breaking the ice a
+
+00:01:01.400 --> 00:01:01.620
+little bit, I can provide a live
+
+00:01:03.840 --> 00:01:04.340
+demonstration of the use of this Voice In
+
+00:01:06.300 --> 00:01:06.800
+plugin for Google Chrome.
+
+00:01:11.080 --> 00:01:11.580
+So I have, let's see, say new sentence.
+
+00:01:20.400 --> 00:01:20.900
+I'm on a website that is called 750 words.
+
+00:01:25.080 --> 00:01:25.520
+It provides a text area where without any
+
+00:01:30.580 --> 00:01:30.760
+other distracting icons for the purpose of
+
+00:01:34.040 --> 00:01:34.200
+writing and I'm using it for the purpose of
+
+00:01:38.680 --> 00:01:38.960
+capturing my words that I'm dictating and I
+
+00:01:42.979 --> 00:01:43.420
+have enabled the Voice In plugin by hitting
+
+00:01:48.280 --> 00:01:48.780
+the option L command. New sentence.
+
+00:01:54.479 --> 00:01:54.960
+So it interpreted that command new sentence
+
+00:01:56.260 --> 00:01:56.760
+even though I didn't pronounce it correctly,
+
+00:01:59.440 --> 00:01:59.820
+which is a pretty good demonstration of its
+
+00:02:00.920 --> 00:02:01.420
+accuracy. New sentence.
+
+00:02:06.420 --> 00:02:06.820
+Oops, that didn't work.
+
+00:02:15.040 --> 00:02:15.200
+Undo. New sentence. So new sentence is a
+
+00:02:16.040 --> 00:02:16.540
+combination of 2 commands,
+
+00:02:23.820 --> 00:02:24.080
+period and new line. So I've found it more
+
+00:02:25.840 --> 00:02:26.260
+convenient just to say new sentence than
+
+00:02:28.440 --> 00:02:28.940
+having to say period and new line.
+
+00:02:33.900 --> 00:02:34.220
+You can see that it's able to keep up with
+
+00:02:41.840 --> 00:02:42.340
+most of my speech, and it has to interpret
+
+00:02:44.760 --> 00:02:45.140
+the sounds that I'm making and convert those
+
+00:02:47.600 --> 00:02:47.860
+into words, so there's always going to be a
+
+00:02:59.580 --> 00:03:00.080
+lag. New sentence. But I've found that I can
+
+00:03:02.720 --> 00:03:03.220
+generate about 2,000, up to 2,000
+
+00:03:07.040 --> 00:03:07.540
+words an hour as I gather my thoughts and
+
+00:03:10.960 --> 00:03:11.460
+talk in my rather slow fashion of speaking.
+
+00:03:15.860 --> 00:03:16.220
+New sentence, if you're a really fast
+
+00:03:18.560 --> 00:03:19.060
+speaker, it might have trouble keeping up.
+
+00:03:30.860 --> 00:03:31.080
+New sentence. I like to write When I'm using
+
+00:03:34.360 --> 00:03:34.860
+the keyboard with 1 sentence per line,
+
+00:03:38.520 --> 00:03:39.020
+so that when I copy my text and paste it into
+
+00:03:43.680 --> 00:03:43.840
+Emacs, for example, I can resort the
+
+00:03:47.300 --> 00:03:47.600
+sentences very easily by just selecting 1
+
+00:03:50.600 --> 00:03:51.100
+line at a time. I like to keep the sentences
+
+00:03:53.480 --> 00:03:53.980
+unwrapped in that fashion because that
+
+00:03:56.320 --> 00:03:56.820
+greatly eases the rewriting phase.
+
+00:04:01.120 --> 00:04:01.580
+And I'm almost have sort of a hybrid reverse
+
+00:04:03.160 --> 00:04:03.660
+outlining approach by doing that.
+
+00:04:14.340 --> 00:04:14.680
+New sentence. Looks like I have gotten ahead
+
+00:04:18.079 --> 00:04:18.579
+of it a bit and it has not kept up.
+
+00:04:21.560 --> 00:04:22.060
+But generally, it does keep up pretty well.
+
+00:04:26.180 --> 00:04:26.680
+[Speaker 1]: Nice. Thanks for the demo.
+
+00:04:30.380 --> 00:04:30.880
+Let's see. I think we have.
+
+00:04:31.480 --> 00:04:31.980
+Yeah, sorry.
+
+00:04:33.520 --> 00:04:34.020
+[Speaker 0]: You're welcome. Go ahead.
+
+00:04:42.380 --> 00:04:42.880
+You can see that it has this EN means English
+
+00:04:46.880 --> 00:04:47.180
+and then dash US. There's actually about 40
+
+00:04:48.000 --> 00:04:48.500
+languages that it supports,
+
+00:04:52.280 --> 00:04:52.720
+including several variants of German and
+
+00:04:54.640 --> 00:04:55.140
+about a dozen English dialects.
+
+00:05:05.200 --> 00:05:05.380
+[Speaker 1]: Nice. Let's see, I think we have some
+
+00:05:06.860 --> 00:05:07.360
+comments and questions trickling in.
+
+00:05:11.160 --> 00:05:11.320
+So someone is saying that there is a text to
+
+00:05:14.700 --> 00:05:15.200
+command application or utility called Clipia,
+
+00:05:19.395 --> 00:05:19.472
+C-L-I-P-I-A, that they think is awesome.
+
+00:05:19.860 --> 00:05:20.360
+Clipia that they think is awesome.
+
+00:05:24.960 --> 00:05:25.460
+And someone else is also saying that Sox,
+
+00:05:27.180 --> 00:05:27.680
+S-O-X is another good alternative.
+
+00:05:34.560 --> 00:05:34.920
+[Speaker 0]: I've not explored those yet.
+
+00:05:36.740 --> 00:05:37.240
+So thank you very much for the suggestions.
+
+00:05:42.700 --> 00:05:43.000
+[Speaker 1]: So I'll... I just dropped a link to the pad
+
+00:05:45.360 --> 00:05:45.520
+page here in the chat and on the big blue
+
+00:05:47.320 --> 00:05:47.820
+button if you'd like to open that up as well.
+
+00:05:50.280 --> 00:05:50.460
+But I'll continue reading the comments and
+
+00:05:54.340 --> 00:05:54.640
+questions. So the first question,
+
+00:05:56.420 --> 00:05:56.920
+I guess, is that could you comment on how
+
+00:06:01.800 --> 00:06:02.080
+speaking versus typing affects your logic or
+
+00:06:03.260 --> 00:06:03.760
+the content, quote unquote,
+
+00:06:05.020 --> 00:06:05.520
+that you write?
+
+00:06:10.320 --> 00:06:10.820
+[Speaker 0]: I find that this is like the difference
+
+00:06:15.600 --> 00:06:16.080
+between writing your thoughts down on a blank
+
+00:06:18.640 --> 00:06:19.140
+piece of printer paper versus paper bound
+
+00:06:21.100 --> 00:06:21.600
+with a leather notebook.
+
+00:06:24.300 --> 00:06:24.800
+I don't think there's any real difference.
+
+00:06:27.980 --> 00:06:28.380
+I know that some people believe there is a
+
+00:06:29.540 --> 00:06:30.040
+solid certain difference,
+
+00:06:32.580 --> 00:06:32.980
+But this is for the purpose,
+
+00:06:34.540 --> 00:06:35.040
+I'm using this for the purpose of generating
+
+00:06:40.340 --> 00:06:40.720
+the first draft because my skills with using
+
+00:06:44.160 --> 00:06:44.440
+my voice to edit my text is still not very
+
+00:06:46.240 --> 00:06:46.740
+well developed. I'm still more efficient
+
+00:06:49.120 --> 00:06:49.620
+using the keyboard for that stage.
+
+00:06:52.200 --> 00:06:52.700
+So the hardest part about writing generally
+
+00:06:55.160 --> 00:06:55.660
+is getting the first crappy draft written.
+
+00:07:00.040 --> 00:07:00.160
+And so I have found that dictation is
+
+00:07:01.480 --> 00:07:01.980
+perfectly fine for that phase.
+
+00:07:07.060 --> 00:07:07.200
+And I find it actually very conducive for
+
+00:07:09.480 --> 00:07:09.980
+just getting the text out.
+
+00:07:13.500 --> 00:07:13.680
+The biggest problem that most of us have is
+
+00:07:15.080 --> 00:07:15.580
+applying our internal editor.
+
+00:07:20.280 --> 00:07:20.460
+And that inhibits us from generating words in
+
+00:07:21.600 --> 00:07:22.100
+a free-flowing fashion.
+
+00:07:26.000 --> 00:07:26.500
+So I generally do my generative writing.
+
+00:07:28.740 --> 00:07:28.940
+So actually I divide my writing into 2
+
+00:07:30.240 --> 00:07:30.740
+categories, generative writing,
+
+00:07:32.320 --> 00:07:32.820
+generating the first crappy draft,
+
+00:07:35.920 --> 00:07:36.300
+and then rewriting. Rewriting is probably 80,
+
+00:07:38.520 --> 00:07:39.020
+90% of writing where you go back and rework
+
+00:07:40.600 --> 00:07:41.100
+the order of the sentences,
+
+00:07:43.840 --> 00:07:43.980
+order of paragraphs, the order of words in a
+
+00:07:44.700 --> 00:07:45.060
+sentence and so forth.
+
+00:07:47.540 --> 00:07:47.860
+The really hard work. That's best done later
+
+00:07:49.740 --> 00:07:50.240
+in the day when I'm more awake.
+
+00:07:52.880 --> 00:07:52.960
+I do my general writing first thing in the
+
+00:07:55.320 --> 00:07:55.820
+morning when I feel horrible.
+
+00:07:59.440 --> 00:07:59.940
+I'm not very alert. That's when my internal
+
+00:08:03.340 --> 00:08:03.700
+editor is not very awake and I can get more
+
+00:08:05.760 --> 00:08:06.260
+words out, more words past that gatekeeper.
+
+00:08:09.280 --> 00:08:09.480
+And so I can do this sitting down,
+
+00:08:10.640 --> 00:08:10.920
+I can do this standing up,
+
+00:08:12.800 --> 00:08:13.180
+I can do this 20 feet away from my computer
+
+00:08:15.440 --> 00:08:15.600
+looking out the window to give my eyes a
+
+00:08:19.540 --> 00:08:20.040
+break. So I find it's actually very enjoyable
+
+00:08:21.440 --> 00:08:21.940
+to use it in this fashion.
+
+00:08:29.640 --> 00:08:30.140
+And the downside is that I wind up generating
+
+00:08:32.720 --> 00:08:32.919
+3 times as much text, and that makes for 3
+
+00:08:35.140 --> 00:08:35.640
+times as much work when it comes to rewriting
+
+00:08:39.780 --> 00:08:39.940
+the text. And that means I'm using the
+
+00:08:45.040 --> 00:08:45.200
+keyboard a lot later on in the day and I
+
+00:08:47.720 --> 00:08:47.920
+haven't made any progress on recovering from
+
+00:08:49.760 --> 00:08:50.260
+my own repetitive stress injury.
+
+00:08:56.880 --> 00:08:57.240
+I hope that I will add the use of voice
+
+00:08:59.720 --> 00:09:00.220
+commands, speech to commands,
+
+00:09:02.800 --> 00:09:03.300
+for editing the text in the future.
+
+00:09:06.880 --> 00:09:07.040
+And I'll eventually give my hands more of a
+
+00:09:07.040 --> 00:09:07.540
+break.
+
+00:09:12.280 --> 00:09:12.600
+[Speaker 1]: Right. Thanks. Yeah, that sounds like a nice
+
+00:09:15.360 --> 00:09:15.640
+flow of sort of being able to get your words
+
+00:09:18.740 --> 00:09:18.940
+out while your internal editor is still not
+
+00:09:21.220 --> 00:09:21.720
+inhibiting things. And then later in the day
+
+00:09:25.320 --> 00:09:25.520
+or days, get back to the actual rewriting and
+
+00:09:25.520 --> 00:09:26.020
+editing.
+
+00:09:31.320 --> 00:09:31.720
+[Speaker 0]: Cool. So this allows you to actually separate
+
+00:09:33.640 --> 00:09:34.140
+those 2 activities, not only by time.
+
+00:09:36.840 --> 00:09:37.200
+So many professional writers will spend
+
+00:09:39.000 --> 00:09:39.140
+several hours in the morning doing the
+
+00:09:41.040 --> 00:09:41.120
+generative part and then they'll spend the
+
+00:09:41.920 --> 00:09:42.420
+rest of the day rewriting.
+
+00:09:46.000 --> 00:09:46.500
+So they have separated those 2 activities
+
+00:09:49.340 --> 00:09:49.540
+temporally. What most people actually do is,
+
+00:09:51.540 --> 00:09:51.700
+you know, they do the generative part and
+
+00:09:53.300 --> 00:09:53.560
+then they write 1 sentence and they apply
+
+00:09:55.460 --> 00:09:55.640
+that internal editor right away because they
+
+00:09:57.720 --> 00:09:58.220
+want to write the first draft in a perfect,
+
+00:10:02.400 --> 00:10:02.560
+as a perfect version as the final draft And
+
+00:10:03.840 --> 00:10:04.340
+that slows them down dramatically.
+
+00:10:08.160 --> 00:10:08.400
+But this also allows you to separate these 2
+
+00:10:10.320 --> 00:10:10.820
+activities in terms of modality.
+
+00:10:13.940 --> 00:10:14.120
+You're going to do the generative writing by
+
+00:10:16.560 --> 00:10:17.060
+voice and the rewriting by keyboard.
+
+00:10:22.200 --> 00:10:22.480
+So I think this is 1 way that many people can
+
+00:10:26.040 --> 00:10:26.540
+get into using speech to text in a productive
+
+00:10:26.640 --> 00:10:27.140
+way.
+
+00:10:30.480 --> 00:10:30.980
+[Speaker 1]: Nice. Yeah, that sounds great.
+
+00:10:33.940 --> 00:10:34.200
+Let's see. I think we have about 3 or 4
+
+00:10:37.840 --> 00:10:37.960
+minutes live. So I think we have time for at
+
+00:10:38.560 --> 00:10:39.060
+least another question.
+
+00:10:41.920 --> 00:10:42.180
+Have you tried the chat GPT voice chat
+
+00:10:44.540 --> 00:10:44.760
+interface? And if so, how has been your
+
+00:10:47.020 --> 00:10:47.180
+experience of it? As someone experienced with
+
+00:10:48.640 --> 00:10:48.860
+voice control, interested to hear your
+
+00:10:51.940 --> 00:10:52.180
+thoughts, performance relative to the free
+
+00:10:52.960 --> 00:10:53.460
+software tools in particular?
+
+00:10:57.180 --> 00:10:57.380
+[Speaker 0]: I don't have much experience with that
+
+00:11:01.320 --> 00:11:01.500
+particular software. I have used Whisper a
+
+00:11:03.400 --> 00:11:03.900
+little bit. And so that's related.
+
+00:11:10.260 --> 00:11:10.460
+And of course you have this problem of lag so
+
+00:11:12.800 --> 00:11:13.300
+I find that it's a whisper is good for
+
+00:11:16.380 --> 00:11:16.560
+spitting out a sentence you know maybe for a
+
+00:11:20.160 --> 00:11:20.660
+doc string in a programming file.
+
+00:11:26.060 --> 00:11:26.260
+But I find that it's very prone to
+
+00:11:30.060 --> 00:11:30.300
+hallucinations. And I find myself spending
+
+00:11:32.720 --> 00:11:33.220
+half my time deleting the hallucinations,
+
+00:11:38.700 --> 00:11:38.860
+I feel like the net gain is diminished as a
+
+00:11:41.580 --> 00:11:41.720
+result. There's not much of a net gain in
+
+00:11:43.340 --> 00:11:43.820
+terms of what I'm getting out of it.
+
+00:11:45.800 --> 00:11:45.980
+Whereas I really appreciate the high level of
+
+00:11:48.780 --> 00:11:49.280
+accuracy that I'm getting from voice-in.
+
+00:11:53.400 --> 00:11:53.900
+I would use Talon Voice for dictation,
+
+00:11:56.680 --> 00:11:57.180
+but at this point, there's a significant
+
+00:12:00.440 --> 00:12:00.740
+difference between the level of accuracy of
+
+00:12:02.040 --> 00:12:02.540
+voice-in versus Talon voice.
+
+00:12:06.260 --> 00:12:06.560
+It's large enough of a difference that I'll
+
+00:12:08.860 --> 00:12:09.020
+probably use voice-in for a while until I can
+
+00:12:12.700 --> 00:12:13.140
+figure out how to get town voice to generate
+
+00:12:15.080 --> 00:12:15.580
+more accurate text.
+
+00:12:25.400 --> 00:12:25.680
+[Speaker 1]: Cool. Thank you. I think we have at least
+
+00:12:26.580 --> 00:12:26.940
+another 2 or 3 minutes.
+
+00:12:29.100 --> 00:12:29.380
+So if folks have any other questions Please
+
+00:12:31.080 --> 00:12:31.400
+feel free to post them on the pad and I'll
+
+00:12:32.560 --> 00:12:33.060
+check IRC now as well.
+
+00:12:44.340 --> 00:12:44.840
+Right, so I see 1 question on IRC asking,
+
+00:12:47.080 --> 00:12:47.360
+Are any of these voice command slash
+
+00:12:49.600 --> 00:12:50.100
+dictating dictation tools free Libre
+
+00:12:52.260 --> 00:12:52.760
+software? They cannot find that information
+
+00:12:54.840 --> 00:12:55.080
+Which I think is part of it.
+
+00:12:55.320 --> 00:12:55.820
+You just mentioned
+
+00:12:57.280 --> 00:12:57.780
+[Speaker 0]: the voice in software.
+
+00:13:03.260 --> 00:13:03.760
+There's It's a freemium so The answer is no
+
+00:13:05.640 --> 00:13:06.140
+To be able to add the commands,
+
+00:13:09.000 --> 00:13:09.160
+the custom commands, you have to pay $48 a
+
+00:13:12.040 --> 00:13:12.540
+year. The Talon Voice software is free.
+
+00:13:20.080 --> 00:13:20.320
+And the only limitation there is access to
+
+00:13:23.560 --> 00:13:23.820
+the language model. If you want to get the
+
+00:13:26.720 --> 00:13:26.880
+beta version, you need to subscribe to
+
+00:13:30.820 --> 00:13:31.320
+Patreon to help support the developer.
+
+00:13:36.180 --> 00:13:36.460
+And I found, I did do that and I really
+
+00:13:37.400 --> 00:13:37.900
+didn't find much of an improvement.
+
+00:13:43.620 --> 00:13:43.780
+So I really don't intend to do that in the
+
+00:13:47.100 --> 00:13:47.600
+future. But otherwise,
+
+00:13:50.680 --> 00:13:51.180
+Town Voice, everything is open and free,
+
+00:13:54.380 --> 00:13:54.880
+and the Slack community is incredibly
+
+00:13:58.340 --> 00:13:58.820
+welcoming. The parallels with the Emacs
+
+00:14:00.060 --> 00:14:00.560
+community are pretty striking.
+
+00:14:09.520 --> 00:14:09.720
+[Speaker 1]: Excellent, thank you. Okay,
+
+00:14:11.800 --> 00:14:11.980
+I think we have about another minute on the
+
+00:14:13.780 --> 00:14:13.980
+live stream, but I believe the big blue
+
+00:14:16.560 --> 00:14:16.920
+button room here is open and will be open,
+
+00:14:19.860 --> 00:14:20.340
+So if folks want to join,
+
+00:14:21.840 --> 00:14:22.120
+if Blaine maybe has a couple of extra
+
+00:14:24.680 --> 00:14:24.840
+minutes. Awesome. Yeah,
+
+00:14:26.580 --> 00:14:26.760
+then you're welcome to join and chat with
+
+00:14:28.980 --> 00:14:29.480
+Blaine and ask any further questions or just
+
+00:14:30.060 --> 00:14:30.560
+do general chatting. Chatting.
+
+00:14:44.020 --> 00:14:44.380
+[Speaker 0]: So I see a question. How good is Talon
+
+00:14:53.040 --> 00:14:53.520
+compared to Whisper? So with Talon,
+
+00:14:55.380 --> 00:14:55.880
+I find that the first part of the sentence
+
+00:15:00.620 --> 00:15:00.820
+will be fairly accurate and then when I'm
+
+00:15:03.480 --> 00:15:03.980
+doing dictation And then towards the end,
+
+00:15:05.640 --> 00:15:06.140
+the errors start to accumulate.
+
+00:15:09.520 --> 00:15:09.720
+So in general, I think it's error rate is
+
+00:15:12.880 --> 00:15:13.100
+about 5 words out of a hundred or so will be
+
+00:15:17.560 --> 00:15:18.040
+wrong. And whisper, Whisper is wonderful
+
+00:15:21.000 --> 00:15:21.500
+because it will insert punctuation for you.
+
+00:15:26.120 --> 00:15:26.320
+But I guess its errors are longer and that
+
+00:15:28.740 --> 00:15:29.240
+it'll hallucinate full sentences for you.
+
+00:15:35.460 --> 00:15:35.960
+So they both have significant error rates.
+
+00:15:37.280 --> 00:15:37.780
+They're just different kinds of errors.
+
+00:15:42.340 --> 00:15:42.840
+[Speaker 1]: Interesting.
+
+00:15:49.000 --> 00:15:49.500
+[Speaker 0]: Hopefully both will improve over time.
+
+00:15:50.740 --> 00:15:51.240
+Right.
+
+00:16:04.620 --> 00:16:05.120
+Let's see. There's a question.
+
+00:16:09.060 --> 00:16:09.560
+Are the green block the author for this talk?
+
+00:16:13.380 --> 00:16:13.880
+Not sure what that question means.
+
+00:16:19.180 --> 00:16:19.300
+[Speaker 1]: Well, there is a green block of text that's I
+
+00:16:22.540 --> 00:16:23.040
+think being generated from voice to text,
+
+00:16:25.560 --> 00:16:25.680
+speech to text. At the top of the pad,
+
+00:16:26.500 --> 00:16:27.000
+I think that's the question.
+
+00:16:40.060 --> 00:16:40.280
+[Speaker 0]: So I have this Voicens software operating on
+
+00:16:43.080 --> 00:16:43.580
+this GitHub, on this 750words.com
+
+00:16:51.960 --> 00:16:52.120
+site where I do my generative writing at the
+
+00:16:57.340 --> 00:16:57.720
+start of the day. And it just provides a text
+
+00:16:59.600 --> 00:17:00.100
+area that's free of distractions.
+
+00:17:03.220 --> 00:17:03.480
+And you can see the text that's being
+
+00:17:08.440 --> 00:17:08.540
+recorded as I talk. I haven't been saying the
+
+00:17:12.440 --> 00:17:12.700
+command new sentence, so there isn't any
+
+00:17:15.980 --> 00:17:16.480
+punctuation over our discourse.
+
+00:17:24.380 --> 00:17:24.880
+1 thing that I do at the start of the day is
+
+00:17:27.440 --> 00:17:27.940
+I like to write in LaTeX.
+
+00:17:33.600 --> 00:17:34.100
+Ultimately, that's how I store my writing.
+
+00:17:37.500 --> 00:17:38.000
+So new sentence, new sentence.
+
+00:17:51.680 --> 00:17:52.180
+See, insert start day.
+
+00:17:58.960 --> 00:17:59.460
+So This is an example of a chunk of LaTeX
+
+00:18:02.620 --> 00:18:03.120
+code. So I have some reflections on,
+
+00:18:04.640 --> 00:18:04.920
+you know, what did I wake up this morning?
+
+00:18:08.000 --> 00:18:08.160
+And how do I feel? I have reflections on the
+
+00:18:10.680 --> 00:18:10.840
+prior day in terms of what did I get done
+
+00:18:12.240 --> 00:18:12.440
+yesterday? Do I remember what I did
+
+00:18:14.140 --> 00:18:14.640
+yesterday? What happened last night?
+
+00:18:16.940 --> 00:18:17.440
+Focus of today. What's to be done today?
+
+00:18:23.180 --> 00:18:23.680
+And so on. So I actually,
+
+00:18:24.840 --> 00:18:25.340
+I think I have more down here.
+
+00:18:31.420 --> 00:18:31.680
+Then I've set up these lists so that I can
+
+00:18:33.760 --> 00:18:34.260
+expand them easily. If I say item,
+
+00:18:40.720 --> 00:18:40.900
+then the cursor shows up at the start of an
+
+00:18:45.600 --> 00:18:46.100
+item. And I have it coded so that that new
+
+00:18:48.700 --> 00:18:49.200
+phrase that I speak will start with a capital
+
+00:18:52.480 --> 00:18:52.980
+letter. As you can see,
+
+00:18:54.520 --> 00:18:55.020
+so capitalize the word and.
+
+00:19:02.860 --> 00:19:03.360
+So in spite of its rather limited command
+
+00:19:06.000 --> 00:19:06.380
+syntax, There's some, it's enough to get
+
+00:19:08.000 --> 00:19:08.400
+started and maybe in the future,
+
+00:19:09.360 --> 00:19:09.860
+they'll add more features.
+
+00:19:14.540 --> 00:19:15.040
+[Speaker 1]: Cool, that's neat.
+
+00:19:21.440 --> 00:19:21.940
+[Speaker 0]: So I think this is very helpful for,
+
+00:19:28.840 --> 00:19:29.040
+you know, doing things like expanding the
+
+00:19:32.780 --> 00:19:32.980
+names of people. So you can do set up
+
+00:19:36.100 --> 00:19:36.600
+commands like expand the name of a colleague
+
+00:19:40.520 --> 00:19:40.800
+to go from their first name to their full
+
+00:19:42.900 --> 00:19:43.260
+name with a proper spelling of their last
+
+00:19:45.240 --> 00:19:45.360
+name, which, you know,
+
+00:19:47.420 --> 00:19:47.640
+you can wind up spending a lot of time trying
+
+00:19:53.400 --> 00:19:53.640
+to look that up. And so this voice in with
+
+00:19:57.560 --> 00:19:57.880
+the custom commands enables you to store hard
+
+00:19:59.540 --> 00:20:00.040
+to remember information like that.
+
+00:20:08.040 --> 00:20:08.540
+[Speaker 1]: Great. I see another question.
+
+00:20:11.140 --> 00:20:11.580
+How good is Talon compared to Whisper?
+
+00:20:13.140 --> 00:20:13.480
+I think you might have answered that already,
+
+00:20:14.380 --> 00:20:14.880
+at least partially, but...
+
+00:20:19.860 --> 00:20:20.080
+[Speaker 0]: Right, yeah. I talked about how it seems that
+
+00:20:22.580 --> 00:20:23.080
+Whisperer will carry out hallucinations,
+
+00:20:26.280 --> 00:20:26.780
+so it will generate long tracks of error,
+
+00:20:30.340 --> 00:20:30.580
+whereas Talon will tend to generate more
+
+00:20:31.960 --> 00:20:32.460
+errors towards the ends of sentences,
+
+00:20:36.820 --> 00:20:36.960
+in my experience. And the errors are
+
+00:20:37.960 --> 00:20:38.460
+generally shorter in extent.
+
+00:20:42.180 --> 00:20:42.680
+It doesn't hallucinate for long tracks.
+
+00:20:50.660 --> 00:20:51.040
+[Speaker 1]: Great. Okay, I think that's all the questions
+
+00:20:51.760 --> 00:20:52.260
+that we have on the pad.
+
+00:20:54.720 --> 00:20:55.020
+If folks want to join here on Big Blue Button
+
+00:20:56.680 --> 00:20:57.180
+for a few minutes and chat with Blaine,
+
+00:21:00.260 --> 00:21:00.480
+that also works. Let's see,
+
+00:21:02.080 --> 00:21:02.240
+I'm probably going to have to drop in a few
+
+00:21:03.900 --> 00:21:04.400
+minutes to catch the next speaker.
+
+00:21:07.860 --> 00:21:08.100
+But many thanks, Blaine,
+
+00:21:09.520 --> 00:21:09.900
+for a great talk and for the interesting
+
+00:21:11.180 --> 00:21:11.680
+demos and the question and answer.
+
+00:21:14.700 --> 00:21:15.200
+[Speaker 0]: Thank you very much for hosting this.
+
+00:21:16.640 --> 00:21:17.140
+[Speaker 1]: I appreciate it. glad to have you.
+
+00:21:25.680 --> 00:21:25.960
+[Speaker 0]: Cheers, Yeah, this is really amazing to hold
+
+00:21:28.740 --> 00:21:29.020
+this conference with people from all around
+
+00:21:34.660 --> 00:21:34.940
+the world connected together through web
+
+00:21:34.940 --> 00:21:35.440
+browsers.
+
+00:21:41.020 --> 00:21:41.260
+[Speaker 1]: Yeah, it's very neat what technology can do
+
+00:21:42.400 --> 00:21:42.900
+if and when it's working correctly.
+
+00:21:47.680 --> 00:21:47.860
+[Speaker 0]: I know it can be a little frustrating at
+
+00:21:48.760 --> 00:21:49.120
+times, but when it's working,
+
+00:21:54.740 --> 00:21:55.240
+it's wonderful. Yep.
+
+NOTE Start of section to review
+
+00:21:59.540 --> 00:21:59.700
+[Speaker 2]: Good purpose of computers is all the
+
+00:22:01.100 --> 00:22:01.600
+computers run the same code,
+
+00:22:03.460 --> 00:22:03.860
+so that people, you know,
+
+00:22:05.740 --> 00:22:06.240
+a lot of people work on the same thing and
+
+00:22:08.360 --> 00:22:08.860
+build upon each other's works.
+
+00:22:16.460 --> 00:22:16.960
+For journaling I found 1 good compromise
+
+00:22:18.204 --> 00:22:18.428
+between editing and stream-of-thought
+
+00:22:19.548 --> 00:22:19.772
+journaling. 1 good compromise between editing
+
+00:22:20.680 --> 00:22:21.180
+and stream of thought journaling.
+
+00:22:23.940 --> 00:22:24.120
+1 good compromise between editing and being
+
+00:22:26.980 --> 00:22:27.480
+able to do it again and just kind of helps me
+
+00:22:31.160 --> 00:22:31.320
+do my thoughts even when I do it is when you
+
+00:22:33.180 --> 00:22:33.340
+do org mode and you have the bullets it kind
+
+00:22:35.280 --> 00:22:35.680
+of allows you to naturally chart your
+
+00:22:38.800 --> 00:22:39.300
+thoughts in a way that's really easy to edit
+
+00:22:41.880 --> 00:22:42.380
+reorder I saw you kind of did that with your
+
+00:22:47.160 --> 00:22:47.280
+mac la tech macro where you said item and it
+
+00:22:48.680 --> 00:22:49.180
+would put you down to the next item.
+
+00:22:56.500 --> 00:22:57.000
+Does... How much do you do stuff like that?
+
+00:23:00.720 --> 00:23:01.000
+How much do you do stuff like that where you
+
+00:23:04.700 --> 00:23:05.200
+use like org mode headings and then you
+
+00:23:07.000 --> 00:23:07.200
+reorder them because like I did that with
+
+00:23:10.080 --> 00:23:10.460
+also the K outline from HyperBolt package for
+
+00:23:15.140 --> 00:23:15.420
+the for Emacs org mode later on after the
+
+00:23:21.880 --> 00:23:22.060
+[Speaker 0]: stream. Yes. So I could actually set this up
+
+00:23:26.800 --> 00:23:27.300
+so I have a lot of snippets for Org Mode.
+
+00:23:30.720 --> 00:23:31.160
+I could have Org Mode version of my insert
+
+00:23:34.600 --> 00:23:34.780
+start day snippet and carry things out in org
+
+00:23:39.920 --> 00:23:40.420
+mode. So I use org mode from time to time.
+
+00:23:43.480 --> 00:23:43.980
+I often use it for the purpose of writing
+
+00:23:47.780 --> 00:23:48.060
+readme files for projects to outline the
+
+00:23:48.700 --> 00:23:49.200
+purpose of the project,
+
+00:23:54.900 --> 00:23:55.320
+and say for a director that contains a coding
+
+00:24:01.620 --> 00:24:02.120
+project. And I think this would,
+
+00:24:07.300 --> 00:24:07.700
+so the main limitation of VoiceIn is it only
+
+00:24:10.600 --> 00:24:10.760
+works in a web page and you have to have an
+
+00:24:14.180 --> 00:24:14.640
+Internet connection, whereas Talon voice is
+
+00:24:17.220 --> 00:24:17.720
+perfect for something like org mode in that
+
+00:24:20.200 --> 00:24:20.460
+you don't need an internet connection and it
+
+00:24:22.940 --> 00:24:23.100
+will operate anywhere that you can place a
+
+00:24:24.840 --> 00:24:24.960
+cursor. I haven't found a place where it
+
+00:24:26.760 --> 00:24:27.260
+doesn't work. It's amazing.
+
+00:24:28.860 --> 00:24:29.360
+So as you saw my talk,
+
+00:24:35.400 --> 00:24:35.560
+perhaps You can run it in a terminal or a
+
+00:24:38.320 --> 00:24:38.760
+remote computer. You can run it in a virtual
+
+00:24:44.120 --> 00:24:44.380
+[Speaker 2]: Oh yeah, it's definitely.
+
+00:24:45.760 --> 00:24:46.260
+[Speaker 0]: machine. If you can put your cursor there,
+
+00:24:50.820 --> 00:24:51.320
+it will work. And so as you might imagine,
+
+00:24:52.720 --> 00:24:53.220
+if you use bash aliases,
+
+00:24:55.920 --> 00:24:56.200
+I've worked for, 1 of the first things I did
+
+00:25:00.720 --> 00:25:00.920
+was map Talend commands to bash aliases so
+
+00:25:02.800 --> 00:25:03.300
+that I can do all kinds of crazy things
+
+00:25:04.200 --> 00:25:04.700
+inside of the terminal.
+
+00:25:12.040 --> 00:25:12.260
+And there are, you know,
+
+00:25:15.260 --> 00:25:15.660
+there's some support already for using Talon
+
+00:25:20.280 --> 00:25:20.780
+in Emacs. There's some Emacs functionality
+
+00:25:21.960 --> 00:25:22.460
+that's built into Talon.
+
+00:25:25.160 --> 00:25:25.660
+So when you are in Emacs,
+
+00:25:27.100 --> 00:25:27.600
+there's some features that are automatically
+
+00:25:30.520 --> 00:25:31.020
+available. And then others have developed or
+
+00:25:32.320 --> 00:25:32.820
+are developing packages,
+
+00:25:34.920 --> 00:25:35.080
+which I don't think are available yet in
+
+00:25:40.240 --> 00:25:40.680
+ELPA. There's 1 that does the font locking or
+
+00:25:42.780 --> 00:25:43.280
+syntax highlighting of Talon files,
+
+00:25:46.240 --> 00:25:46.720
+and another that adds some additional
+
+00:25:50.380 --> 00:25:50.880
+functionality that I'm regrettably not yet
+
+00:25:51.440 --> 00:25:51.940
+familiar with.
+
+00:25:55.680 --> 00:25:55.940
+[Speaker 2]: Well, as an example with like how the
+
+00:25:56.760 --> 00:25:57.100
+sharding of the thoughts,
+
+00:25:59.800 --> 00:26:00.140
+like let's say, oh, how has my day went?
+
+00:26:01.980 --> 00:26:03.080
+It's went good for reasons 123,
+
+00:26:04.860 --> 00:26:05.740
+and bad for reasons ABC.
+
+00:26:07.828 --> 00:26:07.872
+And then later on, I might think,
+
+00:26:08.460 --> 00:26:08.860
+oh, there's an, I also,
+
+00:26:10.520 --> 00:26:11.780
+my day went good for reasons 456,
+
+00:26:14.540 --> 00:26:14.880
+then you, I can, then you jump up.
+
+00:26:18.520 --> 00:26:18.820
+And so the, like I found like,
+
+00:26:19.760 --> 00:26:20.260
+yeah, the org mode subheadings,
+
+00:26:21.980 --> 00:26:22.480
+because you're able to jump around,
+
+00:26:25.040 --> 00:26:25.540
+easily reorder them after the fact,
+
+00:26:32.520 --> 00:26:32.860
+the very streamlined approach to the stream
+
+00:26:33.620 --> 00:26:34.120
+of thought and the editing.
+
+00:26:38.800 --> 00:26:39.300
+[Speaker 0]: That's right, extremely powerful.
+
+00:26:41.200 --> 00:26:41.500
+[Speaker 2]: And even with the stream of thought,
+
+00:26:44.060 --> 00:26:44.480
+just because like, even when you're editing
+
+00:26:45.200 --> 00:26:45.380
+that in real time, like,
+
+00:26:47.320 --> 00:26:47.800
+oh, wait a minute, I thought of another
+
+00:26:48.960 --> 00:26:49.200
+reason that my day went good,
+
+00:26:50.640 --> 00:26:50.820
+even though I was talking about how it was
+
+00:26:52.760 --> 00:26:53.260
+going bad now. So you jump up.
+
+00:26:55.680 --> 00:26:56.180
+And then you do that. And then you have it.
+
+00:26:59.540 --> 00:27:00.040
+You easily summarize your thoughts and
+
+00:27:00.060 --> 00:27:00.560
+whatnot.
+
+00:27:07.200 --> 00:27:07.600
+[Speaker 0]: That's right. And I think org mode is really
+
+00:27:11.680 --> 00:27:12.180
+ideal for that kind of interact.
+
+00:27:15.240 --> 00:27:15.480
+So yeah, I see your point in terms of that
+
+00:27:18.760 --> 00:27:19.260
+sort of a blend of generative writing and
+
+00:27:23.440 --> 00:27:23.940
+editing. And it's also kind of parallel to
+
+00:27:27.240 --> 00:27:27.660
+mind mapping. I use this mind mapping
+
+00:27:32.660 --> 00:27:33.160
+software called iThoughtsX where I'll
+
+00:27:36.760 --> 00:27:37.260
+generate all these children items,
+
+00:27:40.040 --> 00:27:40.540
+and then I'll drag them around and resort
+
+00:27:46.680 --> 00:27:47.180
+them. And they can have children of their own
+
+00:27:48.940 --> 00:27:49.400
+and grandchildren and so on,
+
+00:27:50.800 --> 00:27:51.300
+in terms of the levels of the nodes.
+
+00:27:54.920 --> 00:27:55.240
+And it's pretty much the same sort of thing
+
+00:27:57.560 --> 00:27:57.960
+with a nested hierarchy that you can have
+
+00:28:02.660 --> 00:28:03.040
+with org mode. I think having several
+
+00:28:09.900 --> 00:28:10.120
+alternate modes or modalities of playing with
+
+00:28:13.100 --> 00:28:13.300
+thoughts is useful. So sometimes I'll hit a
+
+00:28:17.180 --> 00:28:17.680
+wall and we're just not really generating
+
+00:28:21.260 --> 00:28:21.760
+anything in a text mode.
+
+00:28:25.000 --> 00:28:25.500
+But if I switch to using the mind mapping,
+
+00:28:30.040 --> 00:28:30.420
+just seeing it arranged with the connecting
+
+00:28:34.920 --> 00:28:35.280
+lines plays on a different part of the brain,
+
+00:28:37.640 --> 00:28:38.140
+I think, and it can be incredibly
+
+00:28:40.600 --> 00:28:40.800
+stimulatory. It can stimulate a lot of new
+
+00:28:43.480 --> 00:28:43.780
+[Speaker 2]: That's something that I haven't messed around
+
+00:28:45.400 --> 00:28:45.900
+too much with is the mind mapping software,
+
+00:28:45.980 --> 00:28:46.480
+but...
+
+00:28:51.600 --> 00:28:51.760
+[Speaker 0]: thoughts. Because the closest thing that we
+
+00:28:56.400 --> 00:28:56.600
+have to it in Emacs is Orgrimm in the in
+
+00:29:00.860 --> 00:29:01.360
+terms of like the 3D visualization of with
+
+00:29:03.720 --> 00:29:04.220
+Orgrimm GUI or
+
+00:29:10.120 --> 00:29:10.620
+[Speaker 2]: UI. As well as being able to generate SVG
+
+00:29:12.800 --> 00:29:13.100
+diagrams and stuff like that,
+
+00:29:16.980 --> 00:29:17.260
+I think those 2 things would allow you stuff
+
+00:29:20.240 --> 00:29:20.740
+like Orgrimm or denote And then the diagrams
+
+00:29:23.160 --> 00:29:23.300
+would be the good ways of doing that in
+
+00:29:25.200 --> 00:29:25.600
+Emacs, but they don't have the mind map
+
+00:29:27.160 --> 00:29:27.660
+programs as well.
+
+00:29:30.140 --> 00:29:30.640
+[Speaker 0]: They're not as well developed.
+
+00:29:32.740 --> 00:29:33.240
+There are a couple mind mapping packages,
+
+00:29:37.200 --> 00:29:37.700
+but they're not as advanced.
+
+00:29:41.920 --> 00:29:42.180
+[Speaker 2]: The best ones were JavaScript web page that
+
+00:29:43.840 --> 00:29:44.340
+it that Emacs interacted with.
+
+00:29:46.180 --> 00:29:46.680
+Very well. And so they kind of,
+
+00:29:49.120 --> 00:29:49.620
+you know, worked around and had a little.
+
+00:29:51.620 --> 00:29:51.820
+Integration with the 2.
+
+00:29:53.420 --> 00:29:53.920
+So when you be jumping around your.
+
+00:29:56.200 --> 00:29:56.380
+When you'd be clicking on the web page it
+
+00:29:59.300 --> 00:29:59.480
+would be pointing you to different places and
+
+00:30:07.060 --> 00:30:07.400
+buffers okay like those are those the There's
+
+00:30:11.480 --> 00:30:11.680
+an like org-roam node program where it kind
+
+00:30:13.360 --> 00:30:13.860
+of shows the looks like a mind map.
+
+00:30:17.820 --> 00:30:18.040
+You can click and drag them a little bit,
+
+00:30:18.680 --> 00:30:19.180
+so it's a little interactive.
+
+00:30:27.980 --> 00:30:28.480
+[Speaker 0]: Yeah, I'm not familiar with that.
+
+00:30:30.160 --> 00:30:30.660
+I'll have to look into that.
+
+00:30:32.240 --> 00:30:32.740
+That sounds very interesting.
+
+00:30:36.820 --> 00:30:37.200
+[Speaker 2]: I found that I didn't know better,
+
+00:30:38.560 --> 00:30:39.060
+though, than Org-ROM, so it doesn't.
+
+00:30:43.320 --> 00:30:43.820
+[Speaker 0]: Why is that?
+
+00:30:47.080 --> 00:30:47.580
+[Speaker 2]: Well, 1 of the things I'm,
+
+00:30:51.600 --> 00:30:51.760
+I want to be able to, I don't like the
+
+00:30:53.200 --> 00:30:53.700
+feeling of being trapped inside org-mode
+
+00:30:56.040 --> 00:30:56.540
+documents. Like I want to be able to write,
+
+00:30:58.940 --> 00:30:59.060
+even though I don't really use Markdown and I
+
+00:31:00.800 --> 00:31:01.020
+like org-mode better than that.
+
+00:31:02.720 --> 00:31:03.220
+Like for instance, I also use the Koutline
+
+00:31:04.280 --> 00:31:04.780
+from the Hyperbole package.
+
+00:31:08.160 --> 00:31:08.360
+That's what my I got a talk on the stream of
+
+00:31:12.620 --> 00:31:12.700
+thought journaling for with Koutline and I
+
+00:31:14.060 --> 00:31:14.160
+was like, I just don't like the feeling of
+
+00:31:18.480 --> 00:31:18.700
+being tracked in 1 document and denote has
+
+00:31:21.300 --> 00:31:21.800
+the ability to it renames the file so you get
+
+00:31:26.020 --> 00:31:26.520
+keywords in like a PDF file so you can take
+
+00:31:28.100 --> 00:31:28.380
+so you can link to that with your notes
+
+00:31:30.540 --> 00:31:30.700
+without it all disappearing because it's not
+
+00:31:36.340 --> 00:31:36.440
+an org mode document. Plus the ability of
+
+00:31:38.520 --> 00:31:38.940
+having it run on multiple computers or with
+
+00:31:42.660 --> 00:31:43.160
+multiple people, the database kind of gets
+
+00:31:46.480 --> 00:31:46.720
+screwed up when you try running it under sync
+
+00:31:50.500 --> 00:31:51.000
+thing. Sync. More fragile.
+
+00:31:56.000 --> 00:31:56.500
+[Speaker 0]: Very interesting. Yeah.
+
+00:32:03.260 --> 00:32:03.680
+How far are you? So are you a regular
+
+00:32:06.480 --> 00:32:06.980
+practitioner of the Zettelkasten approach?
+
+00:32:12.180 --> 00:32:12.680
+[Speaker 2]: Trying to be. Incrementally improving it.
+
+00:32:16.780 --> 00:32:16.980
+I partly work too much like testing out the
+
+00:32:20.760 --> 00:32:21.000
+org-roam versus the notes to use it too much.
+
+00:32:23.300 --> 00:32:23.500
+So part of it is I just tweak with it too
+
+00:32:24.800 --> 00:32:25.300
+much before using it and then.
+
+00:32:28.740 --> 00:32:29.240
+[Speaker 0]: Oh, it's so fun to tweak it.
+
+00:32:32.580 --> 00:32:32.840
+[Speaker 2]: I think mostly it's as I have these tools,
+
+00:32:33.640 --> 00:32:34.140
+I know where they are.
+
+00:32:35.760 --> 00:32:35.980
+So whenever I do need them,
+
+00:32:37.680 --> 00:32:38.180
+I can use them, even though I don't always
+
+00:32:38.440 --> 00:32:38.940
+use them.
+
+00:32:43.680 --> 00:32:43.940
+[Speaker 0]: So I have about a thousand notes in my org
+
+00:32:47.720 --> 00:32:48.040
+room. Zettelkasten. I've actually,
+
+00:32:50.140 --> 00:32:50.320
+it's kind of cool that you can export it and
+
+00:32:51.460 --> 00:32:51.960
+move it into other programs.
+
+00:32:56.320 --> 00:32:56.520
+I have moved it to Obsidian and played with
+
+00:32:57.720 --> 00:32:58.180
+it in Obsidian for a while,
+
+00:32:59.820 --> 00:33:00.320
+maybe added to it in Obsidian,
+
+00:33:01.480 --> 00:33:01.980
+moved it back to Orgrim.
+
+00:33:07.080 --> 00:33:07.580
+But I'm not convinced.
+
+00:33:10.680 --> 00:33:11.180
+I mean, that I think that Nicholas Luhmann
+
+00:33:13.360 --> 00:33:13.700
+was very successful with it because he spent
+
+00:33:15.920 --> 00:33:16.420
+5 hours a day or whatever working with it.
+
+00:33:18.560 --> 00:33:19.060
+And I think I would have to do,
+
+00:33:21.180 --> 00:33:21.600
+put in a similar amount of effort to get this
+
+00:33:23.600 --> 00:33:24.100
+kind of benefits that he gained from it.
+
+00:33:26.480 --> 00:33:26.980
+I'm waiting for somebody to do a scientific
+
+00:33:29.200 --> 00:33:29.700
+study, controlled trials to see,
+
+00:33:31.720 --> 00:33:32.220
+to prove whether there's a real benefit.
+
+00:33:37.900 --> 00:33:38.400
+[Speaker 2]: Oh, yeah. So with the Zettelkasten,
+
+00:33:41.120 --> 00:33:41.320
+one of the things where you have the 1 for the
+
+00:33:42.180 --> 00:33:42.680
+sections, and then the 1.1,
+
+00:33:47.160 --> 00:33:47.480
+or you know how the notes that it does that's
+
+00:33:48.740 --> 00:33:49.240
+different. The denote,
+
+00:33:52.880 --> 00:33:53.380
+it has the ability to use a hierarchy manage,
+
+00:33:55.480 --> 00:33:55.640
+which Org-ROM does everything it can to
+
+00:33:57.380 --> 00:33:57.560
+eliminate. But you can use them both in
+
+00:33:59.140 --> 00:33:59.640
+tandem. They call it signatures.
+
+00:34:04.820 --> 00:34:05.160
+And to me, 1 of the cool features of denote
+
+00:34:06.820 --> 00:34:07.120
+would be being able to use like the
+
+00:34:09.780 --> 00:34:10.280
+signatures for the things that make sense.
+
+00:34:13.440 --> 00:34:13.860
+Like 1 of the ideas is if you don't exactly
+
+00:34:14.960 --> 00:34:15.100
+know where this is, but you know,
+
+00:34:15.920 --> 00:34:16.239
+it goes to the section,
+
+00:34:17.060 --> 00:34:17.560
+you can just use the signature.
+
+00:34:19.760 --> 00:34:20.080
+Maybe don't even have too much of a file
+
+00:34:22.679 --> 00:34:23.179
+name. Like oh, this is just another thought
+
+00:34:28.199 --> 00:34:28.420
+on, well you wouldn't use it for this,
+
+00:34:30.360 --> 00:34:30.719
+but like my day went good for reasons 1,
+
+00:34:33.040 --> 00:34:33.380
+2, 3, 4, 5, and you could just use the denote
+
+00:34:34.639 --> 00:34:34.920
+signature to do 1, 2, 3,
+
+00:34:37.659 --> 00:34:37.800
+4, 5, just as you have new ideas on like a
+
+00:34:41.840 --> 00:34:42.040
+subject, or like cars are cars are not this
+
+00:34:43.659 --> 00:34:44.580
+car is nice because of reasons XYZ,
+
+00:34:46.920 --> 00:34:47.219
+or these types of four-wheelers are nice
+
+00:34:48.940 --> 00:34:49.080
+because of XYZ. And you could just keep on
+
+00:34:50.760 --> 00:34:50.980
+doing that rather than having to get a new
+
+00:34:52.120 --> 00:34:52.620
+name for each 1 of those files.
+
+00:34:55.280 --> 00:34:55.520
+Or you could choose not to have it,
+
+00:34:57.780 --> 00:34:58.280
+but the ability to have it optionally in,
+
+00:35:01.020 --> 00:35:01.520
+to me, sounds like a really nice combo.
+
+00:35:03.000 --> 00:35:03.200
+Because then you
+
+00:35:06.140 --> 00:35:06.420
+[Speaker 0]: could read. I agree. Yeah,
+
+00:35:08.800 --> 00:35:09.020
+I've actually imposed a hierarchy in my
+
+00:35:10.320 --> 00:35:10.820
+Zettelkasten and Orgrim.
+
+00:35:17.680 --> 00:35:18.180
+I just, I can't imagine having random ideas.
+
+00:35:21.200 --> 00:35:21.700
+They need some kind of structure.
+
+00:35:27.500 --> 00:35:27.840
+Always have some kind of parent node to
+
+00:35:28.420 --> 00:35:28.920
+attach them to.
+
+00:35:32.740 --> 00:35:32.960
+[Speaker 2]: With the workflow I'm trying to develop with
+
+00:35:34.440 --> 00:35:34.840
+it, part of it is I'm just trying to optimize
+
+00:35:36.820 --> 00:35:37.080
+the workflow before it feels really,
+
+00:35:38.480 --> 00:35:38.560
+really, really good, and I don't want to
+
+00:35:39.720 --> 00:35:40.220
+tweak with it, or I don't know.
+
+00:35:42.480 --> 00:35:42.980
+Or maybe I don't always need the tool,
+
+00:35:45.780 --> 00:35:46.020
+but some of the distinctions it seems like
+
+00:35:52.400 --> 00:35:52.580
+that I want is, I want a daily journal For
+
+00:35:53.100 --> 00:35:53.600
+your stream of thoughts,
+
+00:35:56.000 --> 00:35:56.480
+then I want a separate 1 for your to do list
+
+00:35:57.980 --> 00:35:58.480
+because what you like.
+
+00:36:01.240 --> 00:36:01.440
+You want very different properties for each
+
+00:36:03.040 --> 00:36:03.540
+of those. Like for to-do lists,
+
+00:36:04.820 --> 00:36:05.320
+you want hierarchical,
+
+00:36:11.260 --> 00:36:11.760
+limited. But if you have more than 3 priority
+
+00:36:13.660 --> 00:36:13.820
+items, you don't have a priority item and
+
+00:36:14.820 --> 00:36:15.040
+it's not a good to-do list.
+
+00:36:18.480 --> 00:36:18.980
+It's just unordered thoughts.
+
+00:36:23.480 --> 00:36:23.680
+[Speaker 0]: it's a wishful list, because you won't get
+
+00:36:26.000 --> 00:36:26.500
+most of those things done beyond the first 3.
+
+00:36:28.180 --> 00:36:28.380
+[Speaker 2]: You're trying to- So And then when you're
+
+00:36:30.600 --> 00:36:31.100
+trying to do the other stuff,
+
+00:36:31.980 --> 00:36:32.480
+the stream of thoughts,
+
+00:36:34.640 --> 00:36:35.080
+all that stuff I probably don't want to go
+
+00:36:36.720 --> 00:36:36.900
+straight into like my Zettelkasten because
+
+00:36:37.440 --> 00:36:37.940
+some of those problems,
+
+00:36:42.660 --> 00:36:43.160
+like it's noisy, it might be redundant,
+
+00:36:45.300 --> 00:36:45.520
+you don't know how it fits into it because
+
+00:36:46.920 --> 00:36:47.080
+you haven't done that processing on it.
+
+00:36:47.960 --> 00:36:48.460
+This hasn't been refined.
+
+00:36:53.000 --> 00:36:53.140
+So, like, you don't want to refine it.
+
+00:36:54.960 --> 00:36:55.320
+Like, I find that spell checking is
+
+00:36:56.680 --> 00:36:56.920
+detrimental to me. I don't want spell
+
+00:36:58.520 --> 00:36:58.840
+checking. I don't want spell checking.
+
+00:37:00.200 --> 00:37:00.600
+I don't want syntax highlighting.
+
+00:37:04.040 --> 00:37:04.540
+I just want to talk or to just write.
+
+00:37:07.020 --> 00:37:07.520
+If I have mistakes, I can turn on that later,
+
+00:37:08.800 --> 00:37:09.220
+do it. Because otherwise,
+
+00:37:13.340 --> 00:37:13.740
+it will distract me and makes that process
+
+00:37:20.140 --> 00:37:20.280
+[Speaker 0]: Yep, yep, definitely interferes with the
+
+00:37:20.280 --> 00:37:20.780
+flow.
+
+00:37:24.840 --> 00:37:25.080
+[Speaker 2]: worse. So yeah, when you're so yeah when
+
+00:37:28.080 --> 00:37:28.440
+you're doing the getting things done like
+
+00:37:30.040 --> 00:37:30.240
+that's why I want them would be want would
+
+00:37:32.360 --> 00:37:32.600
+want them in separate files is that you want
+
+00:37:34.160 --> 00:37:34.660
+them like ordered, numbered lists,
+
+00:37:38.980 --> 00:37:39.480
+smaller. And then with the other,
+
+00:37:40.440 --> 00:37:40.800
+with the stream of thought,
+
+00:37:42.340 --> 00:37:42.840
+with journaling, you'd want it just
+
+00:37:45.240 --> 00:37:45.740
+unordered. Thoughts land wherever they may.
+
+00:37:49.140 --> 00:37:49.640
+Maybe not even like machine-generated
+
+00:37:51.400 --> 00:37:51.660
+timestamps, So you don't even have to worry
+
+00:37:52.440 --> 00:37:52.940
+about the names of it,
+
+00:37:55.080 --> 00:37:55.380
+as an example. So yeah,
+
+00:37:56.960 --> 00:37:57.160
+very different properties for what you want
+
+00:37:58.260 --> 00:37:58.760
+for both of those modalities.
+
+00:38:06.340 --> 00:38:06.440
+[Speaker 0]: So you saw, perhaps, in that snippet that I
+
+00:38:07.860 --> 00:38:08.360
+had that at, you know,
+
+00:38:10.440 --> 00:38:10.580
+working on my to-do list at the start of the
+
+00:38:13.080 --> 00:38:13.580
+day, but in a certain sense that is not ideal
+
+00:38:20.320 --> 00:38:20.820
+time. I really haven't optimized the timing
+
+00:38:22.640 --> 00:38:23.040
+of assembly of the to-do list,
+
+00:38:24.020 --> 00:38:24.520
+I think, in retrospect.
+
+00:38:27.540 --> 00:38:27.880
+It's just by lifelong habit.
+
+00:38:29.060 --> 00:38:29.560
+I do that at the beginning of the day,
+
+00:38:32.860 --> 00:38:33.000
+but probably would be better to do it at
+
+00:38:34.360 --> 00:38:34.860
+night or the night before.
+
+00:38:38.000 --> 00:38:38.500
+And so you sort of prime your brain to go,
+
+00:38:41.180 --> 00:38:41.680
+just get up and go, go after those items.
+
+00:38:46.360 --> 00:38:46.680
+You were, you maybe you want to revise the
+
+00:38:49.120 --> 00:38:49.620
+items a little bit after sleeping on it,
+
+00:38:52.360 --> 00:38:52.820
+but after your subconscious has worked on
+
+00:38:57.500 --> 00:38:57.660
+those items. Do you have a daily routine that
+
+00:38:59.680 --> 00:38:59.900
+you follow in terms of generating those kind
+
+00:39:00.020 --> 00:39:00.520
+of lists?
+
+00:39:05.660 --> 00:39:06.160
+[Speaker 2]: No. As I said, mostly I just got scaffolding
+
+00:39:08.040 --> 00:39:08.300
+for this stuff when I want to do it.
+
+00:39:10.520 --> 00:39:10.760
+I enjoy building the scaffolding and I know
+
+00:39:12.340 --> 00:39:12.600
+where the tools are when I need it.
+
+00:39:14.540 --> 00:39:14.760
+And I start using them when I need it,
+
+00:39:17.040 --> 00:39:17.540
+but I don't have it too consistent.
+
+00:39:29.720 --> 00:39:30.220
+[Speaker 0]: So OK, so you've looked so far at denote and
+
+00:39:35.300 --> 00:39:35.800
+org-roam, and you're using k-outline.
+
+00:39:39.520 --> 00:39:39.840
+And are there other tools that you've
+
+00:39:39.840 --> 00:39:40.340
+explored?
+
+00:39:44.380 --> 00:39:44.880
+[Speaker 2]: I've tried using whisper.el
+
+00:39:50.720 --> 00:39:50.920
+and nerd dictation to do What your talk was
+
+00:39:53.560 --> 00:39:53.760
+about? Speaking speech to text to see how
+
+00:39:56.720 --> 00:39:56.840
+that changes Because it does change what you
+
+00:40:01.020 --> 00:40:01.120
+think What you write down when you speak it
+
+00:40:05.080 --> 00:40:05.500
+rather than write it. Same thing as when
+
+00:40:07.420 --> 00:40:07.540
+you're thinking about when you eliminate the
+
+00:40:08.940 --> 00:40:09.440
+editing, it changes the way you write.
+
+00:40:11.900 --> 00:40:12.260
+When you have the spell checking,
+
+00:40:14.100 --> 00:40:14.340
+it changes the way you write to a much
+
+00:40:20.280 --> 00:40:20.600
+smaller degree. But that's the stuff I really
+
+00:40:23.560 --> 00:40:24.060
+haven't gotten working as well,
+
+00:40:25.120 --> 00:40:25.620
+or underdeveloped.
+
+00:40:30.160 --> 00:40:30.660
+[Speaker 0]: So the dictated text winds up,
+
+00:40:37.740 --> 00:40:37.900
+I'll move it in. Often I move it into on
+
+00:40:40.920 --> 00:40:41.200
+Overleaf, this website for a lot of tech
+
+00:40:44.080 --> 00:40:44.580
+documents. I have a plug-in for Rightful,
+
+00:40:50.520 --> 00:40:51.020
+And I use that to clean up my word choices
+
+00:40:56.160 --> 00:40:56.660
+and some grammar. And I use Grammarly.
+
+00:41:00.920 --> 00:41:01.080
+I'll copy and paste. It just depends on the
+
+00:41:01.680 --> 00:41:02.080
+nature of the writing,
+
+00:41:05.720 --> 00:41:06.220
+how serious it is, how polished it has to be.
+
+00:41:12.620 --> 00:41:13.080
+If I, if it's really vital,
+
+00:41:14.440 --> 00:41:14.800
+like for a grant application or something,
+
+00:41:16.880 --> 00:41:17.380
+I'll paste that into Grammarly and work on
+
+00:41:22.160 --> 00:41:22.540
+trying to get the writing level to the lowest
+
+00:41:26.100 --> 00:41:26.280
+possible grade level to make it as clear as
+
+00:41:30.040 --> 00:41:30.220
+possible to as wide of an audience as
+
+00:41:34.740 --> 00:41:34.900
+possible. 1 of the things I kind
+
+00:41:38.000 --> 00:41:38.500
+[Speaker 2]: of wish with all the spell checking grammarly
+
+00:41:40.440 --> 00:41:40.940
+is I kind of wish you could say,
+
+00:41:48.620 --> 00:41:49.120
+hey, what would the subtle cast in person
+
+00:41:52.120 --> 00:41:52.620
+think of what I wrote who what would einstein
+
+00:41:54.200 --> 00:41:54.400
+think of what I wrote because rather than
+
+00:41:57.340 --> 00:41:57.660
+just trying to make 1 uniform way of talking
+
+00:41:59.960 --> 00:42:00.440
+it's like people talk differently and that's
+
+00:42:04.080 --> 00:42:04.240
+an advantage and I can't I really wish like
+
+00:42:07.440 --> 00:42:07.820
+you maybe these GPT programs could do well.
+
+00:42:10.840 --> 00:42:11.000
+I really wish it could help you with the
+
+00:42:16.160 --> 00:42:16.420
+grammar, that maybe give you thoughts on what
+
+00:42:18.460 --> 00:42:18.720
+your notes are. What does this person think
+
+00:42:20.220 --> 00:42:20.380
+of your thoughts? What does this person think
+
+00:42:20.457 --> 00:42:20.464
+of your thoughts? Well,
+
+00:42:20.640 --> 00:42:20.940
+does this person think of your thoughts?
+
+00:42:22.280 --> 00:42:22.540
+Well, does this person think of your
+
+00:42:22.540 --> 00:42:23.040
+thoughts?
+
+00:42:27.720 --> 00:42:28.140
+[Speaker 0]: That's true. Yeah, I could probably do that
+
+00:42:31.560 --> 00:42:32.060
+even through chat GDP now.
+
+00:42:35.140 --> 00:42:35.640
+I haven't spent time trying that out.
+
+00:42:39.820 --> 00:42:40.320
+But I bet that capabilities are already.
+
+00:42:44.340 --> 00:42:44.480
+It would be nice if it was like built in to
+
+00:42:46.240 --> 00:42:46.740
+Emacs, right? It's a package.
+
+00:42:49.020 --> 00:42:49.520
+Yeah. That'd be very cool.
+
+00:42:52.260 --> 00:42:52.660
+[Speaker 2]: Grammarly have some sort of,
+
+00:42:55.040 --> 00:42:55.320
+like, the grammar where they help you the way
+
+00:42:57.660 --> 00:42:58.040
+you write. Like, for instance,
+
+00:42:59.080 --> 00:42:59.580
+removing redundant words.
+
+00:43:02.720 --> 00:43:03.220
+And Yeah, it's supposed to be like beyond
+
+00:43:04.820 --> 00:43:05.320
+just spell checking, right?
+
+00:43:08.240 --> 00:43:08.740
+[Speaker 0]: Right. So, and there's actually a Grammarly
+
+00:43:13.300 --> 00:43:13.520
+package for Emacs, and you get some of the
+
+00:43:14.540 --> 00:43:15.040
+functionality out of it.
+
+00:43:17.420 --> 00:43:17.560
+I've paid for the subscription to get the
+
+00:43:21.240 --> 00:43:21.460
+advanced features, but I've maybe I don't
+
+00:43:23.300 --> 00:43:23.800
+have my configuration set up correctly.
+
+00:43:27.280 --> 00:43:27.780
+I just found it was easier to copy and paste
+
+00:43:31.780 --> 00:43:32.280
+a paragraph at a time into the desktop
+
+00:43:36.460 --> 00:43:36.780
+application and it will go through and find
+
+00:43:38.900 --> 00:43:39.400
+those redundancies, junk English.
+
+00:43:48.080 --> 00:43:48.580
+[Speaker 2]: It would be really interesting trying to have
+
+00:43:52.640 --> 00:43:52.760
+1 of these That was my problem with a lot of
+
+00:43:55.840 --> 00:43:56.120
+the grammarly type Programs is I'm I want
+
+00:43:57.620 --> 00:43:57.900
+something that would do that like be real
+
+00:43:59.720 --> 00:43:59.980
+interesting seeing 1 that's like an old
+
+00:44:03.840 --> 00:44:03.960
+English type thing or like Lumen person where
+
+00:44:06.540 --> 00:44:07.040
+it's just like how does this person write and
+
+00:44:09.960 --> 00:44:10.160
+Because it would be it would spit out
+
+00:44:11.160 --> 00:44:11.660
+something a lot different.
+
+00:44:13.440 --> 00:44:13.680
+Just different. Like, yeah,
+
+00:44:14.440 --> 00:44:14.940
+you put different people.
+
+00:44:17.760 --> 00:44:17.900
+[Speaker 0]: Most definitely, yes. They would have a
+
+00:44:20.280 --> 00:44:20.740
+completely different thinking and writing
+
+00:44:28.740 --> 00:44:28.940
+style. And so the purpose of doing that would
+
+00:44:34.300 --> 00:44:34.640
+be to stimulate A new way of thinking or
+
+00:44:36.340 --> 00:44:36.840
+writing I guess on your part
+
+00:44:40.600 --> 00:44:40.960
+[Speaker 2]: the purpose of writing is to communicate It
+
+00:44:43.540 --> 00:44:43.740
+and writing you know 1 of the targets for
+
+00:44:47.020 --> 00:44:47.320
+that could be yourself so it's like I'd much
+
+00:44:50.380 --> 00:44:50.880
+rather have a comprehensible sentence than a
+
+00:44:57.500 --> 00:44:57.720
+truly correct 1. 1 of those is far more
+
+00:45:00.780 --> 00:45:01.280
+valuable and far more correct English or
+
+00:45:06.560 --> 00:45:07.060
+[Speaker 0]: Yeah, one's more effective at communicating
+
+00:45:08.860 --> 00:45:09.360
+to yourself. Yes.
+
+00:45:11.320 --> 00:45:11.720
+[Speaker 2]: language. Well, one's using the tool,
+
+00:45:15.300 --> 00:45:15.520
+one's the other you're trying to be used by
+
+00:45:19.080 --> 00:45:19.580
+the tool. And they're not the same thing.
+
+00:45:29.780 --> 00:45:30.280
+[Speaker 0]: That's true. Well, I view myself as being
+
+00:45:35.140 --> 00:45:35.640
+responsible for my writing and being the
+
+00:45:40.200 --> 00:45:40.520
+final judge of it and as a scientist I have
+
+00:45:49.060 --> 00:45:49.300
+to my mantra is it's got to be clear and then
+
+00:45:52.600 --> 00:45:53.100
+precise and then concise in that order.
+
+00:45:56.580 --> 00:45:56.760
+And I claim that, you know,
+
+00:45:58.440 --> 00:45:58.780
+that's the order with which I go through
+
+00:46:01.500 --> 00:46:01.780
+doing revisions. Clarity is,
+
+00:46:02.500 --> 00:46:02.880
+you know, if it's not clear,
+
+00:46:05.420 --> 00:46:05.600
+it's useless. It's got to be clear to me,
+
+00:46:08.240 --> 00:46:08.740
+but it's got to be clear to a lot of people
+
+00:46:10.920 --> 00:46:11.420
+for whom English is not a first language.
+
+00:46:15.520 --> 00:46:15.720
+And then after that, I got to worry about
+
+00:46:19.020 --> 00:46:19.520
+precision and then conciseness,
+
+00:46:24.140 --> 00:46:24.280
+but those can't be done at the expense of
+
+00:46:27.720 --> 00:46:28.220
+clarity. So it's quite a battle.
+
+00:46:32.320 --> 00:46:32.640
+[Speaker 2]: That goes back on the to-do list,
+
+00:46:35.440 --> 00:46:35.860
+where it's like if you have more than 3 items
+
+00:46:39.480 --> 00:46:39.660
+like here the purpose of doing that is to
+
+00:46:43.080 --> 00:46:43.580
+help or grant of a to-do list is help is to
+
+00:46:45.480 --> 00:46:45.680
+Have you help choose what you're going to do
+
+00:46:47.680 --> 00:46:47.840
+for the day. Which is why if you have more
+
+00:46:50.660 --> 00:46:50.860
+than 3 items, if you have 50 items on there,
+
+00:46:52.860 --> 00:46:53.320
+you're not going to get 50 of those items
+
+00:46:55.920 --> 00:46:56.040
+done. So maybe you pick the easiest ones to
+
+00:46:58.620 --> 00:46:59.020
+do, not necessarily the ones that you want or
+
+00:47:03.340 --> 00:47:03.580
+need to be done. So it's like the process of
+
+00:47:06.200 --> 00:47:06.380
+choosing those, like, I don't know,
+
+00:47:07.640 --> 00:47:08.140
+like I found that a very good rules,
+
+00:47:10.800 --> 00:47:11.300
+like up to 3 priority items if you,
+
+00:47:13.260 --> 00:47:13.440
+and then also when you look back and you see
+
+00:47:14.440 --> 00:47:14.940
+that you did those 3 items,
+
+00:47:18.460 --> 00:47:18.680
+Who cares about this? I'd rather get those 3
+
+00:47:20.080 --> 00:47:20.580
+items done than any number of secondary
+
+00:47:20.640 --> 00:47:21.140
+tasks.
+
+00:47:26.320 --> 00:47:26.820
+[Speaker 0]: Yes, I, yeah, you're very,
+
+00:47:28.440 --> 00:47:28.940
+very right about that.
+
+00:47:32.380 --> 00:47:32.640
+I don't, I used to, you know,
+
+00:47:36.400 --> 00:47:36.900
+use a pattern of assigning letters.
+
+00:47:39.440 --> 00:47:39.720
+And so you have like, you know,
+
+00:47:41.280 --> 00:47:41.780
+based on like a hierarchy of,
+
+00:47:43.340 --> 00:47:43.840
+you've got the urgent and important,
+
+00:47:47.300 --> 00:47:47.800
+of course, that you got to deal with those.
+
+00:47:50.280 --> 00:47:50.780
+And then the next thing down is the important
+
+00:48:00.060 --> 00:48:00.300
+and so on. But I tend to just generate these
+
+00:48:03.600 --> 00:48:04.000
+terribly long lists that most of those items
+
+00:48:06.260 --> 00:48:06.760
+would go on what is known as a grass catchers
+
+00:48:09.180 --> 00:48:09.680
+list of things that you may get to someday,
+
+00:48:11.780 --> 00:48:12.280
+but there's no way you can get to them today.
+
+00:48:16.120 --> 00:48:16.620
+But I feel compelled, I need to capture them.
+
+00:48:18.260 --> 00:48:18.760
+I may want to do them eventually.
+
+00:48:20.920 --> 00:48:21.420
+They wind up on my list.
+
+00:48:24.660 --> 00:48:24.800
+[Speaker 2]: Oh yeah, my idea on that is like with a
+
+00:48:26.480 --> 00:48:26.980
+Zettelkasten where you have the day thoughts
+
+00:48:29.380 --> 00:48:29.580
+and the day journal, then you have your
+
+00:48:31.800 --> 00:48:32.160
+Zettelkasten which I don't think should have
+
+00:48:34.740 --> 00:48:34.960
+too close of a connection because one's a lot
+
+00:48:37.940 --> 00:48:38.440
+more, what's the word?
+
+00:48:40.080 --> 00:48:40.580
+[Speaker 0]: It's a knowledge base.
+
+00:48:43.940 --> 00:48:44.440
+[Speaker 2]: Optimized. Yes, one's more processed.
+
+00:48:45.280 --> 00:48:45.760
+Yeah, that's the word.
+
+00:48:47.040 --> 00:48:47.440
+Yeah, one's actually much more processed.
+
+00:48:50.220 --> 00:48:50.640
+The other is you don't want that process
+
+00:48:52.840 --> 00:48:53.240
+because you want it to flow from your head
+
+00:48:54.480 --> 00:48:54.980
+with as little friction as possible.
+
+00:48:59.440 --> 00:48:59.940
+The other 1 you want to be processed so that
+
+00:49:01.800 --> 00:49:02.120
+when you look it up and stuff like that's
+
+00:49:04.840 --> 00:49:05.280
+more efficient Same thing with your to-do
+
+00:49:06.380 --> 00:49:06.680
+things. So like oh, yeah,
+
+00:49:09.440 --> 00:49:09.640
+I guess there's 1 more Category like I
+
+00:49:11.780 --> 00:49:11.980
+thought I found my 3 favorite way rather than
+
+00:49:15.720 --> 00:49:16.220
+like priority 123 is primary tasks which
+
+00:49:17.960 --> 00:49:18.280
+basically generally goes up to 3,
+
+00:49:20.380 --> 00:49:20.460
+secondary tasks, and then I like to have a
+
+00:49:22.540 --> 00:49:23.040
+third category, unplanned tasks,
+
+00:49:25.840 --> 00:49:26.180
+and I just have those wrote down in a heading
+
+00:49:28.520 --> 00:49:28.900
+in an org mode file, and then I put the tasks
+
+00:49:32.160 --> 00:49:32.660
+in there, rather than using the agenda,
+
+00:49:33.800 --> 00:49:34.040
+like too much, I don't know,
+
+00:49:40.240 --> 00:49:40.740
+just I found that that was my favorite way of
+
+00:49:43.480 --> 00:49:43.820
+doing it and then you have like another file
+
+00:49:47.840 --> 00:49:48.000
+that would just be your dump of anything you
+
+00:49:51.440 --> 00:49:51.660
+want to do and that would be like that you
+
+00:49:57.040 --> 00:49:57.540
+could pull from to get your day or I guess
+
+00:49:59.240 --> 00:49:59.440
+something that's actually better than a day
+
+00:50:01.560 --> 00:50:01.720
+is doing it all by a week at a time I found
+
+00:50:03.160 --> 00:50:03.660
+that that's actually a lot nicer because
+
+00:50:06.600 --> 00:50:06.840
+thinking about what you do in a week seems
+
+00:50:09.480 --> 00:50:09.840
+like a nicer unit, where you have a week,
+
+00:50:10.520 --> 00:50:11.020
+then you have your day,
+
+00:50:13.360 --> 00:50:13.780
+and then you have the 3 categories of
+
+00:50:16.500 --> 00:50:17.000
+priority, secondary, and unplanned.
+
+00:50:20.860 --> 00:50:20.920
+At least that's been my favorite iteration on
+
+00:50:30.840 --> 00:50:31.340
+[Speaker 0]: thought process workflow.
+
+00:50:31.500 --> 00:50:31.640
+[Speaker 2]: the week of the to-do I had
+
+00:50:33.820 --> 00:50:34.320
+[Speaker 0]: a colleague that was very effective at
+
+00:50:37.280 --> 00:50:37.780
+planning on a weekly basis and he would just
+
+00:50:41.580 --> 00:50:41.900
+get his weekly list of things to get done and
+
+00:50:43.640 --> 00:50:43.860
+he was very good at pounding through that
+
+00:50:45.380 --> 00:50:45.880
+list and getting them done.
+
+00:50:49.400 --> 00:50:49.740
+I have been too much of a day-oriented person
+
+00:50:54.020 --> 00:50:54.200
+and a week-oriented person to adapt his
+
+00:50:56.760 --> 00:50:57.260
+approach, but I've been considering that too.
+
+00:51:03.080 --> 00:51:03.520
+I think what I don't do enough of is pulling
+
+00:51:05.640 --> 00:51:06.140
+back to the month level,
+
+00:51:08.100 --> 00:51:08.600
+semester level, year level,
+
+00:51:10.900 --> 00:51:11.400
+5 year level, 10 year level.
+
+00:51:11.880 --> 00:51:12.380
+And...
+
+00:51:16.000 --> 00:51:16.200
+[Speaker 2]: That's the advantage of finding it by a week
+
+00:51:17.960 --> 00:51:18.120
+is like you can have like so you'd have your
+
+00:51:20.060 --> 00:51:20.560
+week and then maybe you have like 1 section
+
+00:51:24.440 --> 00:51:24.660
+after Friday or last day of the week and this
+
+00:51:27.660 --> 00:51:28.160
+is like your this is just your like staging
+
+00:51:30.300 --> 00:51:30.460
+so this is where you stage all the tasks and
+
+00:51:32.560 --> 00:51:32.720
+then what like you can just stay in your
+
+00:51:37.020 --> 00:51:37.280
+staging write them all down and then use alt
+
+00:51:39.860 --> 00:51:40.040
+and your arrow keys to quickly reorder all of
+
+00:51:43.340 --> 00:51:43.640
+them in the week and then when you're looking
+
+00:51:45.800 --> 00:51:46.300
+at 1 day and you're just looking at ordering
+
+00:51:48.820 --> 00:51:48.960
+everything well it makes a lot of sense when
+
+00:51:51.720 --> 00:51:51.960
+you just say, I don't really want to do that.
+
+00:51:53.160 --> 00:51:53.660
+Like I want this done this week.
+
+00:51:56.260 --> 00:51:56.500
+I don't necessarily want it done on this day.
+
+00:51:58.520 --> 00:51:58.740
+So it just, that's why I found that the week
+
+00:52:00.280 --> 00:52:00.780
+approach works a lot nicer even.
+
+00:52:09.920 --> 00:52:10.260
+[Speaker 0]: of a staging time you like schedule some time
+
+00:52:11.880 --> 00:52:12.380
+in your week to do the staging.
+
+00:52:14.620 --> 00:52:14.960
+[Speaker 2]: Yeah. Is that way The staging is more of just
+
+00:52:16.840 --> 00:52:16.960
+like, these are the things I would like to
+
+00:52:19.440 --> 00:52:19.940
+get done. And then when you schedule it,
+
+00:52:23.360 --> 00:52:23.800
+then you kind of schedule it by just using
+
+00:52:26.240 --> 00:52:26.740
+the Alt-Left key, the Alt-Arrow keys to just,
+
+00:52:28.380 --> 00:52:28.580
+oh, I want this done. It looks like this
+
+00:52:29.860 --> 00:52:30.040
+would work really good on this day.
+
+00:52:31.620 --> 00:52:32.120
+This 1 looks like it would work on this day.
+
+00:52:38.800 --> 00:52:39.300
+[Speaker 0]: A, you still utilize org agenda?
+
+00:52:45.140 --> 00:52:45.640
+[Speaker 2]: I try to, I don't know,
+
+00:52:49.120 --> 00:52:49.540
+I found that it works at least better without
+
+00:52:52.120 --> 00:52:52.620
+it. Yeah, that's fine.
+
+00:52:54.020 --> 00:52:54.340
+Because that way I also get a log of
+
+00:53:00.020 --> 00:53:00.140
+everything I've done, which I can't find a
+
+00:53:03.240 --> 00:53:03.400
+way that, it seems easier to just make new
+
+00:53:06.380 --> 00:53:06.760
+files for it. And rather than,
+
+00:53:08.160 --> 00:53:08.660
+like you could use it with Org Agenda,
+
+00:53:11.540 --> 00:53:12.040
+but like 1 of the things that you want is
+
+00:53:14.040 --> 00:53:14.540
+with it is to look back at it,
+
+00:53:18.380 --> 00:53:18.880
+reflect. And so like if you have the,
+
+00:53:23.360 --> 00:53:23.640
+if you have, if you open up the file with 2
+
+00:53:25.580 --> 00:53:25.760
+levels or 3 levels of headings to where you
+
+00:53:26.780 --> 00:53:27.040
+just see the priority task,
+
+00:53:29.800 --> 00:53:30.300
+you can get a very nice overview of saying,
+
+00:53:33.860 --> 00:53:34.360
+I did my priority task this day.
+
+00:53:38.760 --> 00:53:39.100
+So you get the numbers next to the things.
+
+00:53:40.200 --> 00:53:40.700
+And so you can easily just say,
+
+00:53:41.820 --> 00:53:41.980
+I've done this. I mean,
+
+00:53:43.360 --> 00:53:43.520
+it would be nice if I could figure out a way
+
+00:53:45.240 --> 00:53:45.740
+of doing agenda to give me percentages.
+
+00:53:50.680 --> 00:53:51.180
+But I haven't figured that out.
+
+00:53:54.280 --> 00:53:54.780
+Seeing the granular level,
+
+00:53:57.100 --> 00:53:57.340
+I can easily scan that with my eyes.
+
+00:53:59.720 --> 00:53:59.900
+So I just did it by hand rather than the
+
+00:53:59.900 --> 00:54:00.400
+agenda.
+
+00:54:06.420 --> 00:54:06.600
+[Speaker 0]: Yeah, I've, I've tried to use agenda a few
+
+00:54:10.400 --> 00:54:10.900
+times and pretty seriously,
+
+00:54:14.800 --> 00:54:15.060
+but I keep bouncing off it.
+
+00:54:17.920 --> 00:54:18.160
+I think I get too many things built in or
+
+00:54:21.200 --> 00:54:21.700
+scheduled and I just don't get to them.
+
+00:54:26.000 --> 00:54:26.500
+I feel bad about it and I wind up abandoning
+
+00:54:31.220 --> 00:54:31.500
+it. So that's 1 area where there's probably
+
+00:54:34.820 --> 00:54:35.040
+some potential for optimizing and making that
+
+00:54:40.260 --> 00:54:40.440
+work better. There's a lot of customizing you
+
+00:54:42.280 --> 00:54:42.780
+can do with Agenda. It's amazing.
+
+00:54:44.540 --> 00:54:45.040
+[Speaker 2]: For me, it was though,
+
+00:54:48.480 --> 00:54:48.980
+I wanted there to be a separation between the
+
+00:54:52.120 --> 00:54:52.420
+daily to-do lists and like your grab bag
+
+00:54:54.480 --> 00:54:54.600
+which I think agenda works a lot better for a
+
+00:54:58.040 --> 00:54:58.440
+grab bag. I want a nice way of looking back
+
+00:55:01.560 --> 00:55:02.060
+at my to-do daily to-do logs.
+
+00:55:05.980 --> 00:55:06.340
+So I kind of want them to be separated,
+
+00:55:08.480 --> 00:55:08.980
+so I just did them separate.
+
+00:55:12.540 --> 00:55:12.680
+With the agenda, I could never figure out
+
+00:55:14.060 --> 00:55:14.560
+exactly how I want that to work,
+
+00:55:15.620 --> 00:55:16.120
+how the files would look,
+
+00:55:18.580 --> 00:55:18.960
+and how all the Emacs settings would interact
+
+00:55:21.300 --> 00:55:21.660
+with it. I mean, I'm sure I could,
+
+00:55:28.780 --> 00:55:29.160
+but that's why I opted for weekly files.
+
+00:55:34.960 --> 00:55:35.140
+Or at least That's my most refined idea on
+
+00:55:35.280 --> 00:55:35.780
+the process.
+
+00:55:41.000 --> 00:55:41.400
+[Speaker 0]: That's a good idea. So I've taken my approach
+
+00:55:43.940 --> 00:55:44.440
+is a little different that I'm generating
+
+00:55:46.760 --> 00:55:46.960
+this text on a daily basis and popping it
+
+00:55:52.660 --> 00:55:52.900
+into this to 1 document file per day and a
+
+00:55:59.020 --> 00:55:59.300
+like a diary on Overleaf as a big so it winds
+
+00:56:01.950 --> 00:56:02.450
+[Speaker 2]: sections
+
+00:56:05.440 --> 00:56:05.600
+[Speaker 0]: up being 365 and where every month is a
+
+00:56:11.400 --> 00:56:11.640
+chapter and it's compiled quickly enough even
+
+00:56:13.100 --> 00:56:13.480
+though it's often up to 1,000
+
+00:56:14.780 --> 00:56:15.280
+pages long by the end of the year.
+
+00:56:17.220 --> 00:56:17.500
+And I have all these, of course,
+
+00:56:19.240 --> 00:56:19.700
+with the PDF, I can search through it.
+
+00:56:22.540 --> 00:56:22.760
+So that's not as you can't do the kind of
+
+00:56:24.380 --> 00:56:24.560
+really sophisticated searching that you can
+
+00:56:29.340 --> 00:56:29.840
+do with Org Mode. But just doing that,
+
+00:56:33.620 --> 00:56:33.800
+It sure has been very helpful in digging up
+
+00:56:39.440 --> 00:56:39.680
+information, like the little protocols on how
+
+00:56:42.960 --> 00:56:43.460
+I attack, accomplish a certain task that I
+
+00:56:45.420 --> 00:56:45.920
+have to do a year later,
+
+00:56:50.440 --> 00:56:50.540
+or to have a record of what I did on a
+
+00:56:54.220 --> 00:56:54.400
+certain day and then somebody above me might
+
+00:56:57.100 --> 00:56:57.340
+be trying to hold me to account what got
+
+00:56:59.580 --> 00:57:00.080
+done. I can look that up pretty very quickly.
+
+00:57:05.140 --> 00:57:05.320
+It's documented. I find that to be just any
+
+00:57:09.520 --> 00:57:09.840
+kind of thorough documentation system is very
+
+00:57:16.080 --> 00:57:16.320
+[Speaker 2]: I also mess with having it all in 1 file
+
+00:57:17.440 --> 00:57:17.940
+rather than by a weak file.
+
+00:57:20.140 --> 00:57:20.640
+[Speaker 0]: useful. And at least what I did.
+
+00:57:21.820 --> 00:57:22.320
+I ran into trouble with,
+
+00:57:25.380 --> 00:57:25.880
+like, once you get a lot of items,
+
+00:57:27.040 --> 00:57:27.540
+like if you have 1,000
+
+00:57:30.580 --> 00:57:30.780
+items, headings, I've had org files with
+
+00:57:33.680 --> 00:57:34.180
+1,000 headings. It can be so hard to scroll
+
+00:57:38.960 --> 00:57:39.280
+through. Maybe it's some limitations I'm run
+
+00:57:42.240 --> 00:57:42.740
+into with the Emacs being single threaded.
+
+00:57:49.120 --> 00:57:49.620
+[Speaker 2]: At least with, yeah. Yeah.
+
+00:57:52.420 --> 00:57:52.920
+It was like, that's 1 of the things is like,
+
+00:57:54.240 --> 00:57:54.520
+how exactly do you want this,
+
+00:57:55.920 --> 00:57:56.120
+the information structured because it can
+
+00:57:56.820 --> 00:57:57.320
+change how it's retrieved.
+
+00:58:00.260 --> 00:58:00.760
+[Speaker 0]: Ooh, most definitely. Most definitely.
+
+00:58:08.200 --> 00:58:08.560
+[Speaker 2]: So as an example, when I was doing the daily
+
+00:58:14.760 --> 00:58:14.960
+logs and I put it all in the date and then
+
+00:58:15.700 --> 00:58:16.200
+the priority, secondary,
+
+00:58:21.980 --> 00:58:22.100
+unplanned tasks, and then I had it stay at
+
+00:58:24.940 --> 00:58:25.120
+that, get auto expanded by that level by
+
+00:58:27.280 --> 00:58:27.780
+default so I didn't see the individual task
+
+00:58:30.720 --> 00:58:30.860
+and you and then I had a but And then it
+
+00:58:33.120 --> 00:58:33.420
+would say like I complete 205 or something
+
+00:58:34.440 --> 00:58:34.940
+like that of secondary tasks.
+
+00:58:38.000 --> 00:58:38.400
+And then just being able just to quickly scan
+
+00:58:39.740 --> 00:58:40.240
+all the days and say, oh,
+
+00:58:42.960 --> 00:58:43.260
+it just, the feedback you get from that is
+
+00:58:46.300 --> 00:58:46.500
+worth a lot. And I don't think it's
+
+00:58:47.920 --> 00:58:48.120
+something, it's not something I could think
+
+00:58:49.320 --> 00:58:49.820
+of how you do an agenda.
+
+00:58:53.300 --> 00:58:53.540
+Even though I got done in the text files just
+
+00:58:57.260 --> 00:58:57.400
+because you get that doesn't expand all the
+
+00:58:59.580 --> 00:58:59.800
+way so you so you can quickly just see on
+
+00:59:01.940 --> 00:59:02.140
+this day I did this well on this day I did
+
+00:59:05.800 --> 00:59:06.300
+this well all within and 4 lines per day.
+
+00:59:11.040 --> 00:59:11.420
+So it's not, that doesn't,
+
+00:59:12.920 --> 00:59:13.420
+that's not very visually verbose.
+
+00:59:16.920 --> 00:59:17.080
+Probably about as visually verbose as you
+
+00:59:18.640 --> 00:59:19.140
+want it. They're not super long.
+
+00:59:23.000 --> 00:59:23.200
+You easily see the 2 of 3 and stuff like that
+
+00:59:24.920 --> 00:59:25.420
+that you get done so you can quickly and say,
+
+00:59:29.380 --> 00:59:29.600
+oh well, these are the days where I got my
+
+00:59:31.300 --> 00:59:31.800
+primary tasks done or this week,
+
+00:59:36.340 --> 00:59:36.500
+and this day I didn't do it well and you
+
+00:59:38.300 --> 00:59:38.740
+could helps you correlate like your feelings
+
+00:59:42.440 --> 00:59:42.620
+with your to-do lists and journals and
+
+00:59:42.620 --> 00:59:43.120
+whatnot.
+
+00:59:48.940 --> 00:59:49.440
+[Speaker 0]: Yeah I think that's very powerful.
+
+00:59:53.300 --> 00:59:53.800
+Because it's summarizing capability.
+
+00:59:57.560 --> 00:59:58.060
+It allows you to, you know,
+
+01:00:00.656 --> 01:00:00.784
+pull back and get an overview.
+
+01:00:01.040 --> 01:00:01.540
+Get an overview.
+
+01:00:07.580 --> 01:00:08.080
+[Speaker 2]: And yeah, as I said, it's like the feedback
+
+01:00:10.600 --> 01:00:10.760
+from that almost when I did that,
+
+01:00:12.620 --> 01:00:12.800
+it feels like half the reason or should be
+
+01:00:14.580 --> 01:00:14.900
+like half the reason is and it's something
+
+01:00:19.120 --> 01:00:19.340
+that I don't if you use the agenda as it is,
+
+01:00:21.220 --> 01:00:21.360
+you wouldn't, I don't know how you would get
+
+01:00:23.160 --> 01:00:23.360
+it, like saying, like looking at the week by
+
+01:00:25.080 --> 01:00:25.580
+week basis, breakdowns,
+
+01:00:27.120 --> 01:00:27.620
+you might be able to get like percentages,
+
+01:00:30.400 --> 01:00:30.900
+which would be nice. Like I did this well,
+
+01:00:33.700 --> 01:00:34.120
+or like habit, I don't,
+
+01:00:35.640 --> 01:00:35.920
+there might be things that could offer you
+
+01:00:39.700 --> 01:00:40.200
+but. Yeah,
+
+01:00:46.780 --> 01:00:47.280
+[Speaker 0]: so I'm pretty obsessed about tracking effort
+
+01:00:48.560 --> 01:00:49.060
+on various kinds of projects,
+
+01:00:52.020 --> 01:00:52.520
+or various kinds of activities,
+
+01:00:57.880 --> 01:00:58.360
+and to get some feedback in that regard.
+
+01:00:59.500 --> 01:01:00.000
+And then you, but you got the,
+
+01:01:02.040 --> 01:01:02.540
+So I define a project as anything that
+
+01:01:06.300 --> 01:01:06.780
+requires work at different points in time,
+
+01:01:07.040 --> 01:01:07.540
+more than 1
+
+01:01:15.300 --> 01:01:15.520
+[Speaker 2]: time. I'll email you my org mode template
+
+01:01:17.560 --> 01:01:18.060
+that I made that demonstrates that.
+
+01:01:22.200 --> 01:01:22.700
+I don't know if you, do you have your email
+
+01:01:24.520 --> 01:01:25.020
+in your talk notes or anything?
+
+01:01:29.380 --> 01:01:29.700
+[Speaker 0]: Okay. I think I should have it on the first
+
+01:01:31.560 --> 01:01:32.060
+slide. There should be my email address.
+
+01:01:40.560 --> 01:01:41.060
+I can add it to my talk notes.
+
+01:01:46.920 --> 01:01:47.040
+[Speaker 2]: Okay. Would you want me to show it to you at
+
+01:01:48.940 --> 01:01:49.440
+[Speaker 0]: that'd be great.
+
+01:01:52.600 --> 01:01:53.100
+[Speaker 2]: all? Sure, All right, let's see.
+
+01:02:20.842 --> 01:02:20.905
+I'm going to share screen button,
+
+01:02:21.220 --> 01:02:21.520
+right? There's a share screen button,
+
+01:02:21.520 --> 01:02:22.020
+right?
+
+01:02:26.160 --> 01:02:26.660
+[Speaker 0]: Yeah, so, let's see.
+
+01:02:59.243 --> 01:02:59.743
+[Speaker 2]: Yeah, I'm all. That's the right button.
+
+01:03:04.640 --> 01:03:05.140
+Can you not share the screen on this?
+
+01:03:08.860 --> 01:03:09.360
+[Speaker 0]: I have something going here.
+
+01:03:13.900 --> 01:03:14.400
+Let's see. I have, I see some stuff on here.
+
+01:03:18.160 --> 01:03:18.660
+Wonder if I'm still active.
+
+01:03:21.180 --> 01:03:21.680
+It shows share screen.
+
+01:03:22.280 --> 01:03:22.780
+Cancel.
+
+01:03:28.260 --> 01:03:28.760
+[Speaker 2]: Maybe they just did it through OBS.
+
+01:03:47.280 --> 01:03:47.780
+[Speaker 0]: Maybe I only have permission to share.
+
+01:03:53.900 --> 01:03:54.400
+I can put my email address in the chat.
+
+01:03:59.440 --> 01:03:59.620
+[Speaker 2]: I guess I'll just email it to you,
+
+01:04:06.600 --> 01:04:06.840
+but Let's see. Yeah, I think the way that
+
+01:04:11.260 --> 01:04:11.460
+they did it on the Any of the other videos if
+
+01:04:13.780 --> 01:04:14.020
+they shared the screen they just shared the
+
+01:04:17.440 --> 01:04:17.560
+webcam they just took over the webcam with
+
+01:04:20.380 --> 01:04:20.880
+OBS and shared what they wanted with it.
+
+01:04:22.760 --> 01:04:23.260
+[Speaker 0]: Oh, okay.
+
+01:04:24.720 --> 01:04:25.180
+[Speaker 2]: At least I'm guessing.
+
+01:04:26.960 --> 01:04:27.460
+Yeah, I'll give that to you.
+
+01:04:31.080 --> 01:04:31.240
+Okay. I guess I'll let you go watch the rest
+
+01:04:32.240 --> 01:04:32.740
+of the Emacs videos.
+
+01:04:34.640 --> 01:04:35.140
+[Speaker 0]: This has been a great conversation.
+
+01:04:37.280 --> 01:04:37.780
+Thank you very much. I appreciate your
+
+01:04:39.620 --> 01:04:39.840
+willingness to share your thoughts on this
+
+01:04:42.980 --> 01:04:43.480
+matter. This is vital,
+
+01:04:48.260 --> 01:04:48.440
+time management. It's a kind of key aspect of
+
+01:04:48.440 --> 01:04:48.940
+life.
+
+01:04:54.680 --> 01:04:55.180
+[Speaker 2]: Oh yeah. The way the how the function.
+
+01:05:03.320 --> 01:05:03.820
+Reasons to use emacs is to use the keyboard
+
+01:05:08.240 --> 01:05:08.420
+is. It's not to speed you up.
+
+01:05:09.520 --> 01:05:10.020
+Like, yeah, that's nice.
+
+01:05:12.280 --> 01:05:12.780
+But it keeps you in the stream,
+
+01:05:25.400 --> 01:05:25.760
+keeps you in the flow state and which then
+
+01:05:32.780 --> 01:05:32.900
+just makes you think better and yeah and the
+
+01:05:35.540 --> 01:05:35.780
+thing with that is you I have you I have no
+
+01:05:37.480 --> 01:05:37.980
+idea what the limits of that would be.
+
+01:05:39.680 --> 01:05:40.020
+Because you think, because yes,
+
+01:05:42.740 --> 01:05:42.900
+it's not about beating up how many words you
+
+01:05:44.860 --> 01:05:45.060
+say a minute. I mean that's nice and all,
+
+01:05:46.680 --> 01:05:46.920
+But when you start doing that,
+
+01:05:48.340 --> 01:05:48.840
+when you start removing all these friction
+
+01:05:52.500 --> 01:05:53.000
+points, all of a sudden the number,
+
+01:05:57.800 --> 01:05:58.300
+quality, and types of thoughts you get start
+
+01:06:01.620 --> 01:06:02.120
+[Speaker 0]: That's right.
+
+01:06:03.480 --> 01:06:03.980
+[Speaker 2]: increasing. Which is the goal.
+
+01:06:14.960 --> 01:06:15.460
+[Speaker 0]: Okay. Well, thank you very much.
+
+01:06:17.760 --> 01:06:18.260
+Enjoy the rest of the meeting.
+
+01:06:19.280 --> 01:06:19.780
+[Speaker 2]: Will do.
diff --git a/2023/captions/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main--chapters.vtt b/2023/captions/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main--chapters.vtt
new file mode 100644
index 00000000..aac6f54c
--- /dev/null
+++ b/2023/captions/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main--chapters.vtt
@@ -0,0 +1,53 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:37.399
+Introduction
+
+00:00:37.400 --> 00:01:02.559
+Three activities in voice computing
+
+00:01:02.560 --> 00:01:53.519
+Talk is not about ... and about ...
+
+00:01:53.520 --> 00:03:33.239
+Motivations
+
+00:03:33.240 --> 00:03:58.679
+Data
+
+00:03:58.680 --> 00:04:25.627
+Voice In in the Chrome Store
+
+00:04:25.628 --> 00:05:16.879
+Works in web pages with text areas
+
+00:05:16.880 --> 00:06:41.739
+Built-in commands in Voice In Plus
+
+00:06:41.740 --> 00:08:14.759
+Common errors made by Voice In
+
+00:08:14.760 --> 00:09:59.419
+Custom speech-to-text commands
+
+00:09:59.420 --> 00:10:37.539
+Custom speech-to-commands
+
+00:10:37.540 --> 00:12:28.399
+Introducing Talon Voice
+
+00:12:28.400 --> 00:14:02.539
+Talon GUI
+
+00:14:02.540 --> 00:15:34.014
+Talon file with web scope
+
+00:15:34.015 --> 00:16:52.499
+Terminals on remote and virtual machines
+
+00:16:52.500 --> 00:18:17.719
+Recommendations
+
+00:18:17.720 --> 00:18:48.880
+Acknowledgements
diff --git a/2023/captions/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main.vtt b/2023/captions/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main.vtt
new file mode 100644
index 00000000..5ff59fdc
--- /dev/null
+++ b/2023/captions/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main.vtt
@@ -0,0 +1,890 @@
+WEBVTT captioned by sachac
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:04.359
+Hi, I'm Blaine Mooers. I'm an associate professor
+
+00:00:04.360 --> 00:00:06.519
+of biochemistry at the University of Oklahoma
+
+00:00:06.520 --> 00:00:09.319
+Health Sciences Center in Oklahoma City.
+
+00:00:09.320 --> 00:00:12.959
+My lab studies the role of RNA structure in RNA editing.
+
+00:00:12.960 --> 00:00:17.199
+We use X-ray crystallography to study the structures
+
+00:00:17.200 --> 00:00:19.919
+of these RNAs. We spend a lot of time in the lab
+
+00:00:19.920 --> 00:00:22.719
+preparing our samples for structural studies,
+
+00:00:22.720 --> 00:00:26.719
+and then we also spend a lot of time at the computer
+
+00:00:26.720 --> 00:00:29.719
+analyzing the resulting data.
+
+00:00:29.720 --> 00:00:33.039
+I was seeking ways of using voice computing
+
+00:00:33.040 --> 00:00:37.399
+to try to enhance my productivity.
+
+NOTE Three activities in voice computing
+
+00:00:37.400 --> 00:00:41.319
+I divide voice computing into three activities,
+
+00:00:41.320 --> 00:00:44.959
+speech-to-text or dictation, speech-to-commands,
+
+00:00:44.960 --> 00:00:47.639
+and speech-to-code. I'll be talking about
+
+00:00:47.640 --> 00:00:50.159
+speech-to-text and speech-to-commands today
+
+00:00:50.160 --> 00:00:55.079
+because these are two activities
+
+00:00:55.080 --> 00:00:57.319
+that are probably most broadly applicable
+
+00:00:57.320 --> 00:01:02.559
+to the workflows of people attending this conference.
+
+NOTE Talk is not about ... and about ...
+
+00:01:02.560 --> 00:01:06.799
+This talk will not be about Emacspeak.
+
+00:01:06.800 --> 00:01:11.359
+This is a venerated program for converting text to speech.
+
+00:01:11.360 --> 00:01:13.319
+We're talking about the flow of information
+
+00:01:13.320 --> 00:01:16.519
+in the opposite direction, speech-to-text.
+
+00:01:16.520 --> 00:01:20.599
+We need an Emacs Listens. We don't have one,
+
+00:01:20.600 --> 00:01:25.479
+so I had to seek help from outside the Emacs world
+
+00:01:25.480 --> 00:01:30.639
+via the Voice In Plus. This runs in
+
+00:01:30.640 --> 00:01:33.639
+the Google Chrome web browser,
+
+00:01:33.640 --> 00:01:36.719
+and it's very good for speech-to-text
+
+00:01:36.720 --> 00:01:39.519
+and very easy to learn how to use.
+
+00:01:39.520 --> 00:01:41.999
+It also has some speech-to-commands.
+
+00:01:42.000 --> 00:01:44.799
+However, Talon Voice is much better
+
+00:01:44.800 --> 00:01:47.559
+with the speech-to-commands,
+
+00:01:47.560 --> 00:01:53.519
+and it's also great at speech-to-code.
+
+NOTE Motivations
+
+00:01:53.520 --> 00:01:57.239
+The motivations are, obviously, as I mentioned already,
+
+00:01:57.240 --> 00:01:59.159
+for improved productivity.
+
+00:01:59.160 --> 00:02:00.399
+So, if you're a fast typist
+
+00:02:00.400 --> 00:02:05.199
+who types faster than they can speak,
+
+00:02:05.200 --> 00:02:07.079
+then nonetheless you might still benefit
+
+00:02:07.080 --> 00:02:09.279
+from voice computing when you grow tired of
+
+00:02:09.280 --> 00:02:12.199
+using the keyboard. On the other hand,
+
+00:02:12.200 --> 00:02:15.199
+you might be a slow typist who talks faster
+
+00:02:15.200 --> 00:02:17.519
+than they can type.
+
+00:02:17.520 --> 00:02:19.759
+In this case, you're definitely going to
+
+00:02:19.760 --> 00:02:22.859
+benefit from dictation because you'll be able to
+
+00:02:22.860 --> 00:02:29.359
+encode more words in text documents in a given day.
+
+00:02:29.360 --> 00:02:33.639
+If you're a coder, then you may get a kick out of
+
+00:02:33.640 --> 00:02:36.999
+opening programs and websites and coding projects
+
+00:02:37.000 --> 00:02:39.279
+by using your voice.
+
+00:02:39.280 --> 00:02:41.719
+Then there are health-related reasons.
+
+00:02:41.720 --> 00:02:44.599
+You may have impaired use of your hands, eyes, or both
+
+00:02:44.600 --> 00:02:49.199
+due to accident or disease, or you may suffer from
+
+00:02:49.200 --> 00:02:53.519
+a repetitive stress injury. Many of us have this
+
+00:02:53.520 --> 00:02:55.759
+in a mild but chronic form of it.
+
+00:02:55.760 --> 00:02:59.039
+We can't take a three-month sabbatical from the keyboard
+
+00:02:59.040 --> 00:03:05.519
+without losing our jobs, so these injuries tend to persist.
+
+00:03:05.520 --> 00:03:06.679
+And then you may have learned
+
+00:03:06.680 --> 00:03:09.959
+that it's not good for your health to sit
+
+00:03:09.960 --> 00:03:11.919
+for prolonged periods of time
+
+00:03:11.920 --> 00:03:14.919
+with your staring at a computer screen.
+
+00:03:14.920 --> 00:03:21.799
+You can actually dictate to your computer from 20 feet away
+
+00:03:21.800 --> 00:03:24.999
+while looking out the window,
+
+00:03:25.000 --> 00:03:27.779
+thereby giving your lower body a break
+
+00:03:27.780 --> 00:03:33.239
+and your eyes a break.
+
+NOTE Data
+
+00:03:33.240 --> 00:03:35.639
+I'm not God, so I have to bring data.
+
+00:03:35.640 --> 00:03:38.039
+I have two data points here,
+
+00:03:38.040 --> 00:03:42.399
+the number of words that I wrote in June and July this year
+
+00:03:42.400 --> 00:03:45.159
+and in September and October.
+
+00:03:45.160 --> 00:03:49.519
+I adopted the use of voice computing
+
+00:03:49.520 --> 00:03:53.919
+in the middle of August. As you can see,
+
+00:03:53.920 --> 00:03:58.679
+I got an over three-fold increase in my output.
+
+NOTE Voice In in the Chrome Store
+
+00:03:58.680 --> 00:04:07.119
+So this is the Chrome store website for voice-in.
+
+00:04:07.120 --> 00:04:11.119
+It's only available for Google Chrome.
+
+00:04:11.120 --> 00:04:13.239
+You just hit the install button to install it.
+
+00:04:13.240 --> 00:04:16.639
+To configure it, you need to select a language.
+
+00:04:16.640 --> 00:04:19.559
+It has support for 40 languages
+
+00:04:19.560 --> 00:04:23.119
+and it supports about a dozen different dialects of English,
+
+00:04:23.120 --> 00:04:25.627
+including Australian.
+
+NOTE Works in web pages with text areas
+
+00:04:25.628 --> 00:04:29.959
+It works on web pages with text areas,
+
+00:04:29.960 --> 00:04:33.319
+so it works. I use it regularly
+
+00:04:33.320 --> 00:04:37.879
+on Overleaf and 750words.com,
+
+00:04:37.880 --> 00:04:42.279
+a distraction-free environment for writing.
+
+00:04:42.280 --> 00:04:46.239
+It also works in webmails. It works in Google.
+
+00:04:46.780 --> 00:04:51.319
+It works in Jupyter Lab, of course,
+
+00:04:51.320 --> 00:04:52.879
+because that runs in the browser.
+
+00:04:52.880 --> 00:04:57.999
+It also works in Jupyter Notebook and Colab Notebook.
+
+00:04:58.000 --> 00:05:01.319
+It should work in Cloudmacs.
+
+00:05:01.320 --> 00:05:04.159
+I've mapped option-L to opening Voice In
+
+00:05:04.160 --> 00:05:09.119
+when the cursor is on a web page that has a text area.
+
+00:05:09.120 --> 00:05:16.879
+So [the presence of a text area is] the main limiting factor.
+
+NOTE Built-in commands in Voice In Plus
+
+00:05:16.880 --> 00:05:19.159
+[Voice In] has a number of built-in commands.
+
+00:05:19.160 --> 00:05:24.879
+You can turn it off by saying "stop dictation".
+
+00:05:24.880 --> 00:05:26.119
+It doesn't distinguish between
+
+00:05:26.120 --> 00:05:28.799
+a command mode and a dictation mode.
+
+00:05:28.800 --> 00:05:33.599
+It has undo command. You use the command
+
+00:05:33.600 --> 00:05:36.919
+"copy that" to copy a selection.
+
+00:05:36.920 --> 00:05:40.079
+The "press" commands are used in the browser.
+
+00:05:40.080 --> 00:05:44.839
+You [say] "press enter" to issue a command or [submit] text
+
+00:05:44.840 --> 00:05:50.319
+that has been written in a web form,
+
+00:05:50.320 --> 00:05:55.279
+and then "press tab" will open up the next tab
+
+00:05:55.280 --> 00:05:58.599
+in a web browser. The scroll up and down
+
+00:05:58.600 --> 00:06:02.379
+will allow you to navigate a web page.
+
+00:06:02.380 --> 00:06:05.819
+I've put together a quiz about these commands
+
+00:06:05.820 --> 00:06:09.559
+so that you can go through this quiz several times
+
+00:06:09.560 --> 00:06:14.699
+until you get at least 90 percent of them correct,
+
+00:06:14.700 --> 00:06:16.679
+90 percent of the questions correct.
+
+00:06:16.680 --> 00:06:20.599
+In order to boost your recall of the commands,
+
+00:06:20.600 --> 00:06:23.799
+I have a Python script that you can probably
+
+00:06:23.800 --> 00:06:26.559
+pound through the quiz with
+
+00:06:26.560 --> 00:06:32.159
+in less than a minute, once you know the commands.
+
+00:06:32.160 --> 00:06:35.599
+I also provide an Elisp version of this quiz,
+
+00:06:35.600 --> 00:06:41.739
+but it's a little slower to operate.
+
+NOTE Common errors made by Voice In
+
+00:06:41.740 --> 00:06:43.399
+These are some common errors
+
+00:06:43.400 --> 00:06:45.399
+that I've run into with Voice In.
+
+00:06:45.400 --> 00:06:50.319
+It likes to contract statements like "I will" into "I'll".
+
+00:06:50.320 --> 00:06:55.599
+Contractions are not used in formal writing,
+
+00:06:55.600 --> 00:07:00.359
+and most of my writing is formal writing, so this annoys me.
+
+00:07:00.360 --> 00:07:04.759
+I will show you how I corrected for that problem.
+
+00:07:04.760 --> 00:07:10.039
+It also drops the first word in sentences quite often.
+
+00:07:10.040 --> 00:07:13.359
+This might be some speech issue that I have.
+
+00:07:13.360 --> 00:07:17.599
+It inserts the wrong word because it's not in the dictionary
+
+00:07:17.600 --> 00:07:22.619
+that was used to train it. So, for example,
+
+00:07:22.620 --> 00:07:26.919
+the word PyMOL is the name of a molecular graphics program
+
+00:07:26.920 --> 00:07:31.639
+that we use in our field. It doesn't recognize PyMOL.
+
+00:07:31.640 --> 00:07:34.239
+Instead, it substitutes in the word "primal".
+
+00:07:34.240 --> 00:07:38.399
+Since I don't use "primal" very often,
+
+00:07:38.400 --> 00:07:42.299
+I've mapped the word "primal" to "PyMOL"
+
+00:07:42.300 --> 00:07:45.659
+in some custom commands I'll talk about in a minute.
+
+00:07:45.660 --> 00:07:50.439
+Then there's a problem that the commands that exist
+
+00:07:50.440 --> 00:07:54.439
+might get executed when you speak them when, in fact,
+
+00:07:54.440 --> 00:07:58.839
+you wanted to use the words in those commands
+
+00:07:58.840 --> 00:08:01.439
+during your dictation.
+
+00:08:01.440 --> 00:08:07.119
+So this is a problem, a pitfall of Voice In,
+
+00:08:07.120 --> 00:08:08.919
+in that it doesn't have a command mode
+
+00:08:08.920 --> 00:08:14.759
+that's separate from a dictation mode.
+
+NOTE Custom speech-to-text commands
+
+00:08:14.760 --> 00:08:20.319
+You can set up through a very easy-to-use GUI
+
+00:08:20.320 --> 00:08:26.959
+custom voice commands mapped to what you want inserted,
+
+00:08:26.960 --> 00:08:32.399
+so this is how misinterpreted words can be corrected.
+
+00:08:32.400 --> 00:08:35.759
+You just map the misinterpreted word to the intended word.
+
+00:08:35.760 --> 00:08:42.839
+You can also map the contractions to their expansions.
+
+00:08:42.840 --> 00:08:46.959
+I did this for 94 English contractions,
+
+00:08:46.960 --> 00:08:50.139
+and you can find these on GitHub.
+
+00:08:50.140 --> 00:08:56.079
+You can also insert acronyms and expand those acronyms.
+
+00:08:56.080 --> 00:09:00.239
+I apply the same approach to the first names of colleagues.
+
+00:09:00.240 --> 00:09:03.759
+I say "expand Fred", for example,
+
+00:09:03.760 --> 00:09:06.999
+to get Fred's first and last name
+
+00:09:07.000 --> 00:09:12.599
+with the [correct] spelling of his very long German name.
+
+00:09:12.600 --> 00:09:19.399
+You can also insert other trivia like favorite URLs.
+
+00:09:19.400 --> 00:09:24.559
+You can insert LaTeX snippets.
+
+00:09:24.560 --> 00:09:34.799
+It handles correctly multi-line snippets.
+
+00:09:34.800 --> 00:09:39.419
+You just have to enclose them in double quotes.
+
+00:09:39.420 --> 00:09:45.039
+You can even insert BibTeX cite keys for references
+
+00:09:45.040 --> 00:09:46.879
+that you use frequently. All fields
+
+00:09:46.880 --> 00:09:59.419
+have certain key references for certain methods or topics.
+
+NOTE Custom speech-to-commands
+
+00:09:59.420 --> 00:10:05.079
+Then it has a set of commands that you can customize
+
+00:10:05.080 --> 00:10:08.199
+for the purpose of speech-to-commands
+
+00:10:08.200 --> 00:10:09.679
+to get the computer to do something
+
+00:10:09.680 --> 00:10:15.399
+like open up a specific website or save the current writing.
+
+00:10:15.400 --> 00:10:23.540
+In this case, we have "press: command-s"
+
+00:10:23.541 --> 00:10:27.759
+for saving current writing.
+
+00:10:27.760 --> 00:10:28.099
+You can change the language [with "lang:"],
+
+00:10:28.100 --> 00:10:37.539
+and you can change the case of the text [with "case:"].
+
+NOTE Introducing Talon Voice
+
+00:10:37.540 --> 00:10:41.039
+But the speech-to-command repertoire is quite limited
+
+00:10:41.040 --> 00:10:49.759
+in Voice In, so it's now time to pick up on Talon Voice.
+
+00:10:49.760 --> 00:10:54.119
+This is an open source project. It's free.
+
+00:10:54.120 --> 00:10:57.399
+It is highly configurable via TalonScript,
+
+00:10:57.400 --> 00:10:58.959
+which is a subset of Python.
+
+00:10:58.960 --> 00:11:03.039
+You can use either TalonScript or Python to configure it,
+
+00:11:03.040 --> 00:11:06.279
+but it's easier to code up your configuration
+
+00:11:06.280 --> 00:11:08.399
+in TalonScript.
+
+00:11:08.400 --> 00:11:10.759
+It has a Python interpreter embedded in it,
+
+00:11:10.760 --> 00:11:12.999
+so you don't have to mess around with installing
+
+00:11:13.000 --> 00:11:14.559
+yet another Python interpreter.
+
+00:11:14.560 --> 00:11:21.519
+It runs on all platforms, and it has a dictation mode
+
+00:11:21.520 --> 00:11:24.599
+that's separate from a command mode.
+
+00:11:24.600 --> 00:11:25.599
+You can activate it,
+
+00:11:25.600 --> 00:11:31.359
+and it'll be in a listening state asleep.
+
+00:11:31.360 --> 00:11:36.279
+You just bark out "Talon Wake" to start to wake it up,
+
+00:11:36.280 --> 00:11:43.799
+and "Talon Sleep" to have it go into a listening state.
+
+00:11:43.800 --> 00:11:47.919
+It has a very welcoming community
+
+00:11:47.920 --> 00:11:50.919
+in the Talon Slack channel.
+
+00:11:50.920 --> 00:11:56.399
+Then I need to point out that there's several packages
+
+00:11:56.400 --> 00:11:59.199
+that others have developed that run on top of Talon,
+
+00:11:59.200 --> 00:12:03.079
+but one of particular note is by Pokey Rule.
+
+00:12:03.080 --> 00:12:08.119
+He has on his website some really well-done videos
+
+00:12:08.120 --> 00:12:11.479
+that demonstrate how he uses Cursorless
+
+00:12:11.480 --> 00:12:17.239
+to move the cursor around using voice commands.
+
+00:12:17.240 --> 00:12:20.559
+This, however, runs on VS Code.
+
+00:12:20.560 --> 00:12:23.359
+At least that's the text editor
+
+00:12:23.360 --> 00:12:28.399
+for which he's primarily developing Cursorless.
+
+NOTE Talon GUI
+
+00:12:28.400 --> 00:12:35.519
+I followed the [install] protocol outlined by Tara Roys.
+
+00:12:35.520 --> 00:12:38.759
+She has a collection of tutorials
+
+00:12:38.760 --> 00:12:44.599
+on YouTube as well as on GitHub that are quite helpful.
+
+00:12:44.600 --> 00:12:49.479
+I followed her tutorial for installing
+
+00:12:49.480 --> 00:12:51.359
+Talon on macOS without any issues,
+
+00:12:51.360 --> 00:12:55.319
+but allow for half an hour to an hour
+
+00:12:55.320 --> 00:12:57.719
+to go through the process. When you're done,
+
+00:12:57.720 --> 00:13:02.199
+you'll have this Talon icon appear in the toolbar
+
+00:13:02.200 --> 00:13:06.119
+on the Mac. When it has this diagonal line across it,
+
+00:13:06.120 --> 00:13:09.539
+that means it's in the sleep state.
+
+00:13:09.540 --> 00:13:13.519
+So, this leads to cascading pull-down menus.
+
+00:13:13.520 --> 00:13:19.639
+This is it for the GUI.
+
+00:13:19.640 --> 00:13:26.519
+One of your first tasks is to select
+
+00:13:26.520 --> 00:13:30.439
+a language model that will be used to interpret
+
+00:13:30.440 --> 00:13:35.179
+the sounds that you generate as words.
+
+00:13:35.180 --> 00:13:38.959
+And the other kind of key feature is that there's a,
+
+00:13:38.960 --> 00:13:43.399
+under scripting, there's a view log pull-down
+
+00:13:43.400 --> 00:13:48.399
+that opens up a window displaying the log file.
+
+00:13:48.400 --> 00:13:52.879
+Whenever you make a change in a Talon configuration file,
+
+00:13:52.880 --> 00:13:55.079
+that change is implemented immediately.
+
+00:13:55.080 --> 00:13:57.599
+You do not have to restart Talon
+
+00:13:57.600 --> 00:14:02.539
+to get the change to take effect.
+
+NOTE Talon file with web scope
+
+00:14:02.540 --> 00:14:04.759
+This is an example of a Talon file.
+
+00:14:04.760 --> 00:14:10.499
+It has two components. It has a header above the dash that describes
+
+00:14:10.500 --> 00:14:14.919
+the scope of the commands contained below the dash.
+
+00:14:14.920 --> 00:14:19.739
+Each command is separated by a blank line.
+
+00:14:19.740 --> 00:14:24.239
+If a voice command is mapped to multiple actions,
+
+00:14:24.240 --> 00:14:30.999
+these are listed separately on indented lines
+
+00:14:31.000 --> 00:14:33.599
+below the first line.
+
+00:14:33.600 --> 00:14:39.419
+The words that are in square brackets are optional.
+
+00:14:39.420 --> 00:14:44.319
+So, I have mapped the word toggle voice in,
+
+00:14:44.320 --> 00:14:46.319
+or the phrase toggle voice in,
+
+00:14:46.320 --> 00:14:51.279
+to the keyboard shortcut Alt L
+
+00:14:51.280 --> 00:14:54.999
+in order to toggle on or off voice in.
+
+00:14:55.000 --> 00:14:57.879
+If I toggle voice in on,
+
+00:14:57.880 --> 00:15:01.759
+I need to immediately toggle off Talon,
+
+00:15:01.760 --> 00:15:09.079
+and this is done through this key command for Control T,
+
+00:15:09.080 --> 00:15:11.079
+which is mapped to speech toggle.
+
+00:15:11.080 --> 00:15:20.399
+Speech toggle. Then there are,
+
+00:15:20.400 --> 00:15:24.079
+there's a couple other examples.
+
+00:15:24.080 --> 00:15:26.439
+So, if there's no header present,
+
+00:15:26.440 --> 00:15:29.599
+it's an optional feature of Talon files,
+
+00:15:29.600 --> 00:15:32.639
+then the commands in the file will apply in all situations,
+
+00:15:32.640 --> 00:15:34.014
+in all modes.
+
+NOTE Terminals on remote and virtual machines
+
+00:15:34.015 --> 00:15:36.959
+Here we have two restrictions.
+
+00:15:36.960 --> 00:15:38.959
+These commands will only work
+
+00:15:38.960 --> 00:15:42.959
+when using the iTerm2 [ccc] terminal emulator for the Mac,
+
+00:15:42.960 --> 00:15:48.239
+and then only when the title of the window in iTerm2
+
+00:15:48.240 --> 00:15:52.439
+has this particular address,
+
+00:15:52.440 --> 00:15:55.559
+which is what appears when I've logged into
+
+00:15:55.560 --> 00:16:00.059
+the supercomputer at the University of Oklahoma.
+
+00:16:00.060 --> 00:16:03.479
+One of the commands in this file is checkjobs.
+
+00:16:03.480 --> 00:16:05.539
+It's mapped to an alias,
+
+00:16:05.540 --> 00:16:10.919
+a bash alias called cj for "check jobs",
+
+00:16:10.920 --> 00:16:17.079
+which in turn is mapped to a script called checkjobs.sh
+
+00:16:17.080 --> 00:16:20.399
+that, when it's run, returns a listing
+
+00:16:20.400 --> 00:16:23.219
+of the pending and running jobs on the supercomputer
+
+00:16:23.220 --> 00:16:26.080
+in a format that I find pleasing.
+
+00:16:26.081 --> 00:16:34.559
+This `\n` after cj, the new line character,
+
+00:16:34.560 --> 00:16:39.839
+enters the command, so I don't have to do that
+
+00:16:39.840 --> 00:16:43.799
+as an additional step. Likewise,
+
+00:16:43.800 --> 00:16:46.799
+here's a similar setup for interacting with
+
+00:16:46.800 --> 00:16:52.499
+a Ubuntu virtual machine.
+
+NOTE Recommendations
+
+00:16:52.500 --> 00:16:55.919
+In terms of picking up voice computing,
+
+00:16:55.920 --> 00:16:57.479
+these are my recommendations.
+
+00:16:57.480 --> 00:16:59.759
+You're going to run into more errors
+
+00:16:59.760 --> 00:17:01.479
+than you may like initially,
+
+00:17:01.480 --> 00:17:07.839
+and so you need some patience in dealing with those.
+
+00:17:07.840 --> 00:17:09.919
+And also, it'll take you a while
+
+00:17:09.920 --> 00:17:16.799
+to get your head wrapped around Talon and how it works.
+
+00:17:16.800 --> 00:17:19.439
+You'll definitely want to use these custom commands
+
+00:17:19.440 --> 00:17:21.479
+to correct the errors or shortcomings
+
+00:17:21.480 --> 00:17:26.919
+of the language models. And you've seen how,
+
+00:17:26.920 --> 00:17:29.879
+by opening up projects by voice commands,
+
+00:17:29.880 --> 00:17:31.359
+you can reduce friction
+
+00:17:31.360 --> 00:17:36.659
+in terms of restarting work on a project.
+
+00:17:36.660 --> 00:17:40.399
+You've seen how Voice In is preferred
+
+00:17:40.400 --> 00:17:44.879
+for more accurate dictation.
+
+00:17:44.880 --> 00:17:48.079
+I think my error rate is about 1 to 2 percent.
+
+00:17:48.080 --> 00:17:53.879
+That is, 1 to 2 out of 100 words are incorrect
+
+00:17:53.880 --> 00:17:56.319
+versus Talon Voice where I think
+
+00:17:56.320 --> 00:17:59.879
+the error rate is closer to 5 percent.
+
+00:18:00.840 --> 00:18:03.507
+I have put together [a library of English] contractions
+
+00:18:03.508 --> 00:18:04.880
+[and their expansion] for Talon [too],
+
+00:18:04.881 --> 00:18:07.479
+and they can be found here on GitHub.
+
+00:18:07.480 --> 00:18:12.959
+And I also have [posted] a quiz of 600 questions
+
+00:18:12.960 --> 00:18:17.719
+about some basic Talon commands.
+
+NOTE Acknowledgements
+
+00:18:17.720 --> 00:18:20.999
+I'd like to thank the people who've helped me out
+
+00:18:21.000 --> 00:18:22.159
+on the Talon Slack channel
+
+00:18:22.160 --> 00:18:25.799
+and members of the Oklahoma Data Science Workshop
+
+00:18:25.800 --> 00:18:29.879
+where I gave an hour-long talk on this topic
+
+00:18:29.880 --> 00:18:30.959
+several weeks ago.
+
+00:18:30.960 --> 00:18:34.159
+I'd like to thank my friends
+
+00:18:34.160 --> 00:18:37.399
+at the Berlin and Austin Emacs Meetup
+
+00:18:37.400 --> 00:18:42.659
+and at the M-x research Slack channel.
+
+00:18:42.660 --> 00:18:45.119
+And I thank these grant funding agencies
+
+00:18:45.120 --> 00:18:48.880
+for supporting my work. I'll be happy to take any questions.
diff --git a/2023/captions/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--answers.vtt b/2023/captions/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--answers.vtt
new file mode 100644
index 00000000..552148f9
--- /dev/null
+++ b/2023/captions/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--answers.vtt
@@ -0,0 +1,779 @@
+WEBVTT
+
+
+00:00:04.740 --> 00:00:05.140
+[Speaker 0]: 2 seconds. And I think we are live.
+
+00:00:05.980 --> 00:00:06.480
+Hi Yuchen, how are you doing?
+
+00:00:08.720 --> 00:00:09.220
+[Speaker 1]: I'm gonna just walk off.
+
+00:00:10.840 --> 00:00:11.120
+I'm not sure if I... Yeah,
+
+00:00:13.440 --> 00:00:13.740
+I mean, brain not working well at this
+
+00:00:14.660 --> 00:00:15.160
+moment. How about you?
+
+00:00:18.420 --> 00:00:18.760
+[Speaker 2]: Well, mine is about to get fried because
+
+00:00:21.040 --> 00:00:21.260
+EmacsConf is a very taxing process and I can
+
+00:00:24.599 --> 00:00:25.080
+tell you we could have a race to know who's
+
+00:00:26.720 --> 00:00:26.920
+more more tired right now between you and
+
+00:00:29.480 --> 00:00:29.619
+myself but I guess we'll find out at the end
+
+00:00:32.080 --> 00:00:32.580
+[Speaker 1]: All right, sounds good.
+
+00:00:34.200 --> 00:00:34.700
+[Speaker 2]: of the Q&A. And thank you for...
+
+00:00:37.760 --> 00:00:37.900
+How late or how early I should say is it for
+
+00:00:39.480 --> 00:00:39.640
+you right now? It should be like 6am or
+
+00:00:43.860 --> 00:00:44.059
+[Speaker 1]: Thanks. It's 7.45 but I normally get up at
+
+00:00:45.020 --> 00:00:45.520
+like 8.30 or something.
+
+00:00:46.560 --> 00:00:46.860
+[Speaker 2]: something? Right, okay.
+
+00:00:48.380 --> 00:00:48.880
+Well, anyway, thank you for the sacrifice
+
+00:00:50.200 --> 00:00:50.700
+just to answer some of the questions.
+
+00:00:56.160 --> 00:00:56.320
+All right, so I'll be displaying the
+
+00:00:59.180 --> 00:00:59.680
+questions. I'll be, let me just maximize this
+
+00:01:01.440 --> 00:01:01.720
+on the stream so that people can read
+
+00:01:02.280 --> 00:01:02.640
+everything on my screen.
+
+00:01:03.400 --> 00:01:03.480
+So what I'm going to do,
+
+00:01:05.340 --> 00:01:05.740
+Yuchen, as usual, I'm going to start reading
+
+00:01:06.540 --> 00:01:06.720
+the questions on the pad.
+
+00:01:12.160 --> 00:01:12.660
+I'm going to ask Sasha to open the Q&A.
+
+00:01:13.620 --> 00:01:13.940
+Yes, it's already open.
+
+00:01:15.280 --> 00:01:15.479
+Cool. So if you want to join us,
+
+00:01:19.360 --> 00:01:19.540
+people, Feel free to click on the link on the
+
+00:01:21.820 --> 00:01:21.940
+talk or on IRC to join us on BBB and to ask
+
+00:01:23.440 --> 00:01:23.560
+your questions. Otherwise just leave them on
+
+00:01:24.320 --> 00:01:24.720
+the pad. Alright, Yuchen,
+
+00:01:25.440 --> 00:01:25.940
+starting with the first question.
+
+00:01:28.260 --> 00:01:28.620
+I like the idea of using org-mode to display
+
+00:01:30.300 --> 00:01:30.640
+data from the web. Are there many different
+
+00:01:33.220 --> 00:01:33.580
+packages that do not, I assume.
+
+00:01:35.560 --> 00:01:35.720
+I'm new to Emacs, so maybe this is obvious to
+
+00:01:36.040 --> 00:01:36.540
+everyone else.
+
+00:01:43.860 --> 00:01:44.360
+[Speaker 1]: Yeah, I think so. I mean...
+
+00:01:49.240 --> 00:01:49.440
+[Speaker 2]: Yeah, I think it's a little complicated to
+
+00:01:51.480 --> 00:01:51.660
+specify what is it to display data from the
+
+00:01:53.360 --> 00:01:53.560
+web. Just reading it like this,
+
+00:01:55.900 --> 00:01:56.200
+I'm reminded of Adam, Arthur Pappa,
+
+00:01:58.260 --> 00:01:58.520
+I mean, Code All Capture Web,
+
+00:02:00.860 --> 00:02:01.060
+which technically captures the web and allows
+
+00:02:02.120 --> 00:02:02.500
+you to embed it in the page,
+
+00:02:04.280 --> 00:02:04.400
+but is it really displaying data from the
+
+00:02:06.340 --> 00:02:06.840
+web? Are we implying live transmission?
+
+00:02:07.720 --> 00:02:08.220
+Do you see what I'm talking about?
+
+00:02:10.680 --> 00:02:11.180
+[Speaker 1]: Yeah, I suspect the question is asking,
+
+00:02:17.040 --> 00:02:17.540
+like, having Emacs as a client that's sort of
+
+00:02:19.740 --> 00:02:20.240
+getting data from the web and then displays
+
+00:02:25.120 --> 00:02:25.620
+in Emacs, like using API or using web script.
+
+00:02:35.220 --> 00:02:35.440
+So yeah, like the hreader package or a few
+
+00:02:37.580 --> 00:02:38.080
+packages mentioned in my talk.
+
+00:02:39.920 --> 00:02:40.180
+Yeah, that's a good question.
+
+00:02:46.220 --> 00:02:46.720
+I mean, I really don't know how many.
+
+00:02:48.060 --> 00:02:48.560
+So from my experience,
+
+00:02:55.960 --> 00:02:56.460
+maybe I use like 10, less than 10 packages
+
+00:03:01.220 --> 00:03:01.460
+that do these things. And among these
+
+00:03:03.840 --> 00:03:04.120
+packages, maybe it's half of them are org,
+
+00:03:09.480 --> 00:03:09.980
+[Speaker 2]: So you mean half of them are org-based?
+
+00:03:10.840 --> 00:03:11.340
+Is that what you said?
+
+00:03:11.840 --> 00:03:12.340
+[Speaker 1]: half of them don't. Yeah,
+
+00:03:16.920 --> 00:03:17.420
+but that's just based on the packages I use.
+
+00:03:22.440 --> 00:03:22.940
+I haven't done a survey about this.
+
+00:03:25.520 --> 00:03:25.680
+[Speaker 2]: I think it's okay, you don't need to have all
+
+00:03:26.880 --> 00:03:27.340
+the answers. I mean, you already demonstrate
+
+00:03:29.380 --> 00:03:29.480
+a lot of competence and you talk about all
+
+00:03:31.100 --> 00:03:31.520
+the things you approach with your particular
+
+00:03:33.040 --> 00:03:33.240
+setup, So you don't need to have all the
+
+00:03:36.040 --> 00:03:36.280
+answers. Okay. All right,
+
+00:03:37.160 --> 00:03:37.660
+moving on to the next question.
+
+00:03:39.340 --> 00:03:39.720
+Have you tried EAF, i.e.
+
+00:03:41.680 --> 00:03:41.840
+The Emacs application framework and its
+
+00:03:43.940 --> 00:03:44.120
+browser? If yes, what is your opinion about
+
+00:03:44.120 --> 00:03:44.620
+it?
+
+00:03:47.520 --> 00:03:48.020
+[Speaker 1]: Oh, I haven't tried it.
+
+00:03:53.760 --> 00:03:54.260
+I try to remember why I haven't tried it.
+
+00:04:03.520 --> 00:04:04.020
+It has a browser. I assume the browser
+
+00:04:06.840 --> 00:04:07.340
+executes JavaScript by default.
+
+00:04:12.320 --> 00:04:12.820
+I have to check. Emacs.daf
+
+00:04:15.820 --> 00:04:16.320
+slash daf browser.
+
+00:04:25.520 --> 00:04:25.840
+[Speaker 2]: It's also OK if you want to have a look later
+
+00:04:27.380 --> 00:04:27.560
+and you know whenever you want to report to
+
+00:04:28.940 --> 00:04:29.220
+the pad you know you write a little blurb
+
+00:04:34.700 --> 00:04:34.860
+[Speaker 1]: Yeah sure yeah so yeah I know about EAF but I
+
+00:04:35.460 --> 00:04:35.960
+haven't tried it.
+
+00:04:38.060 --> 00:04:38.340
+[Speaker 2]: about it. Okay well that's already an answer
+
+00:04:41.400 --> 00:04:41.580
+that's cool. We're gonna move on to a
+
+00:04:42.720 --> 00:04:43.040
+question that is a little bit off topic,
+
+00:04:44.700 --> 00:04:44.860
+but I've also been interested about your
+
+00:04:47.420 --> 00:04:47.800
+nickname on IRC. This is not really relevant
+
+00:04:48.900 --> 00:04:49.340
+to the talk, quoting the question,
+
+00:04:50.400 --> 00:04:50.900
+but I'm curious about your nickname.
+
+00:04:52.020 --> 00:04:52.520
+You have some connection to Norway.
+
+00:04:54.480 --> 00:04:54.640
+Your nick indicates an interest in the
+
+00:04:56.040 --> 00:04:56.200
+architectural style inspired by the
+
+00:04:58.280 --> 00:04:58.700
+decoration on Viking ships that was popular
+
+00:05:00.460 --> 00:05:00.700
+in the early 20th century because
+
+00:05:01.880 --> 00:05:02.380
+Dragonsteel, I assume in Norwegian,
+
+00:05:04.860 --> 00:05:05.360
+is Dragon style. Are you familiar with this?
+
+00:05:10.760 --> 00:05:11.260
+[Speaker 1]: Yeah, it's just my favorite architecture
+
+00:05:15.560 --> 00:05:16.060
+style, I think. I mean,
+
+00:05:19.040 --> 00:05:19.540
+I lived in Sweden for like 2,
+
+00:05:25.900 --> 00:05:26.320
+1 half years and yeah I went to Norway once
+
+00:05:32.520 --> 00:05:33.020
+and I saw like this church in Lofoten Island,
+
+00:05:36.766 --> 00:05:36.780
+[Speaker 0]: was amazing. In Luton Island,
+
+00:05:36.820 --> 00:05:36.833
+on Luton Island. Right.
+
+00:05:36.833 --> 00:05:36.846
+[Speaker 1]: on Lofoten Island. Yeah it Yeah,
+
+00:05:40.280 --> 00:05:40.560
+it was amazing. So, yeah,
+
+00:05:43.780 --> 00:05:44.060
+that's exactly why I chose that as my
+
+00:05:46.520 --> 00:05:46.940
+nickname, because it's my favorite
+
+00:05:47.540 --> 00:05:48.040
+architecture style.
+
+00:05:51.940 --> 00:05:52.080
+[Speaker 2]: Okay, well, that was a very astute remark by
+
+00:05:54.760 --> 00:05:54.960
+the viewers, so I hope you feel validated in
+
+00:05:58.480 --> 00:05:58.660
+[Speaker 0]: assumptions. Moving on
+
+00:05:58.980 --> 00:05:59.480
+[Speaker 2]: your to another question.
+
+00:06:01.960 --> 00:06:02.360
+Yuchen, do you have any thoughts about Nixed,
+
+00:06:03.880 --> 00:06:04.380
+about its name, its approach,
+
+00:06:08.560 --> 00:06:09.060
+its relevance? About Nixed,
+
+00:06:11.500 --> 00:06:11.720
+the browser, N-Y-X-T. Oh,
+
+00:06:11.720 --> 00:06:12.220
+Nixed.
+
+00:06:17.220 --> 00:06:17.720
+[Speaker 1]: About what? Yeah, I have tried it.
+
+00:06:21.360 --> 00:06:21.860
+Well, I mean, it's not Emacs.
+
+00:06:26.140 --> 00:06:26.380
+It's kind of similar. I think it tries to do
+
+00:06:27.440 --> 00:06:27.900
+something similar to Emacs,
+
+00:06:33.860 --> 00:06:34.240
+but The problem with Nix is that very early
+
+00:06:37.180 --> 00:06:37.680
+on I encountered an issue with keybinding.
+
+00:06:43.040 --> 00:06:43.240
+So the first thing I want to do is to make
+
+00:06:44.300 --> 00:06:44.800
+all its keybindings emax-y.
+
+00:06:46.920 --> 00:06:47.420
+So that's obviously...
+
+00:06:51.200 --> 00:06:51.580
+So what was the problem?
+
+00:06:53.040 --> 00:06:53.500
+So yeah, I couldn't even do that.
+
+00:06:56.120 --> 00:06:56.620
+I thought, I was expecting that it could...
+
+00:07:02.660 --> 00:07:02.860
+There shouldn't be any issues with setting up
+
+00:07:03.960 --> 00:07:04.440
+whatever key binding you want.
+
+00:07:08.680 --> 00:07:09.180
+So I, the, the issue was that when I tried to
+
+00:07:15.400 --> 00:07:15.660
+do when I tried to bind Ctrl S Ctrl R to the
+
+00:07:17.380 --> 00:07:17.600
+prompt going up and down,
+
+00:07:22.900 --> 00:07:23.140
+so I use I was I complete and I'm used to
+
+00:07:26.760 --> 00:07:27.260
+like the control S and control R to go,
+
+00:07:28.980 --> 00:07:29.480
+to cycle through the selections.
+
+00:07:35.560 --> 00:07:35.760
+And so I want it the same in next in its
+
+00:07:38.460 --> 00:07:38.960
+prompt like when, for example,
+
+00:07:43.620 --> 00:07:44.120
+typing a URL and get completion from history.
+
+00:07:48.900 --> 00:07:49.400
+But it has a conflict with the...
+
+00:07:55.680 --> 00:07:56.180
+And also, I try to bind the hint.
+
+00:08:00.440 --> 00:08:00.940
+So when I want to follow a link,
+
+00:08:05.800 --> 00:08:06.300
+So I press a hint key and then like all these
+
+00:08:10.120 --> 00:08:10.320
+links are highlighted with like little
+
+00:08:13.660 --> 00:08:13.860
+letters that I can like choose which 1 I want
+
+00:08:14.820 --> 00:08:15.320
+which link I want to follow.
+
+00:08:20.140 --> 00:08:20.640
+So I try to bind that 1 to J sort of like
+
+00:08:23.560 --> 00:08:24.060
+Control C, Control J, or mode.
+
+00:08:28.780 --> 00:08:29.180
+But apparently there's a conflict here.
+
+00:08:33.320 --> 00:08:33.820
+So when I do both these prompt mode binding
+
+00:08:36.260 --> 00:08:36.760
+and the document mode binding,
+
+00:08:39.960 --> 00:08:40.460
+Yeah, the prompt no longer works.
+
+00:08:43.840 --> 00:08:44.340
+And I reported the bug to Nixt.
+
+00:08:50.500 --> 00:08:50.600
+And yeah, and there was response but there
+
+00:08:52.580 --> 00:08:53.000
+are so many bugs there,
+
+00:08:55.640 --> 00:08:55.940
+and I don't think that bug is very high
+
+00:09:00.540 --> 00:09:00.860
+priority. So yeah, I basically stopped trying
+
+00:09:03.500 --> 00:09:03.660
+that because key mining is very important to
+
+00:09:07.600 --> 00:09:08.100
+[Speaker 2]: Right, but, sorry, please finish.
+
+00:09:15.620 --> 00:09:15.740
+[Speaker 1]: me. Yeah, so I mean, yeah,
+
+00:09:17.320 --> 00:09:17.820
+without key bindings I can't like,
+
+00:09:23.940 --> 00:09:24.440
+I won't. So, okay, I feel this is a very
+
+00:09:29.280 --> 00:09:29.440
+basic functionality. I'm kind of reluctant to
+
+00:09:31.220 --> 00:09:31.560
+[Speaker 2]: Without key bindings, they are.
+
+00:09:32.020 --> 00:09:32.520
+[Speaker 1]: continue trying what These are pieces.
+
+00:09:34.200 --> 00:09:34.540
+[Speaker 2]: It reminds me of 2 points.
+
+00:09:35.840 --> 00:09:36.100
+So yesterday with Stefan we were talking
+
+00:09:37.540 --> 00:09:37.860
+about sane defaults and when he was sleeping
+
+00:09:39.440 --> 00:09:39.600
+today we talked about it again with a
+
+00:09:41.400 --> 00:09:41.900
+speaker. We did the mentor talk.
+
+00:09:43.020 --> 00:09:43.520
+Feel free to re-watch it afterwards.
+
+00:09:48.320 --> 00:09:48.440
+But it's funny how, you know,
+
+00:09:50.920 --> 00:09:51.360
+regardless of how big the package actually
+
+00:09:54.520 --> 00:09:54.820
+is, they always provide some kind of sane
+
+00:09:55.640 --> 00:09:55.960
+default and with Nixed,
+
+00:09:58.620 --> 00:09:59.120
+obviously, it's built with a Vim mentality
+
+00:10:02.020 --> 00:10:02.520
+and modality of key bindings.
+
+00:10:05.860 --> 00:10:06.060
+And for us, we are more used to the Emacs way
+
+00:10:08.040 --> 00:10:08.540
+of doing things. It's a complete blocker.
+
+00:10:10.320 --> 00:10:10.560
+No matter how great the pieces of
+
+00:10:12.280 --> 00:10:12.780
+functionality behind Nixed are,
+
+00:10:15.060 --> 00:10:15.300
+just the fact that UX-wise we cannot get into
+
+00:10:18.220 --> 00:10:18.340
+it or we cannot have it behave nicely with
+
+00:10:20.280 --> 00:10:20.440
+what we do. It's a massive block that is
+
+00:10:22.040 --> 00:10:22.540
+preventing appropriation of such tools.
+
+00:10:25.940 --> 00:10:26.040
+So it might seem very basic to bounce a
+
+00:10:28.300 --> 00:10:28.800
+package at the level of key bindings but
+
+00:10:29.620 --> 00:10:30.120
+that's what we all do.
+
+00:10:32.800 --> 00:10:33.300
+[Speaker 1]: Yeah, I totally agree.
+
+00:10:36.180 --> 00:10:36.600
+[Speaker 2]: Right, if I can just interrupt,
+
+00:10:38.520 --> 00:10:38.680
+we have about 2 more minutes of questions and
+
+00:10:40.940 --> 00:10:41.320
+I see people are writing more questions.
+
+00:10:42.180 --> 00:10:42.440
+Did you want to add something,
+
+00:10:43.780 --> 00:10:44.280
+Yucheng? On what we're saying?
+
+00:10:47.620 --> 00:10:48.120
+[Speaker 1]: No, no, no, Let's continue.
+
+00:10:51.340 --> 00:10:51.660
+[Speaker 2]: had plenty of time. Okay,
+
+00:10:53.100 --> 00:10:53.260
+I'm going to ask you to be quick about this
+
+00:10:53.860 --> 00:10:54.060
+1. I'm going to read the question,
+
+00:10:54.620 --> 00:10:54.840
+which is slightly long,
+
+00:10:56.320 --> 00:10:56.400
+and you're going to have about 30 seconds to
+
+00:10:57.720 --> 00:10:58.220
+answer it. Do you feel capable of this?
+
+00:10:59.860 --> 00:11:00.360
+[Speaker 1]: I thought we Yeah, let's try it.
+
+00:11:02.860 --> 00:11:03.360
+[Speaker 2]: Let's try it. At least try it.
+
+00:11:05.208 --> 00:11:05.352
+Okay, so quoting, I find the JavaScript trap
+
+00:11:06.680 --> 00:11:06.820
+almost impossible to avoid since I like to
+
+00:11:10.360 --> 00:11:10.860
+buy used stuff online and use my online bank.
+
+00:11:13.140 --> 00:11:13.460
+How do you deal with a JavaScript trap?
+
+00:11:15.400 --> 00:11:15.640
+I use NoScript and compromise on a few things
+
+00:11:16.760 --> 00:11:17.260
+I really feel I cannot live without.
+
+00:11:19.080 --> 00:11:19.440
+EWW is nice for a lot of things,
+
+00:11:21.260 --> 00:11:21.660
+especially with R for less noise,
+
+00:11:23.760 --> 00:11:24.220
+but I need Firefox for those GS and trapped
+
+00:11:25.760 --> 00:11:26.260
+pages. So do you have a quick answer to this?
+
+00:11:29.500 --> 00:11:29.800
+[Speaker 1]: Yeah, I don't have a good answer,
+
+00:11:30.640 --> 00:11:31.140
+but I have a quick answer.
+
+00:11:38.140 --> 00:11:38.640
+So I use VPN and like a more,
+
+00:11:41.680 --> 00:11:42.180
+what do you call it, move out the Swedish VPN
+
+00:11:43.480 --> 00:11:43.980
+browser, move out browser.
+
+00:11:48.960 --> 00:11:49.160
+Yeah, so I unfortunately I have to use
+
+00:11:50.660 --> 00:11:50.980
+JavaScript in these cases as well,
+
+00:11:53.800 --> 00:11:54.020
+but I try to minimize the use of these
+
+00:11:54.020 --> 00:11:54.520
+things.
+
+00:11:56.920 --> 00:11:57.040
+[Speaker 2]: How long do you think it will take for us to
+
+00:11:58.140 --> 00:11:58.480
+save the world with Emacs,
+
+00:11:59.340 --> 00:11:59.760
+or save the web at least?
+
+00:12:01.360 --> 00:12:01.560
+5 years, 10 years, maybe a little less than
+
+00:12:01.560 --> 00:12:02.060
+this?
+
+00:12:06.600 --> 00:12:07.000
+[Speaker 1]: Well I think it's, unfortunately it's
+
+00:12:08.300 --> 00:12:08.800
+probably independent of Emacs,
+
+00:12:12.180 --> 00:12:12.680
+like it will only be saved when,
+
+00:12:14.860 --> 00:12:14.970
+like it's saved on like the normal,
+
+00:12:18.960 --> 00:12:19.460
+the more popular browsers like Firefox.
+
+00:12:23.680 --> 00:12:24.060
+I have no clue how long it will take for,
+
+00:12:25.120 --> 00:12:25.620
+I don't know, for example,
+
+00:12:28.660 --> 00:12:29.140
+Tala to pick up so that you can buy things
+
+00:12:30.020 --> 00:12:30.520
+without running JavaScript.
+
+00:12:33.220 --> 00:12:33.340
+[Speaker 2]: Right. Well, I guess we'll have to cross our
+
+00:12:35.380 --> 00:12:35.740
+fingers then for Firefox to save the world.
+
+00:12:37.260 --> 00:12:37.500
+All right Yuchen, we're about out of time,
+
+00:12:38.800 --> 00:12:39.080
+we're moving on to the next talk in 20
+
+00:12:40.200 --> 00:12:40.360
+seconds. Thank you so much for your
+
+00:12:41.940 --> 00:12:42.100
+presentation and for waking up early and
+
+00:12:42.540 --> 00:12:42.780
+answering the question,
+
+00:12:44.820 --> 00:12:45.060
+and I can tell you, you were very alert and
+
+00:12:47.020 --> 00:12:47.520
+definitely more energetic than I was.
+
+00:12:52.600 --> 00:12:53.100
+All right, see you later.
+
+00:12:53.940 --> 00:12:54.440
+[Speaker 1]: Thank you. See you.
+
+00:12:58.400 --> 00:12:58.900
+[Speaker 2]: Bye. And we go to the next talk right now.
+
+00:13:02.620 --> 00:13:03.120
+[Speaker 0]: You are currently
+
+00:13:15.260 --> 00:13:15.760
+you
diff --git a/2023/captions/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--main--chapters.vtt b/2023/captions/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--main--chapters.vtt
new file mode 100644
index 00000000..f94dbab5
--- /dev/null
+++ b/2023/captions/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--main--chapters.vtt
@@ -0,0 +1,38 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:35.679
+Overview
+
+00:00:35.680 --> 00:05:31.939
+Background problems
+
+00:05:31.940 --> 00:09:46.380
+Solutions outside of Emacs
+
+00:09:46.480 --> 00:09:54.599
+Emacs solutions
+
+00:09:54.600 --> 00:12:43.020
+Free clients in Emacs
+
+00:12:43.021 --> 00:16:52.379
+Web browsers in Emacs
+
+00:16:52.380 --> 00:17:30.379
+emacs-web-server - overview
+
+00:17:30.380 --> 00:18:17.579
+emacs-web-server - hello emacs!
+
+00:18:17.580 --> 00:23:06.439
+emacs-web-server - yolo
+
+00:23:07.940 --> 00:29:40.419
+emacs-web-server - emacs web framework
+
+00:29:40.420 --> 00:31:25.359
+Firefox with emacs for extensions
+
+00:31:25.360 --> 00:31:31.440
+Thank you
diff --git a/2023/captions/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--main.vtt b/2023/captions/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--main.vtt
new file mode 100644
index 00000000..60bafffd
--- /dev/null
+++ b/2023/captions/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--main.vtt
@@ -0,0 +1,1629 @@
+WEBVTT captioned by ken, checked by sachac
+
+NOTE Overview
+
+00:00:00.000 --> 00:00:03.199
+Hello, I am Yuchen, and I will be talking about
+
+00:00:03.200 --> 00:00:06.839
+how Emacs may be used to save user freedom on the web.
+
+00:00:06.840 --> 00:00:09.679
+I will begin by describing the background issues,
+
+00:00:09.680 --> 00:00:12.359
+followed by solutions outside of Emacs.
+
+00:00:12.360 --> 00:00:14.879
+Then I will move into the main business of describing
+
+00:00:14.880 --> 00:00:17.799
+several ways to address the issues using Emacs,
+
+00:00:17.800 --> 00:00:20.599
+including free clients in Emacs, web browsers,
+
+00:00:20.600 --> 00:00:23.399
+also known as universal clients in Emacs,
+
+00:00:23.400 --> 00:00:27.119
+approaches using Emacs web server and Emacs web framework,
+
+00:00:27.120 --> 00:00:29.319
+which allows one to write an Emacs package
+
+00:00:29.320 --> 00:00:30.759
+and get a web app for free,
+
+00:00:30.760 --> 00:00:35.679
+as well as using Emacs as a Firefox extension.
+
+NOTE Background problems
+
+00:00:35.680 --> 00:00:37.159
+OK, let's now move on to
+
+00:00:37.160 --> 00:00:39.559
+the background issues for this topic.
+
+00:00:39.560 --> 00:00:42.639
+Many of you probably already know what is free software.
+
+00:00:42.640 --> 00:00:45.480
+It is software that respects four user freedoms,
+
+00:00:45.481 --> 00:00:48.999
+including freedom 0, which is the freedom to use,
+
+00:00:49.000 --> 00:00:52.179
+freedom 1 is the freedom to study and modify a program,
+
+00:00:52.279 --> 00:00:53.988
+freedom 2 is the freedom to
+
+00:00:54.488 --> 00:00:57.239
+distribute exact copies of a program,
+
+00:00:57.240 --> 00:01:01.679
+and freedom 3 is the freedom to distribute modified copies.
+
+00:01:01.680 --> 00:01:04.039
+Different environments have different norms
+
+00:01:04.040 --> 00:01:06.819
+with regards to user freedom.
+
+00:01:06.820 --> 00:01:11.239
+For example, GNU/Linux distributions
+
+00:01:11.240 --> 00:01:13.439
+default to free software,
+
+00:01:13.440 --> 00:01:15.519
+even though the official kernel Linux
+
+00:01:15.520 --> 00:01:18.419
+contains non-free code, like non-free firmware.
+
+00:01:18.420 --> 00:01:23.059
+What I mean is, people generally expect free software
+
+00:01:23.060 --> 00:01:25.759
+in these environments.
+
+00:01:25.760 --> 00:01:27.359
+There's plenty of free software
+
+00:01:27.360 --> 00:01:29.039
+built on other free software,
+
+00:01:29.040 --> 00:01:31.219
+so generally people can accomplish tasks
+
+00:01:31.220 --> 00:01:33.599
+using free software only.
+
+00:01:33.600 --> 00:01:37.279
+Emacs, by comparison, is even better.
+
+00:01:37.280 --> 00:01:41.219
+It has freedom built-in, as it is highly customizable
+
+00:01:41.220 --> 00:01:44.679
+with self-documenting configurations.
+
+00:01:44.680 --> 00:01:49.599
+When a Lisp form is evaluated by the user in Emacs,
+
+00:01:49.600 --> 00:01:53.159
+the change is instantly reflected in the environment.
+
+00:01:53.160 --> 00:01:56.719
+Thus, it converts users to hackers effortlessly.
+
+00:01:56.720 --> 00:01:58.439
+From writing setq statements,
+
+00:01:58.440 --> 00:02:00.639
+which is similar to configurations
+
+00:02:00.640 --> 00:02:01.959
+in the majority of other programs,
+
+00:02:01.960 --> 00:02:03.399
+to writing functions,
+
+00:02:03.400 --> 00:02:05.439
+which are building blocks of Elisp features,
+
+00:02:05.440 --> 00:02:08.139
+to writing features and publishing packages,
+
+00:02:08.140 --> 00:02:09.799
+it is a natural progression.
+
+00:02:10.099 --> 00:02:15.039
+In this sense, Emacs perhaps has
+
+00:02:15.040 --> 00:02:18.839
+the most gentle learning curve for hackers.
+
+00:02:18.840 --> 00:02:21.099
+On the other hand, the default license
+
+00:02:21.100 --> 00:02:22.599
+in the Emacs community
+
+00:02:22.600 --> 00:02:26.100
+is GNU General Public License version 3 or later,
+
+00:02:26.200 --> 00:02:29.039
+which is the best free software license
+
+00:02:29.040 --> 00:02:32.299
+apart from the Affero license.
+
+00:02:32.300 --> 00:02:35.019
+Now let's move on to web browsers,
+
+00:02:35.020 --> 00:02:39.239
+which by contrast does not default to freedom.
+
+00:02:39.240 --> 00:02:42.199
+For one thing, free software JavaScript projects
+
+00:02:42.200 --> 00:02:45.779
+default to Expat license,
+
+00:02:45.780 --> 00:02:49.399
+which is also commonly known as the MIT license,
+
+00:02:49.400 --> 00:02:53.279
+which is a lax permissive license that could be exploited
+
+00:02:53.280 --> 00:02:55.919
+as developers could write non-free derivatives
+
+00:02:55.920 --> 00:02:59.679
+and subjugate user freedom.
+
+00:02:59.680 --> 00:03:03.159
+This also contributes to the JavaScript trap.
+
+00:03:03.160 --> 00:03:06.719
+Most popular web browsers nowadays simply download and run
+
+00:03:06.720 --> 00:03:10.819
+any JavaScript code requested by the web page.
+
+00:03:10.820 --> 00:03:15.319
+Generally speaking, there are two camps on this issue.
+
+00:03:15.320 --> 00:03:19.039
+One side would say JavaScript is simply part of life,
+
+00:03:19.040 --> 00:03:22.039
+and an integral part of the so-called modern web.
+
+00:03:22.040 --> 00:03:25.299
+Just accept it, and there is no point in fighting it.
+
+00:03:25.300 --> 00:03:28.288
+Indeed, it can be frustrating when greeted by
+
+00:03:28.388 --> 00:03:31.799
+"This page requires JavaScript and cookies to continue,"
+
+00:03:31.800 --> 00:03:34.719
+or even a blank page when opening a web page
+
+00:03:34.720 --> 00:03:38.439
+while disabling JavaScript.
+
+00:03:38.440 --> 00:03:42.159
+The other camp takes a more principled position
+
+00:03:42.160 --> 00:03:44.839
+and says JavaScript is unnecessary.
+
+00:03:44.840 --> 00:03:47.279
+I mean, people use the web mainly for
+
+00:03:47.280 --> 00:03:48.519
+database-like operations
+
+00:03:48.520 --> 00:03:51.679
+to interact with data stored on other people's computers,
+
+00:03:51.680 --> 00:03:55.359
+like querying, creating, updating, deleting.
+
+00:03:55.360 --> 00:03:58.959
+I mean, 99% of the things happen in getting data,
+
+00:03:58.960 --> 00:04:01.239
+including reading news, watching videos,
+
+00:04:01.240 --> 00:04:03.339
+downloading images, etc.,
+
+00:04:03.340 --> 00:04:06.079
+and posting data, including publishing
+
+00:04:06.080 --> 00:04:10.479
+this sort of materials, publishing news comments, videos.
+
+00:04:10.480 --> 00:04:12.399
+Why does this need any programs
+
+00:04:12.400 --> 00:04:16.199
+to do funny computations, right?
+
+00:04:16.200 --> 00:04:18.980
+Modern web browsers are also a pain to use.
+
+00:04:19.080 --> 00:04:20.980
+They are the opposite to Emacs
+
+00:04:21.080 --> 00:04:26.759
+in terms of customization capabilities.
+
+00:04:26.760 --> 00:04:29.359
+Such problems on the client side
+
+00:04:29.360 --> 00:04:31.919
+is the main focus of this talk.
+
+00:04:31.920 --> 00:04:34.319
+On the server side, the issue is known as SaaSS,
+
+00:04:34.320 --> 00:04:38.460
+service as a software substitute.
+
+00:04:38.760 --> 00:04:42.420
+It is about doing computing for users
+
+00:04:42.421 --> 00:04:44.540
+on other people's computers,
+
+00:04:44.541 --> 00:04:48.439
+which the user has no visibility, let alone control.
+
+00:04:48.440 --> 00:04:51.940
+Examples include translation or photo editing
+
+00:04:51.941 --> 00:04:55.359
+in so-called web applications.
+
+00:04:55.360 --> 00:04:59.919
+Another example would be web applications
+
+00:04:59.920 --> 00:05:02.159
+make recommendations based on user data
+
+00:05:02.160 --> 00:05:05.959
+and suggest what the users read or watch next.
+
+00:05:05.960 --> 00:05:09.959
+On the one hand, SaaSS is an intractable problem
+
+00:05:09.960 --> 00:05:11.799
+because free software is all about user freedom
+
+00:05:11.800 --> 00:05:13.759
+on one's own computer,
+
+00:05:13.760 --> 00:05:16.079
+not someone else's computer.
+
+00:05:16.080 --> 00:05:18.780
+On the other hand, this is also a lesser problem
+
+00:05:18.880 --> 00:05:21.599
+because it has trivial solutions,
+
+00:05:21.600 --> 00:05:25.839
+which is self-hosting and keeping computations local.
+
+00:05:25.840 --> 00:05:28.679
+Wouldn't it be nice to use a photo editing web application,
+
+00:05:28.680 --> 00:05:31.939
+but without the web?
+
+NOTE Solutions outside of Emacs
+
+00:05:31.940 --> 00:05:36.400
+Right, now let's move on to solutions outside of Emacs
+
+00:05:36.401 --> 00:05:39.039
+that tackle these problems.
+
+00:05:39.040 --> 00:05:42.959
+There are generally two ways to fix this issue.
+
+00:05:42.960 --> 00:05:45.399
+One is blocking non-free JavaScript,
+
+00:05:45.400 --> 00:05:48.979
+and the other is substituting with free programs.
+
+00:05:48.980 --> 00:05:50.439
+Let's start with blocking.
+
+00:05:50.440 --> 00:05:54.859
+LibreJS, for example, is a Firefox extension
+
+00:05:54.860 --> 00:05:56.919
+blocking non-free, non-trivial JavaScript.
+
+00:05:56.920 --> 00:05:59.820
+It works by intercepting, filtering
+
+00:05:59.821 --> 00:06:01.759
+all requests for JavaScript,
+
+00:06:01.760 --> 00:06:05.599
+recognizing the ones that are trivial or free,
+
+00:06:05.600 --> 00:06:10.999
+and blocking the execution of the others.
+
+00:06:11.000 --> 00:06:13.879
+As an experiment, I logged the LibreJS output
+
+00:06:13.880 --> 00:06:15.559
+for about two weeks,
+
+00:06:15.560 --> 00:06:19.739
+and during which, of all the web pages I loaded,
+
+00:06:19.740 --> 00:06:25.000
+23 domains have at least some LibreJS-compliant scripts.
+
+00:06:25.001 --> 00:06:28.679
+That is not much, though I did use other means
+
+00:06:28.680 --> 00:06:30.819
+to reduce the scenarios
+
+00:06:30.920 --> 00:06:35.399
+where I need to load web pages with JavaScript in Firefox,
+
+00:06:35.400 --> 00:06:40.719
+like using a text browser like Lynx.
+
+00:06:40.720 --> 00:06:44.239
+Then there's also NoScript, which is like LibreJS,
+
+00:06:44.240 --> 00:06:49.499
+but it blocks all scripts, whether free or non-free,
+trivial or non-trivial.
+
+00:06:49.500 --> 00:06:54.359
+So the problem with blocking is that
+
+00:06:54.360 --> 00:06:57.559
+blocking with certain scripts and accepting others,
+
+00:06:57.560 --> 00:07:00.579
+there are like... I can think of two problems.
+
+00:07:00.679 --> 00:07:02.779
+One is that it does not help with Freedom 1,
+
+00:07:02.879 --> 00:07:07.959
+which is the freedom to allow users to modify a program
+
+00:07:07.960 --> 00:07:13.079
+and use it in place of the original program.
+
+00:07:13.080 --> 00:07:15.839
+And also it does not help
+
+00:07:15.840 --> 00:07:18.859
+when the non-free JavaScript is mandatory
+
+00:07:18.860 --> 00:07:20.719
+for the functioning of the web page.
+
+00:07:20.720 --> 00:07:22.839
+For example, some pages are blank
+
+00:07:22.840 --> 00:07:27.079
+when non-free JavaScript is not executed.
+
+00:07:27.080 --> 00:07:35.180
+So now let's move on to the substitution, the other method.
+
+00:07:36.280 --> 00:07:38.919
+Let's start with userscript.
+
+00:07:38.920 --> 00:07:41.760
+It is a script, it is a user-specified JavaScript
+
+00:07:41.761 --> 00:07:43.039
+injected to a web page.
+
+00:07:43.040 --> 00:07:48.480
+A typical example of userscript tool is GreaseMonkey.
+
+00:07:48.481 --> 00:07:53.159
+Another idea is a proxy that replaces scripts in place,
+
+00:07:53.160 --> 00:07:55.819
+that is, sending user-specified scripts
+
+00:07:55.919 --> 00:08:00.899
+as a response to requests for such scripts.
+
+00:08:00.900 --> 00:08:04.759
+So one example would be Haketilo, however you pronounce it.
+
+00:08:04.760 --> 00:08:09.619
+It's a tool that's built on top of mitmproxy.
+
+00:08:09.620 --> 00:08:11.719
+It is supposed to do this.
+
+00:08:11.720 --> 00:08:14.599
+I haven't used GreaseMonkey nor Haketilo
+
+00:08:14.600 --> 00:08:16.599
+for these purposes yet,
+
+00:08:16.600 --> 00:08:20.779
+so I can't say much about these options.
+
+00:08:20.780 --> 00:08:24.359
+So then there are also free clients
+
+00:08:24.360 --> 00:08:26.479
+which replace the whole frontend,
+
+00:08:26.480 --> 00:08:30.660
+instead of a script requested by web pages
+
+00:08:30.661 --> 00:08:32.499
+from the official web clients.
+
+00:08:32.500 --> 00:08:37.359
+People often refer to them as alternative frontend.
+
+00:08:37.360 --> 00:08:39.359
+YouTube is perhaps the best example
+
+00:08:39.360 --> 00:08:41.279
+as there are so many free clients,
+
+00:08:41.280 --> 00:08:43.621
+including Invidious for the web,
+
+00:08:43.622 --> 00:08:46.239
+youtube-dl and yt-dlp on the command line,
+
+00:08:46.240 --> 00:08:50.279
+MPV and VLC as GUI desktop, LibreTube
+
+00:08:50.280 --> 00:08:53.259
+and NewPipe for Android and so on.
+
+00:08:53.260 --> 00:08:56.759
+Youtube-dl and yt-dlp are especially versatile
+
+00:08:56.760 --> 00:08:59.459
+as they work with many video and audio sites
+
+00:08:59.460 --> 00:09:02.520
+with extractors written in Python,
+
+00:09:02.620 --> 00:09:06.299
+so people can add extractors like extensions.
+
+00:09:06.300 --> 00:09:09.421
+A similar tool would be woob,
+
+00:09:09.422 --> 00:09:12.739
+short for web outside of the browsers.
+
+00:09:12.740 --> 00:09:16.820
+It is a command-line and GUI program
+
+00:09:16.920 --> 00:09:23.199
+that interacts with many web services, even banks.
+
+00:09:23.200 --> 00:09:25.839
+And there are browser extensions
+
+00:09:25.840 --> 00:09:28.859
+that automatically redirect to these clients.
+
+00:09:28.860 --> 00:09:31.639
+For example, Redirector and Libredirect
+
+00:09:31.640 --> 00:09:35.199
+redirect to the free web clients.
+
+00:09:35.200 --> 00:09:39.699
+One could use OpenWith, another extension,
+
+00:09:39.700 --> 00:09:42.159
+to redirect to free non-web clients,
+
+00:09:42.160 --> 00:09:46.380
+for example by opening YouTube links with MPV.
+
+NOTE Emacs solutions
+
+00:09:46.480 --> 00:09:50.999
+Now let us move to Emacs-based solutions.
+
+00:09:51.000 --> 00:09:54.599
+They are based on the same ideas but using Emacs.
+
+NOTE Free clients in Emacs
+
+00:09:54.600 --> 00:09:57.479
+First, free clients in Emacs.
+
+00:09:57.480 --> 00:10:00.639
+Basically alternative frontends written in Elisp.
+
+00:10:00.640 --> 00:10:03.359
+There are several advantages.
+
+00:10:03.360 --> 00:10:06.199
+For example, integration with other Emacs tools,
+
+00:10:06.200 --> 00:10:09.559
+good for archiving, making use of Emacs libraries,
+
+00:10:09.560 --> 00:10:12.488
+extensibility, thanks to Emacs' own
+
+00:10:12.489 --> 00:10:14.900
+extensibility and customizability.
+
+00:10:15.000 --> 00:10:18.619
+Examples include mastodon.el for mastodon,
+
+00:10:18.620 --> 00:10:22.679
+or mastorg for viewing and archiving toots with org,
+
+00:10:22.680 --> 00:10:28.899
+sx for Stack Exchange, buildbot.el for buildbot, etc.
+
+00:10:28.900 --> 00:10:31.900
+Here's an example of mastorg displaying
+
+00:10:31.901 --> 00:10:34.420
+the hierarchy of a toot in org.
+
+00:10:34.520 --> 00:10:39.820
+Just wait. Right.
+
+00:10:39.920 --> 00:10:43.900
+So this is the toot itself, this is a first reply,
+
+00:10:44.000 --> 00:10:48.479
+this is a reply to the reply, and so on.
+
+00:10:48.480 --> 00:10:53.079
+And here is an example of
+
+00:10:53.080 --> 00:11:05.719
+opening a Stack Exchange link using sx.
+
+00:11:05.720 --> 00:11:07.020
+Let's check out the tag.
+
+00:11:11.120 --> 00:11:28.399
+So we can browse the Stack Exchange Emacs site
+with ease.
+
+00:11:28.400 --> 00:11:31.079
+The idea is quite simple.
+
+00:11:31.080 --> 00:11:35.620
+Just use APIs to get data and display it in Emacs,
+
+00:11:35.720 --> 00:11:40.819
+or just to scrape, like requesting HTML and processing it.
+
+00:11:40.820 --> 00:11:42.079
+An example of scraping is hnreader,
+
+00:11:44.180 --> 00:11:47.199
+which scrapes Hacker News web pages
+
+00:11:47.299 --> 00:11:49.779
+and renders them in Org buffers.
+
+00:11:49.780 --> 00:11:52.379
+Here's how hnreader fetches
+
+00:11:52.380 --> 00:11:56.319
+and displays the Hacker News front page.
+
+00:11:58.520 --> 00:12:03.999
+And one could go into the comments,
+
+00:12:04.000 --> 00:12:09.159
+which shows a similar hierarchy to mastorg's output.
+
+00:12:14.360 --> 00:12:19.000
+And of course, there are limitations for this method,
+
+00:12:19.001 --> 00:12:22.539
+which is not limited to Emacs.
+
+00:12:22.540 --> 00:12:24.521
+There are basically limitations
+
+00:12:24.522 --> 00:12:28.419
+to any ad hoc bespoke clients,
+
+00:12:28.420 --> 00:12:31.519
+which is catch-up games with remote server,
+
+00:12:31.520 --> 00:12:34.559
+which may change the API interface endpoints
+
+00:12:34.560 --> 00:12:37.539
+or even structure of the responses.
+
+00:12:37.540 --> 00:12:43.020
+This brings us to web browsers in Emacs.
+
+NOTE Web browsers in Emacs
+
+00:12:43.021 --> 00:12:45.159
+Web browsers are universal clients
+
+00:12:45.160 --> 00:12:47.199
+because all sites support browsers.
+
+00:12:47.200 --> 00:12:48.919
+So in a world of no JavaScript,
+
+00:12:48.920 --> 00:12:52.739
+there will be no need to write bespoke clients.
+
+00:12:52.740 --> 00:12:53.479
+In such a world,
+
+00:12:53.480 --> 00:12:56.739
+instead of using JavaScript code to fetch JSON,
+
+00:12:56.740 --> 00:13:00.119
+web developers make server do the heavy lifting
+
+00:13:00.120 --> 00:13:02.859
+and just send the complete HTML over.
+
+00:13:02.860 --> 00:13:05.479
+Okay, back to reality.
+
+00:13:05.480 --> 00:13:07.659
+EWW, the default Emacs browser,
+
+00:13:07.660 --> 00:13:11.379
+is what people refer to as a text browser,
+
+00:13:11.380 --> 00:13:16.899
+even though it is not text only and it supports images too.
+
+00:13:16.900 --> 00:13:20.679
+It is a good solid browser that supports forms, etc.
+
+00:13:20.680 --> 00:13:24.079
+The downside is that it does not support CSS,
+
+00:13:24.080 --> 00:13:28.159
+so the formatting could be a bit ugly sometimes.
+
+00:13:28.160 --> 00:13:30.119
+There are some other browsers in Emacs too,
+
+00:13:30.120 --> 00:13:34.279
+like emacs-w3m, which is backed by w3m,
+
+00:13:34.280 --> 00:13:36.439
+and Luwak, which is backed by Lynx.
+
+00:13:36.440 --> 00:13:39.099
+Sorry for the naming, by the way.
+
+00:13:39.100 --> 00:13:41.519
+They often consist of a backend
+
+00:13:41.520 --> 00:13:44.879
+that fetches URL and parses HTML.
+
+00:13:44.880 --> 00:13:47.199
+For example, the built-in URL package
+
+00:13:47.200 --> 00:13:50.599
+and the libxml2 binding in Emacs are decent enough.
+
+00:13:50.600 --> 00:13:53.188
+And the frontend that renders the HTML,
+
+00:13:53.189 --> 00:13:56.599
+like shr or lynx, etc.
+
+00:13:56.699 --> 00:14:04.739
+There is also an xwidget-webkit,
+
+00:14:04.740 --> 00:14:07.759
+but this browser executes JavaScript,
+
+00:14:07.760 --> 00:14:10.539
+so it does not really help in this case.
+
+00:14:10.540 --> 00:14:14.239
+Browser extensions on Emacs are effortless,
+
+00:14:14.240 --> 00:14:17.459
+as they can be written as Emacs packages.
+
+00:14:17.460 --> 00:14:19.279
+For example, one could easily write
+
+00:14:19.280 --> 00:14:21.959
+Elisp scripts with similar functionalities
+
+00:14:21.960 --> 00:14:24.921
+to libredirect and openwith
+
+00:14:24.922 --> 00:14:29.881
+to redirect links, to rewrite URLs,
+
+00:14:30.181 --> 00:14:36.860
+or to open, say, a YouTube URL with MPV,
+
+00:14:37.061 --> 00:14:39.700
+but with even more flexibility.
+
+00:14:39.800 --> 00:14:41.779
+For example, here's how one could
+
+00:14:41.780 --> 00:14:44.839
+transform a Zoom link to a dial-in number
+
+00:14:44.840 --> 00:14:47.479
+so that it is easier to join a Zoom meeting
+
+00:14:47.480 --> 00:14:50.359
+without running non-free JavaScript.
+
+00:14:50.360 --> 00:14:53.039
+This might still be bad for privacy,
+
+00:14:53.040 --> 00:14:55.999
+but at least it's good for freedom.
+
+00:14:58.699 --> 00:15:00.279
+As mentioned before,
+
+00:15:00.379 --> 00:15:03.919
+one shortcoming of these Emacs-based browsers,
+
+00:15:03.920 --> 00:15:08.079
+Emacs web browsers, is no support for CSS,
+
+00:15:08.080 --> 00:15:11.319
+so the formatting could leave a lot to be desired.
+
+00:15:11.320 --> 00:15:12.959
+Maybe someone would write
+
+00:15:12.960 --> 00:15:17.159
+an Emacs browser package backed by wkhtmltopdf,
+
+00:15:17.160 --> 00:15:20.639
+which, when opening a URL,
+
+00:15:20.640 --> 00:15:26.380
+it calls wkhtmltopdf to convert the web page to PDF
+
+00:15:26.480 --> 00:15:29.540
+and opens in, say, pdf-view-mode of the pdf-tools,
+
+00:15:29.640 --> 00:15:31.039
+thus containing formatting,
+
+00:15:31.040 --> 00:15:33.999
+and all the URL clicks resolve to the same actions.
+
+00:15:34.000 --> 00:15:42.399
+Also, wkhtmltopdf contains a flag that disables JavaScript.
+
+00:15:43.300 --> 00:15:45.239
+Another idea would be to use Firefox
+
+00:15:45.240 --> 00:15:49.679
+as a processor to fetch URLs.
+
+00:15:50.280 --> 00:15:54.559
+Maybe it can be used to pass back the HTML
+
+00:15:54.560 --> 00:15:56.519
+after executing free JavaScript,
+
+00:15:56.520 --> 00:16:01.439
+say, if Firefox has LibreJS installed.
+
+00:16:01.440 --> 00:16:04.940
+This requires Firefox to send back the DOM,
+
+00:16:05.040 --> 00:16:08.039
+which could be achieved using native messaging.
+
+00:16:08.040 --> 00:16:09.719
+More on that later.
+
+00:16:09.720 --> 00:16:14.239
+Alternatively, one could also write a Firefox extension
+
+00:16:14.240 --> 00:16:17.639
+that sends the DOM in an existing tab back to Emacs.
+
+00:16:17.640 --> 00:16:20.079
+But thinking more about it,
+
+00:16:20.080 --> 00:16:22.959
+I don't think this is actually a useful idea,
+
+00:16:23.059 --> 00:16:27.039
+because most of the sites that work under LibreJS
+
+00:16:27.139 --> 00:16:34.419
+also are useful when all JavaScript is blocked.
+
+00:16:34.420 --> 00:16:37.039
+So, this means these sites are viewable
+
+00:16:37.040 --> 00:16:42.159
+under EWW, Luwak, etc.
+
+00:16:42.160 --> 00:16:43.639
+And another issue is that
+
+00:16:43.640 --> 00:16:46.559
+this could also make running non-free JavaScript easier,
+
+00:16:46.560 --> 00:16:52.379
+which is harmful to user freedom.
+
+NOTE emacs-web-server - overview
+
+00:16:52.380 --> 00:16:54.239
+OK, let's move on to the idea
+
+00:16:54.240 --> 00:16:55.679
+of running Emacs as a web server,
+
+00:16:55.680 --> 00:16:58.559
+so that Emacs client packages are web apps
+
+00:16:58.560 --> 00:17:00.319
+serving as alternative frontends.
+
+00:17:00.320 --> 00:17:02.239
+Why would we want to do this?
+
+00:17:02.240 --> 00:17:06.079
+Well, as much as one wants to be always in Emacs,
+
+00:17:06.080 --> 00:17:08.339
+it is not always feasible.
+
+00:17:08.340 --> 00:17:10.719
+For example, one may be on the go
+
+00:17:10.720 --> 00:17:12.519
+and needs to look up something on the phone.
+
+00:17:12.520 --> 00:17:14.879
+On the other hand, Emacs client packages
+
+00:17:14.880 --> 00:17:16.159
+are just alternative frontends
+
+00:17:16.160 --> 00:17:18.119
+but written in Elisp and run in Emacs.
+
+00:17:18.120 --> 00:17:20.759
+With the help of emacs-web-server package,
+
+00:17:20.760 --> 00:17:23.579
+we can access Emacs packages on the web.
+
+00:17:23.580 --> 00:17:26.439
+emacs-web-server package is not something new,
+
+00:17:26.440 --> 00:17:30.379
+but seems to be underused in the community somehow.
+
+NOTE emacs-web-server - hello emacs!
+
+00:17:30.380 --> 00:17:33.359
+OK, let's start with a simple example called hello-emacs.
+
+00:17:33.360 --> 00:17:35.239
+It is pretty straightforward.
+
+00:17:35.240 --> 00:17:38.639
+Just require the web server feature
+
+00:17:38.640 --> 00:17:40.999
+and run ws-start to start a server process
+
+00:17:41.000 --> 00:17:43.359
+and send the string "hello emacs"
+
+00:17:43.360 --> 00:17:45.539
+to the process regardless of the request.
+
+00:17:45.540 --> 00:17:48.479
+As you can see, it is going to be available
+
+00:17:48.480 --> 00:17:51.219
+at port 9000 of localhost.
+
+00:17:51.319 --> 00:17:52.999
+Let's try it out.
+
+00:17:53.000 --> 00:18:01.839
+We need to first evaluate this code block.
+
+00:18:01.840 --> 00:18:03.939
+And it works.
+
+00:18:03.940 --> 00:18:10.839
+To stop a server, just run ws-stop on the web server object.
+
+00:18:10.840 --> 00:18:14.959
+Let's evaluate.
+
+00:18:14.960 --> 00:18:17.579
+Yep, it stopped.
+
+NOTE emacs-web-server - yolo
+
+00:18:17.580 --> 00:18:19.999
+OK, now let's move on to something funny
+
+00:18:20.000 --> 00:18:22.219
+that you should never run on the public web.
+
+00:18:22.220 --> 00:18:23.919
+I call it yolo.el.
+
+00:18:23.920 --> 00:18:25.359
+It uses htmlize
+
+00:18:25.360 --> 00:18:28.159
+to make any Emacs buffer available on the web.
+
+00:18:28.160 --> 00:18:28.999
+Let's try it out.
+
+00:18:29.000 --> 00:18:32.999
+Just require the thing and start the server by yolo-start.
+
+00:18:33.000 --> 00:18:38.119
+And it's available at port 9999.
+
+00:18:38.120 --> 00:18:41.599
+By default, the root domain shows the splash screen
+
+00:18:41.600 --> 00:18:42.919
+which needs to be available.
+
+00:18:42.920 --> 00:18:46.719
+Running display-splash-screen ensures that,
+
+00:18:47.219 --> 00:18:48.839
+but here I've already run it.
+
+00:18:48.939 --> 00:18:54.359
+So let's have a look.
+
+00:18:54.560 --> 00:18:56.639
+And here we have the splash screen.
+
+00:18:56.640 --> 00:19:00.239
+Emacs tutorial and such.
+
+00:19:00.240 --> 00:19:03.279
+Unfortunately, none of these links work,
+
+00:19:05.480 --> 00:19:08.000
+which is something we will revisit later.
+
+00:19:10.000 --> 00:19:15.381
+So, to show an arbitrary buffer,
+
+00:19:15.481 --> 00:19:19.981
+just use the buffer name as a path.
+
+00:19:20.081 --> 00:19:24.761
+For example, the slide has the buffer named web.org,
+
+00:19:24.861 --> 00:19:28.080
+so we can display it.
+
+00:19:34.581 --> 00:19:36.540
+Let's try something fancier,
+
+00:19:36.941 --> 00:19:40.000
+like the man page of ffmpeg.
+
+00:19:40.880 --> 00:19:44.719
+So this is the man page of ffmpeg.
+
+00:19:45.120 --> 00:19:48.420
+And the buffer name is a bit more complicated.
+
+00:19:48.520 --> 00:19:51.639
+I have the URL available here.
+
+00:19:59.140 --> 00:20:05.979
+It's missing a star.
+
+00:20:05.980 --> 00:20:10.659
+It's pretty neat if you ask me.
+
+00:20:12.560 --> 00:20:14.879
+And, yeah, what else?
+
+00:20:14.880 --> 00:20:22.699
+Well, we can also browse EWW in Firefox.
+
+00:20:22.700 --> 00:20:30.599
+For example, let's check out gnu.org,
+
+00:20:30.600 --> 00:20:33.679
+and note that the buffer name is EWW with stars.
+
+00:20:39.080 --> 00:20:41.879
+So, ah, it works.
+
+00:20:41.979 --> 00:20:50.899
+And it has all the graphics even.
+
+00:20:50.900 --> 00:20:55.639
+Now, how about we do it the other way around?
+
+00:20:55.640 --> 00:21:10.779
+So we load the current slide web.org using this funny thing.
+
+00:21:10.780 --> 00:21:12.239
+And it works.
+
+00:21:14.040 --> 00:21:19.939
+Not as nice as the Org buffer, though.
+
+00:21:19.940 --> 00:21:27.439
+Right, and now that gives me some funny idea.
+
+00:21:27.440 --> 00:21:31.359
+So I'm a firm believer that memes are meant to be enjoyed
+
+00:21:31.360 --> 00:21:33.199
+in silence rather than read out loud.
+
+00:21:33.200 --> 00:21:38.759
+So I will jump straight to trying this idea,
+
+00:21:38.760 --> 00:21:48.959
+which is loading the EWW buffer URL with EWW itself.
+
+00:21:49.860 --> 00:21:53.839
+Loading, loading, loading.
+
+00:21:53.840 --> 00:21:56.199
+Spoiler alert, it never loads.
+
+00:21:59.100 --> 00:22:03.120
+So that concludes the demo.
+
+00:22:03.220 --> 00:22:06.439
+And so we can stop the server, web server, with `yolo-stop`.
+
+00:22:06.440 --> 00:22:13.399
+So one could extend yolo to serve arbitrary Emacs commands,
+
+00:22:13.400 --> 00:22:15.439
+making it even more dangerous.
+
+00:22:15.440 --> 00:22:26.019
+That is, for example, `localhost:9000/m-x/magit-status`
+
+00:22:26.119 --> 00:22:27.720
+would run `magit-status`
+
+00:22:27.820 --> 00:22:33.499
+and show the magit-status buffer in the web browser.
+
+00:22:34.500 --> 00:22:43.119
+Or localhost:9000/m-x/eww/
+
+00:22:43.120 --> 00:22:46.759
+any arbitrary URL to browse arbitrary URL
+
+00:22:46.760 --> 00:22:50.819
+with EWW inside of Firefox.
+
+00:22:50.820 --> 00:22:53.879
+It can serve as a way to block all JavaScript,
+
+00:22:53.880 --> 00:22:56.799
+because EWW does not support JavaScript.
+
+00:22:56.800 --> 00:23:00.079
+And enforce preferred colorscheme in Firefox,
+
+00:23:00.080 --> 00:23:02.839
+since htmlize, as you have noticed,
+
+00:23:02.840 --> 00:23:06.439
+faithfully reflects the theme used in Emacs.
+
+NOTE emacs-web-server - emacs web framework
+
+00:23:07.940 --> 00:23:10.239
+Okay, so we know that yolo is unsafe
+
+00:23:10.339 --> 00:23:11.440
+and needs to be refined.
+
+00:23:11.540 --> 00:23:13.439
+In fact, we don't necessarily want
+
+00:23:13.440 --> 00:23:15.599
+to run Emacs on a web browser.
+
+00:23:15.600 --> 00:23:17.279
+After all, a modern web browser is
+
+00:23:17.280 --> 00:23:19.079
+something one has to fight all the time
+
+00:23:19.080 --> 00:23:21.600
+and should be avoided whenever possible.
+
+00:23:21.601 --> 00:23:24.479
+We want to instead be able to access things
+
+00:23:24.480 --> 00:23:26.459
+when forced to be in a web browser,
+
+00:23:26.460 --> 00:23:28.359
+in which case only the motivations
+
+00:23:28.360 --> 00:23:31.299
+of an alternative frontend apply.
+
+00:23:31.300 --> 00:23:35.360
+Moreover, the ideal situation is an Emacs web framework,
+
+00:23:35.460 --> 00:23:36.799
+a tool that automatically
+
+00:23:36.800 --> 00:23:39.199
+transforms Emacs packages to web apps,
+
+00:23:39.200 --> 00:23:41.799
+so that one does not need to write extra code
+
+00:23:41.800 --> 00:23:45.559
+to get a web app that does the same thing as the package.
+
+00:23:45.560 --> 00:23:49.099
+We also need all links in the web pages to work.
+
+00:23:49.100 --> 00:23:52.399
+As noted before, the links on the yolo Emacs splash screen
+
+00:23:52.400 --> 00:23:53.839
+do not work.
+
+00:23:53.840 --> 00:23:58.199
+So here's a proof-of-concept example. It's called bom.el.
+
+00:23:58.200 --> 00:24:00.119
+It gets some weather forecast data
+
+00:24:00.120 --> 00:24:03.079
+from the Australian Bureau of Meteorology
+
+00:24:03.080 --> 00:24:05.559
+and displays it in an org buffer.
+
+00:24:05.560 --> 00:24:09.279
+So let's try it out. One could do `M-x bom`,
+
+00:24:09.280 --> 00:24:15.219
+which shows an org buffer with links to each state.
+
+00:24:15.220 --> 00:24:17.199
+So based in Melbourne, naturally,
+
+00:24:17.200 --> 00:24:21.839
+I would like to find out the weather of Victoria.
+
+00:24:21.840 --> 00:24:27.839
+And yes, to execute this command. Wait, wait, wait. Right.
+
+00:24:27.840 --> 00:24:33.459
+And we are at a buffer that shows
+
+00:24:33.460 --> 00:24:36.119
+the weather forecast of the whole of Victoria
+
+00:24:36.120 --> 00:24:39.379
+in the hierarchy. Note that this back button
+
+00:24:39.479 --> 00:24:46.639
+takes you to the previous page.
+
+00:24:46.640 --> 00:24:47.919
+So here are the regions of Victoria.
+
+00:24:47.920 --> 00:24:53.799
+I think Melbourne is in Central.
+
+00:24:53.800 --> 00:24:54.719
+And yeah, it shows
+
+00:24:54.720 --> 00:24:57.259
+the seven-day weather forecast of Melbourne.
+
+00:24:57.260 --> 00:25:00.359
+You can also reach this page by running,
+
+00:25:00.360 --> 00:25:08.199
+let's see, directly `M-x bom-state`.
+
+00:25:08.600 --> 00:25:09.759
+Vic.
+
+00:25:13.960 --> 00:25:18.399
+OK. So this works.
+
+00:25:18.400 --> 00:25:21.280
+And this is bom as an Emacs package.
+
+00:25:21.380 --> 00:25:23.980
+Now let's check out bom as a web app
+
+00:25:23.981 --> 00:25:28.039
+transformed by Emacs web framework.
+
+00:25:28.040 --> 00:25:30.319
+So start the web server with bom-start.
+
+00:25:33.020 --> 00:25:39.559
+And let's try it out. It's at 9000 again.
+
+00:25:39.560 --> 00:25:42.359
+Oops. Invalid path. Oh, that's because
+
+00:25:42.360 --> 00:25:46.119
+it makes exactly one command to one path.
+
+00:25:46.120 --> 00:25:49.300
+So remember that we used the bom command
+
+00:25:49.301 --> 00:25:50.719
+to show the landing page.
+
+00:25:50.720 --> 00:25:54.340
+So here we need the bom in the path as well.
+
+00:25:54.440 --> 00:26:00.679
+And it shows the same landing page, except in HTML.
+
+00:26:00.680 --> 00:26:07.259
+Let's check out Victoria weather forecast as before.
+
+00:26:07.260 --> 00:26:12.279
+And it shows an HTML converted from the org buffer
+
+00:26:12.280 --> 00:26:17.559
+using ox export HTML, whatever.
+
+00:26:17.560 --> 00:26:20.259
+And you can see even the back button is here.
+
+00:26:20.359 --> 00:26:26.219
+That takes you to /bom.
+
+00:26:26.220 --> 00:26:29.139
+So let's have a look at Melbourne. Here it is.
+
+00:26:29.140 --> 00:26:31.379
+Hooray, it works.
+
+00:26:31.380 --> 00:26:33.860
+So, yeah, as usual,
+
+00:26:33.960 --> 00:26:40.559
+you can stop the web server with `M-x bom-stop`.
+
+00:26:40.560 --> 00:26:43.660
+Right. And alternatively,
+
+00:26:43.760 --> 00:26:48.499
+it can also be deployed directly in terminal
+
+00:26:48.500 --> 00:26:56.099
+in a dedicated Emacs daemon.
+
+00:26:56.100 --> 00:26:58.279
+So you can see that there's a one-one correspondence
+
+00:26:58.280 --> 00:27:03.099
+between the Emacs package interface and the web interface.
+
+00:27:03.100 --> 00:27:06.039
+And that implies some restrictions to the Emacs package
+
+00:27:06.040 --> 00:27:09.159
+for the Emacs web framework to be able to do its job. Right.
+
+00:27:09.160 --> 00:27:13.439
+For example, the package needs to have an Org interface
+
+00:27:13.440 --> 00:27:15.519
+and the links that trigger other commands
+
+00:27:15.520 --> 00:27:17.799
+need to be in Elisp links
+
+00:27:17.800 --> 00:27:20.759
+so that the Emacs web framework
+
+00:27:20.760 --> 00:27:24.799
+can translate it to web server URL path.
+
+00:27:24.800 --> 00:27:28.919
+Note that Emacs web server framework is not a real package.
+
+00:27:28.920 --> 00:27:33.339
+I wrote some functions in bom.el serving the purpose,
+
+00:27:33.340 --> 00:27:35.719
+and they should be separated out eventually
+
+00:27:35.720 --> 00:27:37.759
+without much trouble.
+
+00:27:37.760 --> 00:27:39.999
+One could get weather forecast
+
+00:27:40.000 --> 00:27:42.219
+without running JavaScript anyway,
+
+00:27:42.220 --> 00:27:45.199
+which makes bom.el less important
+
+00:27:45.200 --> 00:27:48.319
+as an alternative web client.
+
+00:27:48.320 --> 00:27:50.519
+Though it does provide, dare I say,
+
+00:27:50.520 --> 00:27:52.380
+a clean and minimal interface
+
+00:27:52.480 --> 00:27:55.719
+compared to common weather forecast web pages.
+
+00:27:55.720 --> 00:27:58.639
+Other more relevant use cases could be Mastodon,
+
+00:27:58.640 --> 00:28:01.319
+whose official web client requires JavaScript
+
+00:28:01.320 --> 00:28:03.479
+to display a post.
+
+00:28:03.480 --> 00:28:08.559
+The mastorg package that shows an Org hierarchy of toots
+
+00:28:08.560 --> 00:28:12.079
+rooted as a given toot could be a low-hanging fruit.
+
+00:28:12.179 --> 00:28:15.199
+The limitation of Org interface requirements
+
+00:28:15.200 --> 00:28:17.879
+can also be relaxed in further work,
+
+00:28:17.880 --> 00:28:21.639
+if one could extend Emacs web framework
+
+00:28:21.640 --> 00:28:24.199
+to translate back and forth between Emacs widgets,
+
+00:28:24.200 --> 00:28:28.639
+say, including buttons and web page widgets,
+
+00:28:28.640 --> 00:28:30.599
+including links.
+
+00:28:30.600 --> 00:28:32.599
+Another more far-fetched idea would be
+
+00:28:32.600 --> 00:28:35.799
+to translate to other types of interfaces,
+
+00:28:35.800 --> 00:28:42.120
+like GNU/Linux or Android GUI.
+
+00:28:44.020 --> 00:28:47.479
+How about animations? Say, M-x butterfly,
+
+00:28:47.480 --> 00:28:53.999
+or even web games from Emacs games?
+
+00:28:54.000 --> 00:29:00.099
+Possibilities are unlimited in this, as always, in Emacs.
+
+00:29:00.100 --> 00:29:03.159
+I also noticed some limitations
+
+00:29:03.160 --> 00:29:07.439
+when trying to actually host bom.el on the public web.
+
+00:29:07.440 --> 00:29:12.939
+Given the limited access to the Emacs server,
+
+00:29:13.540 --> 00:29:16.719
+I was comfortable enough to give bom.el a go
+
+00:29:16.720 --> 00:29:18.799
+to serve it on the public web.
+
+00:29:18.800 --> 00:29:20.559
+However, I immediately stopped
+
+00:29:20.560 --> 00:29:22.879
+after noticing how slow it is.
+
+00:29:22.880 --> 00:29:24.719
+It can take more than 30 seconds
+
+00:29:24.720 --> 00:29:27.839
+to load a page of weather forecast for a state.
+
+00:29:27.840 --> 00:29:30.999
+I am also not sure how many simultaneous connections
+
+00:29:31.000 --> 00:29:32.379
+it can handle.
+
+00:29:32.380 --> 00:29:36.439
+In any case, I think the package emacs-web-server
+
+00:29:36.440 --> 00:29:40.419
+could do with some performance enhancement.
+
+NOTE Firefox with emacs for extensions
+
+00:29:40.420 --> 00:29:43.999
+Right. Because of the time constraints,
+
+00:29:44.000 --> 00:29:45.759
+I will briefly touch one final idea,
+
+00:29:45.760 --> 00:29:50.320
+which is to use Emacs as a Firefox browser extension.
+
+00:29:50.420 --> 00:29:52.800
+We already have org-protocol,
+
+00:29:52.900 --> 00:29:54.439
+which allows Firefox to communicate
+
+00:29:54.440 --> 00:29:55.919
+with a running Emacs server
+
+00:29:55.920 --> 00:29:59.779
+by sending an org-protocol URL to the latter.
+
+00:29:59.780 --> 00:30:03.159
+It can be used not just for capturing or storing links,
+
+00:30:03.160 --> 00:30:10.119
+but to execute arbitrary code on any component of the URL.
+
+00:30:10.120 --> 00:30:11.679
+However, it is fire and forget,
+
+00:30:11.680 --> 00:30:16.479
+and Emacs cannot tell Firefox what to do.
+
+00:30:16.480 --> 00:30:17.919
+There may be a length restriction, too.
+
+00:30:17.920 --> 00:30:20.399
+For example, Firefox may not be able to send back
+
+00:30:20.400 --> 00:30:22.419
+the whole DOM.
+
+00:30:22.420 --> 00:30:26.219
+This claim needs to be verified, though.
+
+00:30:26.220 --> 00:30:30.019
+Native messaging is one solution to this problem.
+
+00:30:30.020 --> 00:30:31.639
+It is a two-way communication channel
+
+00:30:31.640 --> 00:30:35.319
+between a Firefox web extension and a local system process
+
+00:30:35.320 --> 00:30:37.839
+started by the web extension.
+
+00:30:37.840 --> 00:30:40.399
+The process could be an Emacs server,
+
+00:30:40.400 --> 00:30:42.399
+which would make Emacs effectively
+
+00:30:42.400 --> 00:30:48.679
+a Firefox web browser extension.
+
+00:30:48.680 --> 00:30:51.999
+In this case, Elisp would be the main extension language,
+
+00:30:52.000 --> 00:30:53.619
+rather than JavaScript.
+
+00:30:53.620 --> 00:30:56.159
+However, JavaScript is still needed at the Firefox end
+
+00:30:56.160 --> 00:30:59.220
+of the communication channel.
+
+00:30:59.320 --> 00:31:01.159
+As a simple example of this idea,
+
+00:31:01.160 --> 00:31:04.439
+Firefox could ask Emacs to redirect a URL
+
+00:31:04.440 --> 00:31:08.319
+by removing tracking and using alternative frontend, etc.
+
+00:31:08.320 --> 00:31:12.479
+However, I was not able to implement this
+
+00:31:12.480 --> 00:31:14.279
+due to some tricky business
+
+00:31:14.280 --> 00:31:15.639
+with enforcing synchronicity
+
+00:31:15.640 --> 00:31:17.119
+that allows the web extension
+
+00:31:17.120 --> 00:31:20.199
+to wait for responses from Emacs.
+
+00:31:20.200 --> 00:31:25.359
+Some further work, I suppose.
+
+NOTE Thank you
+
+00:31:25.360 --> 00:31:28.154
+That concludes my talk.
+
+00:31:28.254 --> 00:31:31.440
+Thank you for your attention.
diff --git a/2023/captions/emacsconf-2023-windows--windows-into-freedom--corwin-brust--answers.vtt b/2023/captions/emacsconf-2023-windows--windows-into-freedom--corwin-brust--answers.vtt
new file mode 100644
index 00000000..7dbb18c5
--- /dev/null
+++ b/2023/captions/emacsconf-2023-windows--windows-into-freedom--corwin-brust--answers.vtt
@@ -0,0 +1,1394 @@
+WEBVTT
+
+00:00.000 --> 00:06.880
+Oh, wow, how exciting. Well, maybe I should share something then. Um, well, thank you very much and
+
+00:06.880 --> 00:14.800
+welcome to, uh, uh, welcome to my talk. I'm a little distracted here. I had a friend who came
+
+00:14.800 --> 00:20.320
+over and just brought me a whole bunch of peanut butter cups, homemade peanut butter cups. Maybe
+
+00:20.320 --> 00:26.400
+I'll show those off, uh, later. What? Okay. Here, uh, put it right there.
+
+00:33.840 --> 00:41.760
+Okay. So I'm going to, uh, get over to my plan, uh, stuff I'm sharing here, hopefully.
+
+00:42.800 --> 00:48.640
+Uh, and, and we'll jump, jump right in because I'm going to need as much time as I can possibly
+
+00:48.640 --> 00:55.520
+have today. Thanks so much for, uh, joining me for Emacs conference and for, especially for,
+
+00:56.400 --> 01:03.520
+um, all of you who, who, who participated, you know, in the discussions, contributing talks and,
+
+01:03.520 --> 01:09.600
+um, you know, uh, you know, including running the, the, the, and it's just so much fun to be here.
+
+01:09.600 --> 01:16.320
+Um, I guess while I'm standing here and, and saying stuff that's, that I'm going to have to
+
+01:16.320 --> 01:23.280
+transcribe, cause I didn't, uh, prepare a recorded version. Uh, I had a lot of trouble
+
+01:23.280 --> 01:28.880
+trimming this down so I can solve that problem by just talking a lot at the beginning, uh,
+
+01:28.880 --> 01:37.120
+about other stuff. Um, so in addition to the thanks, I just want to say thanks also to the
+
+01:37.120 --> 01:41.920
+folks on the development list that helped me kind of come up to speed on this. I won't make a big
+
+01:41.920 --> 01:48.880
+list here, but, um, and, and, and for all that I've learned from my previous conferences, it's
+
+01:48.880 --> 01:55.200
+just, I can't stress enough what a great opportunity volunteering for, uh, free software related things
+
+01:55.200 --> 02:00.080
+are, uh, as a way to get involved. People will just totally teach you how to be helpful and I'm
+
+02:00.080 --> 02:18.800
+loving it. I can preview the stream, but it's not super easy right now. I got all my screens
+
+02:18.800 --> 02:23.680
+kind of dedicated to other stuff. So should I pause for a second before I get into the slides?
+
+02:23.680 --> 02:27.680
+Cause that's, they're, they'll be hard to see if I'm not full screen.
+
+02:29.440 --> 02:34.240
+Yeah, that would be nice. Okay. Well, I'll keep ad libbing then cause I just have a million,
+
+02:34.240 --> 02:42.960
+uh, things I can say. Um, uh, so, uh, let me just quickly talk, uh, things that aren't in here.
+
+02:42.960 --> 02:50.320
+Um, I'm going to mention the mysis2.org and the, that project, which provides a port
+
+02:51.280 --> 03:03.520
+of, uh, the GNU, uh, uh, glibc and a lot of GNU and, uh, uh, their free software. Um, so, uh,
+
+03:03.520 --> 03:03.840
+I don't...
+
+03:03.840 --> 03:07.760
+All right, I'm switching a room to, uh, a DVD room to Stefan.
+
+03:12.080 --> 03:15.440
+All right. So I'm going to take mumble out of my, uh, pardon me, folks.
+
+03:16.080 --> 03:18.640
+It's going to take mumble out of my speakers here.
+
+03:22.800 --> 03:30.080
+Okay. We'll take the speakers out of play entirely and I'll just switch to some headphones.
+
+03:33.600 --> 03:34.720
+All right. So...
+
+03:36.720 --> 03:42.240
+Perfect. What an amazing amount of time. All right. So thanks a lot. Uh, today I've got a jam
+
+03:42.400 --> 03:48.720
+packed talk. Um, I've, I've done my best to make, to make this not too overwhelming,
+
+03:48.720 --> 03:55.040
+but overall we're going to try to try to actually build, um, Emacs while we're talking today.
+
+03:55.040 --> 04:00.400
+And we might actually build several Emacs. Uh, so let's take a look at that real quick.
+
+04:00.400 --> 04:08.160
+Um, so over here we have a screen where I am just once a minute looking, uh,
+
+04:08.480 --> 04:15.360
+uh, indirectly at whether there have been any pushes, uh, upstream to either the Emacs 29 or
+
+04:15.360 --> 04:24.320
+Emacs 30 branches. So I've arranged for us to sort of keep an eye on that, um, while we talk.
+
+04:24.320 --> 04:30.000
+And, you know, maybe that's, that's one thing that we'll do. And then additionally, we'll probably
+
+04:30.640 --> 04:36.640
+fire up a shell. This is the MySys2 environment that I talked about before,
+
+04:36.640 --> 04:42.160
+and we'll probably create some directories and things. But before we get into all that, let's,
+
+04:42.160 --> 04:48.080
+let's give some, some context. Uh, I've been doing my best to try to, uh, make sure all this
+
+04:48.080 --> 04:54.240
+information is on the Emacs wiki as well. So, uh, sorry, as I said, I got a little caught off guard.
+
+04:54.240 --> 05:02.640
+So I'm moving my foot pedals to the floor, back to the floor here. And I should be able to advance
+
+05:02.640 --> 05:11.760
+slides here. All right. So, um, I kind of provided some special definitions for things. I'm going to
+
+05:11.760 --> 05:21.680
+kind of level set with those. The, uh, um, when I say a binary release, I'm talking about some,
+
+05:21.680 --> 05:27.440
+some, uh, I'm talking about Emacs for Windows as, uh, just ready to run out of its folder or
+
+05:28.080 --> 05:35.600
+in whatever similar form. The, when I say a build, I'm talking about kind of a process of doing that.
+
+05:36.400 --> 05:41.040
+Um, when Emacs.get, of course, that's the upstream hosted by GNU Savannah.
+
+05:41.600 --> 05:51.680
+The Emacs release is, is a tarball created from that. The sources for, um, Emacs are going to be
+
+05:51.680 --> 05:58.480
+one of those two things, um, very specifically. So I'm not going to talk about patches patching.
+
+05:58.480 --> 06:06.720
+There's some implications there. Perhaps we'll get into it. Uh, so a snapshot is when I build
+
+06:06.720 --> 06:14.880
+from anything other than a release source, uh, a tarball. Um, just if I, if I say that I'm talking
+
+06:14.880 --> 06:23.600
+specifically about the, uh, the XZ version of the file as, as a technical point. Um,
+
+06:23.600 --> 06:32.480
+so that may come up. All right. Nothing else I think up my sleeve. Um, the, uh, as, as a key
+
+06:32.480 --> 06:38.320
+data point, it's worth understanding that there's a file called configure AC. It's going to be
+
+06:38.320 --> 06:46.160
+processed, uh, as part of auto-conf. We, we initially access that when we run, um, auto-gen
+
+06:46.160 --> 06:52.720
+as you'll see in a little bit. Um, the, but before, but, uh, so the auto-gen script will
+
+06:52.720 --> 07:00.160
+generally consider this, uh, so in a release build, um, this has been thought about kind of for us as
+
+07:00.240 --> 07:10.480
+part of, um, making the tarball. Um, the configure.ac, um, yeah, I think I pretty much covered,
+
+07:10.480 --> 07:16.880
+covered this. So, um, those, those that kind of partially built status, that's a,
+
+07:16.880 --> 07:22.640
+might be another phrase that you hear me use. So this slide unpacks that a little more.
+
+07:22.880 --> 07:29.520
+Um, so it can be a little confusing to understand what exactly the, you know, what is it, you know,
+
+07:29.520 --> 07:36.160
+how stable is Emacs depending on what I have. So the, I got a kind of set of rules of thumb here,
+
+07:36.160 --> 07:43.680
+right? First I want the highest, uh, you know, dot, uh, dot release value that I can get,
+
+07:43.680 --> 07:50.080
+assuming that that's higher than one. If it's, if it were to only be one, let's say,
+
+07:50.160 --> 07:58.560
+if it were to only be one, let's say my choices were 29.1 and 30.1, I would take 30.1. Um,
+
+07:59.200 --> 08:05.520
+cause that's, that's weird. But, um, what you'll normally see is you might see a 28.2,
+
+08:06.080 --> 08:15.760
+you might see a 29.1. So here I think 28.2 is got the most, most, most stable, um,
+
+08:16.560 --> 08:26.160
+set, uh, the, uh, or set of release binaries. The 29.1 will, will have a little more features,
+
+08:26.160 --> 08:33.680
+but will tend to be more stable than, uh, any, uh, lower point releases for 29, uh, certainly
+
+08:33.680 --> 08:39.600
+than any release candidates for 29, which might even have new features, um, but are mostly going
+
+08:39.600 --> 08:46.000
+to just be packages. So they're going to become the most stable thing here. And especially if
+
+08:46.000 --> 08:53.600
+they, they, they have a, you know, if this, this is not, uh, if this were to be 29.2 release
+
+08:53.600 --> 09:04.960
+candidate one as well, looking forward to seeing, um, the, uh, 30.50. Um, and, and in between this,
+
+09:04.960 --> 09:11.840
+this pretest here, we're talking about kind of developer land. Um, so, um, the expectation is
+
+09:11.840 --> 09:16.560
+that, you know, what you're doing that applies to windows users, uh, just as much if you are
+
+09:16.560 --> 09:22.960
+building anything in the snapshot range, any of that is going to be in this 30.0.50. Currently
+
+09:22.960 --> 09:32.240
+that'll change when the, uh, when the 30, 30, uh, an Emacs 30 release tags, uh, or release branches
+
+09:32.240 --> 09:42.880
+come. Okay. So let's talk about the local. Um, there's not much to know about what I have going
+
+09:42.880 --> 09:51.200
+on, except that I have my, my paths mess messed with. So, um, if, if that, that were to come up,
+
+09:51.200 --> 09:57.120
+if you're wondering how, why does this, uh, and insist command work, that's probably the place
+
+09:57.120 --> 10:03.760
+where you'd notice it. Uh, I am using windows 10. I haven't tried windows 11, uh, as mentioned,
+
+10:03.760 --> 10:09.520
+mysis2 is critical to all this. There's one script in particular that will error out if you try to do
+
+10:09.520 --> 10:16.560
+anything other than use mysis's, mysis's shell. And in fact, mysis owns or provides three shells
+
+10:16.560 --> 10:21.760
+and of them, that script is designed to work with a specific one of them as, as we'll come to.
+
+10:22.720 --> 10:29.120
+Uh, I don't talk about installing the dependencies, but just as, as kind of some kind of help,
+
+10:29.680 --> 10:38.480
+um, you can search using this formula and install, uh, using this formula.
+
+10:38.480 --> 10:40.800
+Good luck with those, you know, grep commands.
+
+10:43.520 --> 10:49.440
+And this is the tool for building the self-installing self-extracting installer or, uh,
+
+10:49.520 --> 10:55.600
+executable self-installer. Um, the script for that is provided along with the Emacs source.
+
+10:56.720 --> 11:03.280
+Um, and I've provided a helpful link to the main page for the project download link on the left.
+
+11:03.280 --> 11:09.680
+It is not, um, it's kind of scare where the way that this link appears, but I have clicked it and
+
+11:09.680 --> 11:18.960
+it's working for me. Automation does, uh, we'll, we have some time we'll be looking at this at a
+
+11:18.960 --> 11:24.560
+minimum. I wanted to mention that what I do on my local, what you're seeing in the crawler, I hope,
+
+11:25.280 --> 11:35.600
+uh, represents a, uh, a simple sleep loop. Uh, and we'll, we'll look into that if we have time.
+
+11:36.560 --> 11:42.960
+Um, I do have a little bit, I do use like a cron job and so on to clean up some hosting that,
+
+11:42.960 --> 11:50.160
+that I pay for, um, where I've got, where I, where I kind of self host some, uh, snapshots,
+
+11:50.720 --> 11:58.880
+more stuff than I feel comfortable uploading to, uh, to GNU. The, um,
+
+12:01.760 --> 12:06.480
+you know, I never said, uh, my name is Corwin Brust. For the last couple of years, I've been
+
+12:06.480 --> 12:12.480
+the volunteer making, uh, um, making the snapshots, the quote unquote, official binaries,
+
+12:12.480 --> 12:20.560
+uh, for windows of the, um, of, of Emacs for windows. So that's, that's all the different
+
+12:20.560 --> 12:25.680
+versions. Uh, help is always welcome with that. I'd be very happy to teach you in more depth.
+
+12:25.680 --> 12:31.920
+This video is, you know, kind of my drop dead file. Uh, I don't have specific plans. Uh, if
+
+12:31.920 --> 12:36.480
+somebody's like, Hey, get out of the way, this is the one thing I think I can do. Um, Hey,
+
+12:36.480 --> 12:44.640
+that's real relatable. Okay. Um, so I haven't tried, uh, the, I haven't tried a lot of fun
+
+12:44.640 --> 12:50.400
+things that I won't talk about. Um, the, uh, the rest of this talk is going to get into the
+
+12:50.400 --> 12:56.560
+nitty gritty. As I said, um, if we can't convince Emacs to start building over on that screen,
+
+12:56.560 --> 13:05.120
+we'll be opening it up here on the center stage. Um, uh, this begins and there's, there's, there's,
+
+13:05.120 --> 13:11.520
+there's great insight here too, on the wiki, uh, with picking an FTP source for any official
+
+13:11.520 --> 13:19.760
+release that is for a stable product, please visit, um, ftp.gnu.org. Otherwise you'll want
+
+13:19.760 --> 13:27.280
+to switch that FTP dot at the beginning to alpha dot and take a pretest, uh, or any snapshot or
+
+13:27.280 --> 13:36.640
+otherwise, then publish there the, uh, next, uh, you know, I'm gonna, you have some examples in
+
+13:36.640 --> 13:43.440
+here that assume that you're doing a release bill that you're doing $29 one, but, um, I am glancing
+
+13:43.520 --> 13:51.440
+out of the, the right side of my face at the chat on the opt-ins. Anybody in there wants to direct
+
+13:51.440 --> 13:57.840
+me at a particular, um, we can make some other, we can build something else. If you want to see
+
+13:57.840 --> 14:03.840
+a snapshot build more mentioned that, um, the examples that you're going to see here that I
+
+14:03.840 --> 14:12.560
+will, without other direction, cut and paste, um, are all, uh, based on the release bill. So,
+
+14:14.640 --> 14:22.320
+um, so, uh, we'll use the, uh, I mentioned that there are several shells provided by MySys2.
+
+14:22.960 --> 14:33.120
+The MinGW64 shell is the one that we mostly need. Um, I tested all of this as well with the MinGW32
+
+14:33.120 --> 14:40.400
+shell. Um, so that, that should work and, and see mix binaries that, that, that work for me.
+
+14:44.080 --> 14:50.720
+Uh, I, as I mentioned, I don't get into the details of installing all your prerequisites.
+
+14:50.720 --> 14:56.560
+I found that doing it in a headfirst manner wasn't, uh, wasn't difficult. And I also found
+
+14:56.560 --> 15:00.240
+that there's a number of tutorials. I didn't want to pick one to link here.
+
+15:01.040 --> 15:10.800
+Um, there, uh, here, uh, okay. So our general formula for building Emacs, irrespective of
+
+15:10.800 --> 15:19.600
+Windows, looks like, does the configure script exist if not run autogen? From a Windows build
+
+15:19.600 --> 15:27.600
+standpoint, this is, if I'm not running a release, release build, call the autogen script.
+
+15:27.840 --> 15:32.080
+Right. And this would be in the directory where we want to pack this. I'll demonstrate
+
+15:32.080 --> 15:42.640
+within three minutes if, uh, if one, if nobody's pushed upstream to Emacs. Um, so, uh, the configure,
+
+15:42.640 --> 15:53.280
+uh, and, uh, configure options are, uh, uh, the, the configure, you know, if the configure, sorry,
+
+15:54.240 --> 16:01.520
+the configure script exists, then, uh, it doesn't, doesn't exist. So the only reason,
+
+16:01.520 --> 16:07.920
+so in my process, I will always execute that step because I clean everything after every build,
+
+16:07.920 --> 16:16.880
+um, in all my contexts. Um, however, if you were, you know, had a, a checkout of emacs.get
+
+16:16.880 --> 16:21.440
+and you are building it at several releases, then maybe you've got a configure script and then you
+
+16:21.440 --> 16:27.600
+all want to know, um, the, you know, whether you have to bootstrap and the typical complexities,
+
+16:27.600 --> 16:33.200
+but otherwise you might be able to skip that in, in, in the abstract. Um,
+
+16:36.080 --> 16:41.520
+is that right? Or is it, is it the make, uh, so, and if they make file doesn't exist,
+
+16:41.520 --> 16:46.080
+make install. I know I'm looking at that in question whether it's correct. Sorry about that.
+
+16:46.640 --> 16:55.600
+Um, in any case, uh, so auto-gen configure make install is our recipe. Auto-gen creates the
+
+16:55.600 --> 17:01.840
+configure script, configure creates the make file, the make file. Um, in the case of windows,
+
+17:01.840 --> 17:08.080
+I almost always want the install, uh, and to specify some location where the installed emacs
+
+17:08.080 --> 17:19.120
+will land. This is where all of the recipes for packaging emacs go. And if I were, uh, you know,
+
+17:19.120 --> 17:24.640
+using this as a movie to upgrade, I personally would do that by, by specifying an install path,
+
+17:24.640 --> 17:31.520
+quote unquote, on top of, uh, a main installation. I don't do that. I update shortcuts mainly based
+
+17:31.520 --> 17:37.600
+on what specifically I want to try, uh, in an effort to, to, to, to notice, uh, interesting
+
+17:37.600 --> 17:44.400
+patches and confirm they work on windows, which mostly they do. There's not a lot of code in my
+
+17:44.400 --> 17:49.760
+experience that is, uh, windows specific and very, very little around the build process.
+
+17:50.320 --> 17:57.440
+All right. Huge rabbit hole zone. And I still have a minute before I have to, uh, kick off
+
+17:57.440 --> 18:07.120
+the first part of our demo. So let's, let's keep, keep diving in, um, the, those specific part
+
+18:07.120 --> 18:11.920
+windows specific parts beside the dot exe extension that we're going to find slammed
+
+18:11.920 --> 18:17.680
+onto all of our familiar, uh, executables. We're also going to have emacs client W,
+
+18:18.400 --> 18:26.880
+which is a wrapper that hides, um, how hard it is to get, uh, to, to, to get it,
+
+18:27.600 --> 18:31.760
+how bad the abstraction is between the window management layer and the GUI,
+
+18:32.400 --> 18:37.040
+and then all the different parts on windows. Essentially, it wants to create a shell window.
+
+18:37.040 --> 18:42.960
+If we just double click emacs dot exe. So emacs client W, uh, and run emacs,
+
+18:42.960 --> 18:49.440
+they're going to solve that problem. Um, uh, wrapping emacs and emacs client respectively.
+
+18:51.600 --> 19:00.320
+And, um, just, uh, all right. So let's, let's go ahead and do something. I'll, I'm going to
+
+19:00.320 --> 19:08.080
+take away the ticker here for a minute. And what you're not seeing is off stage. I am killing that
+
+19:08.080 --> 19:19.680
+so we don't get built in parallel. Um, so, um, so at this point I'm going to open up a shell and
+
+19:19.680 --> 19:24.240
+I'm going to start talking just a little bit about my local build environment, which we haven't
+
+19:24.240 --> 19:32.640
+gotten into. In fact, just to make that even easier, let's, um, let's just take a look at it
+
+19:32.640 --> 19:40.640
+a little bit. Probably the easiest spot is here.
+
+19:47.680 --> 19:55.280
+All right. So here we have the familiar windows, my computer interface. I have the G drive and the
+
+19:55.680 --> 20:07.200
+H drive, four terabyte drives, um, dedicated to my, um, really overblown emacs build process.
+
+20:08.160 --> 20:14.000
+Um, this just lets me be super lazy. There's no reason you need any massive amount of storage
+
+20:14.000 --> 20:22.080
+to do any of this. Um, inside here, and now I'll actually switch you back to the other screen.
+
+20:23.040 --> 20:26.560
+Um, we'll, we'll find,
+
+20:37.280 --> 20:46.480
+oops, sorry about that. I didn't take the time to label that one. Um, so here you can see
+
+20:46.480 --> 20:53.760
+the primary output that I'm looking at through this automated process. I come along, I look at
+
+20:53.760 --> 20:59.840
+the bug reports, or maybe I'm just restarting my computer and choosing what emacs version at random.
+
+20:59.840 --> 21:06.240
+And then in that case, I look at this modified date and I say, um, my config that I, you know,
+
+21:06.240 --> 21:11.120
+that I'm playing with right now is all set for emacs 30, or I'm testing the both and I'm
+
+21:11.120 --> 21:16.400
+relaunching both of these. Right. So for me, that starts by diving into the install folder,
+
+21:16.400 --> 21:22.720
+going into the bin folder, which looks exactly the way my automation leaves it. I then come in
+
+21:22.720 --> 21:34.320
+to run the run emacs and I create a shortcut, um, to it. So I'm a keyboard person. So that's
+
+21:34.320 --> 21:40.400
+usually done like this. And then I just know that the context menu is going to come up in the right
+
+21:40.400 --> 21:49.120
+place. So I'll come up and, um, possibly change the, change the shortcut, right.
+
+21:53.120 --> 22:01.280
+If I don't mess with it. Um, so here's where I'll add my minus Q, if that's kind of where
+
+22:01.280 --> 22:06.800
+my world was at, or it kind of depends on what I'm doing with these, which varies week to week.
+
+22:07.440 --> 22:12.000
+Um, so restarting my emacs, uh, involves doing the same thing, going to my desktop
+
+22:12.560 --> 22:23.200
+and where you'll find a number of emac shortcuts and, um, updating the shortcut in the same manner
+
+22:23.920 --> 22:28.000
+joint actually, maybe we'll just, let's go back there and just show it.
+
+22:28.000 --> 22:31.600
+So if we look at, for example, my ERC,
+
+22:31.760 --> 22:39.040
+you can see, it's going to be pointing at one of these clones and then it's going to
+
+22:39.760 --> 22:44.720
+maybe tell me that I want, it wants to be full screen. Nope, not currently. And then it might,
+
+22:44.720 --> 22:48.720
+uh, have some stuff in there about auto-loading at config and what
+
+22:48.720 --> 22:52.560
+connections I'm going to, some commands I've defined to start connections.
+
+22:53.280 --> 22:57.680
+All right. And sorry, I got a phone call. I was checking. It wasn't in an org, the org,
+
+22:57.680 --> 23:04.160
+not the other organizers giving me the hook. So, um, all right. So that's, that's probably
+
+23:04.160 --> 23:11.440
+enough on the local system. Let's get back to the, to, to building emacs. And now it hopefully makes
+
+23:11.440 --> 23:17.440
+a certain amount of sense when I say we're going to wander over to the H drive and, and, and, and,
+
+23:17.920 --> 23:22.560
+hopefully makes a certain amount of sense when I say we're going to wander over to the H drive
+
+23:22.560 --> 23:31.520
+and recreate the structure that, um, both my process sort of assumes and the scripts you'll
+
+23:31.520 --> 23:41.440
+find in the admin NT, uh, build disk folder in source used to assume. Those scripts are in need
+
+23:41.440 --> 23:49.440
+of some love. And in just a little bit, I'll be mentioning a build, uh, a, uh, a, a, a particular
+
+23:49.440 --> 23:54.000
+bug that you might want to pay attention to if you're interested in making a self-installer.
+
+23:54.800 --> 24:04.320
+All right. So, um, we're going to create, uh, an emacs build directory.
+
+24:04.320 --> 24:16.960
+And we've got a handy git clone stage, git clone command stage for ourself. That would work. Um,
+
+24:19.360 --> 24:26.160
+do not currently see anybody lobbying for that. So instead we will run the rather faster
+
+24:27.120 --> 24:36.080
+uh, W get command on Savannah, which is not pasted in here. Nice. Let's see if I can freehand it.
+
+24:36.080 --> 24:40.000
+Not going to do it. Uh,
+
+24:40.720 --> 24:41.840
+okay.
+
+24:52.000 --> 24:56.560
+I beg your pardon. I'm grabbing a URL from the internet.
+
+25:00.080 --> 25:06.960
+Uh, okay. Yeah, I can, I can honestly, I can freehand it, whatever. Okay. Sorry. I, uh,
+
+25:07.680 --> 25:13.200
+I didn't have that bookmarked in all handy. Like I thought I did. Um, so we'll just say
+
+25:13.200 --> 25:30.480
+ftp.gnu.org slash, uh, what is it? Pub emacs, emacs-29.1, uh, .org.gnu.org.exe.
+
+25:30.480 --> 25:47.040
+I really think I'd have this command sitting around. It makes me want to scrap the whole
+
+25:47.040 --> 25:54.720
+demo. I'm not going to lie. Okay. How am I doing? Um, I think at least 15 minutes. Um,
+
+25:54.720 --> 25:58.160
+but in the command that you were freehanding, should the pub be GNU instead?
+
+25:59.120 --> 26:01.680
+Oh, thanks. I'm sorry.
+
+26:07.440 --> 26:13.360
+There we go. Thank you. All right. And then we'll,
+
+26:17.760 --> 26:20.160
+and I'm not sure I provided commands for this either,
+
+26:20.720 --> 26:29.600
+but it is trivially easy to do. And while that happens, we'll get to move on a few slides.
+
+26:31.760 --> 26:38.000
+Um, the configure script I'm not talking about in a lot of detail, but I do want to mention that the
+
+26:38.000 --> 26:44.720
+GNU binaries are provided with native, uh, compilation enabled. That's the feature that
+
+26:44.800 --> 26:55.360
+uses gcc lib gcc get on windows. If available, that lib gcc get will be used. Um, but when,
+
+26:55.360 --> 27:03.200
+but, uh, if, if, uh, emacs has that feature, then it will take by compile, uh, native code and,
+
+27:03.200 --> 27:10.880
+uh, asynchronously compile that as needed, uh, with the ahead of time feature. We're going to
+
+27:10.880 --> 27:15.360
+do as much of that ahead of time. And for folks that are consuming the windows binary, the
+
+27:15.360 --> 27:21.360
+thinking goes that they might not have my assist too. They might not have lib gcc jet. They might
+
+27:21.360 --> 27:28.560
+be happy that they're enabled in a, you know, a lot of time running emacs on their local environments
+
+27:30.400 --> 27:39.120
+at all, you know, in a, maybe a lockdown, uh, corporate context. So aside that, um, there's
+
+27:39.120 --> 27:45.120
+your first glimpse at the configure, um, program that we're going to run in a moment. In fact,
+
+27:45.120 --> 27:52.160
+I'm going to go as far as putting it on the clipboard. Um, really just looking at this,
+
+27:52.160 --> 27:57.120
+the AOT flag is the one I'd call attention to, but it's worth understanding that windows doesn't
+
+27:57.120 --> 28:02.000
+provide a D bus capability. So windows native program isn't going to be able to depend on D
+
+28:02.000 --> 28:07.600
+bus. We're going to, we're going to explicitly ask that that be left out. I think that's actually
+
+28:07.600 --> 28:12.080
+optional and it's documentation. I think the configure program is smart enough to know that
+
+28:12.080 --> 28:20.080
+we don't want D bus on windows. Um, otherwise we tend to compile with things. Um, there there's
+
+28:20.080 --> 28:26.320
+missing documentation. We could say the, uh, all of the libraries are treated in the way I mentioned
+
+28:26.320 --> 28:34.880
+in that, um, JPEG support will be available as long as the JPEG is, is available in our environment
+
+28:34.880 --> 28:40.320
+and configure script certainly notices that, um, the GNU provided binaries are provided with
+
+28:40.320 --> 28:47.280
+minus O2. And that's also my default personally on windows. Um, however, and I'm going to skip
+
+28:47.280 --> 28:59.680
+this since I mentioned it, um, mentioned, uh, and, uh, um, so I guess I'll say, um, you can,
+
+28:59.680 --> 29:06.560
+um, say with the, it's worth knowing that you, if you're not one reason that, that you're building
+
+29:06.560 --> 29:11.200
+might be because you want to turn off native compilation for whatever reason. If you have
+
+29:11.200 --> 29:16.640
+low juices, you get, get, but don't want Emacs to use it. Uh, especially as that default looks like
+
+29:16.640 --> 29:26.480
+it could be changing with Emacs 30. Um, the, uh, the debug configuration, um, this is, this is the,
+
+29:26.480 --> 29:33.200
+uh, kind of, uh, what, what I'm currently using this on commentary, uh, I've seen on the next
+
+29:33.200 --> 29:45.280
+development list. Let's check on our checkout and see if we can't get a build running. Um,
+
+29:45.280 --> 29:51.440
+this is a release build, so I won't be starting with, uh, so we'll start by hopping into its
+
+29:51.440 --> 30:14.080
+directory and we, um, we have, uh, but not. Okay. So that tells us we're going to run
+
+30:14.640 --> 30:23.440
+our configure program, but we don't need to run a config IC. So,
+
+30:31.280 --> 30:34.320
+so let's get that going and, uh,
+
+30:36.000 --> 30:41.360
+hopefully that's showing through just enough to be fun, not too much to be distracting.
+
+30:45.040 --> 30:55.760
+Um, the, uh, the unoptimized, uh, uh, um, please report issues. If your Emacs is crashing,
+
+30:55.760 --> 31:01.200
+uh, to the Emacs development list, not to me personally. Um, although you are of course,
+
+31:01.200 --> 31:06.960
+welcome to copy me. Um, if you especially I'm subscribed to that list, so I get all the mail.
+
+31:06.960 --> 31:14.000
+So I don't mind being copied. Uh, and, uh, as well, if you think it's, uh,
+
+31:15.040 --> 31:20.160
+you know, related to packaging, that actually makes sense or windows related to even, and,
+
+31:20.160 --> 31:25.120
+uh, it can be tested with an extra snapshot that should be uploaded to the canoe alpha side.
+
+31:25.120 --> 31:31.600
+I could look at that if I have time. There's with the configure script to make file for
+
+31:32.160 --> 31:39.840
+Emacs is really, really complicated. If time permits, which I'm now confident it will not,
+
+31:39.840 --> 31:44.240
+we will look at, uh, make file that I tried writing that, uh, orchestrates this whole
+
+31:44.240 --> 31:52.160
+process that I'm talking about. Um, as, uh, let's see. So the build, uh, build process,
+
+31:52.160 --> 32:03.120
+I run my builds with, uh, explosively specifying the max CPU, uh, with minus J, but minus B one
+
+32:03.120 --> 32:08.320
+to get the full build, uh, full log into your recipes. That is probably the magic thing.
+
+32:09.040 --> 32:12.560
+Matt, um, shouldn't to understand what, uh,
+
+32:16.000 --> 32:23.600
+or that, uh, that, that, uh, that I'm glad that I know, uh, as I'm trying to write my automations,
+
+32:26.960 --> 32:36.080
+uh, the, um, so I call that out here, the binary, uh, releases. Um, okay. So in this section,
+
+32:36.080 --> 32:41.120
+we're going to start to get into what are all those files. And there's a bug report related to
+
+32:41.120 --> 32:46.640
+that, but I didn't get into here. So, um, that's kind of to the point about the less said about
+
+32:46.640 --> 32:50.800
+this, the better, uh, that's my explanation for stepping through some of these slides.
+
+32:50.800 --> 32:58.240
+Uh, of course we'll share them all, uh, uh, hopefully by the time that this video is published.
+
+32:58.960 --> 33:06.640
+Oh, I mentioned, um, I may have mentioned already freshly installed, but, uh, fully installed. Uh,
+
+33:06.640 --> 33:15.200
+the, the, the key distinction here is that, uh, Emacs is distributed in the binary form for Windows
+
+33:15.200 --> 33:21.600
+with some DLL files that actually come from the mysys2 project. There's an implication there to
+
+33:21.760 --> 33:26.160
+there's an implication there to GCC that I definitely want to get to it talking about.
+
+33:28.080 --> 33:35.840
+Um, so freshly installed means we haven't copied those binaries from the mysys2, uh,
+
+33:35.840 --> 33:45.360
+installation into the Emacs, uh, installation. Uh, and then, uh, when we re-archived that
+
+33:45.360 --> 33:48.640
+local Emacs installation, that's how we're going to create the full zip.
+
+33:48.640 --> 33:54.160
+So hopefully that actually is a pretty good summary of what all those files are. Um, but
+
+33:54.160 --> 34:00.320
+there are readme files, uh, on the FTP that do a pretty good job, um, if you can dig enough to find
+
+34:00.320 --> 34:11.120
+one and my apologies for, uh, tardiness getting a new version on that posted. Um, the Emacs, uh,
+
+34:11.120 --> 34:17.040
+so those dependencies, uh, are listed within Emacs itself. And as we'll just talk about in a moment,
+
+34:17.040 --> 34:24.240
+there's a way, uh, that we can use, we can access that when we collect them in order to meet, uh,
+
+34:24.240 --> 34:31.840
+the GCC requirement that is essentially to include, um, include the sources for the,
+
+34:31.840 --> 34:41.200
+for those binaries, the things that were compiled against. Um, the, uh, so, so here we go,
+
+34:41.200 --> 34:45.280
+we're, we're into the build process. Let's just take a look and see if configure it got done.
+
+34:45.280 --> 34:52.240
+It sure did. And now we can see a table of, of hopefully good, but good and bad news, um,
+
+34:52.240 --> 34:57.840
+and potential, um, where we're learning that we're using the pdumper strategy and any number of other
+
+34:57.840 --> 35:04.320
+things that we might be messing with as our motivation for, for building ourselves on Emacs.
+
+35:04.320 --> 35:12.560
+Um, again, this table represents, uh, what you'll, what, what, what it looks like for me when I'm
+
+35:12.560 --> 35:22.720
+building for the GNU distributed binaries. All right. So, um, kind of moving, moving as quickly
+
+35:22.720 --> 35:31.200
+as I can here. I'm at 40 after, I believe that's the five minute mark. So, um, having just succeeded
+
+35:31.200 --> 35:37.040
+in, in configuring Emacs, I don't think we're going to build it. Uh, uh, I don't think we're
+
+35:37.040 --> 35:42.720
+going to actually get to running make install. Um, but I have it sitting here on my keyboard
+
+35:43.280 --> 35:54.320
+or clipboard, assuming that we will, right? No. Oh, wow. I think I've managed to confuse this.
+
+35:54.320 --> 36:06.240
+All right. So for me, that looks simply like, uh, make, uh, V equals one install, uh,
+
+36:08.160 --> 36:11.040
+prefix equals, uh,
+
+36:18.400 --> 36:19.920
+and we can at least get it kicked off.
+
+36:20.640 --> 36:27.680
+And that can, that command is just, uh, just is no, no different than I showed on the slide where
+
+36:27.680 --> 36:32.160
+I, where I gave it, uh, wasn't planning to stop and explain it. I was just planning to paste it.
+
+36:33.360 --> 36:38.640
+So, so, so again, recapping the rest of the process here and maybe actually making it,
+
+36:38.640 --> 36:44.320
+if you can believe it or not, through the rest of these slides, um, we, to, to, to create the
+
+36:44.800 --> 36:49.600
+full set of binaries, we're going to need a no dependent, no depths archive. That's without the
+
+36:49.600 --> 36:57.760
+mysys2, uh, deal provided DLLs, just the things that we compile as part of making Emacs. Um,
+
+37:00.320 --> 37:07.840
+the, uh, the build depths zip script is provided with the source distribution is your tool for,
+
+37:07.840 --> 37:11.760
+uh, meeting the GPL requirements, right? Source as mentioned before,
+
+37:12.640 --> 37:18.560
+um, there is a second bug that I did, uh, include some more information on in my notes already.
+
+37:19.680 --> 37:25.600
+Um, that, uh, that gets into the details of this other feature I alluded to.
+
+37:26.480 --> 37:35.120
+Um, I'll just skip into that. Um, we, we can, with, with, uh, with a, an appropriate version
+
+37:35.680 --> 37:42.240
+of that, which you may need a patch, uh, to, to have, you can list out the dependencies
+
+37:42.240 --> 37:47.200
+and, and that version as well. Can consider the dependencies of the Emacs binary versus
+
+37:47.200 --> 37:51.680
+the hard-coded list you might find, depending on when you look at this file in the source tree.
+
+37:53.680 --> 38:01.360
+The diff, um, so I also have a hack here that, uh, works around the absolute requirement to
+
+38:01.600 --> 38:18.320
+run this with the mysys2 and not the minGW64 script. Um, once we've made that zip file that
+
+38:18.320 --> 38:25.360
+contain that's, that's our installed Emacs without the DLLs provided by mysys2, we'll then unpack
+
+38:25.360 --> 38:30.960
+the dependencies that were created by that Python script we just talked about from the Emacs source
+
+38:30.960 --> 38:38.080
+tree. At that point, once those are unpacked, we can now make what's called the full installer,
+
+38:38.080 --> 38:42.800
+or sometimes I might call it the unqualified installer, because it's just going to be called
+
+38:42.800 --> 38:54.800
+Emacs29.1.zip. Um, and that, uh, that file, which, which creates the, the, the, the, the,
+
+38:54.800 --> 39:02.640
+which creates the archive, uh, that, uh, that, that, that file is exactly the same,
+
+39:02.640 --> 39:08.400
+plus the, uh, the dependencies that we unzipped in the bin folder of the installed Emacs.
+
+39:09.680 --> 39:14.480
+The, uh, executable self-installer, which I would love to have more time to talk about.
+
+39:14.480 --> 39:18.720
+I gave a few pointers here on the hard part of running it. Most importantly,
+
+39:19.680 --> 39:26.640
+if I've installed in any kind of funny looking name, I end up renaming it to like Emacs-29.1
+
+39:26.640 --> 39:35.200
+or Emacs-29. or 30.0.50 or whatever. And I just renamed that installed Emacs folder.
+
+39:35.200 --> 39:39.680
+And then I go to the root of wherever I created that, the parent directory above it.
+
+39:40.320 --> 39:46.560
+And that's where I make my copy of the Emacs NSI, um, the, the NSIS script.
+
+39:47.520 --> 39:55.600
+And, uh, that's also where I, and then, um, then from that parent directory, I execute,
+
+39:55.600 --> 40:02.560
+uh, making sys, uh, here. I, as mentioned, um, I, I can get away with this because I have it
+
+40:02.560 --> 40:07.520
+on my path and it's my recollection. I think I tested this and couldn't reproduce the problem.
+
+40:07.520 --> 40:11.200
+So I didn't document it here, but I've had some problems with running this
+
+40:11.200 --> 40:20.400
+when, uh, when NSIS wasn't on my path. The, uh, the, the, the final step here
+
+40:20.400 --> 40:27.600
+and the last, the GPL requirement is to include all the sources, except when I'm doing a release
+
+40:27.600 --> 40:34.320
+build, I always do this. Um, and that's the new practice when making Snapchat binaries is to go
+
+40:34.320 --> 40:39.840
+ahead and include the sources, even though we might have the specific revision number, um,
+
+40:39.840 --> 40:46.800
+our thinking is we want absolute clarity, um, that, that somebody, uh, can say, okay,
+
+40:46.800 --> 40:51.200
+this binary did this thing, send me the source for it. I'm going to go take that into my own
+
+40:51.200 --> 40:56.800
+open source, or yeah, maybe they would, the jerks, um, into my own open source project.
+
+40:56.880 --> 41:03.360
+And, um, you know, off they go, uh, and that needs to be possible.
+
+41:04.800 --> 41:12.480
+Um, so, um, beyond that, the rest of this is, is really detailed that you find covered in the GNU
+
+41:12.480 --> 41:19.520
+maintainers manual. Um, this is the, the current set of Windows binaries that, um, it's busily
+
+41:19.520 --> 41:29.040
+working on creating a like for like a mirror to behind the scenes here is called a 29.1 underscore
+
+41:29.040 --> 41:36.080
+two. Um, and I have a lot of automation, uh, available on this site. So at this point,
+
+41:36.080 --> 41:45.200
+I'm just, I think I'm only a minute, 40 seconds over. I'm gonna invite my, uh, co-organizers
+
+41:45.200 --> 41:49.760
+back onto the call or any volunteers that want to jump in and anybody, if there's people on the
+
+41:49.760 --> 41:57.440
+BBB, I'd be happy to take questions. If there aren't, um, I have a screen full of, uh, the
+
+41:57.440 --> 42:04.080
+automation stuff ready to go as a kind of a second ring in my circus today. So if you're still with
+
+42:04.080 --> 42:08.640
+me, thanks a lot for joining me. And I really enjoyed this talk. Uh, if this is where we're
+
+42:08.640 --> 42:14.560
+going to close it out, I don't know where we're at for schedule today. Thanks a lot for a great
+
+42:14.560 --> 42:20.880
+talk, Corwin. Um, in terms of like schedule, yeah, you went over a little bit for the official,
+
+42:20.880 --> 42:26.880
+like, um, schedule or time of your talk, but I think, uh, we actually have maybe like six or
+
+42:26.880 --> 42:32.640
+seven more minutes, um, here on stream for, um, questions and such, if folks have questions,
+
+42:32.640 --> 42:38.320
+or if you want to like quickly maybe show one or two more things. Um, but I think the hard stuff
+
+42:38.320 --> 42:43.520
+is about like maybe 10 minutes ish for now. And then we'll have to rush over to, um, uh, for the
+
+42:43.520 --> 42:55.520
+closing remarks. So, well, that sounds awesome. Okay. So I'm looking at the, the dev chat. Uh,
+
+42:55.520 --> 43:01.040
+I see a comment on cross-compiling the emacs, but I'm sorry, I'm looking at IRC primarily, but,
+
+43:01.040 --> 43:08.080
+uh, feel free to jump in if you're on, uh, BBB with me, or, uh, uh, if, if you put something on
+
+43:08.160 --> 43:16.400
+the pad, I'm sure, uh, we'll see it between the two of us, uh, over here. Okay. So cross-compiling
+
+43:16.400 --> 43:20.640
+emacs for Serenity. I haven't tried really any cross-compiling. I think that would be very
+
+43:20.640 --> 43:28.240
+interesting. I would most likely focus on doing exactly what I do on a GNU system, completely
+
+43:28.240 --> 43:35.760
+ditching. Um, so I guess with my, my remaining time, rather than walking through code, um, for
+
+43:35.760 --> 43:42.080
+my automation, which can be another talk, if in fact there's an interest in that, um, I want to,
+
+43:42.080 --> 43:48.480
+I guess, say a couple of words about the non-free operating system that I'm using here. I did my
+
+43:48.480 --> 43:58.880
+best to use no non-free software other than the, uh, the operating system that is the context for
+
+43:58.880 --> 44:07.920
+this talk in preparing this talk for you. I personally have a lot more, uh, time and energy,
+
+44:07.920 --> 44:15.840
+I have to say, invested in proprietary tools for doing a lot of the things that, that go into this.
+
+44:15.840 --> 44:22.000
+So I really respect the work of people that pull that off. Um, I'm sorry I didn't get my pre-recorded
+
+44:22.000 --> 44:30.320
+stuff, uh, kind of in order for everybody, but I just want to stress, like, uh, it is all absolutely
+
+44:30.320 --> 44:35.520
+possible and just hats off to everybody that, that used, uh, entirely free software to get their,
+
+44:36.240 --> 44:43.360
+get their recordings done in time. Um, and what you did see, unless it was provided by the operating
+
+44:43.360 --> 44:49.200
+system in my presentation today, was all, uh, free software with the debatable exception of
+
+44:49.200 --> 44:56.160
+NSYS, which styles itself as open source, maybe for, uh, marketing reasons.
+
+44:56.720 --> 45:00.400
+Okay, uh, in any case, uh, certainly we can get all that source.
+
+45:08.080 --> 45:14.640
+Thanks for the note, Corin. It's good to know that, uh, building or, uh, yeah, doing the build of Emacs
+
+45:14.720 --> 45:20.880
+for Windows on Windows can be done, uh, using only free software. Yeah, absolutely.
+
+45:23.440 --> 45:29.520
+Probably the right closing note, right? Um, I just, uh, thanks again to the organizers for
+
+45:29.520 --> 45:33.920
+bearing with me. And like, every time I was like, you guys, I'm terrible at this. They're just like,
+
+45:33.920 --> 45:38.240
+no, you're doing fine. Keep going. You did a great job live last time. You can do it live,
+
+45:38.240 --> 45:43.040
+you know, and, and saying all the right things to just, uh, encourage me to come back,
+
+45:43.920 --> 45:46.160
+uh, this year and every year.
+
+45:49.760 --> 45:53.520
+Well, as I said before, we were very lucky to have you and the rest of the team, of course,
+
+45:53.520 --> 45:59.520
+as well. And, um, goes without saying, but all the speakers and the audience, the participants as
+
+45:59.520 --> 46:14.240
+well. So, um, so, uh, are we, we're still live over here that, you know, you know, me, I'm the
+
+46:14.240 --> 46:22.800
+Mike Hogg that I am. I can't resist, um, throwing, throwing up another screen here. And, uh, in fact,
+
+46:22.800 --> 46:32.160
+let's go ahead and go back to our, to our crawler, right? And I'll bring back our build
+
+46:32.160 --> 46:40.480
+if it finishes and maybe we'll show making the installer as well. Um, uh, but I have the CPU
+
+46:40.480 --> 46:49.680
+account turned down a little bit here. Uh, note, I didn't specify minus J here. Um, so, uh, over
+
+46:49.680 --> 46:54.000
+here is my automation. Uh, in case you do want to take a look, I can at least provide the
+
+46:54.000 --> 46:59.760
+orientation of what you're looking at. Scrape log is probably my first thing I want to show off.
+
+46:59.760 --> 47:08.400
+Um, it's not beautiful, but this works, uh, pretty well for me to get a sense of something might
+
+47:08.400 --> 47:14.640
+have changed in terms of how many warnings or errors are happening when I build Emacs. So I
+
+47:14.720 --> 47:18.640
+have this whole automation going on and I frequently want to answer the question,
+
+47:19.280 --> 47:25.600
+you know, what's the change rate in, uh, warnings or what have you. So this kind of gives me a count
+
+47:26.400 --> 47:36.880
+of that. Um, so from there, uh, accrued CI is the script we're watching run in the other pane.
+
+47:37.840 --> 47:44.960
+Um, we can see it's, uh, just starting to do its thing again.
+
+47:48.800 --> 47:56.960
+And, uh, the make file I mentioned, this is a top-down rewrite of everything else that I've done.
+
+47:57.040 --> 48:08.640
+It has some bugs right now. Um, the, uh, the build distribution is the main script that I use for my
+
+48:08.640 --> 48:17.120
+personal builds. This is what is run by the crude CI script. Uh, it has a fun tie-in to this, uh,
+
+48:17.120 --> 48:23.200
+web interface here, um, where we can, you don't need the port number when you go to it. That's
+
+48:23.200 --> 48:33.680
+just if I'm going to post. Um, the, uh, blah, blah, blah, blah, blah. This, this script is
+
+48:33.680 --> 48:39.120
+really long and complicated and probably needs some diving into, but you can see that, um, one
+
+48:39.120 --> 48:43.760
+of the complexities I have to deal with is that I'm going to need something in the format of an
+
+48:43.840 --> 48:53.920
+emacs-version for strategic, um, nsys reasons. So, uh, it takes care of kind of every complexity
+
+48:54.480 --> 49:03.120
+that I mentioned today in some respects, um, as does the make file. Build release is, um, another
+
+49:03.120 --> 49:11.360
+fairly useful incarnation of this. This is just focused on the release process, and this does
+
+49:11.360 --> 49:18.800
+work, uh, for example, to create the, the, the, you know, like, like, well, I could like, uh,
+
+49:18.800 --> 49:25.600
+for like files as far as I can tell. So what are currently posted for emacs 29.1 and the release
+
+49:25.600 --> 49:32.400
+candidate. Um, so I'll probably use that next time. And if it's still like, for like, I'll
+
+49:32.400 --> 49:40.960
+probably post the ones that came from this. Um, uh, building, uh, TreeSitter, I make some DLLs
+
+49:40.960 --> 49:47.120
+there. If you're looking for hints on how to get going or just simply, uh, a huge long list
+
+49:47.120 --> 49:55.840
+of Git repositories that make grammars, you can use that is here as well. Um, finally, I mentioned
+
+49:55.840 --> 50:04.800
+I have a, um, I have a website where I publish my own personal snapshots that I make, uh, that
+
+50:04.800 --> 50:11.680
+folder full of install directories, but all of the usual GNU style binary distributables, including
+
+50:11.680 --> 50:22.320
+the source code and the source code for the dependencies. Um, the, uh, so this program is
+
+50:22.320 --> 50:27.680
+another one of those complicated find commands and therefore potentially the most useful thing
+
+50:27.680 --> 50:34.960
+in here to take to you. Um, and here I'm deleting, uh, binaries older than 17 years. Uh, everything
+
+50:34.960 --> 50:42.240
+except the, uh, node apps file and the sources of it you'll find on my website. Currently those
+
+50:42.240 --> 50:48.800
+indefinitely, I'll probably roll out 120 days or something, um, for those eventually.
+
+50:53.600 --> 51:00.400
+Oh, uh, I can talk about this one even. Um, the, uh, so here you'll see the two branches that I'm
+
+51:00.400 --> 51:06.560
+tracking. The job of this script is, uh, this runs on the website. I call it with a, like a remote
+
+51:06.560 --> 51:15.920
+rsync, uh, type, uh, or an SSA remote, uh, SSH command. Um, and right after the rsync,
+
+51:15.920 --> 51:26.080
+rsyncing up any new Emacs that I built. And, uh, it's, uh, it's job is to update my fancy
+
+51:26.080 --> 51:34.880
+directory indexing. So let's look at Corwin's website. Here's my Emacs 29 folder.
+
+51:37.360 --> 51:50.400
+We have about two more minutes, Corwin. Yeah. It'll take that entire two minutes to, uh,
+
+51:50.400 --> 51:56.400
+load this directory because I am, because I have not yet ever pruned any of these dang binaries.
+
+51:56.400 --> 52:02.800
+So every version of, uh, Emacs 29 that I've ever made for myself is probably here. Nice.
+
+52:03.600 --> 52:08.480
+Uh, I strongly recommend that you bookmark this folder if you're using these for something and
+
+52:08.480 --> 52:14.240
+you always want the latest. Um, so here, this particular, uh, latest 29, Emacs 29 latest,
+
+52:14.240 --> 52:22.560
+or simply replace the 29 with 30 to get those. Uh, alas, no, no such luck for TreeSetter.
+
+52:23.120 --> 52:26.320
+But if we look at, uh, that,
+
+52:36.400 --> 52:40.320
+live this long without making a typo. Now look at me.
+
+52:40.320 --> 52:46.080
+Uh-oh. Oh.
+
+52:51.520 --> 52:56.720
+So here, um, you know, we can see the icon application and so on, even in the TreeSetter
+
+52:56.720 --> 53:01.440
+folder. This is all I'm talking about, about the fanciness that's set up by that other script that
+
+53:02.400 --> 53:06.880
+I'm showing over here and run after each time I run the upload. It just
+
+53:07.840 --> 53:12.640
+looks to see if anything's new and add some lines to the .htaccess file.
+
+53:15.840 --> 53:22.400
+Um, I'm particularly proud of this one. I'm not going to lie. Um, linking out to each,
+
+53:22.400 --> 53:26.560
+each, uh, project that we're using, letting us know the commit version,
+
+53:26.560 --> 53:34.320
+and then, uh, for the DLLs, quick link out to the log and the signature file for this DLL. Um,
+
+53:36.960 --> 53:46.160
+I find that a lot, just a lot more readable than, uh, listing them all out individually. And I'd
+
+53:46.160 --> 53:53.360
+love to do something like that on the GNU site. So I'm, I think we've got to be out of time by
+
+53:53.360 --> 53:59.600
+now. I've just got to say, hey, thanks again for having me, uh, for those that, uh, watch the talk
+
+53:59.600 --> 54:04.400
+either live or after the conference. Uh, appreciate everyone's support to get me to
+
+54:04.400 --> 54:10.320
+the point where I will be able to, uh, to do this, this, this cool volunteer task,
+
+54:10.320 --> 54:14.160
+uh, which is fun and easy to do and reach out to me if you're interested in helping with it.
+
+54:18.960 --> 54:24.320
+Well, awesome. Thanks a lot for the awesome talk, Corbyn. And, uh, of course, as a fellow
+
+54:24.320 --> 54:29.920
+core, uh, core organizer, uh, for all, for all that you do, um, in and around Emacs Conf
+
+54:29.920 --> 54:33.280
+and of course for, uh, GNU Emacs as well, it's much appreciated.
+
+54:36.160 --> 54:43.200
+Big, big words from coming from you, my friend. Um, thanks for the kind words.
+
+54:45.040 --> 54:49.840
+Cheers. My pleasure. All right. And with that, I think we're gonna, uh, wrap up the dev, uh,
+
+54:49.840 --> 54:55.360
+track here and, uh, we'll be with you again shortly in a few minutes on the gen stream,
+
+54:55.360 --> 55:00.400
+the gen track for the closing remarks for today, um, only for today, because we're going to be
+
+55:00.400 --> 55:07.520
+back tomorrow again as well. So don't go anywhere and, uh, see you on the gen track in a bit.
+
+55:25.920 --> 55:32.720
+Oh my God, I did it. We got done within the time. You're my hero. Um, and thank you so
+
+55:32.720 --> 55:41.520
+much for just keeping me honest there and, uh, like helping me keep my eye on the time and such.
+
+55:41.520 --> 55:53.680
+You have to look at the recording and see whether you feel like doing it again.
+
+55:56.160 --> 55:59.520
+I'm sorry. I had my sound screwed up and I'm sorry if I talked over somebody,
+
+55:59.520 --> 56:01.680
+I couldn't hear anything on mumble until this very moment.
+
+56:03.520 --> 56:08.960
+Oh, uh, because he's your webcam for it. Um, like as a, like a virtual webcam thingy,
+
+56:09.440 --> 56:15.760
+it was low res, especially when things are changing as you're scrolling around. So we'll
+
+56:15.760 --> 56:19.920
+see what kind of recording we can recover from it. And then you can decide whether you maybe
+
+56:19.920 --> 56:26.480
+want to clean it up with like screenshots. I recorded on this end too. We shouldn't have
+
+56:26.480 --> 56:30.720
+that problem with my recording. Thank you. Thank you. Thank you. I think we're still live on the
+
+56:30.720 --> 56:42.240
+dev stream. Someone could, uh, take that off. Oh, yes. Because, uh, I'll, I'll set it to rebroadcast.
+
+56:45.520 --> 56:50.640
+Yeah. I love doing that for the closing remarks. That's a fine tradition
+
+56:52.000 --> 56:58.480
+or it's a tradition now. Cause I'm pretty sure this means we've done it twice.
+
+57:01.680 --> 57:07.360
+I once heard that, you know, uh, as a fan-ish meaning like a fan-ish is a term of endearment
+
+57:07.360 --> 57:12.240
+for a science fiction fan to another. We say we're, we're fans or things we do are fan-ish and
+
+57:12.800 --> 57:18.960
+a fan-ish tradition then is if you do it three times, it's tradition, but we're on a budget here.
+
+57:19.680 --> 57:31.600
+So, all right. I think we should, um, head over to mumble and talk on mumble. Um, and just decide
+
+57:31.600 --> 57:36.240
+and see like which big blue button room we're going to be in for closing. Okay. So we're clear
+
+57:36.240 --> 57:39.600
+on BBB here? Yep. I think so.
+
diff --git a/2023/captions/emacsconf-2023-windows--windows-into-freedom--corwin-brust--main.vtt b/2023/captions/emacsconf-2023-windows--windows-into-freedom--corwin-brust--main.vtt
new file mode 100644
index 00000000..d95d4ea7
--- /dev/null
+++ b/2023/captions/emacsconf-2023-windows--windows-into-freedom--corwin-brust--main.vtt
@@ -0,0 +1,2345 @@
+WEBVTT
+
+00:00.000 --> 00:08.480
+Oh, wow, how exciting. Well, maybe I should share something then. Um, well, thank you very much and welcome to uh
+
+00:11.440 --> 00:13.760
+Welcome to my talk i'm a little distracted here
+
+00:13.760 --> 00:20.080
+I had a friend who came over and just brought me a whole bunch of peanut butter cups homemade peanut butter cups
+
+00:20.080 --> 00:22.080
+Maybe i'll show those off. Uh
+
+00:22.320 --> 00:23.360
+later
+
+00:23.360 --> 00:26.480
+Okay, what okay here, uh, put it right there
+
+00:30.960 --> 00:32.960
+All good stuff
+
+00:33.920 --> 00:40.800
+Okay, so i'm going to uh get over to my planned uh stuff i'm sharing here
+
+00:41.340 --> 00:42.880
+hopefully
+
+00:42.880 --> 00:49.360
+Uh, and and we'll jump jump right in because i'm gonna need as much time as I can possibly have today
+
+00:49.440 --> 00:53.680
+thanks so much for uh joining me for emacs conference and for
+
+00:54.620 --> 00:56.480
+especially for
+
+00:56.480 --> 00:57.600
+um
+
+00:57.600 --> 01:02.960
+all of you who who participated, you know in the discussions contributing talks and
+
+01:03.520 --> 01:09.920
+um, you know, uh, you know, including running the copy the the and it's just so much fun to be here, um
+
+01:11.040 --> 01:15.840
+I guess while i'm standing here and and saying stuff that's that i'm gonna have to
+
+01:16.620 --> 01:19.680
+transcribe because I didn't uh prepare a
+
+01:20.560 --> 01:22.080
+recorded version
+
+01:22.080 --> 01:27.920
+Uh, I had a lot of trouble trimming this down so I can solve that problem by just talking a lot at the beginning
+
+01:28.960 --> 01:30.960
+about other stuff, um
+
+01:33.200 --> 01:36.880
+So in addition to the thanks I just want to say thanks also to the
+
+01:37.120 --> 01:43.040
+Folks on the development list that helped me kind of come up to speed on this. I won't make a big list here. But
+
+01:43.760 --> 01:45.120
+um
+
+01:45.120 --> 01:48.560
+And and for all that i've learned from my previous conferences
+
+01:48.640 --> 01:52.880
+It's just I can't stress enough what a great opportunity volunteering for
+
+01:53.520 --> 01:55.520
+uh free software related things are
+
+01:55.920 --> 02:00.480
+Uh as a way to get involved people will just totally teach you how to be helpful and i'm loving it
+
+02:00.720 --> 02:02.720
+Sasha can you please maximize?
+
+02:02.880 --> 02:04.880
+Hold on
+
+02:14.160 --> 02:17.680
+I can preview the stream, but it's not super easy right now
+
+02:17.760 --> 02:20.240
+I got all my screens kind of dedicated to other stuff
+
+02:20.400 --> 02:24.400
+so should I pause for a second before I get into the slides because there's
+
+02:24.960 --> 02:27.760
+There they'll be hard to see if i'm not full screen
+
+02:28.640 --> 02:36.160
+Yeah, yeah, okay, well i'll keep ad-libbing then because I just have a million, uh things I can say, um
+
+02:37.520 --> 02:43.280
+Uh, so, uh, let me just quickly talk, uh things that aren't in here. Um,
+
+02:43.840 --> 02:50.320
+I'm going to mention the mysis2.org and the that project which provides a port
+
+02:51.360 --> 02:53.360
+of the GNU
+
+02:53.440 --> 02:57.680
+Of uh glibc and a lot of GNU
+
+02:58.640 --> 03:00.640
+and other free software
+
+03:01.280 --> 03:03.280
+um, so
+
+03:03.280 --> 03:07.760
+Uh, I don't pushing a room to uh a dvd room to stefan
+
+03:12.080 --> 03:18.660
+All right, so i'm gonna take mumble out of my uh, pardon me folks just gonna take mumble out of my speakers here
+
+03:19.620 --> 03:21.620
+Okay
+
+03:22.820 --> 03:30.040
+Okay, in fact we'll take the speakers out of play entirely and i'll just switch to some headphones
+
+03:33.620 --> 03:35.140
+All right, so
+
+03:35.140 --> 03:36.820
+Gorman you're good to go
+
+03:36.820 --> 03:43.140
+Perfect. What an amazing amount of time. All right. So thanks a lot. Uh today i've got a jam-packed talk
+
+03:43.860 --> 03:46.260
+Um, i've i've done my best to make
+
+03:46.820 --> 03:52.260
+To make this not too overwhelming, but overall we're going to try to try to actually build
+
+03:52.900 --> 03:57.700
+Um emacs while we're talking today and we might actually build several emacs
+
+03:58.100 --> 04:00.100
+Uh, so let's take a look at that real quick
+
+04:00.420 --> 04:04.900
+Um, so over here we have a screen where I am
+
+04:05.700 --> 04:08.260
+Just once a minute looking. Uh
+
+04:09.120 --> 04:16.840
+Indirectly at whether there have been any pushes, uh upstream to either the emacs 29 or emacs 30 branches
+
+04:17.540 --> 04:19.280
+so i've
+
+04:19.280 --> 04:22.260
+Arranged for us to sort of keep an eye on that
+
+04:22.820 --> 04:30.020
+Um while we talk and you know, maybe that's that's one thing that we'll do and then additionally we'll probably
+
+04:30.660 --> 04:36.180
+Fire up a shell. This is the mysis 2 environment that I talked about before
+
+04:36.660 --> 04:39.460
+And we'll probably create some directories and things
+
+04:40.020 --> 04:46.420
+But before we get into all that let's let's give some some context. I've been doing my best to try to
+
+04:47.060 --> 04:50.420
+Uh, make sure all this information is on the emacs wiki as well
+
+04:51.060 --> 04:55.860
+So, uh, sorry, as I said, I got a little caught off guard. So i'm moving my foot pedals
+
+04:56.820 --> 04:58.820
+To the float back to the floor here
+
+05:00.340 --> 05:04.820
+And I should be able to advance slides here. All right, so
+
+05:05.700 --> 05:07.700
+um
+
+05:07.860 --> 05:13.540
+I kind of provided some special definitions for things i'm going to kind of level set with those
+
+05:14.740 --> 05:16.740
+the uh
+
+05:17.460 --> 05:24.580
+Um when I say a binary release i'm talking about some some i'm talking about emacs for windows as
+
+05:25.060 --> 05:29.780
+Just ready to run out of its folder or in whatever similar form
+
+05:30.340 --> 05:35.620
+The when I say a build i'm talking about kind of a process of doing that
+
+05:36.420 --> 05:40.760
+Um when emacs.get of course, that's the upstream hosted by gnu savannah
+
+05:41.620 --> 05:47.140
+The emacs release is a tarball created from that the sources
+
+05:48.580 --> 05:53.940
+For um emacs are going to be one of those two things
+
+05:54.740 --> 06:01.460
+Um very specifically so i'm not going to talk about patches patching there's some implications there perhaps we'll get into it
+
+06:02.660 --> 06:03.620
+uh
+
+06:03.620 --> 06:08.820
+So a snapshot is when I build from anything other than a release source
+
+06:09.860 --> 06:11.860
+uh a tarball
+
+06:11.860 --> 06:15.320
+um, just if I if I say that i'm talking specifically
+
+06:16.340 --> 06:18.340
+about the uh, the xz
+
+06:18.980 --> 06:22.100
+Version of the file as as a technical point
+
+06:22.900 --> 06:29.060
+Um, so that may come up. All right, nothing else I think up my sleeve. Um
+
+06:29.780 --> 06:30.820
+the
+
+06:30.820 --> 06:36.900
+Uh as as a key data point it's worth understanding that there's a file called configure ac
+
+06:37.540 --> 06:43.700
+It's going to be processed, uh as part of autoconf. We we initially access that when we run
+
+06:44.500 --> 06:47.540
+Um autogen as you'll see in a little bit
+
+06:48.180 --> 06:49.380
+um
+
+06:49.380 --> 06:56.340
+The but before but um, so the autogen script will generally consider this. Uh, so in a release build
+
+06:57.220 --> 07:02.260
+Um, this has been thought about kind of for us as part of um making the tarball
+
+07:03.300 --> 07:05.300
+um the configure dot a
+
+07:05.860 --> 07:07.300
+ac
+
+07:07.300 --> 07:08.580
+um
+
+07:08.580 --> 07:11.540
+Yeah, I think I pretty much covered covered this so
+
+07:12.420 --> 07:19.380
+Um those those that kind of partially built status that's a might be another phrase that you hear me use
+
+07:19.540 --> 07:20.900
+so this
+
+07:20.900 --> 07:22.900
+Slide unpacks that a little more
+
+07:24.900 --> 07:26.420
+Um
+
+07:26.420 --> 07:29.720
+So it can be a little confusing to understand what exactly?
+
+07:30.580 --> 07:36.100
+the you know, what is it, you know, how stable is emacs depending on what I have so that I got a
+
+07:36.980 --> 07:43.140
+It's kind of a set of rules of thumb here right first I want the highest, uh, you know dot
+
+07:43.780 --> 07:49.220
+Uh dot release value that I can get assuming that that's higher than one
+
+07:49.620 --> 07:55.800
+If it's if it were to only be one, let's say my choices were 29.1 and 30.1
+
+07:56.340 --> 07:58.340
+I would take 30.1
+
+07:58.340 --> 07:59.220
+um
+
+07:59.220 --> 08:01.700
+because that's that's weird, but um
+
+08:02.260 --> 08:05.000
+What you'll normally see is you might see a 28.2
+
+08:06.100 --> 08:08.100
+You might see a 29.1
+
+08:08.820 --> 08:14.660
+So here I think 28.2 has got the most most most stable
+
+08:15.540 --> 08:16.580
+um
+
+08:16.580 --> 08:18.580
+set, uh the
+
+08:18.740 --> 08:20.740
+uh, or set of release binaries
+
+08:21.540 --> 08:23.040
+the
+
+08:23.040 --> 08:27.620
+29.1 will will have a little more features, but will tend to be more stable
+
+08:28.340 --> 08:29.380
+than
+
+08:29.380 --> 08:32.200
+Any lower point releases for 29
+
+08:32.920 --> 08:37.720
+Uh, certainly than any release candidates for 29, which might even have new features
+
+08:38.200 --> 08:42.760
+Um, but are mostly going to just be patches so they're going to become the most stable
+
+08:43.320 --> 08:44.840
+thing here
+
+08:44.840 --> 08:47.160
+and especially if they they have a
+
+08:48.120 --> 08:50.120
+You know if this this is not
+
+08:50.200 --> 08:56.040
+Uh, if this were to be 29.2 release candidate one as well looking forward to seeing
+
+08:56.680 --> 08:57.960
+um
+
+08:57.960 --> 08:59.960
+the
+
+09:00.180 --> 09:02.180
+30.0.50
+
+09:02.280 --> 09:03.240
+um
+
+09:03.240 --> 09:09.800
+And and in between this this pre-test here, we're talking about kind of developer land. Um, so
+
+09:10.680 --> 09:14.360
+Um, the expectation is that you know what you're doing that applies to windows users
+
+09:14.920 --> 09:20.680
+Uh just as much if you are building anything in the snapshot range any of that is going to be in this
+
+09:21.220 --> 09:24.040
+30.0.50 currently that'll change when
+
+09:24.680 --> 09:25.880
+the
+
+09:25.880 --> 09:27.080
+when the
+
+09:27.080 --> 09:32.520
+30 30 an emacs 30 release tags, uh, or release branches come
+
+09:34.120 --> 09:36.120
+Okay, so
+
+09:37.480 --> 09:43.160
+Let's talk about the local um, there's not much to know about what I have going on
+
+09:43.640 --> 09:47.560
+except that I have my my paths mess messed with so
+
+09:48.840 --> 09:52.520
+Um, if if that that were to come up if you're wondering how why does this?
+
+09:52.840 --> 09:58.040
+Uh in in sys command work that's that's probably the way place where you notice it
+
+09:58.600 --> 10:01.640
+Uh, I am using windows 10. I haven't tried windows 11
+
+10:02.120 --> 10:06.040
+Uh as mentioned my sys2 is critical to all this
+
+10:06.200 --> 10:11.240
+There's one script in particular that will error out if you try to do anything other than use my sys's
+
+10:11.720 --> 10:14.520
+My sys's shell and in fact my sys owns
+
+10:14.920 --> 10:21.800
+Or provides three shells and of them that script is designed to work with a specific one of them as we'll come to
+
+10:23.160 --> 10:30.040
+I don't talk about installing the dependencies, but just as as kind of some kind of help. Um,
+
+10:31.000 --> 10:35.000
+You can search using this formula and install
+
+10:37.000 --> 10:40.920
+Using this formula good luck with those, you know grep commands
+
+10:43.640 --> 10:50.860
+And sys is the tool for building the self-installing self-extracting installer or uh executable self-installer
+
+10:51.820 --> 10:55.580
+Um, the script for that is provided along with the emac source
+
+10:56.780 --> 11:03.900
+Um, and i've provided a helpful link to the main page for the project download link on the left. It is not
+
+11:05.180 --> 11:10.700
+It's kind of scare where the way that this link appears, but I have clicked it and it's working for me
+
+11:14.200 --> 11:19.340
+Automation does uh, we'll we have some time we'll be looking at this at a minimum
+
+11:19.340 --> 11:24.540
+I wanted to mention that what I do on my local what you're seeing in the crawler, I hope
+
+11:25.260 --> 11:27.260
+uh represents a
+
+11:27.740 --> 11:29.740
+uh
+
+11:30.700 --> 11:35.580
+A simple sleep loop, uh, and we'll we'll look into that if we have time
+
+11:36.540 --> 11:43.820
+Um, I do have a little but I do use like a cron job and so on to clean up some hosting that I pay for
+
+11:44.380 --> 11:47.580
+Um where i've got where I where I kind of self-host
+
+11:48.300 --> 11:50.300
+some uh snapshots
+
+11:50.700 --> 11:53.260
+more stuff than I feel comfortable uploading to
+
+11:54.220 --> 11:56.220
+uh, to gnu
+
+11:57.820 --> 11:59.820
+The um
+
+12:01.740 --> 12:07.500
+You know, I never said, uh, my name is corwin bruce for the last couple of years i've been the volunteer making
+
+12:08.220 --> 12:14.380
+Uh making the snapshots the quote-unquote official binaries, uh for windows of the
+
+12:15.580 --> 12:17.100
+um
+
+12:17.100 --> 12:23.180
+Of of emacs for windows. So that's that's all the different versions. Uh help is always welcome with that
+
+12:23.180 --> 12:26.540
+I'd be very happy to teach you in more depth. This video is
+
+12:27.100 --> 12:33.420
+You know kind of my drop dead file. Uh, I don't have specific plans. Uh, if somebody's like hey get out of the way
+
+12:33.500 --> 12:35.500
+This is the one thing I think I can do
+
+12:35.660 --> 12:37.660
+Um, hey, that's real relatable
+
+12:39.100 --> 12:46.220
+Okay, um, so I haven't tried uh, the I haven't tried a lot of fun things that I won't talk about
+
+12:46.940 --> 12:52.540
+um, the uh, the rest of this talk is going to get into the nitty-gritty as I said, um
+
+12:52.860 --> 12:58.620
+If we can't convince emacs to start building over on that screen, we'll be opening it up here on the center stage
+
+12:59.500 --> 13:01.500
+um
+
+13:01.900 --> 13:07.820
+Uh, this begins and there's there's there's there's great insight here too on the wiki, uh
+
+13:08.300 --> 13:11.980
+With picking an ftp source for any official release
+
+13:12.780 --> 13:15.500
+That is for a stable product. Please visit
+
+13:16.460 --> 13:18.460
+Um ftp.gnu.org
+
+13:19.020 --> 13:24.220
+Otherwise, you'll want to switch that ftp dot at the beginning to alpha dot and take a pre-test
+
+13:25.020 --> 13:29.260
+Uh, or any snapshot or otherwise then they're not published there
+
+13:30.140 --> 13:32.140
+The uh next
+
+13:32.540 --> 13:34.540
+uh, you know
+
+13:34.620 --> 13:41.260
+i'm gonna you have some examples in here that assume that you're doing a release build that you're doing 29.1, but
+
+13:41.820 --> 13:47.260
+um, i'm glancing out of the the right side of my face at the
+
+13:48.060 --> 13:52.480
+Chat on the optance anybody in there wants to direct me at a particular
+
+13:53.180 --> 13:55.820
+Um, we can make some other we can build something
+
+13:56.540 --> 14:02.460
+Else if you want to see a snapshot build more mention that um the examples that you're going to see here
+
+14:03.500 --> 14:06.540
+That I will without other direction cut and paste
+
+14:07.260 --> 14:09.100
+um
+
+14:09.100 --> 14:11.100
+Are all based on a release bill
+
+14:12.380 --> 14:14.380
+so
+
+14:14.620 --> 14:21.840
+Um, and so, uh, we'll use the uh, I mentioned that there are several shells provided by mysis2
+
+14:22.160 --> 14:24.160
+To the min-gw64
+
+14:25.520 --> 14:28.160
+Shell is the one that we mostly need
+
+14:28.880 --> 14:33.440
+Um, I tested all of this as well with the min-gw32 shell
+
+14:34.240 --> 14:35.680
+um
+
+14:35.680 --> 14:40.400
+So that that should work and and see mix binaries that that work for me
+
+14:44.080 --> 14:46.000
+Uh
+
+14:46.000 --> 14:50.180
+I as I mentioned, I don't get into the details of installing all your prerequisites
+
+14:50.720 --> 14:53.920
+I found that doing it in a headfirst manner wasn't uh,
+
+14:54.640 --> 15:00.240
+Wasn't difficult and I also found that there's a number of tutorials. I didn't want to pick one to link here
+
+15:03.280 --> 15:05.280
+Um there uh
+
+15:06.160 --> 15:08.400
+Here are uh, okay, so
+
+15:10.240 --> 15:14.960
+Our general formula for building emacs irrespective of windows
+
+15:15.520 --> 15:16.800
+looks like
+
+15:16.800 --> 15:20.420
+Does the configure script exist if not run autogen?
+
+15:21.280 --> 15:23.280
+from a windows build standpoint
+
+15:23.920 --> 15:30.400
+This is if i'm not running a release that release build call the autogen script
+
+15:31.040 --> 15:34.580
+Right and this would be in the directory where we want to pack this i'll demonstrate
+
+15:35.200 --> 15:37.040
+within
+
+15:37.040 --> 15:39.040
+three minutes if uh
+
+15:39.600 --> 15:42.240
+If one if nobody's pushed upstream to emacs
+
+15:42.800 --> 15:43.920
+um
+
+15:44.000 --> 15:47.120
+so, uh the configure, uh, and
+
+15:48.080 --> 15:50.080
+configure options
+
+15:50.320 --> 15:52.320
+are uh
+
+15:53.600 --> 15:58.480
+Uh the configure, you know if the configure sorry if the configure script exists then
+
+15:58.800 --> 16:05.760
+Uh doesn't doesn't exist. So the only reason so in my process I will always execute that step because I clean everything
+
+16:06.480 --> 16:09.860
+after every build, um in all my contexts
+
+16:10.820 --> 16:13.700
+um, however, if you were you know had a
+
+16:14.320 --> 16:19.140
+Checkout of emacs dot get and you are building it at several releases
+
+16:19.300 --> 16:22.100
+Then maybe you've got a configure script and then you'll want to know
+
+16:22.740 --> 16:24.580
+um the you know
+
+16:24.580 --> 16:31.800
+Whether you have to bootstrap and the typical complexities, but otherwise you might be able to skip that in in the abstract
+
+16:32.820 --> 16:34.820
+um
+
+16:36.100 --> 16:38.100
+Is that right or is it is
+
+16:38.420 --> 16:42.820
+Make uh, so and if the make file doesn't exist make install. I know i'm
+
+16:43.380 --> 16:46.100
+Looking at that and i'm questioning whether it's correct. Sorry about that
+
+16:48.020 --> 16:54.440
+Um in any case, uh, so autogen configure make install is our recipe autogen
+
+16:55.060 --> 16:59.620
+Creates the configure script configure creates the make file the make file
+
+17:00.020 --> 17:04.120
+Um in the case of windows, I almost always want the install
+
+17:04.840 --> 17:09.560
+Uh and to specify some location where the installed emacs will land this is
+
+17:10.440 --> 17:11.320
+where
+
+17:11.320 --> 17:13.980
+all of the recipes for packaging emacs
+
+17:14.680 --> 17:15.720
+go
+
+17:15.720 --> 17:17.720
+and if I were
+
+17:18.600 --> 17:22.440
+You know using this as a movie to upgrade I personally would do that by
+
+17:23.080 --> 17:26.440
+by specifying an install path quote unquote on top of
+
+17:27.240 --> 17:33.640
+Uh a main installation. I don't do that. I update shortcuts manually based on what specifically I want to try
+
+17:34.120 --> 17:39.640
+Uh in an effort to to to notice, uh interesting patches and confirm they work on windows
+
+17:41.240 --> 17:45.560
+Which mostly they do there's not a lot of code in my experience that is
+
+17:46.200 --> 17:49.720
+Windows specific and very very little around the build process
+
+17:50.360 --> 17:51.400
+All right
+
+17:51.400 --> 17:59.160
+Huge rabbit hole zone and I still have a minute before I have to kick off the first part of our demo
+
+18:00.120 --> 18:01.240
+so
+
+18:01.240 --> 18:03.880
+Let's let's keep keep diving in
+
+18:04.200 --> 18:05.240
+um
+
+18:05.240 --> 18:13.400
+The those specific part windows specific parts beside the dot exe extension that we're going to find slammed onto all of our familiar
+
+18:14.040 --> 18:17.640
+Uh executables. We're also going to have emacs client w
+
+18:18.360 --> 18:22.040
+Which is a wrapper that hides?
+
+18:22.760 --> 18:24.760
+um how hard it is to get
+
+18:25.160 --> 18:27.160
+Uh to take it
+
+18:27.640 --> 18:31.800
+How bad the abstraction is between the window management layer and the gooey?
+
+18:32.440 --> 18:38.940
+And then all the different parts on windows essentially it wants to create a shell window if we just double click emacs.exe
+
+18:39.480 --> 18:41.480
+So emacs client w
+
+18:41.640 --> 18:44.200
+Uh and run emacs are going to solve that problem
+
+18:45.160 --> 18:46.680
+um
+
+18:46.680 --> 18:49.260
+Wrapping emacs and emacs client respectively
+
+18:51.640 --> 18:53.400
+And
+
+18:53.400 --> 18:55.400
+Just uh
+
+18:56.520 --> 19:02.360
+All right, so let's let's go ahead and do something i'll i'm going to take away the ticker here for a minute
+
+19:02.520 --> 19:06.600
+And what you're not seeing is off stage. I am
+
+19:07.400 --> 19:09.900
+Killing that so we don't get builds in parallel
+
+19:11.480 --> 19:13.480
+Um
+
+19:15.960 --> 19:17.480
+So, um
+
+19:17.480 --> 19:21.720
+So at this point i'm going to open up a shell and i'm going to start talking just a little bit about
+
+19:22.360 --> 19:27.640
+My local build environment, which we haven't gotten into in fact just to make that even easier
+
+19:28.520 --> 19:30.520
+let's um
+
+19:31.160 --> 19:36.040
+Let's just take a look at it a little bit probably the easiest spot
+
+19:37.560 --> 19:39.560
+Is
+
+19:40.280 --> 19:42.280
+Here
+
+19:47.720 --> 19:51.980
+All right, so here we have the familiar windows my computer interface
+
+19:52.600 --> 19:56.200
+I have the g drive and the h drive
+
+19:56.840 --> 19:58.840
+four terabyte drives
+
+20:00.040 --> 20:02.040
+um dedicated to
+
+20:02.440 --> 20:03.720
+my
+
+20:03.720 --> 20:07.000
+um, really overblown emacs build process
+
+20:08.200 --> 20:15.240
+Um, this just lets me be super lazy. There's no reason you need any massive amount of storage to do any of this
+
+20:15.800 --> 20:20.600
+Um inside here and now i'll actually switch you back to the other screen
+
+20:21.960 --> 20:23.960
+um
+
+20:24.040 --> 20:26.040
+We'll we'll find
+
+20:35.880 --> 20:37.880
+Oops
+
+20:38.600 --> 20:40.600
+Sorry about that
+
+20:40.680 --> 20:42.680
+It didn't take the time to label that one
+
+20:42.680 --> 20:44.600
+Label that one
+
+20:44.600 --> 20:48.680
+Um, so here you can see the primary output that
+
+20:49.400 --> 20:52.440
+That i'm looking at through this automated process
+
+20:52.600 --> 20:58.280
+I come along I look at the bug reports or maybe i'm just restarting my computer and choosing what emacs
+
+20:58.840 --> 21:02.920
+version at random and then in that case, I look at this modified date and I say
+
+21:03.480 --> 21:05.480
+um my config that I
+
+21:05.880 --> 21:09.160
+You know that i'm playing with right now is all set for emacs 30
+
+21:09.320 --> 21:12.760
+Or i'm testing them both and i'm relaunching both of these right
+
+21:13.240 --> 21:17.720
+So for me that starts by diving into the install folder going into the bin folder
+
+21:18.200 --> 21:24.520
+Which looks exactly the way my automation leaves it. I then come in to run the run emacs
+
+21:25.000 --> 21:27.000
+And I create a shortcut
+
+21:27.480 --> 21:29.480
+um
+
+21:29.640 --> 21:30.760
+To it
+
+21:30.760 --> 21:31.960
+so
+
+21:31.960 --> 21:35.880
+I'm a keyboard person. So that's usually done like this
+
+21:36.760 --> 21:41.800
+And then I just know that the context menu is going to come up in the right place so i'll come up and
+
+21:42.840 --> 21:44.840
+um
+
+21:44.900 --> 21:49.080
+Possibly change the change the shortcut, right?
+
+21:53.080 --> 21:55.080
+If I don't mess with it
+
+21:56.680 --> 21:57.640
+Um
+
+21:57.640 --> 22:03.800
+So here's where i'll add my minus q if that's kind of where my world is at or it kind of depends on what i'm doing
+
+22:03.880 --> 22:06.840
+With these which varies week to week
+
+22:07.480 --> 22:11.820
+Um, so restarting my emacs, uh involves doing the same thing going to my desktop
+
+22:12.600 --> 22:15.740
+And where you'll find a number of emac shortcuts
+
+22:17.000 --> 22:19.000
+and
+
+22:20.680 --> 22:23.240
+Um updating the shortcut in the same manner
+
+22:23.960 --> 22:31.580
+Actually, maybe we'll just let's go back there and just show it. So if we look at for example my erc
+
+22:33.880 --> 22:36.360
+You can see it's going to be pointing at one of these
+
+22:37.400 --> 22:39.400
+clones, and then it's gonna
+
+22:39.720 --> 22:45.080
+Maybe tell me that I want it wants to be full screen. No, not currently and then it might uh,
+
+22:45.560 --> 22:52.620
+Have some stuff in there about auto loading a config and what connections i'm going to some commands i've defined to start connections
+
+22:53.340 --> 22:55.340
+So
+
+23:00.620 --> 23:06.940
+All right, and sorry I got a phone call I was checking it wasn't in an order the organ the other organizers giving me the hook
+
+23:08.700 --> 23:14.380
+So, um, all right, so that's that's probably enough on the local system. Let's get back to
+
+23:15.580 --> 23:22.380
+To to building emacs and now it hopefully makes a certain amount of sense when I say we're gonna wander over to the h drive
+
+23:22.620 --> 23:24.700
+and recreate the structure that
+
+23:25.660 --> 23:27.180
+both
+
+23:27.180 --> 23:33.660
+My process sort of assumes and the scripts you'll find in the admin nt
+
+23:34.300 --> 23:37.740
+Uh build disk folder in source
+
+23:38.940 --> 23:44.860
+Used to assume those scripts are in need of some love and in just a little bit i'll be mentioning a build
+
+23:45.420 --> 23:46.940
+uh
+
+23:46.940 --> 23:47.900
+a uh
+
+23:47.900 --> 23:53.980
+A a particular bug that you might want to pay attention to if you're interested in making a self installer
+
+23:54.780 --> 23:56.780
+all right, so
+
+23:57.020 --> 23:58.140
+um
+
+23:58.140 --> 24:00.140
+We're going to create
+
+24:01.260 --> 24:04.160
+Uh an emacs build directory
+
+24:08.460 --> 24:15.500
+And we've got a handy git clone stage git clone command stage for ourself that would work
+
+24:16.380 --> 24:18.380
+um
+
+24:19.420 --> 24:26.160
+Do not currently see anybody lobbying for that. So instead we will run the rather faster
+
+24:28.140 --> 24:30.140
+Uh w get command
+
+24:30.940 --> 24:37.020
+On savannah, which is not pasted in here. Nice. Let's see if I can freehand it not gonna do it
+
+24:37.820 --> 24:39.820
+uh
+
+24:45.500 --> 24:47.500
+Um
+
+24:51.980 --> 24:56.480
+Beg your pardon i'm grabbing a url from the internet
+
+25:00.060 --> 25:04.460
+Uh, okay. Yeah, I can't I can't honestly I can't freehand it whatever
+
+25:06.060 --> 25:07.660
+Sorry, I uh
+
+25:07.660 --> 25:11.340
+I didn't have that bookmarked and all handy like I thought I did
+
+25:12.060 --> 25:14.300
+Um, so we'll just say ftp.gnu
+
+25:15.260 --> 25:17.260
+.org
+
+25:17.900 --> 25:24.560
+Uh, what is it pub emacs emacs-29.1
+
+25:26.460 --> 25:28.460
+Uh
+
+25:34.860 --> 25:36.860
+Hmm
+
+25:36.860 --> 25:38.860
+I
+
+25:40.700 --> 25:42.700
+Didn't
+
+25:43.100 --> 25:48.060
+Really think i'd have this command sitting around it makes me want to scrap the whole demo i'm not gonna lie
+
+25:48.940 --> 25:50.940
+Okay, how am I doing your time?
+
+25:51.820 --> 25:58.140
+Um, I think at least 15 minutes. Um, but in the command that you were freehanding should the pub be gnu instead
+
+25:59.100 --> 26:01.100
+Oh, thanks
+
+26:01.100 --> 26:03.100
+I'm, sorry
+
+26:07.420 --> 26:13.420
+There we go, thank you. All right, and then we'll
+
+26:17.820 --> 26:20.220
+And i'm not sure I provided commands for this either
+
+26:22.940 --> 26:29.660
+But it is trivially easy to do and while that happens we'll get to move on a few slides
+
+26:29.820 --> 26:31.820
+Um
+
+26:31.820 --> 26:35.660
+The configure script i'm not talking about in a lot of detail
+
+26:35.740 --> 26:40.460
+But I do want to mention that the gnu binaries are provided with native
+
+26:41.820 --> 26:46.080
+Uh compilation enabled that's the feature that uses gcc
+
+26:46.620 --> 26:53.020
+lib gcc get on windows if available that looks gcc get will be used
+
+26:53.740 --> 27:00.620
+Um, but when but if if emacs has that feature then it will take by compile
+
+27:01.420 --> 27:03.420
+native code and
+
+27:04.040 --> 27:05.100
+asynchronously
+
+27:05.100 --> 27:07.100
+Compile that as needed
+
+27:07.340 --> 27:09.340
+uh with the ahead of time feature
+
+27:09.660 --> 27:14.860
+We're going to do as much of that ahead of time and for folks that are consuming the windows binary
+
+27:14.860 --> 27:19.020
+The thinking goes that they might not have mysys too. They might not have
+
+27:19.740 --> 27:21.740
+Gcc jet they might be
+
+27:22.140 --> 27:24.140
+Happy that they're enabled
+
+27:24.140 --> 27:28.400
+In a you know a lot of time run emacs on their local environments
+
+27:30.460 --> 27:31.580
+At all
+
+27:31.580 --> 27:34.700
+You know in a maybe a lockdown at a corporate context
+
+27:35.420 --> 27:36.460
+so
+
+27:36.460 --> 27:37.660
+aside
+
+27:37.660 --> 27:38.860
+that
+
+27:38.860 --> 27:40.880
+There's your first glimpse at the configure
+
+27:42.140 --> 27:46.220
+Program that we're going to run in a moment. In fact, i'm going to go as far as
+
+27:47.020 --> 27:49.020
+Putting it on the clipboard
+
+27:49.100 --> 27:50.540
+um
+
+27:50.540 --> 27:53.260
+Really just looking at this the aot flag
+
+27:53.340 --> 27:58.620
+It's the one i'd call attention to but it's worth understanding that windows doesn't provide a dbus capability
+
+27:58.700 --> 28:02.700
+So windows native program isn't gonna be able to depend on dbus. We're gonna
+
+28:03.500 --> 28:08.960
+We're gonna explicitly ask that that be left out. I think that's actually optional. It's documentation
+
+28:09.260 --> 28:12.940
+I think the configure program is smart enough to know that we don't want dbus
+
+28:13.660 --> 28:15.100
+on windows
+
+28:15.100 --> 28:22.860
+Um, otherwise we tend to compile with things. Um, there there's missing documentation. We could say the uh,
+
+28:23.340 --> 28:26.780
+all of the libraries are treated in the way I mentioned in that
+
+28:27.900 --> 28:30.700
+Jpeg support will be available as long as
+
+28:32.060 --> 28:36.940
+Jpeg is is available in our environment and configure script certainly notices that
+
+28:37.500 --> 28:44.700
+Um, the new provided binaries are provided with minus o2 and that's also my default personally on windows. Um,
+
+28:45.580 --> 28:48.380
+However, and i'm going to skip this since I mentioned it
+
+28:49.260 --> 28:51.260
+um mentioned
+
+28:51.260 --> 28:53.260
+uh, and uh
+
+28:54.620 --> 28:56.460
+Um
+
+28:56.460 --> 29:00.380
+So I guess i'll say um, you can um say with
+
+29:01.420 --> 29:02.300
+the
+
+29:02.300 --> 29:08.620
+It's worth knowing that you if you're not one reason that that you're building might be because you want to turn off native
+
+29:08.920 --> 29:14.140
+Compilation for whatever reason if you have load juices you get it, but don't want emacs to use it
+
+29:14.700 --> 29:18.400
+Uh, especially as that default looks like it could be changing with emacs 30
+
+29:19.420 --> 29:20.540
+um
+
+29:20.540 --> 29:22.060
+the uh
+
+29:22.060 --> 29:27.100
+the debug configuration, um, this is this is the uh, kind of
+
+29:27.740 --> 29:34.060
+Uh, what what i'm currently using this on commentary. Uh, i've seen on the emacs development list
+
+29:34.060 --> 29:36.060
+Um
+
+29:40.620 --> 29:44.220
+All right, let's check on our checkout and see if we can't get a build running
+
+29:44.620 --> 29:48.300
+Um, this is a release build so I won't be starting with
+
+29:49.260 --> 29:51.920
+Uh, so we'll start by hopping into its directory
+
+29:53.980 --> 29:57.100
+And we um we have
+
+29:59.020 --> 30:01.020
+Uh
+
+30:05.020 --> 30:07.020
+But not
+
+30:11.260 --> 30:14.060
+Okay, so that tells us we're gonna run
+
+30:15.660 --> 30:17.660
+Our configure program
+
+30:18.540 --> 30:21.260
+But we don't need to run uh config ic
+
+30:23.260 --> 30:25.260
+So
+
+30:31.340 --> 30:33.580
+So let's get that going and
+
+30:34.060 --> 30:36.060
+uh
+
+30:36.060 --> 30:41.280
+Hopefully that's showing through just enough to be fun not too much to be distracting
+
+30:46.540 --> 30:49.440
+Um the uh the unoptimized
+
+30:52.140 --> 30:58.320
+Um, please report issues if your emacs is crashing, uh to the emacs development list not to me personally
+
+30:59.100 --> 31:02.220
+Um, although you are of course welcome to copy me
+
+31:02.700 --> 31:08.540
+Um, if you especially i'm subscribed to that list so I get all the mail so I don't mind being copied
+
+31:09.100 --> 31:11.020
+uh, and
+
+31:11.020 --> 31:12.380
+as well
+
+31:12.380 --> 31:13.740
+if you think it's
+
+31:13.740 --> 31:15.100
+uh
+
+31:15.100 --> 31:17.500
+You know related to packaging that actually makes sense
+
+31:18.060 --> 31:24.700
+Or windows related even and uh, it can be tested with an extra snapchat that should be uploaded to the gnu alpha side
+
+31:25.100 --> 31:27.500
+I could look at that if I have time
+
+31:27.820 --> 31:29.340
+Okay
+
+31:29.340 --> 31:31.660
+That is with the configure script to make file for
+
+31:32.200 --> 31:39.500
+Emacs is really really complicated if time permits which i'm, you know now confident it will not
+
+31:39.900 --> 31:45.500
+We will look at a makefile that I tried writing that orchestrates this whole process that i'm talking about
+
+31:47.180 --> 31:53.900
+Um as uh, let's see, so the build uh build process I run my builds with
+
+31:54.380 --> 31:58.220
+Uh explicitly specifying the max cpu, uh
+
+31:59.340 --> 32:01.180
+with minus j
+
+32:01.180 --> 32:08.380
+But minus b1 to get the full build, uh full login to your recipes. That is probably the magic thing
+
+32:09.100 --> 32:10.620
+that um
+
+32:10.620 --> 32:12.620
+shouldn't to understand with uh
+
+32:15.980 --> 32:23.520
+Or that uh that that uh that i'm glad that I know, uh as i'm trying to write my automations
+
+32:24.700 --> 32:26.700
+um
+
+32:26.940 --> 32:28.940
+Uh the um
+
+32:29.820 --> 32:34.060
+So I call that out here the binary, uh releases
+
+32:35.020 --> 32:39.100
+Okay. So in this section, we're going to start to get into what are all those files
+
+32:39.500 --> 32:43.020
+And there's a bug report related to that that I didn't get into here. So
+
+32:43.580 --> 32:47.340
+Um, that's kind of to the point about the less said about this the better
+
+32:47.660 --> 32:51.420
+That's my explanation for stepping through some of these slides. Uh, of course
+
+32:52.380 --> 32:54.380
+Share them all um
+
+32:55.820 --> 32:58.220
+Hopefully by the time that this video is published
+
+33:01.180 --> 33:07.180
+I mentioned it. Um, I may have mentioned already freshly installed but uh fully installed
+
+33:07.660 --> 33:13.020
+uh this the the key distinction here is that uh emacs is
+
+33:13.400 --> 33:20.700
+Distributed in the binary form for windows with some dll files that actually come from the mysis 2
+
+33:21.000 --> 33:26.220
+Project there's an implication there to gcc that I definitely want to get to it talking about
+
+33:28.060 --> 33:30.620
+Um, so freshly installed means
+
+33:31.340 --> 33:34.700
+We haven't copied those binaries from the mysis 2
+
+33:35.340 --> 33:37.180
+uh installation
+
+33:37.180 --> 33:39.180
+into the emacs
+
+33:39.480 --> 33:41.260
+uh installation
+
+33:41.260 --> 33:43.020
+uh, and then
+
+33:43.020 --> 33:48.300
+When we re-archive that local emacs installation, that's how we're going to create the full zip
+
+33:48.620 --> 33:53.020
+So hopefully that actually is a pretty good summary of what all those files are
+
+33:53.660 --> 33:57.900
+Um, but there are readme files on the ftp. They do a pretty good job
+
+33:59.020 --> 34:05.900
+If you can dig enough to find one and my apologies for uh tardiness getting a new version on that posted
+
+34:07.260 --> 34:09.180
+um
+
+34:09.180 --> 34:10.620
+the emacs
+
+34:10.620 --> 34:17.020
+Uh, so those dependencies, uh are listed within the emacs itself and as we'll just talk about in a moment
+
+34:17.020 --> 34:18.300
+There's a way
+
+34:18.300 --> 34:21.500
+uh that we can use we can access that
+
+34:22.220 --> 34:26.880
+When we collect them in order to meet the gcc requirement that is essentially
+
+34:27.660 --> 34:29.660
+to include
+
+34:29.660 --> 34:35.260
+Um include the sources for the for those binaries the things that were compiled against
+
+34:36.460 --> 34:38.460
+um
+
+34:39.100 --> 34:42.620
+The uh, so so here we go, we're we're into the build process
+
+34:42.700 --> 34:46.060
+Let's just take a look and see if configure it got done it sure did
+
+34:46.540 --> 34:48.540
+and now we can see a table of
+
+34:49.080 --> 34:51.080
+Hopefully good, but good and bad news
+
+34:51.900 --> 34:53.580
+um in potential
+
+34:53.580 --> 34:58.940
+um where we're learning that we're using the pdumper strategy and any number of other things that we might be
+
+34:59.180 --> 35:03.820
+Messing with as our motivation for for building ourselves on emacs
+
+35:04.860 --> 35:06.860
+again, this table represents
+
+35:07.340 --> 35:09.260
+uh what you'll what
+
+35:10.060 --> 35:15.280
+What what it looks like for me when i'm building for the gnu distributed binaries
+
+35:17.900 --> 35:19.900
+All right, so um
+
+35:20.780 --> 35:23.740
+Kind of moving moving as quickly as I can here
+
+35:24.540 --> 35:28.140
+I'm at 40 after I believe that's the five minute mark
+
+35:28.780 --> 35:29.660
+so
+
+35:29.660 --> 35:34.780
+Um having just succeeded in in configuring emacs. I don't think we're going to build it. Uh
+
+35:35.100 --> 35:39.180
+I don't think we're going to actually get to running make install
+
+35:39.900 --> 35:45.500
+Um, but I have it sitting here on my keyboard or clipboard assuming that we will right?
+
+35:49.100 --> 35:50.460
+No
+
+35:50.460 --> 35:52.460
+Oh, wow
+
+35:52.780 --> 35:56.940
+I think i've managed to confuse this. All right, so for me that looks simply like
+
+35:57.660 --> 35:59.740
+uh make
+
+35:59.740 --> 36:01.740
+v equals one
+
+36:01.740 --> 36:09.200
+Uh install, uh prefix equals
+
+36:10.700 --> 36:12.700
+uh
+
+36:18.380 --> 36:20.380
+And we can at least get it kicked off
+
+36:22.860 --> 36:25.740
+And that that command is just uh
+
+36:26.620 --> 36:30.540
+Just is no no different than I showed on the slide where I where I gave it
+
+36:31.020 --> 36:34.460
+Uh, I wasn't planning to stop and explain it. I was just planning to paste it in
+
+36:35.500 --> 36:36.700
+so
+
+36:36.700 --> 36:42.060
+So so again recapping the rest of the process here and maybe actually making it if you can believe it or not
+
+36:42.300 --> 36:44.460
+through the rest of these slides, um
+
+36:45.180 --> 36:52.240
+We to to create the full set of binaries. We're going to need a no dependent no depth archive. That's without the mysys2
+
+36:52.400 --> 36:58.740
+To uh deal provided dlls just the things that we compile as part of making emacs
+
+36:59.520 --> 37:01.520
+um
+
+37:02.400 --> 37:09.760
+The uh, the build depth zip script is uh provided with the source distribution is your tool
+
+37:10.240 --> 37:14.320
+for uh meeting the gpl requirements ride source as mentioned before
+
+37:14.880 --> 37:21.360
+Um, there is a second bug that I did, uh include some more information on in my notes already
+
+37:22.240 --> 37:24.240
+um that uh
+
+37:24.800 --> 37:27.840
+That gets into the details of this other feature I alluded to
+
+37:28.640 --> 37:30.640
+Um, i'll just skip into that
+
+37:31.200 --> 37:32.560
+um
+
+37:32.560 --> 37:34.640
+we can with with uh
+
+37:35.440 --> 37:40.240
+With a an appropriate version of that which you may need a patch
+
+37:41.040 --> 37:42.560
+uh to
+
+37:42.560 --> 37:44.660
+To have you can list out the dependencies
+
+37:45.540 --> 37:51.060
+And and that version as well can consider the dependencies of the emacs binary versus the hard-coded list
+
+37:51.060 --> 37:54.900
+You might find depending on when you look at this file in the source tree
+
+37:56.980 --> 37:58.980
+The different um
+
+37:59.060 --> 38:00.020
+so
+
+38:00.020 --> 38:06.440
+I also have a hack here that uh works around the absolute requirement to run this with the mysys2
+
+38:07.060 --> 38:09.060
+And not the mingw64
+
+38:09.060 --> 38:11.060
+64
+
+38:14.340 --> 38:16.340
+Script
+
+38:17.460 --> 38:18.500
+Um
+
+38:18.500 --> 38:27.080
+Once we've made that zip file that contain that's that's our installed emacs without the dlls provided by mysys2
+
+38:28.420 --> 38:35.140
+We'll then unpack the dependencies that were created by that python script. We just talked about from the emacs source tree
+
+38:36.020 --> 38:40.980
+So at that point once those are unpacked we can now make what's called the full
+
+38:41.600 --> 38:47.640
+Installer or sometimes I might call it the unqualified installer because it's just going to be called emacs29.1.zip
+
+38:51.060 --> 38:56.520
+Um and that uh that file which which creates the archive
+
+38:58.580 --> 38:59.780
+That
+
+38:59.780 --> 39:03.140
+that that file is exactly the same plus the
+
+39:03.780 --> 39:08.340
+Uh, the dependencies that we unzipped in the bin folder of the installed emacs
+
+39:09.700 --> 39:10.720
+the
+
+39:10.720 --> 39:17.460
+Executable self-installer, which I would love to have more time to talk about I gave a few pointers here on the hard part of running
+
+39:17.460 --> 39:19.460
+it most importantly
+
+39:19.940 --> 39:25.880
+If i've installed in any kind of funny looking name, I end up renaming it to like emacs-29.1
+
+39:26.840 --> 39:33.240
+Or emacs-29. or 30.0.50 or whatever and I just rename that installed
+
+39:33.880 --> 39:39.800
+Emacs folder and then I go to the root of wherever I created that the parent directory above it
+
+39:40.360 --> 39:43.420
+And that's where I make my copy of the emacs nsi
+
+39:44.120 --> 39:46.600
+um the the nsis script
+
+39:47.560 --> 39:49.400
+and uh
+
+39:49.400 --> 39:51.400
+That's also where I
+
+39:51.960 --> 39:59.160
+And then uh, then from that parent directory I execute uh making sys uh here I as mentioned
+
+39:59.800 --> 40:00.920
+um
+
+40:00.920 --> 40:05.160
+I I can get away with this because I have it on my path and it's my recollection
+
+40:05.240 --> 40:11.480
+I think I tested this and couldn't reproduce the problem. So I didn't document it here, but i've had some problems with running this when
+
+40:12.040 --> 40:13.160
+uh
+
+40:13.160 --> 40:15.160
+When nsis wasn't on my path
+
+40:16.920 --> 40:19.960
+The uh, the the final step here
+
+40:20.440 --> 40:25.260
+And the last the gpl requirement is to include all the sources
+
+40:25.780 --> 40:29.640
+Except when i'm doing a release build I always do this
+
+40:30.200 --> 40:35.800
+Um, and that's the new practice when making snapchat binaries is to go ahead and include the sources
+
+40:36.280 --> 40:38.840
+Even though we might have the specific revision number
+
+40:39.400 --> 40:43.000
+Um, our thinking is we want absolute clarity
+
+40:44.120 --> 40:45.480
+that that somebody
+
+40:45.480 --> 40:51.720
+Uh can say okay this binary did this thing from the source for it i'm gonna go take that into my own open source
+
+40:53.160 --> 40:57.160
+yeah, maybe they would the jerks them into my own open source project and
+
+40:57.880 --> 40:59.480
+um
+
+40:59.480 --> 41:03.340
+Off, you know off they go, uh, and that needs to be possible
+
+41:04.840 --> 41:06.520
+um
+
+41:06.520 --> 41:07.960
+so, um
+
+41:07.960 --> 41:13.640
+Beyond that the rest of this is is really detailed that you find covered in the gnu maintainers manual
+
+41:14.280 --> 41:20.120
+Um, this is the the current set of windows binaries that um, it's busily working on
+
+41:20.760 --> 41:22.760
+creating a like for like a
+
+41:23.400 --> 41:29.320
+Mirror to behind the scenes here is called a 29.1 underscore two
+
+41:30.280 --> 41:32.280
+um, and I have a lot of
+
+41:32.900 --> 41:37.720
+Automation available on this site. So at this point i'm just I think i'm only
+
+41:38.520 --> 41:40.520
+minute 40 seconds over i'm
+
+41:41.080 --> 41:42.120
+gonna
+
+41:42.120 --> 41:44.120
+invite my
+
+41:44.360 --> 41:50.200
+Co-organizers back onto the call or any volunteers that want to jump in and anybody if there's people on the bbb
+
+41:50.280 --> 41:53.080
+I'd be happy to take questions if there aren't
+
+41:53.640 --> 41:56.520
+um, I have a screen full of
+
+41:57.240 --> 42:02.200
+The automation stuff ready to go as a kind of a second ring in my circus today
+
+42:03.320 --> 42:07.240
+So if you're still with me, thanks a lot for joining me, and I really enjoyed this talk
+
+42:07.480 --> 42:11.560
+Uh, if this is where we're going to close it out. I don't know where we're at for schedule today
+
+42:13.080 --> 42:15.180
+Um, thanks a lot for a great talk corwin
+
+42:16.760 --> 42:21.640
+Um in terms of like schedule, yeah, you went over a little bit for the official like, um
+
+42:22.120 --> 42:24.120
+schedule or time of your talk, but I think
+
+42:24.760 --> 42:29.080
+We actually have maybe like six or seven more minutes. Um here on stream
+
+42:29.800 --> 42:35.400
+For um questions and such if folks have questions or if you want to like quickly maybe show one or two more things
+
+42:36.200 --> 42:37.000
+um
+
+42:37.080 --> 42:39.080
+But I think the hard stuff is about like
+
+42:39.480 --> 42:42.520
+Maybe 10 minutes ish for now and then we'll have to rush over to um
+
+42:43.320 --> 42:45.320
+for the closing remarks, so
+
+42:48.120 --> 42:50.120
+Well, that sounds awesome
+
+42:51.320 --> 42:58.280
+Okay, so i'm looking at the the dev chat, uh, I see a comment on cross compiling the emacs
+
+42:58.440 --> 43:05.160
+But i'm sorry, i'm looking at irc primarily, but uh, feel free to jump in if you're on bbb with me or
+
+43:05.320 --> 43:08.840
+Uh, uh, if if you put something on the pad i'm sure
+
+43:09.400 --> 43:12.520
+I will see it between the two of us
+
+43:13.160 --> 43:14.840
+Uh over here
+
+43:14.840 --> 43:21.080
+Okay, so cross compiling emacs for serenity. I haven't tried really any cross compiling. I think that would be very interesting
+
+43:21.160 --> 43:23.160
+I would most likely focus on
+
+43:23.720 --> 43:28.760
+Doing exactly what I do on a gnu system completely ditching
+
+43:29.320 --> 43:30.280
+um
+
+43:30.280 --> 43:34.600
+So I guess with my my remaining time rather than walking through code
+
+43:35.160 --> 43:39.560
+Um for my automation which can be another talk if in fact there's an interest in that
+
+43:40.200 --> 43:41.240
+um
+
+43:41.240 --> 43:45.560
+I want to I guess say a couple words about the non-free operating system
+
+43:46.200 --> 43:49.800
+That i'm using here. I did my best to use no
+
+43:50.660 --> 43:52.760
+non-free software other than
+
+43:53.640 --> 43:55.400
+the
+
+43:55.400 --> 43:57.400
+Uh the operating system
+
+43:57.720 --> 44:01.720
+That is the context for this talk in preparing this talk for you
+
+44:02.120 --> 44:05.080
+I personally have a lot more
+
+44:06.520 --> 44:13.560
+Uh time and energy I have to say invested in proprietary tools for doing a lot of the things that
+
+44:14.920 --> 44:19.480
+That go into this so I really respect the work of people that pull that off. Um
+
+44:20.200 --> 44:27.400
+I'm, sorry, I didn't get my pre-recorded stuff. Uh kind of in order for everybody, but I just want to stress like
+
+44:28.280 --> 44:35.480
+Uh, it is all absolutely possible and just hats off to everybody that that used uh entirely free software to get their
+
+44:36.200 --> 44:38.200
+Get their recordings done in time
+
+44:38.680 --> 44:40.680
+um, and what you did see
+
+44:41.640 --> 44:45.560
+Unless it was provided by the operating system in my presentation today was all
+
+44:46.040 --> 44:51.080
+Uh free software with the debatable exception of nsys which styles itself
+
+44:51.720 --> 44:53.320
+as open source
+
+44:53.320 --> 44:56.120
+maybe for uh marketing reasons
+
+44:57.480 --> 45:00.460
+Uh in any case, uh, certainly we can get out of the source
+
+45:08.120 --> 45:10.840
+Thanks for the note corinne, it's good to know that uh
+
+45:11.320 --> 45:18.600
+Building or uh, yeah doing the build of emacs for windows on windows can be done using only free software
+
+45:19.880 --> 45:21.880
+Yeah, absolutely
+
+45:23.480 --> 45:25.480
+Probably the right closing note, right?
+
+45:26.120 --> 45:32.440
+um, I just uh, thanks again to the organizers for bearing with me and like every time I was like you guys i'm
+
+45:32.520 --> 45:36.760
+Terrible at this. They're just like no you're doing fine. Keep going. You did a great job live last time
+
+45:37.000 --> 45:43.000
+You can do it live, you know and and saying all the right things to just uh, encourage me to come back
+
+45:44.840 --> 45:46.840
+This year and everywhere
+
+45:49.720 --> 45:54.120
+Well, as I said before we were very lucky to have you and the rest of the team of course as well and
+
+45:54.760 --> 45:59.960
+um goes without saying but all the speakers and all the audience the participants as well, so
+
+46:08.360 --> 46:09.720
+Um
+
+46:09.720 --> 46:17.000
+So, uh, are we we're still live over here that you know, you know me i'm the mike hog that I am I can't resist
+
+46:17.800 --> 46:21.720
+um throwing throwing up another screen here and uh,
+
+46:22.280 --> 46:27.000
+In fact, let's go ahead and go back to our to our crawler, right?
+
+46:30.840 --> 46:36.120
+And i'll bring back our build if it finishes and maybe we'll show making the installer as well, um
+
+46:39.480 --> 46:42.040
+But I have the cpu count turned down a little bit here
+
+46:44.200 --> 46:46.600
+Note I didn't specify minus j here
+
+46:47.400 --> 46:49.400
+um, so
+
+46:49.480 --> 46:52.840
+Over here is my automation, uh in case you do want to take a look
+
+46:52.920 --> 46:59.480
+I can at least provide the orientation of what you're looking at scrape log is probably my first thing. I want to show off
+
+46:59.800 --> 47:05.800
+um, it's not beautiful, but this works, uh, pretty well for me to
+
+47:06.280 --> 47:12.440
+Get a sense if something might have changed in terms of how many warnings or errors are happening
+
+47:13.080 --> 47:18.620
+When I build emacs, so I have this awful automation going on and I frequently want to answer the question
+
+47:19.260 --> 47:23.500
+You know, what's the change rate in uh warnings or what have you?
+
+47:24.140 --> 47:26.140
+So this kind of gives me a count
+
+47:26.460 --> 47:28.220
+of that
+
+47:28.220 --> 47:29.820
+um
+
+47:29.820 --> 47:31.820
+so from there, uh
+
+47:32.460 --> 47:36.860
+Crude ci is the script. We're we're watching run in the other pane
+
+47:37.980 --> 47:39.900
+um, you can
+
+47:39.900 --> 47:41.900
+see it's uh
+
+47:42.780 --> 47:45.020
+Just starting to do its thing again
+
+47:48.860 --> 47:50.860
+And uh
+
+47:51.420 --> 47:58.620
+The make file I mentioned this is a top-down rewrite of everything else that i've done it has some bugs right now
+
+48:00.300 --> 48:02.460
+um the uh
+
+48:03.660 --> 48:04.460
+the
+
+48:04.460 --> 48:09.660
+Build distribution is the main script that I use for my personal builds
+
+48:10.140 --> 48:13.260
+This is what is run by the crude ci script
+
+48:13.820 --> 48:16.380
+Uh, it has a fun tie-in to this
+
+48:16.700 --> 48:18.700
+Uh web interface here
+
+48:19.340 --> 48:24.380
+Um where we can you don't need the port number when you go to it. That's just if i'm going to post
+
+48:25.260 --> 48:27.260
+um the
+
+48:28.380 --> 48:30.380
+Uh
+
+48:31.100 --> 48:37.980
+Blah blah blah blah this this script is really long and complicated and probably needs some diving into but you can see that
+
+48:38.540 --> 48:44.540
+Um, one of the complexities I have to deal with is that i'm going to need a something in the format of an emacs dash
+
+48:44.860 --> 48:46.860
+version for strategic
+
+48:47.100 --> 48:49.580
+um nsys reasons so
+
+48:50.140 --> 48:51.900
+uh
+
+48:51.900 --> 48:56.460
+It takes care of kind of every complexity and stuff that I mentioned today in some respects
+
+48:57.020 --> 48:59.980
+Um, as does the make file build release
+
+49:00.780 --> 49:01.660
+is
+
+49:01.660 --> 49:04.160
+um another fairly useful
+
+49:05.240 --> 49:11.580
+Incarnation of this this is just focused on the release process and this does work
+
+49:12.060 --> 49:14.060
+for example to create the
+
+49:14.380 --> 49:15.420
+the
+
+49:15.420 --> 49:17.420
+You know like I like well I could
+
+49:17.980 --> 49:23.760
+Like uh for like files as far as I can tell so what are currently posted for emacs 29.1
+
+49:24.860 --> 49:26.860
+and the release candidate
+
+49:27.660 --> 49:28.860
+um
+
+49:28.860 --> 49:34.300
+So i'll probably use that next time and if it's still like for like i'll probably post the ones that came from this
+
+49:35.580 --> 49:37.340
+um
+
+49:37.340 --> 49:44.940
+Uh building a tree sitter I make some dlls there if you're looking for hints on how to get going or just simply
+
+49:45.580 --> 49:49.900
+A huge long list of git repositories that make grammars you can use
+
+49:50.780 --> 49:52.780
+That is here as well
+
+49:53.580 --> 49:56.620
+um, finally I mentioned I have a
+
+49:58.300 --> 50:03.980
+Um, I have a a website where I publish my own personal snapshots that I make
+
+50:04.540 --> 50:07.820
+That folder full of install directories, but all of the usual
+
+50:08.360 --> 50:13.920
+GNU style binary distributables including the source code and the source code for the dependencies
+
+50:14.860 --> 50:15.980
+um
+
+50:15.980 --> 50:17.820
+the
+
+50:17.820 --> 50:19.820
+uh
+
+50:20.460 --> 50:23.180
+So this program is another one of those
+
+50:24.300 --> 50:28.700
+Complicated find commands and therefore potentially the most useful thing in here to take to you
+
+50:29.340 --> 50:33.340
+Um, and here i'm deleting binaries older than 17 years
+
+50:34.220 --> 50:36.220
+uh everything except
+
+50:36.220 --> 50:37.500
+the uh
+
+50:37.500 --> 50:41.020
+No deps file and the sources of it. You'll find on my website
+
+50:41.580 --> 50:44.140
+Currently those indefinitely i'll probably roll out
+
+50:44.760 --> 50:46.760
+120 days or something
+
+50:47.020 --> 50:49.020
+um for those eventually
+
+50:53.580 --> 50:57.340
+Oh, uh, I can talk about this one even um the uh
+
+50:57.740 --> 50:58.700
+The
+
+50:58.700 --> 51:02.380
+So here you'll see the two branches that i'm tracking the job of this script
+
+51:02.780 --> 51:07.020
+Is this runs on the website? I call it with a like a remote rsync
+
+51:07.740 --> 51:08.620
+uh type
+
+51:08.620 --> 51:11.420
+Uh, or an ssh remote ssh command
+
+51:12.060 --> 51:13.740
+um
+
+51:13.740 --> 51:18.220
+And right after the rsync r syncing up any new emacs that I built
+
+51:19.020 --> 51:20.540
+and
+
+51:20.540 --> 51:22.540
+uh, it's
+
+51:23.180 --> 51:29.920
+Uh, its job is to update my fancy directory indexing so let's look at corwin's website
+
+51:31.580 --> 51:35.040
+Here's my emacs 29 folder
+
+51:44.780 --> 51:46.780
+We have about two more minutes corwin
+
+51:47.420 --> 51:52.380
+Yeah, it'll take that entire two minutes to uh, load this directory because I am
+
+51:52.940 --> 51:56.140
+Because I have not yet ever pruned any of these dang binaries
+
+51:56.380 --> 52:01.500
+So every version of uh emacs 29 that i've ever made for myself is probably here
+
+52:02.540 --> 52:03.580
+nice
+
+52:03.580 --> 52:09.660
+Uh, I strongly recommend that you bookmark this folder if you're using these for something and you always want the latest
+
+52:09.980 --> 52:17.500
+Um, so here this particular, uh latest 29 emacs 29 latest or simply replace the 29 with 30 to get those
+
+52:18.220 --> 52:19.080
+uh
+
+52:19.080 --> 52:20.140
+alas
+
+52:20.140 --> 52:22.620
+No, no such luck for tree setter
+
+52:23.180 --> 52:25.180
+but if we look at
+
+52:25.740 --> 52:27.740
+that
+
+52:36.380 --> 52:39.100
+Live this long without making a typo now look at me
+
+52:40.220 --> 52:42.220
+Okay
+
+52:44.780 --> 52:46.780
+Oh
+
+52:51.500 --> 52:53.180
+So here, um
+
+52:53.180 --> 52:57.100
+You know, we can see the iconification and so on even in the tree sitter folder
+
+52:57.180 --> 53:01.420
+this is all i'm talking about about the fanciness that's set up by that other script that
+
+53:02.380 --> 53:06.940
+i'm showing over here and run after each time I run the upload it just
+
+53:07.900 --> 53:12.780
+Looks to see if anything's new and add some lines to the dot htaccess file
+
+53:15.900 --> 53:17.180
+Um
+
+53:17.180 --> 53:22.700
+I'm, particularly proud of this one. I'm not going to lie. Um, linking out to each each
+
+53:23.500 --> 53:27.020
+project that we're using letting us know the commit version and then
+
+53:28.300 --> 53:33.100
+For the dlls quick link out to the log and the signature file for this dll
+
+53:34.140 --> 53:36.140
+um
+
+53:37.020 --> 53:39.020
+I find that a lot just a lot
+
+53:40.540 --> 53:42.220
+More readable
+
+53:42.220 --> 53:44.060
+than uh
+
+53:44.060 --> 53:48.620
+Listing them all out individually and i'd love to do something like that on the new site
+
+53:51.180 --> 53:52.220
+So i'm
+
+53:52.220 --> 53:56.540
+I think we've got to be out of time by now. I've just got to say hey, thanks again for having me
+
+53:56.780 --> 54:01.740
+Uh for those that uh watch the talk either live or after the conference
+
+54:02.460 --> 54:05.820
+uh appreciate everyone's support to get me to the point where i'm able to
+
+54:06.540 --> 54:10.220
+Uh to do this this this cool volunteer task
+
+54:10.380 --> 54:14.220
+Uh, which is fun and easy to do and reach out to me if you're interested in helping with it
+
+54:19.020 --> 54:25.740
+Well, awesome, thanks a lot for the awesome talk corbin and uh, of course as a fellow core core organizer
+
+54:26.060 --> 54:33.280
+For our for all that you do, um in and around emacs conf and of course for uh, can we max as well? It's much appreciated
+
+54:36.140 --> 54:39.100
+Big big words from coming from you my friend
+
+54:41.740 --> 54:43.740
+Um, thanks for the kind words
+
+54:45.020 --> 54:51.660
+Cheers my pleasure. All right, and with that I think we're gonna uh wrap up the dev track here and we'll be
+
+54:52.300 --> 54:58.140
+With you again shortly in a few minutes on the gen stream the gen track for the closing remarks for today
+
+54:58.620 --> 55:01.900
+Um only for today because we're gonna be back tomorrow again as well
+
+55:02.460 --> 55:05.760
+So don't go anywhere and uh, see you on the gen track in a bit
+
+55:05.760 --> 55:07.760
+So
+
+55:28.080 --> 55:31.680
+Oh my god, I did it we got done within the time you're my hero
+
+55:31.840 --> 55:35.440
+um, and thank you so much for just keeping me honest there and uh
+
+55:36.720 --> 55:39.300
+Like helping me keep my eye on the time and such
+
+55:50.880 --> 55:53.680
+You have to look at the recording and see whether you feel like doing it again
+
+55:56.160 --> 56:01.360
+I'm sorry. I had my sound screwed up and i'm sorry if I talked over somebody I couldn't hear anything on mumble until this very
+
+56:01.360 --> 56:03.360
+moment
+
+56:03.520 --> 56:08.960
+Oh, uh because he used your webcam for it, um, like as a like a virtual webcam thingy
+
+56:09.520 --> 56:12.960
+It was low res especially when things are changing as you were
+
+56:13.520 --> 56:15.120
+scrolling around
+
+56:15.120 --> 56:20.720
+So we'll see what kind of recording we can recover from it and then you can decide whether you maybe want to clean it up
+
+56:20.720 --> 56:22.080
+with like
+
+56:22.080 --> 56:24.080
+screenshots and
+
+56:24.240 --> 56:28.960
+I recorded on this end too. We shouldn't have that problem with my recording. Thank you. Thank you. Thank you
+
+56:29.360 --> 56:31.360
+I think we're still live on the dev stream
+
+56:34.240 --> 56:37.440
+Someone could uh, thanks. Oh, yes
+
+56:38.880 --> 56:42.180
+Because uh, i'll set it to rebroadcast
+
+56:45.520 --> 56:48.480
+Yeah, I I love doing that for the closing remarks that's
+
+56:49.680 --> 56:51.680
+a fine tradition
+
+56:52.000 --> 56:55.280
+Or it's a tradition now because i'm pretty sure this means we've done it twice
+
+56:55.440 --> 56:57.440
+I
+
+57:02.560 --> 57:05.360
+Once heard that, you know, uh as a fan
+
+57:05.680 --> 57:11.680
+Meaning like a fannish is a term of endearment for a science fiction fan to another we say we're we're fans or things
+
+57:11.680 --> 57:17.440
+We do our fannish and a fannish tradition then is if you do it three times, it's tradition
+
+57:18.000 --> 57:20.000
+But um, we're on a budget here. So
+
+57:22.880 --> 57:24.880
+Nope
+
+57:25.920 --> 57:29.840
+All right, I think we should um head over to mumble and talk on mumble
+
+57:30.080 --> 57:34.640
+Um and decide and see like which big blue button room we're going to be in for closing
+
+57:35.200 --> 57:37.200
+Okay, so we're clear on bbb here
+
+57:37.760 --> 57:39.760
+Yep, I think so
+
diff --git a/2023/captions/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--answers.vtt b/2023/captions/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--answers.vtt
new file mode 100644
index 00000000..c510cc30
--- /dev/null
+++ b/2023/captions/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--answers.vtt
@@ -0,0 +1,314 @@
+WEBVTT
+
+
+00:00:07.120 --> 00:00:07.359
+[Speaker 0]: Okay, folks. Thanks, Anand,
+
+00:00:11.259 --> 00:00:11.759
+for the great talk. So here is the live Q&A.
+
+00:00:22.279 --> 00:00:22.420
+Hi. Hello. I see questions being posted on
+
+00:00:23.920 --> 00:00:24.099
+the pad. Would you like me to read them out
+
+00:00:25.320 --> 00:00:25.820
+or would you prefer to read them yourself?
+
+00:00:31.880 --> 00:00:32.220
+[Speaker 1]: Okay. I'll try reading it out.
+
+00:00:33.340 --> 00:00:33.680
+If there are audio issues,
+
+00:00:35.420 --> 00:00:35.920
+[Speaker 0]: Sure, thanks.
+
+00:00:37.360 --> 00:00:37.760
+[Speaker 1]: just let me know. A lot of what you showed
+
+00:00:39.960 --> 00:00:40.280
+was the type of stuff Emacs didn't do very
+
+00:00:43.040 --> 00:00:43.200
+well. This stuff looks like it could be
+
+00:00:45.020 --> 00:00:45.239
+useful for using Emacs with a touch screen
+
+00:00:46.960 --> 00:00:47.460
+and a tablet. Have you used it for purposes
+
+00:00:53.160 --> 00:00:53.360
+like this? No right now it's more proof of
+
+00:00:58.580 --> 00:00:58.780
+concept stage so I don't use it more than you
+
+00:01:03.420 --> 00:01:03.920
+know just making some demo software.
+
+00:01:12.100 --> 00:01:12.320
+The next question is, is there a mode for
+
+00:01:15.080 --> 00:01:15.280
+using FFmpeg through Emacs or did you make it
+
+00:01:20.160 --> 00:01:20.660
+yourself? Okay so this is something that I
+
+00:01:26.800 --> 00:01:27.300
+built. So the base of it is XWidget in Emacs,
+
+00:01:28.160 --> 00:01:28.660
+which is already there.
+
+00:01:35.080 --> 00:01:35.380
+But then I had to add a few control code for
+
+00:01:42.240 --> 00:01:42.500
+controlling VLC. So ffmpeg is like a shell
+
+00:01:46.840 --> 00:01:47.340
+command that finally stitches those bits of
+
+00:01:51.780 --> 00:01:52.280
+video clips. But what actually plays is VLC,
+
+00:01:55.860 --> 00:01:56.360
+and it's not FFmpeg. Hope that's clear.
+
+00:02:03.580 --> 00:02:04.020
+The next question is these demos are always
+
+00:02:06.020 --> 00:02:06.180
+so impressive. Do you plan to upstream any of
+
+00:02:07.040 --> 00:02:07.540
+these projects into Emacs?
+
+00:02:13.940 --> 00:02:14.240
+Right now, okay, let me read the complete
+
+00:02:16.220 --> 00:02:16.320
+questions. These demos are always so
+
+00:02:17.960 --> 00:02:18.080
+impressive. Do you plan to upstream any of
+
+00:02:19.960 --> 00:02:20.280
+these projects into Emacs or to publish them
+
+00:02:21.780 --> 00:02:22.280
+as, for example, helper packages?
+
+00:02:26.480 --> 00:02:26.980
+So right now, as it stands,
+
+00:02:30.720 --> 00:02:30.940
+I personally don't intend to do that because
+
+00:02:34.900 --> 00:02:35.400
+I don't have that time but I have signed my
+
+00:02:38.720 --> 00:02:39.220
+signed assignment copyright assignment so
+
+00:02:41.600 --> 00:02:41.760
+anybody has time and motivation to do it they
+
+00:02:47.120 --> 00:02:47.620
+can pick up the code and help me with that.
+
+00:02:53.200 --> 00:02:53.700
+The next is, how did you make that electronic
+
+00:03:00.600 --> 00:03:00.860
+circuit diagram? Is there a mode with the
+
+00:03:02.560 --> 00:03:03.060
+symbols already available.
+
+00:03:08.240 --> 00:03:08.460
+Okay so electronic circuit diagram is you
+
+00:03:13.340 --> 00:03:13.520
+know the canvas mode but and what you see is
+
+00:03:19.540 --> 00:03:20.040
+the is an extension of that canvas mode which
+
+00:03:25.440 --> 00:03:25.940
+uses a symbol library.
+
+00:03:31.980 --> 00:03:32.300
+And so The only difference is you press
+
+00:03:34.160 --> 00:03:34.660
+capital L to open up that symbol library.
+
+00:03:37.700 --> 00:03:37.840
+In this case, this symbol library happens to
+
+00:03:41.380 --> 00:03:41.720
+be just a library of electronic symbols.
+
+00:03:44.640 --> 00:03:44.820
+It can be any category of symbols and then
+
+00:03:47.600 --> 00:03:48.100
+you and use it to draw on your,
+
+00:03:50.640 --> 00:03:51.140
+in the canvas major mode.
+
+00:04:02.240 --> 00:04:02.540
+Next question is, I have seen your blog post
+
+00:04:04.700 --> 00:04:04.960
+with some of these features But can you link
+
+00:04:06.280 --> 00:04:06.420
+to the repo where you are doing the
+
+00:04:07.940 --> 00:04:08.440
+development for these packages?
+
+00:04:18.899 --> 00:04:19.200
+Sure, I can do that Most of these are
+
+00:04:20.279 --> 00:04:20.779
+available on my blogs.
+
+00:04:26.200 --> 00:04:26.480
+Typically the Reddit post always has a link
+
+00:04:31.480 --> 00:04:31.680
+to my blog. But I'll post it in this 1 as
+
+00:04:31.680 --> 00:04:32.180
+well.
+
+00:04:48.480 --> 00:04:48.700
+[Speaker 0]: I'll quickly note that we have about 4 more
+
+00:04:52.540 --> 00:04:52.800
+minutes of live Q&A, but if folks have more
+
+00:04:55.320 --> 00:04:55.720
+questions, they're welcome to either continue
+
+00:04:59.060 --> 00:04:59.240
+asking on the pad or come join us here on Big
+
+00:05:02.080 --> 00:05:02.220
+Blue Button and continue chatting once the
+
+00:05:03.440 --> 00:05:03.800
+stream moves on to the next talk.
+
+00:05:03.940 --> 00:05:04.440
+Thank you.
+
+00:05:13.360 --> 00:05:13.860
+[Speaker 1]: Yes, so here's the link.
+
+00:05:23.240 --> 00:05:23.560
+And so right now, all of my development goes
+
+00:05:26.360 --> 00:05:26.600
+into a single development branch in this
+
+00:05:28.940 --> 00:05:29.140
+repository. But depending on the feature that
+
+00:05:31.500 --> 00:05:31.680
+you're looking at, you can look at that
+
+00:05:33.820 --> 00:05:33.960
+particular post and that post will have a
+
+00:05:37.120 --> 00:05:37.320
+link to the specific files that include the
+
+00:05:37.320 --> 00:05:37.820
+changes.
+
+00:06:24.236 --> 00:06:24.304
+Okay, there's a feedback.
+
+00:06:26.520 --> 00:06:26.740
+Thank you for showing so many new
+
+00:06:27.500 --> 00:06:28.000
+possibilities with Emacs.
+
+00:06:30.960 --> 00:06:31.460
+I'm glad you like those possibilities.
+
+00:06:32.540 --> 00:06:32.760
+And hopefully, you know,
+
+00:06:34.540 --> 00:06:34.740
+with Emacs, the possibilities are really
+
+00:06:38.480 --> 00:06:38.980
+endless. So I really encourage more people to
+
+00:06:41.120 --> 00:06:41.620
+explore it and, you know,
+
+00:06:49.280 --> 00:06:49.780
+try things that people have so far only been
+
+00:06:52.160 --> 00:06:52.660
+using other applications for.
+
+00:06:59.580 --> 00:07:00.080
+The next question is coming up.
+
+00:07:07.540 --> 00:07:08.040
+Okay, the PDF form filling is especially
+
+00:07:10.200 --> 00:07:10.400
+interesting. I would love to do my taxes in
+
+00:07:16.400 --> 00:07:16.620
+Emacs. Yes, In most cases you should be able
+
+00:07:18.900 --> 00:07:19.400
+to do it unless there are a lot of JavaScript
+
+00:07:20.500 --> 00:07:21.000
+involved with the PDF.
+
+00:07:24.800 --> 00:07:24.960
+For a simple form, you should be able to do
+
+00:07:24.960 --> 00:07:25.460
+it.
+
+00:08:19.480 --> 00:08:19.640
+[Speaker 0]: Okay, we have about 1 minute remaining on the
+
+00:08:21.660 --> 00:08:22.000
+live stream. If folks have any other
+
+00:08:24.960 --> 00:08:25.120
+questions, please do continue posting on the
+
+00:08:27.540 --> 00:08:27.800
+pad or come and join BigBlueButton with an
+
+00:08:28.940 --> 00:08:29.140
+ad. And thanks again, Adam,
+
+00:08:30.880 --> 00:08:31.080
+for a great talk and for the discussions and
+
+00:08:31.560 --> 00:08:32.059
+questions and answers.
+
+00:08:36.100 --> 00:08:36.600
+[Speaker 1]: Great, thanks.
diff --git a/2023/captions/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--main--chapters.vtt b/2023/captions/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--main--chapters.vtt
new file mode 100644
index 00000000..58121436
--- /dev/null
+++ b/2023/captions/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--main--chapters.vtt
@@ -0,0 +1,56 @@
+WEBVTT
+
+
+00:00:00.780 --> 00:03:46.400
+Draw and scribble in GNU Emacs
+
+00:03:46.400 --> 00:05:20.139
+SVG Symbols library
+
+00:05:20.140 --> 00:08:03.367
+GNU Emacs: A multimedia editor
+
+00:08:03.367 --> 00:09:34.900
+Fill PDF form using GNU Emacs
+
+00:09:34.900 --> 00:11:10.439
+Desktop and window management in GNU Emacs
+
+00:11:10.440 --> 00:11:53.033
+Screen mirroring in GNU Emacs
+
+00:11:53.033 --> 00:12:25.533
+Swipe for Text Input in GNU Emacs
+
+00:12:25.533 --> 00:12:59.433
+Formula Editor in GNU Emacs
+
+00:12:59.433 --> 00:13:09.433
+Transliteration in Emacs
+
+00:13:09.433 --> 00:13:40.000
+Social Media client - Tumblr, Reddit
+
+00:13:40.000 --> 00:13:49.567
+Comics Builder
+
+00:13:49.567 --> 00:13:59.567
+Matching game
+
+00:13:59.567 --> 00:14:10.767
+Interactive XPath Builder in GNU Emacs
+
+00:14:10.767 --> 00:14:35.233
+Interactive JSON Builder in GNU Emacs
+
+00:14:35.233 --> 00:15:26.133
+GNU Emacs as a lightweight IDE (CEDET Semantic): Java - Generate getter/setter
+
+00:15:26.133 --> 00:16:11.640
+Generate C header
+
+00:16:11.640 --> 00:17:07.639
+C Rename symbols
+
+00:17:07.640 --> 00:20:30.740
+SQL (offline)
diff --git a/2023/captions/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--main.vtt b/2023/captions/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--main.vtt
new file mode 100644
index 00000000..1f27ce57
--- /dev/null
+++ b/2023/captions/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--main.vtt
@@ -0,0 +1,649 @@
+WEBVTT captioned by bhavin192, checked by sachac
+
+NOTE Draw and scribble in GNU Emacs
+
+00:00:00.780 --> 00:00:02.900
+Hello. In this video, we will look at
+
+00:00:02.900 --> 00:00:07.167
+drawing and scribbling in Emacs using SVG.
+
+00:00:07.167 --> 00:00:10.067
+Let's start with `canvas-mode`.
+
+00:00:10.067 --> 00:00:17.539
+We will define the width and the height.
+
+00:00:17.540 --> 00:00:19.333
+The default is polyline,
+
+00:00:19.333 --> 00:00:23.733
+which means you can scribble anything that you want.
+
+00:00:23.733 --> 00:00:30.299
+Very handy for taking quick notes.
+
+00:00:30.300 --> 00:00:32.699
+Now we will look at
+
+00:00:32.700 --> 00:00:46.333
+drawing a triangle using some lines.
+
+00:00:46.333 --> 00:00:57.267
+Okay. Now let's draw a circle.
+
+00:00:57.267 --> 00:00:58.900
+You can use the mouse to adjust
+
+00:00:58.900 --> 00:01:02.859
+the radius of the circle.
+
+00:01:02.860 --> 00:01:04.333
+There is some problem with ellipse,
+
+00:01:04.333 --> 00:01:07.939
+we will look at it at the end of the video.
+
+00:01:07.940 --> 00:01:11.767
+Now let's put up some text,
+
+00:01:11.767 --> 00:01:15.067
+a typical "Hello World".
+
+00:01:15.067 --> 00:01:19.879
+Size, let's do a 20 font size,
+
+00:01:19.880 --> 00:01:32.359
+and we will use the default font family.
+
+00:01:32.360 --> 00:01:37.433
+Next, we will look at undoing what we have drawn.
+
+00:01:37.433 --> 00:01:43.067
+Just press u for deleting the last drawn object.
+
+00:01:43.067 --> 00:01:45.799
+And you can continue pressing
+
+00:01:45.800 --> 00:01:51.959
+u for consecutive deletions.
+
+00:01:51.960 --> 00:01:54.533
+You can also make a selection of the objects
+
+00:01:54.533 --> 00:01:57.700
+on the screen using your mouse and then press u.
+
+00:01:57.700 --> 00:02:02.599
+This will delete all the objects in one go.
+
+00:02:02.600 --> 00:02:06.659
+Now we are looking at stroke color.
+
+00:02:06.660 --> 00:02:08.633
+We will use a brown stroke color
+
+00:02:08.633 --> 00:02:12.879
+for drawing our objects.
+
+00:02:12.880 --> 00:02:20.419
+Next, let's look at stroke width.
+
+00:02:20.420 --> 00:02:27.979
+We will use a width of 5.
+
+00:02:27.980 --> 00:02:41.619
+Next, let's fill up the objects with a fill color.
+
+00:02:41.620 --> 00:02:47.159
+Now we will look at zoom.
+
+00:02:47.160 --> 00:02:50.119
+Use the mouse to select a region and zoom.
+
+00:02:50.120 --> 00:02:54.359
+You can also use +, - for zooming in and out.
+
+00:02:54.360 --> 00:03:07.133
+Press 0 for resetting the zoom.
+
+00:03:07.133 --> 00:03:14.539
+Next, let's save the file,
+
+00:03:14.540 --> 00:03:19.667
+and q or Enter for exiting the canvas-mode.
+
+00:03:19.667 --> 00:03:23.760
+Now we will open the file in Emacs itself.
+
+00:03:25.220 --> 00:03:26.179
+You can see the file,
+
+00:03:26.180 --> 00:03:32.000
+you can do Control-c Control-c (`C-c C-c`).
+
+00:03:32.000 --> 00:03:44.419
+Finally, we look at ellipse.
+
+00:03:44.420 --> 00:03:46.400
+That's all for this video. Thanks!
+
+NOTE SVG Symbols library
+
+00:03:46.400 --> 00:03:48.333
+Hello. In this video, we will draw
+
+00:03:48.333 --> 00:03:52.067
+schematics using symbols from SVG library in Emacs.
+
+00:03:52.067 --> 00:03:55.000
+Press capital L to activate the symbol library
+
+00:03:55.000 --> 00:03:57.867
+that you can see on the right hand side,
+
+00:03:57.867 --> 00:04:01.959
+and place the symbol on the canvas.
+
+00:04:01.960 --> 00:04:06.639
+Let's add another register to this diagram.
+
+00:04:06.640 --> 00:04:11.819
+You can press capital R to rotate the symbol.
+
+00:04:11.820 --> 00:04:17.239
+Let's place it on the canvas.
+
+00:04:17.240 --> 00:04:31.667
+Now we will add a voltage source to the circuit.
+
+00:04:31.667 --> 00:04:33.179
+To connect the symbols,
+
+00:04:33.180 --> 00:04:36.967
+we will have to use some connecting wires.
+
+00:04:36.967 --> 00:04:39.467
+For that, press capital W
+
+00:04:39.467 --> 00:04:46.919
+to activate the connection mode.
+
+00:04:46.920 --> 00:04:48.567
+Click anywhere on the canvas
+
+00:04:48.567 --> 00:04:53.133
+to draw intermediate points, and press Esc
+
+00:04:53.133 --> 00:05:00.033
+to exit that particular connection.
+
+00:05:00.033 --> 00:05:16.633
+Let's connect other symbols too.
+
+00:05:16.633 --> 00:05:20.139
+That's all for this video. Thanks.
+
+NOTE GNU Emacs: A multimedia editor
+
+00:05:20.140 --> 00:05:22.167
+Hello. In this video, we will look at
+
+00:05:22.167 --> 00:05:24.933
+some basic multimedia editing using Emacs.
+
+00:05:24.933 --> 00:05:27.459
+Let's start a media-edit session.
+
+00:05:27.460 --> 00:05:32.000
+Let's open a video file.
+
+00:05:32.000 --> 00:05:34.100
+The left-hand side is your viewer area,
+
+00:05:34.100 --> 00:05:36.700
+and the right-hand side is your track area.
+
+00:05:36.700 --> 00:05:39.667
+In the track area, you can use normal Emacs
+
+00:05:39.667 --> 00:05:42.039
+text editing movements.
+
+00:05:42.040 --> 00:05:48.167
+Now press `C-c r` to refresh the viewer mode
+
+00:05:48.167 --> 00:05:52.767
+with the exact time frame.
+
+00:05:52.767 --> 00:05:59.433
+Now press SPC to play or pause the video.
+
+00:05:59.433 --> 00:06:03.233
+This looks like an interesting point in the video,
+
+00:06:03.233 --> 00:06:11.433
+let's track it and split it. Press Enter to do that.
+
+00:06:11.433 --> 00:06:20.733
+We will extract some 10 seconds of this video.
+
+00:06:20.733 --> 00:06:23.233
+Let's use this.
+
+00:06:23.233 --> 00:06:26.300
+Now go here and delete all these lines.
+
+00:06:26.300 --> 00:06:44.133
+Let's review our edited clip.
+
+00:06:44.133 --> 00:06:51.833
+Looks good! Now press e to export the video.
+
+00:06:51.833 --> 00:06:57.559
+Provide an output file name.
+
+00:06:57.560 --> 00:07:04.433
+This will use FFmpeg to convert, and you can
+
+00:07:04.433 --> 00:07:16.967
+output to any file format supported by FFmpeg.
+
+00:07:16.967 --> 00:07:21.900
+Okay. Let's open up shell and view this
+
+00:07:21.900 --> 00:07:57.159
+video file in an external video player.
+
+00:07:57.160 --> 00:08:03.367
+That's all for this video. Thanks.
+
+NOTE Fill PDF form using GNU Emacs
+
+00:08:03.367 --> 00:08:05.567
+Hello. In this video, we will look at
+
+00:08:05.567 --> 00:08:09.760
+editing a PDF form using GNU Emacs.
+
+00:08:09.760 --> 00:08:13.840
+To start, we have to enable the annotation.
+
+00:08:13.840 --> 00:08:18.533
+Then we can use Tab to move forward and Shift+Tab
+
+00:08:18.533 --> 00:08:22.480
+to move backwards through the fields.
+
+00:08:22.480 --> 00:08:25.967
+To edit a field, we press e.
+
+00:08:25.967 --> 00:08:33.580
+So let's edit a text box. We'll call it 'city'.
+
+00:08:33.580 --> 00:08:35.840
+Next, we will edit a drop-down.
+
+00:08:35.840 --> 00:08:38.680
+Again, press e, and you get a select.
+
+00:08:38.680 --> 00:08:45.833
+Use the Minibuffer to select one of the values.
+
+00:08:45.833 --> 00:08:48.500
+Let's select 'France'.
+
+08:48.500 --> 00:08:52.180
+Now let's edit a radio box.
+
+08:52.180 --> 00:08:55.899
+A checkbox or a radio box can be toggled using t.
+
+00:08:55.900 --> 00:08:58.660
+You can disable…
+
+08:58.660 --> 00:09:05.140
+Now let's save the file, `doc-view-save-form`.
+
+00:09:05.140 --> 00:09:08.360
+It will ask for a file name.
+
+00:09:08.360 --> 00:09:13.400
+Let's call it `filled1.pdf`. If the file exists,
+
+00:09:13.400 --> 00:09:17.260
+it will ask you if you want to overwrite.
+
+09:17.260 --> 00:09:21.460
+Now let's verify this new file.
+
+09:21.460 --> 00:09:27.160
+In Firefox, we'll copy this file name, call it filled1.
+
+00:09:27.160 --> 00:09:29.100
+Let's verify the values.
+
+09:29.100 --> 00:09:32.620
+You have city, France and Driving License selected.
+
+09:32.620 --> 00:09:34.900
+That's all for this video. Thanks.
+
+NOTE Desktop and window management in GNU Emacs
+
+09:34.900 --> 00:09:37.659
+Hello. In this video, we will look at
+
+00:09:37.660 --> 00:09:40.460
+desktop and window management in GNU Emacs.
+
+09:40.460 --> 00:09:47.740
+We'll start with `task-view`.
+
+09:47.740 --> 00:09:50.467
+Top row shows all the desktops,
+
+00:09:50.467 --> 00:09:54.400
+and rest of the images are the active windows
+
+00:09:54.400 --> 00:09:59.300
+in that particular desktop.
+
+00:09:59.300 --> 00:10:09.159
+You can tap to select
+
+00:10:09.160 --> 00:10:13.320
+and double tap to activate a particular window.
+
+00:10:13.320 --> 00:10:16.767
+You can use m to move selected windows
+
+00:10:16.767 --> 00:10:25.099
+to any of the desktops at the top.
+
+00:10:25.100 --> 00:10:29.320
+Let's check the third desktop.
+
+00:10:29.320 --> 00:10:49.980
+Let's bring it back to the second desktop.
+
+10:49.980 --> 00:10:51.300
+The best part,
+
+10:51.300 --> 00:10:54.799
+you can select multiple windows
+
+00:10:54.800 --> 00:10:59.979
+and form a group by pressing g.
+
+00:10:59.980 --> 00:11:04.867
+Then you can select any of the windows
+
+00:11:04.867 --> 00:11:07.639
+in this group to activate the complete group.
+
+00:11:07.640 --> 00:11:10.439
+That's all for this video. Thanks.
+
+NOTE Screen mirroring in GNU Emacs
+
+00:11:10.440 --> 00:11:12.433
+Hello. In this video, we will look at
+
+00:11:12.433 --> 00:11:14.279
+screen mirroring using GNU Emacs.
+
+00:11:14.280 --> 00:11:18.779
+Run `wfd`. Select an interface.
+
+00:11:18.780 --> 00:11:20.967
+Now it will scan for all the available devices
+
+00:11:20.967 --> 00:11:24.800
+for screen mirroring.
+
+00:11:24.800 --> 00:11:30.399
+I'll select my TV, which is an LG WebOS TV.
+
+00:11:30.400 --> 00:11:38.720
+If you don't decline, it will start streaming.
+
+00:11:38.720 --> 00:11:45.140
+Let's change some buffer to check the visuals.
+
+11:45.140 --> 00:11:50.219
+To terminate the session, just click on quit.
+
+00:11:50.220 --> 00:11:53.033
+That's all for this video. Thanks.
+
+NOTE Swipe for Text Input in GNU Emacs
+
+00:11:53.033 --> 00:12:25.533
+[Using Sweep to swipe and type "as you like it."]
+
+NOTE Formula Editor in GNU Emacs
+
+00:12:25.533 --> 00:12:39.900
+[Formula Editor]
+
+00:12:39.900 --> 00:12:45.033
+[Typing fractions in the formula]
+
+00:12:45.033 --> 00:12:59.433
+[Adding brackets and an exponent]
+
+NOTE Transliteration in Emacs
+
+00:12:59.433 --> 00:13:05.200
+[Hindi (Devanagari script) Phonetic typing]
+
+00:13:05.200 --> 00:13:09.433
+[Phonetic typing Gujarati, Bangla, Kannada, and Tamil]
+
+NOTE Social Media client - Tumblr, Reddit
+
+00:13:09.433 --> 00:13:19.533
+[Browsing Reddit in Emacs]
+
+00:13:19.533 --> 00:13:29.533
+[Browsing Tumblr in Emacs]
+
+00:13:29.533 --> 00:13:40.000
+[Browsing X (Twitter) in Emacs]
+
+NOTE Comics Builder
+
+00:13:40.000 --> 00:13:49.567
+[Generating comic from a text script]
+
+NOTE Matching game
+
+00:13:49.567 --> 00:13:59.567
+[Matching color names with color boxes]
+
+NOTE Interactive XPath Builder in GNU Emacs
+
+00:13:59.567 --> 00:14:01.833
+[Running `xpath-builder` on an XML file]
+
+00:14:01.833 --> 00:14:10.767
+[Filtering `title`, `para`, and `author` from the XML]
+
+NOTE Interactive JSON Builder in GNU Emacs
+
+00:14:10.767 --> 00:14:29.200
+[Filtering `father`, `father.name`, `children`
+
+00:14:29.200 --> 00:14:35.233
+`children[1]` from a JSON using JSON Builder]
+
+NOTE GNU Emacs as a lightweight IDE (CEDET Semantic): Java - Generate getter/setter
+
+00:14:35.233 --> 00:14:37.633
+Hello. In this video, we will look at
+
+00:14:37.633 --> 00:14:41.659
+generating getters and setters in Java using Emacs.
+
+00:14:41.660 --> 00:14:46.233
+We will run `srecode-getset-dialog`.
+
+00:14:46.233 --> 00:14:48.767
+We will get an option to select particular fields,
+
+00:14:48.767 --> 00:14:51.833
+you can expand and collapse.
+
+00:14:51.833 --> 00:14:54.100
+You can select all or deselect all,
+
+00:14:54.100 --> 00:14:56.386
+or you can choose any particular getter.
+
+00:14:56.386 --> 00:15:02.633
+So let's do protected version of this. Here you go.
+
+00:15:02.633 --> 00:15:06.067
+If you want to generate for other fields,
+
+00:15:06.067 --> 00:15:08.300
+you can re-run it.
+
+00:15:08.300 --> 00:15:11.267
+You can check the one that you have already
+
+00:15:11.267 --> 00:15:13.100
+generated is not there.
+
+00:15:13.100 --> 00:15:22.300
+Now select all, and you can see rest of the
+
+00:15:22.300 --> 00:15:23.933
+getters and setters have been generated.
+
+00:15:23.933 --> 00:15:26.133
+That's all for this video. Thanks.
+
+NOTE Generate C header
+
+00:15:26.133 --> 00:16:11.640
+[Generating C headers using `srecode-gen-header`]
+
+NOTE C Rename symbols
+
+00:16:11.640 --> 00:16:13.833
+Hello. In this video, we will look at
+
+00:16:13.833 --> 00:16:17.633
+renaming method across multiple files in a project.
+
+00:16:17.633 --> 00:16:24.639
+Let's start with `semantic-symref-symbol`.
+
+00:16:24.640 --> 00:16:26.800
+Now we have the references.
+
+00:16:26.800 --> 00:16:35.399
+Let's use the menu to open all these occurrences.
+
+00:16:35.400 --> 00:16:38.433
+To rename it, we have to use
+
+00:16:38.433 --> 00:16:41.919
+"Rename Symbol in Open hits."
+
+00:16:41.920 --> 00:16:46.439
+Let's rename it to underscore 1 (`_1`).
+
+00:16:46.440 --> 00:16:57.719
+We will verify it by compiling the project.
+
+00:16:57.720 --> 00:17:00.300
+Let's open the `*Messages*` buffer to see the results
+
+00:17:00.300 --> 00:17:04.167
+more clearly. No errors.
+
+00:17:04.167 --> 00:17:07.639
+That's all for this video. Thanks.
+
+NOTE SQL (offline)
+
+00:17:07.640 --> 00:17:09.733
+Hello. In this video, we will look at
+
+00:17:09.733 --> 00:17:12.439
+SQL editing with Semantic.
+
+00:17:12.440 --> 00:17:16.619
+We will define a schema in this SQL document.
+
+00:17:16.620 --> 00:17:27.000
+Let's create a table.
+
+00:17:27.000 --> 00:17:30.267
+We get already existing tables
+
+00:17:30.267 --> 00:17:38.533
+in the current document.
+
+00:17:38.533 --> 00:17:57.033
+It also supports auto-completion of some keywords.
+
+00:17:57.033 --> 00:18:00.900
+Now we can do some queries on the tables.
+
+00:18:00.900 --> 00:18:03.333
+We have `SELECT` as the keyword or the SQL,
+
+00:18:03.333 --> 00:18:06.833
+so we will select the SQL.
+
+00:18:06.833 --> 00:18:13.559
+Here we have all the tables existing in this schema.
+
+00:18:13.560 --> 00:18:25.633
+We can also use an alias for completions.
+
+00:18:25.633 --> 00:18:31.267
+Now let's look at a more complex example.
+
+00:18:31.267 --> 00:18:43.367
+We will try to do a join on two tables.
+
+00:18:43.367 --> 00:19:06.600
+Let's add a `WHERE` clause.
+
+00:19:06.600 --> 00:19:23.333
+Next, let's do insert.
+
+00:19:23.333 --> 00:19:27.967
+You can just click on Tab to go to the next field.
+
+00:19:27.967 --> 00:19:30.700
+Let's fill in the columns.
+
+00:19:30.700 --> 00:19:32.667
+And do a Tab to go to the values
+
+00:19:32.667 --> 00:19:37.000
+and add the corresponding values.
+
+00:19:37.000 --> 00:19:48.033
+Finally, an update.
+
+00:19:48.033 --> 00:20:00.700
+Now we will try to delete this
+
+00:20:00.700 --> 00:20:07.333
+with a `WHERE col11 = 4`.
+
+00:20:07.333 --> 00:20:16.267
+Lastly, let's try dropping the table.
+
+00:20:16.267 --> 00:20:21.867
+That's all for this video. Thanks.
+
+00:20:21.867 --> 00:20:30.740
+Slide with the text "Let's Make Computing Personal."
diff --git a/2023/captions/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--answers.vtt b/2023/captions/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--answers.vtt
new file mode 100644
index 00000000..44f645f9
--- /dev/null
+++ b/2023/captions/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--answers.vtt
@@ -0,0 +1,893 @@
+WEBVTT
+
+
+00:00:00.060 --> 00:00:01.400
+[Speaker 0]: All right, I've started the recording,
+
+00:00:01.400 --> 00:00:03.240
+so Sasha, you don't need to worry about this.
+
+00:00:03.240 --> 00:00:04.500
+Hi Jeremy, how are you doing?
+
+00:00:04.779 --> 00:00:07.160
+[Speaker 1]: I'm doing great, how about you?
+
+00:00:08.039 --> 00:00:09.380
+[Speaker 0]: I am also doing great,
+
+00:00:09.380 --> 00:00:11.780
+I am feeling replenished after this lunch
+
+00:00:11.780 --> 00:00:14.179
+break and I am happy to go back for 4 more
+
+00:00:15.900 --> 00:00:16.940
+[Speaker 1]: Me too. Let me
+
+00:00:14.179 --> 00:00:17.303
+[Speaker 0]: hours of conferences. just,
+
+00:00:17.303 --> 00:00:20.200
+yeah great, Let me just put up the questions.
+
+00:00:20.660 --> 00:00:22.440
+So Jeremy is going to read the questions and
+
+00:00:22.440 --> 00:00:24.380
+answer them and I will be doing jazz hands in
+
+00:00:24.380 --> 00:00:26.599
+the background or provide any bits of
+
+00:00:26.599 --> 00:00:28.860
+information I may, considering that Orgrim
+
+00:00:28.860 --> 00:00:30.080
+has been mentioned during the presentation
+
+00:00:30.080 --> 00:00:31.980
+and everyone's going to want to ask me.
+
+00:00:35.640 --> 00:00:37.940
+at... Show me? Yeah, go.
+
+00:00:35.080 --> 00:00:39.280
+[Speaker 1]: So I'm looking I'm looking at the,
+
+00:00:39.280 --> 00:00:41.160
+do you think the line numbers for writing
+
+00:00:41.160 --> 00:00:43.220
+documents is kind of a distraction,
+
+00:00:43.260 --> 00:00:47.280
+especially for notes? No,
+
+00:00:47.860 --> 00:00:50.300
+I do software development and that left
+
+00:00:51.180 --> 00:00:53.160
+fringe is kind of invisible,
+
+00:00:53.680 --> 00:00:56.260
+but I do like to use jump to line.
+
+00:00:56.320 --> 00:00:59.580
+So I just bind that to control L and it's
+
+00:00:59.580 --> 00:01:01.200
+helpful to just see that.
+
+00:01:02.980 --> 00:01:04.900
+So no, I haven't noticed that.
+
+00:01:05.500 --> 00:01:07.540
+There are other ways to jump around in Emacs,
+
+00:01:07.540 --> 00:01:10.140
+but I like to have many different ways.
+
+00:01:11.000 --> 00:01:17.120
+So, yeah. Then how do you manage private and
+
+00:01:17.120 --> 00:01:18.840
+public data with your Zettelkasten?
+
+00:01:20.820 --> 00:01:23.440
+1 of my blockers on putting my Zettelkasten
+
+00:01:23.600 --> 00:01:26.240
+on the web is I don't want everything to be
+
+00:01:26.240 --> 00:01:28.860
+public, especially fleeting notes.
+
+00:01:31.360 --> 00:01:36.500
+So 1 thing is I only explicitly export a file
+
+00:01:36.560 --> 00:01:39.380
+to Hugo and I have that,
+
+00:01:39.380 --> 00:01:41.500
+I can like, I can export this.
+
+00:01:41.520 --> 00:01:43.380
+That doesn't show up very well.
+
+00:01:44.540 --> 00:01:50.280
+So it's export probably export org to take on
+
+00:01:50.280 --> 00:01:52.860
+rules and we'll export the buffer.
+
+00:01:53.760 --> 00:01:57.040
+And then any that I referenced,
+
+00:01:57.080 --> 00:01:58.300
+like these are all links,
+
+00:01:58.660 --> 00:02:04.380
+any notes that are not public will be
+
+00:02:04.380 --> 00:02:06.480
+exported as the text, but there won't be a
+
+00:02:06.480 --> 00:02:10.160
+link to it. So it's having the very
+
+00:02:10.160 --> 00:02:12.140
+deliberate, this is going up.
+
+00:02:13.040 --> 00:02:15.080
+And so I send it over into Hugo,
+
+00:02:15.900 --> 00:02:17.200
+which is its own repository,
+
+00:02:18.700 --> 00:02:21.300
+and either massage it there or whatnot.
+
+00:02:22.800 --> 00:02:25.760
+Is that any further questions on that 1?
+
+00:02:27.980 --> 00:02:30.200
+[Speaker 0]: I don't think so.
+
+00:02:33.940 --> 00:02:36.940
+[Speaker 1]: Is there anything special you're using from
+
+00:02:36.940 --> 00:02:38.960
+org to Hugo markdown? This looks like a
+
+00:02:38.960 --> 00:02:41.520
+really nice setup. I like to give it a try.
+
+00:02:43.840 --> 00:02:47.420
+Yes, there I have a bespoke build process.
+
+00:02:48.900 --> 00:02:50.100
+Having started in WordPress,
+
+00:02:50.280 --> 00:02:51.320
+working through Jekyll,
+
+00:02:51.460 --> 00:02:54.200
+going to Hugo, and then switching from
+
+00:02:54.200 --> 00:02:57.740
+Markdown to org mode, I've backed into this
+
+00:02:57.740 --> 00:02:59.180
+private public Zettelkasten,
+
+00:03:00.140 --> 00:03:04.840
+which is really nice. And I have added quite
+
+00:03:04.840 --> 00:03:08.000
+a bit of code. There's my dog.
+
+00:03:15.520 --> 00:03:16.020
+[Speaker 0]: blogging.
+
+00:03:10.640 --> 00:03:20.720
+[Speaker 1]: In my So I have, how do I export like side
+
+00:03:20.720 --> 00:03:22.800
+notes because I want I have marginalia
+
+00:03:23.200 --> 00:03:24.780
+instead of like the footnotes,
+
+00:03:24.940 --> 00:03:27.080
+but I still use org mode footnotes.
+
+00:03:27.520 --> 00:03:29.700
+And so I've got a bunch of these things and
+
+00:03:29.700 --> 00:03:32.800
+this is all available up on GitHub And I'll
+
+00:03:32.800 --> 00:03:34.700
+provide a link in the document.
+
+00:03:36.740 --> 00:03:42.280
+Yeah, so there's quite a bit of making the
+
+00:03:42.280 --> 00:03:44.440
+export work how I want it.
+
+00:03:45.040 --> 00:03:48.840
+And I've been kind of fiddling with also
+
+00:03:48.840 --> 00:03:51.560
+improving like LaTeX or PDF export.
+
+00:03:54.720 --> 00:03:59.080
+So yeah, I have a long running to do item to
+
+00:03:59.480 --> 00:04:02.880
+fully lay out my bespoke build process.
+
+00:04:02.920 --> 00:04:04.680
+Because once it gets to Hugo,
+
+00:04:04.960 --> 00:04:07.440
+there's also additional work that I do to
+
+00:04:07.440 --> 00:04:11.820
+compile what is kind of a personal,
+
+00:04:12.340 --> 00:04:13.620
+like a digital garden-ish,
+
+00:04:15.160 --> 00:04:16.940
+it's really a blog focused 1.
+
+00:04:18.160 --> 00:04:28.080
+So yeah, it's at Jeremy F on GitHub at dot
+
+00:04:28.080 --> 00:04:33.060
+Emacs. And you'll be looking for JF
+
+00:04:33.200 --> 00:04:36.300
+blogging.l that has some of this.
+
+00:04:37.360 --> 00:04:42.580
+Also jforgmode.l will have some of that.
+
+00:04:45.400 --> 00:04:49.540
+Yeah, I wanna circle back to that,
+
+00:04:49.540 --> 00:04:51.560
+anything to prevent private links from
+
+00:04:51.560 --> 00:04:54.220
+getting accidentally being made publicly
+
+00:04:54.560 --> 00:05:02.440
+accessible. Yes. So previous to using denote,
+
+00:05:02.440 --> 00:05:06.480
+I also used org-roam. So I have this idea of
+
+00:05:06.480 --> 00:05:12.560
+a node in org-roam has roam refs.
+
+00:05:13.360 --> 00:05:15.660
+And org-roam is much more robust about that.
+
+00:05:15.660 --> 00:05:17.880
+So anytime you mention a ref,
+
+00:05:18.740 --> 00:05:20.300
+it will count it as a backlink.
+
+00:05:20.820 --> 00:05:23.700
+So for example, if my node was my blog,
+
+00:05:23.860 --> 00:05:25.700
+take on rules, anytime,
+
+00:05:26.000 --> 00:05:30.420
+anywhere in my org Rome repository,
+
+00:05:30.700 --> 00:05:32.120
+I mentioned takeonrules.com,
+
+00:05:33.280 --> 00:05:34.980
+it would treat it as a backlink.
+
+00:05:35.740 --> 00:05:37.980
+So from that Rome refs,
+
+00:05:39.780 --> 00:05:45.640
+I have a, I will interrogate,
+
+00:05:45.720 --> 00:05:47.800
+and this is not the function for I will look
+
+00:05:47.800 --> 00:05:50.940
+at the node to see does it have a Rome ref
+
+00:05:51.040 --> 00:05:53.760
+and if it does I will treat it as a public
+
+00:05:53.760 --> 00:05:58.180
+link. So I don't I haven't bled out any
+
+00:05:59.060 --> 00:06:01.620
+private information because again going back
+
+00:06:01.620 --> 00:06:06.000
+to I only publish a document and the document
+
+00:06:06.340 --> 00:06:09.060
+I'm explicitly doing so and then my process
+
+00:06:09.220 --> 00:06:12.720
+filters out any links that do not have public
+
+00:06:12.720 --> 00:06:17.140
+URLs. It will just dump it in there as maybe
+
+00:06:17.140 --> 00:06:20.640
+a span with a ref class of it so that I can
+
+00:06:20.640 --> 00:06:22.840
+kind of know that that came from there.
+
+00:06:29.600 --> 00:06:33.740
+Yes, So the font I am using is,
+
+00:06:36.820 --> 00:06:38.460
+so this is another font.
+
+00:06:38.620 --> 00:06:41.140
+What font were you using in EWW?
+
+00:06:42.940 --> 00:06:50.420
+I think I'm using IOS Becca and ET Bembo.
+
+00:06:51.700 --> 00:06:53.180
+[Speaker 0]: Okay, show me your EWW.
+
+00:06:53.560 --> 00:06:55.360
+If we are doing full ricing setup,
+
+00:06:55.440 --> 00:06:58.440
+I can recognize Yosefka just by looking at
+
+00:06:58.440 --> 00:06:58.940
+it.
+
+00:06:50.640 --> 00:07:01.300
+[Speaker 1]: So let's... Yeah, so yeah,
+
+00:07:01.300 --> 00:07:06.240
+ET Bembo, I'm using these 2 fonts as kind of
+
+00:07:06.240 --> 00:07:09.260
+my anchor. So the variable pitch is ETBembo.
+
+00:07:10.240 --> 00:07:13.640
+My blog started off with a Tufta style CSS
+
+00:07:14.100 --> 00:07:16.360
+and I really pared it down and got rid of any
+
+00:07:16.360 --> 00:07:19.940
+of the additional fonts because they can be
+
+00:07:19.940 --> 00:07:21.580
+used as trackers. And I'm like,
+
+00:07:21.580 --> 00:07:24.020
+nope, you decide what font you want for your
+
+00:07:24.020 --> 00:07:26.420
+browser. I don't need to tell you what looks
+
+00:07:26.420 --> 00:07:33.680
+good for you. Yeah, so the story of Take On
+
+00:07:33.680 --> 00:07:37.480
+Rules, I have to thank my partner and lovely
+
+00:07:37.480 --> 00:07:41.180
+wife for that. She kind of nudged me to do
+
+00:07:41.180 --> 00:07:43.080
+some blogging, and we spent some time
+
+00:07:43.080 --> 00:07:45.160
+thinking about it. And originally,
+
+00:07:45.160 --> 00:07:48.220
+it started off as writing about rules for
+
+00:07:48.700 --> 00:07:51.060
+role-playing games or tabletop games.
+
+00:07:51.820 --> 00:07:54.860
+And it has extended far beyond that.
+
+00:07:54.960 --> 00:07:56.760
+The blog, as I've shifted,
+
+00:07:56.920 --> 00:07:58.660
+as I think I mentioned in the presentation,
+
+00:07:59.060 --> 00:08:01.640
+as I've shifted towards an everything and
+
+00:08:01.640 --> 00:08:05.180
+nothing approach, the blog is anything I want
+
+00:08:05.180 --> 00:08:06.240
+to write about anymore.
+
+00:08:06.980 --> 00:08:09.440
+There's haikus up there with some regularity.
+
+00:08:10.080 --> 00:08:17.280
+So the name is now a relic of a past.
+
+00:08:18.340 --> 00:08:21.680
+So yeah, the thing and nothing is,
+
+00:08:22.360 --> 00:08:24.640
+and I put that in the about on my blog.
+
+00:08:25.640 --> 00:08:29.440
+So it's, I highly encourage like,
+
+00:08:29.440 --> 00:08:34.440
+I feel great. Once I like said,
+
+00:08:34.440 --> 00:08:36.740
+oh, I don't have to write this towards a
+
+00:08:36.740 --> 00:08:40.100
+topical blog post or like what the topic is,
+
+00:08:40.380 --> 00:08:44.120
+it freed it up. And I know that it comes at a
+
+00:08:44.800 --> 00:08:47.500
+potential compromise because it's very much
+
+00:08:47.500 --> 00:08:51.960
+me being a voice up there instead of
+
+00:08:51.960 --> 00:08:53.760
+something that is curated and filtered
+
+00:08:53.760 --> 00:08:56.060
+through a specific channel like I could have
+
+00:08:56.060 --> 00:08:59.340
+a technical blog but I decided I'm just gonna
+
+00:08:59.340 --> 00:09:02.420
+tag it as programming or emacs and let you
+
+00:09:02.420 --> 00:09:04.840
+find it and you can subscribe to the rss
+
+00:09:04.920 --> 00:09:07.360
+feeds of each tag that you find applicable
+
+00:09:10.120 --> 00:09:13.840
+[Speaker 0]: right thank you so we are we are at the last
+
+00:09:13.840 --> 00:09:16.100
+question on the pad but I see that some
+
+00:09:16.100 --> 00:09:18.480
+people have joined us on the blue button.
+
+00:09:18.480 --> 00:09:22.420
+So, hi everyone! We have about 6 minutes
+
+00:09:22.420 --> 00:09:24.220
+until we need to go to the next talk,
+
+00:09:24.220 --> 00:09:26.460
+but if anyone has a question on the blue
+
+00:09:26.460 --> 00:09:28.780
+button, I'm thinking about James who's joined
+
+00:09:28.780 --> 00:09:32.780
+us and who was kind enough to drop a thank
+
+00:09:32.780 --> 00:09:33.940
+you line on the blue button.
+
+00:09:33.940 --> 00:09:35.460
+Do you want to unmute yourself and ask a
+
+00:09:35.460 --> 00:09:39.520
+question maybe? I'm not putting pressure by
+
+00:09:39.520 --> 00:09:41.680
+the way, I don't feel like you need to but it
+
+00:09:41.870 --> 00:09:44.060
+just... I speak all the time otherwise I'm
+
+00:09:44.060 --> 00:09:45.720
+very happy to spend time with our speakers
+
+00:09:45.720 --> 00:09:48.700
+you know but you know EmacsConf it's about,
+
+00:09:49.400 --> 00:09:51.300
+as Sasha told you during the intro,
+
+00:09:51.540 --> 00:09:54.180
+it's about making people take things,
+
+00:09:54.240 --> 00:09:56.100
+brilliant things out of their mind and put
+
+00:09:56.100 --> 00:09:57.840
+them outside in the public.
+
+00:09:57.940 --> 00:10:00.660
+And for us, you know, we get to see the talk
+
+00:10:00.660 --> 00:10:01.720
+evolve, we talk with people.
+
+00:10:01.720 --> 00:10:03.840
+So for us we are already quite cognizant of
+
+00:10:03.840 --> 00:10:06.260
+the topic and the point is not for us hosts
+
+00:10:06.360 --> 00:10:09.780
+to ask questions, it's mostly for you to ask
+
+00:10:09.780 --> 00:10:11.580
+questions and then we worry about all the
+
+00:10:11.580 --> 00:10:12.940
+fancy stuff in the background.
+
+00:10:13.900 --> 00:10:16.080
+Otherwise you damn well know I will ask
+
+00:10:16.080 --> 00:10:18.660
+questions about org-roam,
+
+00:10:18.900 --> 00:10:20.460
+about links, and nodes in general,
+
+00:10:20.460 --> 00:10:22.100
+because that's my bread and butter.
+
+00:10:24.720 --> 00:10:27.440
+[Speaker 1]: Yeah, I should add, like,
+
+00:10:27.440 --> 00:10:31.820
+the process of migrating the data from a
+
+00:10:31.820 --> 00:10:35.220
+WordPress export to markdown to org mode by
+
+00:10:35.220 --> 00:10:39.680
+way of Pandoc was, it was really insightful
+
+00:10:39.720 --> 00:10:42.900
+to help me understand how I want the data to
+
+00:10:42.900 --> 00:10:47.580
+flow and how I could create a repository for
+
+00:10:47.580 --> 00:10:50.940
+me of information and 1 that I could then
+
+00:10:50.940 --> 00:10:52.540
+send out into the world,
+
+00:10:52.540 --> 00:10:53.600
+the public information,
+
+00:10:54.240 --> 00:10:58.160
+while not having to worry about the private
+
+00:10:58.460 --> 00:11:00.280
+things that I might want to keep.
+
+00:11:01.620 --> 00:11:04.240
+So it was that process of just working
+
+00:11:04.240 --> 00:11:08.940
+through it to reflect on how I'm writing and
+
+00:11:08.940 --> 00:11:11.360
+what I started using writing for.
+
+00:11:12.040 --> 00:11:14.040
+I think Richard Feynman said,
+
+00:11:14.040 --> 00:11:15.680
+no, writing is my thinking.
+
+00:11:15.680 --> 00:11:17.740
+What I wrote is thinking.
+
+00:11:18.240 --> 00:11:21.480
+So it has helped to really frame that.
+
+00:11:22.800 --> 00:11:24.440
+[Speaker 0]: Yeah, I mean, there's an interesting
+
+00:11:27.200 --> 00:11:29.220
+ambivalent relationship because it feels like
+
+00:11:29.220 --> 00:11:31.800
+writing helps thinking and thinking helps
+
+00:11:31.800 --> 00:11:35.340
+writing in a way and nowhere have I
+
+00:11:35.340 --> 00:11:37.920
+personally been more aware of this than when
+
+00:11:38.000 --> 00:11:41.000
+coming up with networks of notes because it
+
+00:11:41.000 --> 00:11:43.860
+really I mean you use whichever word you want
+
+00:11:43.860 --> 00:11:45.900
+you know a second brain a collection of notes
+
+00:11:45.900 --> 00:11:48.860
+a slip box a repository of notes whichever
+
+00:11:48.860 --> 00:11:52.080
+the tool you use the point at the end is to
+
+00:11:52.080 --> 00:11:54.000
+resonate with you. It's kind of like
+
+00:11:54.000 --> 00:11:57.280
+extending those moments of consciousness that
+
+00:11:57.280 --> 00:11:58.880
+you have when you take your notes,
+
+00:11:59.440 --> 00:12:02.780
+and you make the entire gradient available.
+
+00:12:04.260 --> 00:12:06.380
+Sorry, I heard Sasha whispering in my ear
+
+00:12:06.380 --> 00:12:08.360
+sometimes. It's pretty pleasant.
+
+00:12:09.520 --> 00:12:10.500
+It's really shocking.
+
+00:12:12.660 --> 00:12:15.040
+[Speaker 1]: Yeah, Aaron, you had a question.
+
+00:12:15.040 --> 00:12:17.440
+Do I use denote just for my blogs or do I use
+
+00:12:17.440 --> 00:12:18.660
+it for other purposes?
+
+00:12:19.940 --> 00:12:25.120
+I use denote for all of my note taking and
+
+00:12:25.520 --> 00:12:28.660
+almost, I think it's exclusively org mode
+
+00:12:28.920 --> 00:12:30.560
+that I, that I use it in.
+
+00:12:30.600 --> 00:12:33.400
+But what I really appreciated in the
+
+00:12:33.400 --> 00:12:37.500
+consideration that Proc put forward was the
+
+00:12:37.500 --> 00:12:40.940
+file name encodes the information that's
+
+00:12:40.940 --> 00:12:45.980
+relevant. So it has helped me be able to
+
+00:12:46.080 --> 00:12:48.580
+query by using things like ripgrep,
+
+00:12:49.220 --> 00:12:54.480
+well not ripgrep, tree or I forget any more
+
+00:12:54.480 --> 00:13:00.140
+what I use. But having that the file encodes
+
+00:13:00.300 --> 00:13:03.820
+useful information. And it's so much more
+
+00:13:03.820 --> 00:13:06.960
+relevant when I look at having worked at a
+
+00:13:06.960 --> 00:13:10.520
+university that rolled out Google Drive to
+
+00:13:10.520 --> 00:13:12.840
+everyone without any guidance on how to
+
+00:13:12.840 --> 00:13:16.120
+organize stuff. And I worked at a library and
+
+00:13:16.120 --> 00:13:19.540
+it was just a nightmare watching things show
+
+00:13:19.540 --> 00:13:22.840
+up where you could never find it again.
+
+00:13:23.240 --> 00:13:28.060
+So, file name, the file name having the date,
+
+00:13:28.380 --> 00:13:33.280
+having the title and having tags just made so
+
+00:13:33.280 --> 00:13:34.780
+much sense to be findable.
+
+00:13:36.820 --> 00:13:41.420
+And yeah, I really do just use org.
+
+00:13:41.740 --> 00:13:47.220
+But if I am going to make txt files or other
+
+00:13:47.220 --> 00:13:52.040
+files, I have started adopting that structure
+
+00:13:52.120 --> 00:13:52.840
+and format.
+
+00:13:56.840 --> 00:14:00.900
+[Speaker 0]: Right. Well, Jeremy, we have about 1 minute
+
+00:14:00.900 --> 00:14:03.080
+and 30 seconds left until we go on to the
+
+00:14:03.080 --> 00:14:05.140
+next talk. Do you have any final words
+
+00:14:05.140 --> 00:14:06.740
+regarding your presentation or maybe where
+
+00:14:06.740 --> 00:14:08.400
+people can find you? I know you've already
+
+00:14:08.400 --> 00:14:09.240
+mentioned this but...
+
+00:14:09.240 --> 00:14:13.160
+[Speaker 1]: Yeah, take on rules. I'm also on dice camp
+
+00:14:13.440 --> 00:14:18.080
+dice.campmastodon at take on rules and I've
+
+00:14:18.080 --> 00:14:22.080
+thought about emacs.h but we federate well So
+
+00:14:22.340 --> 00:14:27.560
+I appreciate that. And I can stay on and
+
+00:14:27.560 --> 00:14:29.680
+answer any further questions if folks have
+
+00:14:29.680 --> 00:14:30.180
+it.
+
+00:14:31.420 --> 00:14:34.860
+[Speaker 0]: Sure. So sorry. Sorry,
+
+00:14:34.860 --> 00:14:36.820
+I confused myself with the buttons talking to
+
+00:14:36.820 --> 00:14:38.960
+production and all. Well then,
+
+00:14:38.960 --> 00:14:41.260
+what I'm going to do is that the stream is
+
+00:14:41.260 --> 00:14:43.740
+going to move on to the next talk in about 50
+
+00:14:43.740 --> 00:14:46.160
+seconds. If people want to join and ask any
+
+00:14:46.160 --> 00:14:49.160
+questions, feel free to join on the blue
+
+00:14:49.160 --> 00:14:51.380
+button. The link is on the talk page or on
+
+00:14:51.380 --> 00:14:54.480
+IRC. And feel free to hang out as long as you
+
+00:14:54.480 --> 00:14:56.160
+want to ask as many questions as you want to
+
+00:14:56.160 --> 00:14:58.180
+Jeremy. We are recording all of this and
+
+00:14:58.180 --> 00:15:00.540
+we'll be publishing this later on once again.
+
+00:15:01.120 --> 00:15:03.080
+And all that's left for me to do is to thank
+
+00:15:03.080 --> 00:15:05.580
+you so much, Jeremy, for your presentation
+
+00:15:05.740 --> 00:15:08.200
+and your answers. And I will see you another
+
+00:15:08.200 --> 00:15:08.700
+time.
+
+00:15:12.700 --> 00:15:14.840
+[Speaker 1]: So yeah, plasma strike.
+
+00:15:15.560 --> 00:15:18.500
+I'm not able to grant speaking powers.
+
+00:15:20.340 --> 00:15:22.160
+So if you wanted to type up something
+
+00:15:22.160 --> 00:15:22.660
+question-wise.
+
+00:15:24.000 --> 00:15:26.000
+[Speaker 0]: Oh, okay. I'll manage this in the background.
+
+00:15:26.000 --> 00:15:28.220
+So we're moving on to the next talk.
+
+00:15:28.500 --> 00:15:30.240
+We'll figure out the things about VBB,
+
+00:15:30.240 --> 00:15:32.940
+But in the meantime, enjoy the next talk.
+
+00:15:34.140 --> 00:15:35.460
+Bye. All right, Jeremy.
+
+00:15:35.460 --> 00:15:37.080
+We are now on the next talk.
+
+00:15:37.080 --> 00:15:39.240
+Sorry about having to mention multiple things
+
+00:15:39.240 --> 00:15:42.500
+at the same time. Speaking rights.
+
+00:15:42.500 --> 00:15:44.440
+I will try fixing this in the background.
+
+00:15:44.440 --> 00:15:46.120
+I need to get moving for the next talk,
+
+00:15:46.120 --> 00:15:48.040
+but I'll do it in the background and we'll
+
+00:15:48.040 --> 00:15:49.660
+let you know as soon as it's ready.
+
+00:15:40.440 --> 00:15:50.360
+[Speaker 1]: We're doing great. Okay.
+
+00:15:51.220 --> 00:15:52.320
+[Speaker 0]: Alright, bye bye Jeremy.
diff --git a/2023/captions/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--main--chapters.vtt b/2023/captions/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--main--chapters.vtt
new file mode 100644
index 00000000..4c1fd05f
--- /dev/null
+++ b/2023/captions/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--main--chapters.vtt
@@ -0,0 +1,26 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:57.119
+Intro
+
+00:00:57.120 --> 00:01:18.399
+How I got here
+
+00:01:18.400 --> 00:01:45.959
+Friction
+
+00:01:45.960 --> 00:02:15.919
+Domains for notes
+
+00:02:15.920 --> 00:02:55.439
+Demo
+
+00:02:55.440 --> 00:03:32.839
+Dabbrev and hippie-expand
+
+00:03:32.840 --> 00:07:49.159
+Links
+
+00:07:49.160 --> 00:08:53.160
+Conclusion
diff --git a/2023/captions/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--main.vtt b/2023/captions/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--main.vtt
new file mode 100644
index 00000000..59b67e77
--- /dev/null
+++ b/2023/captions/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--main.vtt
@@ -0,0 +1,557 @@
+WEBVTT captioned by bala, checked by sachac
+
+NOTE Intro
+
+00:00:00.000 --> 00:00:04.559
+Hello everyone, I'm Jeremy Friesen, pronouns he/him,
+
+00:00:04.560 --> 00:00:05.879
+and today I'll be talking about
+
+00:00:05.880 --> 00:00:08.599
+how Emacs turbocharges my writing.
+
+00:00:08.600 --> 00:00:11.799
+Quick intro: I've been programming since 1998
+
+00:00:11.800 --> 00:00:14.079
+and blogging since 2011.
+
+00:00:14.080 --> 00:00:16.639
+In May of 2020 I switched to Emacs,
+
+00:00:16.640 --> 00:00:19.919
+having previously used a long list of different editors.
+
+00:00:19.920 --> 00:00:23.039
+Curious about how Emacs impacted my writing,
+
+00:00:23.040 --> 00:00:25.559
+I wrote some stuff on my personal site and
+
+00:00:25.560 --> 00:00:30.399
+found that I blogged about 95 words per day prior to Emacs,
+
+00:00:30.400 --> 00:00:33.719
+and with Emacs I'm blogging about 340.
+
+00:00:33.720 --> 00:00:37.959
+Now, this is not a fair comparison, many things changed.
+
+00:00:37.960 --> 00:00:40.919
+A pandemic removed 2 hours of commute every day
+
+00:00:40.920 --> 00:00:44.199
+as a big contributor.
+
+00:00:44.200 --> 00:00:46.999
+Ultimately though, I've used Emacs and extended it
+
+00:00:47.000 --> 00:00:50.319
+to reduce barriers to capturing and writing and thinking,
+
+00:00:50.320 --> 00:00:53.319
+and I'm always on the lookout for minor refinements
+
+00:00:53.320 --> 00:00:57.119
+that help me stay in my thinking.
+
+NOTE How I got here
+
+00:00:57.120 --> 00:00:59.239
+How I got here was I started in WordPress,
+
+00:00:59.240 --> 00:01:02.599
+then I moved to Jekyll, and then to Hugo,
+
+00:01:02.600 --> 00:01:05.439
+and through that process I started writing in Markdown.
+
+00:01:05.440 --> 00:01:07.119
+And when I was learning Emacs,
+
+00:01:07.120 --> 00:01:09.359
+I also didn't want to learn Org Mode,
+
+00:01:09.360 --> 00:01:12.399
+it felt intimidating because it could do so many things.
+
+00:01:12.400 --> 00:01:15.519
+I later learned Org Mode grows with you,
+
+00:01:15.520 --> 00:01:18.399
+and that's where I'm at now.
+
+NOTE Friction
+
+00:01:18.400 --> 00:01:19.999
+But I didn't realize that friction
+
+00:01:20.000 --> 00:01:23.359
+between writing Markdown for my public blog
+
+00:01:23.360 --> 00:01:25.479
+and then adopting Org Mode locally
+
+00:01:25.480 --> 00:01:28.519
+for writing and time tracking and things like that.
+
+00:01:28.520 --> 00:01:31.119
+And also, where did I put things,
+
+00:01:31.120 --> 00:01:35.159
+because migrating the formats was just a little clunky.
+
+00:01:35.160 --> 00:01:38.199
+So ultimately I spent some time thinking about the data flow
+
+00:01:38.200 --> 00:01:39.519
+and where I would put things,
+
+00:01:39.520 --> 00:01:41.039
+this kind of pre-thinking,
+
+00:01:41.040 --> 00:01:45.959
+where does stuff go when it comes into and out of my brain.
+
+NOTE Domains for notes
+
+00:01:45.960 --> 00:01:49.399
+So I have many domains where I'll write towards.
+
+00:01:49.400 --> 00:01:51.119
+The ones for this presentation are going to be
+
+00:01:51.120 --> 00:01:54.159
+blog posts, epigraphs, glossary, and melange.
+
+00:01:54.160 --> 00:01:56.319
+Melange is, I don't know where it goes,
+
+00:01:56.320 --> 00:02:00.999
+but now I do, I just throw it in melange.
+
+00:02:01.000 --> 00:02:04.479
+So I began exploring Org Mode via Org Roam,
+
+00:02:04.480 --> 00:02:07.559
+but I've ultimately switched from Org Roam
+
+00:02:07.560 --> 00:02:10.639
+to the simplified Denote package.
+
+00:02:10.640 --> 00:02:13.199
+I didn't use a lot of the functionality
+
+00:02:13.200 --> 00:02:15.919
+and I appreciate the plain text reality of Denote.
+
+NOTE Demo
+
+00:02:15.920 --> 00:02:18.799
+So let's hop into the demo.
+
+00:02:18.800 --> 00:02:19.919
+I'm going to split my screen.
+
+00:02:19.920 --> 00:02:21.959
+Over on the right is going to be
+
+00:02:21.960 --> 00:02:24.199
+where I'm going to be live typing stuff.
+
+00:02:24.200 --> 00:02:27.319
+So let's get going.
+
+00:02:27.320 --> 00:02:29.799
+You'll notice I don't do a lot of screen splitting.
+
+00:02:29.800 --> 00:02:32.239
+It just makes it easier to focus.
+
+00:02:32.240 --> 00:02:34.039
+So let's create a note.
+
+00:02:34.040 --> 00:02:41.279
+All right, I have bound hyper to my command key,
+
+00:02:41.280 --> 00:02:42.519
+my right command key.
+
+00:02:42.520 --> 00:02:43.679
+This opens up a whole world.
+
+00:02:43.680 --> 00:02:45.559
+I'm going to create a blog post
+
+00:02:45.560 --> 00:02:49.799
+and we're going to name it the ever popular "hello world".
+
+00:02:49.800 --> 00:02:50.799
+It's Emacs.
+
+00:02:50.800 --> 00:02:51.519
+Great.
+
+00:02:51.520 --> 00:02:55.439
+We've saved it.
+
+NOTE Dabbrev and hippie-expand
+
+00:02:55.440 --> 00:02:57.399
+One of the things I encourage everybody to do
+
+00:02:57.400 --> 00:03:02.039
+is to watch Jay Dixit's presentation, Emacs for Writers.
+
+00:03:02.040 --> 00:03:08.079
+It showed me the utility of Dabbrev for quick auto correction.
+
+00:03:08.080 --> 00:03:11.479
+And I also love using hippie-expand.
+
+00:03:11.480 --> 00:03:14.639
+When I watch VS coders code, it's always a little sad pants
+
+00:03:14.640 --> 00:03:17.319
+because they're thinking about coding or writing
+
+00:03:17.320 --> 00:03:19.159
+in terms of their code.
+
+00:03:19.160 --> 00:03:24.239
+But I have found as a programmer, I tend to write more tech,
+
+00:03:24.240 --> 00:03:27.799
+more like English instead of programming code.
+
+00:03:27.800 --> 00:03:30.719
+So I think it's important to understand these tools
+
+00:03:30.720 --> 00:03:32.839
+that help me write better.
+
+NOTE Links
+
+00:03:32.840 --> 00:03:34.879
+All right, we're going to go with links.
+
+00:03:34.880 --> 00:03:36.999
+Links are foundational for the web.
+
+00:03:37.000 --> 00:03:41.159
+I'm going to insert a public link,
+
+00:03:41.160 --> 00:03:43.439
+which is a role playing game that I love,
+
+00:03:43.440 --> 00:03:45.159
+Worlds Without Number.
+
+00:03:45.160 --> 00:03:48.399
+And I'm going to go ahead and describe it.
+
+00:03:48.400 --> 00:03:49.239
+A role playing game.
+
+00:03:49.240 --> 00:03:53.479
+But I don't want to always say role playing game.
+
+00:03:53.480 --> 00:03:54.599
+I'm going to abbreviate it.
+
+00:03:54.600 --> 00:03:57.079
+So I wrote a function that will transform it.
+
+00:03:57.080 --> 00:04:00.239
+And let's take a look at what that looks like on the inside.
+
+00:04:00.240 --> 00:04:06.279
+When I do this real quick, it's toggling it back and forth.
+
+00:04:06.280 --> 00:04:10.119
+And I'll just keep doing that.
+
+00:04:10.120 --> 00:04:12.999
+I also have the idea of public notes and private notes.
+
+00:04:13.000 --> 00:04:15.399
+Public is things that's going to have a URL.
+
+00:04:15.400 --> 00:04:16.879
+I met a person at a conference.
+
+00:04:16.880 --> 00:04:19.639
+He gave a talk on something that I thought was very useful.
+
+00:04:19.640 --> 00:04:23.159
+I didn't write down what he talked about on his note.
+
+00:04:23.160 --> 00:04:26.279
+I wrote it where it was more relevant to the topic.
+
+00:04:26.280 --> 00:04:31.159
+And I can use a backlink to go find that.
+
+00:04:31.160 --> 00:04:34.119
+Next up, I demonstrate the abbreviation.
+
+00:04:34.120 --> 00:04:35.839
+I also have dates.
+
+00:04:35.840 --> 00:04:37.999
+This is a semantic date in HTML5.
+
+00:04:38.000 --> 00:04:41.839
+I can just have the year.
+
+00:04:41.840 --> 00:04:48.359
+I can also just have something like that date is today.
+
+00:04:48.360 --> 00:04:52.239
+And we have date links.
+
+00:04:52.240 --> 00:04:54.199
+I don't have backlinks built up for that,
+
+00:04:54.200 --> 00:04:56.959
+but I have ideas of how I go about doing it.
+
+00:04:56.960 --> 00:04:58.759
+And last up, thank you Frank Herbert,
+
+00:04:58.760 --> 00:05:00.799
+I want to introduce epigraphs.
+
+00:05:00.800 --> 00:05:04.359
+So this is epigraph.
+
+00:05:04.360 --> 00:05:08.719
+I just have that, any sufficiently, dot, dot, dot.
+
+00:05:08.720 --> 00:05:10.359
+And that's my epigraph.
+
+00:05:10.360 --> 00:05:16.719
+Backlinks, I mentioned that.
+
+00:05:16.720 --> 00:05:18.999
+Let's go take a look at Jonathan, right?
+
+00:05:19.000 --> 00:05:23.119
+He's a Rubyist, but importantly is the backlinks.
+
+00:05:23.120 --> 00:05:27.319
+He gave a talk on, that's right, PDFs.
+
+00:05:27.320 --> 00:05:28.959
+I can go look at what he spoke to
+
+00:05:28.960 --> 00:05:31.879
+and I can reference that because I will remember
+
+00:05:31.880 --> 00:05:36.679
+that talk or I will remember, oh, I need to look up PDFs.
+
+00:05:36.680 --> 00:05:39.799
+Oh, I have something in PDFs.
+
+00:05:39.800 --> 00:05:43.239
+Again, it's about stumbling upon data in a good way.
+
+00:05:43.240 --> 00:05:48.319
+So thinking of making linking easy helps me
+
+00:05:48.320 --> 00:05:52.159
+create more and more ways to find things,
+
+00:05:52.160 --> 00:05:57.119
+both by links, backlinks, indices, file searches, and so forth.
+
+00:05:57.120 --> 00:05:59.239
+It's all about information organization.
+
+00:05:59.240 --> 00:06:04.879
+Next up is a really cool function of org capture.
+
+00:06:04.880 --> 00:06:06.679
+So let's take a look here.
+
+00:06:06.680 --> 00:06:08.039
+I'm going to start a clock.
+
+00:06:08.040 --> 00:06:09.159
+It's running.
+
+00:06:09.160 --> 00:06:11.479
+And I'm going to bring up my browser.
+
+00:06:11.480 --> 00:06:19.679
+And I'm going to go ahead and capture to the content to clock.
+
+00:06:19.680 --> 00:06:23.159
+And it brings up this block quote, which is lovely.
+
+00:06:23.160 --> 00:06:25.719
+And boom, I'm going to save it.
+
+00:06:25.720 --> 00:06:28.199
+I'm going to close this.
+
+00:06:28.200 --> 00:06:30.959
+We're back here to my "hello world".
+
+00:06:30.960 --> 00:06:33.519
+And it has grabbed a block quote for this.
+
+00:06:33.520 --> 00:06:38.039
+Again, it helps me gather stuff up quickly.
+
+00:06:38.040 --> 00:06:41.119
+I've bound that also in my RSS feed.
+
+00:06:41.120 --> 00:06:44.199
+We're going to skip over macros, blocks, and the abstract.
+
+00:06:44.200 --> 00:06:45.479
+And we're going to get into the export
+
+00:06:45.480 --> 00:06:47.519
+because this is where we can see the magic
+
+00:06:47.520 --> 00:06:49.599
+that happens because I want to take things
+
+00:06:49.600 --> 00:06:51.079
+from private to public.
+
+00:06:51.080 --> 00:06:53.199
+So I have bound a key.
+
+00:06:53.200 --> 00:06:55.559
+These are my menu of things I don't want to forget.
+
+00:06:55.560 --> 00:06:56.759
+I will export.
+
+00:06:56.760 --> 00:06:57.839
+And here we go.
+
+00:06:57.840 --> 00:07:04.959
+Here is my blog post in markdown format with Hugo shortcodes.
+
+00:07:04.960 --> 00:07:07.399
+So let's go take a look at what that looks like.
+
+00:07:07.400 --> 00:07:09.359
+Localhost.
+
+00:07:09.360 --> 00:07:12.359
+I'm not writing in Rails.
+
+00:07:12.360 --> 00:07:14.919
+"Hello world" right there.
+
+00:07:14.920 --> 00:07:17.159
+This is the epigraph.
+
+00:07:17.160 --> 00:07:22.279
+And I have a mention of Worlds without Number.
+
+00:07:22.280 --> 00:07:24.799
+And I have mentioned this as a abbreviation.
+
+00:07:24.800 --> 00:07:27.519
+So I include the first time this text.
+
+00:07:27.520 --> 00:07:30.199
+Here's also Jonathan.
+
+00:07:30.200 --> 00:07:33.399
+He is not a public reference thing.
+
+00:07:33.400 --> 00:07:37.519
+Also, I have these things here.
+
+00:07:37.520 --> 00:07:39.399
+And here's my captured information
+
+00:07:39.400 --> 00:07:42.599
+along with the citation link to it.
+
+00:07:42.600 --> 00:07:49.159
+Again, helpful to be consistent.
+
+NOTE Conclusion
+
+00:07:49.160 --> 00:07:52.279
+In conclusion, when I started learning Emacs,
+
+00:07:52.280 --> 00:07:55.879
+I quickly shifted to vanilla Emacs and just started writing.
+
+00:07:55.880 --> 00:07:59.519
+As I wrote, when I needed to do something that I'd previously
+
+00:07:59.520 --> 00:08:02.999
+done in a text editor, I'd find an experiment with a package.
+
+00:08:03.000 --> 00:08:04.679
+I continue that mindset.
+
+00:08:04.680 --> 00:08:06.839
+As I write, I'm attending to what I'm doing.
+
+00:08:06.840 --> 00:08:08.879
+And eventually, I realize if I were to just write
+
+00:08:08.880 --> 00:08:11.639
+a function that does this one thing,
+
+00:08:11.640 --> 00:08:13.559
+I'd have a smoother writing experience.
+
+00:08:13.560 --> 00:08:16.359
+This helps me practice my craft, extend my editor,
+
+00:08:16.360 --> 00:08:19.999
+understand its capabilities, and begin exploring other things.
+
+00:08:20.000 --> 00:08:23.159
+The goal of this is all to minimize the distractions.
+
+00:08:23.160 --> 00:08:25.759
+As I'm thinking about it, I wanted to quickly add it
+
+00:08:25.760 --> 00:08:27.159
+and then move along,
+
+00:08:27.160 --> 00:08:29.559
+basically creating breadcrumbs for me
+
+00:08:29.560 --> 00:08:31.239
+to follow my thoughts in the future.
+
+00:08:31.240 --> 00:08:33.159
+And one of those functions is
+
+00:08:33.160 --> 00:08:36.479
+I'd like to write an extender for my abbr,
+
+00:08:36.480 --> 00:08:38.679
+abbreviation export to work in Latex.
+
+00:08:38.680 --> 00:08:40.279
+It's like halfway there.
+
+00:08:40.280 --> 00:08:42.239
+So I'm looking forward to getting that done
+
+00:08:42.240 --> 00:08:45.439
+when I have some time and can prioritize it.
+
+00:08:45.440 --> 00:08:47.799
+But for now, thank you.
+
+00:08:47.800 --> 00:08:53.160
+And I look forward to your questions.