summaryrefslogtreecommitdiffstats
path: root/2024/captions
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--2024/captions/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--answers.vtt533
-rw-r--r--2024/captions/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--main--chapters.vtt47
-rw-r--r--2024/captions/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--main.vtt2395
-rw-r--r--2024/captions/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--answers.vtt966
-rw-r--r--2024/captions/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--main--chapters.vtt56
-rw-r--r--2024/captions/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--main.vtt757
-rw-r--r--2024/captions/emacsconf-2024-color--colour-your-emacs-with-ease--ryota--answers.vtt748
-rw-r--r--2024/captions/emacsconf-2024-color--colour-your-emacs-with-ease--ryota--main--chapters.vtt20
-rw-r--r--2024/captions/emacsconf-2024-color--colour-your-emacs-with-ease--ryota--main.vtt541
-rw-r--r--2024/captions/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--answers.vtt957
-rw-r--r--2024/captions/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--main--chapters.vtt35
-rw-r--r--2024/captions/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--main.vtt1361
-rw-r--r--2024/captions/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--answers.vtt720
-rw-r--r--2024/captions/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--main.vtt808
-rw-r--r--2024/captions/emacsconf-2024-gypsum--gypsum-my-clone-of-emacs-and-elisp-written-in-scheme--ramin-honary--answers.vtt725
-rw-r--r--2024/captions/emacsconf-2024-gypsum--gypsum-my-clone-of-emacs-and-elisp-written-in-scheme--ramin-honary--main.vtt1108
-rw-r--r--2024/captions/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--answers.vtt690
-rw-r--r--2024/captions/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--main--chapters.vtt23
-rw-r--r--2024/captions/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--main.vtt459
-rw-r--r--2024/captions/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--answers.vtt630
-rw-r--r--2024/captions/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--main.vtt841
-rw-r--r--2024/captions/emacsconf-2024-julia--exploring-shared-philosophies-in-julia-and-emacs--gabriele-bozzola--answers.vtt346
-rw-r--r--2024/captions/emacsconf-2024-julia--exploring-shared-philosophies-in-julia-and-emacs--gabriele-bozzola--main.vtt616
-rw-r--r--2024/captions/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--answers.vtt961
-rw-r--r--2024/captions/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--main--chapters.vtt53
-rw-r--r--2024/captions/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--main.vtt1349
-rw-r--r--2024/captions/emacsconf-2024-links--unlocking-linked-data-replacing-specialized-apps-with-an-orgbased-semantic-wiki--abhinav-tushar--main--chapters.vtt19
-rw-r--r--2024/captions/emacsconf-2024-links--unlocking-linked-data-replacing-specialized-apps-with-an-orgbased-semantic-wiki--abhinav-tushar--main.vtt841
-rw-r--r--2024/captions/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--answers.vtt996
-rw-r--r--2024/captions/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--main--chapters.vtt47
-rw-r--r--2024/captions/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--main.vtt724
-rw-r--r--2024/captions/emacsconf-2024-maxima--emacs-eev-and-maxima-now--eduardo-ochs--main.vtt1887
-rw-r--r--2024/captions/emacsconf-2024-mcclim--elisp-and-mcclim--screwlisp--answers.vtt574
-rw-r--r--2024/captions/emacsconf-2024-mcclim--elisp-and-mcclim--screwlisp--main--chapters.vtt14
-rw-r--r--2024/captions/emacsconf-2024-mcclim--elisp-and-mcclim--screwlisp--main.vtt1413
-rw-r--r--2024/captions/emacsconf-2024-open-mic--open-micpad-for-quick-updates-etc--main--chapters.vtt26
-rw-r--r--2024/captions/emacsconf-2024-open-mic--open-micpad-for-quick-updates-etc--main.vtt1751
-rw-r--r--2024/captions/emacsconf-2024-org-update--the-future-of-org--ihor-radchenko--answers.vtt1294
-rw-r--r--2024/captions/emacsconf-2024-org-update--the-future-of-org--ihor-radchenko--main--chapters.vtt86
-rw-r--r--2024/captions/emacsconf-2024-org-update--the-future-of-org--ihor-radchenko--main.vtt2046
-rw-r--r--2024/captions/emacsconf-2024-p-search--psearch-a-local-search-engine-in-emacs--zac-romero--answers.vtt2017
-rw-r--r--2024/captions/emacsconf-2024-p-search--psearch-a-local-search-engine-in-emacs--zac-romero--main--chapters.vtt38
-rw-r--r--2024/captions/emacsconf-2024-p-search--psearch-a-local-search-engine-in-emacs--zac-romero--main.vtt970
-rw-r--r--2024/captions/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--answers.vtt842
-rw-r--r--2024/captions/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--main--chapters.vtt38
-rw-r--r--2024/captions/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--main.vtt490
-rw-r--r--2024/captions/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--answers.vtt873
-rw-r--r--2024/captions/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--main--chapters.vtt35
-rw-r--r--2024/captions/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--main.vtt1151
-rw-r--r--2024/captions/emacsconf-2024-project--managing-writing-project-metadata-with-orgmode--blaine-mooers--answers.vtt2423
-rw-r--r--2024/captions/emacsconf-2024-project--managing-writing-project-metadata-with-orgmode--blaine-mooers--main--chapters.vtt59
-rw-r--r--2024/captions/emacsconf-2024-project--managing-writing-project-metadata-with-orgmode--blaine-mooers--main.vtt894
-rw-r--r--2024/captions/emacsconf-2024-regex--emacs-regex-compilation-and-future-directions-for-expressive-pattern-matching--danny-mcclanahan--main.vtt1198
-rw-r--r--2024/captions/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--answers.vtt926
-rw-r--r--2024/captions/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--main--chapters.vtt92
-rw-r--r--2024/captions/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--main.vtt1351
-rw-r--r--2024/captions/emacsconf-2024-sat-open--saturday-opening-remarks--main--chapters.vtt35
-rw-r--r--2024/captions/emacsconf-2024-sat-open--saturday-opening-remarks--main.vtt367
-rw-r--r--2024/captions/emacsconf-2024-secrets--committing-secrets-with-git-using-sopsmode--jonathan-otsuka--main--chapters.vtt26
-rw-r--r--2024/captions/emacsconf-2024-secrets--committing-secrets-with-git-using-sopsmode--jonathan-otsuka--main.vtt725
-rw-r--r--2024/captions/emacsconf-2024-sharing--so-you-want-to-be-an-emacsfluencer--gopar--main--chapters.vtt59
-rw-r--r--2024/captions/emacsconf-2024-sharing--so-you-want-to-be-an-emacsfluencer--gopar--main.vtt1653
-rw-r--r--2024/captions/emacsconf-2024-shell--emacs-as-a-shell--christopher-howard--main--chapters.vtt44
-rw-r--r--2024/captions/emacsconf-2024-shell--emacs-as-a-shell--christopher-howard--main.vtt1142
-rw-r--r--2024/captions/emacsconf-2024-students--an-example-of-a-cohesive-student-workflow-in-emacs--daniel-pinkston--answers.vtt846
-rw-r--r--2024/captions/emacsconf-2024-students--an-example-of-a-cohesive-student-workflow-in-emacs--daniel-pinkston--main.vtt472
-rw-r--r--2024/captions/emacsconf-2024-sun-close--sunday-closing-remarks--main.vtt118
-rw-r--r--2024/captions/emacsconf-2024-sun-open--sunday-opening-remarks--main.vtt361
-rw-r--r--2024/captions/emacsconf-2024-theme--my-journey-of-finding-and-creating-the-perfect-emacs-theme--metrowind--answers.vtt405
-rw-r--r--2024/captions/emacsconf-2024-theme--my-journey-of-finding-and-creating-the-perfect-emacs-theme--metrowind--main--chapters.vtt29
-rw-r--r--2024/captions/emacsconf-2024-theme--my-journey-of-finding-and-creating-the-perfect-emacs-theme--metrowind--main.vtt619
-rw-r--r--2024/captions/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--answers.vtt1032
-rw-r--r--2024/captions/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--main--chapters.vtt38
-rw-r--r--2024/captions/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--main.vtt1141
-rw-r--r--2024/captions/emacsconf-2024-water--watering-my-digital-plant-with-emacs-timers--christopher-howard--main--chapters.vtt26
-rw-r--r--2024/captions/emacsconf-2024-water--watering-my-digital-plant-with-emacs-timers--christopher-howard--main.vtt662
-rw-r--r--2024/captions/emacsconf-2024-writing--emacs-writing-studio--peter-prevos--main--chapters.vtt35
-rw-r--r--2024/captions/emacsconf-2024-writing--emacs-writing-studio--peter-prevos--main.vtt677
78 files changed, 53372 insertions, 0 deletions
diff --git a/2024/captions/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--answers.vtt b/2024/captions/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--answers.vtt
new file mode 100644
index 00000000..7e634529
--- /dev/null
+++ b/2024/captions/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--answers.vtt
@@ -0,0 +1,533 @@
+WEBVTT captioned by mohsen
+
+00:00:00.000 --> 00:00:04.199
+Thank you for the talk. I mean, it was a fairly long one and we
+
+00:00:04.200 --> 00:00:07.999
+had two very distinct parts, one which dealt with a
+
+00:00:08.000 --> 00:00:12.079
+philosophy of Libre-Halaal software and then the application,
+
+00:00:12.080 --> 00:00:14.279
+obviously, of BISOS. So thank you so much for the
+
+00:00:14.280 --> 00:00:17.839
+presentation. Before we get started with the question, and
+
+00:00:17.840 --> 00:00:21.799
+for the record, we have about 14 minutes of question time, is
+
+00:00:21.800 --> 00:00:25.079
+there anything that you'd like to add on top of your
+
+00:00:25.080 --> 00:00:27.759
+presentation, something that perhaps would not have fit in
+
+00:00:27.760 --> 00:00:33.399
+the actual presentation format? Sure, but prior to that,
+
+00:00:33.400 --> 00:00:37.839
+félicitations à tous les Français pour le rouvrir de
+
+00:00:37.840 --> 00:00:42.719
+Notre-Dame. Thank you. I'll say thank you because I'm a
+
+00:00:42.720 --> 00:00:48.039
+Francophone and I'm also French, but OK.
+
+00:00:48.040 --> 00:00:58.159
+Yeah, so a few things have come up in various other talks,
+
+00:00:58.160 --> 00:01:04.359
+that kind of EmacsConf 2024 talks, that kind of dovetail
+
+00:01:04.360 --> 00:01:10.599
+with what I was saying. One idea was Peter Prevos's
+
+00:01:10.600 --> 00:01:20.639
+observation of working with Emacs versus working on Emacs.
+
+00:01:20.640 --> 00:01:28.279
+And I'm all for that. So the idea of BLEE is that
+
+00:01:28.280 --> 00:01:32.599
+Others can package things, and we are seeing this in the form
+
+00:01:32.600 --> 00:01:38.119
+of redistributions. There is Doom, there is Spacemacs, and
+
+00:01:38.120 --> 00:01:44.079
+we are seeing the evolution of Emacs into layers. So there is
+
+00:01:44.080 --> 00:01:50.119
+the core Emacs, and there are layers on top of it. And Peter
+
+00:01:50.120 --> 00:01:59.799
+also mentioned about too much choice, this notion of
+
+00:01:59.800 --> 00:02:08.919
+Not always too much choice is the right thing to have. And
+
+00:02:08.920 --> 00:02:18.279
+packaging Emacs with a layer on top of Debian gives you a
+
+00:02:18.280 --> 00:02:24.159
+platform and an environment where the choices are a lot
+
+00:02:24.160 --> 00:02:31.159
+less. And that is not necessarily a bad thing.
+
+00:02:31.160 --> 00:02:36.719
+So that was one idea. The other idea or the other theme
+
+00:02:36.720 --> 00:02:42.919
+throughout the various talks that we saw was this concept of
+
+00:02:42.920 --> 00:02:53.519
+mixing org-mode with programming languages and what Babel
+
+00:02:53.520 --> 00:03:00.479
+has done is two things. One is it has successfully
+
+00:03:00.480 --> 00:03:06.799
+integrated org-mode with all kinds of languages. And that
+
+00:03:06.800 --> 00:03:13.039
+has happened in the context of literate programming. So
+
+00:03:13.040 --> 00:03:16.839
+a talk coming after mine is literate programming for the
+
+00:03:16.840 --> 00:03:22.399
+21st century, mixing org mode with program languages. And
+
+00:03:22.400 --> 00:03:27.359
+what I am saying is that there is an alternative and that's
+
+00:03:27.360 --> 00:03:33.839
+great, but we should also, consider a traditional
+
+00:03:33.840 --> 00:03:40.159
+programming mixed with org-mode and, polymode is key to
+
+00:03:40.160 --> 00:03:49.239
+that. So those were some of the key concepts that I saw a
+
+00:03:49.240 --> 00:03:55.799
+resonance with as the conference went forward. Yeah, and I
+
+00:03:55.800 --> 00:03:59.959
+think, if my memory serves me right, we have another talk
+
+00:03:59.960 --> 00:04:04.199
+about hyperbole this year, right after this Q&A session.
+
+00:04:04.200 --> 00:04:07.919
+And hyperbole, it's not Org Mode, but I'm not sure if you're
+
+00:04:07.920 --> 00:04:10.359
+familiar with it, Mohsen, you might have seen it from
+
+00:04:10.360 --> 00:04:14.639
+various talks last year, but it also tends to have a similar
+
+00:04:14.640 --> 00:04:18.919
+stance than you, with the fact that text should be embedded
+
+00:04:18.920 --> 00:04:21.919
+in programming languages rather than having Org-Mode
+
+00:04:21.920 --> 00:04:25.439
+implement, I mean, integrate other languages. And I found
+
+00:04:25.440 --> 00:04:28.359
+it funny that we have your talk and this talk which are about
+
+00:04:28.360 --> 00:04:32.999
+the other direction, which I find very resonating as well.
+
+00:04:33.000 --> 00:04:40.439
+Right, right, right. So in terms of other things that did not
+
+00:04:40.440 --> 00:04:46.999
+fit into my talk is that the several concepts that I
+
+00:04:47.000 --> 00:04:49.599
+introduced, namely
+
+00:04:49.600 --> 00:04:57.879
+Dynamic Blocks everywhere and COMEEGA.
+
+00:04:57.880 --> 00:05:07.719
+I'd be happy to expand on those by sharing a screen in due
+
+00:05:07.720 --> 00:05:12.519
+course, whatever is appropriate. Sure, considering the
+
+00:05:12.520 --> 00:05:16.119
+time that we have, we only have about 8 minutes 30 and we
+
+00:05:16.120 --> 00:05:18.999
+already have about four, five questions actually. I
+
+00:05:19.000 --> 00:05:22.599
+suggest we perhaps leave the screen sharing until later if
+
+00:05:22.600 --> 00:05:25.399
+people are interested. I mean this Q&A can last as long as you
+
+00:05:25.400 --> 00:05:30.079
+want. That makes perfect sense. OK, cool. So how about we
+
+00:05:30.080 --> 00:05:33.279
+focus on the question now and starting with the first one.
+
+NOTE Q: I'm from Brazil, which edition would you recommend?
+
+00:05:33.280 --> 00:05:36.279
+You mentioned that there are two editions, one named at
+
+00:05:36.280 --> 00:05:40.159
+Westerners and one for worldwide readers. I'm from Brazil.
+
+00:05:40.160 --> 00:05:42.599
+Which edition would you recommend? It's a Western country,
+
+00:05:42.600 --> 00:05:45.479
+but you didn't make the distinction exclusive for the
+
+00:05:45.480 --> 00:05:48.199
+second edition. So I thought it would be better to ask.
+
+00:05:48.200 --> 00:05:56.119
+Right. So definitely, I would say for everybody who is on
+
+00:05:56.120 --> 00:06:01.959
+this conference, the international edition is the right
+
+00:06:01.960 --> 00:06:11.639
+choice. In this book, I take some aggressive stances against
+
+00:06:11.640 --> 00:06:19.279
+intellectual property and I link that specifically to the
+
+00:06:19.280 --> 00:06:27.439
+American culture. So there are pieces in the book where the
+
+00:06:27.440 --> 00:06:36.399
+typical American audience may be offended. And if your skin
+
+00:06:36.400 --> 00:06:43.279
+is thick enough to deal with what I consider reasonable
+
+00:06:43.280 --> 00:06:48.319
+criticism, then the International Edition is definitely
+
+00:06:48.320 --> 00:06:54.439
+the better choice. Right. So yeah, I believe you also
+
+00:06:54.440 --> 00:06:56.959
+mentioned it. Pretty much exactly the same thing in your
+
+00:06:56.960 --> 00:07:00.239
+talk. So if you need to review, just watch the talk. And I
+
+00:07:00.240 --> 00:07:03.439
+think Mohsen also provides extra information about this.
+
+00:07:03.440 --> 00:07:07.079
+Moving on to the second question. Thank you for this talk.
+
+NOTE Q: Thank you for this talk! How does your perspective interface with works such as Yanis Varoufakis' Technofeudalism?
+
+00:07:07.080 --> 00:07:10.319
+How does your perspective interface with work such as Yanis
+
+00:07:10.320 --> 00:07:14.639
+Varoufakis' Technofeudalism?
+
+00:07:14.640 --> 00:07:24.919
+I haven't read much of that. I think there is a whole lot of
+
+00:07:24.920 --> 00:07:34.199
+global growth and collective understanding towards this
+
+00:07:34.200 --> 00:07:42.479
+notion that the direction we are headed in and by that, I mean
+
+00:07:42.480 --> 00:07:46.879
+American digital ecosystems
+
+00:07:46.880 --> 00:07:53.159
+are dangerous and that we should revisit
+
+00:07:53.160 --> 00:08:03.239
+the entirety of the model and strategy.
+
+00:08:03.240 --> 00:08:10.119
+If the person who asked the question has any additional
+
+00:08:10.120 --> 00:08:16.119
+information, I'll be happy to hear it. Sure. We'll see if the
+
+00:08:16.120 --> 00:08:19.559
+person actually comes back to this. All right. In the
+
+00:08:19.560 --> 00:08:21.979
+meantime, moving on to the next question.
+
+NOTE Q: To what extent do you agree that the introduction of proprietary systems in education creates an environment for exploitation while at the same time diluting the learning value of the curriculum?
+
+00:08:21.980 --> 00:08:22.959
+To what extent do
+
+00:08:22.960 --> 00:08:25.519
+you agree that the introduction of proprietary systems in
+
+00:08:25.520 --> 00:08:29.279
+education creates an environment for exploitation whilst
+
+00:08:29.280 --> 00:08:31.679
+at the same time diluting the learning value of the
+
+00:08:31.680 --> 00:08:34.879
+curriculum? My computing education at school amounted to
+
+00:08:34.880 --> 00:08:38.399
+learning how to use the Microsoft Office suite, i.e. the
+
+00:08:38.400 --> 00:08:44.679
+opposite of lasting open knowledge. Yeah, that's right on
+
+00:08:44.680 --> 00:08:49.719
+the mark. That's right on the mark. So the idea is that
+
+00:08:49.720 --> 00:08:55.919
+teaching and learning should be unrestricted. In the
+
+00:08:55.920 --> 00:09:02.479
+Muslim tradition and in Iranian tradition, we say that
+
+00:09:02.480 --> 00:09:12.919
+passing along the learning is the tax on having learned. So
+
+00:09:12.920 --> 00:09:20.359
+absolutely. I think it makes very little sense for the
+
+00:09:20.360 --> 00:09:27.039
+proprietary Microsoft software to be used as part of
+
+00:09:27.040 --> 00:09:33.519
+education. So the question is right on the mark. Okay,
+
+00:09:33.520 --> 00:09:38.519
+great. Let me just take a note of this. All right, moving on to
+
+00:09:38.520 --> 00:09:40.052
+the next question.
+
+NOTE Q: As a specific example of how "ownership is not clean" ...
+
+00:09:40.053 --> 00:09:43.359
+As a specific example of how ownership is
+
+00:09:43.360 --> 00:09:46.239
+not something clean, look at the Star Trek Picard series.
+
+00:09:46.240 --> 00:09:48.839
+They continuously asked Patrick Stewart to come to do
+
+00:09:48.840 --> 00:09:52.159
+another Star Trek series, but he couldn't because Star Trek
+
+00:09:52.160 --> 00:09:54.959
+changed from what it used to be, at least until they came up
+
+00:09:54.960 --> 00:09:57.999
+with a series that honored what Star Trek used to be. Does
+
+00:09:58.000 --> 00:10:21.839
+this intersect? Let me read this for a moment.
+
+00:10:21.840 --> 00:10:30.599
+Yeah, I am not sure I fully get the point, but. Let me make a
+
+00:10:30.600 --> 00:10:35.959
+point about my criticisms of the FOSS movement
+
+00:10:35.960 --> 00:10:47.399
+in the presentation and in the book. The idea is that we have
+
+00:10:47.400 --> 00:10:53.919
+jumped on the FOSS movement and recognize it as an
+
+00:10:53.920 --> 00:11:02.279
+alternative but we haven't looked deeply enough to see if
+
+00:11:02.280 --> 00:11:07.759
+our own philosophy and movement have problems. The
+
+00:11:07.760 --> 00:11:14.959
+problems that I note is that the FOSS movement does not
+
+00:11:14.960 --> 00:11:21.279
+recognize clearly and explicitly that the entirety of the
+
+00:11:21.280 --> 00:11:30.399
+intellectual property rights regime is flawed. The second
+
+00:11:30.400 --> 00:11:37.239
+piece is that it's only now that we are seeing the FOSS
+
+00:11:37.240 --> 00:11:45.479
+movement is broader than the Western world. The third
+
+00:11:45.480 --> 00:11:54.919
+problem is that the labels of Free Software and Open Source
+
+00:11:54.920 --> 00:12:01.159
+are not necessarily correct. The fourth problem is that we
+
+00:12:01.160 --> 00:12:07.239
+are not paying enough attention to establishing a
+
+00:12:07.240 --> 00:12:09.999
+relationship with society.
+
+00:12:10.000 --> 00:12:16.439
+So there's a whole chapter in the book dedicated to this
+
+00:12:16.440 --> 00:12:23.959
+topic. What I'm not sure about is if I got the point of the
+
+00:12:23.960 --> 00:12:30.279
+question correctly. So again, if the person who asked the
+
+00:12:30.280 --> 00:12:35.679
+question could clarify, I'll be happy to further expand.
+
+00:12:35.680 --> 00:12:40.279
+Okay, considering the time, we only have about one minute to
+
+00:12:40.280 --> 00:12:42.959
+ten seconds until we go. So what we're going to do, as we
+
+00:12:42.960 --> 00:12:45.439
+usually do, Mohsen, is that we're going to move the stream
+
+00:12:45.440 --> 00:12:47.839
+onto the next talk. And if you want to take a little bit of time
+
+00:12:47.840 --> 00:12:51.799
+in this room to answer the question, I'm putting a link to the
+
+00:12:51.800 --> 00:12:56.519
+pad in the BBB chat so you can open it on your end. But as we are
+
+00:12:56.520 --> 00:12:59.319
+still live for 15 more seconds, do you have any last words?
+
+00:12:59.320 --> 00:13:09.039
+Keep up the good work. Those would be my last words, that the
+
+00:13:09.040 --> 00:13:14.239
+Free Software and the Open Source and Emacs are a very valid
+
+00:13:14.240 --> 00:13:24.479
+strategy for inside of IPR resistance. And thank you, Leo
+
+00:13:24.480 --> 00:13:29.719
+and Sacha and the rest of the folks for this wonderful yearly
+
+00:13:29.720 --> 00:13:33.559
+event. Well, thank you so much. And it's always a pleasure to
+
+00:13:33.560 --> 00:13:36.119
+have you. And thank you for your thankings. So we'll be
+
+00:13:36.120 --> 00:13:38.439
+moving to the next talk in 10 seconds. Mohsen, thank you so
+
+00:13:38.440 --> 00:13:47.559
+much. And I'll see you later. Thank you. Bye-bye. Bye.
+
+00:13:47.560 --> 00:13:50.159
+All right. We are off air. So thank you so much, Mohsen. I'll
+
+00:13:50.160 --> 00:13:52.559
+need to get moving to get ready for the next talk. So again,
+
+00:13:52.560 --> 00:13:54.519
+feel free to take the time you need to answer the questions.
+
+00:13:54.520 --> 00:13:56.719
+I'm going to stop sharing my screen because I need to leave.
+
+00:13:56.720 --> 00:13:59.319
+But take all the time you need. And when you're finished, you
+
+00:13:59.320 --> 00:14:04.039
+can just leave the room. OK. All right, bye-bye. Thank you.
+
+00:14:04.040 --> 00:14:23.439
+Great. I see one more person in the room.
+
+00:14:23.440 --> 00:14:35.679
+Hi, John.
+
+00:14:35.680 --> 00:14:38.079
+I was looking at the questions.
+
+00:14:38.080 --> 00:14:46.239
+To see if there is more that I can add. So,
+
+00:14:46.240 --> 00:14:54.919
+through the regard of societal impacts on ethical,
+
+00:14:54.920 --> 00:14:58.439
+philosophical and wider FOSS community. I'm involved in
+
+00:14:58.440 --> 00:15:02.239
+politics in my country, my party is very sympathetic to
+
+00:15:02.240 --> 00:15:05.277
+FOSS ideas and I have public...
+
+NOTE Q: Do you have any recommended reading materials designed for such an audience?
+
+00:15:05.278 --> 00:15:08.039
+Do you have any recommendation
+
+00:15:08.040 --> 00:15:12.359
+to reading materials designed for such an audience? Um,
+
+00:15:12.360 --> 00:15:17.999
+yeah, this is with regard to the last question
+
+00:15:18.000 --> 00:15:24.439
+that's on the etherpad at this moment. The idea is
+
+00:15:24.440 --> 00:15:32.199
+that my own book would be an excellent resource. I'd
+
+00:15:32.200 --> 00:15:39.279
+say the bibliography in the book contains various
+
+00:15:39.280 --> 00:15:43.039
+other pointers that could be quite useful.
+
+00:15:43.040 --> 00:15:55.399
+I'm reading again.
+
+00:15:55.400 --> 00:15:57.799
+Yeah.
+
+00:15:57.800 --> 00:16:20.159
+Very good. If there are no other questions,
+
+00:16:20.160 --> 00:16:31.839
+I think I'm going to consider this a day and move on.
+
+00:16:31.840 --> 00:16:43.760
+Thank you.
diff --git a/2024/captions/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--main--chapters.vtt b/2024/captions/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--main--chapters.vtt
new file mode 100644
index 00000000..54741ebf
--- /dev/null
+++ b/2024/captions/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--main--chapters.vtt
@@ -0,0 +1,47 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:05:17.450
+Introduction
+
+00:05:17.550 --> 00:08:02.717
+Blee: A Bigger and Different Vision for Emacs
+
+00:08:02.817 --> 00:15:49.750
+The ``Nature of Polyexistentials'' Book
+
+00:15:49.850 --> 00:20:04.500
+Governance of Polyexistentials
+
+00:20:04.600 --> 00:25:59.983
+Proper Governance of Manner-of-Existence of Software
+
+00:26:00.083 --> 00:26:24.983
+Blee Overview
+
+00:26:25.083 --> 00:33:27.567
+Bootstrapping: From Fresh Debian to Raw-BISOS and Raw-Blee
+
+00:33:27.667 --> 00:35:13.950
+Some Blee Concepts
+
+00:35:14.050 --> 00:35:59.050
+Blee Org Dynamic Blocks --- Everywhere
+
+00:35:59.150 --> 00:37:51.750
+COMEEGA -- Collaborative Org-Mode Enhanced Emacs Generalized Authorship
+
+00:37:51.850 --> 00:38:12.133
+Blee Panels: Active Org-Mode Universal Self-Documentation
+
+00:38:12.233 --> 00:41:04.850
+Some BISOS and Blee Capability Bundles
+
+00:41:04.950 --> 00:42:54.167
+Next Steps (2024)
+
+00:42:54.267 --> 00:43:38.333
+Economics and Business Dimmensions of ByStar Digital Ecosystem
+
+00:43:38.433 --> 00:45:25.632
+Pointers for Digging Deeper
diff --git a/2024/captions/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--main.vtt b/2024/captions/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--main.vtt
new file mode 100644
index 00000000..3da4b409
--- /dev/null
+++ b/2024/captions/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--main.vtt
@@ -0,0 +1,2395 @@
+WEBVTT captioned by mohsen
+
+00:00:03.659 --> 00:00:08.399
+Greetings. Salaam. This is Mohsen Banan.
+
+00:00:08.400 --> 00:00:11.479
+I am a software and internet engineer.
+
+00:00:11.480 --> 00:00:16.359
+The title of this presentation is "About Blee".
+
+00:00:16.360 --> 00:00:17.259
+Blee stands for
+
+00:00:17.260 --> 00:00:22.439
+ByStar Libre-Halaal Emacs Environment.
+
+00:00:22.440 --> 00:00:24.319
+In this presentation I want to look
+
+00:00:24.320 --> 00:00:28.319
+at Emacs as a primary ingredient for the usage
+
+00:00:28.320 --> 00:00:32.599
+environment of an autonomy and morality
+
+00:00:32.600 --> 00:00:35.799
+directed digital ecosystem.
+
+00:00:35.800 --> 00:00:38.279
+My focus here is not just Emacs.
+
+00:00:38.280 --> 00:00:42.319
+This is about augmenting Emacs in the context of
+
+00:00:42.320 --> 00:00:46.679
+our own specific digital ecosystem.
+
+00:00:46.716 --> 00:00:48.919
+This presentation is part theoretical
+
+00:00:48.920 --> 00:00:50.719
+and part practical.
+
+00:00:50.720 --> 00:00:52.999
+I spend about half of my time on the
+
+00:00:53.000 --> 00:00:54.999
+theory and the bigger picture.
+
+00:00:55.000 --> 00:01:01.439
+The second half is hands on and Emacs centric.
+
+00:01:01.440 --> 00:01:04.959
+Emacs has long been recognized as the ultimate
+
+00:01:04.960 --> 00:01:09.039
+integration platform, enabling the creation of an
+
+00:01:09.040 --> 00:01:12.819
+unparalleled user environment.
+
+00:01:12.820 --> 00:01:16.239
+Tomohiro is right on the mark when he says:
+
+00:01:16.240 --> 00:01:19.239
+"The reason why Emacs platform is good
+
+00:01:19.240 --> 00:01:21.919
+is that it cooperates with OS,
+
+00:01:21.920 --> 00:01:24.999
+not because it is good by itself."
+
+00:01:25.000 --> 00:01:27.519
+But this recognition has often been in the
+
+00:01:27.520 --> 00:01:31.679
+context of a generic and abstract "OS"
+
+00:01:31.680 --> 00:01:36.459
+So, I am updating MATSUYAMA's observation as:
+
+00:01:36.460 --> 00:01:39.759
+"The reason why Emacs platform is good is that
+
+00:01:39.760 --> 00:01:43.799
+it facilitates creation of specific integrated
+
+00:01:43.800 --> 00:01:48.279
+usage environments like Blee, which cooperate
+
+00:01:48.280 --> 00:01:51.359
+with Debian and BISOS as part of
+
+00:01:51.360 --> 00:01:57.319
+the Libre-Halaal ByStar Digital Ecosystem."
+
+00:01:57.320 --> 00:02:01.959
+Emacs is an especially good choice as the universal core of
+
+00:02:01.960 --> 00:02:07.839
+user environments of a digital ecosystem, because it has an
+
+00:02:07.840 --> 00:02:12.159
+incredibly powerful display engine, and an incredibly
+
+00:02:12.160 --> 00:02:16.559
+powerful Elisp engine, and an incredibly powerful input
+
+00:02:16.560 --> 00:02:20.959
+methods engine, and an incredibly powerful common agents
+
+00:02:20.960 --> 00:02:26.639
+paradigm, and a very rich set of mature and convivial idioms
+
+00:02:26.640 --> 00:02:31.159
+and means for absorption and integration of external
+
+00:02:31.160 --> 00:02:35.879
+software services continuum capabilities.
+
+00:02:35.880 --> 00:02:39.999
+In our model, we first augment Emacs with a set
+
+00:02:40.000 --> 00:02:45.079
+of cohesive elisp capabilities and create Blee --
+
+00:02:45.080 --> 00:02:48.959
+ByStar Libre-Halaal Emacs Environment.
+
+00:02:48.960 --> 00:02:52.439
+We then further enhance Blee with an integrated
+
+00:02:52.440 --> 00:02:57.759
+framework on top of Debian called BISOS ---
+
+00:02:57.760 --> 00:03:02.079
+ByStar Internet Services Operating System.
+
+00:03:02.080 --> 00:03:04.959
+Blee is inherently intertwined
+
+00:03:04.960 --> 00:03:07.559
+and integrated with BISOS.
+
+00:03:07.560 --> 00:03:12.159
+This combination of the universal BISOS and Blee
+
+00:03:12.160 --> 00:03:15.719
+then forms a foundation for creation of an
+
+00:03:15.720 --> 00:03:19.879
+autonomy directed digital ecosystem that we call
+
+00:03:19.880 --> 00:03:23.639
+ByStar.
+
+00:03:23.640 --> 00:03:26.879
+Over the past two decades, I have been working on
+
+00:03:26.880 --> 00:03:30.799
+creating a comprehensive, interdisciplinary, and
+
+00:03:30.800 --> 00:03:34.239
+non-proprietary digital ecosystem.
+
+00:03:34.240 --> 00:03:36.359
+We call it ByStar (By*).
+
+00:03:36.360 --> 00:03:38.439
+ByStar challenges the existing
+
+00:03:38.440 --> 00:03:41.239
+proprietary American digital ecosystem
+
+00:03:41.240 --> 00:03:46.119
+while operating concurrently alongside it.
+
+00:03:46.120 --> 00:03:50.079
+ByStar's primary offerings are tangible autonomy
+
+00:03:50.472 --> 00:03:54.959
+and genuine privacy on a very large scale.
+
+00:03:54.960 --> 00:03:59.119
+By* is about redecentralization of internet
+
+00:03:59.120 --> 00:04:01.759
+application services.
+
+00:04:01.760 --> 00:04:06.839
+The * in ByStar stands for Unix's globing symbol.
+
+00:04:06.840 --> 00:04:11.919
+Signifying that our scope is everything.
+
+00:04:11.920 --> 00:04:16.279
+Blee is a bigger and different vision for Emacs.
+
+00:04:16.280 --> 00:04:17.799
+Let's compare and contrast
+
+00:04:17.800 --> 00:04:19.839
+what I am proposing against
+
+00:04:19.840 --> 00:04:24.499
+common current practices of the Emacs culture.
+
+00:04:24.500 --> 00:04:28.079
+Please permit me to be slightly cynical.
+
+00:04:28.080 --> 00:04:30.119
+Much of what we have been seeing in the
+
+00:04:30.120 --> 00:04:33.879
+Emacs culture and in emacsConf
+
+00:04:33.880 --> 00:04:35.759
+can be characterized as
+
+00:04:35.760 --> 00:04:38.719
+stories of tunnel vision engineers
+
+00:04:38.720 --> 00:04:40.559
+scratching various itches
+
+00:04:40.560 --> 00:04:43.879
+by integrating various capabilities
+
+00:04:43.880 --> 00:04:47.719
+and providing DIY recipes.
+
+00:04:47.720 --> 00:04:50.039
+Emacs and Lisp are so powerful that
+
+00:04:50.040 --> 00:04:51.839
+people have come up
+
+00:04:51.840 --> 00:04:53.759
+with catch phrases like the
+
+00:04:53.760 --> 00:04:56.439
+"Curse of Lisp".
+
+00:04:56.440 --> 00:04:57.559
+The curse is that
+
+00:04:57.560 --> 00:05:01.579
+the power of Lisp breeds individualism.
+
+00:05:01.580 --> 00:05:04.599
+Because you can be so powerful alone,
+
+00:05:04.600 --> 00:05:06.719
+you work longer alone.
+
+00:05:06.720 --> 00:05:08.359
+Because it is easy to spin
+
+00:05:08.360 --> 00:05:10.959
+your own whatever library,
+
+00:05:10.973 --> 00:05:13.219
+many people do.
+
+00:05:13.220 --> 00:05:15.679
+I am suggesting that we should raise the bar.
+
+00:05:15.680 --> 00:05:19.359
+Let's cultivate Emacs in the context
+
+00:05:19.360 --> 00:05:22.859
+of our own digital ecosystem instead.
+
+00:05:22.860 --> 00:05:26.839
+Do more and do more outside of Emacs and
+
+00:05:26.840 --> 00:05:29.599
+recognize that a well integrated
+
+00:05:29.600 --> 00:05:35.599
+smaller Emacs leads to a better usage environment.
+
+00:05:35.600 --> 00:05:38.999
+Broadly speaking, digital ecosystems are viewed
+
+00:05:39.000 --> 00:05:41.799
+as consisting of 4 parts.
+
+00:05:41.800 --> 00:05:45.559
+Ideology, Software, Services and Content.
+
+00:05:45.560 --> 00:05:49.519
+Software, Services and Content are polyexistentials
+
+00:05:49.520 --> 00:05:53.119
+and can be analyzed from 3 different aspects:
+
+00:05:53.120 --> 00:05:57.279
+Functionality, Usage and Manner-of-Existence.
+
+00:05:57.280 --> 00:06:00.559
+By "manner-of-existence" of polyexistentials
+
+00:06:00.560 --> 00:06:03.119
+we mean everything relating to how the
+
+00:06:03.120 --> 00:06:06.479
+polyexistential exists within society.
+
+00:06:06.480 --> 00:06:08.879
+This includes for example,
+
+00:06:08.880 --> 00:06:12.899
+are polyexistentials internally transparent?
+
+00:06:12.900 --> 00:06:16.679
+Societal ideology determines manner-of-existence
+
+00:06:16.680 --> 00:06:19.399
+of Software, Services and Content.
+
+00:06:19.400 --> 00:06:22.799
+And in turn, manner-of-existence of Software,
+
+00:06:22.800 --> 00:06:26.039
+Services and Content impacts society.
+
+00:06:26.574 --> 00:06:28.199
+In the American model,
+
+00:06:28.200 --> 00:06:31.719
+loss of privacy and autonomy are direct
+
+00:06:31.720 --> 00:06:36.319
+consequences of the IPR regime.
+
+00:06:36.320 --> 00:06:39.679
+Based on this characterization, let's consider
+
+00:06:39.680 --> 00:06:42.499
+these three Digital Ecosystems:
+
+00:06:42.500 --> 00:06:45.879
+the Proprietary American Digital Ecosystem,
+
+00:06:45.880 --> 00:06:48.479
+FOSS and ByStar.
+
+00:06:48.480 --> 00:06:51.719
+The 5 big American proprietary tech companies,
+
+00:06:51.720 --> 00:06:54.639
+Google, Microsoft, Apple, Facebook and Amazon
+
+00:06:54.640 --> 00:06:59.119
+have created 5 competing enclaves as mostly
+
+00:06:59.120 --> 00:07:02.239
+separate and isolated digital ecosystem.
+
+00:07:03.395 --> 00:07:06.159
+In this slide, I am focusing on the first 3
+
+00:07:06.160 --> 00:07:08.399
+and each of their OSs,
+
+00:07:08.400 --> 00:07:09.999
+their usage environments
+
+00:07:10.000 --> 00:07:12.639
+and their clouds.
+
+00:07:12.640 --> 00:07:15.759
+Let's clearly recognize that the economic model
+
+00:07:15.760 --> 00:07:18.599
+of these proprietary digital ecosystems is
+
+00:07:19.075 --> 00:07:20.919
+"Surveillance Capitalism".
+
+00:07:21.695 --> 00:07:23.279
+Now, let's focus on
+
+00:07:23.280 --> 00:07:24.919
+the right side of this picture.
+
+00:07:24.920 --> 00:07:27.559
+On the non-proprietary side,
+
+00:07:27.560 --> 00:07:29.119
+based on the FOSS model,
+
+00:07:29.120 --> 00:07:32.079
+we have ended up with lots of components.
+
+00:07:32.080 --> 00:07:34.839
+We have Debian as a platform,
+
+00:07:34.840 --> 00:07:35.759
+we have Emacs as
+
+00:07:35.760 --> 00:07:38.799
+an editor-centered usage environment.
+
+00:07:38.890 --> 00:07:42.039
+But on the non-proprietary side we don't have
+
+00:07:42.040 --> 00:07:43.079
+anything that can
+
+00:07:43.080 --> 00:07:46.759
+reasonably be considered a digital ecosystem.
+
+00:07:46.760 --> 00:07:52.139
+I mean, the services aspect is missing.
+
+00:07:52.140 --> 00:07:54.519
+ByStar aspires to be
+
+00:07:54.520 --> 00:07:58.679
+a complete non-proprietary digital ecosystem.
+
+00:07:58.680 --> 00:08:01.639
+We were all born into the belief system of
+
+00:08:01.640 --> 00:08:03.679
+intellectual property rights,
+
+00:08:03.680 --> 00:08:07.319
+making it exceedingly difficult for us
+
+00:08:07.320 --> 00:08:08.719
+to even imagine that this
+
+00:08:08.720 --> 00:08:12.199
+foundational ownership framework
+
+00:08:12.200 --> 00:08:14.599
+could be fundamentally flawed.
+
+00:08:15.759 --> 00:08:19.479
+I am delighted to announce the availability of my
+
+00:08:19.480 --> 00:08:20.919
+recent book,
+
+00:08:20.920 --> 00:08:24.099
+"Nature of Polyexistentials".
+
+00:08:24.100 --> 00:08:26.239
+The full title of my book is:
+
+00:08:26.743 --> 00:08:28.759
+Nature of Polyexistentials
+
+00:08:28.760 --> 00:08:31.039
+Basis for Abolishment of the
+
+00:08:31.040 --> 00:08:35.459
+Western Intellectual Property Rights Regime
+
+00:08:35.460 --> 00:08:36.999
+And Introduction of
+
+00:08:37.000 --> 00:08:42.479
+the Libre-Halaal ByStar Digital Ecosystem.
+
+00:08:42.480 --> 00:08:45.239
+Knowledge, know-how, uses of know-how, ideas,
+
+00:08:45.240 --> 00:08:48.999
+formulas, software and information are inherently
+
+00:08:49.000 --> 00:08:50.839
+non-scarce.
+
+00:08:50.840 --> 00:08:53.679
+They are polyexistentials.
+
+00:08:53.680 --> 00:08:58.599
+Unlike monoexistentials which exist in singular,
+
+00:08:58.600 --> 00:09:03.499
+polyexistentials naturally exist in multiples.
+
+00:09:03.500 --> 00:09:06.839
+What is abundant in nature is being made
+
+00:09:06.840 --> 00:09:10.639
+artificially scarce through man-made ownership
+
+00:09:10.640 --> 00:09:14.039
+rules called copyright and patents.
+
+00:09:15.282 --> 00:09:18.299
+Let me provide a brief overview.
+
+00:09:18.300 --> 00:09:20.959
+This book is divided into five parts,
+
+00:09:20.960 --> 00:09:24.399
+each representing a layer of interest to you
+
+00:09:24.400 --> 00:09:27.559
+and to our societal policymakers.
+
+00:09:28.351 --> 00:09:31.039
+Part I, the philosophical layer
+
+00:09:31.040 --> 00:09:34.479
+delves into the concept of polyexistence.
+
+00:09:34.480 --> 00:09:37.479
+In this part, I introduce,
+
+00:09:37.480 --> 00:09:39.039
+for the very first time,
+
+00:09:39.040 --> 00:09:43.839
+the concepts and terminology of "polyexistentials".
+
+00:09:43.840 --> 00:09:47.479
+The topic of restriction of polyexistentals
+
+00:09:47.480 --> 00:09:50.799
+and the Western IPR is one and the same.
+
+00:09:50.800 --> 00:09:55.359
+Comprehending polyexistence invalidates
+
+00:09:55.360 --> 00:09:56.999
+the Western IPR model.
+
+00:09:57.633 --> 00:10:00.839
+We are living inside of an ownership fallacy.
+
+00:10:00.840 --> 00:10:05.319
+The Western IPR regime is a sin of our times.
+
+00:10:06.147 --> 00:10:09.559
+Part II is the pathology layer.
+
+00:10:09.560 --> 00:10:12.959
+Over the course of the past two centuries,
+
+00:10:12.960 --> 00:10:16.599
+numerous theories have been proposed to justify
+
+00:10:16.600 --> 00:10:18.679
+intellectual property.
+
+00:10:18.680 --> 00:10:20.759
+In this Part, I offer
+
+00:10:20.760 --> 00:10:23.839
+my perspective on the weaknesses inherent
+
+00:10:23.840 --> 00:10:26.699
+in each of these theories.
+
+00:10:26.700 --> 00:10:29.119
+Part III, the ethics layer,
+
+00:10:29.120 --> 00:10:31.919
+focuses on contours of cures.
+
+00:10:32.500 --> 00:10:35.220
+Having dismissed the Western intellectual
+
+00:10:35.221 --> 00:10:38.640
+property rights regime as an erroneous
+
+00:10:38.641 --> 00:10:41.999
+governance model for polyexistentials,
+
+00:10:42.000 --> 00:10:43.439
+I propose the
+
+00:10:43.440 --> 00:10:48.279
+Libre-Halaal model of governance of polyexistentials
+
+00:10:48.280 --> 00:10:53.479
+towards facilitating conviviality of tools.
+
+00:10:53.480 --> 00:10:57.199
+Part IV, the engineering layer, introduces the
+
+00:10:57.200 --> 00:11:00.199
+Libre-Halaal ByStar Digital Ecosystem.
+
+00:11:00.200 --> 00:11:04.319
+as an ethical alternative to the prevailing
+
+00:11:04.320 --> 00:11:07.519
+proprietary American digital ecosystem.
+
+00:11:08.071 --> 00:11:11.159
+Part V, the sociology layer,
+
+00:11:11.160 --> 00:11:13.799
+delves into formulation of
+
+00:11:13.800 --> 00:11:17.559
+Libre-Halaal oriented societal policies.
+
+00:11:17.560 --> 00:11:21.679
+It is evident that the abolition of intellectual
+
+00:11:21.680 --> 00:11:25.279
+property carries significant consequences.
+
+00:11:25.280 --> 00:11:29.119
+In this Part, I present my thoughts on this
+
+00:11:29.120 --> 00:11:33.079
+particular dimension for Eastern societies.
+
+00:11:33.080 --> 00:11:37.439
+For Western societies I confine myself to
+
+00:11:37.440 --> 00:11:41.499
+inside of IPR strategies.
+
+00:11:41.500 --> 00:11:44.879
+You can think of this book as being in two volumes.
+
+00:11:44.880 --> 00:11:48.979
+Our focus is Blee in Volume II.
+
+00:11:48.980 --> 00:11:52.879
+But as our blueprint needs to be interdisciplinary,
+
+00:11:52.880 --> 00:11:56.839
+there are some key concepts of Volume I that I'll
+
+00:11:56.840 --> 00:11:59.199
+briefly discuss here.
+
+00:12:00.359 --> 00:12:03.599
+Volume I deals with the general concept of
+
+00:12:03.600 --> 00:12:07.599
+polyexistence and invalidity of IPR.
+
+00:12:07.600 --> 00:12:13.439
+In Chapter 11, I introduce the very sensitive and potent
+
+00:12:13.440 --> 00:12:17.779
+vocabulary of Halaal and Libre-Halaal.
+
+00:12:17.780 --> 00:12:20.919
+Volume II is backed by software and internet
+
+00:12:20.920 --> 00:12:21.839
+services.
+
+00:12:22.602 --> 00:12:23.799
+The contents of this book
+
+00:12:23.800 --> 00:12:26.319
+belong to all of humanity
+
+00:12:26.320 --> 00:12:29.839
+and verbatim copying of it is unrestricted.
+
+00:12:29.840 --> 00:12:33.199
+If you want to read it, this book is yours.
+
+00:12:33.681 --> 00:12:36.919
+The "Nature of Polyexistentials" book is
+
+00:12:36.920 --> 00:12:41.499
+available both online and in print.
+
+00:12:41.500 --> 00:12:44.159
+This book is available as two editions.
+
+00:12:44.160 --> 00:12:47.519
+The US Edition and the International edition.
+
+00:12:48.082 --> 00:12:50.679
+The US Edition is written with
+
+00:12:50.680 --> 00:12:54.279
+a slightly milder Western unfriendly tone,
+
+00:12:54.280 --> 00:12:57.159
+while the International Edition
+
+00:12:57.160 --> 00:13:01.399
+includes additional original content in Farsi.
+
+00:13:02.324 --> 00:13:05.839
+I consider the International Edition to be the
+
+00:13:05.840 --> 00:13:07.159
+authoritative version.
+
+00:13:07.160 --> 00:13:09.959
+However, many readers in
+
+00:13:09.960 --> 00:13:12.239
+the US and Western countries
+
+00:13:12.240 --> 00:13:14.319
+may prefer the US Edition.
+
+00:13:15.614 --> 00:13:18.719
+I maintain separate Git repositories
+
+00:13:18.720 --> 00:13:21.559
+for each edition on GitHub.
+
+00:13:21.560 --> 00:13:28.639
+US Edition is at bxplpc/120033 and
+
+00:13:28.640 --> 00:13:36.139
+International Edition is at bxplpc/120074
+
+00:13:36.140 --> 00:13:40.399
+Cloning these repositories will give you access
+
+00:13:40.400 --> 00:13:45.559
+to the book in PDF format (suitable for both A4
+
+00:13:45.560 --> 00:13:50.639
+and US Letter printing) and in EPUB format.
+
+00:13:50.640 --> 00:13:54.399
+Alternatively, the content can be downloaded
+
+00:13:54.400 --> 00:13:58.639
+directly from your browser without needing to
+
+00:13:58.640 --> 00:14:00.159
+clone the repositories.
+
+00:14:01.948 --> 00:14:05.199
+To ensure broader online availability and
+
+00:14:05.200 --> 00:14:09.279
+stability, I have also published the book on
+
+00:14:09.280 --> 00:14:11.879
+Zenodo, complete with a
+
+00:14:11.880 --> 00:14:16.399
+DOI (Digital Object Identifier).
+
+00:14:16.400 --> 00:14:20.399
+You can download both the A4 and
+
+00:14:20.400 --> 00:14:24.359
+8.5 x 11 PDFs from there as well.
+
+00:14:25.290 --> 00:14:28.919
+The book is also available in print on Amazon and
+
+00:14:28.920 --> 00:14:30.959
+at most major bookstores in
+
+00:14:30.960 --> 00:14:34.139
+the US and Western regions.
+
+00:14:34.140 --> 00:14:36.319
+The ISBNs for both editions
+
+00:14:36.320 --> 00:14:38.899
+are included in this slide.
+
+00:14:38.900 --> 00:14:41.079
+Additionally, I have published
+
+00:14:41.080 --> 00:14:45.519
+this book in Iran through Jangal Publishers.
+
+00:14:45.520 --> 00:14:47.799
+I did not write this book for profit.
+
+00:14:47.800 --> 00:14:50.079
+My aim is to share my thoughts
+
+00:14:50.080 --> 00:14:52.479
+and encourage readers to
+
+00:14:52.480 --> 00:14:54.799
+engage with my views and ideas.
+
+00:14:54.800 --> 00:14:57.239
+Your feedback is welcome, and
+
+00:14:57.240 --> 00:14:59.279
+I am genuinely interested in
+
+00:14:59.280 --> 00:15:02.039
+hearing your perspectives.
+
+00:15:02.040 --> 00:15:04.999
+In Western markets, I have priced the print
+
+00:15:05.000 --> 00:15:09.219
+edition somewhat above production costs.
+
+00:15:09.220 --> 00:15:10.919
+If you find value in the
+
+00:15:10.920 --> 00:15:13.399
+book and the ByStar project,
+
+00:15:13.400 --> 00:15:16.839
+purchasing a copy will help support my work.
+
+00:15:16.840 --> 00:15:19.759
+Thanks in advance for your support.
+
+00:15:22.315 --> 00:15:24.199
+And here are the same links
+
+00:15:24.200 --> 00:15:26.899
+as a native Reveal slide.
+
+00:15:26.900 --> 00:15:29.519
+If instead of a video, you are viewing this
+
+00:15:29.520 --> 00:15:32.479
+presentation as a Reveal web page,
+
+00:15:32.480 --> 00:15:37.679
+you can just click on the pointers and URLs.
+
+00:15:37.680 --> 00:15:41.519
+The concept of polyexistentials has not appeared
+
+00:15:41.520 --> 00:15:46.339
+in prior discussions of validity of IPR.
+
+00:15:46.340 --> 00:15:49.919
+Once you start thinking in terms of monoexistence
+
+00:15:49.920 --> 00:15:53.759
+and polyexistence, the recognition of
+
+00:15:53.760 --> 00:15:58.079
+illegitimacy of Western IPR becomes very simple.
+
+00:15:58.949 --> 00:16:03.059
+I want to very quickly give you a taste of that.
+
+00:16:03.060 --> 00:16:05.559
+You can of course dig deeper in the book.
+
+00:16:06.495 --> 00:16:10.619
+Existence and possession are aspects of nature.
+
+00:16:10.620 --> 00:16:13.779
+Ownership are man-made rules.
+
+00:16:13.780 --> 00:16:16.759
+All material objects exist in singular
+
+00:16:16.760 --> 00:16:18.879
+and are monoexistentials.
+
+00:16:19.481 --> 00:16:22.439
+For monoexistentials, things are simple.
+
+00:16:22.971 --> 00:16:25.519
+Monoexsitentials, say paper,
+
+00:16:25.520 --> 00:16:27.599
+exists in singular.
+
+00:16:27.600 --> 00:16:31.319
+It naturally has a single possessor.
+
+00:16:31.776 --> 00:16:35.079
+A single owner can be assigned to it
+
+00:16:35.080 --> 00:16:40.579
+which then makes that single possession lawful.
+
+00:16:40.580 --> 00:16:45.199
+Polyexistentials naturally exist in multiples.
+
+00:16:45.200 --> 00:16:48.279
+Much of our world is actually a mixture of
+
+00:16:48.280 --> 00:16:51.239
+monoexistentials and polyexistentials,
+
+00:16:51.240 --> 00:16:57.039
+which we call mixed-existentials.
+
+00:16:57.040 --> 00:17:00.999
+Possession of polyexistentials is naturally
+
+00:17:01.000 --> 00:17:04.159
+many-to-many. Without any conflict,
+
+00:17:04.160 --> 00:17:07.879
+polyexistentials can have many possessors.
+
+00:17:07.880 --> 00:17:13.639
+Polyexistentials are inherently Non-Rivalry.
+
+00:17:13.640 --> 00:17:17.519
+The requirement for ownership to be in harmony
+
+00:17:17.520 --> 00:17:20.839
+with the nature of possession and existence is
+
+00:17:20.840 --> 00:17:26.079
+violated by the Western IPR regime which assigns
+
+00:17:26.080 --> 00:17:28.639
+a single owner to what exists
+
+00:17:28.640 --> 00:17:32.339
+and is possessed in multiples.
+
+00:17:32.340 --> 00:17:33.719
+The end result is
+
+00:17:33.720 --> 00:17:37.139
+creation of Artificial Scarcity.
+
+00:17:37.140 --> 00:17:39.599
+Ramification of ownership mistakes
+
+00:17:39.600 --> 00:17:41.679
+are usually catastrophic.
+
+00:17:41.680 --> 00:17:45.759
+Consider the previous Western and American
+
+00:17:45.760 --> 00:17:50.079
+ownership mistake -- that of American Slavery --
+
+00:17:50.080 --> 00:17:54.399
+ownership of Africans by Americans and Europeans.
+
+00:17:55.000 --> 00:17:56.639
+See Chapter 7 -
+
+00:17:56.640 --> 00:18:00.319
+"Western Slavery and the Western IPR Regime"
+
+00:18:00.320 --> 00:18:02.959
+of the book for some parallels
+
+00:18:02.960 --> 00:18:04.479
+between these mistakes.
+
+00:18:04.480 --> 00:18:09.399
+This time with the Western IPR ownership mistake
+
+00:18:09.400 --> 00:18:13.779
+all of humanity is in danger.
+
+00:18:13.780 --> 00:18:15.559
+So, how are we to
+
+00:18:15.560 --> 00:18:18.739
+correct this catastrophic mistake?
+
+00:18:18.740 --> 00:18:21.679
+The strategies of Public Licenses and
+
+00:18:21.680 --> 00:18:24.679
+FOSS are not sufficient.
+
+00:18:24.680 --> 00:18:26.679
+hese are minor band-aids.
+
+00:18:26.680 --> 00:18:28.639
+We need to do a lot more.
+
+00:18:28.640 --> 00:18:31.719
+We need to understand what are we going to
+
+00:18:31.720 --> 00:18:36.279
+replace the mistaken Western IPR regime with.
+
+00:18:36.280 --> 00:18:37.559
+My answer is:
+
+00:18:37.560 --> 00:18:41.359
+"Libre-Halaal Governance of Polyexistentials".
+
+00:18:41.360 --> 00:18:44.479
+Much of my book revolves around that.
+
+00:18:44.480 --> 00:18:47.879
+We need to fully reject ownership of
+
+00:18:47.880 --> 00:18:52.119
+polyexistentals and replace it with attribution
+
+00:18:52.120 --> 00:18:55.359
+machinaries towards just rewards.
+
+00:18:56.090 --> 00:19:00.879
+We need to abolish the "Artificial Scarcity" of
+
+00:19:00.880 --> 00:19:04.039
+polyexistentials that the Western IPR regime
+
+00:19:04.040 --> 00:19:06.799
+has created and restore
+
+00:19:06.800 --> 00:19:10.079
+polyexistentals back to their natural state,
+
+00:19:10.080 --> 00:19:16.199
+that of "Non-Rivalrous Public Goods".
+
+00:19:16.940 --> 00:19:20.119
+By now many Westerners and many West-Toxicated
+
+00:19:20.120 --> 00:19:24.039
+are thinking: these are empty slogans that are
+
+00:19:24.040 --> 00:19:24.999
+going no where.
+
+00:19:25.000 --> 00:19:26.279
+And they are right.
+
+00:19:26.280 --> 00:19:28.519
+Copyright and Patents are
+
+00:19:28.520 --> 00:19:30.679
+fully entrenched in the West.
+
+00:19:30.680 --> 00:19:33.319
+But what about the rest of the world,
+
+00:19:33.320 --> 00:19:34.519
+what about the
+
+00:19:34.520 --> 00:19:37.559
+Chinese, the Iranians, Brazilians, Cubans
+
+00:19:37.560 --> 00:19:39.239
+and the rest.
+
+00:19:39.240 --> 00:19:41.239
+The Intellectual Property Rights
+
+00:19:41.240 --> 00:19:43.879
+regime is not universal.
+
+00:19:43.880 --> 00:19:47.319
+There is more to the World than the West.
+
+00:19:47.320 --> 00:19:50.759
+What if the WTO was to be recognized
+
+00:19:50.760 --> 00:19:51.879
+for what it is:
+
+00:19:52.320 --> 00:19:56.119
+the Western Trade Organization?
+
+00:19:56.120 --> 00:19:58.879
+Thus far, I have been discussing the nature of
+
+00:19:58.880 --> 00:20:04.519
+all polyexistentials -- any formula in any form.
+
+00:20:04.520 --> 00:20:07.439
+Next, I want to turn our attention to
+
+00:20:07.440 --> 00:20:11.279
+digitals in general and Software in particular.
+
+00:20:12.480 --> 00:20:13.359
+Software is a
+
+00:20:13.360 --> 00:20:16.159
+very special form of polyexistentials.
+
+00:20:16.160 --> 00:20:18.719
+Software is immediately useful.
+
+00:20:18.720 --> 00:20:21.119
+Software produces tools.
+
+00:20:21.120 --> 00:20:25.399
+Digitals as text, music, video, etc.
+
+00:20:25.400 --> 00:20:28.719
+are pure forms of polyexistentials
+
+00:20:28.720 --> 00:20:30.799
+that are controlled by software.
+
+00:20:31.320 --> 00:20:35.679
+As developers we know well that we can best
+
+00:20:35.680 --> 00:20:38.759
+produce good software through collaboration.
+
+00:20:38.760 --> 00:20:41.559
+In that collaborative model,
+
+00:20:41.560 --> 00:20:45.879
+the software itself performs a collaborative role.
+
+00:20:45.880 --> 00:20:50.359
+Software functions as a vessel for accumulation
+
+00:20:50.360 --> 00:20:53.759
+of our expert component contributions.
+
+00:20:54.560 --> 00:20:57.679
+The Western IPR model cultivates
+
+00:20:57.680 --> 00:21:00.919
+"Artificial Scarcities" and "competition",
+
+00:21:00.920 --> 00:21:04.279
+but software developers instinctly
+
+00:21:04.280 --> 00:21:07.039
+recognized the superiority of
+
+00:21:07.040 --> 00:21:10.439
+the natural collaborative model.
+
+00:21:10.440 --> 00:21:14.119
+Through Public Licenses, us software developers,
+
+00:21:14.120 --> 00:21:18.679
+have done a jujitsu on the IPR model and have
+
+00:21:19.230 --> 00:21:22.719
+created a collaborative framework inside of the
+
+00:21:22.720 --> 00:21:25.919
+copyright model. Based on that,
+
+00:21:25.920 --> 00:21:27.719
+Natural Public Goods
+
+00:21:27.720 --> 00:21:31.679
+have defeated Artificial Scarcity.
+
+00:21:31.680 --> 00:21:34.479
+Our success with software is proof that the
+
+00:21:34.480 --> 00:21:38.559
+entirety of the Western IPR regime is flawed.
+
+00:21:40.240 --> 00:21:44.279
+As a profession, us Software Engineers, need to
+
+00:21:44.280 --> 00:21:47.379
+create a relationship with society.
+
+00:21:47.380 --> 00:21:50.519
+We need to demand for societal rules
+
+00:21:50.520 --> 00:21:53.599
+which establish proper manner-of-existence
+
+00:21:53.600 --> 00:21:56.999
+of software and internet application services.
+
+00:21:57.000 --> 00:21:59.359
+In return, based on that,
+
+00:21:59.360 --> 00:22:03.199
+we should fulfill our guardianship role and make
+
+00:22:03.200 --> 00:22:07.799
+sure that autonomy and privacy are preserved and
+
+00:22:07.800 --> 00:22:11.759
+that practiced digital ecosystems are healthy.
+
+00:22:11.760 --> 00:22:15.239
+To get there we need to come up with the right
+
+00:22:15.240 --> 00:22:18.079
+label that represents the proper
+
+00:22:18.080 --> 00:22:20.939
+manner-of-existence of software.
+
+00:22:20.940 --> 00:22:22.999
+Thus far, two labels
+
+00:22:23.000 --> 00:22:24.399
+have appeared on the scene:
+
+00:22:24.400 --> 00:22:28.159
+Free Software and Open Source.
+
+00:22:28.160 --> 00:22:32.199
+I am saying that both are problematic.
+
+00:22:32.200 --> 00:22:34.479
+Free Software is ill directed.
+
+00:22:34.480 --> 00:22:38.199
+It is based on the model of granting users,
+
+00:22:38.200 --> 00:22:42.839
+freedoms that are irrelevant to most software users.
+
+00:22:43.610 --> 00:22:46.679
+Perhaps Copyleft or Ethical Software
+
+00:22:46.680 --> 00:22:49.699
+could have been better labels.
+
+00:22:49.700 --> 00:22:52.359
+Open Source is a moral compromise.
+
+00:22:52.360 --> 00:22:58.439
+It rejects the requirement for perpetuity of Copyleft.
+
+00:22:58.440 --> 00:23:01.999
+It facilitates convergence of corporate interest
+
+00:23:02.000 --> 00:23:06.599
+and surrogate activities of software developers.
+
+00:23:06.600 --> 00:23:09.839
+Over time, proprietary corporations too
+
+00:23:09.840 --> 00:23:11.959
+have come to recognize the
+
+00:23:11.960 --> 00:23:15.819
+superiority of the collaborative model.
+
+00:23:15.820 --> 00:23:18.959
+These proprietary corporations then derailed
+
+00:23:18.960 --> 00:23:21.919
+the original intent that all software
+
+00:23:21.920 --> 00:23:24.159
+should always remain open-source.
+
+00:23:24.160 --> 00:23:27.319
+With permissive public licenses which
+
+00:23:27.320 --> 00:23:31.719
+permit open-source becoming proprietary,
+
+00:23:31.720 --> 00:23:34.079
+the intent of Free Software has been
+
+00:23:34.080 --> 00:23:37.679
+marginalized and permissive open-source
+
+00:23:37.680 --> 00:23:40.119
+has become the norm.
+
+00:23:40.120 --> 00:23:42.679
+I expand on all of this in Chapter 12,
+
+00:23:42.680 --> 00:23:46.899
+"Digital Non-Proprietary Movements".
+
+00:23:46.900 --> 00:23:49.599
+Instead of Free Software and Open Source,
+
+00:23:49.600 --> 00:23:53.679
+the label that I introduce is: "Libre-Halaal".
+
+00:23:55.320 --> 00:23:58.319
+The Libre-Halaal label is distinct and
+
+00:23:58.320 --> 00:24:00.239
+different from FOSS labels.
+
+00:24:00.240 --> 00:24:03.479
+As an inside-of-IPR strategy,
+
+00:24:03.480 --> 00:24:06.239
+the Libre-Halaal label maps
+
+00:24:06.240 --> 00:24:08.439
+to a single public license ---
+
+00:24:08.440 --> 00:24:11.779
+the Affero GPL (AGPL).
+
+00:24:11.780 --> 00:24:13.439
+In the Libre-Halaal model,
+
+00:24:13.440 --> 00:24:15.599
+it is not up to developers to
+
+00:24:15.600 --> 00:24:17.679
+choose their own licenses.
+
+00:24:18.230 --> 00:24:21.799
+There is only one correct license that conveys the
+
+00:24:21.800 --> 00:24:25.319
+Libre-Halaal manner-of-existence of software.
+
+00:24:25.830 --> 00:24:29.759
+Also, unlike the FOSS labels that dance around
+
+00:24:29.760 --> 00:24:33.439
+the validity of the Western IPR regime,
+
+00:24:33.440 --> 00:24:37.039
+the Libre-Halaal label recognizes
+
+00:24:37.040 --> 00:24:40.199
+the invalidity of the Western IPR regime,
+
+00:24:40.200 --> 00:24:43.959
+calls for abolishment of Western IPR
+
+00:24:43.960 --> 00:24:49.779
+and suggests various outside-of-IPR strategies.
+
+00:24:49.780 --> 00:24:54.199
+See Part V, "Formulation of Societal Policies"
+
+00:24:54.200 --> 00:24:55.119
+for details.
+
+00:24:55.860 --> 00:24:59.359
+Furthermore, unlike FOSS which is
+
+00:24:59.360 --> 00:25:03.519
+just software oriented, the Libre-Halaal label goes
+
+00:25:03.520 --> 00:25:05.799
+beyond software and also
+
+00:25:05.800 --> 00:25:11.059
+applies to internet application services.
+
+00:25:11.060 --> 00:25:14.559
+In many ways, software is yesterday's news.
+
+00:25:15.010 --> 00:25:17.519
+Much of what we are experiencing
+
+00:25:17.520 --> 00:25:18.639
+today is in the form of
+
+00:25:18.640 --> 00:25:20.839
+internet application services.
+
+00:25:21.610 --> 00:25:24.159
+Internet application services provide
+
+00:25:24.160 --> 00:25:27.479
+remote access to execution of software.
+
+00:25:28.140 --> 00:25:31.719
+As such, much of FOSS has become proprietary
+
+00:25:31.720 --> 00:25:33.679
+internet application services
+
+00:25:33.680 --> 00:25:37.879
+as AGPL is rarely used.
+
+00:25:38.900 --> 00:25:42.359
+This is why the Libre-Halaal definitions and labels
+
+00:25:42.360 --> 00:25:48.559
+span software and Internet Application Services.
+
+00:25:48.560 --> 00:25:52.319
+Based on the interdisciplinary stage setting that
+
+00:25:52.320 --> 00:25:55.959
+the "Nature of Polyexistentials" book provided
+
+00:25:55.960 --> 00:25:59.479
+and the ByStar blueprint that we reviewed, we can
+
+00:25:59.480 --> 00:26:01.679
+now focus on Blee.
+
+00:26:01.680 --> 00:26:04.839
+Think of Blee as a layer on top of Emacs and
+
+00:26:04.840 --> 00:26:07.919
+think of BISOS as a layer on top of Debian.
+
+00:26:09.590 --> 00:26:13.959
+Let's bootstrap Raw-BISOS and Raw-Blee.
+
+00:26:13.960 --> 00:26:15.439
+Starting from scratch,
+
+00:26:15.440 --> 00:26:19.459
+get yourself a fresh copy of Debian 12.
+
+00:26:19.460 --> 00:26:25.159
+Then go to https://github.com/bxGenesis/start
+
+00:26:26.220 --> 00:26:29.439
+The README.org file of that github repo is same
+
+00:26:29.440 --> 00:26:30.479
+as Chapter 18,
+
+00:26:30.480 --> 00:26:32.879
+"Engineering Adoption of BISOS and ByStar"
+
+00:26:32.880 --> 00:26:33.999
+of the book.
+
+00:26:35.160 --> 00:26:41.559
+We will next run "raw-bisos.sh", but prior to
+
+00:26:41.560 --> 00:26:44.679
+that let's take a quick look.
+
+00:26:44.680 --> 00:26:46.999
+This bootstrap scripts will
+
+00:26:47.000 --> 00:26:50.199
+do a lot as root on your Fresh-Debian.
+
+00:26:50.200 --> 00:26:54.279
+It is best to first try it on a disposable VM.
+
+00:26:54.950 --> 00:26:58.319
+raw-bisos.sh adds
+
+00:26:58.320 --> 00:27:00.879
+the current debian user to sudoers.
+
+00:27:00.880 --> 00:27:04.119
+Then it installs pipx.
+
+00:27:04.120 --> 00:27:06.679
+And then with pipx
+
+00:27:06.680 --> 00:27:11.719
+it installs from PyPI bisos.provision.
+
+00:27:12.710 --> 00:27:15.919
+bisos.provision includes additional
+
+00:27:15.920 --> 00:27:19.819
+bash scripts that are then executed.
+
+00:27:19.820 --> 00:27:23.279
+Full installation involves setting up various
+
+00:27:23.280 --> 00:27:26.959
+accounts, groups, various directory hierarchies,
+
+00:27:26.960 --> 00:27:31.239
+lots of apt packages and lots of python packages
+
+00:27:31.240 --> 00:27:35.239
+from the bisos namespace.
+
+00:27:35.240 --> 00:27:38.719
+If you are ready, copy and paste this line and
+
+00:27:38.720 --> 00:27:40.459
+run it.
+
+00:27:40.460 --> 00:27:43.419
+You will be prompted for the root password.
+
+00:27:43.420 --> 00:27:44.679
+Then be patient.
+
+00:27:45.170 --> 00:27:48.999
+Full installation can take 15 minutes or so.
+
+00:27:49.000 --> 00:27:52.599
+The logs of this script are also captured in
+
+00:27:52.600 --> 00:27:59.839
+~/raw-bisos-${dateTag}-log.org
+
+00:27:59.840 --> 00:28:02.319
+What has been installed on your system are
+
+00:28:02.320 --> 00:28:04.799
+Raw-BISOS and Raw-Blee.
+
+00:28:05.250 --> 00:28:09.079
+The universality of Debian let's us build on
+
+00:28:09.080 --> 00:28:13.599
+BISOS and Blee both in the usage environment and
+
+00:28:13.600 --> 00:28:14.959
+the service environment.
+
+00:28:16.570 --> 00:28:20.759
+With Emacs 30 now available on Android and with
+
+00:28:20.760 --> 00:28:25.559
+Termux apt packages infrastructure in place, it
+
+00:28:25.560 --> 00:28:27.039
+will be very viable to
+
+00:28:27.040 --> 00:28:30.379
+port BISOS and Blee to Android.
+
+00:28:30.380 --> 00:28:32.579
+We have not done so yet.
+
+00:28:32.580 --> 00:28:36.239
+We are waiting for Emacs-30 to mature up.
+
+00:28:36.240 --> 00:28:40.479
+This is ByStar's "Mobile Second" strategy.
+
+00:28:40.480 --> 00:28:44.039
+Upon completion of the bootstrapping process, you
+
+00:28:44.040 --> 00:28:47.959
+end up with Raw-BISOS and Raw-Blee.
+
+00:28:47.960 --> 00:28:49.639
+You then need to relogin.
+
+00:28:49.640 --> 00:28:52.559
+At which point you notice that a new account
+
+00:28:52.560 --> 00:28:56.279
+called bystar has been created.
+
+00:28:56.280 --> 00:28:59.679
+"bystar" is the default usage account.
+
+00:28:59.680 --> 00:29:01.799
+Let's login into it.
+
+00:29:01.800 --> 00:29:06.099
+You will see a customized ByStar Gnome Desktop.
+
+00:29:06.100 --> 00:29:10.319
+You will also notice a "Blee Startup" icon.
+
+00:29:10.320 --> 00:29:13.619
+Let's use it and start Blee.
+
+00:29:13.620 --> 00:29:17.039
+Notice that the Emacs splash-screen has been
+
+00:29:17.040 --> 00:29:20.919
+replaced and also note that the splash-screen is
+
+00:29:20.920 --> 00:29:23.299
+in org-mode.
+
+00:29:23.300 --> 00:29:26.639
+All the original Emacs splash-screen
+
+00:29:26.640 --> 00:29:31.999
+info is kept under "About Emacs".
+
+00:29:32.000 --> 00:29:34.639
+Let me enlarge the screen.
+
+00:29:34.640 --> 00:29:37.619
+Now we can live inside of Blee.
+
+00:29:37.620 --> 00:29:38.959
+Notice that the top
+
+00:29:38.960 --> 00:29:43.719
+drop down Emacs menus have been augmented.
+
+00:29:43.720 --> 00:29:48.659
+Everything to the left of the "File" menu, is new.
+
+00:29:48.660 --> 00:29:51.319
+Notice the "Panels" menus.
+
+00:29:51.320 --> 00:29:54.019
+More on these later.
+
+00:29:54.020 --> 00:29:56.559
+Now let me get myself a shell.
+
+00:29:56.560 --> 00:30:02.659
+And run tail /etc/passwd.
+
+00:30:02.660 --> 00:30:04.159
+Notice that a number of
+
+00:30:04.160 --> 00:30:06.839
+new accounts have been created.
+
+00:30:06.840 --> 00:30:14.879
+Notably: bisos, bystar and bpos-delimiter.
+
+00:30:14.880 --> 00:30:18.639
+Let's next cd to /bisos.
+
+00:30:18.640 --> 00:30:21.879
+Everything related to bisos is in here.
+
+00:30:21.880 --> 00:30:26.319
+The rest is as Debian was.
+
+00:30:26.320 --> 00:30:33.359
+Let's take a look at /bisos/blee/env3.
+
+00:30:33.360 --> 00:30:37.139
+All the elisp code for Blee is in here.
+
+00:30:37.140 --> 00:30:41.299
+For now, Blee is layered on top of Doom.
+
+00:30:41.300 --> 00:30:45.199
+Raw-BISOS and Raw-Blee are starting points.
+
+00:30:45.200 --> 00:30:47.959
+They are meant to be customized.
+
+00:30:47.960 --> 00:30:53.739
+Let's next see how that is done.
+
+00:30:53.740 --> 00:30:58.359
+Raw-BISOS and Raw-Blee are foundational layers.
+
+00:30:58.850 --> 00:31:01.719
+They can be augmented in a variety of ways.
+
+00:31:01.720 --> 00:31:05.599
+The basic unit in the ByStar model is the
+
+00:31:05.600 --> 00:31:07.959
+"Autonomous Site".
+
+00:31:07.960 --> 00:31:10.559
+Think of the "Autonomous Site" as the
+
+00:31:10.560 --> 00:31:13.439
+totality of computing and communication
+
+00:31:13.440 --> 00:31:16.239
+capabilities in a modern family
+
+00:31:16.240 --> 00:31:20.399
+home plus the ability of that family to host
+
+00:31:20.400 --> 00:31:23.559
+their own internet application services.
+
+00:31:24.280 --> 00:31:28.639
+Let's walk through how Raw-BISOS and Raw-Blee are
+
+00:31:28.640 --> 00:31:32.879
+used to construct an Autonomous Site.
+
+00:31:32.880 --> 00:31:36.039
+BISOS augmentation model is based on
+
+00:31:36.040 --> 00:31:40.299
+"BISOS Capability Bundles" BCBs.
+
+00:31:40.300 --> 00:31:43.479
+Raw-BISOS can be augmented to
+
+00:31:43.480 --> 00:31:46.659
+become a Virtual Machines Hosting service.
+
+00:31:46.660 --> 00:31:50.599
+From there on we can use reproducible images to
+
+00:31:50.600 --> 00:31:54.199
+implement the infrastructure of sites.
+
+00:31:54.200 --> 00:31:56.799
+Two key site services are the
+
+00:31:56.800 --> 00:32:01.219
+"Site BPOs Gitlab Server"
+
+00:32:01.220 --> 00:32:04.079
+and "Site Registrars".
+
+00:32:04.080 --> 00:32:06.799
+With these in place we can facilitate
+
+00:32:06.800 --> 00:32:10.879
+self-hosting, which in the BISOS model is called
+
+00:32:10.880 --> 00:32:15.439
+Possession Assertable Libre Services (PALS).
+
+00:32:15.440 --> 00:32:18.639
+These topics and these concepts are described in
+
+00:32:18.640 --> 00:32:25.219
+Chapter 17, "Technology of ByStar: BISOS".
+
+00:32:25.220 --> 00:32:28.839
+The concepts of Service Portability, Service
+
+00:32:28.840 --> 00:32:32.599
+Possession Assertion, Autonomous Site and Inner,
+
+00:32:32.600 --> 00:32:36.999
+Outer and Exposed Rims of Autonomous Site are
+
+00:32:37.000 --> 00:32:39.899
+fundamental to ByStar.
+
+00:32:39.900 --> 00:32:42.279
+These are shown in this figure as
+
+00:32:42.280 --> 00:32:43.519
+"Network Abodes".
+
+00:32:43.520 --> 00:32:47.839
+Chapter 17 of the book provides more details.
+
+00:32:49.490 --> 00:32:52.919
+Blee introduces a number of new concepts that
+
+00:32:52.920 --> 00:32:57.359
+augment Emacs. Some of these are intertwined with
+
+00:32:57.360 --> 00:33:01.039
+BISOS and ByStar. But some are not.
+
+00:33:01.040 --> 00:33:04.199
+Here, I provide some examples of these new
+
+00:33:04.200 --> 00:33:07.019
+general concepts.
+
+00:33:07.020 --> 00:33:10.599
+We love Emacs and we love Unix because their
+
+00:33:10.600 --> 00:33:14.599
+design is convivial. By convivial, I am referring
+
+00:33:14.600 --> 00:33:17.799
+to Ivan Illich's concept and terminology of
+
+00:33:17.800 --> 00:33:21.159
+"Tools for Conviviality". It was first
+
+00:33:21.160 --> 00:33:25.219
+published in 1973. It's a must read.
+
+00:33:25.220 --> 00:33:28.519
+A goal of the design of the ByStar Digital
+
+00:33:28.520 --> 00:33:32.639
+Ecosystem is to enlarge aggregated conviviality.
+
+00:33:32.640 --> 00:33:37.239
+Here, let's start by reviewing the idioms and
+
+00:33:37.240 --> 00:33:40.559
+means that have made Emacs and Unix so very
+
+00:33:40.560 --> 00:33:44.639
+convivial and some of the key idioms that have
+
+00:33:44.640 --> 00:33:48.079
+augmented them over the years -- I am showing
+
+00:33:48.080 --> 00:33:50.279
+them as "Linux PlusPlus"
+
+00:33:50.280 --> 00:33:52.919
+and "Emacs PlusPlus".
+
+00:33:52.920 --> 00:33:54.759
+For the most part these
+
+00:33:54.760 --> 00:33:57.959
+two philosophies have not been combined.
+
+00:33:57.960 --> 00:33:59.759
+They were developed and have
+
+00:33:59.760 --> 00:34:01.719
+evolved mostly separately.
+
+00:34:01.720 --> 00:34:06.479
+Think of BISOS idioms as an extension of Linux
+
+00:34:06.480 --> 00:34:10.519
+PlusPlus idioms and think of Blee idioms as an
+
+00:34:10.520 --> 00:34:14.179
+extension of Emacs PlusPlus.
+
+00:34:14.180 --> 00:34:16.799
+Then intertwine BISOS and Blee.
+
+00:34:16.800 --> 00:34:21.519
+This aggregated convivial tools powers ByStar.
+
+00:34:22.179 --> 00:34:25.479
+Let me first explain what I mean by aggregated
+
+00:34:25.480 --> 00:34:28.279
+convivial tools, and then
+
+00:34:28.280 --> 00:34:32.139
+let me give some examples.
+
+00:34:32.140 --> 00:34:34.759
+Here is a key sentence from Illich's,
+
+00:34:34.760 --> 00:34:39.719
+"Tools for Conviviality" 1973 essay:
+
+00:34:39.720 --> 00:34:43.599
+Convivial tools are those which give each person
+
+00:34:43.600 --> 00:34:47.199
+who uses them the greatest opportunity to enrich
+
+00:34:47.200 --> 00:34:48.839
+the environment with the
+
+00:34:48.840 --> 00:34:52.739
+fruits of his or her vision.
+
+00:34:52.740 --> 00:34:55.559
+Proprietary manner-of-existence of software
+
+00:34:55.560 --> 00:34:57.999
+makes them industrial.
+
+00:34:58.000 --> 00:35:00.399
+Libre-Halaal manner-of-existence
+
+00:35:00.400 --> 00:35:03.319
+of software is a prerequisite for conviviality.
+
+00:35:03.320 --> 00:35:07.439
+The concept of
+
+00:35:07.440 --> 00:35:10.639
+"Org Dynamic Blocks" is very powerful.
+
+00:35:10.640 --> 00:35:14.399
+But, why should they be primarily used
+
+00:35:14.400 --> 00:35:16.279
+in Org-Mode.
+
+00:35:16.280 --> 00:35:18.599
+I say let's generalize them to
+
+00:35:18.600 --> 00:35:20.239
+"Emacs Dynamic Blocks".
+
+00:35:20.240 --> 00:35:24.279
+Have defaults for org-dblock-start-re in
+
+00:35:24.280 --> 00:35:29.759
+every relevant mode and use them everywhere.
+
+00:35:29.760 --> 00:35:30.679
+Blee does that.
+
+00:35:30.680 --> 00:35:33.239
+In programming languages, Dynamic
+
+00:35:33.240 --> 00:35:34.879
+Blocks can be used as visible macros.
+
+00:35:34.880 --> 00:35:38.939
+Let me give you an example of how I use them.
+
+00:35:38.940 --> 00:35:41.759
+For those of us who live inside of Emacs,
+
+00:35:41.760 --> 00:35:46.359
+enhancing programming with org-mode capabilities
+
+00:35:46.360 --> 00:35:47.859
+is awesome.
+
+00:35:47.860 --> 00:35:50.379
+Incredibly awesome!
+
+00:35:50.380 --> 00:35:52.819
+This can be done in two ways.
+
+00:35:52.820 --> 00:35:57.159
+(1) With Literate Programming and org-babel.
+
+00:35:57.160 --> 00:35:58.799
+and (2) with
+
+00:35:58.800 --> 00:36:03.459
+Traditional/Surrounded Programming and COMEEGA.
+
+00:36:03.460 --> 00:36:04.959
+COMEEGA stands for
+
+00:36:04.960 --> 00:36:08.679
+Collaborative Org-Mode Enhanced Emacs
+
+00:36:08.680 --> 00:36:10.559
+Generalized Authorship.
+
+00:36:10.560 --> 00:36:15.259
+It is just an acronym that I have come up with.
+
+00:36:15.260 --> 00:36:18.319
+Literate Programming and org-babel
+
+00:36:18.320 --> 00:36:20.059
+are well established.
+
+00:36:20.060 --> 00:36:25.599
+There is a related talk in EmacsConf-2024 titled:
+
+00:36:25.600 --> 00:36:30.839
+"Literate Programming for the 21st Century".
+
+00:36:30.840 --> 00:36:33.559
+COMEEGA is the inverse of org-babel.
+
+00:36:34.080 --> 00:36:38.479
+I prefer COMEEGA over org-babel,
+
+00:36:38.480 --> 00:36:39.599
+because I prefer
+
+00:36:39.600 --> 00:36:41.799
+Traditional/Surrounded Programming
+
+00:36:41.800 --> 00:36:44.899
+over Literate Programming.
+
+00:36:44.900 --> 00:36:46.359
+To each his own.
+
+00:36:46.360 --> 00:36:49.079
+This is not about that debate.
+
+00:36:49.080 --> 00:36:51.039
+This is about mixing your
+
+00:36:51.040 --> 00:36:55.019
+programming-mode with org-mode.
+
+00:36:55.020 --> 00:36:56.799
+Much of Blee and BISOS
+
+00:36:56.800 --> 00:36:58.719
+are implemented in COMEEGA.
+
+00:36:58.720 --> 00:37:02.407
+Almost all of our Elisp, Python, Bash
+
+00:37:02.408 --> 00:37:06.199
+and LaTeX work uses COMEEGA.
+
+00:37:06.200 --> 00:37:08.174
+Full and proper use of COMEEGA,
+
+00:37:08.175 --> 00:37:13.279
+requires Polymode. Let's call that Poly-COMEEGA.
+
+00:37:13.280 --> 00:37:16.739
+But Emacs's Polymode is work-in-progress,
+
+00:37:16.740 --> 00:37:20.559
+particularly now with the new tree-sitter.
+
+00:37:20.560 --> 00:37:23.479
+So, in the interim, my usage of
+
+00:37:23.480 --> 00:37:28.779
+COMEEGA has been in the form of Toggle-COMEEGA.
+
+00:37:28.780 --> 00:37:30.839
+Where I manually switch between the
+
+00:37:30.840 --> 00:37:33.799
+programming-mode and org-mode.
+
+00:37:33.800 --> 00:37:34.839
+For me this has
+
+00:37:34.840 --> 00:37:41.699
+proved to be a fine interim solution.
+
+00:37:41.700 --> 00:37:43.639
+In Emacs, the way that we have been
+
+00:37:43.640 --> 00:37:45.359
+dealing with documentation and
+
+00:37:45.360 --> 00:37:49.559
+information retrieval is archaic.
+
+00:37:49.560 --> 00:37:52.239
+Man-pages, TeXInfo, Helpful-Mode and
+
+00:37:52.730 --> 00:37:56.440
+convention based Doc-Strings are old and
+
+00:37:56.441 --> 00:37:57.699
+limited.
+
+00:37:57.700 --> 00:38:01.759
+In BISOS and Blee, we use Blee-Panels for all
+
+00:38:01.760 --> 00:38:03.779
+kinds of documentation.
+
+00:38:03.780 --> 00:38:09.359
+Let me show you some examples.
+
+00:38:09.360 --> 00:38:12.959
+Two fundamental autonomy oriented capabilities
+
+00:38:12.960 --> 00:38:16.799
+that ByStar offers to individuals are:
+
+00:38:16.800 --> 00:38:20.739
+Email and Content Generation and Publication.
+
+00:38:20.740 --> 00:38:22.399
+I'll give a quick overview of
+
+00:38:22.400 --> 00:38:26.299
+these two important capabilities.
+
+00:38:26.300 --> 00:38:30.679
+At the EmacsConf-2022, the title of my
+
+00:38:30.680 --> 00:38:32.439
+presentation was:
+
+00:38:32.440 --> 00:38:37.679
+"Revisiting the anatomy of Emacs mail user agents".
+
+00:38:37.680 --> 00:38:39.359
+In that presentation I
+
+00:38:39.360 --> 00:38:43.119
+gave a brief overview of BISOS-MARMEE
+
+00:38:43.120 --> 00:38:47.739
+(Multi-Account Resident Mail Exchange Environment)
+
+00:38:47.740 --> 00:38:49.079
+and Blee-Gnus.
+
+00:38:49.080 --> 00:38:53.079
+In ByStar, these are typically paired with
+
+00:38:53.080 --> 00:38:58.039
+byname.net autonomous email services.
+
+00:38:58.040 --> 00:39:00.879
+Content Production and Self-Publication is a
+
+00:39:00.880 --> 00:39:06.059
+foundational Blee and BISOS Capability Bundle.
+
+00:39:06.060 --> 00:39:08.079
+Both this presentation and
+
+00:39:08.080 --> 00:39:11.739
+the Nature of Polyexistentials book
+
+00:39:11.740 --> 00:39:15.039
+were developed with Blee LCNT.
+
+00:39:15.040 --> 00:39:18.919
+The original text is always in COMEEGA-LaTeX --
+
+00:39:18.920 --> 00:39:22.299
+LaTeX augmented by Org-Mode.
+
+00:39:22.300 --> 00:39:23.439
+This is the inverse
+
+00:39:23.440 --> 00:39:27.159
+direction of exporting LaTeX from Org-Mode.
+
+00:39:27.160 --> 00:39:28.759
+For typesetting,
+
+00:39:28.760 --> 00:39:31.279
+the LaTeX syntax is far more
+
+00:39:31.280 --> 00:39:33.539
+powerful than org-mode.
+
+00:39:33.540 --> 00:39:35.399
+And with COMEEGA-LaTeX,
+
+00:39:35.400 --> 00:39:36.999
+you can also benefit from
+
+00:39:37.000 --> 00:39:41.339
+all that org-mode offers.
+
+00:39:41.340 --> 00:39:44.319
+For presentation/screen-casting,
+
+00:39:44.320 --> 00:39:48.679
+the original text is then augmented in layers
+
+00:39:48.680 --> 00:39:53.839
+by images, audio voice-overs, screen captures,
+
+00:39:53.840 --> 00:39:56.919
+videos and captions.
+
+00:39:56.920 --> 00:39:59.799
+The Beamer LaTeX file is then processed
+
+00:39:59.800 --> 00:40:02.559
+by both LaTeX and HeVeA.
+
+00:40:02.560 --> 00:40:05.959
+LaTeX produced slides are then
+
+00:40:05.960 --> 00:40:10.519
+absorbed in html by HeVeA as images.
+
+00:40:10.520 --> 00:40:13.759
+HeVeA is a LaTeX to html translator.
+
+00:40:13.760 --> 00:40:19.879
+HeVeA output is destined to be dispensed by Reveal.js.
+
+00:40:19.880 --> 00:40:25.119
+This video is just a screen capture of the autoplay of
+
+00:40:25.120 --> 00:40:27.339
+reveal file.
+
+00:40:27.340 --> 00:40:30.959
+Viewing this presentation in its
+
+00:40:30.960 --> 00:40:35.479
+original Reveal form is a richer experience.
+
+00:40:36.010 --> 00:40:39.679
+All of this involves a whole lot of integration
+
+00:40:39.680 --> 00:40:44.159
+scripting. In Raw-BISOS these scripts are in
+
+00:40:44.160 --> 00:40:53.319
+file:/bisos/core/lcnt/bin
+
+00:40:53.320 --> 00:40:57.399
+To say that ByStar, BISOS and Blee are big and
+
+00:40:57.400 --> 00:41:00.359
+ambitious is an understatement.
+
+00:41:00.360 --> 00:41:04.039
+And clearly, a small team won't be able to
+
+00:41:04.040 --> 00:41:07.959
+deliver the outlandish blueprint that is outlined
+
+00:41:07.960 --> 00:41:12.379
+in the Nature of Polyexistentials book.
+
+00:41:12.380 --> 00:41:15.959
+We have been at this for over two decades and we
+
+00:41:15.960 --> 00:41:18.519
+feel that now in 2024,
+
+00:41:18.520 --> 00:41:23.059
+it makes sense to involve you.
+
+00:41:23.060 --> 00:41:26.719
+The pointers and instructions for installation
+
+00:41:26.720 --> 00:41:31.199
+and usage of BISOS and Blee that I have provided,
+
+00:41:31.200 --> 00:41:34.679
+produce systems that are minimally functional,
+
+00:41:34.680 --> 00:41:37.399
+but are not clean.
+
+00:41:37.400 --> 00:41:40.079
+At this time don't expect software and services
+
+00:41:40.080 --> 00:41:42.759
+stability and support.
+
+00:41:42.760 --> 00:41:45.319
+Throughout this presentation, I have been
+
+00:41:45.320 --> 00:41:49.399
+emphasizing Service Portability and Possession
+
+00:41:49.400 --> 00:41:52.679
+Assertable Libre Services (PALS).
+
+00:41:52.680 --> 00:41:58.359
+But, a complete digital ecosystem includes various other types of
+
+00:41:58.360 --> 00:42:01.759
+internet application services as well.
+
+00:42:01.760 --> 00:42:05.799
+In this slide PALS are the center and are then
+
+00:42:05.800 --> 00:42:09.119
+augmented by different other type of services.
+
+00:42:09.120 --> 00:42:13.639
+In the ByStar model, equivalent of Facebook style
+
+00:42:13.640 --> 00:42:16.359
+application services are called:
+
+00:42:16.360 --> 00:42:19.619
+"Inter-Autonomous Interactions".
+
+00:42:19.620 --> 00:42:23.679
+With individual oriented PALS in place, using
+
+00:42:23.680 --> 00:42:28.279
+OAuth of PALS, resources can be shared.
+
+00:42:28.280 --> 00:42:32.479
+Based on that we can then structure Inter-Autonomous
+
+00:42:32.480 --> 00:42:37.319
+Interactions while preserving much privacy.
+
+00:42:37.320 --> 00:42:41.719
+Any blueprint for a digital ecosystem must also
+
+00:42:41.720 --> 00:42:46.039
+consider the economic and business dimensions.
+
+00:42:46.040 --> 00:42:50.379
+Chapter 13, "Polyexistential Capitalism",
+
+00:42:50.380 --> 00:42:52.959
+delves into proper economic models for
+
+00:42:52.960 --> 00:42:55.579
+polyexsitentials.
+
+00:42:55.580 --> 00:42:57.879
+The concept of Attribution
+
+00:42:57.880 --> 00:43:02.399
+Based Economics (ABE) which has been discussed in
+
+00:43:02.400 --> 00:43:05.719
+this forum before is included.
+
+00:43:05.720 --> 00:43:06.839
+Chapter 21,
+
+00:43:06.840 --> 00:43:09.159
+"Private Sector Strategies:
+
+00:43:09.160 --> 00:43:12.899
+ByStar Open Business Plan"
+
+00:43:12.900 --> 00:43:17.079
+deals with the business dimension of ByStar.
+
+00:43:17.080 --> 00:43:20.659
+What if in addition to being ethics oriented,
+
+00:43:20.660 --> 00:43:24.079
+the entirety of this book could also be
+
+00:43:24.080 --> 00:43:28.739
+considered a sophisticated business plan?
+
+00:43:28.740 --> 00:43:34.139
+Are there any Venture Capitalists that use Emacs?
+
+00:43:34.140 --> 00:43:37.639
+Here is a set of relatively complete domains and
+
+00:43:37.640 --> 00:43:41.919
+links for digging deeper. These pointers are
+
+00:43:41.920 --> 00:43:46.119
+structured in 4 layers. Ideology, Software,
+
+00:43:46.120 --> 00:43:50.159
+Services and Guardianship.
+
+00:43:50.160 --> 00:43:53.679
+If Blee, BISOS, ByStar, Libre-Halaal and
+
+00:43:53.680 --> 00:43:57.879
+Polyexistentials have piqued your interest and if
+
+00:43:57.880 --> 00:44:00.599
+you wish to participate in making these ideas
+
+00:44:00.600 --> 00:44:04.199
+more widespread and want to further cultivate
+
+00:44:04.200 --> 00:44:06.919
+them, here are some suggestions.
+
+00:44:06.920 --> 00:44:11.719
+The examples of the Blee concepts that I chose
+
+00:44:11.720 --> 00:44:15.179
+were purposeful and targeted.
+
+00:44:15.180 --> 00:44:18.599
+I am hopeful that org-mode developers and emacs
+
+00:44:18.600 --> 00:44:22.319
+developers would recognize that it makes good
+
+00:44:22.320 --> 00:44:25.599
+sense to expand the scope of org dynamic blocks
+
+00:44:25.600 --> 00:44:28.779
+to the entirety of emacs.
+
+00:44:28.780 --> 00:44:31.399
+I am hopeful that the concept of polymode -- a
+
+00:44:31.400 --> 00:44:35.279
+single buffer with regions in different modes and
+
+00:44:35.280 --> 00:44:39.759
+org-mode in particular -- would receive a high
+
+00:44:39.760 --> 00:44:44.559
+priority in our tree-sitter transition. I am
+
+00:44:44.560 --> 00:44:47.799
+hopeful that Blee-COMEEGA can become a
+
+00:44:47.800 --> 00:44:52.259
+generalized form of polymode.
+
+00:44:52.260 --> 00:44:55.559
+I am hopeful that we can build on Blee-Panels and
+
+00:44:55.560 --> 00:44:59.439
+move towards having a richer base for a universal
+
+00:44:59.440 --> 00:45:03.879
+Emacs documentation framework.
+
+00:45:03.880 --> 00:45:07.079
+If participation in any of these is of interest
+
+00:45:07.080 --> 00:45:10.659
+to you, please feel welcome to contact me.
+
+00:45:10.660 --> 00:45:13.519
+Emacs Conferences have proven to be
+
+00:45:13.520 --> 00:45:16.659
+very useful and productive.
+
+00:45:16.660 --> 00:45:21.539
+I look forward to your thoughts, feedback and questions.
+
+00:45:21.540 --> 00:45:24.799
+I want to thank all the EmacsConf Organizers for
+
+00:45:24.800 --> 00:45:26.139
+their great work.
+
+00:45:26.140 --> 00:45:29.960
+And Sacha, Leo and Amin in particular.
diff --git a/2024/captions/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--answers.vtt b/2024/captions/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--answers.vtt
new file mode 100644
index 00000000..7c6db8c8
--- /dev/null
+++ b/2024/captions/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--answers.vtt
@@ -0,0 +1,966 @@
+WEBVTT
+
+NOTE Opening
+
+00:00:00.000 --> 00:00:05.239
+Leo? I'm doing well as well and I'm so happy to have seen your
+
+00:00:05.240 --> 00:00:10.719
+talk because the interaction with Emacs is always
+
+00:00:10.720 --> 00:00:13.719
+something that I find very interesting, and stuff like
+
+00:00:13.720 --> 00:00:18.839
+Transient, stuff like Hydra before, I think they really
+
+00:00:18.840 --> 00:00:22.119
+improve the user experience of users, and I'm really glad
+
+00:00:22.120 --> 00:00:24.479
+that I've seen you talk. Perhaps just starting with the
+
+00:00:24.480 --> 00:00:27.639
+first question, do you have anything else that you'd like to
+
+00:00:27.640 --> 00:00:30.719
+add on your talk? Because we are pretty stringent with the
+
+00:00:30.720 --> 00:00:33.199
+amount of time that we give for talks, but is there anything
+
+00:00:33.200 --> 00:00:35.639
+that you would have liked to mention to people that you
+
+00:00:35.640 --> 00:00:42.719
+weren't able to fit into the talk? I think probably one of the
+
+00:00:42.720 --> 00:00:46.599
+design considerations I've done is that many of the
+
+00:00:46.600 --> 00:00:49.359
+commands that I've exposed through my casual interfaces
+
+00:00:49.360 --> 00:00:56.399
+have been in Emacs. They've been in there forever, but very
+
+00:00:56.400 --> 00:01:00.439
+few people uh, myself included really know that they're
+
+00:01:00.440 --> 00:01:05.999
+there, uh, because they're just not discoverable through,
+
+00:01:06.000 --> 00:01:09.559
+uh, basically the existing mechanisms, you know, prior to
+
+00:01:09.560 --> 00:01:13.479
+transient and which key to, to even know that those, those
+
+00:01:13.480 --> 00:01:19.399
+functions are there. Yeah. So I think I'm going to start
+
+00:01:19.400 --> 00:01:21.519
+asking you questions whilst people start writing them in a
+
+00:01:21.520 --> 00:01:25.759
+pad. But yeah, I also think that discoverability is a very
+
+00:01:25.760 --> 00:01:29.559
+huge point that having stuff like the stuff that you've
+
+00:01:29.560 --> 00:01:32.679
+showed today actually allows. One example that I'd like to
+
+00:01:32.680 --> 00:01:35.759
+give that many people tend to forget, and you've already
+
+00:01:35.760 --> 00:01:39.559
+mentioned it in your presentation, is that I've learned so
+
+00:01:39.560 --> 00:01:43.479
+much about using git in general thanks to Magit, for the
+
+00:01:43.480 --> 00:01:46.719
+reason that it shows you so many options that you might not be
+
+00:01:46.720 --> 00:01:50.799
+aware of. For instance, I like to really think about when
+
+00:01:50.800 --> 00:01:54.519
+you think about logging in git, Magit allows you to
+
+00:01:54.520 --> 00:01:58.119
+discover so many of the finer options, like I only want to
+
+00:01:58.120 --> 00:02:01.519
+see the first commit since the merge, or I only want to
+
+00:02:01.520 --> 00:02:05.999
+consider this subsection of commits going from master or
+
+00:02:06.000 --> 00:02:08.999
+main to the point of your branch. So many things like this
+
+00:02:09.000 --> 00:02:11.759
+that you get to discover thanks to Transient. So do you have
+
+00:02:11.760 --> 00:02:16.879
+any similar experience on your end? Oh yeah, far too
+
+00:02:16.880 --> 00:02:22.359
+many, particularly with EditKit,
+
+00:02:22.360 --> 00:02:28.279
+having access to these commands,
+
+00:02:28.280 --> 00:02:31.771
+particularly with different granularity on
+
+00:02:31.772 --> 00:02:34.773
+S-expressions, sentences, words...
+
+00:02:34.774 --> 00:02:37.395
+Probably the most surprising thing I found
+
+00:02:37.396 --> 00:02:43.021
+was just how how compelling the
+
+00:02:43.022 --> 00:02:49.054
+S-expression would be as a unit of text for working with.
+
+00:02:49.055 --> 00:02:53.988
+I found that in most contexts, or in many places,
+
+00:02:53.989 --> 00:03:02.719
+it did what I wanted. I found that to be very surprising.
+
+00:03:02.720 --> 00:03:06.159
+So unless you've got anything else to add, I think we can just
+
+00:03:06.160 --> 00:03:10.639
+jump into questions. Okay, certainly. I'll be reading them
+
+00:03:10.640 --> 00:03:13.599
+for you so that it's easier for you. So the first question is,
+
+NOTE Q: I wonder whether casual can only be used with the packages you
+
+00:03:13.600 --> 00:03:17.599
+I wonder whether casual can only be used with the packages
+
+00:03:17.600 --> 00:03:19.599
+you mentioned or whether it can be used with whatever
+
+00:03:19.600 --> 00:03:25.399
+packages you like. I think it's really the latter. I'm not
+
+00:03:25.400 --> 00:03:29.879
+quite sure what the... What the question was really
+
+00:03:29.880 --> 00:03:35.039
+pointing at, you know, is the question asking for why I chose
+
+00:03:35.040 --> 00:03:41.679
+the packages or the different modes that I did? Or is it, are
+
+00:03:41.680 --> 00:03:45.519
+they looking at it from a developer perspective of, can we
+
+00:03:45.520 --> 00:03:50.399
+integrate casual with other packages? I mean, since we've
+
+00:03:50.400 --> 00:03:52.839
+got a little bit of time ahead of us, feel free to answer both
+
+00:03:52.840 --> 00:03:59.279
+questions. Um, I think the answer is, uh. Well, for the 1st,
+
+00:03:59.280 --> 00:04:05.599
+1, I've, I've generally tried to stick with using. The modes
+
+00:04:05.600 --> 00:04:11.039
+that are already packaged in, um, and so there was a. A big
+
+00:04:11.040 --> 00:04:16.759
+refactoring of it where. Initially, I made separate repos
+
+00:04:16.760 --> 00:04:20.879
+for the different modes that I supported. And then through a
+
+00:04:20.880 --> 00:04:24.959
+discussion, which I won't go into here, that got changed
+
+00:04:24.960 --> 00:04:30.239
+where I consolidated all of the different transient menus
+
+00:04:30.240 --> 00:04:35.039
+for modes that are built in for behavior that's built into
+
+00:04:35.040 --> 00:04:39.199
+the Emacs. I put that into a single package called casual.
+
+00:04:39.200 --> 00:04:44.799
+And then integrations with other third party packages that
+
+00:04:44.800 --> 00:04:49.879
+are not built in were given the same standalone repo here. In
+
+00:04:49.880 --> 00:04:55.719
+terms of folks wanting to integrate that, it's the beauty of
+
+00:04:55.720 --> 00:05:01.159
+open source. They can get the repo and uh, and basically
+
+00:05:01.160 --> 00:05:05.199
+study that the code base, uh, actually, if they even install
+
+00:05:05.200 --> 00:05:08.599
+it through, uh, you know, the package manager in this case,
+
+00:05:08.600 --> 00:05:12.679
+uh, coming from the Melbourne distribution, um, they can
+
+00:05:12.680 --> 00:05:17.919
+inspect that code and, and, um, make modifications or even.
+
+00:05:17.920 --> 00:05:21.519
+uh, you know, integrate that with their other packages and,
+
+00:05:21.520 --> 00:05:25.279
+uh, do that to their heart's content. Um, I think one of the
+
+00:05:25.280 --> 00:05:29.639
+things that I need to, or at least, uh, you know, that I, I, I
+
+00:05:29.640 --> 00:05:32.519
+planned on sort of elaborating further on in the
+
+00:05:32.520 --> 00:05:36.399
+documentation is, is that transient already has built in
+
+00:05:36.400 --> 00:05:41.279
+mechanisms for modifying an existing transient. So you can
+
+00:05:41.280 --> 00:05:47.279
+add commands or, uh, re redefine the bindings. And so. That
+
+00:05:47.280 --> 00:05:51.959
+mechanism is available for users if they're not happy with
+
+00:05:51.960 --> 00:05:57.159
+those bindings or they want to add their own commands to a
+
+00:05:57.160 --> 00:06:01.959
+menu. Yeah, and people are... I'm personally familiar with
+
+00:06:01.960 --> 00:06:05.119
+this, again, with Magit, because sometimes, even though
+
+00:06:05.120 --> 00:06:07.479
+you have a lot of discoverability for functions that you may
+
+00:06:07.480 --> 00:06:10.359
+not know, sometimes you also happen to realize that
+
+00:06:10.360 --> 00:06:13.999
+something is missing in the list of available options. I'm
+
+00:06:14.000 --> 00:06:16.919
+not sure if Casual actually supports something similar to
+
+00:06:16.920 --> 00:06:21.559
+Magit, which is levels of options being displayed.
+
+00:06:21.560 --> 00:06:24.039
+Actually, I'm not sure if it's transient native or if it's
+
+00:06:24.040 --> 00:06:27.439
+just something that Magit adds over this. No, transient
+
+00:06:27.440 --> 00:06:30.599
+supports levels. I've decided
+
+00:06:30.600 --> 00:06:36.799
+in large part, I've tried to avoid that just to avoid the
+
+00:06:36.800 --> 00:06:43.119
+added complexity of trying to define those levels. Yeah, I
+
+00:06:43.120 --> 00:06:47.479
+was going to say that perhaps it doesn't gel very well with
+
+00:06:47.480 --> 00:06:49.839
+the notion of casualness that you seem to be introducing the
+
+00:06:49.840 --> 00:06:52.439
+package. On one end, you've got something that is supposed
+
+00:06:52.440 --> 00:06:56.639
+to be very casual, very easy to use, and on the other end, you
+
+00:06:56.640 --> 00:06:59.599
+add levels for stuff that is fairly advanced. So advanced
+
+00:06:59.600 --> 00:07:05.759
+versus casual, kind of makes sense that you check this over.
+
+00:07:05.760 --> 00:07:09.359
+Alright, moving to the second question which is related to
+
+00:07:09.360 --> 00:07:10.853
+the previous one.
+
+NOTE Q: Are there any patterns emerging, such that it would seem possible to 1) systematize 2) automate(?) the mapping of mode commands to keyboard-driven menus? Possibly even have an auto casual wrapper for an uncovered mode?
+
+00:07:10.854 --> 00:07:13.159
+Are there any patterns emerging such that
+
+00:07:13.160 --> 00:07:15.639
+it would be impossible, sorry, such that it would be
+
+00:07:15.640 --> 00:07:19.719
+possible to once systematize and to automate the mapping of
+
+00:07:19.720 --> 00:07:23.519
+mode commands to keyboard-driven menus, possibly even
+
+00:07:23.520 --> 00:07:26.559
+have an auto-casual wrapper for an uncovered mode? Does it
+
+00:07:26.560 --> 00:07:35.519
+make sense to you? Yes, and I've gotten these comments from a
+
+00:07:35.520 --> 00:07:42.799
+number of different folks who really want to see some sort
+
+00:07:42.800 --> 00:07:49.639
+of design rule to, or basically, what is it? Some sort of
+
+00:07:49.640 --> 00:07:54.679
+design system to be able to generate the UI.
+
+00:07:54.680 --> 00:08:01.399
+Conceptually, I think it's doable, but on the flip side, it
+
+00:08:01.400 --> 00:08:05.319
+just requires so much coordination that it makes it really
+
+00:08:05.320 --> 00:08:11.199
+untenable. In this case, I have very strong opinions. I
+
+00:08:11.200 --> 00:08:15.719
+think we're better off trying to handcraft the user
+
+00:08:15.720 --> 00:08:20.759
+interface to get basically the best user experience. To try
+
+00:08:20.760 --> 00:08:26.399
+to emulate that with a design system, good luck, but I'm not
+
+00:08:26.400 --> 00:08:31.519
+I'm not interested in working on that. Right, yeah. I think
+
+00:08:31.520 --> 00:08:34.119
+if I try to think a little more about this, it feels like
+
+00:08:34.120 --> 00:08:36.559
+there's a notion of intention that is very important when
+
+00:08:36.560 --> 00:08:41.479
+you are designing UI and UX. And to have this intention, it
+
+00:08:41.480 --> 00:08:45.319
+feels like you cannot just base yourself of a design idea to
+
+00:08:45.320 --> 00:08:48.799
+organize the options. You cannot just work off a pattern. I
+
+00:08:48.800 --> 00:08:53.599
+think you need to have the trace of human understanding in
+
+00:08:53.600 --> 00:08:56.679
+order to have a UX that really works. And judging by the
+
+00:08:56.680 --> 00:08:58.999
+option that you've picked in the demos that you've showed
+
+00:08:59.000 --> 00:09:04.039
+today, I don't think it'd be particularly easy to organize
+
+00:09:04.040 --> 00:09:07.959
+them in a UX just casually for any mode. I think you need some
+
+00:09:07.960 --> 00:09:14.159
+human introspection to understand this, if that makes
+
+00:09:14.160 --> 00:09:14.679
+sense.
+
+00:09:14.680 --> 00:09:17.279
+Moving to the next question, which is related to something
+
+00:09:17.280 --> 00:09:19.605
+we discussed about with Magit.
+
+NOTE Q: Does Casual have a log where you can see what commands were invoked?
+
+00:09:19.606 --> 00:09:21.079
+Does Casual have a log where
+
+00:09:21.080 --> 00:09:23.759
+you can see what commands were invoked? This is always
+
+00:09:23.760 --> 00:09:27.479
+available via M-x view-lossage or via the command-log-mode,
+
+00:09:27.480 --> 00:09:30.993
+but I'm wondering if it can do for Emacs command what
+
+00:09:30.994 --> 00:09:34.479
+magit-process-buffer does for learning Git commands. And for
+
+00:09:34.480 --> 00:09:37.439
+everyone who's currently in Emacs, whenever you're
+
+00:09:37.440 --> 00:09:40.639
+running a command in Magit, it's always printing the exact
+
+00:09:40.640 --> 00:09:44.799
+command that was run in a shell, inside this $
+
+00:09:44.800 --> 00:09:47.399
+menu. So does Casual actually provide something similar,
+
+00:09:47.400 --> 00:09:52.599
+Charles? I don't know. In general, because I'm building off
+
+00:09:52.600 --> 00:09:55.199
+of transient, it would have to be a mechanism that's
+
+00:09:55.200 --> 00:10:01.519
+available through transient. And You know, I would let
+
+00:10:01.520 --> 00:10:06.799
+Jonas speak more on that capability, because to be honest, I
+
+00:10:06.800 --> 00:10:14.879
+mean, even to my knowledge of transient is not that deep,
+
+00:10:14.880 --> 00:10:16.839
+actually.
+
+00:10:16.840 --> 00:10:21.399
+Well, it's funny that you say this because even though you
+
+00:10:21.400 --> 00:10:23.759
+say your knowledge might not be that big, you still managed
+
+00:10:23.760 --> 00:10:27.239
+to develop a whole suite of tools on top of it. So as far as
+
+00:10:27.240 --> 00:10:29.599
+people who do not know transient a whole lot, you're doing a
+
+00:10:29.600 --> 00:10:33.159
+pretty damn good job. Let me tell you that much. Thank you.
+
+00:10:33.160 --> 00:10:37.719
+Yeah, I think sort of what I bring to the table is, you know,
+
+00:10:37.720 --> 00:10:41.919
+quite a considerable career in software development on
+
+00:10:41.920 --> 00:10:47.879
+other software ecosystems. And as of late, I've spent
+
+00:10:47.880 --> 00:10:52.439
+basically the past decade working on iOS apps. Right. I
+
+00:10:52.440 --> 00:10:55.199
+think it's refreshing to be able to go back to something that
+
+00:10:55.200 --> 00:10:56.839
+looks like Emacs after iOS.
+
+00:10:56.840 --> 00:11:03.879
+Well, that's perhaps another longer conversation there.
+
+00:11:03.880 --> 00:11:08.599
+Speaking of longer conversation, we have only about 10
+
+00:11:08.600 --> 00:11:11.599
+minutes left until we need to move on to the next talk. But
+
+00:11:11.600 --> 00:11:13.759
+thank you everyone for all the questions you're asking. I'm
+
+00:11:13.760 --> 00:11:17.239
+not saying this because we finished, but it's good to see so
+
+00:11:17.240 --> 00:11:19.919
+many people writing in the chat and asking questions. It
+
+00:11:19.920 --> 00:11:23.079
+always shows that you're interested and that's always
+
+00:11:23.080 --> 00:11:26.079
+lovely to us. And you've mentioned Jonas. Obviously, we're
+
+00:11:26.080 --> 00:11:29.359
+talking about Jonas Bernoulli, i.e. Tarsius, the
+
+00:11:29.360 --> 00:11:33.439
+maintainer of transient. And what Charles just mentioned
+
+00:11:33.440 --> 00:11:37.559
+about having a transient tooling to print the lossage,
+
+00:11:37.560 --> 00:11:43.039
+basically, of which sex were run by which command, feels
+
+00:11:43.040 --> 00:11:44.839
+like this is something that would be interesting. So,
+
+00:11:44.840 --> 00:11:50.239
+perhaps, I'm not sure if Tarsius is still on the chat
+
+00:11:50.240 --> 00:11:52.639
+currently, but he was definitely around earlier today, so
+
+00:11:52.640 --> 00:11:55.839
+we'll make sure that the ID lands on his lap later on. All
+
+00:11:55.840 --> 00:12:00.203
+right, moving to the next question.
+
+NOTE Q: Is there a setting to close menu after executing command?
+
+00:12:00.204 --> 00:12:00.919
+Is there a setting to
+
+00:12:00.920 --> 00:12:07.479
+close menu after executing a command? By default, it will.
+
+00:12:07.480 --> 00:12:10.879
+There's a slot that you can define in a transient
+
+00:12:10.880 --> 00:12:17.199
+prefix called :transient. And if you set that to true,
+
+00:12:17.200 --> 00:12:20.639
+then it will persist the menu after executing the command.
+
+00:12:20.640 --> 00:12:26.159
+But by default, it will actually dismiss the menu. This
+
+00:12:26.160 --> 00:12:29.359
+feels... Did you actually get to play with Hydra before
+
+00:12:29.360 --> 00:12:36.279
+playing with transients? To be honest, no. Yeah, I kind of
+
+00:12:36.280 --> 00:12:41.719
+slept on Hydra or at least, you know, I really wasn't all that
+
+00:12:41.720 --> 00:12:44.639
+ambitious with working with different packages until
+
+00:12:44.640 --> 00:12:48.639
+about like, a little less than 2 years ago or so.
+
+00:12:48.640 --> 00:12:57.639
+And then the other part was also, um. You know, not not really
+
+00:12:57.640 --> 00:13:01.999
+a technical. Start a comparison because I really don't want
+
+00:13:02.000 --> 00:13:05.759
+to upset folks here, but, uh. But more along the lines of just
+
+00:13:05.760 --> 00:13:09.559
+going with the notion that transient was being built in or
+
+00:13:09.560 --> 00:13:15.279
+packaged as a built in package for Emacs. I went with using
+
+00:13:15.280 --> 00:13:20.679
+that for my implementation. Cool. And I don't think there's
+
+00:13:20.680 --> 00:13:23.199
+anything controversial with what you're saying right now
+
+00:13:23.200 --> 00:13:28.839
+because, you know, we had earlier today, Euro Rechenko, the
+
+00:13:28.840 --> 00:13:32.439
+new maintainer of Augment, mentioning that he'd like to
+
+00:13:32.440 --> 00:13:34.319
+have a better integration with Transient because
+
+00:13:34.320 --> 00:13:39.159
+Transient is, it looks like it's here to stay for a long time
+
+00:13:39.160 --> 00:13:42.879
+and might even land in core at some point. So, it definitely
+
+00:13:42.880 --> 00:13:49.519
+feels comparing Hydra because for me, most of my UI needs in
+
+00:13:49.520 --> 00:13:54.439
+Emacs prior to Transient were done via Hydra because it was a
+
+00:13:54.440 --> 00:13:57.799
+very convenient tooling. For people who do not know, Hydra
+
+00:13:57.800 --> 00:14:02.919
+is written by AboAbo. who's also authored packages like
+
+00:14:02.920 --> 00:14:08.639
+Lispy, an interactive Lisp mode, also for Ivy, which you
+
+00:14:08.640 --> 00:14:14.239
+might know as the counterpart of Helm, maybe five years ago.
+
+00:14:14.240 --> 00:14:17.959
+So all those packages, they were very innovative for the
+
+00:14:17.960 --> 00:14:21.199
+time and it's cool to see that some of the ideas which were
+
+00:14:21.200 --> 00:14:28.039
+introduced by IV and Helm and all this are then taken by tools
+
+00:14:28.040 --> 00:14:30.279
+like Transient and done perhaps with a little more
+
+00:14:30.280 --> 00:14:33.639
+hindsight now that people have experienced a little more of
+
+00:14:33.640 --> 00:14:38.359
+it. Okay, we have still a little bit of time. Moving on to the
+
+00:14:38.360 --> 00:14:40.281
+next question.
+
+NOTE Q: What modes are you working on at the moment for casual / are excited to explore?
+
+00:14:40.282 --> 00:14:41.919
+What modes are you working on at the moment
+
+00:14:41.920 --> 00:14:44.159
+for Casual or are you excited to explore?
+
+00:14:44.160 --> 00:14:53.999
+Well, so I just recently published one for calendar. And so I
+
+00:14:54.000 --> 00:14:56.839
+think the calendar interface has a lot of really
+
+00:14:56.840 --> 00:15:00.479
+interesting behavior, particularly its support for
+
+00:15:00.480 --> 00:15:07.479
+non-Gregorian events, which is, you know, for folks who'd
+
+00:15:07.480 --> 00:15:13.079
+like, in my case, looking at the lunar calendar, it's great
+
+00:15:13.080 --> 00:15:17.799
+to have tooling to be able to not have to leave Emacs to figure
+
+00:15:17.800 --> 00:15:19.759
+out when a lunar date is.
+
+00:15:19.760 --> 00:15:29.599
+Then, I think, you know, for the most part, My work on casual
+
+00:15:29.600 --> 00:15:34.959
+was really kind of my summer of code for Emacs here. And so in
+
+00:15:34.960 --> 00:15:41.519
+many ways, the velocity of casual development is going to
+
+00:15:41.520 --> 00:15:48.919
+slow down where I've got a big bulk of the modes that I really
+
+00:15:48.920 --> 00:15:57.519
+wanted to take care of. Um, I think one experimental thing
+
+00:15:57.520 --> 00:16:00.999
+that I think is very unbaked, but I would, you know, if folks
+
+00:16:01.000 --> 00:16:06.879
+are interested, uh, maybe looking at it is, uh, taking a look
+
+00:16:06.880 --> 00:16:13.079
+at edebug and trying to make that an easier thing to do. Um,
+
+00:16:13.080 --> 00:16:18.359
+that is ambitious. Uh, yeah, so maybe too ambitious.
+
+00:16:18.360 --> 00:16:23.713
+Uh, other things are like really scary projects.
+
+00:16:23.714 --> 00:16:25.195
+And so, not to say that
+
+00:16:25.196 --> 00:16:28.319
+I really have a desire to do it, but another
+
+00:16:28.320 --> 00:16:33.239
+one would be ediff. Right. Okay. Relitigating it's
+
+00:16:33.240 --> 00:16:43.639
+interface, um, to have a transient menu. I say
+
+00:16:43.640 --> 00:16:47.919
+these things, but I'm also scared of those things. Yeah, I
+
+00:16:47.920 --> 00:16:50.719
+mean, I think it's a lovely way to tackle the project,
+
+00:16:50.720 --> 00:16:55.479
+really, because you are fully aware that edebug and ediffs
+
+00:16:55.480 --> 00:16:59.399
+are mastodons when it comes to Emacs. They work very well. If
+
+00:16:59.400 --> 00:17:02.639
+you've ever tried to do a conflict resolution in Magit and
+
+00:17:02.640 --> 00:17:07.199
+you've pressed e, that usually opens ediff for you. If you
+
+00:17:07.200 --> 00:17:09.959
+happen to know how it works, it's amazing, but if you do not know
+
+00:17:09.960 --> 00:17:13.719
+it works, the interface is a little... It's a lot to take in
+
+00:17:13.720 --> 00:17:20.879
+at the moment. You have to know a, b, w... I can, and I
+
+00:17:20.880 --> 00:17:24.439
+can never remember which one is the lower and which one is the
+
+00:17:24.440 --> 00:17:27.359
+upper. Like, it constantly goes in different directions. I
+
+00:17:27.360 --> 00:17:29.719
+can never remember which is the commit I'm trying to merge,
+
+00:17:29.720 --> 00:17:32.759
+which is the commit I'm currently being on. It has nothing to
+
+00:17:32.760 --> 00:17:36.839
+do with Magit. It's merely Git and the way they conceive
+
+00:17:36.840 --> 00:17:39.719
+this. And probably, there might be a very nice way to
+
+00:17:39.720 --> 00:17:42.079
+remember it, but I still haven't found it after 10 years as a
+
+00:17:42.080 --> 00:17:44.919
+software developer. So, I guess I need to dig a little
+
+00:17:44.920 --> 00:17:48.519
+deeper. But what I find lovely about the approach is that for
+
+00:17:48.520 --> 00:17:52.599
+you, working on the interface to those tools is actually
+
+00:17:52.600 --> 00:17:55.159
+something that allows you to discover how they work, but
+
+00:17:55.160 --> 00:17:59.119
+also how to make it more easy for people to understand how
+
+00:17:59.120 --> 00:18:02.039
+those tools work. So you're doing the work of
+
+00:18:02.040 --> 00:18:05.399
+understanding, of digesting a lot of the commands, so that
+
+00:18:05.400 --> 00:18:08.599
+people do not have to go through the same pain as you have. So I
+
+00:18:08.600 --> 00:18:14.279
+find this a very noble endeavor in a way.
+
+NOTE Getting older
+
+00:18:14.280 --> 00:18:18.559
+In so many ways, as perhaps I've mentioned
+
+00:18:18.560 --> 00:18:23.639
+in my talk, I'm getting older. I can't remember all
+
+00:18:23.640 --> 00:18:28.759
+these damn commands and my hand dexterity is failing. I
+
+00:18:28.760 --> 00:18:33.199
+mean, there's so many. Like multiple keystroke
+
+00:18:33.200 --> 00:18:37.479
+bindings, which I absolutely loathe. At most,
+
+00:18:37.480 --> 00:18:40.799
+like I can, I can only physically handle like, two
+
+00:18:40.800 --> 00:18:47.799
+characters, three maybe, at a time. So maybe
+
+00:18:47.800 --> 00:18:51.239
+that's just me, and others may
+
+00:18:51.240 --> 00:18:55.999
+feel differently, but at the same time,
+
+00:18:56.000 --> 00:19:01.519
+the work that I've invested here is has been very personal
+
+00:19:01.520 --> 00:19:06.239
+for me because I just don't want to work that hard, and I want to
+
+00:19:06.240 --> 00:19:11.159
+keep using Emacs. Yeah, and that's again a very good
+
+00:19:11.160 --> 00:19:13.719
+endeavor, I think, to have. And there's one last thing that
+
+00:19:13.720 --> 00:19:16.039
+I'd like to mention, because you've mentioned this project
+
+00:19:16.040 --> 00:19:19.879
+of yours, Casual, being some kind of summer of code, with the
+
+00:19:19.880 --> 00:19:22.399
+implication that you've worked a whole lot of it during the
+
+00:19:22.400 --> 00:19:26.919
+summer or during this period. and perhaps investment will
+
+00:19:26.920 --> 00:19:31.119
+die down a little bit now. But I think it's completely fine to
+
+00:19:31.120 --> 00:19:33.879
+have moments when you feel particularly excited and you do a
+
+00:19:33.880 --> 00:19:36.959
+lot of work, and sometimes it dies down a little bit.
+
+00:19:36.960 --> 00:19:41.439
+Personally, I've been... Four years ago, I was working a lot
+
+00:19:41.440 --> 00:19:44.679
+on Org Roam and I had my Summer of Code on Org Roam. And that was
+
+00:19:44.680 --> 00:19:47.159
+great. I was able to do a lot of things, to get a lot of things
+
+00:19:47.160 --> 00:19:50.559
+out of my head. But eventually, you know, you have to go make
+
+00:19:50.560 --> 00:19:53.279
+some money to survive or you have to take care of family and
+
+00:19:53.280 --> 00:19:56.399
+stuff like this. So, life tends to get in the way of your
+
+00:19:56.400 --> 00:20:00.519
+hobbies, especially when, you know, it's so... It's
+
+00:20:00.520 --> 00:20:03.239
+hobbies that involve so much of your time to get things
+
+00:20:03.240 --> 00:20:07.879
+right, like programming does. But, you know, we appreciate
+
+00:20:07.880 --> 00:20:09.799
+all the work you've done, Charles, and the fact that you've
+
+00:20:09.800 --> 00:20:12.679
+put it out there for people to enjoy. It's already a victory.
+
+00:20:12.680 --> 00:20:14.999
+You don't need to feel compelled to keep working on it
+
+00:20:15.000 --> 00:20:18.159
+because ultimately, as you said, the beauty of open source
+
+00:20:18.160 --> 00:20:21.759
+is that people can just send PRs and get the project going
+
+00:20:21.760 --> 00:20:28.519
+again. Yeah. I mean, and if anything, you know, folks have
+
+00:20:28.520 --> 00:20:33.319
+expressed to me that, you know, in many ways, a lot of this
+
+00:20:33.320 --> 00:20:37.959
+stuff should be, you know, sort of folded in the core. And,
+
+00:20:37.960 --> 00:20:45.159
+you know, I would love to see at least the ideals of, or at
+
+00:20:45.160 --> 00:20:49.319
+least an openness into thinking, rethinking the interface
+
+00:20:49.320 --> 00:20:54.119
+for Emacs. So, you know, it doesn't have to be, basically
+
+00:20:54.120 --> 00:20:59.119
+work the way it worked for basically the last half of the 20th
+
+00:20:59.120 --> 00:21:03.519
+century here. Yeah, Emacs is flexible enough to have
+
+00:21:03.520 --> 00:21:10.279
+different approaches and, you know, transient is one
+
+00:21:10.280 --> 00:21:17.759
+approach, but at the same time, you know, the ability to
+
+00:21:17.760 --> 00:21:22.559
+reimagine the user interface for, you know, the computing
+
+00:21:22.560 --> 00:21:28.159
+needs, you know, for basically users needs today, whether
+
+00:21:28.160 --> 00:21:33.119
+you write or code or anything of that nature, I think is an
+
+00:21:33.120 --> 00:21:39.039
+exciting and great thing. Yeah, well, thank you so much for
+
+00:21:39.040 --> 00:21:41.639
+this conclusion. So I'm a little sorry, because sadly, we
+
+00:21:41.640 --> 00:21:45.919
+needed to move the stream to the next talk. So we've lost
+
+00:21:45.920 --> 00:21:49.639
+about 20 seconds of what you said. But don't worry, whatever
+
+00:21:49.640 --> 00:21:51.999
+you've said will be available on the website. I didn't want
+
+00:21:52.000 --> 00:21:55.759
+to interrupt, sadly, because I didn't want to be rude. But I
+
+00:21:55.760 --> 00:21:58.679
+think we did a great job answering the questions. So thank
+
+00:21:58.680 --> 00:22:01.199
+you so much for taking the time. I'll need to get going,
+
+00:22:01.200 --> 00:22:02.759
+because we might have a problem with the next talk. So thank
+
+00:22:02.760 --> 00:22:05.919
+you so much, Charles. Certainly. Take care. Thank you.
+
+00:22:05.920 --> 00:22:12.120
+Appreciate it. Bye.
diff --git a/2024/captions/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--main--chapters.vtt b/2024/captions/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--main--chapters.vtt
new file mode 100644
index 00000000..307d693b
--- /dev/null
+++ b/2024/captions/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--main--chapters.vtt
@@ -0,0 +1,56 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:43.799
+introduction
+
+00:00:43.800 --> 00:02:34.799
+Recall vs recognition
+
+00:02:34.800 --> 00:03:43.399
+Emacs with keyboard-driven menus
+
+00:03:43.400 --> 00:04:08.199
+Transient
+
+00:04:08.200 --> 00:04:29.302
+A Transient menu can be pinned
+
+00:04:29.303 --> 00:04:59.526
+Modes are apps, really
+
+00:04:59.527 --> 00:05:28.039
+Transient all the modes!
+
+00:05:28.040 --> 00:06:17.959
+Casual design principles
+
+00:06:17.960 --> 00:07:04.365
+Casual design conventions
+
+00:07:04.366 --> 00:09:06.639
+Casual Dired
+
+00:09:06.640 --> 00:10:36.199
+Casual EditKit
+
+00:10:36.200 --> 00:11:31.996
+EditKit demo
+
+00:11:31.997 --> 00:12:53.139
+Marking and moving
+
+00:12:53.140 --> 00:14:04.975
+Rectangles
+
+00:14:04.976 --> 00:14:36.599
+Numbering
+
+00:14:36.600 --> 00:17:02.639
+Sorting
+
+00:17:02.640 --> 00:17:34.450
+Casual has transformed my user experience with Emacs
+
+00:17:34.451 --> 00:18:23.720
+Thanks and acknowledgements
diff --git a/2024/captions/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--main.vtt b/2024/captions/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--main.vtt
new file mode 100644
index 00000000..26187e17
--- /dev/null
+++ b/2024/captions/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--main.vtt
@@ -0,0 +1,757 @@
+WEBVTT captioned by sachac, checked by bhavin
+
+NOTE introduction
+
+00:00:00.000 --> 00:00:05.079
+Hello, my name is Charles Choi and welcome to my talk:
+
+00:00:05.080 --> 00:00:11.359
+"Reimagining the Emacs user experience with Casual Suite."
+
+00:00:11.360 --> 00:00:14.919
+Casual Suite is a set of opinionated user interfaces to
+
+00:00:14.920 --> 00:00:18.399
+different modes offered in Emacs. Before I get into
+
+00:00:18.400 --> 00:00:22.199
+describing Casual in detail, let's first talk about the
+
+00:00:22.200 --> 00:00:27.039
+existing Emacs user experience. To make Emacs go, people
+
+00:00:27.040 --> 00:00:31.079
+can either invoke commands by name with
+
+00:00:31.080 --> 00:00:34.081
+execute-extended-command,
+
+00:00:34.082 --> 00:00:36.403
+run a command directly with a pre-assigned
+
+00:00:36.404 --> 00:00:43.799
+key binding, finally, use a mouse menu if it's available.
+
+NOTE Recall vs recognition
+
+00:00:43.800 --> 00:00:46.719
+From human-computer interface research, there is a
+
+00:00:46.720 --> 00:00:50.799
+concept of recall versus recognition in user interface
+
+00:00:50.800 --> 00:00:56.599
+design. Let's show their distinction by example. A common
+
+00:00:56.600 --> 00:01:00.839
+recall interface is password entry. Absent any historical
+
+00:01:00.840 --> 00:01:04.639
+affordances, a user must directly remember information to
+
+00:01:04.640 --> 00:01:09.839
+succeed with this interface. In contrast, menus offer
+
+00:01:09.840 --> 00:01:13.439
+immediate visual cues on what commands are available. This
+
+00:01:13.440 --> 00:01:16.839
+allows a user to recognize familiar behavior to support
+
+00:01:16.840 --> 00:01:21.879
+successful selection of it. From user interface research,
+
+00:01:21.880 --> 00:01:26.119
+the key finding is this. Interfaces emphasizing
+
+00:01:26.120 --> 00:01:29.999
+recognition are much easier to use than those relying on
+
+00:01:30.000 --> 00:01:35.799
+recall. In this light, we see that the Emacs user experience
+
+00:01:35.800 --> 00:01:41.279
+leans too much towards recall. Completion in history can
+
+00:01:41.280 --> 00:01:44.479
+help tip the scales towards recognition, but only by a
+
+00:01:44.480 --> 00:01:47.959
+little bit.
+
+00:01:47.960 --> 00:01:52.399
+This reliance on recall is discouraging to users both new
+
+00:01:52.400 --> 00:01:56.839
+and old, and that's a shame because Emacs has so many useful
+
+00:01:56.840 --> 00:02:00.759
+commands. But the kicker is that most of them are
+
+00:02:00.760 --> 00:02:05.239
+infrequently used. You can't recall them all. At least I
+
+00:02:05.240 --> 00:02:11.239
+can't. So, a conundrum. While I've been using Emacs since
+
+00:02:11.240 --> 00:02:15.159
+the early 90s, truthfully, it's been only in this past
+
+00:02:15.160 --> 00:02:19.679
+decade that I've leveled up in using it. Org Mode, Magit,
+
+00:02:19.680 --> 00:02:23.199
+Eglot, Avy, and many other packages have transformed how I
+
+00:02:23.200 --> 00:02:28.639
+use it. I can only deal with so much cognitive load and
+
+00:02:28.640 --> 00:02:34.799
+physically straining key bindings. So, what to do about it?
+
+NOTE Emacs with keyboard-driven menus
+
+00:02:34.800 --> 00:02:36.159
+Let's bring back an old ideal.
+
+00:02:36.160 --> 00:02:42.359
+Keyboard-driven menus have been around since TTY video
+
+00:02:42.360 --> 00:02:47.359
+terminals with mainframes. If you're old enough to recall
+
+00:02:47.360 --> 00:02:50.079
+working with such interfaces, these terms will seem
+
+00:02:50.080 --> 00:02:53.239
+familiar. They all worked with the limitations of
+
+00:02:53.240 --> 00:02:57.639
+text-based video displays.
+
+00:02:57.640 --> 00:03:01.599
+With keyboard-driven menus, if a command exists but nobody
+
+00:03:01.600 --> 00:03:05.519
+can find it, it's not really useful. A well-designed menu
+
+00:03:05.520 --> 00:03:09.719
+can make a command discoverable. If the command is
+
+00:03:09.720 --> 00:03:15.199
+infrequently used, making it recognizable helps a lot. And
+
+00:03:15.200 --> 00:03:18.679
+for working primarily with text, having keyboard-only
+
+00:03:18.680 --> 00:03:24.119
+interactions encourages flow. Given the above, the next
+
+00:03:24.120 --> 00:03:28.479
+steps seem natural:
+
+00:03:28.480 --> 00:03:32.759
+augment Emacs with keyboard-driven menus. This is not
+
+00:03:32.760 --> 00:03:36.639
+saying that I want to obsolete name commands, keybindings,
+
+00:03:36.640 --> 00:03:41.079
+and mouse menus. They all can happily coexist. Emacs is
+
+00:03:41.080 --> 00:03:43.399
+large. It can contain multitudes.
+
+NOTE Transient
+
+00:03:43.400 --> 00:03:49.879
+Conveniently, Emacs has a built-in library for building
+
+00:03:49.880 --> 00:03:53.839
+such menus. It's called Transient, and it's been around
+
+00:03:53.840 --> 00:03:59.319
+since Emacs 28. Developed primarily by Jonas Bernoulli as a
+
+00:03:59.320 --> 00:04:03.199
+UI toolkit for Magit, Transient has an essential feature
+
+00:04:03.200 --> 00:04:08.199
+for building great keyboard-driven interfaces.
+
+NOTE A Transient menu can be pinned
+
+00:04:08.200 --> 00:04:11.919
+A transient menu can be pinned and their state updated as
+
+00:04:11.920 --> 00:04:15.239
+commands are issued from them. This lets us build
+
+00:04:15.240 --> 00:04:18.399
+interfaces that reflect internal state changes made by
+
+00:04:18.400 --> 00:04:21.919
+commands issued from the user. This is great because many
+
+00:04:21.920 --> 00:04:26.599
+modes have stateful behavior, and guess what? Emacs has a lot
+
+00:04:26.600 --> 00:04:29.302
+of modes.
+
+NOTE Modes are apps, really
+
+00:04:29.303 --> 00:04:31.999
+If you think about it, Emacs modes are akin to the
+
+00:04:32.000 --> 00:04:35.079
+ecosystem of apps that we see today, but with far less
+
+00:04:35.080 --> 00:04:39.319
+structure and packaging. A mode, like an app, focuses on
+
+00:04:39.320 --> 00:04:42.959
+delivering specific behavior to the user. There are many
+
+00:04:42.960 --> 00:04:45.999
+built-in modes in Emacs, and these modes are complex with
+
+00:04:46.000 --> 00:04:50.679
+dozens, if not hundreds, of commands. Calc itself has over
+
+00:04:50.680 --> 00:04:54.879
+1,000 of them. It's frustrating to know that these commands
+
+00:04:54.880 --> 00:04:59.526
+are there, but I really can't access them via recall.
+
+NOTE Transient all the modes!
+
+00:04:59.527 --> 00:05:05.079
+So I decided to do something about it, and that was to transient
+
+00:05:05.080 --> 00:05:09.999
+all the modes, or at least the most major ones. This past
+
+00:05:10.000 --> 00:05:12.679
+summer, I had the time and resources to start building
+
+00:05:12.680 --> 00:05:15.799
+Transient interfaces for modes that I wanted to more
+
+00:05:15.800 --> 00:05:22.319
+elegantly use. I decided to call this work Casual. Given its
+
+00:05:22.320 --> 00:05:25.519
+definition, it seemed like a good fit for the vibe that I
+
+00:05:25.520 --> 00:05:28.039
+wanted these interfaces to embody.
+
+NOTE Casual design principles
+
+00:05:28.040 --> 00:05:34.999
+Design principles that I embraced up front were
+
+00:05:35.000 --> 00:05:38.239
+handcrafted information architecture and layout. This is
+
+00:05:38.240 --> 00:05:41.799
+largely an exercise in mapping a mode's command set to a
+
+00:05:41.800 --> 00:05:47.119
+hierarchical menu structure. I wanted these menus to make
+
+00:05:47.120 --> 00:05:50.719
+sense to most people. Ideally, users would not have to read
+
+00:05:50.720 --> 00:05:55.839
+documentation to get at the command that they wanted. Early
+
+00:05:55.840 --> 00:05:59.359
+on, I quickly learned that it was impossible to maintain the
+
+00:05:59.360 --> 00:06:02.479
+existing default key bindings when mapping them over to a
+
+00:06:02.480 --> 00:06:06.759
+hierarchical menu. Also, some bindings I just flat out
+
+00:06:06.760 --> 00:06:10.199
+disagreed with. I resolved to be friendly, but not
+
+00:06:10.200 --> 00:06:14.919
+beholden to them. In all of the above, I've gone out of my way
+
+00:06:14.920 --> 00:06:17.959
+to make clear that my design decisions are opinionated.
+
+NOTE Casual design conventions
+
+00:06:17.960 --> 00:06:21.719
+Using casual.
+
+00:06:21.720 --> 00:06:30.039
+To reinforce habit, a common key binding is used per mode to
+
+00:06:30.040 --> 00:06:33.799
+raise a main menu. This key binding is left to user
+
+00:06:33.800 --> 00:06:36.719
+preference. For me, that binding is C-o.
+
+00:06:36.720 --> 00:06:44.639
+Command bindings are mnemonic when possible.
+
+00:06:44.640 --> 00:06:49.559
+Mode-specific settings are given their own menu. Since
+
+00:06:49.560 --> 00:06:53.319
+transient menus can be pinned, we can support repeat or
+
+00:06:53.320 --> 00:06:58.479
+stateful behavior in a mode.
+
+00:06:58.480 --> 00:07:02.319
+As of this writing, there are 11 modes supported by Casual,
+
+00:07:02.320 --> 00:07:04.365
+with several more on the way.
+
+NOTE Casual Dired
+
+00:07:04.366 --> 00:07:05.719
+Let's look at the Casual menu
+
+00:07:05.720 --> 00:07:12.479
+for Dired to highlight the design conventions previously
+
+00:07:12.480 --> 00:07:13.559
+mentioned.
+
+00:07:13.560 --> 00:07:17.719
+In a Dired Emacs window, the user can invoke their preferred
+
+00:07:17.720 --> 00:07:22.279
+key binding to call a top-level Casual main menu. This main
+
+00:07:22.280 --> 00:07:27.919
+menu is displayed at the bottom of the Emacs frame. Zooming
+
+00:07:27.920 --> 00:07:30.839
+into this menu, we see the commands offered in it
+
+00:07:30.840 --> 00:07:34.559
+categorized into different sections. Each command has a
+
+00:07:34.560 --> 00:07:38.039
+key binding, usually a single character shown before its
+
+00:07:38.040 --> 00:07:42.599
+label. The File section holds commands that act upon the
+
+00:07:42.600 --> 00:07:47.559
+currently selected item or marked items. The Directory
+
+00:07:47.560 --> 00:07:50.319
+section holds commands that affect the current directory
+
+00:07:50.320 --> 00:07:55.599
+or its subdirs within it. The Mark section has marking
+
+00:07:55.600 --> 00:08:00.279
+commands that allow for aggregate operations. The
+
+00:08:00.280 --> 00:08:03.399
+Navigation section shows commands that move the point in a
+
+00:08:03.400 --> 00:08:09.559
+direct buffer. The quick section provides access to
+
+00:08:09.560 --> 00:08:14.519
+bookmark and buffer list commands. Search and replace
+
+00:08:14.520 --> 00:08:19.119
+commands are grouped in the search section. New directory
+
+00:08:19.120 --> 00:08:24.079
+and file creation are given their own section. Finally, at
+
+00:08:24.080 --> 00:08:27.599
+the bottom of the menu are commands dedicated to Casual menu
+
+00:08:27.600 --> 00:08:28.439
+navigation.
+
+00:08:28.440 --> 00:08:34.079
+Casual is conformant to Transient conventions where the
+
+00:08:34.080 --> 00:08:39.479
+key binding C-g for dismiss one and C-q to dismiss all
+
+00:08:39.480 --> 00:08:43.639
+menus are honored. Another transient convention is to
+
+00:08:43.640 --> 00:08:49.519
+reserve the key binding q to quit the current mode. For most
+
+00:08:49.520 --> 00:08:53.959
+main menus, casual uses the , key binding to invoke a
+
+00:08:53.960 --> 00:08:58.999
+mode-specific settings menu. Casual also adopts the
+
+00:08:59.000 --> 00:09:02.039
+common UI convention of using ... >
+
+00:09:02.040 --> 00:09:05.879
+symbols to denote required input and submenus
+
+00:09:05.880 --> 00:09:06.639
+respectively.
+
+NOTE Casual EditKit
+
+00:09:06.640 --> 00:09:13.919
+Some commands are more global or non-mode specific in
+
+00:09:13.920 --> 00:09:18.039
+nature. A great deal of these commands relate to editing,
+
+00:09:18.040 --> 00:09:23.239
+which I find to be a prime motivation for using Emacs. Let's
+
+00:09:23.240 --> 00:09:25.559
+examine one such menu that supports this.
+
+00:09:25.560 --> 00:09:31.599
+The main menu for Casual EditKit is designed to provide easy
+
+00:09:31.600 --> 00:09:36.279
+access to editing and editing-related commands. Like the
+
+00:09:36.280 --> 00:09:39.959
+previous Dired menu, it organizes commands into different
+
+00:09:39.960 --> 00:09:40.679
+sections.
+
+00:09:40.680 --> 00:09:45.999
+Commands related to file and buffer operations are in the
+
+00:09:46.000 --> 00:09:50.519
+File section. Commands for editing text are in the Edit
+
+00:09:50.520 --> 00:09:55.599
+section. S- or balanced expression commands are given a
+
+00:09:55.600 --> 00:09:59.439
+dedicated section for their own. More often than not, in
+
+00:09:59.440 --> 00:10:02.159
+many modes, I find them to do what I want.
+
+00:10:02.160 --> 00:10:08.879
+The tools section provides access to common tools.
+
+00:10:08.880 --> 00:10:13.719
+Bookmarks I consider to be an essential feature. If you
+
+00:10:13.720 --> 00:10:18.439
+haven't used them, it's never too late to start. Emacs
+
+00:10:18.440 --> 00:10:20.799
+window management commands are given this section.
+
+00:10:20.800 --> 00:10:25.799
+Commands for search and replace, macros, and projects can
+
+00:10:25.800 --> 00:10:32.199
+be accessed from here. Finally, the menu navigation
+
+00:10:32.200 --> 00:10:35.719
+section. Note that register commands can be accessed from
+
+00:10:35.720 --> 00:10:36.199
+here.
+
+NOTE EditKit demo
+
+00:10:36.200 --> 00:10:42.439
+Okay, enough screenshots. Let's look at Casual in action
+
+00:10:42.440 --> 00:10:48.439
+with a demo of the EditKit menus. Let's start our demo of
+
+00:10:48.440 --> 00:10:54.439
+casual-editkit with raising the menu, which is bound to
+
+00:10:54.440 --> 00:10:58.919
+C-o. You'll see the menu pop up here. In
+
+00:10:58.920 --> 00:11:02.519
+particular, we want to look at the edit operation. We'll
+
+00:11:02.520 --> 00:11:08.679
+press e and we'll see a number of menu items that allow you to
+
+00:11:08.680 --> 00:11:16.239
+make editing transformations to the text, be it marking,
+
+00:11:16.240 --> 00:11:20.239
+copying, killing, transposing, transforming, moving, or
+
+00:11:20.240 --> 00:11:24.279
+deleting the text. You'll see also that there is a submenu
+
+00:11:24.280 --> 00:11:31.996
+for rectangle operations. Let's first...
+
+NOTE Marking and moving
+
+00:11:31.997 --> 00:11:37.406
+Let's actually dig through and look at what's in the Mark submenu.
+
+00:11:37.407 --> 00:11:42.039
+You'll see that there are increments of text in which you can
+
+00:11:42.040 --> 00:11:45.239
+mark. You can mark a word, a sentence, a paragraph, and
+
+00:11:45.240 --> 00:11:49.559
+balanced expression. If we go back, you'll see a similar
+
+00:11:49.560 --> 00:11:57.339
+pattern for copying as well as killing. Transposing.
+
+00:11:57.340 --> 00:12:02.879
+Let's go and try to move a sentence. We have the point there at
+
+00:12:02.880 --> 00:12:07.119
+hello there. We'll move that sentence around. If we
+
+00:12:07.120 --> 00:12:12.119
+press s, we can move it backward or forward. In this case,
+
+00:12:12.120 --> 00:12:16.279
+let's move it forward. We'll press f. You'll see hello
+
+00:12:16.280 --> 00:12:21.639
+there move up a sentence. Then we can also press b to move
+
+00:12:21.640 --> 00:12:29.879
+it back. Then press RET to dismiss. Also, if we wanted
+
+00:12:29.880 --> 00:12:35.199
+to, we can... In this menu particularly, you'll see that we
+
+00:12:35.200 --> 00:12:38.839
+also have cursor navigation, so we can move the point there.
+
+00:12:38.840 --> 00:12:43.039
+That's not in all the menus, but in a good part number of the
+
+00:12:43.040 --> 00:12:47.919
+menus in Casual Edit Kit, you'll see that here. Let's press
+
+00:12:47.920 --> 00:12:53.139
+RET to dismiss that.
+
+NOTE Rectangles
+
+00:12:53.140 --> 00:12:58.643
+Let's actually look at some rectangle operations here.
+
+00:12:58.644 --> 00:13:01.759
+In this case, we have a list with
+
+00:13:01.760 --> 00:13:08.519
+items x, y, and z. Let's say we wanted to prefix each item
+
+00:13:08.520 --> 00:13:14.239
+here with a string. We'll say we want to put in there
+
+00:13:14.240 --> 00:13:21.159
+hello. One way of doing that is to make a rectangle. So
+
+00:13:21.160 --> 00:13:25.719
+if we go into our rectangle menu, first off, what we need to do
+
+00:13:25.720 --> 00:13:31.199
+is define that rectangle region. We'll press m to mark
+
+00:13:31.200 --> 00:13:35.439
+where the point is right there. Then we can use our cursor
+
+00:13:35.440 --> 00:13:39.559
+operation to move the point to define the rectangle. In this
+
+00:13:39.560 --> 00:13:43.839
+case, it's right at the start there. We can use the string
+
+00:13:43.840 --> 00:13:49.679
+insert command, i, to insert hello, colon, and then we'll
+
+00:13:49.680 --> 00:13:54.799
+put a space there to make it look a little nicer. Sure
+
+00:13:54.800 --> 00:13:58.119
+enough, that's in there.
+
+00:13:58.120 --> 00:14:04.975
+We can have access to a number of rectangle commands here.
+
+NOTE Numbering
+
+00:14:04.976 --> 00:14:11.599
+If we wanted to, let's say, number, we can go through that same
+
+00:14:11.600 --> 00:14:16.719
+operation here, define a region, a rectangle region that
+
+00:14:16.720 --> 00:14:22.679
+is, and press n. You'll see that it has incremented a
+
+00:14:22.680 --> 00:14:28.639
+number for each item in that rectangle region. We can also
+
+00:14:28.640 --> 00:14:32.468
+tap u to undo these operations
+
+00:14:32.469 --> 00:14:36.599
+and leave that at that.
+
+NOTE Sorting
+
+00:14:36.600 --> 00:14:47.239
+Sorting. If we select a region here, And we go back. You'll
+
+00:14:47.240 --> 00:14:52.399
+see that the sort submenu is now enabled. Sorting won't work
+
+00:14:52.400 --> 00:14:56.239
+unless you have a region started. That's one of the nice
+
+00:14:56.240 --> 00:15:01.679
+things about transient is that it allows you to visually
+
+00:15:01.680 --> 00:15:09.079
+enable or disable command items with regards to whatever
+
+00:15:09.080 --> 00:15:12.559
+the current state or context is here. In this case is
+
+00:15:12.560 --> 00:15:17.359
+whether or not you have a region highlighted. Let's say we
+
+00:15:17.360 --> 00:15:22.879
+want to sort these two columns of numbers and so there's a
+
+00:15:22.880 --> 00:15:29.759
+command called n here which is numeric fields. Let's choose that
+
+00:15:29.760 --> 00:15:35.919
+here. Sure enough we get that. But there's a nice twist
+
+00:15:35.920 --> 00:15:39.679
+there. Let's say we wanted to sort on the second column.
+
+00:15:39.680 --> 00:15:48.919
+Let's move our point back up to here and we'll mark that.
+
+00:15:48.920 --> 00:15:52.799
+Since everything is in a continuous line, we can sort of
+
+00:15:52.800 --> 00:15:55.948
+pretend that this region is actually a paragraph
+
+00:15:55.949 --> 00:15:59.359
+and mark that.
+
+00:15:59.360 --> 00:16:06.999
+We'll go and select our sorting routine. But now we need to
+
+00:16:07.000 --> 00:16:11.319
+figure out how to make numeric fields sort on the second
+
+00:16:11.320 --> 00:16:16.359
+column. In transient, if we press a ?, that
+
+00:16:16.360 --> 00:16:21.439
+gives us basically a intermediate help section where, if we
+
+00:16:21.440 --> 00:16:27.279
+press a key binding, it will tell us or load the docstring for
+
+00:16:27.280 --> 00:16:33.039
+the command that's there. That command in this case is
+
+00:16:33.040 --> 00:16:40.039
+sort-numeric-fields. It requires an argument. That
+
+00:16:40.040 --> 00:16:44.079
+argument can be passed using the prefix argument,
+
+00:16:44.080 --> 00:16:52.119
+C-u. Press q. Let's do that. In this case, we
+
+00:16:52.120 --> 00:16:58.679
+want to check or use the value 2 and press n. Sure enough,
+
+00:16:58.680 --> 00:17:04.339
+that region is sorted with respect to the second column.
+
+NOTE Casual has transformed my user experience with Emacs
+
+00:17:04.340 --> 00:17:12.159
+Before Casual, so many powerful Emacs commands were not
+
+00:17:12.160 --> 00:17:15.559
+available to me because they were too hard to recall or I
+
+00:17:15.560 --> 00:17:19.879
+could not discover them. Making Casual has changed that,
+
+00:17:19.880 --> 00:17:24.359
+letting me reimagine more positively my user experience
+
+00:17:24.360 --> 00:17:29.199
+with Emacs. If you're interested in any of what I've shown
+
+00:17:29.200 --> 00:17:34.450
+today, I invite you to try out Casual.
+
+NOTE Thanks and acknowledgements
+
+00:17:34.451 --> 00:17:37.032
+Before I leave, my thanks and acknowledgments
+
+00:17:37.033 --> 00:17:38.679
+go out to the following people.
+
+00:17:38.680 --> 00:17:43.399
+First, to Jonas Bernoulli for making Transient and Magit.
+
+00:17:43.400 --> 00:17:49.319
+Casual would not be possible without your work. Next, to
+
+00:17:49.320 --> 00:17:54.399
+Psionic-k for writing Transient Showcase. It showed me how I
+
+00:17:54.400 --> 00:17:59.439
+could build casual. To all the casual users and their
+
+00:17:59.440 --> 00:18:05.319
+support, I am genuinely appreciative. Finally, to Jon
+
+00:18:05.320 --> 00:18:08.759
+Snader for writing the kind posts on Casual on the Irreal
+
+00:18:08.760 --> 00:18:10.519
+website. Thank you.
+
+00:18:10.520 --> 00:18:15.797
+Casual can be found on MELPA,
+
+00:18:15.798 --> 00:18:23.720
+and its repository is hosted on GitHub.
diff --git a/2024/captions/emacsconf-2024-color--colour-your-emacs-with-ease--ryota--answers.vtt b/2024/captions/emacsconf-2024-color--colour-your-emacs-with-ease--ryota--answers.vtt
new file mode 100644
index 00000000..3266d254
--- /dev/null
+++ b/2024/captions/emacsconf-2024-color--colour-your-emacs-with-ease--ryota--answers.vtt
@@ -0,0 +1,748 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:06.039
+... Org mode and kind of note taking. And that meant that it wasn't
+
+00:00:06.040 --> 00:00:10.679
+too difficult to get started with. But when I started more on
+
+00:00:10.680 --> 00:00:14.959
+the coding side, because I'm a software engineer, you know,
+
+00:00:14.960 --> 00:00:20.679
+on the day job. That kind of got me to think that the colors and
+
+00:00:20.680 --> 00:00:26.479
+how themes look, how Emacs looks, was affecting. And that's
+
+00:00:26.480 --> 00:00:30.719
+how it kind of came to picture. So I could have kind of gone
+
+00:00:30.720 --> 00:00:34.919
+into a little bit more coding side of things, but I didn't
+
+00:00:34.920 --> 00:00:38.319
+want to stress too much on the talk. So that's why I kind of
+
+00:00:38.320 --> 00:00:43.439
+stuck to a very small bits of Org Mode and Elisp. And yeah, I
+
+00:00:43.440 --> 00:00:48.159
+think that's how it came about. Yeah, but that's perfectly
+
+00:00:48.160 --> 00:00:52.119
+fine. That's one of the chief reasons why we have two tracks
+
+00:00:52.120 --> 00:00:54.799
+for Emacs content. We've had those for the last four years, I
+
+00:00:54.800 --> 00:00:57.279
+think. It's because we have a general track, which is more
+
+00:00:57.280 --> 00:00:59.239
+geared towards people who want a general... well,
+
+00:00:59.240 --> 00:01:01.799
+generally people who are highly interested into org mode
+
+00:01:01.800 --> 00:01:03.999
+and not necessarily into coding, but just to whet their
+
+00:01:04.000 --> 00:01:08.399
+appetite to what can be done. And on the DevTrack, we have,
+
+00:01:08.400 --> 00:01:11.519
+well, this year we have talked about Rust and about other
+
+00:01:11.520 --> 00:01:13.559
+fancy things that people can do with Emacs. But, you know,
+
+00:01:13.560 --> 00:01:15.559
+I'm also a software engineer, you know, we do this all the
+
+00:01:15.560 --> 00:01:18.079
+time. Sometimes it's just fine to just chat about colors and
+
+00:01:18.080 --> 00:01:20.959
+just the results of what we develop rather than how the
+
+00:01:20.960 --> 00:01:24.839
+sausage is made. So that's completely fine too. I'm not sure
+
+NOTE Why colour?
+
+00:01:24.840 --> 00:01:28.879
+if you mentioned it in your presentation, but why color, out
+
+00:01:28.880 --> 00:01:31.479
+of all the things you could be ricing on your setup, why were
+
+00:01:31.480 --> 00:01:37.559
+you so interested about colors? I think it was just that
+
+00:01:37.560 --> 00:01:40.239
+mainly that I had to do a lot of context switch between
+
+00:01:40.240 --> 00:01:44.119
+different languages. Elisp is not the one because Elisp is
+
+00:01:44.120 --> 00:01:48.079
+something that I would do for Emacs editing. But for day job,
+
+00:01:48.080 --> 00:01:52.999
+I had to use mainly Go as I work with Kubernetes quite a bit. So
+
+00:01:53.000 --> 00:01:58.119
+Go and also web languages like TypeScript, JavaScript, you
+
+00:01:58.120 --> 00:02:01.519
+know, those languages, where I felt that whenever I was
+
+00:02:01.520 --> 00:02:05.359
+switching context to a different language, I felt that it's
+
+00:02:05.360 --> 00:02:08.839
+kind of annoying to see all the different colors in
+
+00:02:08.840 --> 00:02:11.999
+languages like TypeScript, where, you know, VS Code way
+
+00:02:12.000 --> 00:02:15.799
+would be very full of colors. which I felt that, okay, like,
+
+00:02:15.800 --> 00:02:18.759
+why do I have to have that many different colors on let and
+
+00:02:18.760 --> 00:02:23.759
+constant or the keywords where it could be just a white text?
+
+00:02:23.760 --> 00:02:27.679
+It didn't have to be that colorful. So that was the bit, the
+
+00:02:27.680 --> 00:02:31.399
+most annoying bit when it came to context switching. And I
+
+00:02:31.400 --> 00:02:34.759
+felt that that just didn't happen in the Org Mode or writing
+
+00:02:34.760 --> 00:02:40.799
+in general. So I had to find a way to make it work, make more
+
+00:02:40.800 --> 00:02:46.199
+coding make my coding more kind of friendly to me and that's
+
+00:02:46.200 --> 00:02:50.039
+when I thought maybe just the colors are something that's
+
+00:02:50.040 --> 00:02:54.039
+bothering me and it actually was the case and that's how I got
+
+00:02:54.040 --> 00:02:59.359
+to more into the color kind of journey and got too much into it
+
+00:02:59.360 --> 00:03:04.039
+I guess. Right, and was it what eventually motivated you to
+
+NOTE What motivated you to learn Elisp and get into the Emacs core?
+
+00:03:04.040 --> 00:03:06.999
+learn Elisp and to get into the Emacs core? Because it's
+
+00:03:07.000 --> 00:03:09.399
+funny how you find plenty of people using Emacs in Org Mode
+
+00:03:09.400 --> 00:03:11.399
+and then they find something that they take particular
+
+00:03:11.400 --> 00:03:15.039
+issue with, for you it's the color, and then they just go all
+
+00:03:15.040 --> 00:03:18.039
+in trying to pull the rope as far as they can to try to
+
+00:03:18.040 --> 00:03:21.359
+understand as much as possible about what code is managing
+
+00:03:21.360 --> 00:03:23.879
+this part of the application. Like for you it was color, for
+
+00:03:23.880 --> 00:03:27.999
+me it was the org agenda, I desperately wanted to make Org
+
+00:03:28.000 --> 00:03:32.439
+Agenda do something that it wasn't able to do. And five
+
+00:03:32.440 --> 00:03:35.199
+years, well, actually, no, 10 years later, I find myself
+
+00:03:35.200 --> 00:03:38.199
+hosting Emacs Cons. So, you never know just how far you're
+
+00:03:38.200 --> 00:03:40.399
+going to be pulling this rope. So, it's really interesting
+
+00:03:40.400 --> 00:03:44.679
+for me that my call was this. But back to the question, is this
+
+00:03:44.680 --> 00:03:47.759
+what eventually motivated you to get into Elisp and the core
+
+00:03:47.760 --> 00:03:53.439
+of Emacs? I think that the original journey to move to Emacs
+
+00:03:53.440 --> 00:03:56.959
+was around keybindings that I got annoyed with with other
+
+00:03:56.960 --> 00:03:59.839
+solutions, not just, you know, not speaking of Emacs
+
+00:03:59.840 --> 00:04:02.879
+keybinding or anything, like anything in general. The main
+
+00:04:02.880 --> 00:04:07.519
+reason was that I used Dovrak keyboard layout, and that
+
+00:04:07.520 --> 00:04:10.799
+meant that all the C-c, C-v, C-p, whatever, It just is
+
+00:04:10.800 --> 00:04:13.919
+all over the place. So I had to find something that could work
+
+00:04:13.920 --> 00:04:17.039
+for me. And Emacs was a solution that allowed me to do
+
+00:04:17.040 --> 00:04:20.479
+anything. And that's the kind of the journey that it
+
+00:04:20.480 --> 00:04:24.039
+originally started. And from there, started tweaking org
+
+00:04:24.040 --> 00:04:28.439
+mode and writing experience to be tuned to my liking. Color
+
+00:04:28.440 --> 00:04:32.559
+was another thing that I thought, OK, maybe I could do it
+
+00:04:32.560 --> 00:04:36.239
+easily with org mode. And when I started to use more of the
+
+00:04:36.240 --> 00:04:40.799
+coding side of things on Emacs, I felt that, okay, that was
+
+00:04:40.800 --> 00:04:45.159
+something I needed to solve. So Elisp was always kind of
+
+00:04:45.160 --> 00:04:48.439
+just a toolkit that, you know, I knew that it was available. I
+
+00:04:48.440 --> 00:04:52.199
+knew that it would be something that I want to be able to use.
+
+00:04:52.200 --> 00:04:57.159
+So I think in a way color was a good segue to understand how I
+
+00:04:57.160 --> 00:05:03.359
+can kind of work out more of a complex logic with the editor
+
+00:05:03.360 --> 00:05:06.359
+without having to write JavaScript or things that I don't
+
+00:05:06.360 --> 00:05:09.399
+particularly like. So yeah, I think the journey around the
+
+00:05:09.400 --> 00:05:11.879
+functional languages, functional kind of programming was
+
+00:05:11.880 --> 00:05:15.439
+always something that I was keen about. And yeah, the whole
+
+00:05:15.440 --> 00:05:18.479
+journey kind of made sense for me. And then moving on to the
+
+00:05:18.480 --> 00:05:21.999
+color was just one way to get more involved in. So I can
+
+00:05:22.000 --> 00:05:26.279
+totally see that this journey kind of making to a little bit
+
+00:05:26.280 --> 00:05:30.759
+different angle But yeah, we shall see how that really turns
+
+00:05:30.760 --> 00:05:33.799
+out. But for now, I think I'm happy with the color setup. Now I
+
+00:05:33.800 --> 00:05:37.599
+can really focus on the coding. Well, that's all good. And
+
+00:05:37.600 --> 00:05:40.839
+I'm sure plenty of people listening to you now, you know,
+
+00:05:40.840 --> 00:05:43.639
+find this relatable, how they eventually got into
+
+00:05:43.640 --> 00:05:46.879
+programming. Like for you, you did say that you were a
+
+00:05:46.880 --> 00:05:50.519
+software engineer now. But I found plenty of people,
+
+00:05:50.520 --> 00:05:54.679
+especially doing workshops, that just started you know,
+
+00:05:54.680 --> 00:05:57.639
+their software engineering journey just with Emacs and
+
+00:05:57.640 --> 00:05:59.239
+they just realized they were doing something completely
+
+00:05:59.240 --> 00:06:01.999
+different, like I was studying humanities. But then you
+
+00:06:02.000 --> 00:06:05.079
+touch Emacs and you realize, yeah, this whole programming
+
+00:06:05.080 --> 00:06:06.679
+shtick is actually pretty damn cool.
+
+00:06:06.680 --> 00:06:09.079
+And then you find yourself again,
+
+00:06:09.080 --> 00:06:10.999
+five to 10 years later, becoming a software
+
+00:06:11.000 --> 00:06:12.999
+engineer. So yeah, that's all good.
+
+00:06:13.000 --> 00:06:13.919
+So we do have a couple of
+
+00:06:13.920 --> 00:06:18.439
+questions and I'd like to move into them so that I, I mean,
+
+00:06:18.440 --> 00:06:22.399
+people have questions and for me it's okay for me to chat with
+
+00:06:22.400 --> 00:06:25.119
+you but obviously it's better if people ask you the question
+
+00:06:25.120 --> 00:06:27.639
+themselves. And again, if you want to ask questions to Ryota
+
+00:06:27.640 --> 00:06:31.039
+directly, feel free to join us on BBB and whenever we're done
+
+00:06:31.040 --> 00:06:33.519
+with the questions on the pad, I'm more than happy
+
+00:06:33.520 --> 00:06:35.319
+to let you ask your questions live.
+
+NOTE Q: Is there any intention to create a library for working with more experimental color spaces? Pulling code out of Hasliberg for this purpose, perhaps?
+
+00:06:35.320 --> 00:06:37.799
+All right, so starting with the first question,
+
+00:06:37.800 --> 00:06:39.999
+is there any intention to create a library
+
+00:06:40.000 --> 00:06:42.559
+for working with more experimental color spaces, pulling
+
+00:06:42.560 --> 00:06:45.679
+code out of Hasliberg for this purpose, perhaps? Although I
+
+00:06:45.680 --> 00:06:50.479
+do not know. Hasliberg, you might? Yeah, Hasliberg. And to
+
+00:06:50.480 --> 00:06:55.119
+answer the question, started the journey just for myself
+
+00:06:55.120 --> 00:06:58.479
+and I didn't think that it would be actually useful for other
+
+00:06:58.480 --> 00:07:03.319
+use cases and this conference talk just came about kind of
+
+00:07:03.320 --> 00:07:08.079
+out of sheer luck really. So the idea I think I can definitely
+
+00:07:08.080 --> 00:07:12.199
+work it out and I don't think there will be too, the original
+
+00:07:12.200 --> 00:07:17.639
+code that I started with was I had to use some color space and I
+
+00:07:17.640 --> 00:07:22.479
+started with sRGB and then went to HSL and then went to LCH. So
+
+00:07:22.480 --> 00:07:25.479
+I think there has been quite a bit that I learned from it. At
+
+00:07:25.480 --> 00:07:29.999
+the same time, I may be tempted to actually maybe perhaps
+
+00:07:30.000 --> 00:07:34.159
+contribute back to ct.el rather than creating my own. I
+
+00:07:34.160 --> 00:07:36.279
+think that would make more sense perhaps.
+
+00:07:36.280 --> 00:07:39.479
+But for my own kind of taste that I thought
+
+00:07:39.480 --> 00:07:42.839
+that it would be something I can work out in my theme,
+
+00:07:42.840 --> 00:07:46.879
+but I don't have any I think, you know, making a
+
+00:07:46.880 --> 00:07:49.999
+library is definitely something that I can think about, but
+
+00:07:50.000 --> 00:07:53.679
+perhaps maybe making it too many packages isn't exactly
+
+00:07:53.680 --> 00:07:57.319
+what I want. But for my own use case, I think I just wanted to
+
+00:07:57.320 --> 00:07:59.919
+have something that just didn't have any external
+
+00:07:59.920 --> 00:08:04.119
+dependency so that I can use the vanilla Emacs with my
+
+00:08:04.120 --> 00:08:09.639
+colors. I think that's how it started, but I'm definitely up
+
+00:08:09.640 --> 00:08:13.719
+for it if there is interest about it. Yeah, well, thank you
+
+00:08:13.720 --> 00:08:15.279
+for this. It's always good to contribute.
+
+00:08:15.280 --> 00:08:16.399
+I'm tempted to say
+
+00:08:16.400 --> 00:08:18.279
+that's how they get you. You know, you do something really
+
+00:08:18.280 --> 00:08:23.639
+cool and you share it with people and they have the, you know,
+
+00:08:23.640 --> 00:08:27.239
+they just ask you, oh, do you have your code online? And you
+
+00:08:27.240 --> 00:08:29.399
+realize, no, I haven't pushed it. And then they start
+
+00:08:29.400 --> 00:08:32.359
+pressing you on. well, you need to do this, this is amazing
+
+00:08:32.360 --> 00:08:35.879
+and you need to share it. You know, I had plenty of people ask
+
+00:08:35.880 --> 00:08:40.519
+me to share my dot files when I was tackling the org agenda
+
+00:08:40.520 --> 00:08:44.039
+issue that I mentioned earlier. And yeah, eventually when
+
+00:08:44.040 --> 00:08:47.479
+you get to publishing your stuff, you also feel great
+
+00:08:47.480 --> 00:08:50.279
+because you're putting a little bit of your intelligence
+
+00:08:50.280 --> 00:08:53.679
+into the world and it can be the start of the journey for
+
+00:08:53.680 --> 00:08:56.239
+someone else. You know, maybe someone will find your
+
+00:08:56.240 --> 00:08:58.679
+library at some point and realize, yeah, I wanted to do
+
+00:08:58.680 --> 00:09:01.239
+something slightly differently. and then they either
+
+00:09:01.240 --> 00:09:04.439
+contribute to a library or they make their own but it's a
+
+00:09:04.440 --> 00:09:07.359
+complete journey that starts with just people taking the
+
+00:09:07.360 --> 00:09:12.039
+time to publish the content of the brain basically. Yeah,
+
+00:09:12.040 --> 00:09:15.519
+that's the power of open source now. It's just how we really
+
+00:09:15.520 --> 00:09:19.119
+appreciate the open source culture being cultivated
+
+00:09:19.120 --> 00:09:23.159
+throughout so many years. And yeah, this is something that
+
+00:09:23.160 --> 00:09:26.999
+I'm definitely keen about. So yeah, open for suggestions.
+
+00:09:27.000 --> 00:09:30.079
+And exactly, that's how I started with the journey. And
+
+00:09:30.080 --> 00:09:33.519
+yeah, while this is very experimental and very personal,
+
+00:09:33.520 --> 00:09:38.199
+yeah, I'm not, you know, tied down to one particular way
+
+00:09:38.200 --> 00:09:41.399
+only. So yeah we'll be open to suggestions like this one
+
+00:09:41.400 --> 00:09:44.719
+which I would definitely think about. Yeah that's amazing
+
+00:09:44.720 --> 00:09:46.999
+and just to be clear you know this is not a there's no
+
+00:09:47.000 --> 00:09:50.639
+incentive one. I'm not pushing you to publish your library.
+
+00:09:50.640 --> 00:09:53.799
+You know it was very personal for you and at the end if you
+
+00:09:53.800 --> 00:09:56.199
+believe it might be useful for others it's a nice thing to
+
+00:09:56.200 --> 00:09:58.799
+eventually think about publishing it. But just the fact
+
+00:09:58.800 --> 00:10:01.439
+that you showed up at EmacsConf... Sorry, I'm
+
+00:10:01.440 --> 00:10:02.639
+starting to lose my voice on the morning
+
+00:10:02.640 --> 00:10:03.839
+of the first day. That's
+
+00:10:03.840 --> 00:10:07.639
+not boding well for the two next days. I mean, just one day.
+
+00:10:07.640 --> 00:10:09.159
+But just the
+
+00:10:09.160 --> 00:10:13.199
+fact that you're showing up at EmacsConf and sharing about
+
+00:10:13.200 --> 00:10:17.039
+all of this, the process, how you got to it eventually, it's
+
+00:10:17.040 --> 00:10:19.639
+also a part of sharing. And I think it's also amazing in its
+
+00:10:19.640 --> 00:10:26.039
+own way. Absolutely. Okay, I'm going to try to read the next
+
+00:10:26.040 --> 00:10:31.639
+question and then try to cough a little bit. So can we have...
+
+00:10:31.640 --> 00:10:36.759
+Oh, sorry, Bala. Sorry. I was the one who asked the question.
+
+00:10:36.760 --> 00:10:40.279
+I thought I could ask it live here rather than... Thank you.
+
+00:10:40.280 --> 00:10:46.039
+I'll go cough a little bit. So here I am. Thanks, Ryota, for
+
+00:10:46.040 --> 00:10:50.519
+the nice talk. This is great. I loved it. Your attention to
+
+00:10:50.520 --> 00:10:51.519
+detail was awesome.
+
+NOTE Q: Can we have a dark as well as light theme variations made from your theme?
+
+00:10:51.520 --> 00:10:54.959
+So I was just looking at the code and I was
+
+00:10:54.960 --> 00:10:58.759
+wondering, do you have a dark and a light theme variation
+
+00:10:58.760 --> 00:11:02.599
+which can be made from your theme? Or do you have to customize
+
+00:11:02.600 --> 00:11:06.199
+it every time? That was my question. And thanks for that.
+
+00:11:06.200 --> 00:11:09.679
+Thank you very much. I appreciate your feedback and
+
+00:11:09.680 --> 00:11:15.039
+questions. So to answer the question, the short answer is
+
+00:11:15.040 --> 00:11:18.439
+that I do have both dark and light themes with some sorts of
+
+00:11:18.440 --> 00:11:22.199
+standard colors that I personally liked. And there were a
+
+00:11:22.200 --> 00:11:26.679
+few things that I showed in the demo. where I showed, I think,
+
+00:11:26.680 --> 00:11:29.999
+three different dark theme colors. So light theme is
+
+00:11:30.000 --> 00:11:31.559
+definitely something that I can do.
+
+00:11:31.560 --> 00:11:33.759
+And the idea around Hasliberg theme
+
+00:11:33.760 --> 00:11:36.279
+and just my theming in general was that
+
+00:11:36.280 --> 00:11:39.599
+when I feel like I want to work in dark theme and when I want to
+
+00:11:39.600 --> 00:11:42.159
+work in the standard way, I would just use the standard color.
+
+00:11:42.160 --> 00:11:44.919
+But when I feel like maybe it's just so cold that I want
+
+00:11:44.920 --> 00:11:48.519
+to have a bit of a warm colors near me, I would use the orange
+
+00:11:48.520 --> 00:11:52.279
+theme, without changing too much of the kind of general
+
+00:11:52.280 --> 00:11:55.639
+feeling and experience. So that can be said for the light
+
+00:11:55.640 --> 00:11:58.959
+theme as well. So there is something and the kind of
+
+00:11:58.960 --> 00:12:04.839
+customization isn't that difficult to extend. So I do have
+
+00:12:04.840 --> 00:12:09.359
+both dark and light, but primarily I'm just looking at the
+
+00:12:09.360 --> 00:12:12.839
+dark theme as my main driver. But yeah, they are both
+
+00:12:12.840 --> 00:12:18.239
+available. Great. Thank you so much. I will definitely try
+
+00:12:18.240 --> 00:12:21.719
+your theme out. I'm definitely on the lookout for a nice,
+
+00:12:21.720 --> 00:12:26.119
+friendly theme. Thank you very much. As I said, this is a
+
+00:12:26.120 --> 00:12:31.279
+personal theme. I'm not sure if it really fits everyone's
+
+00:12:31.280 --> 00:12:37.159
+need, but it is one inspiration that I hope that can lead to
+
+00:12:37.160 --> 00:12:40.639
+another nice theming that could work for someone
+
+00:12:40.640 --> 00:12:44.199
+specifically for some use cases. I don't have to solve
+
+00:12:44.200 --> 00:12:48.719
+everyone's problem. Yeah, and I mean, it was sufficient to
+
+00:12:48.720 --> 00:12:50.719
+be inspirational to people. I mean, just Bala just
+
+00:12:50.720 --> 00:12:53.759
+mentioned it right now, but I'm sure plenty of people who
+
+00:12:53.760 --> 00:12:55.999
+watched live, but also people will be watching in the
+
+00:12:56.000 --> 00:12:58.599
+future, will have the interest to speak by what you've done.
+
+00:12:58.600 --> 00:13:05.079
+So thank you again so much for this. Yep. All right, well, I
+
+00:13:05.080 --> 00:13:09.719
+don't see any further questions. So I suggest we move
+
+00:13:09.720 --> 00:13:14.279
+towards closure. Ryota, do you have any last words? No, I
+
+00:13:14.280 --> 00:13:17.079
+don't. So yeah, thank you very much for attending. And it was
+
+00:13:17.080 --> 00:13:20.519
+great fun putting this together. And I really didn't think
+
+00:13:20.520 --> 00:13:24.759
+that I would be talking about my personal colors and
+
+00:13:24.760 --> 00:13:27.759
+personal favorites, like orange being my favorite color.
+
+00:13:27.760 --> 00:13:30.119
+This wouldn't be something that I would say out in any
+
+00:13:30.120 --> 00:13:34.159
+conference, to be honest. But it just came out to be. And
+
+00:13:34.160 --> 00:13:37.479
+happy that I had a chance. So thank you very much for giving me
+
+00:13:37.480 --> 00:13:41.439
+the opportunity to talk. in this amazing conference and
+
+00:13:41.440 --> 00:13:44.319
+yeah I can't just wait to check out other talks which you know
+
+00:13:44.320 --> 00:13:46.919
+I know that there isn't you know other talks that are
+
+00:13:46.920 --> 00:13:50.199
+happening right now I was actually wanted to to join them and
+
+00:13:50.200 --> 00:13:52.759
+check check that out so I will probably do that right now.
+
+00:13:52.760 --> 00:13:56.839
+Well, sure. Well, I won't hold you any longer then. Thank
+
+00:13:56.840 --> 00:13:59.759
+you. For me, it was just amazing to, you know, generally when
+
+00:13:59.760 --> 00:14:01.639
+you ask someone what their favorite color, you know, they
+
+00:14:01.640 --> 00:14:04.399
+just tell you orange or blue or whatever. They don't go then
+
+00:14:04.400 --> 00:14:07.039
+to chat about 20 minutes about their favorite color and how
+
+00:14:07.040 --> 00:14:10.079
+they tuned their entire editor to work exactly around their
+
+00:14:10.080 --> 00:14:14.759
+favorite colors. So it was inspiring. And I also want to try
+
+00:14:14.760 --> 00:14:17.999
+it out, frankly, because my theme has been utterly bad for
+
+00:14:18.000 --> 00:14:20.639
+the last five years and I need some change into my life. All
+
+00:14:20.640 --> 00:14:24.319
+right. Thank you so much for your time. Thank you very much,
+
+00:14:24.320 --> 00:14:30.640
+everyone. Cheers. Bye-bye.
+
diff --git a/2024/captions/emacsconf-2024-color--colour-your-emacs-with-ease--ryota--main--chapters.vtt b/2024/captions/emacsconf-2024-color--colour-your-emacs-with-ease--ryota--main--chapters.vtt
new file mode 100644
index 00000000..8ea4ab36
--- /dev/null
+++ b/2024/captions/emacsconf-2024-color--colour-your-emacs-with-ease--ryota--main--chapters.vtt
@@ -0,0 +1,20 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:58.667
+Introduction
+
+00:00:58.668 --> 00:03:42.119
+What colour do you like?
+
+00:03:42.120 --> 00:06:25.884
+Colour spaces: HSL, LCH , and more
+
+00:06:25.885 --> 00:08:08.399
+color.el and ct.el
+
+00:08:08.400 --> 00:11:06.239
+Hasliberg theme
+
+00:11:06.240 --> 00:11:48.400
+Wrap up
diff --git a/2024/captions/emacsconf-2024-color--colour-your-emacs-with-ease--ryota--main.vtt b/2024/captions/emacsconf-2024-color--colour-your-emacs-with-ease--ryota--main.vtt
new file mode 100644
index 00000000..e9bbd7ca
--- /dev/null
+++ b/2024/captions/emacsconf-2024-color--colour-your-emacs-with-ease--ryota--main.vtt
@@ -0,0 +1,541 @@
+WEBVTT captioned by sachac
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:11.327
+Hi, EmacsConf. This is "Colour your Emacs with ease".
+
+00:00:11.328 --> 00:00:14.848
+I'm Ryota Sawada, and today's agenda is:
+
+00:00:14.849 --> 00:00:16.649
+start with a brief introduction.
+
+00:00:16.650 --> 00:00:19.719
+I will be talking about colours quite a bit.
+
+00:00:19.720 --> 00:00:21.452
+What colours do you like?
+
+00:00:21.453 --> 00:00:23.599
+Colour spaces and some packages such
+
+00:00:23.600 --> 00:00:27.879
+as color.el, ct.el. I'll be touching on a theme called
+
+00:00:27.880 --> 00:00:31.056
+Hasliberg theme, which I created,
+
+00:00:31.057 --> 00:00:34.139
+before wrapping up the talk.
+
+00:00:34.140 --> 00:00:36.959
+A quick introduction about the talk. The slide is
+
+00:00:36.960 --> 00:00:40.559
+available as an Org mode file at Codeberg. If you're
+
+00:00:40.560 --> 00:00:43.519
+looking at it from Org mode, you probably want to have
+
+00:00:43.520 --> 00:00:47.639
+rainbow mode turned on for the best viewing. This is the
+
+00:00:47.640 --> 00:00:52.559
+case with the presentation today. I'm Ryota Sawada and I'm
+
+00:00:52.560 --> 00:00:58.667
+available at rytswd at usual places.
+
+NOTE What colour do you like?
+
+00:00:58.668 --> 00:01:01.290
+What colour do you like?
+
+00:01:01.291 --> 00:01:04.999
+You might be able to tell I like orange. That's
+
+00:01:05.000 --> 00:01:07.856
+the colour that I use often.
+
+00:01:07.857 --> 00:01:09.958
+Emacs gives me all the control I want,
+
+00:01:09.959 --> 00:01:13.119
+so naturally I wanted to make it aesthetically
+
+00:01:13.120 --> 00:01:16.023
+pleasing to my taste, which meant that
+
+00:01:16.024 --> 00:01:19.725
+I would like to have a dark theme, subtle theme
+
+00:01:19.726 --> 00:01:23.767
+with orange as a main accent colour, but not
+
+00:01:23.768 --> 00:01:26.803
+too orange, so not everything very orange.
+
+00:01:26.804 --> 00:01:29.673
+Maybe use another blue-ish colour
+
+00:01:29.674 --> 00:01:32.929
+as another accent. Note that this presentation is
+
+00:01:32.930 --> 00:01:36.199
+based on the Hasliberg theme, more on that
+
+00:01:36.200 --> 00:01:40.599
+later. But when I started my Emacs journey, I didn't start
+
+00:01:40.600 --> 00:01:45.199
+with creating a new theme from get-go. I started with a theme
+
+00:01:45.200 --> 00:01:49.479
+called Nova Theme. I really liked it. I made a few tweaks
+
+00:01:49.480 --> 00:01:55.039
+around Org Mode and headings, so that they were a bit more was
+
+00:01:55.040 --> 00:02:00.759
+my liking, which was around orange being sprinkled across.
+
+00:02:00.760 --> 00:02:07.959
+I got to it very nice looking and I really liked it, but when
+
+00:02:07.960 --> 00:02:13.839
+I started a lot of coding tasks with it, I realized one
+
+00:02:13.840 --> 00:02:19.799
+thing: that it was very colourful, and in a way, distracting.
+
+00:02:19.800 --> 00:02:24.039
+it actually wasn't about Nova Theme's fault. It was just
+
+00:02:24.040 --> 00:02:27.479
+many editors, including Emacs and VS Code and other editors
+
+00:02:27.480 --> 00:02:31.679
+and modern themes, are filled with colours. Let's have a
+
+00:02:31.680 --> 00:02:38.039
+look. At the top left, you can see Nova theme with a bit of a
+
+00:02:38.040 --> 00:02:42.239
+pale greenish background with a few colours. Purple,
+
+00:02:42.240 --> 00:02:47.399
+pink, blue, green. You can see some colours like that with
+
+00:02:47.400 --> 00:02:51.519
+Nova theme. Nice looking colours, but still colourful. Modus
+
+00:02:51.520 --> 00:02:56.079
+Vivendi Tinted, bottom left, is also very nice looking
+
+00:02:56.080 --> 00:02:59.360
+modern theme, but quite colourful. The same can be said
+
+00:02:59.361 --> 00:03:03.134
+for ef-themes, owl edition at top right,
+
+00:03:03.135 --> 00:03:07.979
+and Doom Noe as another, bottom right.
+
+00:03:07.980 --> 00:03:13.759
+That led me to think: how can I make my code editing
+
+00:03:13.760 --> 00:03:18.599
+and coding tasks not too distracting, and I can focus on
+
+00:03:18.600 --> 00:03:22.759
+writing code. That was something I could manage with Org
+
+00:03:22.760 --> 00:03:26.399
+Mode, where I just specifically, basically used orange
+
+00:03:26.400 --> 00:03:29.399
+shades and not too much more. That's what you're seeing at
+
+00:03:29.400 --> 00:03:33.519
+the moment. I wanted to do something similar with coding
+
+00:03:33.520 --> 00:03:37.959
+and any general code. That led me to the journey of
+
+00:03:37.960 --> 00:03:42.119
+creating my own theme.
+
+NOTE Colour spaces: HSL, LCH , and more
+
+00:03:42.120 --> 00:03:44.679
+But before going to the theme, I need to talk about colour
+
+00:03:44.680 --> 00:03:49.079
+spaces. sRGB, standard RGB, is probably something that
+
+00:03:49.080 --> 00:03:53.439
+many people are familiar with. HSL is for hue, saturation,
+
+00:03:53.440 --> 00:03:58.359
+lightness. LCH is for luminance or lightness, chroma, and
+
+00:03:58.360 --> 00:04:03.319
+hue. Those are the colour spaces probably common used in
+
+00:04:03.320 --> 00:04:07.999
+various spaces, but when it comes to perceptual uniformity,
+
+00:04:08.000 --> 00:04:11.599
+there is an important difference between the colour
+
+00:04:11.600 --> 00:04:14.799
+spaces. Human perception of colour is not very
+
+00:04:14.800 --> 00:04:17.879
+straightforward. We can see in the reference here...
+
+00:04:17.880 --> 00:04:19.506
+Let's have a look.
+
+00:04:19.507 --> 00:04:23.159
+At the top you can see the shade coming from left
+
+00:04:23.160 --> 00:04:26.370
+green to the right blue,
+
+00:04:26.371 --> 00:04:30.959
+and in the top image, you can see half of
+
+00:04:30.960 --> 00:04:34.520
+it, perhaps, is very similar green colour
+
+00:04:34.521 --> 00:04:36.141
+and then when it comes to blue,
+
+00:04:36.142 --> 00:04:40.239
+you can see more of the different colour gradients
+
+00:04:40.240 --> 00:04:45.559
+coming into play. The bottom colour space is based on a
+
+00:04:45.560 --> 00:04:50.479
+perceptually uniform colour space, which gives us a bit more
+
+00:04:50.480 --> 00:04:55.039
+evenly distributed colour gradient, which will be
+
+00:04:55.040 --> 00:04:59.039
+something more suitable for deciding on the theme setup and
+
+00:04:59.040 --> 00:05:03.999
+the colour setup, where you can have various themes that are
+
+00:05:04.000 --> 00:05:10.439
+defined for human perceptions.
+
+00:05:10.440 --> 00:05:14.319
+Perceptual uniformity is important. For that, it is
+
+00:05:14.320 --> 00:05:17.879
+important to mention about CIE, or "International
+
+00:05:17.880 --> 00:05:23.479
+Commission of Illumination" in English. They created
+
+00:05:23.480 --> 00:05:29.479
+important colour spaces called CIE XYZ which was from 1931,
+
+00:05:29.480 --> 00:05:33.319
+CIELAB, and LUV, 1976,
+
+00:05:33.320 --> 00:05:37.519
+respectively. Those are the colour spaces used in various
+
+00:05:37.520 --> 00:05:41.839
+fields and industries and still relevant. There is a
+
+00:05:41.840 --> 00:05:44.898
+quite a bit that you can read up on.
+
+00:05:44.899 --> 00:05:48.960
+I'm not a colour expert so have some references here,
+
+00:05:48.961 --> 00:05:52.519
+but the TLDR of all of that is
+
+00:05:52.520 --> 00:05:57.525
+consider using LCH variants over RGB or HSL
+
+00:05:57.526 --> 00:06:00.606
+for better perceptual uniformity.
+
+00:06:00.607 --> 00:06:03.959
+Specifically CIE Lab-based LCH,
+
+00:06:03.960 --> 00:06:06.709
+which is often called Lab LCH
+
+00:06:06.710 --> 00:06:10.359
+or just LCH. CIELUV-based LCH
+
+00:06:10.360 --> 00:06:16.519
+is called LUV LCH. There is a new rather modern LCH setup
+
+00:06:16.520 --> 00:06:19.996
+called OK LCH which is based on OK Lab.
+
+00:06:19.997 --> 00:06:22.099
+So those are the colour spaces
+
+00:06:22.100 --> 00:06:24.279
+that are worth looking at when it comes to creating
+
+00:06:24.280 --> 00:06:25.884
+shades.
+
+NOTE color.el and ct.el
+
+00:06:25.885 --> 00:06:29.759
+How do you create shades? Color.el and ct.el are
+
+00:06:29.760 --> 00:06:33.199
+great solutions. You can create shades and different
+
+00:06:33.200 --> 00:06:37.799
+colours based on RGB and hex. You can see in the red example
+
+00:06:37.800 --> 00:06:43.839
+here, FF0000 is a bright red. You can darken it by providing
+
+00:06:43.840 --> 00:06:48.639
+less red values like CC or 88. You can see that the colours
+
+00:06:48.640 --> 00:06:52.839
+are slightly darker than the FF0000. But what if you are
+
+00:06:52.840 --> 00:06:57.439
+working with the complex colours such as FBB151, this
+
+00:06:57.440 --> 00:07:01.879
+particular orange? That's where color.el, ct.el come
+
+00:07:01.880 --> 00:07:05.743
+into play. Color.el is a built-in package in Emacs,
+
+00:07:05.744 --> 00:07:08.340
+so you can use it by just requiring it.
+
+00:07:08.341 --> 00:07:10.399
+color-darken-name and
+
+00:07:10.400 --> 00:07:13.905
+providing the colour with the hex value with 40%
+
+00:07:13.906 --> 00:07:16.886
+gives you a darker orange
+
+00:07:16.887 --> 00:07:20.039
+without doing too much of a colour computation
+
+00:07:20.040 --> 00:07:23.839
+by hand. This hex value is something that Emacs
+
+00:07:23.840 --> 00:07:27.319
+understands and rainbow mode does as well. When it comes
+
+00:07:27.320 --> 00:07:30.839
+to ct.el, it's not a built-in solution, but it's more
+
+00:07:30.840 --> 00:07:34.839
+versatile. It works with various colour spaces so you can
+
+00:07:34.840 --> 00:07:41.239
+see that ct-edit-hsl-l-dec by 40% would give
+
+00:07:41.240 --> 00:07:47.759
+us a darker colour by 40%. We can also use LCH variant which
+
+00:07:47.760 --> 00:07:53.479
+can use the LCH colour spaces for darkening the colour. This
+
+00:07:53.480 --> 00:07:56.919
+results in slightly different colours for this particular
+
+00:07:56.920 --> 00:08:00.199
+orange, but if you're working with the green or blue or some
+
+00:08:00.200 --> 00:08:04.177
+other colours, it might be worth looking at LCH variant
+
+00:08:04.178 --> 00:08:08.399
+rather than other colour spaces.
+
+NOTE Hasliberg theme
+
+00:08:08.400 --> 00:08:11.203
+With that, let's have a look at Hasliberg theme.
+
+00:08:11.204 --> 00:08:13.707
+This is a theme that I created personally
+
+00:08:13.708 --> 00:08:16.409
+and the name is based on the Swiss Alps
+
+00:08:16.410 --> 00:08:20.479
+and with the following ideas in mind. It focuses
+
+00:08:20.480 --> 00:08:25.031
+on setting up shades. Shades, by that...
+
+00:08:25.032 --> 00:08:26.999
+You can see how the top
+
+00:08:27.000 --> 00:08:31.839
+of the heading here is a bright orange colour, and
+
+00:08:31.840 --> 00:08:35.758
+other orange colours, this heading and this heading
+
+00:08:35.759 --> 00:08:37.719
+are based on the top
+
+00:08:37.720 --> 00:08:40.839
+orange colour and then giving some shade and the luminance
+
+00:08:40.840 --> 00:08:44.639
+adjustment essentially. It follows a pattern from web
+
+00:08:44.640 --> 00:08:49.039
+design and tailwind colour shades are a great example that
+
+00:08:49.040 --> 00:08:50.815
+you can have a look.
+
+00:08:50.816 --> 00:08:54.439
+It does not use ct.el as it aims to be fully
+
+00:08:54.440 --> 00:08:57.999
+dependency free and does not consider colour contrast for
+
+00:08:58.000 --> 00:09:02.119
+accessibility. This is because it's personal and I
+
+00:09:02.120 --> 00:09:04.746
+don't have that particular need.
+
+00:09:04.747 --> 00:09:06.839
+This is based on LuvLCh rather
+
+00:09:06.840 --> 00:09:08.788
+than LAB LCH, and that's another reason
+
+00:09:08.789 --> 00:09:11.049
+why I didn't use ct.el,
+
+00:09:11.050 --> 00:09:14.119
+and it is highly experimental. But the code is
+
+00:09:14.120 --> 00:09:18.279
+available at Codeberg and GitHub just for your reference.
+
+00:09:18.280 --> 00:09:23.719
+Let's see Hasliberg theme in action. This is the theme
+
+00:09:23.720 --> 00:09:27.159
+that we were looking at for org-mode as well, but for the
+
+00:09:27.160 --> 00:09:32.199
+code, in this case Elisp. You can see that the colour is
+
+00:09:32.200 --> 00:09:37.559
+mostly white and blue with orange sprinkled across for
+
+00:09:37.560 --> 00:09:41.559
+string input. You can see some pink showing up as well.
+
+00:09:41.560 --> 00:09:46.399
+Essentially, all the colour setup is done by shades, so most of
+
+00:09:46.400 --> 00:09:51.319
+it is based on white or neutral, and there will be lighter and
+
+00:09:51.320 --> 00:09:56.159
+darker variants that can be set for the primary colour of blue.
+
+00:09:56.160 --> 00:09:59.959
+You can see the darker and brighter and lighter colours
+
+00:09:59.960 --> 00:10:05.279
+being used. With that shade setup, I only have to provide a
+
+00:10:05.280 --> 00:10:09.599
+few colours as the base colours. From there, I can define the
+
+00:10:09.600 --> 00:10:15.959
+shades for the theme setup, which leads to creating a more
+
+00:10:15.960 --> 00:10:20.359
+monotonic colour setup, where this one is a very monotonic,
+
+00:10:20.360 --> 00:10:25.059
+very subtle difference of white colours used for the base
+
+00:10:25.060 --> 00:10:29.039
+colours. I don't have to make too many changes to the colour
+
+00:10:29.040 --> 00:10:32.079
+setup. I just have to provide the base colours that are
+
+00:10:32.080 --> 00:10:36.399
+different. The same can be said for this orange, very orange
+
+00:10:36.400 --> 00:10:39.359
+colour theme, which is based on the base colours of
+
+00:10:39.360 --> 00:10:43.639
+orange-like colours and gives the shade of various
+
+00:10:43.640 --> 00:10:50.719
+different setup. This means that I can use Hasliberg
+
+00:10:50.720 --> 00:10:56.159
+Theme Nature colour palette, and that gives me more of a green
+
+00:10:56.160 --> 00:11:00.839
+based colour where all the base colours are set up with a
+
+00:11:00.840 --> 00:11:06.239
+greenish colour setup.
+
+NOTE Wrap up
+
+00:11:06.240 --> 00:11:10.399
+With that, I would like to wrap up with a few ideas when
+
+00:11:10.400 --> 00:11:13.759
+adjusting themes and working with colours. Maybe consider
+
+00:11:13.760 --> 00:11:19.359
+using CIELAB, CIELUV, or OKLab-based colour spaces that
+
+00:11:19.360 --> 00:11:24.719
+would give you different shades which are easier to work
+
+00:11:24.720 --> 00:11:29.199
+with for human perceptions. color.el and ct.el can be a
+
+00:11:29.200 --> 00:11:32.559
+great tool for making shades and working with colour spaces.
+
+00:11:32.560 --> 00:11:36.239
+Hasliberg theme is yet another theme, highly personal
+
+00:11:36.240 --> 00:11:38.999
+and experimental, but could be an inspiration for your
+
+00:11:39.000 --> 00:11:44.119
+theme journey. With that, why not sprinkle your Emacs with
+
+00:11:44.120 --> 00:11:48.400
+your favourite colours? Thank you.
diff --git a/2024/captions/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--answers.vtt b/2024/captions/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--answers.vtt
new file mode 100644
index 00000000..74b1254c
--- /dev/null
+++ b/2024/captions/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--answers.vtt
@@ -0,0 +1,957 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:05.079
+You sound great. And on the stream, my eyeball says it looks
+
+00:00:05.080 --> 00:00:08.239
+great with Leo doing the streaming. So I say let's dive right
+
+00:00:08.240 --> 00:00:12.639
+in. You got a long, huge line. And in order to be a little more
+
+00:00:12.640 --> 00:00:16.279
+dialectical, I'll be reading the questions. So first
+
+NOTE Q: which-key was a third-party package for a long time. Is there work to bring any other popular packages into core Emacs for Emacs 31+? (magit, counsel, etc)
+
+00:00:16.280 --> 00:00:18.559
+question, which key was a third party package for a long
+
+00:00:18.560 --> 00:00:21.879
+time? Is there work to bring any other popular packages into
+
+00:00:21.880 --> 00:00:25.399
+the core of Emacs for Emacs 31 plus, like Magit or Counsel?
+
+00:00:25.400 --> 00:00:30.279
+Uh, right. I already answered that one on the, as you can see,
+
+00:00:30.280 --> 00:00:33.999
+uh, right. Yeah. Do you want to quickly read the answer so
+
+00:00:34.000 --> 00:00:38.439
+that everyone, I just can read it out again. Um, as far as I
+
+00:00:38.440 --> 00:00:41.159
+remember, the one package that was being discussed just
+
+00:00:41.160 --> 00:00:43.999
+around the time that the Emacs 30 branch was cut was macro
+
+00:00:44.000 --> 00:00:47.599
+step. That's the package that was like, does an overlay, uh,
+
+00:00:47.600 --> 00:00:51.479
+replaces a macro with the macro expansion using overlays.
+
+00:00:51.480 --> 00:00:53.799
+So you don't have to pop up another buffer, modified,
+
+00:00:53.800 --> 00:00:57.599
+modified current buffer. But we didn't manage to address
+
+00:00:57.600 --> 00:01:00.759
+all the concerns in time for the Emacs 30 cuts and I believe
+
+00:01:00.760 --> 00:01:03.799
+it's sort of stagnated around that but it might be picked up
+
+00:01:03.800 --> 00:01:07.399
+anytime someone mentions it on Emacs Devil again. Another
+
+00:01:07.400 --> 00:01:11.519
+package question mentioned was Magit. That's a constant
+
+00:01:11.520 --> 00:01:14.959
+discussion regarding Magit. And actually, from the top of
+
+00:01:14.960 --> 00:01:19.039
+my head, I can't recall if Magit is on NonGNU ELPA or GNU ELPA
+
+00:01:19.040 --> 00:01:22.999
+right now. It's still on NonGNU ELPA.
+
+00:01:23.000 --> 00:01:29.039
+For those who don't know, only packages which are in ELPA are
+
+00:01:29.040 --> 00:01:33.039
+considered for addition, considered to be added to the
+
+00:01:33.040 --> 00:01:36.119
+Emacs core, to be bundled along with Emacs. And then there's
+
+00:01:36.120 --> 00:01:40.519
+another totally parallel discussion about having a sort of
+
+00:01:40.520 --> 00:01:43.519
+fat Emacs distribution, I call it fat Emacs distribution,
+
+00:01:43.520 --> 00:01:48.119
+where Emacs comes with a lot of ELPA packages or the
+
+00:01:48.120 --> 00:01:55.039
+pre-installed by default. Part of Emacs itself. Yeah.
+
+00:01:55.040 --> 00:01:59.159
+Maybe I could jump in with an active listening style,
+
+00:01:59.160 --> 00:02:03.359
+you know, kind of follow up question almost. You know, I
+
+00:02:03.360 --> 00:02:07.159
+understand the kind of different repositories. We have
+
+00:02:07.160 --> 00:02:13.799
+things that aren't maintained by GNU at all, you know, most
+
+00:02:13.800 --> 00:02:17.919
+notably MELPA. And then we have kind of NonGNU ELPA, which
+
+00:02:17.920 --> 00:02:21.639
+is sort of an entryway project where it's not necessarily
+
+00:02:21.640 --> 00:02:24.759
+curated, but there'll be some advice given, which you can
+
+00:02:24.760 --> 00:02:28.159
+take or leave. And that's the repository where anything
+
+00:02:28.160 --> 00:02:32.519
+that was the newer repository that represents, you know,
+
+00:02:32.520 --> 00:02:36.319
+help, you know, help, help supplied from GNU. And then
+
+00:02:36.320 --> 00:02:41.319
+there's the, actually the GNU, the GNU ELPA, what most of us
+
+00:02:41.320 --> 00:02:46.479
+are used to calling just ELPA. And that's what you're
+
+00:02:46.480 --> 00:02:50.839
+talking about there when you say,
+
+00:02:50.840 --> 00:02:53.959
+I mean, all packages on ELPA are officially considered to be
+
+00:02:53.960 --> 00:02:56.959
+part of Emacs, they're licensed under the same conditions
+
+00:02:56.960 --> 00:03:00.359
+as Emacs itself, same license, same everything. And
+
+00:03:00.360 --> 00:03:03.719
+they're more likely to be, to drop, to kind of be dropping
+
+00:03:03.720 --> 00:03:07.839
+patched. Oh yeah, it's time for this to move to core. Is that
+
+00:03:07.840 --> 00:03:12.559
+right? They have the legal conditions for that to be done.
+
+00:03:12.560 --> 00:03:15.039
+Everything's necessary from a paperwork standpoint. I
+
+00:03:15.040 --> 00:03:17.959
+mean, but other than that, there's not really a big
+
+00:03:17.960 --> 00:03:21.159
+difference between GNU ELPA and NonGNU ELPA. It's
+
+00:03:21.160 --> 00:03:23.839
+really just the main thing is this copyrights notice. So if
+
+00:03:23.840 --> 00:03:28.519
+you want to add a package to ELPA, to GNU ELPA, then all
+
+00:03:28.520 --> 00:03:32.359
+significance contributors have to have signed the FSF
+
+00:03:32.360 --> 00:03:36.399
+copyright assignment and the package script, actually the
+
+00:03:36.400 --> 00:03:41.519
+ELPA build script, checks if the copyright lines are all
+
+00:03:41.520 --> 00:03:43.879
+attributed to the Free Software Foundation.
+
+00:03:43.880 --> 00:03:52.119
+But that's not going to attach, right? So because that's not
+
+00:03:52.120 --> 00:03:57.799
+in place, it'd be a lot more work to merge it to core. I didn't
+
+00:03:57.800 --> 00:04:01.039
+hear the beginning. Nevermind. I think I understood. You
+
+00:04:01.040 --> 00:04:05.559
+made your point well. Okay. All right, moving on to the
+
+00:04:05.560 --> 00:04:06.466
+second question.
+
+NOTE Q: Any way to get the goodness of Emacs for android with this other stuff?
+
+00:04:06.467 --> 00:04:08.279
+When thinking about using Emacs on
+
+00:04:08.280 --> 00:04:11.279
+Android, I started realizing all the other software I also
+
+00:04:11.280 --> 00:04:15.279
+want on it. For example, PDF Tools wants a small additional
+
+00:04:15.280 --> 00:04:18.519
+Emacs-specific program to be installed on, and notmuch
+
+00:04:18.520 --> 00:04:21.359
+obviously wants notmuch. Any way to get the goodness of
+
+00:04:21.360 --> 00:04:25.639
+Emacs for Android with this other stuff, using either Nix OS
+
+00:04:25.640 --> 00:04:29.279
+or Guix or nix-on-droid to make an APK with extra stuff? Are you
+
+00:04:29.280 --> 00:04:34.439
+familiar with this topic? Absolutely not. The extent to
+
+00:04:34.440 --> 00:04:39.319
+which I have used Emacs on Android was entirely
+
+00:04:39.320 --> 00:04:43.719
+demonstrated in this video, I think. In my previous video. I
+
+00:04:43.720 --> 00:04:48.719
+mean, I know it does a few scrolling stuff, but I have no idea
+
+00:04:48.720 --> 00:04:52.719
+how external stuff, because I mean, Android is, it's a Unix
+
+00:04:52.720 --> 00:04:55.439
+or it's a Linux based system, but it's really heavily
+
+00:04:55.440 --> 00:05:01.439
+modified to the preferences of Google, which includes not
+
+00:05:01.440 --> 00:05:04.719
+being able to have your own software on it. Yeah,
+
+00:05:04.720 --> 00:05:08.799
+definitely. All right, moving on to the next question. Does
+
+00:05:08.800 --> 00:05:12.239
+package-vc... Oh, no, that's fine. I mean, you can't answer
+
+00:05:12.240 --> 00:05:15.199
+all the questions. I mean, it wouldn't be fun for me
+
+00:05:15.200 --> 00:05:15.753
+otherwise.
+
+NOTE Q: Does package-vc download a tarball from the specified git repository or clone the repository itself?
+
+00:05:15.754 --> 00:05:17.919
+Does package-vc download a tarball from the
+
+00:05:17.920 --> 00:05:21.759
+specified Git repository or clone the repository itself?
+
+00:05:21.760 --> 00:05:25.439
+It clones the repository. That's the VC part in the name.
+
+00:05:25.440 --> 00:05:33.719
+package-vc uses VC, the C-x v stuff. In Emacs 29, there's a
+
+00:05:33.720 --> 00:05:37.679
+new command called vc-clone, which in Emacs 31, it was
+
+00:05:37.680 --> 00:05:42.479
+actually exposed as an interactive command. And when you
+
+00:05:42.480 --> 00:05:47.319
+clone the repository, or when you, you can give it any URL of a
+
+00:05:47.320 --> 00:05:50.559
+Git repository or a CVS repository or subversion
+
+00:05:50.560 --> 00:05:53.519
+repository. Interestingly enough, most people only use
+
+00:05:53.520 --> 00:05:57.559
+Git, but anything that's, that implements this clone
+
+00:05:57.560 --> 00:06:01.519
+command for VC, and it could download it. So there's no
+
+00:06:01.520 --> 00:06:05.119
+tarballs involved. Which is also, one should emphasize,
+
+00:06:05.120 --> 00:06:07.879
+part of the difficulty of VC packages because when you have
+
+00:06:07.880 --> 00:06:10.759
+version control and you want to upgrade it, it might be that
+
+00:06:10.760 --> 00:06:14.399
+the upstream did a force push. For that, you make local
+
+00:06:14.400 --> 00:06:17.519
+changes and then you have to merge them upstream with the
+
+00:06:17.520 --> 00:06:21.239
+upstream changes when fetching stuff. It's one of the big
+
+00:06:21.240 --> 00:06:23.559
+downsides of version-controlled stuff, and I'm saying
+
+00:06:23.560 --> 00:06:26.999
+this as the guy who actually wrote package-vc. There's
+
+00:06:27.000 --> 00:06:29.719
+times to use it, there's advantages to it, but that's
+
+00:06:29.720 --> 00:06:32.959
+something you should keep in mind, why tarballs are
+
+00:06:32.960 --> 00:06:37.969
+interesting to have, in my opinion. Okay.
+
+NOTE How is the new behavior of M-q in prog-mode (prog-fill-reindent-defun or something like that) different from the behavior of C-M-q (indent-pp-sexp) in older Emacs versions?
+
+00:06:37.970 --> 00:06:39.639
+How is the new
+
+00:06:39.640 --> 00:06:42.439
+behavior of M-q in prog mode, prog-fill-reindent-defun
+
+00:06:42.440 --> 00:06:45.159
+or something like that, different from the behavior
+
+00:06:45.160 --> 00:06:48.799
+of C-M-q, i.e. indent-pp-sexp in older Emacs
+
+00:06:48.800 --> 00:06:52.199
+version? My apologies if indent-pp-sexp, it's really tough to
+
+00:06:52.200 --> 00:06:55.959
+read M-x commands out loud. It's not bound to
+
+00:06:55.960 --> 00:07:01.519
+C-M-q by default, I can't tell. Let me try that command
+
+00:07:01.520 --> 00:07:05.599
+out because I've never tried it, never used it before.
+
+00:07:05.600 --> 00:07:09.079
+You know, that isn't bound by default. I bind that up myself
+
+00:07:09.080 --> 00:07:11.759
+and I have that binding. I think that's, that's not right. It
+
+00:07:11.760 --> 00:07:15.119
+says so. I mean, I'm currently executing it here in Emacs and
+
+00:07:15.120 --> 00:07:20.839
+it says you can also run the commands indent-pp-sexp with
+
+00:07:20.840 --> 00:07:26.359
+M-q, C-M-q. Apparently it is. I mean, I
+
+00:07:26.360 --> 00:07:31.359
+didn't set it myself. I don't know what's up with that. to try
+
+00:07:31.360 --> 00:07:35.439
+and move it. And then each line started with points or pretty
+
+00:07:35.440 --> 00:07:37.239
+printed. I mean, the difference, the main difference
+
+00:07:37.240 --> 00:07:41.279
+between that and the command highlighted, what's the name
+
+00:07:41.280 --> 00:07:47.479
+again? I forget it all the time. The prog-mode command.
+
+00:07:47.480 --> 00:07:50.359
+prog-fill-reindent-defun is that
+
+00:07:50.360 --> 00:07:56.319
+it checks if it's in a string or not. If it's in a string or if
+
+00:07:56.320 --> 00:07:58.959
+it's in a comma, then it will refill. Otherwise, it's going
+
+00:07:58.960 --> 00:07:59.799
+to re-indent.
+
+00:07:59.800 --> 00:08:05.679
+That's, I think, as far as I see, that's going to be the main
+
+00:08:05.680 --> 00:08:09.599
+difference. If we have some long comments somewhere. Let's
+
+00:08:09.600 --> 00:08:15.439
+try that out. Yeah, that's the difference. I just, you can't
+
+00:08:15.440 --> 00:08:19.679
+see it, but I did try it. Okay, good. Thank you. You did a
+
+00:08:19.680 --> 00:08:22.119
+wonderful job describing visually what you're doing. All
+
+00:08:22.120 --> 00:08:26.759
+right, moving on to the next question, and we have about, we
+
+00:08:26.760 --> 00:08:28.759
+have just enough time to cover the last three questions,
+
+00:08:28.760 --> 00:08:32.239
+especially because the next one, I can pretty much surmise
+
+00:08:32.240 --> 00:08:33.143
+the answer.
+
+NOTE Q: Any plans for Emacs running in iOS?
+
+00:08:33.144 --> 00:08:36.759
+Any plans for Emacs running on iOS? Probably not
+
+00:08:36.760 --> 00:08:40.319
+because it's not, I mean, as I emphasized in the video, the
+
+00:08:40.320 --> 00:08:43.639
+Emacs port in Android is completely free. And to my
+
+00:08:43.640 --> 00:08:45.319
+knowledge, that's not something that's currently
+
+00:08:45.320 --> 00:08:49.799
+possible with iOS. You need Xcode or something like that to
+
+00:08:49.800 --> 00:08:56.639
+build iOS stuff. So that's a big no-no. I mean, maybe Apple's
+
+00:08:56.640 --> 00:09:00.919
+going to change their mind on that one. Well, I won't be the
+
+00:09:00.920 --> 00:09:04.039
+one liaising with Apple to make sure that they do, but PR
+
+00:09:04.040 --> 00:09:07.599
+welcomes, I guess, or motivated folks welcome. Second to
+
+00:09:07.600 --> 00:09:08.647
+last question.
+
+NOTE Q: I am worried about the situation on non-free systems. There was talk about the Windows and the macOS versions being as good as unmaintained. Where do we go from here?
+
+00:09:08.648 --> 00:09:11.719
+I am worried about the situation on non-free
+
+00:09:11.720 --> 00:09:14.519
+systems. There was talk about the Windows and the macOS
+
+00:09:14.520 --> 00:09:17.039
+versions being as good as unmaintained. Where do we go from
+
+00:09:17.040 --> 00:09:20.399
+here? I gather that most users of Emacs are still on non-free
+
+00:09:20.400 --> 00:09:24.799
+platforms and will remain to be there. I don't know about the
+
+00:09:24.800 --> 00:09:28.279
+last point, if that's true, because there's no statistics
+
+00:09:28.280 --> 00:09:35.039
+on that matter. But the main, I mean, someone has to, I know
+
+00:09:35.040 --> 00:09:37.959
+that Corwin is involved with the Mac, with the Windows
+
+00:09:37.960 --> 00:09:43.199
+stuff. Modestly. Sure, I'd love to jump in, but I'm far more
+
+00:09:43.200 --> 00:09:45.839
+interested in your thoughts than mine. Please, please
+
+00:09:45.840 --> 00:09:51.039
+continue. Someone has to do the work. Eli uses, as far as I
+
+00:09:51.040 --> 00:09:58.719
+know, Eli's on the Windows XP system. So as long as he's doing
+
+00:09:58.720 --> 00:10:02.519
+that, there's going to be Windows support for one form or
+
+00:10:02.520 --> 00:10:07.959
+another, or at least DOS. All right. And now you put a quarter
+
+00:10:07.960 --> 00:10:12.439
+in me, so I'll jump right back in. That's perfect for where I
+
+00:10:12.440 --> 00:10:14.519
+guess I would take the question. To me, it's an
+
+00:10:14.520 --> 00:10:17.439
+accessibility issue. Think about it this way. Maybe that
+
+00:10:17.440 --> 00:10:23.319
+Windows XP system is what someone can afford. Likewise,
+
+00:10:23.320 --> 00:10:27.679
+from a freedom versus I have to do my job and I have to use
+
+00:10:27.680 --> 00:10:31.679
+certain technology to do my job. Maybe Emacs is what
+
+00:10:31.680 --> 00:10:35.559
+somebody can afford right? It might be the only free tool
+
+00:10:35.560 --> 00:10:37.439
+that they use and they don't have a lot of choice about the
+
+00:10:37.440 --> 00:10:40.039
+operating system that they're in most of the day. In fact,
+
+00:10:40.040 --> 00:10:42.279
+somebody could be in the situation where their computing
+
+00:10:42.280 --> 00:10:45.839
+device at work is really their internet access, right? All
+
+00:10:45.840 --> 00:10:48.279
+of those situations are possible. Therefore, I tend to
+
+00:10:48.280 --> 00:10:53.479
+assume they all exist and when I ask, you know, how much It
+
+00:10:53.480 --> 00:10:58.039
+definitely is concerning when we hear about kind of black
+
+00:10:58.040 --> 00:11:02.079
+holes in the brain trust of something like support for the
+
+00:11:02.080 --> 00:11:06.359
+Windows port. I feel like I've heard a lot of people
+
+00:11:06.360 --> 00:11:10.959
+answering that call, but the importance of that is that it
+
+00:11:10.960 --> 00:11:14.119
+doesn't stop echoing, right? Free software goes as long as
+
+00:11:14.120 --> 00:11:16.399
+there are people that are irritated enough about something
+
+00:11:16.400 --> 00:11:20.839
+to sort of come hack on it. Yeah. And the same applies to Mac
+
+00:11:20.840 --> 00:11:25.199
+OS. But I don't know any concrete details about who's
+
+00:11:25.200 --> 00:11:28.079
+currently working on it. I can't recollect any details on
+
+00:11:28.080 --> 00:11:29.439
+who's currently working on what.
+
+00:11:29.440 --> 00:11:35.279
+Okay. And that leaves us with the last question of the day.
+
+NOTE Q: Is there a best practice on what Org to use when following emacs-latest?
+
+00:11:35.280 --> 00:11:38.159
+I'm a bit confused about what version of Org that I should
+
+00:11:38.160 --> 00:11:40.919
+write towards because there's Org in Emacs, the one that
+
+00:11:40.920 --> 00:11:44.279
+ships built-in. There's the one in ELPA. There's the one in
+
+00:11:44.280 --> 00:11:48.519
+Org, probably the Org ELPA, I assume. Is there a best
+
+00:11:48.520 --> 00:11:51.959
+practice on what Org to use when following Emacs latest?
+
+00:11:51.960 --> 00:11:58.919
+when following us latest. It depends on, I think, my rough
+
+00:11:58.920 --> 00:12:02.559
+heuristic is if you do use Org a lot and if you follow the
+
+00:12:02.560 --> 00:12:06.279
+newest features, then use the version on Elpa, because the
+
+00:12:06.280 --> 00:12:09.959
+Elpa version should be the most up-to-date one. The Org Elpa
+
+00:12:09.960 --> 00:12:14.999
+was deprecated, to my knowledge. If that seems true, please
+
+00:12:15.000 --> 00:12:18.319
+someone interrupt me before I make a fool of myself.
+
+00:12:18.320 --> 00:12:24.519
+No one's done that yet.
+
+00:12:24.520 --> 00:12:29.519
+I think a couple of years ago there were chats and then we
+
+00:12:29.520 --> 00:12:33.999
+deprecated the all contrib ELPA, but I think all the ELPA is
+
+00:12:34.000 --> 00:12:40.759
+still alive. I didn't know that about that. Okay, in that
+
+00:12:40.760 --> 00:12:44.839
+case, that relativizes how absolute my answer is.
+
+00:12:44.840 --> 00:12:49.559
+Personally, I just use the version in Emacs, which is
+
+00:12:49.560 --> 00:12:53.399
+bundled with Emacs, which is regularly updated on master
+
+00:12:53.400 --> 00:12:58.319
+whenever there's a release. But that might take maybe, it
+
+00:12:58.320 --> 00:13:03.559
+might be a short time behind the ELPA version, or the other
+
+00:13:03.560 --> 00:13:11.879
+ELPA, the Org ELPA, which we mentioned. But I'm a very light
+
+00:13:11.880 --> 00:13:16.119
+Org mode user, so please don't take my word for that one. No,
+
+00:13:16.120 --> 00:13:23.439
+and I'm happy to come to you. Yeah. I
+
+00:13:23.440 --> 00:13:27.719
+feel like we lost Leo again. OK. Well, that's all right. I
+
+00:13:27.720 --> 00:13:31.279
+wanted a bite at that, Apple. I'm a little bit. Yeah, I also
+
+00:13:31.280 --> 00:13:34.239
+describe myself as a light org user, but somehow your
+
+00:13:34.240 --> 00:13:37.159
+comment made me think, well, maybe I do use it just a little
+
+00:13:37.160 --> 00:13:41.719
+bit more than you, Philip.
+
+00:13:41.720 --> 00:13:45.359
+From my standpoint, I'm using it as a technical basis for
+
+00:13:45.360 --> 00:13:49.959
+dungeon mode in order to keep the game notes for the games
+
+00:13:49.960 --> 00:13:52.479
+that are made using this game engine I'm making that I talked
+
+00:13:52.480 --> 00:13:56.079
+about a few years ago. As soon as you said technical grounds,
+
+00:13:56.080 --> 00:13:59.319
+you definitely use it more. Right, right. So I've studied
+
+00:13:59.320 --> 00:14:04.159
+its internals a bit, and I have my own thoughts about this or
+
+00:14:04.160 --> 00:14:06.959
+that. But of course, I'm rolling with the punches because
+
+00:14:06.960 --> 00:14:10.119
+I'm just grateful that the bear dances. What an amazing
+
+00:14:10.120 --> 00:14:14.519
+thing is Org Mode. But Leo knows far more than me,
+
+00:14:14.520 --> 00:14:18.359
+conveniently having his stage right here, so he can't
+
+00:14:18.360 --> 00:14:22.359
+defend himself from this. But I've had thoughts around this
+
+00:14:22.360 --> 00:14:28.559
+space. Are you back, Leo? Yeah, sorry, I'm back. You save us
+
+00:14:28.560 --> 00:14:33.479
+all. Maybe closing remarks. I was trying to clear my throat
+
+00:14:33.480 --> 00:14:36.079
+to be very inconspicuous about me coming back, but
+
+00:14:36.080 --> 00:14:39.319
+apparently I was ousted. Yeah, I was trying to answer the
+
+00:14:39.320 --> 00:14:42.239
+question and I was trying to desperately save you from
+
+00:14:42.240 --> 00:14:45.999
+answering, Philip, because yes, the thing about Org Mode is
+
+00:14:46.000 --> 00:14:48.879
+that if you are the kind of people who tend to check out master
+
+00:14:48.880 --> 00:14:51.919
+on Org Mode, generally it's roughly pretty stable. Like
+
+00:14:51.920 --> 00:14:54.319
+when we were working with Org Element and stuff like this,
+
+00:14:54.320 --> 00:14:56.479
+Perhaps there were some elements of stability which
+
+00:14:56.480 --> 00:14:59.199
+weren't there quite yet, but usually now it's pretty
+
+00:14:59.200 --> 00:15:02.039
+stable. So I think that if you are really excited about
+
+00:15:02.040 --> 00:15:04.639
+contributing to Org Mode and stuff like this, I think there
+
+00:15:04.640 --> 00:15:08.199
+isn't all that many risks to just checking out Org Mode
+
+00:15:08.200 --> 00:15:10.999
+Master, so cloning the repository and just keeping up to
+
+00:15:11.000 --> 00:15:15.119
+date. Otherwise, ELPA is a fairly safe bet if you want to have
+
+00:15:15.120 --> 00:15:19.839
+the latest stable version. And we've got a question about
+
+00:15:19.840 --> 00:15:24.759
+[??] as with Emacs itself. You can follow whatever is
+
+00:15:24.760 --> 00:15:28.519
+published in your package archives or in your system
+
+00:15:28.520 --> 00:15:32.399
+distribution package manager. You can build it yourself if
+
+00:15:32.400 --> 00:15:36.839
+you want to contribute and fix bugs, add features, and so on.
+
+00:15:36.840 --> 00:15:40.399
+Yeah, and I don't think perhaps a little more with Emacs,
+
+00:15:40.400 --> 00:15:43.439
+because the features that tends to get introduced in Emacs
+
+00:15:43.440 --> 00:15:48.039
+are slightly more wild. Not wild in the sense that they are
+
+00:15:48.040 --> 00:15:50.679
+less stable, but wild in the sense that they tend to change a
+
+00:15:50.680 --> 00:15:54.119
+lot more stuff. The core of Org, at least during Bastien's
+
+00:15:54.120 --> 00:15:56.879
+maintenance ship, was very stable when you think about it.
+
+00:15:56.880 --> 00:15:59.719
+So things might change with Ihor right now in terms of how he
+
+00:15:59.720 --> 00:16:02.839
+wants to change some of the core behaviors, but it's usually
+
+00:16:02.840 --> 00:16:06.079
+pretty stable. And whether you use the latest major
+
+00:16:06.080 --> 00:16:09.159
+version, the latest minor version, things are probably
+
+00:16:09.160 --> 00:16:11.679
+going to be pretty stable. It's like you heard me while you
+
+00:16:11.680 --> 00:16:16.199
+were offline. And I do agree with that, in case you might have
+
+00:16:16.200 --> 00:16:18.319
+heard both our remarks and think we're talking different
+
+00:16:18.320 --> 00:16:22.439
+angles. Actually, I think we would tend to agree on this, Leo
+
+00:16:22.440 --> 00:16:26.759
+and I. For the record, when I'm saying, oh, I have to go keep up
+
+00:16:26.760 --> 00:16:30.719
+with org, that's because org grows behaviors that I've got
+
+00:16:30.720 --> 00:16:34.639
+my own. I had to figure out at some point my own way to do it, and
+
+00:16:34.640 --> 00:16:38.119
+now I'm learning how it's done, right? So I'm like, in my
+
+00:16:38.120 --> 00:16:41.279
+abstraction, blah, right? And those conversations
+
+00:16:41.280 --> 00:16:44.279
+usually end at, and somebody else took the time to figure out
+
+00:16:44.280 --> 00:16:48.039
+how to actually make Emacs do that. Go be quiet. And I do, and I
+
+00:16:48.040 --> 00:16:52.999
+do consider that under Bastien's tenure, it has been quite
+
+00:16:53.000 --> 00:16:57.039
+stable. We might notice the occasional like, oh, this
+
+00:16:57.040 --> 00:17:00.519
+highlights now and that didn't, right? But very often, very
+
+00:17:00.520 --> 00:17:03.599
+infrequently is it breaking my workflow as a user, any of it.
+
+00:17:03.600 --> 00:17:07.799
+It's interesting to me that this mirrors my experience with
+
+00:17:07.800 --> 00:17:12.679
+Emacs itself, where I think, in my perception, Emacs master
+
+00:17:12.680 --> 00:17:17.199
+is very stable and I might notice the slight changes between
+
+00:17:17.200 --> 00:17:21.839
+git pulls. But otherwise, in my experience, Org mode
+
+00:17:21.840 --> 00:17:24.879
+suddenly changes something, I don't know what changed or
+
+00:17:24.880 --> 00:17:29.439
+what's going on or what caused it, and it seemed... I
+
+00:17:29.440 --> 00:17:33.719
+perceive it as being a sudden uncontrolled change or
+
+00:17:33.720 --> 00:17:36.239
+something. I think that's apt. Right. That gets
+
+00:17:36.240 --> 00:17:40.159
+right at it. If we're following, if we're pulling for more
+
+00:17:40.160 --> 00:17:42.759
+pretty regularly, cronjob every night or pulling a few
+
+00:17:42.760 --> 00:17:44.639
+times a day or something like that, we're going to the
+
+00:17:44.640 --> 00:17:48.639
+internals yeah, we'll have a different experience than,
+
+00:17:48.640 --> 00:17:51.959
+you know, if we only remember to update Org once every four
+
+00:17:51.960 --> 00:17:54.759
+months. It really pays to stick with everything. And
+
+00:17:54.760 --> 00:17:59.199
+suddenly lots of things might change. Whatever broke in my
+
+00:17:59.200 --> 00:18:03.439
+own config, right? And so a lot of, like a lot of things within
+
+00:18:03.440 --> 00:18:06.759
+Emacs, but also within the free software tool chain, it's
+
+00:18:06.760 --> 00:18:09.559
+how much you're going to invent in the config, invest in the
+
+00:18:09.560 --> 00:18:14.199
+config, might limit you know, and maintaining your config
+
+00:18:14.200 --> 00:18:17.199
+may limit the depth of how far it makes sense for you to go with
+
+00:18:17.200 --> 00:18:21.759
+the tool at any given point in time. Actually just looked up
+
+00:18:21.760 --> 00:18:25.279
+my org config and it's four, I said four options, user
+
+00:18:25.280 --> 00:18:29.239
+options. So that's, if that's the measurements of org
+
+00:18:29.240 --> 00:18:32.119
+expertise, that's my level, it's four.
+
+00:18:32.120 --> 00:18:38.559
+That's all good then. Four of four, I'm assuming that is,
+
+00:18:38.560 --> 00:18:44.279
+right? Four of what? What was the metric there, four of like a
+
+00:18:44.280 --> 00:18:48.119
+thousand? Four out of the number of user options that Word
+
+00:18:48.120 --> 00:18:54.239
+provides. Oh, okay, I see. Four, yeah, more like 10,000. I'm
+
+00:18:54.240 --> 00:18:59.079
+there. Yeah. All right. On that note, I suggest we move to
+
+00:18:59.080 --> 00:19:00.999
+what's close because it's fairly late for me and I need to
+
+00:19:01.000 --> 00:19:03.119
+sleep. And Philip, I think it's pretty late for you as well,
+
+00:19:03.120 --> 00:19:07.239
+isn't it? I'm in Germany, so it's about... So it is pretty
+
+00:19:07.240 --> 00:19:09.799
+late. It's the same time zone as me. It's 11 p.m. for you.
+
+00:19:09.800 --> 00:19:16.399
+Truly, yeah. Yeah, so I suggest we both take the chance to go
+
+00:19:16.400 --> 00:19:20.359
+to bed as soon as we can. But Philip, thank you so much for
+
+00:19:20.360 --> 00:19:22.759
+both the presentation and also the answers that you
+
+00:19:22.760 --> 00:19:26.119
+provided to us and the nice little chat we had at the end. We
+
+00:19:26.120 --> 00:19:29.519
+look forward to seeing you again next year, perhaps for
+
+00:19:29.520 --> 00:19:34.159
+Emacs 31. I'm not sure. I was chatting with wasamasa
+
+00:19:34.160 --> 00:19:37.679
+trying to make prognostics about when Emacs 30 is going to be
+
+00:19:37.680 --> 00:19:40.839
+released. There's a pre-release coming soon. I should have
+
+00:19:40.840 --> 00:19:46.719
+mentioned that earlier. Well, there you go. Gone.
+
+00:19:46.720 --> 00:19:51.839
+All right. Well, thank you so much, Philip. We'll be moving
+
+00:19:51.840 --> 00:19:54.479
+towards close. Give us about two minutes to get set up in the
+
+00:19:54.480 --> 00:19:58.439
+other room. And Philip, we'll see you next time. Goodbye.
+
+00:19:58.440 --> 00:20:02.160
+Bye-bye. Thank you.
diff --git a/2024/captions/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--main--chapters.vtt b/2024/captions/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--main--chapters.vtt
new file mode 100644
index 00000000..57ef14d3
--- /dev/null
+++ b/2024/captions/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--main--chapters.vtt
@@ -0,0 +1,35 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:01:41.759
+Introduction
+
+00:01:41.760 --> 00:07:44.699
+Android
+
+00:07:44.700 --> 00:09:30.239
+EditorConfig
+
+00:09:30.240 --> 00:13:11.399
+use-package integration with package-vc
+
+00:13:11.400 --> 00:15:56.839
+JSON
+
+00:15:56.840 --> 00:17:30.719
+Native compilation
+
+00:17:30.720 --> 00:18:16.819
+Tree-sitter
+
+00:18:16.820 --> 00:19:34.219
+Completion preview mode
+
+00:19:34.220 --> 00:21:16.779
+package-isolate
+
+00:21:16.780 --> 00:23:17.879
+Reindenting
+
+00:23:17.880 --> 00:24:43.120
+Wrapping up
diff --git a/2024/captions/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--main.vtt b/2024/captions/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--main.vtt
new file mode 100644
index 00000000..feebc2ed
--- /dev/null
+++ b/2024/captions/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--main.vtt
@@ -0,0 +1,1361 @@
+WEBVTT captioned by anush
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:06.119
+Hello, and welcome to Emacs 30 Highlights at EmacsConf 2024.
+
+00:00:06.120 --> 00:00:08.839
+Before I begin, I'd like to thank the organizers
+
+00:00:08.840 --> 00:00:11.799
+and everyone involved for putting this all together.
+
+00:00:11.800 --> 00:00:13.759
+While this talk is being pre-recorded,
+
+00:00:13.760 --> 00:00:15.239
+my experience from the last few years
+
+00:00:15.240 --> 00:00:19.159
+assures me that it will be a great experience for everyone.
+
+00:00:19.160 --> 00:00:21.359
+My name is Philip Kaludercic.
+
+00:00:21.360 --> 00:00:24.479
+I am a core contributor and ELPA co-maintainer.
+
+00:00:24.480 --> 00:00:26.079
+I was honored when Sacha asked me
+
+00:00:26.080 --> 00:00:28.359
+to take over the slot for this year.
+
+00:00:28.360 --> 00:00:29.879
+In the past few iterations,
+
+00:00:29.880 --> 00:00:32.199
+John Wiegley has filled a similar presentation
+
+00:00:32.200 --> 00:00:35.679
+focusing on more general Emacs development updates.
+
+00:00:35.680 --> 00:00:38.519
+This year, I will specifically focus on
+
+00:00:38.520 --> 00:00:41.919
+highlight features from the upcoming Emacs 30 release,
+
+00:00:41.920 --> 00:00:43.919
+which might or might not have been released
+
+00:00:43.920 --> 00:00:48.079
+by the time you are seeing this.
+
+00:00:48.080 --> 00:00:51.079
+As you can imagine, everything new about Emacs
+
+00:00:51.080 --> 00:00:55.059
+can always be found in the Emacs NEWS file.
+
+00:00:55.060 --> 00:00:57.079
+Or, alternatively,
+
+00:00:57.080 --> 00:01:01.919
+if one doesn't want to read through the 3,000 lines here,
+
+00:01:01.920 --> 00:01:05.279
+one can also take a look at the Emacs FAQ
+
+00:01:05.280 --> 00:01:07.999
+and then go to the what's new about
+
+00:01:08.000 --> 00:01:12.219
+or what's different about Emacs 30 node.
+
+00:01:12.220 --> 00:01:14.759
+Next to these two official options,
+
+00:01:14.760 --> 00:01:18.599
+I also have a page on Emacs Wiki
+
+00:01:18.600 --> 00:01:21.439
+called EmacsThirtyHighlights,
+
+00:01:21.440 --> 00:01:24.279
+highlighting some of the interesting features
+
+00:01:24.280 --> 00:01:28.439
+with some context and suggestions on how to try them out.
+
+00:01:28.440 --> 00:01:30.039
+This is more of a collaborative effort.
+
+00:01:30.040 --> 00:01:32.719
+So if you see this and think something is missing,
+
+00:01:32.720 --> 00:01:34.519
+feel free to add it.
+
+00:01:34.520 --> 00:01:36.839
+So without further ado,
+
+00:01:36.840 --> 00:01:41.759
+let's begin taking a look at new features in Emacs 30.
+
+NOTE Android
+
+00:01:41.760 --> 00:01:44.679
+The biggest one, and the one I want to mention first,
+
+00:01:44.680 --> 00:01:49.039
+is Android support, native Android support.
+
+00:01:49.040 --> 00:01:51.879
+As you can see here, Emacs has been ported
+
+00:01:51.880 --> 00:01:53.639
+to the Android operating system.
+
+00:01:53.640 --> 00:01:56.479
+What this means is that from Emacs 30 onwards,
+
+00:01:56.480 --> 00:02:01.279
+you can build Android to target Android devices natively
+
+00:02:01.280 --> 00:02:06.759
+and using a graphical interface.
+
+00:02:06.760 --> 00:02:08.799
+While it has been possible to run Emacs
+
+00:02:08.800 --> 00:02:11.159
+inside of terminal emulators on Android for a while,
+
+00:02:11.160 --> 00:02:13.919
+this actually means that you can use Emacs
+
+00:02:13.920 --> 00:02:17.519
+on an Android device, a phone or a tablet,
+
+00:02:17.520 --> 00:02:20.959
+and have all the usual advantages from GUI Emacs,
+
+00:02:20.960 --> 00:02:23.479
+such as the ability to bind all commands
+
+00:02:23.480 --> 00:02:25.479
+without having to worry about--
+
+00:02:25.480 --> 00:02:27.279
+all keys without having to worry
+
+00:02:27.280 --> 00:02:29.359
+about terminal compatibility issues,
+
+00:02:29.360 --> 00:02:32.759
+displaying images and multiple fonts
+
+00:02:32.760 --> 00:02:35.359
+on the same display of different sizes.
+
+00:02:35.360 --> 00:02:37.279
+I should have a recording
+
+00:02:37.280 --> 00:02:42.199
+of that somewhere here--here we are--
+
+00:02:42.200 --> 00:02:44.439
+which I made earlier on my phone,
+
+00:02:44.440 --> 00:02:47.319
+because I'm recording this on a laptop--
+
+00:02:47.320 --> 00:02:50.479
+where we can see how touch interaction works
+
+00:02:50.480 --> 00:02:53.199
+on an Android phone. I can switch between buffers.
+
+00:02:53.200 --> 00:02:56.119
+Here I've connected an external keyboard,
+
+00:02:56.120 --> 00:02:58.559
+opening the Emacs website.
+
+00:02:58.560 --> 00:03:02.679
+We have images that we can interact with.
+
+00:03:02.680 --> 00:03:05.319
+We could resize them if we wanted to
+
+00:03:05.320 --> 00:03:07.559
+with the image resizing commands.
+
+00:03:07.560 --> 00:03:10.359
+Pinch-to-zoom works, so it
+
+00:03:10.360 --> 00:03:12.759
+does realize what touchscreen interactions are.
+
+00:03:12.760 --> 00:03:15.239
+With an external mouse, and for example,
+
+00:03:15.240 --> 00:03:17.799
+enabling context menu mode,
+
+00:03:17.800 --> 00:03:22.679
+I can even pop up little interaction windows,
+
+00:03:22.680 --> 00:03:27.239
+which one you would usually also know from GUI Emacs.
+
+00:03:27.240 --> 00:03:32.959
+TUI Emacs actually also supports them since a while now.
+
+00:03:32.960 --> 00:03:34.639
+And in this case, I'm demonstrating
+
+00:03:34.640 --> 00:03:35.999
+how even the touchscreen events
+
+00:03:36.000 --> 00:03:39.119
+can be inspected using the usual help system,
+
+00:03:39.120 --> 00:03:43.359
+and how context-mode notices
+
+00:03:43.360 --> 00:03:45.239
+where we are and allows me to, for example,
+
+00:03:45.240 --> 00:03:47.799
+evaluate this specific region,
+
+00:03:47.800 --> 00:03:49.079
+which I've highlighted down there,
+
+00:03:49.080 --> 00:03:58.319
+binding a command to touch-screen-scroll. Yeah.
+
+00:03:58.320 --> 00:04:00.479
+One should note that these additions,
+
+00:04:00.480 --> 00:04:02.359
+for example touchscreen interaction,
+
+00:04:02.360 --> 00:04:04.159
+are not specific to Android,
+
+00:04:04.160 --> 00:04:06.839
+but they also are supported in other operating systems,
+
+00:04:06.840 --> 00:04:12.279
+such as Wayland and Xorg, which are not operating systems,
+
+00:04:12.280 --> 00:04:15.279
+and Windows, insofar as they have touchscreen,
+
+00:04:15.280 --> 00:04:18.419
+and devices have touchscreen support.
+
+00:04:18.420 --> 00:04:21.239
+One should mention, or I want to mention,
+
+00:04:21.240 --> 00:04:24.039
+that the main developer behind this feature, Po Lu,
+
+00:04:24.040 --> 00:04:27.319
+should be complimented for the additional effort he put
+
+00:04:27.320 --> 00:04:30.979
+into making sure that Emacs for Android
+
+00:04:30.980 --> 00:04:33.719
+can be built using only a free software toolchain,
+
+00:04:33.720 --> 00:04:36.999
+which is certainly not something one has come to expect
+
+00:04:37.000 --> 00:04:40.759
+from working on Android applications,
+
+00:04:40.760 --> 00:04:43.839
+as usually you have to agree to some terms and conditions
+
+00:04:43.840 --> 00:04:46.479
+for Google-specific software.
+
+00:04:46.480 --> 00:04:49.639
+Final note is that if you try and look for this online,
+
+00:04:49.640 --> 00:04:52.119
+there are APKs you can find,
+
+00:04:52.120 --> 00:04:54.679
+but some of them might be outdated.
+
+00:04:54.680 --> 00:04:59.359
+To the best of my knowledge, Po Lu has...
+
+00:04:59.360 --> 00:05:02.399
+Emacs 30 Android Sourceforge...
+
+00:05:02.400 --> 00:05:06.759
+He has set up some system where here in Sourceforge,
+
+00:05:06.760 --> 00:05:12.799
+there are regular and updated
+
+00:05:12.800 --> 00:05:14.519
+APK files which you can download
+
+00:05:14.520 --> 00:05:17.039
+to avoid having to build it yourself,
+
+00:05:17.040 --> 00:05:18.559
+testing out the newest version
+
+00:05:18.560 --> 00:05:27.619
+in case there are some bugs which you'd like to report.
+
+00:05:27.620 --> 00:05:33.119
+Which-key is a package which has now been moved
+
+00:05:33.120 --> 00:05:34.719
+from ELPA to the core.
+
+00:05:34.720 --> 00:05:38.879
+If you haven't heard of which-key before, the idea is,
+
+00:05:38.880 --> 00:05:41.399
+or the general pitch is that which-key
+
+00:05:41.400 --> 00:05:45.279
+is a additional documentation interface for Emacs
+
+00:05:45.280 --> 00:05:49.639
+for displaying various keys which you could input,
+
+00:05:49.640 --> 00:05:53.479
+or various keys and key maps
+
+00:05:53.480 --> 00:05:55.479
+that have been partially inputted.
+
+00:05:55.480 --> 00:05:57.639
+A better way to demonstrate this
+
+00:05:57.640 --> 00:05:59.319
+or to explain this is just to show it.
+
+00:05:59.320 --> 00:06:03.519
+If we enable the which-key mode--it's a global minor mode--
+
+00:06:03.520 --> 00:06:06.399
+then I can press, for example, C-x,
+
+00:06:06.400 --> 00:06:08.719
+which is a prefix for the C-x keymap.
+
+00:06:08.720 --> 00:06:11.719
+Then down here in the buffer, in this window down here,
+
+00:06:11.720 --> 00:06:15.599
+we see various commands which we could invoke
+
+00:06:15.600 --> 00:06:17.919
+and the keys to invoke them with.
+
+00:06:17.920 --> 00:06:23.039
+For example, if I wanted to say C-x i for insert-file,
+
+00:06:23.040 --> 00:06:27.319
+then I just have to press i to highlight it once again.
+
+00:06:27.320 --> 00:06:32.559
+It should be down here. Pressing i without having to repeat
+
+00:06:32.560 --> 00:06:34.759
+the entire key code again,
+
+00:06:34.760 --> 00:06:37.719
+the partial key code again, just works.
+
+00:06:37.720 --> 00:06:41.679
+This is different from the feature which Emacs has already,
+
+00:06:41.680 --> 00:06:45.519
+which is if you have input the partial keychord,
+
+00:06:45.520 --> 00:06:47.039
+you can press C-h
+
+00:06:47.040 --> 00:06:50.959
+and then a help buffer pops up with a listing
+
+00:06:50.960 --> 00:06:54.159
+of all keybindings that start with C-x.
+
+00:06:54.160 --> 00:06:56.639
+The information is the same, the presentation is different,
+
+00:06:56.640 --> 00:06:59.159
+because now if I wanted to do C-x i,
+
+00:06:59.160 --> 00:07:03.319
+I have to repeat the entire keychord again.
+
+00:07:03.320 --> 00:07:09.479
+So it's a matter of personal preference, which you prefer.
+
+00:07:09.480 --> 00:07:12.519
+This is more of a traditional static approach
+
+00:07:12.520 --> 00:07:19.639
+because I get a help buffer which I can search
+
+00:07:19.640 --> 00:07:21.119
+using usual key commands,
+
+00:07:21.120 --> 00:07:28.159
+while which-key is more of a transient and modern.
+
+00:07:28.160 --> 00:07:31.299
+Some might prefer that approach
+
+00:07:31.300 --> 00:07:35.519
+to solving the same problem.
+
+00:07:35.520 --> 00:07:39.119
+Also, don't forget to check out the customization group
+
+00:07:39.120 --> 00:07:41.959
+for which-key which has a number of options
+
+00:07:41.960 --> 00:07:44.699
+which you might or might not be interested in.
+
+NOTE EditorConfig
+
+00:07:44.700 --> 00:07:50.879
+Next up, Emacs 30 has built-in EditorConfig support.
+
+00:07:50.880 --> 00:07:53.679
+If you have not heard of EditorConfig before,
+
+00:07:53.680 --> 00:07:56.379
+I believe I've linked to it down here somewhere.
+
+00:07:56.380 --> 00:08:00.160
+Ah, there it is, EditorConfig.
+
+00:08:00.161 --> 00:08:05.260
+This is a file format used to specify
+
+00:08:05.261 --> 00:08:11.959
+common formatting rules in an editor-agnostic way.
+
+00:08:11.960 --> 00:08:16.319
+You might compare it to .dir-locals.el files,
+
+00:08:16.320 --> 00:08:19.159
+which is a sort of an s-expression
+
+00:08:19.160 --> 00:08:22.159
+for setting file-local variables in Emacs.
+
+00:08:22.160 --> 00:08:26.559
+Of course, this is restricted to the common subset
+
+00:08:26.560 --> 00:08:29.299
+of what all editors should understand.
+
+00:08:29.300 --> 00:08:31.839
+For example, indentation styles,
+
+00:08:31.840 --> 00:08:36.699
+whether you prefer tabs or spaces,
+
+00:08:36.700 --> 00:08:38.759
+tab width, file encoding, and so on.
+
+00:08:38.760 --> 00:08:43.959
+So it's nothing too advanced, but it's something...
+
+00:08:43.960 --> 00:08:48.559
+It is a file format which one sees popping up more
+
+00:08:48.560 --> 00:08:50.439
+and more often in lots of projects
+
+00:08:50.440 --> 00:08:53.479
+which want to enforce a consistent indentation style
+
+00:08:53.480 --> 00:08:56.639
+or formatting rules for all editors in a project.
+
+00:08:56.640 --> 00:09:00.159
+Having this built in is certainly useful in Emacs.
+
+00:09:00.160 --> 00:09:03.579
+Though one should note that it's not enabled by default.
+
+00:09:03.580 --> 00:09:11.039
+You still have to enable the global minor mode,
+
+00:09:11.040 --> 00:09:14.239
+which is simply turning on this one option.
+
+00:09:14.240 --> 00:09:15.599
+Shouldn't be more than that,
+
+00:09:15.600 --> 00:09:18.759
+and then Emacs will respect the rules.
+
+00:09:18.760 --> 00:09:22.999
+If it finds a .editorconfig file in the project directory,
+
+00:09:23.000 --> 00:09:25.319
+then it will respect those rules
+
+00:09:25.320 --> 00:09:30.239
+without having to do anything else.
+
+NOTE use-package integration with package-vc
+
+00:09:30.240 --> 00:09:34.599
+Next up, use-package integration with package-vc.
+
+00:09:34.600 --> 00:09:36.519
+For those not familiar with either of the two,
+
+00:09:36.520 --> 00:09:38.119
+or at least one of the two,
+
+00:09:38.120 --> 00:09:41.079
+use-package is a popular configuration macro.
+
+00:09:41.080 --> 00:09:43.119
+What it does is it allows
+
+00:09:43.120 --> 00:09:46.274
+users to declaratively specify packages
+
+00:09:46.275 --> 00:09:48.879
+they would like to have installed and configured
+
+00:09:48.880 --> 00:09:51.539
+in their configuration file,
+
+00:09:51.540 --> 00:09:54.359
+so that, for example, if you copy your init.el
+
+00:09:54.360 --> 00:09:55.959
+from one system to another,
+
+00:09:55.960 --> 00:09:58.519
+it could bootstrap the entire configuration,
+
+00:09:58.520 --> 00:10:00.719
+downloading all the packages you want
+
+00:10:00.720 --> 00:10:02.239
+without having to manually do this
+
+00:10:02.240 --> 00:10:05.039
+on every system you'd like to use.
+
+00:10:05.040 --> 00:10:07.559
+This allows configurations
+
+00:10:07.560 --> 00:10:11.039
+to be self-encapsulated and portable.
+
+00:10:11.040 --> 00:10:15.959
+package-vc is an extension of package.el,
+
+00:10:15.960 --> 00:10:19.679
+which allows installing packages from an alternative.
+
+00:10:19.680 --> 00:10:22.279
+Instead of using the standard way to install packages,
+
+00:10:22.280 --> 00:10:26.239
+which is just download tarball and unpack it,
+
+00:10:26.240 --> 00:10:28.359
+byte compile, and so on,
+
+00:10:28.360 --> 00:10:32.759
+it will fetch the files for a package
+
+00:10:32.760 --> 00:10:35.279
+directly from the source code repository
+
+00:10:35.280 --> 00:10:37.239
+and initialize it in such a way
+
+00:10:37.240 --> 00:10:39.119
+that package.el can work with it.
+
+00:10:39.120 --> 00:10:44.319
+So it's just a front-end for installing packages.
+
+00:10:44.320 --> 00:10:46.519
+Even though these two were added to Emacs 29,
+
+00:10:46.520 --> 00:10:48.399
+we didn't have the time to work on the
+
+00:10:48.400 --> 00:10:52.639
+use-package integration of package-vc into use-package,
+
+00:10:52.640 --> 00:10:55.359
+which has been changed now.
+
+00:10:55.360 --> 00:11:00.119
+What we have with Emacs 30 is that
+
+00:11:00.120 --> 00:11:02.839
+there is a :vc keyword for use-package
+
+00:11:02.840 --> 00:11:05.319
+with which we can instruct use-package
+
+00:11:05.320 --> 00:11:10.760
+to not download a package using tarball,
+
+00:11:10.774 --> 00:11:12.519
+but instead to fetch the source code
+
+00:11:12.520 --> 00:11:13.799
+from a source code repository.
+
+00:11:13.800 --> 00:11:15.919
+This is useful if you, for example,
+
+00:11:15.920 --> 00:11:18.319
+have packages which you yourself work on
+
+00:11:18.320 --> 00:11:19.959
+and know that you always want to have
+
+00:11:19.960 --> 00:11:21.919
+the development version of the package
+
+00:11:21.920 --> 00:11:26.639
+where you can directly commit changes you've made
+
+00:11:26.640 --> 00:11:29.159
+to the repository and push them upstream.
+
+00:11:29.160 --> 00:11:32.399
+Or, if you know that you want to contribute to a package,
+
+00:11:32.400 --> 00:11:35.559
+you can use package-vc to download the source code,
+
+00:11:35.560 --> 00:11:37.319
+have all the version control information,
+
+00:11:37.320 --> 00:11:41.759
+prepare a patch and send it upstream.
+
+00:11:41.760 --> 00:11:44.119
+In these examples here,
+
+00:11:44.120 --> 00:11:49.119
+the first example Lisp instructs package-vc
+
+00:11:49.120 --> 00:11:52.959
+to download the source code from a URL.
+
+00:11:52.960 --> 00:11:55.119
+So this is a git URL where it will download
+
+00:11:55.120 --> 00:11:57.399
+the source code from, and in this case,
+
+00:11:57.400 --> 00:12:00.399
+choose the newest checkout of the source code,
+
+00:12:00.400 --> 00:12:05.680
+not the latest release. Down here, we have another example.
+
+00:12:05.060 --> 00:12:09.159
+I prefer to consider the following example here.
+
+00:12:09.160 --> 00:12:10.879
+If we just had written this,
+
+00:12:10.880 --> 00:12:13.159
+then package-vc would use the metadata
+
+00:12:13.160 --> 00:12:16.279
+which an ELPA server provides
+
+00:12:16.280 --> 00:12:19.799
+to fetch the URL from the official repository of,
+
+00:12:19.800 --> 00:12:22.839
+in this case, BBDB, without having to...
+
+00:12:22.840 --> 00:12:28.239
+It would be more or less the same like this up here,
+
+00:12:28.240 --> 00:12:32.639
+with the simple difference that package-vc integration
+
+00:12:32.640 --> 00:12:36.359
+into use-package doesn't check out the latest commit,
+
+00:12:36.360 --> 00:12:38.359
+but the latest release,
+
+00:12:38.360 --> 00:12:44.159
+just to keep configurations more deterministic by default.
+
+00:12:44.160 --> 00:12:47.879
+Of course, if you prefer to use latest commit,
+
+00:12:47.880 --> 00:12:52.439
+you can use a package-vc install command
+
+00:12:52.440 --> 00:12:54.879
+or just update the package manually yourself,
+
+00:12:54.880 --> 00:13:01.739
+which you can use using package-vc-upgrade.
+
+00:13:01.740 --> 00:13:04.319
+Next, I'd like to focus on a few features
+
+00:13:04.320 --> 00:13:07.740
+which one might not necessarily realize directly,
+
+00:13:07.741 --> 00:13:11.399
+but will hopefully improve your experience with Emacs.
+
+NOTE JSON
+
+00:13:11.400 --> 00:13:15.119
+First up in this list is a new JSON parser.
+
+00:13:15.120 --> 00:13:21.399
+Let's maybe show the source code for that one:
+
+00:13:21.400 --> 00:13:39.319
+not json.el, json.c. The history of JSON parsing in Emacs
+
+00:13:39.320 --> 00:13:43.279
+started with Emacs 23 with the addition of json.el.
+
+00:13:43.280 --> 00:13:46.919
+This was the file which we had just opened a moment ago.
+
+00:13:46.920 --> 00:13:50.959
+This is a JSON parser in Emacs Lisp.
+
+00:13:50.960 --> 00:13:53.199
+It's fine, it does the job, but it can get slow
+
+00:13:53.200 --> 00:13:55.479
+if we have a situation like where
+
+00:13:55.480 --> 00:14:00.479
+Eglot uses a LSP server to communicate with
+
+00:14:00.480 --> 00:14:02.959
+and the LSP server can get a bit chatty,
+
+00:14:02.960 --> 00:14:05.479
+sending a lot of JSON data,
+
+00:14:05.480 --> 00:14:08.199
+which all has to be parsed and garbage collected,
+
+00:14:08.200 --> 00:14:10.199
+which can slow down Emacs a bit.
+
+00:14:10.200 --> 00:14:14.119
+The situation was improved upon in Emacs 29
+
+00:14:14.120 --> 00:14:17.959
+when JSON parsing was added to the core.
+
+00:14:17.960 --> 00:14:21.039
+This was the json.c file, which we see on this side,
+
+00:14:21.040 --> 00:14:23.279
+the old version of the json.c file,
+
+00:14:23.280 --> 00:14:27.119
+which employed the Jansson library (it's the C library)
+
+00:14:27.120 --> 00:14:33.159
+for parsing and accelerating JSON parsing in Emacs.
+
+00:14:33.160 --> 00:14:33.999
+This was good enough,
+
+00:14:34.000 --> 00:14:36.159
+or it certainly improved the situation
+
+00:14:36.160 --> 00:14:38.559
+for a lot of LSP clients.
+
+00:14:38.560 --> 00:14:45.479
+But in Emacs 30, the situation has been improved once more
+
+00:14:45.480 --> 00:14:50.359
+with the addition of a JSON parser directly in Emacs.
+
+00:14:50.360 --> 00:14:52.999
+So instead of using an external library,
+
+00:14:53.000 --> 00:14:57.719
+there's a custom JSON parser written in C in the Emacs core,
+
+00:14:57.720 --> 00:15:01.559
+which directly generates Elisp objects.
+
+00:15:01.560 --> 00:15:04.999
+The advantage to this approach
+
+00:15:05.000 --> 00:15:06.359
+compared to the Jansson approach
+
+00:15:06.360 --> 00:15:07.919
+is that there's no intermediate format
+
+00:15:07.920 --> 00:15:09.199
+which has to be allocated
+
+00:15:09.200 --> 00:15:11.559
+and memory managed and freed again,
+
+00:15:11.560 --> 00:15:19.479
+which of course incurs an additional performance overhead.
+
+00:15:19.480 --> 00:15:22.659
+Next to this, there's also a custom serializer
+
+00:15:22.660 --> 00:15:27.119
+for JSON contents translating a JSON object into a string.
+
+00:15:27.120 --> 00:15:30.279
+... The consequence of this is that
+
+00:15:30.280 --> 00:15:35.600
+there is absolutely no dependency on Jansson anymore.
+
+00:15:35.640 --> 00:15:38.559
+This in turn means that now all Emacs users
+
+00:15:38.560 --> 00:15:39.799
+from Emacs 30 onwards
+
+00:15:39.800 --> 00:15:43.119
+can take advantage of this new JSON parser
+
+00:15:43.120 --> 00:15:44.879
+and don't have to worry about whether
+
+00:15:44.880 --> 00:15:47.799
+or not they have Jansson, this JSON parsing library,
+
+00:15:47.800 --> 00:15:50.999
+installed on their system or not when they want
+
+00:15:51.000 --> 00:15:56.839
+to take advantage of this accelerated JSON parsing.
+
+NOTE Native compilation
+
+00:15:56.840 --> 00:16:00.639
+Next up, another behind-the-scenes feature
+
+00:16:00.640 --> 00:16:04.559
+is that if you build Emacs on your own from source,
+
+00:16:04.560 --> 00:16:07.879
+you might know that if you wanted
+
+00:16:07.880 --> 00:16:09.559
+to use native compilation,
+
+00:16:09.560 --> 00:16:12.319
+so the translation of Elisp bytecodes
+
+00:16:12.320 --> 00:16:15.559
+to whatever the native assembly
+
+00:16:15.560 --> 00:16:19.319
+or native instruction set is on your system,
+
+00:16:19.320 --> 00:16:24.359
+you have to specify with native compilation.
+
+00:16:24.360 --> 00:16:25.879
+when invoking the configure script,
+
+00:16:25.880 --> 00:16:28.879
+otherwise it would not have been enabled at all.
+
+00:16:28.880 --> 00:16:34.119
+With Emacs 30, this step is not necessary anymore.
+
+00:16:34.120 --> 00:16:36.719
+The configure script will automatically check
+
+00:16:36.720 --> 00:16:41.759
+if you have the libgccjit library installed on your system,
+
+00:16:41.760 --> 00:16:42.879
+and if that is so,
+
+00:16:42.880 --> 00:16:45.999
+then native compilation will be enabled by default.
+
+00:16:46.000 --> 00:16:49.559
+In other words, if you have an issue with native compilation
+
+00:16:49.560 --> 00:16:52.799
+or prefer not to use it for whatever reason,
+
+00:16:52.800 --> 00:16:55.559
+you now have to type --without-native-compilation
+
+00:16:55.560 --> 00:16:58.199
+when compiling Emacs to prevent this from happening.
+
+00:16:58.200 --> 00:17:02.279
+But native compilation was added in Emacs 28
+
+00:17:02.280 --> 00:17:04.399
+and has proven to be a very stable
+
+00:17:04.400 --> 00:17:06.199
+and useful feature for most people,
+
+00:17:06.200 --> 00:17:10.199
+so there's probably no reason to do this
+
+00:17:10.200 --> 00:17:10.939
+and you can just invoke the configure script
+
+00:17:10.940 --> 00:17:16.239
+with one argument less. Right, and I'd like to finish up
+
+00:17:16.240 --> 00:17:19.399
+with a few smaller features, a few smaller highlights.
+
+00:17:19.400 --> 00:17:30.719
+Maybe we can go back to the listing here. Here we have it.
+
+NOTE Tree-sitter
+
+00:17:30.720 --> 00:17:32.839
+There are a few new major modes
+
+00:17:32.840 --> 00:17:34.239
+based on the tree-sitter library.
+
+00:17:34.240 --> 00:17:37.739
+tree-sitter is this parser library
+
+00:17:37.740 --> 00:17:42.879
+which has been integrated into Emacs 29.
+
+00:17:42.880 --> 00:17:44.079
+It allows the integration
+
+00:17:44.080 --> 00:17:48.359
+of external, specialized, and quick parsers into Emacs,
+
+00:17:48.360 --> 00:17:52.119
+which improve stuff like syntax highlighting, indentation,
+
+00:17:52.120 --> 00:17:55.279
+structural navigation, imenu support,
+
+00:17:55.280 --> 00:18:00.839
+by simply having a better understanding of, for example,
+
+00:18:00.840 --> 00:18:03.919
+a HTML file, or a Lua file, a PHP file,
+
+00:18:03.920 --> 00:18:06.239
+than what people usually implement
+
+00:18:06.240 --> 00:18:10.319
+using regular expressions in traditional major modes.
+
+00:18:10.320 --> 00:18:16.819
+So, a few new major modes which you can try out here.
+
+NOTE Completion preview mode
+
+00:18:16.820 --> 00:18:19.959
+Another interesting feature is the completion-preview-mode.
+
+00:18:19.960 --> 00:18:23.319
+We can maybe try it out here in the scratch buffer.
+
+00:18:23.320 --> 00:18:28.199
+If I enable completion-preview-mode...
+
+00:18:28.200 --> 00:18:32.719
+This is a non-global minor mode,
+
+00:18:32.720 --> 00:18:38.479
+which will display completion options inline using overlays.
+
+00:18:38.480 --> 00:18:43.199
+For example, if I start typing a longer symbol like define,
+
+00:18:43.200 --> 00:18:48.119
+now we have a derived mode. It suggests me to...
+
+00:18:48.120 --> 00:18:51.039
+I can just press TAB and then it completes the option here,
+
+00:18:51.040 --> 00:18:51.839
+but it didn't actually...
+
+00:18:51.840 --> 00:18:55.279
+It's not actually modifying the buffer, it's not pressing,
+
+00:18:55.280 --> 00:18:57.039
+these are just overlays,
+
+00:18:57.040 --> 00:18:59.519
+so if I move around, it gets deleted.
+
+00:18:59.520 --> 00:19:02.539
+It wouldn't get saved if I were to save the buffer.
+
+00:19:02.540 --> 00:19:04.999
+The same also should work in a shell buffer.
+
+00:19:05.000 --> 00:19:09.239
+If I enable completion preview mode here and start...
+
+00:19:09.240 --> 00:19:12.759
+In this case, I'm using the bash completion package,
+
+00:19:12.760 --> 00:19:15.199
+which provides additional completion information.
+
+00:19:15.200 --> 00:19:17.839
+This is not only limited to programming systems,
+
+00:19:17.840 --> 00:19:22.919
+but anywhere where you have completion at point in Emacs.
+
+00:19:22.920 --> 00:19:26.059
+I can start typing here, ignore, and put ignore-backups,
+
+00:19:26.060 --> 00:19:29.919
+and it hints to the options which I have
+
+00:19:29.920 --> 00:19:34.219
+and allows me to complete them quickly.
+
+NOTE package-isolate
+
+00:19:34.220 --> 00:19:37.879
+Another small feature is the package-isolate command.
+
+00:19:37.880 --> 00:19:39.959
+What this does is it will start
+
+00:19:39.960 --> 00:19:42.759
+or it will prompt me for packages
+
+00:19:42.760 --> 00:19:44.119
+I have installed in my system
+
+00:19:44.120 --> 00:19:46.439
+and will start an isolated
+
+00:19:46.440 --> 00:19:51.079
+or like "emacs -Q"-ish instance of emacs
+
+00:19:51.080 --> 00:19:53.639
+with only these packages installed.
+
+00:19:53.640 --> 00:20:00.279
+So for example, if I said I want slime and I want diff-hl,
+
+00:20:00.280 --> 00:20:02.279
+then this is a new Emacs window.
+
+00:20:02.280 --> 00:20:04.439
+It's unrelated to the one around.
+
+00:20:04.440 --> 00:20:06.839
+It uses the same executable, of course,
+
+00:20:06.840 --> 00:20:09.939
+but will not load your configuration file
+
+00:20:09.940 --> 00:20:13.619
+or any other further customizations on your system.
+
+00:20:13.620 --> 00:20:15.159
+All it does, it will ensure
+
+00:20:15.160 --> 00:20:17.919
+that these packages, which are listed here,
+
+00:20:17.920 --> 00:20:24.499
+so in our case SLIME and dependencies of SLIME and diff-hl,
+
+00:20:24.500 --> 00:20:25.239
+in the system
+
+00:20:25.240 --> 00:20:29.039
+so that I could, for example, as you can see here,
+
+00:20:29.040 --> 00:20:31.959
+diff-hl-mode works.
+
+00:20:31.960 --> 00:20:35.479
+Okay, this is not a version-controlled file.
+
+00:20:35.480 --> 00:20:41.119
+Maybe if we take a look at, have I enabled diff-hl-mode?
+
+00:20:41.120 --> 00:20:44.559
+It's enabled in this case. What diff-hl-mode does
+
+00:20:44.560 --> 00:20:48.479
+is it displays these version control changes
+
+00:20:48.480 --> 00:20:49.999
+in the fringe of a buffer.
+
+00:20:50.000 --> 00:20:54.079
+And even though this is a uncustomized version of Emacs,
+
+00:20:54.080 --> 00:20:56.319
+or an uncustomized instance of Emacs,
+
+00:20:56.320 --> 00:20:58.959
+it was easy for me to load this one package,
+
+00:20:58.960 --> 00:21:01.959
+or these two packages and all the dependencies necessary.
+
+00:21:01.960 --> 00:21:05.319
+As you can imagine, the main purpose for this
+
+00:21:05.320 --> 00:21:07.719
+is to make debugging issues easier.
+
+00:21:07.720 --> 00:21:10.519
+If you want to report about an issue
+
+00:21:10.520 --> 00:21:14.519
+you have with a package. And if I close this, it's closed
+
+00:21:14.520 --> 00:21:16.779
+and everything's thrown away.
+
+NOTE Reindenting
+
+00:21:16.780 --> 00:21:18.959
+Last up, a nice feature I think
+
+00:21:18.960 --> 00:21:21.199
+a lot of people will appreciate is,
+
+00:21:21.200 --> 00:21:24.239
+if you are familiar with... Let's open a text buffer.
+
+00:21:24.240 --> 00:21:30.079
+The M-q key is traditionally bound to fill-paragraph.
+
+00:21:30.080 --> 00:21:32.119
+What this means is that...
+
+00:21:32.120 --> 00:21:34.999
+Let's, for example, copy this text from here
+
+00:21:35.000 --> 00:21:40.359
+and squash it all into one line. If I press M-q here,
+
+00:21:40.360 --> 00:21:42.399
+then the lines will be broken
+
+00:21:42.400 --> 00:21:49.479
+according to the fill column indicator up here.
+
+00:21:49.480 --> 00:21:52.399
+This is the traditional usage of M-q,
+
+00:21:52.400 --> 00:21:54.119
+and it still works in text-mode buffers,
+
+00:21:54.120 --> 00:21:56.639
+but in prog-mode buffers--
+
+00:21:56.640 --> 00:22:00.079
+so any major mode inheriting prog-mode--
+
+00:22:00.080 --> 00:22:02.199
+M-q will now by default be bound
+
+00:22:02.200 --> 00:22:09.719
+to prog-fill-reindent-defun. To summarize the point,
+
+00:22:09.720 --> 00:22:13.479
+if you are editing a string or a comment,
+
+00:22:13.480 --> 00:22:15.919
+then the comment will be filled.
+
+00:22:15.920 --> 00:22:19.159
+But if you are outside of a comment or outside of a string,
+
+00:22:19.160 --> 00:22:22.919
+then the defun or the top-level construct
+
+00:22:22.920 --> 00:22:26.119
+in the programming language will be re-indented.
+
+00:22:26.120 --> 00:22:33.859
+Let's try that out with maybe some file I have open here.
+
+00:22:33.860 --> 00:22:38.819
+If I'm in this... Let's choose some function,
+
+00:22:38.820 --> 00:22:41.279
+let's take this for example.
+
+00:22:41.280 --> 00:22:43.879
+If we followed all of this again,
+
+00:22:43.880 --> 00:22:47.619
+and I press M-q in on this paragraph,
+
+00:22:47.620 --> 00:22:50.039
+then the paragraph gets re-indented.
+
+00:22:50.040 --> 00:22:54.859
+But if I'm down here and I choose to break the indentation
+
+00:22:54.860 --> 00:22:56.180
+and then press M-q,
+
+00:22:56.181 --> 00:23:02.399
+then as you see, it practically selected the defun
+
+00:23:02.400 --> 00:23:03.559
+and re-indented everything
+
+00:23:03.560 --> 00:23:05.959
+without having need to move the point around in the buffer.
+
+00:23:06.800 --> 00:23:08.679
+So I think that's a really nice feature,
+
+00:23:08.680 --> 00:23:11.039
+which a lot of people can appreciate.
+
+00:23:11.040 --> 00:23:17.879
+It's one of those niceties which comes from time to time.
+
+NOTE Wrapping up
+
+00:23:17.880 --> 00:23:20.679
+Right, so that was my overview
+
+00:23:20.680 --> 00:23:22.559
+of what's going to be new in Emacs 30.
+
+00:23:22.560 --> 00:23:24.359
+I hope that most people could take away
+
+00:23:24.360 --> 00:23:25.659
+something from this presentation
+
+00:23:25.660 --> 00:23:29.419
+and have something to look forward
+
+00:23:29.420 --> 00:23:31.599
+to try out after upgrading.
+
+00:23:31.600 --> 00:23:33.839
+As mentioned initially, as of recording,
+
+00:23:33.840 --> 00:23:36.939
+this release has not been completed yet.
+
+00:23:36.940 --> 00:23:38.879
+If this is still not the case
+
+00:23:38.880 --> 00:23:40.199
+when you're seeing this video,
+
+00:23:40.200 --> 00:23:43.799
+please consider downloading and building Emacs 30 yourself.
+
+00:23:43.800 --> 00:23:48.319
+If you have any issues, which is always the case,
+
+00:23:48.320 --> 00:23:56.339
+please report them to using report-emacs-bug.
+
+00:23:56.340 --> 00:23:57.740
+That will pop up a mail buffer,
+
+00:23:57.741 --> 00:23:59.519
+and then you can describe your issue and send them out.
+
+00:23:59.520 --> 00:24:01.839
+All bug reports are valuable,
+
+00:24:01.840 --> 00:24:03.999
+even if they are false positives or duplicates--
+
+00:24:04.000 --> 00:24:05.239
+it doesn't matter--
+
+00:24:05.240 --> 00:24:08.919
+because when you take the time to submit a bug report,
+
+00:24:08.920 --> 00:24:12.359
+which describes something that's specific to your setup,
+
+00:24:12.360 --> 00:24:16.839
+which the developers might not have noticed or known about,
+
+00:24:16.840 --> 00:24:19.079
+then you are certainly helping out a lot of other people
+
+00:24:19.080 --> 00:24:21.679
+which might run into the same issue in the future.
+
+00:24:21.680 --> 00:24:23.359
+Especially with upgrades,
+
+00:24:23.360 --> 00:24:26.559
+it would be nice to figure out small problems
+
+00:24:26.560 --> 00:24:30.879
+which make upgrading difficult for some people.
+
+00:24:30.880 --> 00:24:34.559
+The ideal is, of course, to have no issues
+
+00:24:34.560 --> 00:24:37.199
+when upgrading from one version to another.
+
+00:24:37.200 --> 00:24:41.939
+Having said that, I thank you for your attention,
+
+00:24:41.940 --> 00:24:43.120
+and I'm saying goodbye.
diff --git a/2024/captions/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--answers.vtt b/2024/captions/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--answers.vtt
new file mode 100644
index 00000000..510e556e
--- /dev/null
+++ b/2024/captions/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--answers.vtt
@@ -0,0 +1,720 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:08.119
+All right. Hey, thanks for bearing with us there. We had a
+
+00:00:08.120 --> 00:00:11.239
+couple of bumps in the road, a cross between a couple of
+
+00:00:11.240 --> 00:00:13.479
+different versions of our program that we deliver here,
+
+00:00:13.480 --> 00:00:17.959
+different ways that we bring this stream together between
+
+00:00:17.960 --> 00:00:22.359
+the recorded content that that speakers are putting
+
+00:00:22.360 --> 00:00:26.879
+together in advance in the live content, such as what you're
+
+00:00:26.880 --> 00:00:31.039
+seeing right here. So thanks go to Sacha and Leo, and
+
+00:00:31.040 --> 00:00:34.359
+everybody behind the stages gluing it all together. And
+
+00:00:34.360 --> 00:00:40.199
+we're back here now, and I'm speaking with Robin, who us
+
+00:00:40.200 --> 00:00:42.799
+ready to take on some of your questions and address some of
+
+00:00:42.800 --> 00:00:46.879
+the comments over here on the etherpad. If you want to jump in
+
+00:00:46.880 --> 00:00:51.319
+there, there's links in the chat. And thanks so much, Robin,
+
+00:00:51.320 --> 00:00:53.999
+for your talk. And it's also been a pleasure chatting with
+
+00:00:54.000 --> 00:00:57.919
+you just a little bit over the last couple of months on IRC.
+
+00:00:57.920 --> 00:01:33.319
+Yeah, absolutely. Great meeting you.
+
+00:01:33.320 --> 00:01:37.679
+All right. All right, everyone. I think I am streaming now.
+
+00:01:37.680 --> 00:01:42.439
+So let's look at it. Let's see. I see the IRC scrolling. So
+
+00:01:42.440 --> 00:01:47.199
+let's see where that's going. Yes, the Common Lisp is what I
+
+00:01:47.200 --> 00:01:50.519
+thought would piss people off. And because it's not part of
+
+00:01:50.520 --> 00:01:54.239
+either community, but I think it would be a good compromise
+
+00:01:54.240 --> 00:01:57.839
+for building a Lisp into a language that's more suitable for
+
+00:01:57.840 --> 00:02:01.879
+building large systems like the kind that we are building in
+
+00:02:01.880 --> 00:02:07.279
+Emacs today. I also left out an important part of the talk,
+
+00:02:07.280 --> 00:02:12.079
+which is part of the motivation for transitioning from C to
+
+00:02:12.080 --> 00:02:15.599
+Lisp. And that's the performance characteristics
+
+00:02:15.600 --> 00:02:19.399
+fundamentally change when you get a modern and high
+
+00:02:19.400 --> 00:02:23.559
+performance Lisp system involved. it starts getting less
+
+00:02:23.560 --> 00:02:27.799
+practical to just call out to C to speed up every operation.
+
+00:02:27.800 --> 00:02:31.559
+Among other things, you lose the ability to use more
+
+00:02:31.560 --> 00:02:34.759
+advanced control structures, like the limited
+
+00:02:34.760 --> 00:02:40.039
+continuations. And you also have to pay the overhead of
+
+00:02:40.040 --> 00:02:43.879
+calling out to our foreign function. So it gets to be an
+
+00:02:43.880 --> 00:02:47.879
+increasingly better deal to optimize your list
+
+00:02:47.880 --> 00:02:52.719
+implementation and provide ways for building faster list
+
+00:02:52.720 --> 00:02:55.879
+programs, such as type annotations, once you've gotten
+
+00:02:55.880 --> 00:03:01.479
+over a certain threshold of performance.
+
+NOTE Q: About fibers: My understanding is that the problem with making Elisp concurrent is that none of the data structures (buffer, cons, vector, window etc) are concurrency-safe.  How do fibers help with this?
+
+00:03:01.480 --> 00:03:07.359
+I'm going to look at the pad. Here we go. The first question is
+
+00:03:07.360 --> 00:03:12.519
+about fibers and whether they help with making Elisp
+
+00:03:12.520 --> 00:03:18.279
+concurrent in terms of its data structures. Yes, that's
+
+00:03:18.280 --> 00:03:23.879
+absolutely correct. Fibers by themselves do not provide
+
+00:03:23.880 --> 00:03:26.799
+thread safety for any of the existing Emacs data
+
+00:03:26.800 --> 00:03:32.879
+structures. What they are useful for is building things
+
+00:03:32.880 --> 00:03:38.199
+that don't use Emacs data structures, say a network client
+
+00:03:38.200 --> 00:03:44.559
+that reads input from a stream or in scheme, a port or a stream
+
+00:03:44.560 --> 00:03:49.679
+instead of a buffer. And we can also take a look at options for
+
+00:03:49.680 --> 00:03:54.199
+making more Emacs features concurrency safe or thread
+
+00:03:54.200 --> 00:03:58.079
+safe. For example, we could introduce the idea of a thread
+
+00:03:58.080 --> 00:04:03.039
+local buffer that didn't require locks for sharing between
+
+00:04:03.040 --> 00:04:09.239
+different threads. And I'm not sure how that would develop,
+
+00:04:09.240 --> 00:04:12.319
+but I'm sure the Emacs maintainers already have some ideas
+
+00:04:12.320 --> 00:04:17.519
+in this direction. Fibers will basically provide a
+
+00:04:17.520 --> 00:04:22.159
+high-performance system that you can use apart from
+
+00:04:22.160 --> 00:04:28.079
+ordinary Emacs-less constructs.
+
+NOTE Q: Do you have a rough idea of how much of Guile is written in C?
+
+00:04:28.080 --> 00:04:34.839
+Let's see. We have another question. Emacs is roughly 25% C.
+
+00:04:34.840 --> 00:04:38.839
+How much of Guile is in C?
+
+00:04:38.840 --> 00:04:45.679
+Well, part of my point about C is not so much that there, well,
+
+00:04:45.680 --> 00:04:50.279
+obviously, I phrased it a little provocatively, but the
+
+00:04:50.280 --> 00:04:54.719
+problem is not so much that there is C, but that there is so
+
+00:04:54.720 --> 00:05:00.279
+much C involved in every single layer of the application.
+
+00:05:00.280 --> 00:05:04.559
+So, for example, we're limited in our ability to use tools
+
+00:05:04.560 --> 00:05:08.159
+like limit continuations, which can be used to express
+
+00:05:08.160 --> 00:05:13.599
+buffer local variable binding in a few dozen lines, because
+
+00:05:13.600 --> 00:05:21.839
+Emacs has so much calling back and forth between guile and C,
+
+00:05:21.840 --> 00:05:26.599
+due to so much basic functionality being in primitive C
+
+00:05:26.600 --> 00:05:34.119
+subroutines. So that's one issue apart from the question of
+
+00:05:34.120 --> 00:05:38.359
+how much is in a particular language. To answer the question
+
+00:05:38.360 --> 00:05:45.879
+about Guile, Guile has about 165,000 lines of scheme code
+
+00:05:45.880 --> 00:05:51.599
+and about 160,000 lines of C code, so it's about half and
+
+00:05:51.600 --> 00:05:55.879
+half. And that shouldn't really be surprising given that it
+
+00:05:55.880 --> 00:06:00.359
+is actually focused on low-level things like building a
+
+00:06:00.360 --> 00:06:05.079
+high-performance bytecode compiler, and a just-in-time
+
+00:06:05.080 --> 00:06:09.719
+compiler, and so on, as well as providing its own fairly
+
+00:06:09.720 --> 00:06:14.999
+rich, but still far less complete than Emacs's standard
+
+00:06:15.000 --> 00:06:19.239
+library, in terms of Ice9 and other system libraries
+
+NOTE Q: A Common Lisp implementation for Guile sounds really cool! Is there already work on this underway?
+
+00:06:19.240 --> 00:06:24.359
+shipped with Guile. The next question is on a Common Lisp
+
+00:06:24.360 --> 00:06:27.759
+implementation for Guile, and whether work on it is
+
+00:06:27.760 --> 00:06:33.079
+underway. In fact, work on it is already underway. I've been
+
+00:06:33.080 --> 00:06:36.399
+working on it on and off in my spare time for a couple of years
+
+00:06:36.400 --> 00:06:40.039
+now. I've gotten, I think, a couple of chapters of the
+
+00:06:40.040 --> 00:06:43.519
+hyperspectin, if you want to measure it that way. But I've
+
+00:06:43.520 --> 00:06:51.719
+been focusing my work more on research and on what we need to
+
+00:06:51.720 --> 00:06:57.399
+do to have a LISP environment, a polyglot LISP environment,
+
+00:06:57.400 --> 00:07:02.759
+wherein the features of Common Lisp and Scheme and Emacs
+
+00:07:02.760 --> 00:07:08.919
+Lisp can all work easily and ergonomically together. So
+
+00:07:08.920 --> 00:07:13.879
+this involves things like the question of Lisps having
+
+00:07:13.880 --> 00:07:22.079
+Lisp1s versus Lisp2s. That is, a Lisp1-like scheme has one
+
+00:07:22.080 --> 00:07:27.599
+namespace, like every variable is a single name that can
+
+00:07:27.600 --> 00:07:31.999
+refer to one value, whereas in Lisp2s like EmacsLisp,
+
+00:07:32.000 --> 00:07:37.399
+symbols can have different definitions as functions and as
+
+00:07:37.400 --> 00:07:41.119
+variables, as well as other namespaces like property
+
+00:07:41.120 --> 00:07:45.719
+lists. So Kent Pittman has some interesting thoughts on
+
+00:07:45.720 --> 00:07:51.039
+this that I've been looking into. Another issue is the
+
+00:07:51.040 --> 00:07:57.519
+interaction between package and module systems. So I don't
+
+00:07:57.520 --> 00:08:01.839
+have really anything ready to publish just yet on this, but I
+
+00:08:01.840 --> 00:08:05.279
+have been looking into the background issues of
+
+00:08:05.280 --> 00:08:08.119
+integrating this into Guile in a useful way.
+
+00:08:08.120 --> 00:08:15.719
+And let's see, one other thing I was going to mention.
+
+00:08:15.720 --> 00:08:27.679
+Okay, I've lost it. But yeah, there is some work already. And
+
+00:08:27.680 --> 00:08:30.399
+if people are interested in moving Emacs in this direction,
+
+00:08:30.400 --> 00:08:34.479
+then we'll certainly start working on it in earnest.
+
+NOTE Q: Did switching from guile 2 to 3 give any performance benefits?
+
+00:08:34.480 --> 00:08:41.119
+Another question, did switching from Guile 2 to 3 give any
+
+00:08:41.120 --> 00:08:46.279
+performance benefits? Well, honestly, we're not really
+
+00:08:46.280 --> 00:08:50.759
+benchmarking stuff here because Guile Emacs has so much
+
+00:08:50.760 --> 00:08:55.759
+overhead from structuring the compiler to closely conform
+
+00:08:55.760 --> 00:08:59.879
+to Emacs in terms of like even things as simple as metadata
+
+00:08:59.880 --> 00:09:03.879
+layout for variable information.
+
+00:09:03.880 --> 00:09:11.999
+So I haven't actually noticed a perceptual change. I would
+
+00:09:12.000 --> 00:09:15.359
+guess based on the Gabriel benchmark results that is
+
+00:09:15.360 --> 00:09:21.399
+benefited from what somewhat from Gal 3's performance
+
+00:09:21.400 --> 00:09:27.479
+improvements but for Emacs I just don't know yet and working
+
+00:09:27.480 --> 00:09:30.199
+on the compiler's code generation and lowering the
+
+00:09:30.200 --> 00:09:33.719
+overhead is going to be the thing that provides the most
+
+00:09:33.720 --> 00:09:37.319
+return for improving that aspect of Gal Emacs.
+
+00:09:37.320 --> 00:09:54.079
+Let's see, I see SICL mentioned here, as well as SPCL. And it
+
+00:09:54.080 --> 00:09:56.919
+could certainly help with the implementation of
+
+00:09:56.920 --> 00:10:01.519
+Commonwealth and Guile, because a lot of the basic stuff is
+
+00:10:01.520 --> 00:10:05.559
+just providing a new interface to some bit of
+
+00:10:05.560 --> 00:10:08.879
+functionality. Like the sequence library, it's mostly
+
+00:10:08.880 --> 00:10:13.279
+stuff that we already have through SR5 and so on. The
+
+00:10:13.280 --> 00:10:16.879
+difficult, well, not the difficult but the time consuming
+
+00:10:16.880 --> 00:10:21.599
+parts are going to be all the little DSL sitcom on this path
+
+00:10:21.600 --> 00:10:26.999
+packed up inside it like pretty printing format loop and so
+
+00:10:27.000 --> 00:10:32.359
+on. It's for those high-level features that I think we could
+
+00:10:32.360 --> 00:10:34.959
+potentially share code with other Common Lisp
+
+00:10:34.960 --> 00:10:39.039
+implementations. And Common Lisp implementations do tend
+
+00:10:39.040 --> 00:10:43.239
+to be permissively licensed, SPCL's public domain, for
+
+00:10:43.240 --> 00:10:46.439
+example, so there's no barrier to sharing code with them.
+
+NOTE Q: Do you know if the Emacs maintainers are interested in switching to Guile as the engine for Emacs Lisp?
+
+00:10:46.440 --> 00:10:52.719
+There's another question about whether the Emacs
+
+00:10:52.720 --> 00:10:55.679
+maintainers are interested in switching to Guile as the
+
+00:10:55.680 --> 00:10:59.199
+engine for Emacs Lisp. I can't speak for the current
+
+00:10:59.200 --> 00:11:05.439
+maintainers. I can say that people have talked to previous
+
+00:11:05.440 --> 00:11:10.439
+Emacs maintainers about the whole idea, and their attitude
+
+00:11:10.440 --> 00:11:15.479
+was generally cautiously optimistic. As in, it's not
+
+00:11:15.480 --> 00:11:18.799
+something they, it's somewhat political, they didn't want
+
+00:11:18.800 --> 00:11:23.479
+to get into it, but they didn't think that it was a bad idea,
+
+00:11:23.480 --> 00:11:25.919
+and they wanted to know more about how it might evolve in the
+
+00:11:25.920 --> 00:11:31.879
+future. I can comment that Eli Zaretsky, who I believe is the
+
+00:11:31.880 --> 00:11:36.879
+current Emacs maintainer, is very concerned about
+
+00:11:36.880 --> 00:11:44.679
+cross-platform compatibility. And so if I can guess at his
+
+00:11:44.680 --> 00:11:48.519
+priorities correctly, I think that that's something that
+
+00:11:48.520 --> 00:11:52.599
+we'll have to make sure is rock solid before we propose any
+
+00:11:52.600 --> 00:11:58.359
+kind of upstreaming of Gala Emacs. but in general
+
+00:11:58.360 --> 00:12:03.719
+maintainers have been cautious but curious. So I just
+
+00:12:03.720 --> 00:12:06.719
+wanted to break in and note at this point that as lives I
+
+00:12:06.720 --> 00:12:09.519
+didn't sorry I couldn't do so more gracefully while we were
+
+00:12:09.520 --> 00:12:13.439
+still on stream but I wanted to let you know that just as of 10
+
+00:12:13.440 --> 00:12:17.399
+seconds ago or so we've had to cut away into our next talk but
+
+00:12:17.400 --> 00:12:22.199
+we can keep going here as long as we like. Okay, let's wrap up.
+
+00:12:22.200 --> 00:12:25.399
+There's only a couple questions left on the pad, so I'll
+
+00:12:25.400 --> 00:12:29.999
+answer those, and then I'll be available on IRC. So, the next
+
+NOTE Q: Do you think guile-emacs will be able to use or (collaborate with) some of the other awesome projects around Emacs Lisp?
+
+00:12:30.000 --> 00:12:33.319
+question is whether Guile Emacs will be able to collaborate
+
+00:12:33.320 --> 00:12:35.959
+with projects like Gypsum and
+
+00:12:35.960 --> 00:12:44.319
+the native compilation projects or the pre-scheme
+
+00:12:44.320 --> 00:12:48.039
+efforts. Oh, yes, that is one of the things I forgot to bring
+
+00:12:48.040 --> 00:12:53.199
+up in my talk. So, first of all, Gypsum is approaching a
+
+00:12:53.200 --> 00:12:58.199
+similar idea from a different direction. And we clearly
+
+00:12:58.200 --> 00:13:03.919
+have a different focus. My focus is on improving Emacs Lisp
+
+00:13:03.920 --> 00:13:09.279
+and making Emacs itself better by integrating Guile Elisp
+
+00:13:09.280 --> 00:13:15.159
+and Emacs, rather than replacing eLisp or deprecating it in
+
+00:13:15.160 --> 00:13:20.159
+any way. But given gypsum's requirements, I do think that we
+
+00:13:20.160 --> 00:13:26.439
+could share a lot of code required for emulating basic Emacs
+
+00:13:26.440 --> 00:13:29.839
+functionality. And this could even become interesting if
+
+00:13:29.840 --> 00:13:35.799
+we get to the point of rewriting parts of Emacs in Lisp. With
+
+00:13:35.800 --> 00:13:41.279
+respect to the native compilation effort, I'm familiar
+
+00:13:41.280 --> 00:13:45.879
+with it. I'm not that impressed with the results of it. It's a
+
+00:13:45.880 --> 00:13:52.359
+very impressive effort, but as far as I can tell, it's
+
+00:13:52.360 --> 00:13:57.239
+accelerating a bytecode interpreter that just simply has
+
+00:13:57.240 --> 00:14:02.719
+an out-of-date design, to be quite blunt. It's possible
+
+00:14:02.720 --> 00:14:08.919
+that Emacs's JIT has ideas that Guile should adopt, like
+
+00:14:08.920 --> 00:14:14.039
+perhaps libgccjit might perhaps be better than GNU
+
+00:14:14.040 --> 00:14:16.999
+Lightning, which is a relatively simple JIT that Guile
+
+00:14:17.000 --> 00:14:17.639
+uses.
+
+00:14:17.640 --> 00:14:25.839
+But it doesn't have to have a direct relationship to Guile
+
+00:14:25.840 --> 00:14:31.159
+Emacs. And as far as pre-scheme goes, I have been watching
+
+00:14:31.160 --> 00:14:36.199
+Flat Watson's work on pre-scheme with great interest
+
+00:14:36.200 --> 00:14:39.999
+because Scheme 48 used to be my favorite implementation.
+
+00:14:40.000 --> 00:14:44.919
+And I do think that it could be, it's a tool that we should look
+
+00:14:44.920 --> 00:14:47.879
+at when we're thinking about moving functionality into
+
+00:14:47.880 --> 00:14:53.199
+Lisp and could certainly make it easier to upstream some of
+
+00:14:53.200 --> 00:14:54.519
+the work we may end up doing.
+
+00:14:54.520 --> 00:15:04.199
+All right, do we have more questions?
+
+NOTE Q: SBCL, ...You mentioned Robert Strandh's SICL along with SBCL---does that work help with the implementation of CL in Guile?
+
+00:15:04.200 --> 00:15:13.159
+There's a question about SICL and SBCL. I think I answered
+
+00:15:13.160 --> 00:15:17.519
+that earlier. It should help us implement Common Lisp when
+
+00:15:17.520 --> 00:15:24.999
+it comes to high-level features and the various large
+
+00:15:25.000 --> 00:15:28.759
+subcomponents of Common Lisp. Another important factor is
+
+00:15:28.760 --> 00:15:32.279
+that Guile already has decent support for the Common Lisp
+
+00:15:32.280 --> 00:15:35.799
+object system. Without that, it would be far more
+
+00:15:35.800 --> 00:15:41.919
+difficult. But I do expect that we can share code with other
+
+00:15:41.920 --> 00:15:44.799
+Common Lisp implementations. I've personally rated
+
+00:15:44.800 --> 00:15:49.199
+Common Lisp compiler code when working on Guile Hoot, for
+
+00:15:49.200 --> 00:15:52.959
+example. So there are definitely places where they can
+
+00:15:52.960 --> 00:15:54.039
+contribute.
+
+00:15:54.040 --> 00:16:02.839
+Regarding the Hoot project and its relationship to
+
+00:16:02.840 --> 00:16:11.079
+Galimax, it's a purely speculative thing. First of all,
+
+00:16:11.080 --> 00:16:17.079
+Hoot is only tested on Scheme-to-WebAssembly
+
+00:16:17.080 --> 00:16:22.599
+compilations. I've heard some suggestions that some uses
+
+00:16:22.600 --> 00:16:26.439
+of Tree.io may not be compatible with the Hoot compiler. I'm
+
+00:16:26.440 --> 00:16:29.999
+not sure if that's the case or not.
+
+00:16:30.000 --> 00:16:41.199
+But it is a complete enough project that if Emacs is, say, 90%
+
+00:16:41.200 --> 00:16:45.119
+Lisp, there's only a few thousand lines of C code to
+
+00:16:45.120 --> 00:16:49.159
+implement, then it would be entirely practical to compile
+
+00:16:49.160 --> 00:16:54.159
+Emacs WebAssembly, as long as we had a back end, like one
+
+00:16:54.160 --> 00:16:58.119
+based on the browser's document object model, or some sort
+
+00:16:58.120 --> 00:17:04.439
+of graphical interface through WASI. And that may have some
+
+00:17:04.440 --> 00:17:07.359
+interesting applications for portability to unusual
+
+00:17:07.360 --> 00:17:11.359
+platforms. It may even bring performance advantages in
+
+00:17:11.360 --> 00:17:18.959
+cases where the WebAssembly implementation is connected
+
+00:17:18.960 --> 00:17:22.759
+to a tracing just-in-time compiler, because that may be
+
+00:17:22.760 --> 00:17:26.839
+more appropriate to the high level of dynamism the Emacs
+
+00:17:26.840 --> 00:17:32.439
+list has than the kind of simple template JITs that both
+
+00:17:32.440 --> 00:17:34.519
+Emacs and Guile are using.
+
+00:17:34.520 --> 00:17:39.799
+What a fascinating point. Just to break into active
+
+00:17:39.800 --> 00:17:43.999
+listening a little so this doesn't, to you, feel like you're
+
+00:17:44.000 --> 00:17:46.919
+talking to yourself. I can see from chat and the questions
+
+00:17:46.920 --> 00:17:51.439
+still coming in, you know, comments. You know, it isn't, but
+
+00:17:51.440 --> 00:17:54.999
+I just want you to be able to hear and feel that. Yeah, great,
+
+00:17:55.000 --> 00:18:00.679
+great point there. All right. Thank you. And yes, if there
+
+00:18:00.680 --> 00:18:04.679
+are more questions, keep throwing them at me. I should
+
+00:18:04.680 --> 00:18:07.999
+probably also mention I will have to jump out myself, but the
+
+00:18:08.000 --> 00:18:10.799
+recording will automatically end when we all jump out or
+
+00:18:10.800 --> 00:18:15.199
+just drop a note anywhere, ping me, whatever. And I'll come
+
+00:18:15.200 --> 00:18:18.439
+along and shut off the recording and we'll trim it up before
+
+00:18:18.440 --> 00:18:21.879
+we publish it. I'm looking forward to reading through
+
+00:18:21.880 --> 00:18:30.199
+anything I do miss. Thank you. Sounds good.
+
+00:18:30.200 --> 00:19:08.439
+All right, I'm not seeing changes in the etherpad. So I'm
+
+00:19:08.440 --> 00:19:14.999
+going to close this in maybe 30 seconds if there are no more
+
+00:19:15.000 --> 00:19:21.159
+additions. Thanks, everyone, for the interesting and very
+
+00:19:21.160 --> 00:19:26.399
+pointed questions on some of the most significant areas. I
+
+00:19:26.400 --> 00:19:31.919
+appreciate everyone's feedback. I'm glad this provoked so
+
+00:19:31.920 --> 00:19:33.679
+much curiosity in people.
+
+00:19:33.680 --> 00:19:44.519
+Thank you, janneke.
+
+00:19:44.520 --> 00:19:51.439
+All right, I think we are done with the Q&A session, so I'm
+
+00:19:51.440 --> 00:19:57.199
+going to close this BBB and we can continue with the rest of
+
+00:19:57.200 --> 00:19:58.719
+EmacsConf.
+
+00:19:58.720 --> 00:20:10.160
+You are currently the only person in this conference.
diff --git a/2024/captions/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--main.vtt b/2024/captions/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--main.vtt
new file mode 100644
index 00000000..35cf8ccd
--- /dev/null
+++ b/2024/captions/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--main.vtt
@@ -0,0 +1,808 @@
+WEBVTT captioned by anush, checked by robin
+
+00:00.000 --> 00:03.066
+Hello everyone. I'm Robin Templeton,
+
+00:03.083 --> 00:05.750
+and I'm going to talk about Emacs Beguiled
+
+00:05.766 --> 00:13.866
+and recent progress on the Guile-Emacs project.
+
+00:13.883 --> 00:16.433
+First of all, if you're not familiar with Guile,
+
+00:16.450 --> 00:19.716
+it's an implementation of the Scheme programming language,
+
+00:19.733 --> 00:22.150
+which is a dialect of Lisp,
+
+00:22.166 --> 00:24.550
+and in the same family as Emacs Lisp,
+
+00:24.566 --> 00:28.150
+and Guile is GNU's official extension language.
+
+00:28.166 --> 00:30.400
+The goal of the Guile-Emacs project
+
+00:30.400 --> 00:34.950
+is to use Guile as the basis for Emacs's Lisp support.
+
+00:34.966 --> 00:37.116
+It has two main components:
+
+00:37.133 --> 00:41.033
+a new Emacs Lisp compiler built on top of Guile,
+
+00:41.050 --> 00:42.550
+and a variant of Emacs
+
+00:42.566 --> 00:45.316
+in which the built-in Lisp implementation
+
+00:45.333 --> 00:49.716
+is entirely replaced with Guile Elisp.
+
+00:49.733 --> 00:52.800
+We expect the combination of these two projects
+
+00:52.800 --> 00:57.350
+to have several benefits. One is improved performance.
+
+00:57.366 --> 01:00.200
+Another is increased expressiveness for Elisp
+
+01:00.200 --> 01:04.350
+and making it easier to extend
+
+01:04.366 --> 01:07.200
+and experiment with the language.
+
+01:07.200 --> 01:08.550
+Finally, it will reduce
+
+01:08.566 --> 01:12.316
+Emacs's reliance on C for two reasons.
+
+01:12.333 --> 01:16.316
+Guile will be responsible for the language implementation,
+
+01:16.333 --> 01:21.350
+so Emacs will no longer have to include a Lisp interpreter.
+
+01:21.366 --> 01:23.200
+It will also become possible
+
+01:23.200 --> 01:25.666
+to implement much more of Emacs in Lisp
+
+01:25.683 --> 01:29.233
+than is currently feasible.
+
+01:29.250 --> 01:31.116
+Of course, this raises the question of
+
+01:31.133 --> 01:34.033
+why Guile is suitable for this project.
+
+01:34.050 --> 01:36.666
+And we chose Guile for a few reasons.
+
+01:36.683 --> 01:39.400
+Guile is primarily a Scheme implementation,
+
+01:39.400 --> 01:42.150
+but it also has built-in support for multiple languages
+
+01:42.166 --> 01:43.466
+using its compiler tower.
+
+01:43.483 --> 01:46.866
+To add support for a new language to Guile,
+
+01:46.883 --> 01:50.066
+you only have to write a compiler
+
+01:50.083 --> 01:52.550
+from the source language to Tree-IL,
+
+01:52.566 --> 01:55.800
+which is essentially a low-level,
+
+01:55.800 --> 01:58.866
+minimal representation of Scheme.
+
+01:58.883 --> 02:01.800
+All of Guile's compiler optimizations
+
+02:01.800 --> 02:04.433
+occur at the Tree-IL layer or lower,
+
+02:04.450 --> 02:06.033
+so you don't need to worry
+
+02:06.050 --> 02:09.633
+about the lower-level details of the compiler
+
+02:09.650 --> 02:12.350
+when initially implementing your language.
+
+02:12.366 --> 02:14.633
+Guile also has some Lisp features
+
+02:14.650 --> 02:18.316
+that are very rare in Scheme implementations.
+
+02:18.333 --> 02:20.033
+For example, it has a nil value
+
+02:20.050 --> 02:23.916
+that counts as both false and an empty list,
+
+02:23.933 --> 02:25.633
+just like in Elisp,
+
+02:25.650 --> 02:30.466
+and it also has a version of the Common Lisp Object System
+
+02:30.483 --> 02:37.200
+and its metaobject protocol, which is called GOOPS.
+
+02:37.200 --> 02:40.150
+The idea of Guile-Emacs has a pretty long history,
+
+02:40.166 --> 02:43.866
+going back at least three decades.
+
+02:43.883 --> 02:44.550
+There have been about
+
+02:44.566 --> 02:48.000
+half a dozen previous implementation attempts.
+
+02:48.000 --> 02:49.950
+But the current iteration began with
+
+02:49.966 --> 02:52.866
+a series of six Summer of Code internships:
+
+02:52.883 --> 02:56.033
+Daniel Kraft's in 2009,
+
+02:56.050 --> 03:01.200
+and then my internships from 2010 to 2014.
+
+03:01.200 --> 03:03.000
+My basic implementation strategy
+
+03:03.000 --> 03:05.316
+was pretty straightforward.
+
+03:05.333 --> 03:07.466
+I implemented a core subset of Elisp,
+
+03:07.483 --> 03:10.400
+which was enough to run some batch mode programs
+
+03:10.400 --> 03:12.833
+outside of Emacs.
+
+03:12.850 --> 03:15.266
+In Emacs, I modified the garbage collector
+
+03:15.283 --> 03:18.600
+and the data structures for Lisp objects
+
+03:18.600 --> 03:23.033
+to use their libguile equivalents.
+
+03:23.050 --> 03:26.950
+I replaced Emacs' Lisp evaluator
+
+03:26.966 --> 03:32.200
+with the one provided by Guile Elisp.
+
+03:32.200 --> 03:34.033
+After a little over a year of work,
+
+03:34.050 --> 03:37.950
+at the end of the 2014 internship,
+
+03:37.966 --> 03:44.316
+I ended up with a fully functional prototype of Guile-Emacs.
+
+03:44.333 --> 03:48.916
+It used Guile Elisp alone as its Lisp implementation
+
+03:48.933 --> 03:53.916
+and was completely compatible with Emacs functionality
+
+03:53.933 --> 03:56.716
+and with external extensions.
+
+03:56.733 --> 03:59.433
+One caveat was that performance was pretty bad,
+
+03:59.450 --> 04:03.033
+because I was focused on correctness,
+
+04:03.050 --> 04:07.600
+as well as ease of integration with the Emacs C code.
+
+04:07.600 --> 04:11.550
+But it was nonetheless a major milestone for the project.
+
+04:11.566 --> 04:19.600
+Let's take just a moment to look at Guile-Elisp.
+
+04:19.600 --> 04:23.233
+For starters, we have access to Guile modules.
+
+04:23.250 --> 04:25.116
+If we call Guile's <i>version</i> function,
+
+04:25.133 --> 04:30.516
+we can see that we're running under Guile 3.0.
+
+04:30.533 --> 04:33.233
+We have access to some of the numeric tower
+
+04:33.250 --> 04:39.516
+via the arithmetic functions. We also have multiple values.
+
+04:39.533 --> 04:43.950
+We have to be careful to use Guile's <i>values</i> procedure here,
+
+04:43.966 --> 04:46.666
+not the CL library's,
+
+04:46.683 --> 04:48.833
+but you can see that this works properly
+
+04:48.850 --> 04:51.550
+rather than being an emulation.
+
+04:51.566 --> 04:54.033
+Finally, we have tail call elimination.
+
+04:54.050 --> 05:02.866
+Naturally, we're going to use factorial to demonstrate it.
+
+05:02.883 --> 05:05.633
+If <i>n</i> is zero, return the answer,
+
+05:05.650 --> 05:14.266
+else recurse with <i>n</i> less one and <i>n</i> times <i>a</i>.
+
+05:14.283 --> 05:16.150
+Of course, this definition works correctly,
+
+05:16.166 --> 05:18.950
+but it gets more interesting
+
+05:18.966 --> 00:05:25.000
+if we communicate the answer with an error,
+
+00:05:25.100 --> 05:29.633
+in order to look at a backtrace.
+
+05:29.650 --> 05:32.350
+You can see here that there are
+
+05:32.366 --> 05:35.516
+no calls to <i>fact</i> visible in between
+
+05:35.533 --> 05:37.833
+the request to evaluate
+
+05:37.850 --> 05:42.200
+and the error communicating the answer.
+
+05:42.200 --> 05:44.200
+That's because this tail call
+
+05:44.200 --> 05:48.350
+has been optimized into effectively a goto.
+
+05:48.366 --> 05:54.916
+This is essential for any kind
+
+05:54.933 --> 00:05:59.916
+of serious functional programming.
+
+00:06:00.116 --> 06:03.033
+That's a peek at Guile-Elisp.
+
+06:03.050 --> 06:08.066
+In 2015, I left university to go work on web technologies,
+
+06:08.083 --> 06:11.316
+and the project was dormant for a very long time.
+
+06:11.333 --> 06:13.433
+But that's been changing recently.
+
+06:13.450 --> 06:16.066
+During the last few months,
+
+06:16.083 --> 06:17.633
+I've been working with Larry Valkama
+
+06:17.650 --> 06:20.716
+to rebase Guile-Emacs
+
+06:20.733 --> 06:24.833
+onto the development branch of upstream Emacs,
+
+06:24.850 --> 06:29.666
+including the past decade's worth of upstream development.
+
+06:29.683 --> 00:06:33.967
+What we've ended up with is a series of
+
+00:06:34.267 --> 00:06:37.550
+rebases onto different versions of Emacs.
+
+06:37.566 --> 06:39.516
+The older ones tend to work pretty well.
+
+06:39.533 --> 06:46.866
+The newer ones have increasingly bad problems
+
+06:46.883 --> 06:49.800
+where they haven't been properly adjusted
+
+06:49.800 --> 06:52.200
+for changes in the Emacs implementation.
+
+06:52.200 --> 06:56.833
+But we do have by now a version of Emacs 30
+
+06:56.850 --> 06:57.800
+which boots correctly
+
+06:57.800 --> 06:59.833
+and can be used for interactive debugging,
+
+06:59.850 --> 07:06.150
+as well as the ability to bisect the revisions of Emacs
+
+07:06.166 --> 07:10.516
+and find out where regressions were introduced.
+
+07:10.533 --> 07:14.033
+Our immediate goal is of course to complete the rebase.
+
+07:14.050 --> 07:16.233
+At the same time,
+
+07:16.250 --> 07:20.633
+we want to improve Guile Elisp's performance
+
+07:20.650 --> 07:24.350
+to at least be competitive with ordinary Emacs Lisp.
+
+07:24.366 --> 07:29.266
+Just to characterize the performance situation,
+
+07:29.283 --> 07:32.750
+Guile Elisp is usually about half
+
+07:32.766 --> 07:34.466
+as fast as ordinary Elisp,
+
+07:34.483 --> 07:37.833
+while Guile Scheme is quite often
+
+07:37.850 --> 00:07:41.250
+an order of magnitude faster than ordinary Elisp,
+
+00:07:41.350 --> 07:43.916
+and that's based on micro benchmarks
+
+07:43.933 --> 00:07:46.133
+like the Gabriel benchmarks.
+
+00:07:46.233 --> 00:07:50.900
+But there's clearly a lot of room
+
+00:07:50.900 --> 00:07:53.150
+to improve our compiler's output.
+
+00:07:53.350 --> 07:56.633
+If you want to mark your calendars,
+
+07:56.650 --> 08:00.150
+we're expecting to have a usable version of Guile-Emacs 30
+
+08:00.166 --> 00:08:03.016
+out sometime next spring.
+
+00:08:03.116 --> 08:05.433
+We're also going to put some effort
+
+08:05.450 --> 00:08:09.000
+into either extracting old work
+
+00:08:09.100 --> 08:12.600
+or doing new work that could be contributed upstream.
+
+08:12.600 --> 00:08:16.650
+On the Guile side, we'll probably start out with
+
+00:08:16.750 --> 00:08:21.033
+optimizing the dynamic binding facilities,
+
+00:08:21.233 --> 08:23.433
+which are used very seldom in Scheme,
+
+08:23.450 --> 08:27.833
+but are used all the time in traditional Lisp dialects.
+
+08:27.850 --> 08:31.400
+On the Emacs side, we'll be working initially
+
+08:31.400 --> 08:35.316
+on abstracting away the details of the Lisp implementation
+
+08:35.333 --> 00:08:37.433
+where they're not relevant.
+
+00:08:37.533 --> 08:40.716
+And that will clean up the Emacs code base a bit.
+
+08:40.733 --> 08:45.000
+It'll make it easier to integrate Emacs and Guile Elisp.
+
+08:45.000 --> 08:47.916
+It will probably be helpful for anyone
+
+08:47.933 --> 08:51.550
+who is working on ordinary Elisp on their own.
+
+08:51.566 --> 08:57.200
+We're also going to be adding new features to Emacs Lisp.
+
+08:57.200 --> 08:59.316
+We've seen a few of them already.
+
+08:59.333 --> 09:02.633
+The numeric tower, tail call optimization,
+
+09:02.650 --> 09:04.550
+Common Lisp compatibility.
+
+09:04.566 --> 09:07.950
+We're also going to provide access to Fibers,
+
+09:07.966 --> 09:12.466
+which is a Guile library based on ideas from Concurrent ML
+
+09:12.483 --> 09:15.716
+that provides much more powerful facilities
+
+09:15.733 --> 09:18.266
+for concurrent and parallel programming
+
+09:18.283 --> 00:09:24.566
+than what Emacs currently offers.
+
+00:09:24.666 --> 09:32.233
+This plan meets Guile-Emacs' basic goals,
+
+09:32.250 --> 09:36.316
+and it's work that we could maybe get integrated upstream
+
+09:36.333 --> 00:09:38.100
+in a reasonable amount of time.
+
+00:09:38.200 --> 00:09:42.500
+But it's also worth considering what more we can do,
+
+00:09:42.600 --> 09:46.600
+and what effect Guile-Emacs might have on Emacs
+
+09:46.600 --> 00:09:50.566
+if it becomes simply Emacs.
+
+00:09:50.666 --> 09:54.033
+For context, the amount of C code in Emacs
+
+09:54.050 --> 09:57.400
+has increased by around 50% in the last decade,
+
+09:57.400 --> 09:59.950
+and now it constitutes around a quarter of the code base.
+
+09:59.966 --> 10:06.400
+C can be a bit of a barrier
+
+10:06.400 --> 00:10:10.900
+to customizing and extending Emacs.
+
+00:10:11.000 --> 10:15.516
+For example, there are about 1500 C subroutines.
+
+10:15.533 --> 10:19.633
+Around 500 are used in C code,
+
+10:19.650 --> 10:23.150
+as well as available to Lisp code,
+
+10:23.166 --> 10:25.800
+and being written in C means
+
+10:25.800 --> 10:28.066
+that they can't be practically redefined.
+
+10:28.083 --> 10:34.433
+The use of C can become a barrier to extending Emacs
+
+10:34.450 --> 10:36.233
+or customizing its behavior.
+
+10:36.250 --> 10:39.200
+We might consider writing
+
+10:39.200 --> 00:10:42.816
+as much of Emacs as possible in Lisp.
+
+00:10:42.916 --> 10:46.033
+One way to speed up this process
+
+10:46.050 --> 10:49.400
+would be to provide a Common Lisp implementation for Guile.
+
+10:49.400 --> 10:54.833
+Note that between Guile Elisp and Guile Scheme,
+
+10:54.850 --> 10:57.516
+we have all of the essential ingredients
+
+10:57.533 --> 11:03.200
+for a Common Lisp environment. We can also share code
+
+11:03.200 --> 00:11:06.016
+with other Common Lisp implementations
+
+11:06.016 --> 11:10.200
+such as SBCL and SICL.
+
+11:10.200 --> 11:13.800
+Overall, the duration of the project
+
+11:13.800 --> 11:16.916
+will be better measured in months rather than years,
+
+11:16.933 --> 11:19.466
+despite Common Lisp's reputation
+
+11:19.483 --> 00:11:21.116
+for being a large language.
+
+00:11:21.216 --> 11:24.466
+This could have multiple uses, of course.
+
+11:24.483 --> 11:29.633
+It could be a model for future improvements to Elisp,
+
+11:29.650 --> 11:34.866
+because Elisp and CL can interact directly without problems.
+
+11:34.883 --> 11:38.400
+And it would be very easy for Elisp
+
+11:38.400 --> 11:41.466
+to borrow language features from Common Lisp.
+
+11:41.483 --> 11:46.600
+But for the purpose of a C to Lisp transition,
+
+11:46.600 --> 11:50.066
+it would also provide us with instant access
+
+11:50.083 --> 11:52.600
+to a huge number of high-quality libraries
+
+11:52.600 --> 11:54.833
+for things that
+
+11:54.850 --> 11:58.116
+Guile is not necessarily equipped to deal with,
+
+11:58.133 --> 12:01.350
+such as access to low-level Windows APIs,
+
+12:01.366 --> 12:05.150
+as well as lots of other libraries,
+
+12:05.166 --> 12:10.000
+such as interfaces to GUI toolkits
+
+12:10.000 --> 00:12:13.766
+for a variety of operating systems.
+
+00:12:13.866 --> 12:20.550
+At a certain point, this has technical advantages.
+
+12:20.566 --> 00:12:24.216
+If most of Emacs is written in Lisp,
+
+00:12:24.216 --> 12:27.233
+then we could consider using Guile Hoot
+
+12:27.250 --> 12:29.666
+to compile Emacs to WebAssembly,
+
+12:29.683 --> 12:33.200
+making it available perhaps in web browsers
+
+12:33.200 --> 12:37.233
+or on systems with the WebAssembly System Interface.
+
+12:37.250 --> 12:41.266
+But it would also be a great victory
+
+12:41.283 --> 12:43.033
+for practical software freedom.
+
+12:43.050 --> 12:45.866
+That's the idea that Freedom One,
+
+12:45.883 --> 12:48.350
+the freedom to study and modify programs,
+
+12:48.366 --> 12:51.633
+should not just be legally and technically possible,
+
+12:51.650 --> 12:53.316
+but should be actively encouraged
+
+12:53.333 --> 12:57.066
+by our computing environments.
+
+12:57.083 --> 13:00.116
+Emacs is really one of the archetypal examples of this,
+
+13:00.133 --> 00:13:03.116
+but we can and should go further.
+
+00:13:03.216 --> 13:08.400
+When Emacs is implemented primarily in Lisp,
+
+13:08.400 --> 13:11.466
+the entirety of the system
+
+13:11.483 --> 13:14.600
+will be transparent to examination
+
+13:14.600 --> 13:16.066
+and open to modification.
+
+13:16.083 --> 13:21.200
+Every part of Emacs will be instantaneously inspectable,
+
+13:21.200 --> 00:13:24.916
+redefinable, and debuggable.
+
+00:13:25.016 --> 13:28.266
+This will be a fundamental change
+
+13:28.283 --> 13:32.800
+in what is possible to do with Emacs extensions.
+
+13:32.800 --> 13:37.000
+For example, one experiment I'd be interested in
+
+13:37.000 --> 13:40.316
+is using the Common Lisp Interface Manager
+
+13:40.333 --> 13:43.233
+as the basis for Emacs's user interface.
+
+13:43.250 --> 13:48.516
+Screwlisp is giving a talk about McCLIM later today,
+
+13:48.533 --> 13:53.233
+but for present purposes,
+
+13:53.250 --> 13:55.633
+just think of it as a super-powered version
+
+13:55.650 --> 13:58.350
+of Emacs's concept of interactive functions.
+
+13:58.366 --> 14:02.800
+It would be a pretty long-term project
+
+14:02.800 --> 14:04.800
+in Emacs as it currently exists,
+
+14:04.800 --> 14:06.600
+but it would be almost trivial
+
+14:06.600 --> 14:12.633
+if Emacs were customizable at the lowest layers via Lisp.
+
+14:12.650 --> 14:19.150
+We'll certainly be looking at the practicality
+
+14:19.166 --> 14:20.950
+of these kinds of changes
+
+14:20.966 --> 00:14:25.033
+as we continue developing Guile-Emacs.
+
+00:14:25.133 --> 00:14:29.933
+Finally, how can you get involved
+
+00:14:30.033 --> 00:14:32.400
+with and support Guile Emacs?
+
+00:14:32.500 --> 14:35.316
+One way to help is just by trying it out
+
+14:35.333 --> 00:14:37.716
+and letting us know what your experiences are like.
+
+00:14:37.816 --> 14:41.466
+There will be a snapshot available
+
+14:41.483 --> 00:14:44.166
+on the Codeberg project site
+
+00:14:44.266 --> 14:47.000
+of the version that I'm using to give this presentation.
+
+14:47.000 --> 14:51.116
+It will be available both as a Guix package
+
+14:51.133 --> 14:55.916
+and as a portable tarball. This will be more interesting
+
+14:55.933 --> 00:15:00.266
+as we get closer to a complete rebase.
+
+00:15:00.366 --> 15:06.516
+We're also always happy to talk to potential contributors
+
+15:06.533 --> 00:15:12.100
+or potential collaborators from other projects.
+
+00:15:12.200 --> 15:16.433
+We can always use bug reports,
+
+15:16.450 --> 15:18.866
+and we're interested in what kind of features
+
+15:18.883 --> 15:21.716
+people actually want to see in Guile-Emacs.
+
+15:21.733 --> 00:15:25.200
+Guile-Emacs is also being developed
+
+00:15:25.300 --> 00:15:27.816
+by a small worker cooperative,
+
+00:15:27.916 --> 00:15:33.100
+so donations are a pretty direct way to support the project.
+
+00:15:33.200 --> 15:37.150
+If you do nothing else, I recommend going to the website
+
+15:37.166 --> 15:40.716
+and subscribing to our mailing lists
+
+15:40.733 --> 15:45.600
+so that you can keep up with news on the project.
+
+15:45.600 --> 15:47.316
+If you're watching this at EmacsConf,
+
+15:47.333 --> 15:50.466
+there will be a Q&A session immediately following this,
+
+15:50.483 --> 15:57.066
+and thanks for watching!
diff --git a/2024/captions/emacsconf-2024-gypsum--gypsum-my-clone-of-emacs-and-elisp-written-in-scheme--ramin-honary--answers.vtt b/2024/captions/emacsconf-2024-gypsum--gypsum-my-clone-of-emacs-and-elisp-written-in-scheme--ramin-honary--answers.vtt
new file mode 100644
index 00000000..7c2708d9
--- /dev/null
+++ b/2024/captions/emacsconf-2024-gypsum--gypsum-my-clone-of-emacs-and-elisp-written-in-scheme--ramin-honary--answers.vtt
@@ -0,0 +1,725 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:02.999
+...Troy Hinckley's project that I'm talking about. I was going
+
+00:00:03.000 --> 00:00:08.799
+to mention this in my presentation, but it's possible,
+
+00:00:08.800 --> 00:00:16.359
+theoretically, that Troy Hinckley, his project could be
+
+00:00:16.360 --> 00:00:18.559
+used as a scheme of limitation that actually runs my own
+
+00:00:18.560 --> 00:00:23.759
+version of Emacs. And although, you know, This is
+
+00:00:23.760 --> 00:00:30.719
+completely theoretical, and I don't know how difficult
+
+00:00:30.720 --> 00:00:34.079
+that would be. But if Troy Hinckley implemented enough of
+
+00:00:34.080 --> 00:00:39.879
+the R7-RS standard in Rust, it would theoretically be
+
+00:00:39.880 --> 00:00:46.719
+possible to run the Gypsum editor in Troy Hinckley's own
+
+00:00:46.720 --> 00:00:50.239
+editor. I thought that was kind of interesting, and I
+
+00:00:50.240 --> 00:00:59.119
+thought it was worth mentioning, at least in the questions
+
+00:00:59.120 --> 00:01:12.159
+and answers.
+
+00:01:12.160 --> 00:01:16.199
+I also mentioned this in the presentation. I wanted to see
+
+00:01:16.200 --> 00:01:20.119
+Robin Templeton's project presentation, but
+
+00:01:20.120 --> 00:01:22.399
+unfortunately it's going to be at like four in the morning
+
+00:01:22.400 --> 00:01:26.239
+for me. So I'm going to try and watch that tomorrow, but
+
+00:01:26.240 --> 00:01:29.559
+that's also going to be a very interesting project to keep an
+
+00:01:29.560 --> 00:01:34.039
+eye on if you're interested in Scheme. That's the project
+
+00:01:34.040 --> 00:01:37.519
+where you've got the Guylain interpreter running inside of
+
+00:01:37.520 --> 00:02:04.679
+the Emacs process. It's dynamically linked as a library.
+
+00:02:04.680 --> 00:02:08.759
+I'm ready for questions from anybody. You can ask or you can
+
+00:02:08.760 --> 00:02:32.079
+type. It's up to you.
+
+00:02:32.080 --> 00:02:37.319
+Okay, let me check the etherpad.
+
+00:02:37.320 --> 00:02:41.159
+Let's see here.
+
+00:02:41.160 --> 00:02:42.719
+I'm not sure if I'm doing that right.
+
+00:02:42.720 --> 00:02:54.199
+Let me check one more time. Oh, there it goes.
+
+00:02:54.200 --> 00:03:00.079
+Let's see, so this is...
+
+00:03:00.080 --> 00:03:02.239
+I didn't know about that first bit of history. Oh, I've heard
+
+00:03:02.240 --> 00:03:06.119
+RMS say that Scheme Guile is just a nicer Lisp, but I didn't
+
+00:03:06.120 --> 00:03:09.079
+know there were concrete talks attempts to use Guile for
+
+00:03:09.080 --> 00:03:14.319
+Emacs that early. Let's see, that was from janneke.
+
+NOTE Q: I'm curious to know how the hell guile-emacs deals with all of the dynamically scoped modules out there. Is there any effort to automatically modularize and namespace stuff?
+
+00:03:14.320 --> 00:03:17.439
+I'm curious to know how the hell Guile Emacs deals with all the
+
+00:03:17.440 --> 00:03:21.359
+dynamically scoped modules out there. Is there any effort
+
+00:03:21.360 --> 00:03:29.759
+to automatically modularize and name? Let's see.
+
+00:03:29.760 --> 00:03:40.919
+That might be a better question for Robin Templeton. In my
+
+00:03:40.920 --> 00:03:44.639
+own project,
+
+00:03:44.640 --> 00:03:49.399
+there's no module system for Emacs Lisp. There is a module
+
+00:03:49.400 --> 00:03:55.559
+system for Scheme. And the Emacs Lisp interpreter runs in
+
+00:03:55.560 --> 00:04:01.599
+its own environment. the require system or whatever module
+
+00:04:01.600 --> 00:04:06.359
+system that Emacs has, once it's implemented, all of that
+
+00:04:06.360 --> 00:04:09.759
+would just happen inside of the Emacs Lisp environment,
+
+00:04:09.760 --> 00:04:12.399
+which is inside of the Scheme environment. And
+
+00:04:12.400 --> 00:04:21.479
+environments are objects in Scheme.
+
+00:04:21.480 --> 00:04:26.399
+I think a more difficult question is how to handle
+
+00:04:26.400 --> 00:04:33.279
+threading, and Scheme has very good threading built in, in
+
+00:04:33.280 --> 00:04:34.839
+Serphe-18[??].
+
+00:04:34.840 --> 00:04:43.399
+But I don't think it will be easy to write Emacs Lisp form
+
+00:04:43.400 --> 00:04:48.479
+bindings to the Scheme multi-threading implementation.
+
+00:04:48.480 --> 00:04:52.279
+Emacs Lisp was just not cut out for that kind of thing. So I
+
+00:04:52.280 --> 00:04:56.559
+think each Emacs Lisp, you could, I suppose, have multiple
+
+00:04:56.560 --> 00:05:00.039
+threads each running their own Emacs Lisp environment.
+
+00:05:00.040 --> 00:05:04.999
+Scheme would make that very simple to do.
+
+00:05:05.000 --> 00:05:08.759
+And then there'd just be a question of how you would get those
+
+00:05:08.760 --> 00:05:11.679
+different interpreters to communicate with each other,
+
+00:05:11.680 --> 00:05:16.279
+perhaps using the same protocol that's used by the Emacs
+
+00:05:16.280 --> 00:05:23.639
+server. But I haven't thought that far ahead yet.
+
+NOTE Q: Would it be possible to support a GUI toolkit other than GTK?
+
+00:05:23.640 --> 00:05:26.839
+Would it be possible to support a GUI toolkit other than the
+
+00:05:26.840 --> 00:05:31.319
+GTK? Like, how is it still supports Lucid? Yes, this is
+
+00:05:31.320 --> 00:05:36.999
+absolutely a goal of the project. I'm trying to keep the back
+
+00:05:37.000 --> 00:05:41.599
+end separate as possible. The scheme has what you call
+
+00:05:41.600 --> 00:05:45.239
+parameters. And these are like global variables that are
+
+00:05:45.240 --> 00:05:50.519
+still somewhat thread safe. And every call to the GUI goes
+
+00:05:50.520 --> 00:05:58.199
+through a parameter. So the Emacs, the interpreter and the
+
+00:05:58.200 --> 00:06:01.679
+editor logic is all in one module. And then that module calls
+
+00:06:01.680 --> 00:06:06.319
+out into a separate GUI module. And then you can implement
+
+00:06:06.320 --> 00:06:11.599
+different GUI modules. So you could have one for GTK3, one
+
+00:06:11.600 --> 00:06:16.879
+for GTK4, if you want to write the extern C bindings around Qt
+
+00:06:16.880 --> 00:06:21.199
+or full tick, that would certainly be possible as well. It
+
+00:06:21.200 --> 00:06:25.919
+would be nice maybe to have an SDL implementation based
+
+00:06:25.920 --> 00:06:30.999
+maybe on Chikiti or some kind of immediate mode GUI,
+
+00:06:31.000 --> 00:06:37.399
+something like that. But definitely GTK3 through Guile GI
+
+00:06:37.400 --> 00:06:41.319
+is the reference implementation. Things start there. But
+
+00:06:41.320 --> 00:06:43.999
+I'm very interested in supporting other GUIs, yes. Let's
+
+00:06:44.000 --> 00:06:46.039
+see.
+
+NOTE Q: Do you plan to provide improvements to Elisp as a language, or is the focus on a compatibility layer to facilitate doing all new extensions, etc. in Scheme?
+
+00:06:46.040 --> 00:06:50.759
+Question, do you plan to provide improvements to ELisp
+
+00:06:50.760 --> 00:06:54.519
+as a language or focus on a compatibility layer to
+
+00:06:54.520 --> 00:06:57.999
+facilitate all new extensions in Scheme? Yeah, the second
+
+00:06:58.000 --> 00:07:04.719
+one. I want to move off to Scheme. I would like for this
+
+00:07:04.720 --> 00:07:08.999
+project to try and keep up to date with each new release of
+
+00:07:09.000 --> 00:07:13.799
+Emacs and Emacs Lisp. That's a difficult moving target to
+
+00:07:13.800 --> 00:07:18.639
+follow, I realize. But to the greatest extent possible, any
+
+00:07:18.640 --> 00:07:25.239
+new features to Emacs Lisp will be pulled in from GNU Emacs.
+
+00:07:25.240 --> 00:07:28.599
+If we happen to be able to implement something cool in
+
+00:07:28.600 --> 00:07:31.639
+Scheme, and be able to port it over to Emacs Lisp, then sure,
+
+00:07:31.640 --> 00:07:35.799
+it'd be nice to be able to upload or to submit that upstream to
+
+00:07:35.800 --> 00:07:43.079
+the GNU Emacs. But I think I would prefer to have new features
+
+00:07:43.080 --> 00:07:47.799
+written in Scheme. I would like this gypsum to be more of a
+
+00:07:47.800 --> 00:07:51.479
+Scheme app platform that just happens to be able to also run
+
+00:07:51.480 --> 00:07:56.199
+Emacs Lisp. That's how I see it. Of course, this will be a
+
+00:07:56.200 --> 00:08:00.799
+community project. I'm open to debate about that if anybody
+
+00:08:00.800 --> 00:08:02.079
+wants to convince me otherwise.
+
+00:08:02.080 --> 00:08:11.759
+Why is being able to interpret all of that EL a useful goal?
+
+00:08:11.760 --> 00:08:15.519
+Sure, there is a lot of code written in Elisp. Can we
+
+00:08:15.520 --> 00:08:18.959
+consider... Oh, it's still being written. Please go ahead
+
+00:08:18.960 --> 00:08:19.439
+and finish writing.
+
+NOTE Q: Can we consider a translator like utility to convert elisp to scheme, once guile-emacs becomes a reality?
+
+00:08:19.440 --> 00:08:32.519
+Can we consider a translator like utility to convert eLisp
+
+00:08:32.520 --> 00:08:37.519
+to Scheme once Guile-Emacs has become a reality?
+
+00:08:37.520 --> 00:08:42.119
+Certainly. For the time being, I just wanted to get the
+
+00:08:42.120 --> 00:08:47.559
+interpreter running. So the actual, the Guile-Emacs Lisp,
+
+00:08:47.560 --> 00:08:51.919
+the one that was written in 2011 that I didn't write, that
+
+00:08:51.920 --> 00:08:57.599
+actually does compile to, I think it's the tree
+
+00:08:57.600 --> 00:08:59.239
+intermediate representation It's one of the intermediate
+
+00:08:59.240 --> 00:09:03.759
+languages that Guile uses to compile Guile scheme itself.
+
+00:09:03.760 --> 00:09:09.079
+So the Emacs lisp that was written before actually does
+
+00:09:09.080 --> 00:09:13.119
+that. It actually compiles and makes use of the entire Guile
+
+00:09:13.120 --> 00:09:17.479
+compiler tool chain and actually produces like JIT
+
+00:09:17.480 --> 00:09:21.719
+compilable binaries, which is really cool. Like I said,
+
+00:09:21.720 --> 00:09:27.519
+that's the one that I had trouble getting to work properly.
+
+00:09:27.520 --> 00:09:34.399
+Maybe we can follow that architecture. I'm not sure how to do
+
+00:09:34.400 --> 00:09:37.919
+that, but I would like to be able to do some kind of
+
+00:09:37.920 --> 00:09:41.999
+translating, keeping in mind that we want to have this be
+
+00:09:42.000 --> 00:09:48.919
+portable, do various schemes. And so Guile makes this very
+
+00:09:48.920 --> 00:09:52.719
+easy, but other schemes don't. Gambit might do this pretty
+
+00:09:52.720 --> 00:09:57.919
+well as well. It compiles to C and then compiles C down to a
+
+00:09:57.920 --> 00:10:06.159
+dynamically linkable library. So yeah, I think probably
+
+00:10:06.160 --> 00:10:09.559
+the most portable, I'm just thinking out loud right now,
+
+00:10:09.560 --> 00:10:13.239
+most portable implementation will just be able to
+
+00:10:13.240 --> 00:10:17.119
+translate Emacs Lisp directly to Scheme, which is not what
+
+00:10:17.120 --> 00:10:22.439
+the old Guile Emacs Lisp implementation does. That goes to
+
+00:10:22.440 --> 00:10:26.439
+TreeIL, so it's very, very Guile-specific, can't be
+
+00:10:26.440 --> 00:10:30.799
+ported. But yeah, if we could somehow get Emacs Lisp
+
+00:10:30.800 --> 00:10:36.999
+translated to Scheme and then compiled, say, in Shea Scheme
+
+00:10:37.000 --> 00:10:40.879
+or Gambit or MIT Scheme or one of those other compilers, that
+
+00:10:40.880 --> 00:10:44.919
+would be very cool. And I would absolutely love to do that.
+
+00:10:44.920 --> 00:10:49.279
+And I would very quickly accept any code into the code base
+
+00:10:49.280 --> 00:10:50.599
+that would do that.
+
+NOTE Q: Why is being able to interpret all of \`init.el\` an useful goal?
+
+00:10:50.600 --> 00:10:59.119
+Oh, and to answer the question about init.el,
+
+00:10:59.120 --> 00:11:02.839
+It's just because people spend a lot of time on their configs
+
+00:11:02.840 --> 00:11:06.959
+and it would be nice if, you know, you're starting to use this
+
+00:11:06.960 --> 00:11:14.079
+new editor and want it to be similar to Emacs users, just the
+
+00:11:14.080 --> 00:11:16.519
+Emacs community in general and people who are familiar with
+
+00:11:16.520 --> 00:11:20.879
+using Emacs. It would be more useful to everybody in the
+
+00:11:20.880 --> 00:11:25.119
+Emacs community if this were more compatible with GNU
+
+00:11:25.120 --> 00:11:35.999
+Emacs. And so that's why that's, I think that's an important
+
+00:11:36.000 --> 00:11:38.559
+goal.
+
+00:11:38.560 --> 00:12:01.839
+Question is not yet. Great. Oh, here comes another
+
+00:12:01.840 --> 00:12:02.279
+question.
+
+NOTE Q: What is the plan to handle elisp packages that depend on 3rd party/external libraries? (libgit/magit or rg/ripgrep)?
+
+00:12:02.280 --> 00:12:11.879
+Okay, what is the plan to handle elisp packages that depend
+
+00:12:11.880 --> 00:12:16.119
+on third-party or external libraries like git or magit
+
+00:12:16.120 --> 00:12:22.719
+or ripgrep? So that's going to be tricky. It depends on how
+
+00:12:22.720 --> 00:12:27.079
+these external packages are linked into emacs. If it's
+
+00:12:27.080 --> 00:12:32.879
+going to be a dynamic library like Robin Templeton's
+
+00:12:32.880 --> 00:12:38.039
+project which you load the libgit library into the Emacs
+
+00:12:38.040 --> 00:12:43.159
+process, that is going to be extremely difficult. So if you
+
+00:12:43.160 --> 00:12:49.359
+have an external library like, I don't know, libgit or
+
+00:12:49.360 --> 00:12:59.279
+what's the GUI thing? Cabal. No, not Cabal. Cairo, libcairo
+
+00:12:59.280 --> 00:13:01.439
+to do SVG graphics and so on.
+
+00:13:01.440 --> 00:13:09.719
+You can do that very easily with Guile, but then on top of
+
+00:13:09.720 --> 00:13:14.719
+that, implementing Emacs list bindings to it, I mean,
+
+00:13:14.720 --> 00:13:17.199
+you've got two layers there, and that makes things pretty
+
+00:13:17.200 --> 00:13:23.119
+difficult. So it's possible. And to some degree, maybe
+
+00:13:23.120 --> 00:13:27.799
+necessary for example, Cairo, if we want to do SVG graphics
+
+00:13:27.800 --> 00:13:30.599
+the way that Emacs Lisp does, we're going to have to have
+
+00:13:30.600 --> 00:13:33.959
+that. So that would be necessary. We would have to have those
+
+00:13:33.960 --> 00:13:39.199
+two layers. Yes, let's do that. But if it's like for Magit,
+
+00:13:39.200 --> 00:13:45.479
+you can just call out to your git process, and then you're
+
+00:13:45.480 --> 00:13:50.719
+just using the regular process APIs that Emacs Lisp has. And
+
+00:13:50.720 --> 00:13:57.119
+that can be, already we, like Guile has some very good
+
+00:13:57.120 --> 00:14:08.079
+implementations for process management. And so it would
+
+00:14:08.080 --> 00:14:12.439
+just be a matter of wrapping up those in the Emacs lisp form
+
+00:14:12.440 --> 00:14:24.919
+bindings. So yeah, dynamic libraries, I wanna try to avoid.
+
+00:14:24.920 --> 00:14:32.799
+And I would prefer to do things more through, you know,
+
+00:14:32.800 --> 00:14:40.399
+launching a child process in the Emacs process. and then
+
+00:14:40.400 --> 00:14:47.239
+communicating over the standard in, standard out
+
+00:14:47.240 --> 00:14:47.959
+channels.
+
+00:14:47.960 --> 00:14:52.799
+That's the easier way to do things, I think, because then you
+
+00:14:52.800 --> 00:14:58.519
+can just use the process library that Emacs already has, and
+
+00:14:58.520 --> 00:15:03.239
+you can just reuse all of that code.
+
+00:15:03.240 --> 00:15:09.079
+I'm not sure how ripgrep works, unfortunately, but I
+
+00:15:09.080 --> 00:15:15.279
+believe that's also a process, a child process. So, we can
+
+00:15:15.280 --> 00:15:23.479
+just reuse all of the Emacs Lisp code that does that already.
+
+00:15:23.480 --> 00:15:30.399
+We just need to make sure that the process management
+
+00:15:30.400 --> 00:15:35.119
+implementation and scheme is properly bound to Emacs Lisp,
+
+00:15:35.120 --> 00:15:43.359
+and it works the same as GNU Emacs does. Once that's all set,
+
+00:15:43.360 --> 00:15:48.399
+then these porcelains, like around git, should fall into
+
+00:15:48.400 --> 00:15:55.279
+place. without too much difficulty, hopefully.
+
+NOTE Q: Not really a question, but how about Schemacs as a name?
+
+00:15:55.280 --> 00:15:59.199
+How about Schemax as a name? I like the name. I like that name.
+
+00:15:59.200 --> 00:16:03.119
+I haven't really looked into like, is that already used or is
+
+00:16:03.120 --> 00:16:09.759
+that going to be confusing? But certainly something we can
+
+00:16:09.760 --> 00:16:10.959
+discuss.
+
+00:16:10.960 --> 00:16:13.039
+Another thing I should mention,
+
+00:16:13.040 --> 00:16:18.759
+I should probably set up a server or something like Discord
+
+00:16:18.760 --> 00:16:25.359
+or something like that. Discourse, not Discord.
+
+00:16:25.360 --> 00:16:31.599
+Discourse, the open source one, where we could actually
+
+00:16:31.600 --> 00:16:49.239
+chat about this stuff. For the time being, ActivityPub,
+
+00:16:49.240 --> 00:16:52.399
+mostly Mastodon, is how I communicate with people in real
+
+00:16:52.400 --> 00:16:57.279
+time, that or email. So if you want to get a hold of me, check
+
+00:16:57.280 --> 00:17:02.439
+the notes for this presentation and just send me an email.
+
+00:17:02.440 --> 00:17:09.039
+Any question at all is fine. If you want to contribute code,
+
+00:17:09.040 --> 00:17:12.799
+if you want to just learn how to contribute code, send me any
+
+00:17:12.800 --> 00:17:22.199
+questions. It's fine. I'm happy to answer them. And we can
+
+00:17:22.200 --> 00:17:25.879
+talk about the name as well.
+
+NOTE Q: Why is it not feasible for the Emacs layer that interprets Emacs Lisp (the core in C) ot have a Scheme interpreter, instead of using Guile?
+
+00:17:25.880 --> 00:17:30.239
+Okay, why is it not feasible for the Emacs layer that
+
+00:17:30.240 --> 00:17:34.319
+interprets Emacs Lisp, the core in C, have a Scheme
+
+00:17:34.320 --> 00:17:39.799
+interpreter instead of using Guile? Let's see, I have to,
+
+00:17:39.800 --> 00:17:48.799
+okay. Emacs layer interprets Emacs Lisp, the core in C, have
+
+00:17:48.800 --> 00:17:54.079
+a Scheme interpreter instead of using Guile. Okay, so that,
+
+00:17:54.080 --> 00:17:59.959
+the question xlarsx is asking, xlars, x, So Lars is asking,
+
+00:17:59.960 --> 00:18:02.319
+is it not feasible for there to be an
+
+00:18:02.320 --> 00:18:06.839
+Emacs layer that interprets Emacs Lisp have a scheme
+
+00:18:06.840 --> 00:18:33.079
+interpreter? This is Robin Templeton's project. And
+
+00:18:33.080 --> 00:18:39.839
+they're presenting later today. So check the roster and be
+
+00:18:39.840 --> 00:18:45.199
+sure to see that presentation because that's exactly what
+
+00:18:45.200 --> 00:18:52.119
+Robin Templeton is doing. That's not what I'm doing though.
+
+00:18:52.120 --> 00:18:57.239
+I'm trying to create something in Scheme. But yes, there is
+
+00:18:57.240 --> 00:19:02.959
+an attempt to get an Scheme interpreter to run inside of
+
+00:19:02.960 --> 00:19:07.159
+Emacs itself. And it has its own method of binding to Emacs
+
+00:19:07.160 --> 00:19:11.199
+Lisp functions and translating data like Lisp structures
+
+00:19:11.200 --> 00:19:14.439
+between Guile Scheme and Emacs Lisp. Robin will explain all
+
+00:19:14.440 --> 00:19:15.799
+of that in their presentation.
+
+00:19:15.800 --> 00:19:18.919
+OK, I think I've got through all the questions on Etherpad.
+
+00:19:18.920 --> 00:19:23.879
+But I'm going to hang out here for a bit longer. And yeah, feel
+
+00:19:23.880 --> 00:19:28.239
+free to do a video chat with me or send me more questions on
+
+00:19:28.240 --> 00:19:33.839
+Etherpad or here in the big blue button. And so I'm just going
+
+00:19:33.840 --> 00:21:49.119
+to hang out. And thanks for asking all your questions. And
+
+00:21:49.120 --> 00:21:50.839
+yeah, I look forward to working with all of you if you're
+
+00:21:50.840 --> 00:21:51.799
+interested. take it easy. Thanks so much for the talk and
+
+00:21:51.800 --> 00:21:53.199
+looking forward to seeing some of your progress as this
+
+00:21:53.200 --> 00:21:54.359
+moves forward, exciting space. We'll go ahead and leave the
+
+00:21:54.360 --> 00:21:54.879
+room open for you and thanks for offering to hang out and chat
+
+00:21:54.880 --> 00:21:55.639
+with other people that come by. Feel free to throw something
+
+00:21:55.640 --> 00:21:56.719
+in the chat if you want to remind people you're still here.
+
+00:21:56.720 --> 00:21:57.919
+Meanwhile, on the stream, we have moved along to our next
+
+00:21:57.920 --> 00:21:59.599
+talk on Rust, and that is just getting started. But again,
+
+00:21:59.600 --> 00:22:00.479
+we're continuing to record this, and I'll just keep an eye on
+
+00:22:00.480 --> 00:22:01.239
+it to stop the recording. Thank you. Thank you. It was
+
+00:22:01.240 --> 00:22:01.559
+awesome.
+
+00:22:01.560 --> 00:22:03.959
+So it seems like it's slowed down here for the Q&A. I don't see
+
+00:22:03.960 --> 00:22:05.439
+anybody else on BBB, so I'm going to go ahead and stop the
+
+00:22:05.440 --> 00:22:08.479
+recording. We can start it back up. I would say, yes, there's
+
+00:22:08.480 --> 00:22:09.519
+a lot of things you can do with this. You can handle
+
+00:22:09.520 --> 00:22:11.239
+processing. Yeah, I'm going to try and join over the chat for
+
+00:22:11.240 --> 00:22:14.679
+the next talk. I'm not sure if I can do both big blue buttons at
+
+00:22:14.680 --> 00:22:15.759
+the same time. You should be able to just watch your mute
+
+00:22:15.760 --> 00:22:19.159
+settings and mute tab settings and whatever all you have to
+
+00:22:19.160 --> 00:23:37.800
+avoid bleed through. Okay.
diff --git a/2024/captions/emacsconf-2024-gypsum--gypsum-my-clone-of-emacs-and-elisp-written-in-scheme--ramin-honary--main.vtt b/2024/captions/emacsconf-2024-gypsum--gypsum-my-clone-of-emacs-and-elisp-written-in-scheme--ramin-honary--main.vtt
new file mode 100644
index 00000000..6d214518
--- /dev/null
+++ b/2024/captions/emacsconf-2024-gypsum--gypsum-my-clone-of-emacs-and-elisp-written-in-scheme--ramin-honary--main.vtt
@@ -0,0 +1,1108 @@
+WEBVTT timed by sachac, captioned by ramin
+
+00:00:00.000 --> 00:00:02.780
+Hi, my name is Ramin Honary,
+
+00:00:02.781 --> 00:00:04.480
+and I'm here to talk to you today
+
+00:00:04.481 --> 00:00:08.940
+about my clone of Emacs and Emacs Lisp that I've written in
+
+00:00:08.941 --> 00:00:12.980
+Scheme so far.
+
+00:00:12.981 --> 00:00:19.102
+So I am an Emacs enthusiast since 2017,
+
+00:00:19.103 --> 00:00:22.664
+currently employed as a full stack developer,
+
+00:00:22.665 --> 00:00:25.225
+mostly working with Python and JavaScript,
+
+00:00:25.226 --> 00:00:27.079
+although my true love is functional
+
+00:00:27.080 --> 00:00:30.559
+programming, especially Haskell, and Scheme. I started
+
+00:00:30.560 --> 00:00:33.679
+learning Scheme about two years ago. And for the past year,
+
+00:00:33.680 --> 00:00:36.279
+I've been working on a project that I'm tentatively calling
+
+00:00:36.280 --> 00:00:40.794
+Gypsum. Naming things is hard. It's not a great name.
+
+00:00:40.795 --> 00:00:43.376
+I'm open to suggestions.
+
+00:00:43.377 --> 00:00:45.897
+But yes, this is the project in which
+
+00:00:45.898 --> 00:00:53.319
+I am trying to write an Emacs Lisp interpreter in Scheme.
+
+00:00:53.320 --> 00:00:58.199
+There are many clones already of Emacs. You've probably
+
+00:00:58.200 --> 00:01:04.799
+heard of Edwin, Jed, Jedit, Jove, Lem, MG, Yi, Zile. Edwin
+
+00:01:04.800 --> 00:01:10.519
+itself is also written in Scheme--MIT Scheme. These only
+
+00:01:10.520 --> 00:01:16.159
+clone the key bindings of Emacs and not Emacs Lisp itself.
+
+00:01:16.160 --> 00:01:21.199
+The only alternative to GNU Emacs that I'm aware of is
+
+00:01:21.200 --> 00:01:26.679
+XEmacs, which is a fork of GNU Emacs.
+
+00:01:26.680 --> 00:01:30.359
+Most people don't use Emacs for the key bindings. I mean,
+
+00:01:30.360 --> 00:01:34.039
+this is anecdotally speaking, but the people who I've
+
+00:01:34.040 --> 00:01:39.519
+talked to, I would say don't use Emacs for the key bindings.
+
+00:01:39.520 --> 00:01:42.679
+They use it really more because of the power of Emacs Lisp.
+
+00:01:42.680 --> 00:01:48.439
+Emacs is as powerful as any system shell, perhaps even more
+
+00:01:48.440 --> 00:01:53.105
+powerful than system shells like Bash.
+
+00:01:53.106 --> 00:01:55.207
+The reason why it's so powerful is because
+
+00:01:55.208 --> 00:01:56.959
+there's a good programming language
+
+00:01:56.960 --> 00:02:00.039
+which you can use to control everything on your system. You
+
+00:02:00.040 --> 00:02:01.732
+can control processes. You can load and save files.
+
+00:02:01.733 --> 00:02:06.416
+You can create files. You can configure things.
+
+00:02:06.417 --> 00:02:10.219
+You can capture the output of processes in buffers.
+
+00:02:10.220 --> 00:02:13.421
+You can filter text through buffers.
+
+00:02:13.422 --> 00:02:17.839
+And a good programming language is what
+
+00:02:17.840 --> 00:02:23.479
+you need in order to do all of this. So one big goal of this
+
+00:02:23.480 --> 00:02:29.239
+project is to try to stick as closely as possible to the R7RS
+
+00:02:29.240 --> 00:02:33.859
+standard Scheme definition. That is the latest Scheme
+
+00:02:33.860 --> 00:02:38.919
+standard: R7. And this is just because I want my project to
+
+00:02:38.920 --> 00:02:43.519
+work on many scheme implementations, not just Guile.
+
+00:02:43.520 --> 00:02:45.499
+Although Guile certainly is the reference
+
+00:02:45.500 --> 00:02:50.239
+implementation.
+
+00:02:50.240 --> 00:02:56.459
+So another goal is to be able to run any "init.el".
+
+00:02:56.460 --> 00:02:59.740
+So you can take your existing "init.el"
+
+00:02:59.741 --> 00:03:01.720
+and run it in my program without
+
+00:03:01.721 --> 00:03:05.340
+significant changes. That's one of my goals in the end.
+
+00:03:05.341 --> 00:03:07.315
+I should be able to do that.
+
+00:03:07.316 --> 00:03:09.119
+A lot of people invest significant
+
+00:03:09.120 --> 00:03:12.717
+time in their configs, and it's kind of disruptive
+
+00:03:12.718 --> 00:03:14.300
+if you want to change editors,
+
+00:03:14.301 --> 00:03:16.500
+not be able to use your Emacs Lisp
+
+00:03:16.501 --> 00:03:21.646
+config. And so I think a useful Emacs clone
+
+00:03:21.647 --> 00:03:25.127
+would be able to clone Emacs Lisp well enough
+
+00:03:25.128 --> 00:03:29.799
+that you can run your "init.el".
+
+00:03:29.800 --> 00:03:33.879
+And so overall, why am I doing this? It's just because I like
+
+00:03:33.880 --> 00:03:37.999
+the Scheme programming language. I love its simplicity and
+
+00:03:38.000 --> 00:03:42.439
+its power. It's an extremely well thought-out language.
+
+00:03:42.440 --> 00:03:46.159
+It's one of those languages where you can understand the
+
+00:03:46.160 --> 00:03:48.739
+entire language from top to bottom. You can read the entire
+
+00:03:48.740 --> 00:03:52.879
+specification and understand it yourself.
+
+00:03:52.880 --> 00:03:57.239
+It's like the computers I grew up with when I was a kid.
+
+00:03:57.240 --> 00:03:59.319
+They were all very simple computers
+
+00:03:59.320 --> 00:04:02.559
+in the late 80s, early 90s. And back then,
+
+00:04:02.560 --> 00:04:05.579
+theoretically, an engineer could understand the entire
+
+00:04:05.580 --> 00:04:07.959
+system at the software level all the way down to the circuit
+
+00:04:07.960 --> 00:04:12.159
+level. You can't do that nowadays. And so nowadays, my
+
+00:04:12.160 --> 00:04:16.859
+computer is not really a physical computer anymore. It's
+
+00:04:16.860 --> 00:04:21.079
+the Scheme language standard itself. That is the core of
+
+00:04:21.080 --> 00:04:25.599
+computation, of all of computation for me. And I would like
+
+00:04:25.600 --> 00:04:30.579
+to use it as more than just an academic curiosity. It was
+
+00:04:30.580 --> 00:04:36.359
+originally designed for teaching at MIT, but it's found use
+
+00:04:36.360 --> 00:04:41.399
+in industry. And the R7RS standard is still
+
+00:04:41.400 --> 00:04:44.270
+relatively new. It's over 10 years old at this point,
+
+00:04:44.271 --> 00:04:47.999
+but hasn't, I mean, the
+
+00:04:48.000 --> 00:04:52.980
+Scheme ecosystem itself is already fairly small.
+
+00:04:52.981 --> 00:04:54.341
+There still, I don't think,
+
+00:04:54.342 --> 00:04:56.359
+has been a whole lot of adoption of R7RS
+
+00:04:56.360 --> 00:04:58.785
+quite yet. Kind of a shame.
+
+00:04:58.786 --> 00:05:01.119
+So I'd like a project like this, a
+
+00:05:01.120 --> 00:05:04.009
+very large scale, kind of a killer-app-like project
+
+00:05:04.010 --> 00:05:05.920
+where you're developing a text editor
+
+00:05:05.921 --> 00:05:09.060
+and perhaps even an integrated development environment
+
+00:05:09.061 --> 00:05:11.920
+in Scheme, I think would be very useful
+
+00:05:11.921 --> 00:05:13.799
+just even as a study of, you know, what
+
+00:05:13.800 --> 00:05:18.461
+can this language do? And just overall,
+
+00:05:18.462 --> 00:05:21.220
+there seems to be a lot of interest in
+
+00:05:21.221 --> 00:05:24.320
+Guile-based Emacs and well, maybe a
+
+00:05:24.321 --> 00:05:27.163
+Scheme-based Emacs, but Guile in particular.
+
+00:05:27.164 --> 00:05:28.220
+There has been talk of
+
+00:05:28.221 --> 00:05:33.660
+changing Emacs Lisp or the core of the Emacs Lisp over to
+
+00:05:33.661 --> 00:05:38.469
+Guile for about 30 years or so,
+
+00:05:38.470 --> 00:05:41.199
+talks originally in the early
+
+00:05:41.200 --> 00:05:44.799
+mid 90s. There were discussions between Richard Stallman,
+
+00:05:44.800 --> 00:05:49.919
+Tom Lord, and Aubrey Jaffer. They considered
+
+00:05:49.920 --> 00:05:53.219
+actually replacing Emacs Lisp with Scheme.
+
+00:05:53.220 --> 00:05:56.827
+In 1999, and going for about 10 years,
+
+00:05:56.828 --> 00:06:01.079
+someone named Ken Raeburn actually started
+
+00:06:01.080 --> 00:06:07.240
+a project where he started writing Emacs in Guile.
+
+00:06:07.241 --> 00:06:11.859
+My project is very similar to this.
+
+00:06:11.860 --> 00:06:15.120
+Here's a quote from his webpage, which is still up, even
+
+00:06:15.121 --> 00:06:18.399
+though it hasn't been updated in 15 years.
+
+00:06:18.400 --> 00:06:20.519
+This project that I have started
+
+00:06:20.520 --> 00:06:23.101
+is for converting GNU Emacs to Guile
+
+00:06:23.102 --> 00:06:24.121
+as its programming language.
+
+00:06:24.122 --> 00:06:26.082
+Support for Emacs Lisp will continue to exist,
+
+00:06:26.083 --> 00:06:27.760
+of course, but it may be through
+
+00:06:27.761 --> 00:06:29.244
+translation and/or interpretation.
+
+00:06:29.245 --> 00:06:30.339
+The Lisp engine itself
+
+00:06:30.340 --> 00:06:32.906
+may no longer be the core of the program.
+
+00:06:32.907 --> 00:06:38.538
+And this is my goal as well. In 2010,
+
+00:06:38.539 --> 00:06:41.879
+Andy Wingo and Ludovic Courtes
+
+00:06:41.880 --> 00:06:46.402
+took maintainership of the Guile project.
+
+00:06:46.403 --> 00:06:52.719
+From 2009, so while Andy... 2009
+
+00:06:52.720 --> 00:06:59.399
+to 2011, the first Emacs Lisp interpreter was already being
+
+00:06:59.400 --> 00:07:02.089
+implemented in Guile. And even to this day,
+
+00:07:02.090 --> 00:07:05.651
+this Emacs Lisp interpreter ships with Guile.
+
+00:07:05.652 --> 00:07:06.599
+And so this was happening
+
+00:07:06.600 --> 00:07:10.112
+while Andy Wingo took control of the project.
+
+00:07:10.113 --> 00:07:13.833
+In 2011, so shortly after Andy Wingo
+
+00:07:13.834 --> 00:07:15.119
+took control of the project,
+
+00:07:15.120 --> 00:07:22.279
+Guile 2.0 was released. And also in 2011, in the summertime,
+
+00:07:22.280 --> 00:07:27.279
+someone named Robin Templeton, I believe it was a Google
+
+00:07:27.280 --> 00:07:33.519
+Summer of Code project, started actually trying to
+
+00:07:33.520 --> 00:07:38.719
+incorporate libguile, that's the guile interpreter, as a
+
+00:07:38.720 --> 00:07:45.199
+linkable or loadable library, linking it to the Emacs
+
+00:07:45.200 --> 00:07:49.179
+executable, and then providing some built-in functions in
+
+00:07:49.180 --> 00:07:54.759
+Emacs that allows you to call the scheme
+
+00:07:54.760 --> 00:07:58.739
+interpreter, the Guile Scheme interpreter, from Emacs.
+
+00:07:58.740 --> 00:08:02.239
+And so it's not like a wrapper around the REPL like Geiser or
+
+00:08:02.240 --> 00:08:08.959
+SLIME. It's actually the whole Scheme interpreter loaded
+
+00:08:08.960 --> 00:08:13.939
+into your Emacs process. And that means your Emacs will have
+
+00:08:13.940 --> 00:08:20.079
+the ability to actually load compiled Scheme programs and
+
+00:08:20.080 --> 00:08:25.879
+actually run them and share memory with Emacs Lisp
+
+00:08:25.880 --> 00:08:29.799
+processes. And, well, Robin Templeton will explain all of
+
+00:08:29.800 --> 00:08:33.039
+this. They're presenting today, and I'm very excited to
+
+00:08:33.040 --> 00:08:37.079
+actually see their presentation. They'll explain
+
+00:08:37.080 --> 00:08:40.179
+everything.
+
+00:08:40.180 --> 00:08:45.679
+So, let's see. Moving on. 2020, someone named Vasilij
+
+00:08:45.680 --> 00:08:49.039
+Schneidermann, I'm not sure how you pronounce that, published
+
+00:08:49.040 --> 00:08:53.639
+an overview called The State of Emacs Lisp on Guile. Let's see
+
+00:08:53.640 --> 00:08:58.399
+if I have that here. Yep, it's this page right here. He goes
+
+00:08:58.400 --> 00:09:04.879
+into detail about who has done what so far, and what can you do
+
+00:09:04.880 --> 00:09:09.759
+in Guile with Emacs Lisp so far, and so on. Like, what is the
+
+00:09:09.760 --> 00:09:12.717
+state of the project overall?
+
+00:09:12.718 --> 00:09:15.899
+And so (speak of the devil)
+
+00:09:15.900 --> 00:09:20.960
+(Andy Wingo on social media).
+
+00:09:20.961 --> 00:09:24.339
+So, 2020 to present. Guile Emacs
+
+00:09:24.340 --> 00:09:32.071
+is dead? So there's GCC Emacs now.
+
+00:09:32.072 --> 00:09:35.752
+Emacs Lisp now has its own JIT compiler.
+
+00:09:35.753 --> 00:09:39.259
+And it seems like over the past few years,
+
+00:09:39.260 --> 00:09:44.319
+Emacs Lisp has kind of moved off into the direction of
+
+00:09:44.320 --> 00:09:48.439
+becoming its own programming language in its own right,
+
+00:09:48.440 --> 00:09:51.839
+and it is decidedly Common Lisp-flavored. It is
+
+00:09:51.840 --> 00:09:54.166
+very similar to Common Lisp,
+
+00:09:54.167 --> 00:09:56.519
+and that seems to be the direction
+
+00:09:56.520 --> 00:10:00.719
+that it's headed now, and I don't know if there's really any
+
+00:10:00.720 --> 00:10:05.559
+interest anymore amongst the Emacs maintainers of
+
+00:10:05.560 --> 00:10:09.799
+continuing with a Guile-based Emacs.
+
+00:10:09.800 --> 00:10:13.319
+But as far as I know, there's still a lot of interest in the
+
+00:10:13.320 --> 00:10:19.599
+community amongst Scheme and Lisp and Emacs users who are
+
+00:10:19.600 --> 00:10:24.779
+interested in maybe continuing to try to get Guile to become
+
+00:10:24.780 --> 00:10:28.079
+the core of Emacs, or if not, you know, what Robin Templeton
+
+00:10:28.080 --> 00:10:31.639
+has been doing, at least trying to get Guile a
+
+00:10:31.640 --> 00:10:37.279
+language, a first class supported language in Emacs. So
+
+00:10:37.280 --> 00:10:39.999
+that's enough talking. Let me just show you what I have so
+
+00:10:40.000 --> 00:10:45.239
+far. The GUI is barely working, because I have very little
+
+00:10:45.240 --> 00:10:50.039
+experience with GTK or GObject Introspection. It's very
+
+00:10:50.040 --> 00:10:53.639
+difficult to debug, so it's very slow to develop. Any crash
+
+00:10:53.640 --> 00:10:58.199
+at C level produces no stack traces. So far, most of the
+
+00:10:58.200 --> 00:11:03.199
+crashes that I've experienced are due to simple mistakes
+
+00:11:03.200 --> 00:11:09.399
+like passing the wrong data type. So, so far, no, not a whole
+
+00:11:09.400 --> 00:11:14.174
+lot of need for GDB or rebuilding all GTK, glib,
+
+00:11:14.175 --> 00:11:17.877
+and so on with the debugging symbols.
+
+00:11:17.878 --> 00:11:19.319
+But yes, still development's been
+
+00:11:19.320 --> 00:11:25.499
+very slow. I'm learning as I go. I've chosen to use Guile GI as
+
+00:11:25.500 --> 00:11:30.499
+the foundation for the GUI. Let me just load it up quick here.
+
+00:11:30.600 --> 00:11:39.899
+"load main-guile.scm". And this will launch the GUI. I also
+
+00:11:39.900 --> 00:11:44.199
+happen to have a REPL that runs in a separate thread and
+
+00:11:44.200 --> 00:11:49.759
+submits any form that you type to be evaluated inside of the
+
+00:11:49.760 --> 00:11:57.079
+running GUI environment. But you can just type stuff. So
+
+00:11:57.080 --> 00:12:02.903
+"hello world." And of course there is...
+
+00:12:02.904 --> 00:12:08.059
+as you can see, it's not quite rendering correctly.
+
+00:12:08.060 --> 00:12:11.090
+This "*Messages*" thing here,
+
+00:12:11.091 --> 00:12:13.760
+that should be over here, obviously. I haven't been able to
+
+00:12:13.761 --> 00:12:17.820
+figure out how to get those little details down. But yeah,
+
+00:12:17.821 --> 00:12:23.215
+you can do M-:, and you get your eval,
+
+00:12:23.216 --> 00:12:26.637
+and you can just evaluate, like (what's an emacs,)
+
+00:12:26.638 --> 00:12:29.280
+(or what's a Scheme-specific thing?)
+
+00:12:29.281 --> 00:12:37.679
+Like "(import (srfi 1))", and
+
+00:12:37.680 --> 00:12:44.888
+let's see, do "(iota 20)", for example.
+
+00:12:44.889 --> 00:12:46.780
+And so that is the procedure
+
+00:12:46.781 --> 00:12:52.900
+that iterates and produces some 20 elements of a
+
+00:12:52.901 --> 00:12:58.419
+list. Or you can do something like, let's see,
+
+00:12:58.420 --> 00:13:08.114
+string-append "hello" with space "world".
+
+00:13:08.115 --> 00:13:10.259
+And you get the result and so on. And,
+
+00:13:10.260 --> 00:13:13.039
+you know, scheme allows you to return multiple values. So
+
+00:13:13.040 --> 00:13:14.998
+what I have done here is just
+
+00:13:14.999 --> 00:13:17.979
+every value is captured in a list
+
+00:13:17.980 --> 00:13:21.001
+and it prints all of the return values in the list.
+
+00:13:21.002 --> 00:13:23.462
+So if a procedure returns no values,
+
+00:13:23.463 --> 00:13:26.144
+you get an empty list.
+
+00:13:26.145 --> 00:13:29.405
+And that's that. It's still quite buggy.
+
+00:13:29.406 --> 00:13:31.519
+So like, here's a bug
+
+00:13:31.520 --> 00:13:37.319
+that I can reproduce fairly consistently.
+
+00:13:37.320 --> 00:13:41.407
+I can, yeah, if you do...
+
+00:13:41.408 --> 00:13:46.199
+there seems to be a problem with a
+
+00:13:46.200 --> 00:13:49.719
+widget being freed too soon, so it will crash. I'm going to
+
+00:13:49.720 --> 00:13:53.319
+try and solve that, hopefully, before this presentation
+
+00:13:53.320 --> 00:13:57.109
+goes live. Let's see here.
+
+00:13:57.110 --> 00:13:59.839
+The Emacs Lisp parser is based on
+
+00:13:59.840 --> 00:14:04.399
+Guile Emacs Lisp. So the Guile Emacs Lisp interpreter that
+
+00:14:04.400 --> 00:14:09.039
+ships with Guile, that is what I am using. I've actually
+
+00:14:09.040 --> 00:14:15.719
+copied and pasted the source code from the Guile source base
+
+00:14:15.720 --> 00:14:20.639
+into my own project so that I can iterate on it more quickly.
+
+00:14:20.640 --> 00:14:25.799
+And I've already had to make some modifications to the
+
+00:14:25.800 --> 00:14:29.899
+Emacs Lisp interpreter in Guile. So here's the evaluator.
+
+00:14:29.900 --> 00:14:33.079
+I've actually already modified the parser and the lexer a
+
+00:14:33.080 --> 00:14:37.858
+little bit. And it's at least able to parse
+
+00:14:37.859 --> 00:14:43.149
+all of the "subr.el" program, the Emacs Lisp program.
+
+00:14:43.150 --> 00:14:44.599
+It can actually load that, but not
+
+00:14:44.600 --> 00:14:47.570
+evaluate it, or parse it, but not evaluate it...
+
+00:14:47.571 --> 00:14:51.719
+Read, not eval.
+
+00:14:51.720 --> 00:14:53.959
+By the time this goes live, I will have submitted a patch
+
+00:14:53.960 --> 00:14:57.559
+upstream. And that's another goal of this project,
+
+00:14:57.560 --> 00:15:01.199
+incidentally, is that anything that we can contribute to
+
+00:15:01.200 --> 00:15:08.359
+Guile and any built-in functions that we can implement
+
+00:15:08.360 --> 00:15:10.999
+I would like to, for this project, I would like to try and
+
+00:15:11.000 --> 00:15:15.679
+contribute upstream to Guile. The Emacs Lisp interpreter
+
+00:15:15.680 --> 00:15:21.359
+is not working well, unfortunately. So this copy, this is
+
+00:15:21.360 --> 00:15:29.479
+the copy of the code base (from this commit in particular)
+
+00:15:29.480 --> 00:15:34.979
+and well, I can't get it working. I can't actually get the
+
+00:15:34.980 --> 00:15:37.759
+non-copy, the actual built-in version of
+
+00:15:37.760 --> 00:15:41.211
+the Emacs Lisp interpreter to work properly quite yet.
+
+00:15:41.212 --> 00:15:47.033
+So let me quick go to, (what is this here?)
+
+00:15:47.034 --> 00:15:51.879
+Guile Elisp. So suppose you have this
+
+00:15:51.880 --> 00:15:55.999
+"eval-elisp" procedure here and it takes
+
+00:15:56.000 --> 00:16:00.639
+an Elisp environment and then it evaluates an expression in that
+
+00:16:00.640 --> 00:16:03.599
+environment. And evaluates to a value. So this
+
+00:16:03.600 --> 00:16:05.084
+is the standard way of doing it in Guile.
+
+00:16:05.085 --> 00:16:06.039
+If you can see here,
+
+00:16:06.040 --> 00:16:09.946
+you've got this expression, "compile" expression.
+
+00:16:09.947 --> 00:16:16.859
+This is like "eval". And so actually trying to load this.
+
+00:16:16.860 --> 00:16:24.672
+So let's do "load gypsum". (Let's see here. This is, no),
+
+00:16:24.673 --> 00:16:35.759
+I wanted to "import gypsum backend guile Elisp".
+
+00:16:35.760 --> 00:16:39.039
+And if I actually want to do this... So elisp eval, first of all,
+
+00:16:39.040 --> 00:16:42.879
+it says it failed because there's an unbound variable
+
+00:16:42.880 --> 00:16:45.348
+"elisp-eval". Don't know what it's talking about.
+
+00:16:45.349 --> 00:16:48.229
+There's no such variable in any of my programs.
+
+00:16:48.230 --> 00:16:51.151
+I have no idea what's going on here.
+
+00:16:51.152 --> 00:16:59.279
+You can try to run eval elisp on some simple form like
+
+00:16:59.280 --> 00:17:04.759
+(+ 1 2). And it gives you this exception. This works.
+
+00:17:04.760 --> 00:17:09.579
+This is the same issue that I have with all of the,
+
+00:17:09.580 --> 00:17:13.200
+every version of the Emacs Lisp Interpreter in Guile.
+
+00:17:13.201 --> 00:17:18.751
+I can get it to work with this big ",L" mode.
+
+00:17:18.752 --> 00:17:21.593
+So I can actually do (+ 1 2) here.
+
+00:17:21.594 --> 00:17:26.816
+I can do "princ" like here.
+
+00:17:26.817 --> 00:17:30.119
+That all works fine. It gives me, for some reason,
+
+00:17:30.120 --> 00:17:34.940
+a stack trace here.
+
+00:17:34.941 --> 00:17:43.926
+And yeah, so it's a bit, it's not well-documented.
+
+00:17:43.927 --> 00:17:45.887
+The code base is fairly old.
+
+00:17:45.888 --> 00:17:50.399
+As I said, it was developed around 2011,
+
+00:17:50.400 --> 00:17:53.239
+and it's fairly opaque, and I have not been able to figure out
+
+00:17:53.240 --> 00:17:57.959
+how to get Emacs Lisp in Guile working smoothly. So I have
+
+00:17:57.960 --> 00:18:04.539
+started writing my own Emacs Lisp interpreter. And, uh,
+
+00:18:04.540 --> 00:18:13.399
+"gypsum/elisp/eval-tests.scm".
+
+00:18:13.400 --> 00:18:18.269
+It's, uh, not entirely ready.
+
+00:18:18.270 --> 00:18:21.695
+I can show you some of the tests at least.
+
+00:18:21.696 --> 00:18:25.036
+Here is a simple Emacs Lisp program
+
+00:18:25.037 --> 00:18:25.856
+that you can evaluate.
+
+00:18:25.857 --> 00:18:31.139
+You got "progn", "setq" a to 3, "setq" b to 5,
+
+00:18:31.140 --> 00:18:35.839
+"setq" c to the sum of a and b, return c.
+
+00:18:35.840 --> 00:18:39.059
+And this at least works correctly.
+
+00:18:39.060 --> 00:18:43.279
+As you can see here, the result is eight. Um, but
+
+00:18:43.280 --> 00:18:46.520
+the "let*" semantics are not completed yet.
+
+00:18:46.521 --> 00:18:51.103
+Lots of work left to do there.
+
+00:18:51.104 --> 00:18:54.464
+So in the time I have left, I guess I can just,
+
+00:18:54.465 --> 00:18:56.759
+talk a little bit about what my plans
+
+00:18:56.760 --> 00:18:59.387
+are for the future.
+
+00:18:59.388 --> 00:19:02.599
+I would like to begin by evaluating or
+
+00:19:02.600 --> 00:19:06.759
+actually loading the "subr.el" into my Emacs Lisp
+
+00:19:06.760 --> 00:19:09.639
+interpreter. I actually have tests set up for that as well,
+
+00:19:09.640 --> 00:19:15.909
+so I can actually select any form I want from "subr.el".
+
+00:19:15.910 --> 00:19:18.832
+I can just run this through my interpreter
+
+00:19:18.833 --> 00:19:21.593
+and test to see if everything is working
+
+00:19:21.594 --> 00:19:28.779
+once I get that far.
+
+00:19:28.780 --> 00:19:33.239
+And yeah, let me just say that this is my formal appeal to the
+
+00:19:33.240 --> 00:19:37.799
+community for help on this project. Emacs Lisp has
+
+00:19:37.800 --> 00:19:41.179
+1,393 built-in functions.
+
+00:19:41.180 --> 00:19:45.039
+I could never implement that many functions on my own, so if
+
+00:19:45.040 --> 00:19:47.599
+this project is going to be useful to anybody in any
+
+00:19:47.600 --> 00:19:51.114
+reasonable amount of time, I'm going to need help.
+
+00:19:51.115 --> 00:19:53.476
+And I know that there are people out there
+
+00:19:53.477 --> 00:19:56.398
+who are very interested in a Guile-based Emacs,
+
+00:19:56.399 --> 00:19:58.999
+and so if you're watching this,
+
+00:19:59.000 --> 00:20:00.521
+please feel free to contact me
+
+00:20:00.522 --> 00:20:05.699
+on social media or over e-mail.
+
+00:20:05.700 --> 00:20:09.647
+My job, the way I see it, is if there's enough interest,
+
+00:20:09.648 --> 00:20:12.064
+and I do get a lot of people interested in
+
+00:20:12.065 --> 00:20:13.199
+starting to contribute,
+
+00:20:13.200 --> 00:20:17.919
+my job will be to document the building and testing process
+
+00:20:17.920 --> 00:20:21.039
+and make sure that it is as easy as possible to contribute
+
+00:20:21.040 --> 00:20:24.079
+code to this project. I want to document the system
+
+00:20:24.080 --> 00:20:27.599
+architecture. I'll write blog posts. I'll do videos on
+
+00:20:27.600 --> 00:20:31.879
+PeerTube explaining how everything works. And I will
+
+00:20:31.880 --> 00:20:34.199
+prioritize which built-in functions
+
+00:20:34.200 --> 00:20:36.462
+I think are probably going to be the most necessary,
+
+00:20:36.463 --> 00:20:40.878
+the most essential to get the interpreter running,
+
+00:20:40.879 --> 00:20:42.559
+and then find low-hanging fruit,
+
+00:20:42.560 --> 00:20:46.519
+functions that are easy for people to implement
+
+00:20:46.520 --> 00:20:50.845
+as a good introduction to getting them started
+
+00:20:50.846 --> 00:20:53.947
+on contributing to the project.
+
+00:20:53.948 --> 00:20:56.679
+And then, of course, I will take
+
+00:20:56.680 --> 00:21:01.719
+responsibility myself of making sure that we can
+
+00:21:01.720 --> 00:21:03.774
+get the Elisp interpreter to the point
+
+00:21:03.775 --> 00:21:09.079
+where it can run the Emacs regression tests.
+
+00:21:09.080 --> 00:21:13.333
+These are the test suites that are used
+
+00:21:13.334 --> 00:21:20.359
+to test Emacs Lisp itself in the GNU Emacs code base. And so
+
+00:21:20.360 --> 00:21:24.559
+ERT is itself written in Emacs Lisp. And so
+
+00:21:24.560 --> 00:21:27.033
+I think if we implement enough of the built-in functions
+
+00:21:27.034 --> 00:21:29.933
+to be able to run ERT,
+
+00:21:29.934 --> 00:21:31.195
+then we can actually start
+
+00:21:31.196 --> 00:21:33.617
+using the GNU Emacs regression tests
+
+00:21:33.618 --> 00:21:39.248
+to test our own interpreter, our own Emacs clone.
+
+00:21:39.249 --> 00:21:41.199
+And of course, I'll make sure that there's at least
+
+00:21:41.200 --> 00:21:45.833
+one usable GUI. I'm currently working on Guile GI
+
+00:21:45.834 --> 00:21:51.396
+and GTK. It would be great to have an...
+
+00:21:51.397 --> 00:21:53.879
+ANSI terminal based...
+
+00:21:53.880 --> 00:21:58.219
+something that works in your terminal emulator.
+
+00:21:58.220 --> 00:22:00.283
+And yeah, it would be great if someday soon,
+
+00:22:00.284 --> 00:22:03.159
+hopefully, we get enough done
+
+00:22:03.160 --> 00:22:06.094
+that you can actually contribute a patch to this project
+
+00:22:06.095 --> 00:22:11.778
+from within the Gypsum editor itself.
+
+00:22:11.779 --> 00:22:13.380
+I was going to do an overview,
+
+00:22:13.381 --> 00:22:19.679
+but that would be for more of an hour-long presentation.
+
+00:22:19.680 --> 00:22:22.927
+So I'm out of time. I guess the last thing
+
+00:22:22.928 --> 00:22:25.449
+I should quickly say is there's no
+
+00:22:25.450 --> 00:22:27.159
+meta object protocol in this
+
+00:22:27.160 --> 00:22:29.001
+project. I think that's a little bit too difficult
+
+00:22:29.002 --> 00:22:30.962
+to port to various scheme implementations.
+
+00:22:30.963 --> 00:22:33.739
+So I've created a substitute, which I'm
+
+00:22:33.740 --> 00:22:36.959
+calling "functional lenses", which is inspired by the
+
+00:22:36.960 --> 00:22:42.059
+Haskell project of the same name.
+
+00:22:42.060 --> 00:22:47.511
+Everything in this project is based on functional lenses.
+
+00:22:47.512 --> 00:22:52.603
+Yeah, also a lot a work went into the keymaps data structure.
+
+00:22:52.604 --> 00:22:55.206
+The point being that I think I have
+
+00:22:55.207 --> 00:22:58.589
+a pretty good foundation here upon which we can build,
+
+00:22:58.590 --> 00:23:00.839
+even though there isn't an actual, there isn't
+
+00:23:00.840 --> 00:23:04.699
+a lot done in the actual prototype itself, not yet anyway,
+
+00:23:04.700 --> 00:23:08.419
+but I made sure to get the fundamentals down
+
+00:23:08.420 --> 00:23:11.080
+from the beginning. And so I think we have something
+
+00:23:11.081 --> 00:23:16.308
+like a solid foundation on which to build.
+
+00:23:16.309 --> 00:23:21.230
+So, I'm going to conclude it there.
+
+00:23:21.231 --> 00:23:24.599
+And here's my contact details. Like I said,
+
+00:23:24.600 --> 00:23:29.319
+this is a project, I'm appealing to the community of all
+
+00:23:29.320 --> 00:23:31.899
+people who are interested in Guile and Emacs to help
+
+00:23:31.900 --> 00:23:35.839
+contribute to this project. I see myself as just getting the
+
+00:23:35.840 --> 00:23:40.600
+ball rolling. Again, taking-off from the work
+
+00:23:40.601 --> 00:23:46.278
+that Ken Raeburn left behind, with my own
+
+00:23:46.279 --> 00:23:50.637
+from-the-ground-up implementation. So yeah,
+
+00:23:50.638 --> 00:23:53.858
+contact me: e-mail, you can take a look at my blog
+
+00:23:53.859 --> 00:23:57.419
+where I talk about what I have done.
+
+00:23:57.420 --> 00:24:00.759
+My source code, the code for this project, is up on
+
+00:24:00.760 --> 00:24:06.139
+Codeberg... The presentation... this
+
+00:24:06.140 --> 00:24:09.379
+presentation, the home page for this presentation, you
+
+00:24:09.380 --> 00:24:15.559
+can find more details there. Oh, I'm on
+
+00:24:15.560 --> 00:24:19.139
+ActivityPub as well, so my handle is
+
+00:24:19.140 --> 00:24:27.119
+@ramin_hal9001@fe.disroot.org, and I'm on everyday.
+
+00:24:27.120 --> 00:24:30.939
+So yeah, please feel free to contact me if you're interested,
+
+00:24:30.940 --> 00:24:35.640
+and thank you for your attention.
diff --git a/2024/captions/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--answers.vtt b/2024/captions/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--answers.vtt
new file mode 100644
index 00000000..f1425353
--- /dev/null
+++ b/2024/captions/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--answers.vtt
@@ -0,0 +1,690 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:12.919
+And I believe we are live. Hi, Mats, how are you doing? Oh, I'm
+
+00:00:12.920 --> 00:00:17.319
+fine. It's a pleasure to see you again after last year. And I
+
+00:00:17.320 --> 00:00:20.519
+was trying to think about it. We saw you last year, but didn't
+
+00:00:20.520 --> 00:00:26.919
+we see you as well in 2022? Yes. This is my third year. Yeah,
+
+00:00:26.920 --> 00:00:29.559
+well, thank you for being a regular at EmacsConf. It's
+
+00:00:29.560 --> 00:00:31.919
+always a pleasure to have you chat about hyperbole.
+
+00:00:31.920 --> 00:00:33.559
+Although I think you're the only one chatting about
+
+00:00:33.560 --> 00:00:37.159
+hyperbole this year compared to last year. Yes,
+
+00:00:37.160 --> 00:00:41.879
+unfortunately, that's, yeah, Bob has some family issues.
+
+00:00:41.880 --> 00:00:45.839
+So yeah, I'm here, but I'm here. Yeah, but we are happy to have
+
+00:00:45.840 --> 00:00:49.199
+you here. And as I was saying before, I'm not sure if you were,
+
+00:00:49.200 --> 00:00:52.519
+you had the time to watch the previous talk by Mohsen, you
+
+00:00:52.520 --> 00:00:56.239
+know, you had, there were plenty of ideas, I think that were
+
+00:00:56.240 --> 00:00:58.999
+very similar to what Hyperbole is trying to do by having
+
+00:00:59.000 --> 00:01:04.399
+buttons and having stuff that can be in any other mode that
+
+00:01:04.400 --> 00:01:08.399
+would allow you to supplement a coding file with extra
+
+00:01:08.400 --> 00:01:11.879
+information. So the ideas are living on. And even though
+
+00:01:11.880 --> 00:01:15.239
+hyperbole is one thing, I feel like other packages are also
+
+00:01:15.240 --> 00:01:17.759
+taking a lot of inspiration for it. So congratulations on
+
+00:01:17.760 --> 00:01:21.439
+being an inspiration, I suppose. Oh, thanks.
+
+00:01:21.440 --> 00:01:24.839
+Unfortunately, I have not had any time to watch anything of
+
+00:01:24.840 --> 00:01:29.759
+the Emacs conference since apparently my life is like every
+
+00:01:29.760 --> 00:01:33.559
+time it's Emacs conference, I do something else. So I've been
+
+00:01:33.560 --> 00:01:37.919
+just moving this weekend. So, I'm in a new apartment, but I'm
+
+00:01:37.920 --> 00:01:42.479
+connected and everything seems to work okay. So, I can't
+
+00:01:42.480 --> 00:01:45.199
+relate to what we said in any of the other talks, I'm afraid.
+
+00:01:45.200 --> 00:01:48.199
+So, sorry about that. No, that's okay. No, but that's
+
+00:01:48.200 --> 00:01:51.559
+completely fine, because you may be able to watch the talks
+
+00:01:51.560 --> 00:01:54.599
+at any point later on, because I'll remind the viewers that
+
+00:01:54.600 --> 00:01:57.319
+the talks are currently available on EmacsConf or the
+
+00:01:57.320 --> 00:02:01.199
+pre-recorded one. And I think we only had one live talk
+
+00:02:01.200 --> 00:02:04.239
+yesterday. All of them are already available with
+
+00:02:04.240 --> 00:02:08.039
+subtitles and all the funny stuff that we usually put. So
+
+00:02:08.040 --> 00:02:11.359
+that's an invitation for people to watch it. All right. So,
+
+00:02:11.360 --> 00:02:14.439
+Mats, before we start with the questions, I see people in the
+
+00:02:14.440 --> 00:02:17.959
+process of writing them. Was there anything else you wanted
+
+00:02:17.960 --> 00:02:21.159
+to add on top of your presentation? Maybe some supplements
+
+00:02:21.160 --> 00:02:29.039
+or whatnot? No, no. Nothing to add. Right. I mean, this year
+
+00:02:29.040 --> 00:02:31.519
+was more a bag of tricks, some new stuff that you've
+
+00:02:31.520 --> 00:02:36.159
+implemented in Hyperbole. And it's fun because I see the UI
+
+00:02:36.160 --> 00:02:40.159
+that you have for some of those modes. And earlier, you
+
+00:02:40.160 --> 00:02:42.399
+weren't able to watch those talks, but we were talking a lot
+
+00:02:42.400 --> 00:02:46.119
+about Transient and about what it allows you to do in terms of
+
+00:02:46.120 --> 00:02:51.039
+interactivity. I'm actually familiar with Transient. No,
+
+00:02:51.040 --> 00:02:56.279
+no, no. It's a mode written by Tarsius, so Jonas Bernoulli,
+
+00:02:56.280 --> 00:03:01.599
+the person behind Magit, and it's a very nice way to create
+
+00:03:01.600 --> 00:03:06.319
+menus for interactive setups. So, if you are interested in
+
+00:03:06.320 --> 00:03:10.039
+perhaps augmenting what you currently have with
+
+00:03:10.040 --> 00:03:12.959
+Hyperbole, it might be nice to look into Transient because I
+
+00:03:12.960 --> 00:03:16.359
+think this is heading towards eventually being merged into
+
+00:03:16.360 --> 00:03:18.879
+the core of Emacs. I mean, don't quote me on this. and I'm not
+
+00:03:18.880 --> 00:03:21.719
+sure how Tarsius feels about it, but because of the
+
+00:03:21.720 --> 00:03:25.879
+adoption, because Magit obviously uses transient, Org is
+
+00:03:25.880 --> 00:03:28.839
+trying to make a move towards adopting transient, it feels
+
+00:03:28.840 --> 00:03:32.479
+like Hyperbole would do well as well to adopt it because it's
+
+00:03:32.480 --> 00:03:36.799
+starting to become a grammar of general UI at this point.
+
+00:03:36.800 --> 00:03:40.839
+Yeah, now when you mention it, I remember because I'm a heavy
+
+00:03:40.840 --> 00:03:47.519
+user of Magic, of course. So I know Transient that way. I know
+
+00:03:47.520 --> 00:03:50.999
+also that people have been complaining about Hyperbole's
+
+00:03:51.000 --> 00:03:56.079
+menu system. You know that Hyperbole reach back to
+
+00:03:56.080 --> 00:04:02.639
+something like 1993, so it has some maybe things that are not
+
+00:04:02.640 --> 00:04:07.279
+modern in that sense. So we have it on the plate to maybe look
+
+00:04:07.280 --> 00:04:11.479
+into these things and how we can sort of make things modern,
+
+00:04:11.480 --> 00:04:16.279
+etc. Sure, but it's completely fine to take your time. You
+
+00:04:16.280 --> 00:04:19.359
+don't necessarily have to follow the latest fads when it
+
+00:04:19.360 --> 00:04:24.439
+comes to completion engines or interactive engines like
+
+00:04:24.440 --> 00:04:26.879
+Transient is. I'm not actually sure how you would call
+
+00:04:26.880 --> 00:04:31.519
+Transient. Is this a UI maker, an interaction engine? I
+
+00:04:31.520 --> 00:04:36.559
+don't know. I'll need to ask Tarsius at some point. All
+
+00:04:36.560 --> 00:04:41.439
+right. Okay. Okay so let's move on to the questions. We've
+
+00:04:41.440 --> 00:04:45.719
+got a couple of them and for the Q&A we'll have about five
+
+00:04:45.720 --> 00:04:49.199
+minutes and 30 seconds until we got to lunch. So starting
+
+00:04:49.200 --> 00:04:51.193
+with the first question.
+
+NOTE Q: How is the log buffer generated?
+
+00:04:51.194 --> 00:04:52.679
+How is the log buffer generated in
+
+00:04:52.680 --> 00:04:56.719
+your presentation? But it's a very quick answer to this.
+
+00:04:56.720 --> 00:04:59.839
+We recommend at EmacsConf that speakers use the
+
+00:04:59.840 --> 00:05:02.679
+interaction-log package, which allows you to have a
+
+00:05:02.680 --> 00:05:07.879
+slightly prettier lossage. Lossage being in Emacs how you
+
+00:05:07.880 --> 00:05:10.359
+call the comments that you've used. And so if you're
+
+00:05:10.360 --> 00:05:12.439
+interested in using this for your own presentation,
+
+00:05:12.440 --> 00:05:17.519
+interaction log, and you'll be able to find it fairly
+
+00:05:17.520 --> 00:05:18.999
+easily.
+
+00:05:19.000 --> 00:05:21.050
+Moving to the next question.
+
+NOTE Q: So, the "select a thing" C-c RET is similar to expand-region? How does it behave in codes (functions, class, ...)
+
+00:05:21.051 --> 00:05:23.651
+So the selector thing C-c RET
+
+00:05:23.652 --> 00:05:26.479
+is similar to expand-region. How does it behave in
+
+00:05:26.480 --> 00:05:31.999
+codes i.e functions or class?
+
+00:05:32.000 --> 00:05:45.319
+Well I think it behaves exactly the same. I mean in the
+
+00:05:45.320 --> 00:05:50.079
+In any sort of buffer, it might depend on what
+
+00:05:50.080 --> 00:05:54.679
+constitutes a word, et cetera, and a sentence in the mood.
+
+00:05:54.680 --> 00:06:00.799
+That's how I would say it. Right.
+
+00:06:00.800 --> 00:06:09.279
+I'm just, in that sense, I'm just a user of the function. I
+
+00:06:09.280 --> 00:06:12.359
+haven't implemented it. I haven't tested it more than that.
+
+00:06:12.360 --> 00:06:17.959
+We can do this as a demo that you start with maybe select a
+
+00:06:17.960 --> 00:06:21.999
+small thing and by hitting it over and over again, you select
+
+00:06:22.000 --> 00:06:26.399
+more and more. Yeah, but it's completely fine sometimes to
+
+00:06:26.400 --> 00:06:30.199
+merely be a user of something, you know. It's easy. It's a
+
+00:06:30.200 --> 00:06:33.079
+testament to how amazing Emacs is because everything is
+
+00:06:33.080 --> 00:06:35.759
+written in Lisp in the background, that as soon as you start
+
+00:06:35.760 --> 00:06:38.119
+becoming a maintainer of something, you kind of expect it to
+
+00:06:38.120 --> 00:06:40.639
+just be able to understand everything else. And whilst it's
+
+00:06:40.640 --> 00:06:43.919
+technically true, the limiter here is the amount of time
+
+00:06:43.920 --> 00:06:47.199
+that you can invest looking at the definitions,
+
+00:06:47.200 --> 00:06:50.359
+understanding what they do, and sadly we don't have the time
+
+00:06:50.360 --> 00:06:53.319
+to do all of this. And especially with Hyperbole, which is
+
+00:06:53.320 --> 00:06:55.959
+obviously interacting with major modes in something that
+
+00:06:55.960 --> 00:07:01.239
+is more involved than Org mode, for instance. We do have
+
+00:07:01.240 --> 00:07:05.879
+another question. So, I know you Hyperbole devs are active
+
+00:07:05.880 --> 00:07:08.919
+and interested in sharing and interoperating with other
+
+00:07:08.920 --> 00:07:09.971
+Emacs tools.
+
+NOTE Q: What is a recent tool that you find exciting to think about using in combination with Hyperbole, or would like to suggest using in combination with it?
+
+00:07:09.972 --> 00:07:11.839
+What is a recent tool that you find exciting to
+
+00:07:11.840 --> 00:07:14.799
+think about using in combination with Hyperbole or would
+
+00:07:14.800 --> 00:07:21.599
+like to suggest using in combination with it? Well, lately
+
+00:07:21.600 --> 00:07:24.519
+we've been focusing a lot of sort of trying to make Hyperbole
+
+00:07:24.520 --> 00:07:29.639
+work together with Org Mode and in in a good way so they can
+
+00:07:29.640 --> 00:07:36.119
+sort of, I mean... The idea with Hyperbole is not to be better
+
+00:07:36.120 --> 00:07:40.119
+than everything else, but more to be like the glue or spider
+
+00:07:40.120 --> 00:07:46.349
+that could integrate different modes in a good way together.
+
+00:07:46.350 --> 00:07:51.359
+So that being top of everything. And Org is a very
+
+00:07:51.360 --> 00:07:55.559
+popular mode, and there are a lot of sub-modes, or whatever
+
+00:07:55.560 --> 00:07:59.519
+you can call it, with Org for information management. And we
+
+00:07:59.520 --> 00:08:03.119
+would want Hyperbole to work together with Org in a good way,
+
+00:08:03.120 --> 00:08:09.119
+so Org users could benefit from Hyperbole as well. So we put
+
+00:08:09.120 --> 00:08:13.319
+in some effort in that. But I think there's a lot of way to go.
+
+00:08:13.320 --> 00:08:17.319
+There's much more that can be done there as well because
+
+00:08:17.320 --> 00:08:21.559
+different modes can easily compete in a bad way in the
+
+00:08:21.560 --> 00:08:26.519
+details. So it's a little bit of a tricky thing, especially
+
+00:08:26.520 --> 00:08:32.839
+like we have this and how probably we have this M-RET
+
+00:08:32.840 --> 00:08:36.319
+for the action production key and that's also used in many
+
+00:08:36.320 --> 00:08:40.639
+modes. So we would really, in the best of words, we would like
+
+00:08:40.640 --> 00:08:46.388
+Emacs to sort of come to some agreement on using of the
+
+00:08:46.389 --> 00:08:52.759
+M-RET in a good way for modes to sort of be able to work and
+
+00:08:52.760 --> 00:08:58.119
+live together. Yeah, I mean it's a tough thing to share the
+
+00:08:58.120 --> 00:09:01.759
+key bindings and the grammar of interaction between
+
+00:09:01.760 --> 00:09:04.719
+packages because you tell me M-RET, I don't want you
+
+00:09:04.720 --> 00:09:07.759
+to touch M-RET. For me it's just inserting a new line
+
+00:09:07.760 --> 00:09:10.639
+and not adding indentation at the start and everyone is
+
+00:09:10.640 --> 00:09:14.639
+going to have their own you know, feelings and thoughts about
+
+00:09:14.640 --> 00:09:17.959
+this, so it's really hard to impose any kind of system on
+
+00:09:17.960 --> 00:09:20.559
+this. But I'm glad to hear that you're looking into
+
+00:09:20.560 --> 00:09:23.239
+interaction with Org Mode because I remember the questions
+
+00:09:23.240 --> 00:09:26.359
+we were having on your first conference when people were
+
+00:09:26.360 --> 00:09:28.959
+asking, oh I'm so glad that you're talking about Hyperbole
+
+00:09:28.960 --> 00:09:31.719
+because the only way I'm interacting with it is when people
+
+00:09:31.720 --> 00:09:35.599
+chat about Org Mode and then whenever we had announcements
+
+00:09:35.600 --> 00:09:39.039
+about Hyperbole, be it on Reddit, be it on Hacker News,
+
+00:09:39.040 --> 00:09:41.999
+people would say, but don't we already have Org Mode? And we
+
+00:09:42.000 --> 00:09:44.879
+won't get into the topic again, because I think you've done a
+
+00:09:44.880 --> 00:09:47.279
+wonderful job of explaining the differences in previous
+
+00:09:47.280 --> 00:09:51.359
+years. And today, the conference, your talk at the
+
+00:09:51.360 --> 00:09:54.199
+conference also made it obvious that it's doing something
+
+00:09:54.200 --> 00:09:58.039
+that Org Mode is not able to do. But ultimately, being able to
+
+00:09:58.040 --> 00:10:00.254
+interface between the two is something great.
+
+NOTE On Ihor as the new maintainer for Org Mode
+
+00:10:00.255 --> 00:10:02.676
+And I kind of wanted to ask you as well the question,
+
+00:10:02.677 --> 00:10:04.719
+because you haven't
+
+00:10:04.720 --> 00:10:10.199
+seen the talk, but yesterday we had the announcement that
+
+00:10:10.200 --> 00:10:13.879
+Ihor Radchenko was becoming the new maintainer of Org Mode.
+
+00:10:13.880 --> 00:10:18.799
+So obviously, a new maintainer introduces idea of changes
+
+00:10:18.800 --> 00:10:23.719
+of, you know, philosophy and strategy and all this. Is this
+
+00:10:23.720 --> 00:10:28.199
+somehow on your end with Hyperbole inspiring you perhaps to
+
+00:10:28.200 --> 00:10:31.999
+also innovate in a sense to maybe try to change the way some
+
+00:10:32.000 --> 00:10:32.559
+things are done?
+
+00:10:32.560 --> 00:10:45.239
+Hmm, tricky question. I know, right? Yeah, no, well, I don't
+
+00:10:45.240 --> 00:10:46.159
+know.
+
+00:10:46.160 --> 00:10:52.799
+I don't know if it answers the question, but we have this
+
+00:10:52.800 --> 00:11:02.919
+idea that we meet and work from our point of view. And then we
+
+00:11:02.920 --> 00:11:07.679
+pick up maybe details from the outside world. So we're not
+
+00:11:07.680 --> 00:11:13.079
+heavily looking into what happens in the rest of the world
+
+00:11:13.080 --> 00:11:17.239
+when it comes to Emacs and personal information
+
+00:11:17.240 --> 00:11:21.159
+management, etc. But but we do pick up some ideas.
+
+00:11:21.160 --> 00:11:26.719
+Sometimes. But yeah, we mostly do hacking and then we want to
+
+00:11:26.720 --> 00:11:31.639
+we meet once a week and work on hyperbole and you know, so
+
+00:11:31.640 --> 00:11:35.599
+Yeah, that's already very cool. And the reason I'm
+
+00:11:35.600 --> 00:11:38.799
+mentioning this is not because I know that you are operating
+
+00:11:38.800 --> 00:11:42.079
+in a little bit of a silo when it comes to all of Hyperbole, but
+
+00:11:42.080 --> 00:11:45.399
+it's always nice for me personally to see a lot of energy
+
+00:11:45.400 --> 00:11:49.039
+being brought in by people. Whenever there's a new major
+
+00:11:49.040 --> 00:11:52.919
+version being published, be it Org Mode or be it Hyperbole,
+
+00:11:52.920 --> 00:11:55.519
+people are excited. There's a lot of energy in here because
+
+00:11:55.520 --> 00:11:58.039
+people are chatting about what you're doing. And that's why
+
+00:11:58.040 --> 00:12:02.399
+I find that people, a new maintenanceship for Org Mode
+
+00:12:02.400 --> 00:12:05.199
+actually benefits Hyperbole in a way because you get a lot of
+
+00:12:05.200 --> 00:12:07.559
+excitement, a lot of people thinking and bringing ideas to
+
+00:12:07.560 --> 00:12:12.279
+the table. And I think it's a prime time to actually try I'm
+
+00:12:12.280 --> 00:12:14.599
+using the word stealing, but in a very nice way, stealing in
+
+00:12:14.600 --> 00:12:17.519
+terms of floss, stealing some ideas and trying to see if you
+
+00:12:17.520 --> 00:12:21.199
+can run with them on your own end. And that's also why I was
+
+00:12:21.200 --> 00:12:24.479
+suggesting transient, because transient looks like it's
+
+00:12:24.480 --> 00:12:28.759
+on its path to reach core at some point. And it would be nice if
+
+00:12:28.760 --> 00:12:31.479
+you had the idea early on to integrate with it, because it
+
+00:12:31.480 --> 00:12:34.319
+might save you time later on and make your user happy,
+
+00:12:34.320 --> 00:12:37.319
+because they can find the same grammar between the Git,
+
+00:12:37.320 --> 00:12:41.639
+between org mode, and between hyperbole. All right. Is
+
+00:12:41.640 --> 00:12:46.439
+there... I don't think... Yeah, go on, please. Yeah, I just
+
+00:12:46.440 --> 00:12:49.879
+want to add on that, that, I mean, as an ultimate goal, in the
+
+00:12:49.880 --> 00:12:56.679
+far distance, we would want sort of Hyperbole or hyperbole
+
+00:12:56.680 --> 00:13:00.399
+type of functionality be part of the core Emacs. So in that
+
+00:13:00.400 --> 00:13:06.839
+sense, it's sort of totally sort of okay with us that
+
+00:13:06.840 --> 00:13:10.599
+different packages steal ideas and try to merge them into
+
+00:13:10.600 --> 00:13:16.359
+sort of the core system. Yeah. All right, I don't see any more
+
+00:13:16.360 --> 00:13:19.279
+questions, so I think we can move to close. Actually, we're
+
+00:13:19.280 --> 00:13:22.439
+actually three minutes over time, so I'm glad we managed to
+
+00:13:22.440 --> 00:13:24.759
+discuss a little more, but that's fine. Mats, do you have
+
+00:13:24.760 --> 00:13:31.519
+any last words? I'll try it out. Okay, well, then, you heard
+
+00:13:31.520 --> 00:13:35.479
+it, everyone. Just try it out. Try it out, and if you like it,
+
+00:13:35.480 --> 00:13:37.239
+you can join us on Sundays
+
+00:13:37.240 --> 00:13:41.959
+Right. And every Sunday, well, if you do not know what to do,
+
+00:13:41.960 --> 00:13:44.919
+you know, here's an idea for you. All right. Thank you so
+
+00:13:44.920 --> 00:13:47.079
+much, Mats, for coming again to Emacs Conf. And we look
+
+00:13:47.080 --> 00:13:50.319
+forward, perhaps, to seeing you next year. Yes. I'll be
+
+00:13:50.320 --> 00:13:55.119
+there. Hopefully, I can see some of the presentations live
+
+00:13:55.120 --> 00:13:58.399
+then. OK. That's OK. You've got the entire year to catch up on
+
+00:13:58.400 --> 00:14:01.159
+the ones you haven't seen this year and next year. But you'll
+
+00:14:01.160 --> 00:14:04.359
+have the time to catch another one live. All right. Yes.
+
+00:14:04.360 --> 00:14:09.519
+Great! For the folks watching, we will be taking a break, a
+
+00:14:09.520 --> 00:14:14.039
+one hour and one minute break. We'll be back at 1 p.m. EST and I
+
+00:14:14.040 --> 00:14:21.479
+think if my UTC conversion is working right, it should be 6
+
+00:14:21.480 --> 00:14:24.679
+p.m. UTC, so at least in one hour. All right, see you in a bit
+
+00:14:24.680 --> 00:14:30.159
+folks! Oh yes, and sorry, I've got a little elf speaking
+
+00:14:30.160 --> 00:14:32.999
+in my ears. In case you're interested in discussing further
+
+00:14:33.000 --> 00:14:35.999
+hyperbole with Mats, Mats is in the room right now and I see
+
+00:14:36.000 --> 00:14:39.919
+people have joined the BBB chat. So if you want to join and
+
+00:14:39.920 --> 00:14:42.439
+chat directly with Mats, I'm sure Mats would be more than
+
+00:14:42.440 --> 00:14:44.999
+happy to answer your questions. And obviously everything
+
+00:14:45.000 --> 00:14:48.239
+has been recorded and will be published later on. But for me,
+
+00:14:48.240 --> 00:14:54.119
+I will use the break to rest a little bit and I'll be back in the
+
+00:14:54.120 --> 00:14:59.039
+afternoon. All right, see you folks. Bye, take a break.
+
+00:14:59.040 --> 00:15:03.160
+Okay.
diff --git a/2024/captions/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--main--chapters.vtt b/2024/captions/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--main--chapters.vtt
new file mode 100644
index 00000000..f63f8b0c
--- /dev/null
+++ b/2024/captions/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--main--chapters.vtt
@@ -0,0 +1,23 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:41.298
+Introduction
+
+00:00:41.299 --> 00:02:22.839
+The action key and the assist key
+
+00:02:22.840 --> 00:03:44.599
+Composing an e-mail
+
+00:03:44.600 --> 00:06:03.410
+Inserting implicit links
+
+00:06:03.411 --> 00:11:19.719
+Window grid
+
+00:11:19.720 --> 00:12:33.817
+Select a thing
+
+00:12:33.818 --> 00:14:09.400
+Web search
diff --git a/2024/captions/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--main.vtt b/2024/captions/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--main.vtt
new file mode 100644
index 00000000..39603c7e
--- /dev/null
+++ b/2024/captions/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--main.vtt
@@ -0,0 +1,459 @@
+WEBVTT captioned by sachac
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:08.239
+Hi, Emacs Conference. I'm Mats Lidell. I'm the maintainer
+
+00:00:08.240 --> 00:00:13.399
+of the GNU Hyperbole, together with the author, Bob
+
+00:00:13.400 --> 00:00:19.759
+Weiner. The title of the talk is Fun Things with GNU
+
+00:00:19.760 --> 00:00:27.959
+Hyperbole. With that, I intend to cover a different set of
+
+00:00:27.960 --> 00:00:33.319
+small things that is in the package. So this will not be a
+
+00:00:33.320 --> 00:00:36.854
+tutorial of Hyperbole.
+
+00:00:36.855 --> 00:00:41.298
+For that, you have to look for other sources.
+
+NOTE The action key and the assist key
+
+00:00:41.299 --> 00:00:45.039
+This is a short talk, so let's get started with
+
+00:00:45.040 --> 00:00:50.879
+the first thing. We're going to talk about scrolling and
+
+00:00:50.880 --> 00:00:56.239
+with the subtitle using the end of line. If you're new to
+
+00:00:56.240 --> 00:00:59.559
+Hyperbole, you need to know about the action key and assist
+
+00:00:59.560 --> 00:01:06.079
+key. The action key is bound to M-RET and the assist key
+
+00:01:06.080 --> 00:01:10.279
+is bound by default to M-RET with the prefix argument.
+
+00:01:10.280 --> 00:01:15.559
+Both of these keys are used for performing actions on
+
+00:01:15.560 --> 00:01:20.319
+different contexts. In this case, we'll look what
+
+00:01:20.320 --> 00:01:27.719
+happens when you use it on the end of a line.
+
+00:01:27.720 --> 00:01:35.439
+I have here the tutorial, the Emacs tutorial, and we see
+
+00:01:35.440 --> 00:01:40.599
+here a line inserting and deleting. I move there and put the
+
+00:01:40.600 --> 00:01:45.439
+cursor on the end of the line. I then hit M-RET, the
+
+00:01:45.440 --> 00:01:53.479
+action key, and it's moved to the top of the window. If I want
+
+00:01:53.480 --> 00:01:58.919
+to move it to the last row on the window I can press C-u and
+
+00:01:58.920 --> 00:02:05.879
+then M-RET, so I use the assist key. If I repeatedly hit
+
+00:02:05.880 --> 00:02:10.399
+M-RET, it will scroll so the first time it moves to the
+
+00:02:10.400 --> 00:02:16.159
+top of the window, but if I at the top of the window hit
+
+00:02:16.160 --> 00:02:22.839
+M-RET again it scrolls.
+
+NOTE Composing an e-mail
+
+00:02:22.840 --> 00:02:27.799
+Now over to the next thing.
+
+00:02:27.800 --> 00:02:34.559
+So next thing is to compose an email from an address
+
+00:02:34.560 --> 00:02:42.599
+of the style of username@domain. Let's look into
+
+00:02:42.600 --> 00:02:48.359
+that. Here I have entered the file in the Emacs
+
+00:02:48.360 --> 00:02:54.239
+distribution vc.el. At its top it has a lot of
+
+00:02:54.240 --> 00:03:01.359
+different email addresses from the contributors. This is, in
+
+00:03:01.360 --> 00:03:09.199
+principle, a normal text file. By placing the cursor over
+
+00:03:09.200 --> 00:03:13.519
+one of these addresses and hitting the action key, Hyperbole
+
+00:03:13.520 --> 00:03:17.839
+identifies that it's an email address and tries to open or
+
+00:03:17.840 --> 00:03:28.519
+opens the email composer with that, using that email address.
+
+00:03:28.520 --> 00:03:33.719
+If we'll go to the scratch buffer... Prepared another name
+
+00:03:33.720 --> 00:03:38.119
+there so just to demonstrate it works in a buffer the same
+
+00:03:38.120 --> 00:03:44.599
+way.
+
+NOTE Inserting implicit links
+
+00:03:44.600 --> 00:03:51.079
+The next fun thing is insert implicit link. I'm going to give
+
+00:03:51.080 --> 00:03:56.279
+you an example with email how to share an implicit link with
+
+00:03:56.280 --> 00:04:02.359
+someone. An implicit link is a text pattern, just as we saw
+
+00:04:02.360 --> 00:04:05.159
+with the email address, something that Hyperbole
+
+00:04:05.160 --> 00:04:13.319
+recognizes just by how the text looks. Here we have the
+
+00:04:13.320 --> 00:04:15.981
+example. We have started writing an email to
+
+00:04:15.982 --> 00:04:20.662
+the user@domain, and in the other window below,
+
+00:04:20.663 --> 00:04:27.423
+the vc.el file is open. It's now opened within the search path,
+
+00:04:27.424 --> 00:04:34.279
+the load path. That's why it's compressed. I want to tell
+
+00:04:34.280 --> 00:04:40.719
+my friend about the credit section. First, the cursor is
+
+00:04:40.720 --> 00:04:44.559
+placed here at your credit section. I move over to the other
+
+00:04:44.560 --> 00:04:48.879
+window and I use the Hyperbole menu system. By hitting
+
+00:04:48.880 --> 00:04:55.261
+C-h h, I go into the menu system. I press i for getting an
+
+00:04:55.262 --> 00:05:05.119
+i-button, implicit button, and I press l for creating a link.
+
+00:05:05.120 --> 00:05:12.159
+And there you have the link. What does the link mean? Well, it
+
+00:05:12.160 --> 00:05:15.519
+means that in the load for Hyperbole, Emacs lib files are
+
+00:05:15.520 --> 00:05:20.719
+special. If they are in the load path, they will use this short
+
+00:05:20.720 --> 00:05:26.279
+format. At the end, you have the L for the line number 24 and
+
+00:05:26.280 --> 00:05:31.439
+the C for the column. If I hit the action key on this line, you
+
+00:05:31.440 --> 00:05:35.559
+can see that the cursor moves over to the credit section. we
+
+00:05:35.560 --> 00:05:44.919
+can remove that file just to make sure that it works and move
+
+00:05:44.920 --> 00:05:50.639
+the cursor a little bit and hit M-RET again.
+
+00:05:50.640 --> 00:05:55.599
+M-RET and we moved over there. I mean, given that
+
+00:05:55.600 --> 00:06:00.039
+the receiver has a similar setup with Emacs, et cetera, that
+
+00:06:00.040 --> 00:06:03.410
+link will work there as well.
+
+NOTE Window grid
+
+00:06:03.411 --> 00:06:05.879
+Hi, Emacs Conference. It's a
+
+00:06:05.880 --> 00:06:09.639
+new recording day, the sun is shining, I'm wearing a new
+
+00:06:09.640 --> 00:06:14.359
+t-shirt but we're still cracking on with fun things in
+
+00:06:14.360 --> 00:06:21.239
+Hyperbole. Our next subject is window grid. With
+
+00:06:21.240 --> 00:06:25.039
+Hyperbole, it's easy to create a grid of windows. I'm going to
+
+00:06:25.040 --> 00:06:29.319
+show how you can do that and also moving on I'm going to show
+
+00:06:29.320 --> 00:06:34.239
+how you can use Dired or IBuffer to select what buffers to
+
+00:06:34.240 --> 00:06:39.959
+show in the grid. I will also show how you can save
+
+00:06:39.960 --> 00:06:46.079
+configuration for use later.
+
+00:06:46.080 --> 00:06:50.039
+You reach the window grid functionality through the
+
+00:06:50.040 --> 00:06:56.839
+hyperbole menu system. C-h h screen. There you have
+
+00:06:56.840 --> 00:07:01.279
+two submenus, frame control and window control. The grid
+
+00:07:01.280 --> 00:07:05.039
+functionality is part of both of these submenus. You can
+
+00:07:05.040 --> 00:07:09.359
+select either, but I'll go with window control here.
+
+00:07:09.360 --> 00:07:15.239
+Down to the left, we see the @ character and the grid of
+
+00:07:15.240 --> 00:07:21.799
+windows, so hit @. I'm prompted with the number of
+
+00:07:21.800 --> 00:07:25.803
+columns and rows for the window grid.
+
+00:07:25.804 --> 00:07:34.359
+I select the 3x3 grid.
+
+00:07:34.360 --> 00:07:41.919
+We get the 3x3 grid, and it's populated with buffers I have
+
+00:07:41.920 --> 00:07:46.639
+loaded in Emacs.
+
+00:07:46.640 --> 00:07:52.319
+Let's go back here to the scratch buffer.
+
+00:07:52.320 --> 00:07:56.399
+Now, using all those keystrokes for the menu system is a
+
+00:07:56.400 --> 00:08:01.599
+little bit cumbersome, so there is a shortcut: C-c @.
+
+00:08:01.600 --> 00:08:08.519
+If I use that, C-c @, I get immediately prompted the
+
+00:08:08.520 --> 00:08:16.538
+number of rows and columns. If i use a prefix arg 0,
+
+00:08:16.539 --> 00:08:23.359
+C-u 0 C-c @, I get also prompted with what type of
+
+00:08:23.360 --> 00:08:28.719
+buffers I want to have populated in my grid. Let's select
+
+00:08:28.720 --> 00:08:36.599
+the emacs-lisp-mode. Again we do a 3x3 grid. Here
+
+00:08:36.600 --> 00:08:44.959
+you see all the grids. The whole grid is populated with Emacs
+
+00:08:44.960 --> 00:08:45.919
+Lisp buffers.
+
+00:08:45.920 --> 00:08:57.679
+To get even finer control, you can go into IBuffer. I have
+
+00:08:57.680 --> 00:09:04.279
+pre-selected here all the Emacs Lisp files I have. Let's
+
+00:09:04.280 --> 00:09:10.279
+pick a few. I mark them like this. Let's pick three or maybe
+
+00:09:10.280 --> 00:09:16.879
+pick four. Then I hit the @ sign, and then it
+
+00:09:16.880 --> 00:09:22.368
+automatically shows a 2x2 grid
+
+00:09:22.369 --> 00:09:26.279
+with the selected buffers.
+
+00:09:26.280 --> 00:09:35.239
+We can go in again and maybe select a few more and do the same
+
+00:09:35.240 --> 00:09:44.399
+thing: hit add and it now becomes a 3x2 grid with these buffers
+
+00:09:44.400 --> 00:09:50.178
+The same thing is possible through Dired.
+
+00:09:50.179 --> 00:10:00.639
+Let's just mark quite a few here and then hit @, and then it
+
+00:10:00.640 --> 00:10:04.199
+populates it with all the buffers. You see that if it's not
+
+00:10:04.200 --> 00:10:10.679
+enough buffer to fill the whole grid, there are blank grids or
+
+00:10:10.680 --> 00:10:15.039
+rectangles in the grid.
+
+00:10:15.040 --> 00:10:20.519
+Now going back and forth like this, maybe if you want to work
+
+00:10:20.520 --> 00:10:26.759
+on some file and and then go over to Dired again to select this,
+
+00:10:26.760 --> 00:10:31.759
+can be a little bit cumbersome. You maybe have prepared a
+
+00:10:31.760 --> 00:10:34.965
+grid with the buffers you want to have there.
+
+00:10:34.966 --> 00:10:42.559
+Hyperbole comes with a simple window configuration support.
+
+00:10:42.560 --> 00:10:46.119
+You reach that the same way through the Hyperbole menu, so
+
+00:10:46.120 --> 00:10:54.119
+C-h h and window, w for window, and there you can hit save to
+
+00:10:54.120 --> 00:10:58.599
+save the configuration to a ring of configurations.
+
+00:10:58.600 --> 00:11:04.759
+Let's go back to the scratch buffer again here. Now we
+
+00:11:04.760 --> 00:11:09.919
+want to bring up our window configuration again, so we
+
+00:11:09.920 --> 00:11:15.079
+hit C-h h and window, and yank in the configuration. Boom,
+
+00:11:15.080 --> 00:11:19.719
+there is the grid again.
+
+NOTE Select a thing
+
+00:11:19.720 --> 00:11:23.319
+We're reaching the end of the talk. The last fun thing I want to
+
+00:11:23.320 --> 00:11:27.639
+talk about is the Hyperbole support for select a thing.
+
+00:11:27.640 --> 00:11:33.439
+We'll show some use of selections together with web search.
+
+00:11:33.440 --> 00:11:43.599
+Here I have brought up the GNU General Public License for
+
+00:11:43.600 --> 00:11:48.119
+just getting some text that I can show the select a thing
+
+00:11:48.120 --> 00:11:52.919
+functionality. Let's move the cursor over the word
+
+00:11:52.920 --> 00:11:59.399
+versions. Then I hit C-c RET, which is bound for the
+
+00:11:59.400 --> 00:12:03.119
+select a thing functionality.
+
+00:12:03.120 --> 00:12:11.039
+Then it selects the word that the cursor was at. If I hit it
+
+00:12:11.040 --> 00:12:15.199
+again, C-c RET, it selects the line. Again, it
+
+00:12:15.200 --> 00:12:22.359
+selects the sentence, and again, the whole paragraph. So
+
+00:12:22.360 --> 00:12:26.159
+that's a convenient way to extend your searches--your
+
+00:12:26.160 --> 00:12:33.817
+selections, rather--in a buffer.
+
+NOTE Web search
+
+00:12:33.818 --> 00:12:38.198
+Looking at selections, how you can use that from web search...
+
+00:12:38.199 --> 00:12:44.321
+Let's mark some text and then hit C-c /, which is bound
+
+00:12:44.322 --> 00:12:48.542
+for the web search. Here you see the Hyperbole menu system again.
+
+00:12:48.543 --> 00:12:54.959
+It's slightly customized with things that I use, but the basic
+
+00:12:54.960 --> 00:13:00.519
+menus are the ones supported by Hyperbole. Let's look at
+
+00:13:00.520 --> 00:13:07.999
+searching DuckDuckGo. It then populates the prompt with
+
+00:13:08.000 --> 00:13:08.839
+the selection.
+
+00:13:08.840 --> 00:13:17.919
+I have configured it so it uses my Firefox for these
+
+00:13:17.920 --> 00:13:23.319
+searches. Here we have the GNU General Public License
+
+00:13:23.320 --> 00:13:30.599
+shown. I can also show that for like me, being not a native
+
+00:13:30.600 --> 00:13:36.319
+English speaker, let's look what "take away your freedoms"
+
+00:13:36.320 --> 00:13:41.679
+means in Swedish. So C-c /, and then I hit translate.
+
+00:13:41.680 --> 00:13:45.879
+Take away your freedom, yeah, what's the translation for
+
+00:13:45.880 --> 00:13:48.582
+that? Using Google Translate,
+
+00:13:48.583 --> 00:13:50.799
+I get it translated to Swedish.
+
+00:13:50.800 --> 00:14:03.430
+That was the whole talk. We reached the end,
+
+00:14:03.431 --> 00:14:09.400
+and thanks for listening. Bye.
diff --git a/2024/captions/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--answers.vtt b/2024/captions/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--answers.vtt
new file mode 100644
index 00000000..7b377fed
--- /dev/null
+++ b/2024/captions/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--answers.vtt
@@ -0,0 +1,630 @@
+WEBVTT captioned by sachac
+
+NOTE New version of hyperdrive.el
+
+00:00:00.000 --> 00:00:02.596
+One thing I wanted to mention was that
+
+00:00:02.597 --> 00:00:08.596
+as with last year, I just released a new version of
+
+00:00:08.597 --> 00:00:13.476
+hyperdrive.el and it depends on the latest release of
+
+00:00:13.477 --> 00:00:19.156
+transient.el and so if you are going to install this
+
+00:00:19.157 --> 00:00:25.156
+package, make sure that you restart your Emacs after you
+
+00:00:25.157 --> 00:00:29.796
+install it, if you aren't already up to date with transient,
+
+00:00:29.797 --> 00:00:35.316
+which was released yesterday. Otherwise, since it, this
+
+00:00:35.317 --> 00:00:40.876
+latest version of transient.el updates the transient
+
+00:00:40.877 --> 00:00:46.316
+prefix EIEIO class, and it won't work unless you restart
+
+00:00:46.317 --> 00:00:50.996
+Emacs. Okay, well, good to know. I think that's a small price
+
+00:00:50.997 --> 00:00:57.076
+to pay to be on a bleedingest of bleeding edges. All right, I
+
+00:00:57.077 --> 00:00:59.596
+see there's a question here. Let me see if I can read it. Yeah,
+
+00:00:59.597 --> 00:01:01.276
+sure. Do you want me to field it to you or do you want to read it?
+
+00:01:01.277 --> 00:01:04.104
+Oh, sure. Go ahead. I'd love to hear you read it. Sure.
+
+00:01:04.105 --> 00:01:06.686
+Thank you. So first question. Hi there.
+
+NOTE Q: Network effects are tricky - do you know of any public shares people can join to try this tool out properly?
+
+00:01:06.687 --> 00:01:07.787
+Thank you for the talk.
+
+00:01:07.788 --> 00:01:10.756
+I enjoyed watching it. I tried this tool last year and it
+
+00:01:10.757 --> 00:01:13.156
+seemed to work well, but I don't know anyone who actually
+
+00:01:13.157 --> 00:01:16.516
+uses it. Network effects are tricky. Do you know of any
+
+00:01:16.517 --> 00:01:19.636
+public shares people can join to try to try this tool out
+
+00:01:19.637 --> 00:01:24.396
+properly? Thank you. Network effects are indeed tricky.
+
+00:01:24.397 --> 00:01:29.916
+Yeah. That's kind of part of the purpose of the peer graph is
+
+00:01:29.917 --> 00:01:34.596
+to make it easier to discover peers in a way that's more, uh,
+
+00:01:34.597 --> 00:01:37.956
+more reliable and consistent than just somebody puts a
+
+00:01:37.957 --> 00:01:42.076
+public key on Reddit and then it's lost unless somebody
+
+00:01:42.077 --> 00:01:50.156
+finds it. Um, but the, the public keys that I know of are,
+
+00:01:50.157 --> 00:01:53.076
+there's the public key for the Ushin hyperdrive, which is
+
+00:01:53.077 --> 00:01:56.236
+basically just the same content that's on the website
+
+00:01:56.237 --> 00:02:00.156
+mirrored to a hyperdrive. Um, and then there are a few other
+
+00:02:00.157 --> 00:02:07.316
+ones. There's like, uh, hypha.coop has some WebZine
+
+00:02:07.317 --> 00:02:13.796
+content accessible via HyperDrive and also via IPFS. And
+
+00:02:13.797 --> 00:02:19.916
+then mauvesignweaver has a blog that's also available on
+
+00:02:19.917 --> 00:02:23.196
+Hyper. So that's blog.mauve.moe .
+
+00:02:23.197 --> 00:02:28.276
+But besides that, that's kind of the purpose of this
+
+00:02:28.277 --> 00:02:31.756
+peer graph thing is to make it easier to discover other
+
+00:02:31.757 --> 00:02:36.596
+peers. Yeah, to make it also very visual in a way, because,
+
+00:02:36.597 --> 00:02:40.436
+you know, I personally, it's funny because it reminded me of
+
+00:02:40.437 --> 00:02:45.156
+talks that I did in the past about the trust system for PGP
+
+00:02:45.157 --> 00:02:47.596
+keychains, because at the end of the day, you know, this
+
+00:02:47.597 --> 00:02:50.596
+trust system, whether you trust someone absolutely or
+
+00:02:50.597 --> 00:02:53.876
+relatively, the blocking system, it feels very related.
+
+00:02:53.877 --> 00:02:57.356
+Any kind of a chain of trust like this, feels very
+
+00:02:57.357 --> 00:03:00.436
+reminiscent, obviously, but it felt very nice that for you,
+
+00:03:00.437 --> 00:03:04.676
+you had a dynamic display of this web of trust. Whereas for
+
+00:03:04.677 --> 00:03:08.836
+me, I had to make fancy diagram in ticks, in latex, just to
+
+00:03:08.837 --> 00:03:14.956
+make sure that people understood what was actually going
+
+00:03:14.957 --> 00:03:21.596
+on. Yeah, one thing I want to point out is just the difference
+
+00:03:21.597 --> 00:03:25.556
+in utility for something like the PGP web of trust versus
+
+00:03:25.557 --> 00:03:29.956
+this kind of network of peers is, if I understand right, the
+
+00:03:29.957 --> 00:03:34.716
+main purpose of web of trust is to identify that a certain
+
+00:03:34.717 --> 00:03:42.516
+public key is actually created by the person that they claim
+
+00:03:42.517 --> 00:03:46.036
+to be. So you have a way of identifying that a key actually
+
+00:03:46.037 --> 00:03:49.996
+matches like a government identity. Whereas this kind of
+
+00:03:49.997 --> 00:03:53.356
+network of peers has nothing to do with authenticating a key
+
+00:03:53.357 --> 00:03:57.636
+or associating a key with an identity, like a government
+
+00:03:57.637 --> 00:04:03.396
+identity. The purpose is exclusively just to get more peers
+
+00:04:03.397 --> 00:04:07.276
+to be able to discover more peers who have things that are
+
+00:04:07.277 --> 00:04:07.676
+worth reading.
+
+00:04:07.677 --> 00:04:14.356
+Yeah, it's a different take on a concept, but even though the
+
+00:04:14.357 --> 00:04:18.836
+concept might be the same, I find there's a wealth of things
+
+00:04:18.837 --> 00:04:21.716
+that can be done thanks to this, because as you said, you
+
+00:04:21.717 --> 00:04:25.396
+trust someone to send you a file that is trustworthy. Well,
+
+00:04:25.397 --> 00:04:28.236
+with PGP, it's mostly about communication, but about file
+
+00:04:28.237 --> 00:04:33.356
+sharing, it just opens up completely new avenues. Yeah. Do
+
+00:04:33.357 --> 00:04:40.516
+you have anything else to add? And about that, I think one of
+
+00:04:40.517 --> 00:04:45.476
+the barriers to the PGP web of trust is that it required
+
+00:04:45.477 --> 00:04:48.916
+getting together to have key parties to meet people and
+
+00:04:48.917 --> 00:04:51.596
+verify identities. Whereas with this kind of thing,
+
+00:04:51.597 --> 00:04:54.076
+there's no need to do that because so long as your content is
+
+00:04:54.077 --> 00:04:57.876
+interesting, it doesn't matter that you're not who you
+
+00:04:57.877 --> 00:05:01.076
+claim to be or that you don't even claim to be anybody. Yeah, I
+
+00:05:01.077 --> 00:05:04.556
+mean, again, as you mentioned, it's not about identifying
+
+00:05:04.557 --> 00:05:08.196
+people, it's just about identifying value, in a way, in the
+
+00:05:08.197 --> 00:05:10.636
+content that people share. It has nothing to do with
+
+00:05:10.637 --> 00:05:13.916
+verifying their actual identity. But again, it's the same
+
+00:05:13.917 --> 00:05:16.596
+technology, it's the same understanding, but for
+
+00:05:16.597 --> 00:05:18.556
+different applications, which is lovely because
+
+00:05:18.557 --> 00:05:22.116
+programming is fractals all over. The same problems repeat
+
+00:05:22.117 --> 00:05:24.836
+themselves and the same solutions show up for widely
+
+00:05:24.837 --> 00:05:26.996
+different scenarios, which is always good. Yeah. Anything
+
+00:05:26.997 --> 00:05:32.676
+else? One more thing. Yeah. One more thing is that I wanted to
+
+00:05:32.677 --> 00:05:36.956
+give some kudos to, um, some of the other projects that
+
+00:05:36.957 --> 00:05:42.796
+inspired the pure graph work. One of them is Adam Porter's or
+
+00:05:42.797 --> 00:05:50.076
+graph view, um, which is a, um, a tool for visualizing
+
+00:05:50.077 --> 00:05:55.276
+different nodes in an org file and how they link to one
+
+00:05:55.277 --> 00:06:01.876
+another. Um, he did. the pioneering work to figure out how to
+
+00:06:01.877 --> 00:06:07.316
+render interactive graphs with GraphViz. And so we worked
+
+00:06:07.317 --> 00:06:12.476
+together on it and kind of hacked down the last parts that
+
+00:06:12.477 --> 00:06:16.796
+weren't working correctly. And so this is inspired a lot.
+
+00:06:16.797 --> 00:06:19.316
+The user interface is inspired a lot by Adam's work. And then
+
+00:06:19.317 --> 00:06:26.156
+also the idea of having people that you mark as blockers and
+
+00:06:26.157 --> 00:06:31.076
+block is inspired by another project called TrustNet by
+
+00:06:31.077 --> 00:06:37.196
+Alex Cobleigh. I can type in the link there. Alex, how do you
+
+00:06:37.197 --> 00:06:43.516
+spell it? Cobleigh? Yeah, I'll type it in here. Thank you. And I
+
+00:06:43.517 --> 00:06:50.596
+think the link is https://cblgh.org/trustnet. I think that is it.
+
+00:06:50.597 --> 00:06:57.836
+I'm not totally sure. But yeah. Okay, well, that's very good.
+
+00:06:57.837 --> 00:07:01.396
+and thank you for giving credits to the inspiration, because
+
+00:07:01.397 --> 00:07:05.556
+again, nothing is done without context, and it's always nice
+
+00:07:05.557 --> 00:07:08.516
+in the free software world to acknowledge people who have
+
+00:07:08.517 --> 00:07:11.676
+influenced us, because it's very nice when people start
+
+00:07:11.677 --> 00:07:14.556
+contributing, maintaining software, publishing stuff
+
+00:07:14.557 --> 00:07:17.916
+that they actually start collaborating with people who've
+
+00:07:17.917 --> 00:07:21.916
+inspired them, which is a nice way to climb over the shoulders
+
+00:07:21.917 --> 00:07:25.636
+of giants, which this community likes so much. All right,
+
+00:07:25.637 --> 00:07:28.676
+moving on to the next question. We are, we have about seven
+
+00:07:28.677 --> 00:07:31.063
+more minutes for questions, so we're still good.
+
+NOTE Q: blocklist or whitelist so I can make them containing useful information for only me while also being useful with in a public sense
+
+00:07:31.064 --> 00:07:33.956
+Second question, one use case for this sharing and building upon
+
+00:07:33.957 --> 00:07:37.996
+second brain, sorry, one use case for this is sharing and
+
+00:07:37.997 --> 00:07:41.436
+building upon second brains, i.e. Zettelkasten, that's
+
+00:07:41.437 --> 00:07:44.396
+denote or what I'm actually doing, but a blocker for me
+
+00:07:44.397 --> 00:07:46.916
+wanting to make one public is wanting to use a block list or
+
+00:07:46.917 --> 00:07:51.556
+whitelist so that I can make them... Cautioning?
+
+00:07:51.557 --> 00:07:56.156
+Quarantining? Containing. Yes, definitely containing.
+
+00:07:56.157 --> 00:07:59.756
+Why did I go for quarantine rather than containing? I guess
+
+00:07:59.757 --> 00:08:04.636
+my brain went to a dark place from the 2020s. So I can make
+
+00:08:04.637 --> 00:08:08.996
+containing useful information for only me while also being
+
+00:08:08.997 --> 00:08:16.156
+useful in a public sense. Yes, I think your question is about
+
+00:08:16.157 --> 00:08:22.276
+how to keep some of the content of your Zettelkasten private
+
+00:08:22.277 --> 00:08:29.956
+and only have certain parts of it be public. If your desire is
+
+00:08:29.957 --> 00:08:35.796
+to only share certain files in your Zettelkasten, then you
+
+00:08:35.797 --> 00:08:43.596
+can use the hyperdrive mirror command that we demonstrated
+
+00:08:43.597 --> 00:08:48.596
+in the Emacs 2023 talk. In short,
+
+00:08:48.597 --> 00:08:53.916
+It lets you specify either a regular expression that
+
+00:08:53.917 --> 00:08:58.036
+matches only some of the files that'll get uploaded from a
+
+00:08:58.037 --> 00:09:02.236
+directory of files on your machine. And only the files that
+
+00:09:02.237 --> 00:09:05.716
+match that regex will be put into the hyperdrive and shared
+
+00:09:05.717 --> 00:09:08.796
+with the world. But it doesn't have to be a regex. It could be a
+
+00:09:08.797 --> 00:09:13.276
+lambda. So it could match based on file size or modification
+
+00:09:13.277 --> 00:09:18.996
+time or really whatever you like. So I hope that answers your
+
+00:09:18.997 --> 00:09:23.956
+question. Great. And I personally, as someone who loves
+
+00:09:23.957 --> 00:09:27.876
+tinkering with my Elisp, I particularly like the ability to
+
+00:09:27.877 --> 00:09:31.156
+specify things with a lambda because it just opens up the
+
+00:09:31.157 --> 00:09:34.356
+ceiling of the possibilities with interactions between
+
+00:09:34.357 --> 00:09:37.316
+different parts of software. And, you know, as I have worked
+
+00:09:37.317 --> 00:09:39.956
+significantly in Org Roam, I could definitely see
+
+00:09:39.957 --> 00:09:44.116
+interactions with lambdas here to make sure that we can send
+
+00:09:44.117 --> 00:09:47.156
+and share files based on the filter list that is
+
+00:09:47.157 --> 00:09:51.036
+incrementally added to thanks to those lambdas. So thanks
+
+00:09:51.037 --> 00:09:55.116
+for this. One more thing I want to add about that is that the,
+
+00:09:55.117 --> 00:10:00.116
+that same question of being able to upload only certain
+
+00:10:00.117 --> 00:10:04.316
+files while leaving others to be private was something
+
+00:10:04.317 --> 00:10:07.556
+that was inspired by Karl Voit. I had an email thread with
+
+00:10:07.557 --> 00:10:16.036
+him in which he talked about how he uses his file tags project
+
+00:10:16.037 --> 00:10:21.676
+to organize his files. And he'll put a public tag on the files
+
+00:10:21.677 --> 00:10:26.476
+in his org database that he wants to have be published to his
+
+00:10:26.477 --> 00:10:29.916
+website. And so you could very easily just set a regular
+
+00:10:29.917 --> 00:10:33.636
+expression matches that public tag and then all of the other
+
+00:10:33.637 --> 00:10:39.676
+files would be not shared. Yeah, and, oh, sorry, I was, I
+
+00:10:39.677 --> 00:10:42.716
+misclicked, I was talking to production for a second. First
+
+00:10:42.717 --> 00:10:45.636
+time it happens today, so I think this is a testament to the
+
+00:10:45.637 --> 00:10:47.996
+level of tightness. But yeah, as you were saying, whatever
+
+00:10:47.997 --> 00:10:51.396
+heuristics you want is actually a good thing. I think people
+
+00:10:51.397 --> 00:10:54.636
+are a little antsy because they tend to brain dump into their
+
+00:10:54.637 --> 00:10:59.836
+Org Roam, Zettelkasten, Denote, and they
+
+00:10:59.837 --> 00:11:02.516
+really don't want some of their personal notes being out
+
+00:11:02.517 --> 00:11:05.596
+there. And well, if you are worried about this, I think
+
+00:11:05.597 --> 00:11:09.356
+learning some Elisp and implementing some Lambda function
+
+00:11:09.357 --> 00:11:13.116
+that allows you to filter with intention might be the best
+
+00:11:13.117 --> 00:11:17.636
+solution for you. So I hope we've covered the question as
+
+00:11:17.637 --> 00:11:21.436
+well as we could have. Next question is more about an idea
+
+00:11:21.437 --> 00:11:24.996
+about trying hyperdrive to distribute the Worg. Does that
+
+00:11:24.997 --> 00:11:28.596
+make sense to you? Yeah, I mean, you could distribute
+
+00:11:28.597 --> 00:11:32.636
+whatever you wanted. I think that'd be a great idea. Okay,
+
+00:11:32.637 --> 00:11:36.116
+great. Moving to the next question, and we have about three
+
+00:11:36.117 --> 00:11:38.316
+minutes, so I think we'll cover the last two questions and
+
+00:11:38.317 --> 00:11:41.023
+we'll move on to the next talk after that.
+
+NOTE Q: Could you comment on the "visualization" thing, (org visualization), and your experience with this type of content in buffers and the various possibilities (svg, etc.)?
+
+00:11:41.024 --> 00:11:43.164
+Could you comment on the visualization thing,
+
+00:11:43.165 --> 00:11:44.716
+Org visualization, and your
+
+00:11:44.717 --> 00:11:47.236
+experience with this type of content in buffers and the
+
+00:11:47.237 --> 00:11:52.916
+various possibilities, SVG, et cetera?
+
+00:11:52.917 --> 00:11:59.916
+Sure. So one thing that we worked on was I added a patch that
+
+00:11:59.917 --> 00:12:05.156
+was merged as part of Emacs 30, which fixes the way that image
+
+00:12:05.157 --> 00:12:14.196
+maps scale when images are scaled. So as an Emacs 30, if you
+
+00:12:14.197 --> 00:12:19.276
+zoom in on an image or shrink an image or rotate an image, now
+
+00:12:19.277 --> 00:12:24.276
+the image map, which is the overlay, so it's not actually an
+
+00:12:24.277 --> 00:12:26.716
+overlay, but it's, so to speak, it's an overlay that allows
+
+00:12:26.717 --> 00:12:30.116
+the images to be clickable based on, you know, where the
+
+00:12:30.117 --> 00:12:32.756
+actual visual display is. You can also click on it or hit help
+
+00:12:32.757 --> 00:12:37.356
+echo. And as of Emacs 30, now that scales with the image
+
+00:12:37.357 --> 00:12:37.796
+itself.
+
+00:12:37.797 --> 00:12:45.236
+The code to make that work on previous versions of Emacs, you
+
+00:12:45.237 --> 00:12:51.756
+can see the advice that we added in hyperdrive-sbb-view, that
+
+00:12:51.757 --> 00:12:55.956
+file in hyperdrive.el, if you're curious to see how you
+
+00:12:55.957 --> 00:13:01.196
+could polyfill that code, so to speak, to make it work on
+
+00:13:01.197 --> 00:13:06.076
+previous versions of Emacs before Emacs 30. But it works
+
+00:13:06.077 --> 00:13:11.076
+great. The way that this works is we generate a GraphViz
+
+00:13:11.077 --> 00:13:16.716
+string that will be sent to GraphViz to render an SVG and also
+
+00:13:16.717 --> 00:13:23.676
+render a CMAPX string. We pipe those back into Emacs and then
+
+00:13:23.677 --> 00:13:27.596
+we generate the image map from the CMAPX file and then we put
+
+00:13:27.597 --> 00:13:32.596
+that image map with the SVG, and we render it in a buffer.
+
+00:13:32.597 --> 00:13:37.076
+Works pretty well. You can check out the code to see exactly
+
+00:13:37.077 --> 00:13:41.876
+how it works. OK, great. Well, sadly, I think we are a little
+
+00:13:41.877 --> 00:13:44.996
+short on time to cover the last two questions. So Joseph, if
+
+00:13:44.997 --> 00:13:47.236
+you want to take a little bit of time maybe to answer the
+
+00:13:47.237 --> 00:13:51.196
+questions in the BBB, you can just do this, even though the
+
+00:13:51.197 --> 00:13:54.476
+stream will be moving to the next talk. But I'll use the
+
+00:13:54.477 --> 00:13:57.716
+opportunity to thank you both for the talk and for your
+
+00:13:57.717 --> 00:14:00.316
+answers, because they were very insightful. And thank you
+
+00:14:00.317 --> 00:14:03.636
+so much for taking the time to be with us today. Thank you,
+
+00:14:03.637 --> 00:14:05.876
+Leo. Enjoy the rest of the conference. Any last words in
+
+00:14:05.877 --> 00:14:10.356
+about 15 seconds? Thank you. I'm grateful for your taking
+
+00:14:10.357 --> 00:14:14.076
+all this time to make this conference possible. Well, you
+
+00:14:14.077 --> 00:14:16.916
+know, the conference would be nothing without the speakers
+
+00:14:16.917 --> 00:14:19.676
+coming and chatting, so you are the ones to thank. I mean, we
+
+00:14:19.677 --> 00:14:21.796
+like the thanking, obviously, but it's mostly you doing the
+
+00:14:21.797 --> 00:14:26.156
+work. All right. Thank you, Joseph. We'll see you later.
+
+00:14:26.157 --> 00:14:26.796
+Bye-bye.
diff --git a/2024/captions/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--main.vtt b/2024/captions/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--main.vtt
new file mode 100644
index 00000000..9a180103
--- /dev/null
+++ b/2024/captions/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--main.vtt
@@ -0,0 +1,841 @@
+WEBVTT captioned by sachac
+
+00:00:00.000 --> 00:00:03.919
+Hello, welcome to this talk on hyperdrive.el. I'm Joseph
+
+00:00:03.920 --> 00:00:07.439
+Turner presenting on behalf of ushin, a tiny independent
+
+00:00:07.440 --> 00:00:12.039
+information freedom nonprofit. hyperdrive.el is an Emacs
+
+00:00:12.040 --> 00:00:14.959
+interface to the hyperdrive peer-to-peer file sharing
+
+00:00:14.960 --> 00:00:18.399
+system built by Holepunch. Like other peer-to-peer file
+
+00:00:18.400 --> 00:00:22.119
+sharing tools, such as BitTorrent, hyperdrive lets you
+
+00:00:22.120 --> 00:00:25.959
+share unlimited files directly with other users without
+
+00:00:25.960 --> 00:00:29.519
+having to go through a central hub. One thing that sets
+
+00:00:29.520 --> 00:00:32.519
+Hyperdrive apart is that the files you share can be
+
+00:00:32.520 --> 00:00:35.759
+modified. Since hyperdrive has built-in versioning,
+
+00:00:35.760 --> 00:00:38.519
+you can explore the history of changes that you make to your
+
+00:00:38.520 --> 00:00:42.199
+files or others make to theirs. You can stream video and
+
+00:00:42.200 --> 00:00:45.639
+audio. There's no sign-up or account creation process
+
+00:00:45.640 --> 00:00:49.319
+required. It's all free software. This means that the
+
+00:00:49.320 --> 00:00:52.319
+community has the legal right, the tools, and the
+
+00:00:52.320 --> 00:00:55.359
+information necessary to participate in the development
+
+00:00:55.360 --> 00:00:58.337
+process, or even fork the project
+
+00:00:58.338 --> 00:01:00.799
+and go cimarron. Since
+
+00:01:00.800 --> 00:01:04.919
+last year's talk, we've added a few new features. It's now
+
+00:01:04.920 --> 00:01:08.559
+much easier to get started using hyperdrive.el, since we
+
+00:01:08.560 --> 00:01:12.399
+added the hyperdrive-install command, which downloads the
+
+00:01:12.400 --> 00:01:16.399
+gateway program and installs it on your machine. We added a
+
+00:01:16.400 --> 00:01:19.959
+peer graph feature, which lets you visualize your network
+
+00:01:19.960 --> 00:01:24.719
+of sources of information. We also published a new package,
+
+00:01:24.720 --> 00:01:29.079
+hyperdrive-org-transclusion, which lets you display live
+
+00:01:29.080 --> 00:01:34.599
+updating snippets of hyperdrive files in Org documents.
+
+00:01:34.600 --> 00:01:37.319
+Let's get started. Let's say you get an email from your
+
+00:01:37.320 --> 00:01:41.079
+friend Alice inviting you to check out hyperdrive.el.
+
+00:01:41.080 --> 00:01:45.519
+Let's click on the link here to look at the manual. Let's go
+
+00:01:45.520 --> 00:01:50.239
+down to the installation section. It says you need to have
+
+00:01:50.240 --> 00:01:54.639
+GNU Emacs version 28.1 or later. I'll assume you have it
+
+00:01:54.640 --> 00:01:57.479
+installed, but if not, you can click this link.
+
+00:01:57.480 --> 00:01:59.399
+You need to have curl installed,
+
+00:01:59.400 --> 00:02:01.919
+which is likely already the case, but if not,
+
+00:02:01.920 --> 00:02:04.719
+hyperdrive.el will let you know.
+
+00:02:04.720 --> 00:02:10.879
+Now from within Emacs you can install hyperdrive.el.
+
+00:02:10.880 --> 00:02:14.399
+Run M-x package-refresh-contents.
+
+00:02:14.400 --> 00:02:20.919
+Then, M-x package-install, type in hyperdrive,
+
+00:02:20.920 --> 00:02:26.079
+and hit return. Next, we'll install hyper-gateway-ushin.
+
+00:02:26.080 --> 00:02:32.999
+Let's run M-x hyperdrive-install. It's prompting me to
+
+00:02:33.000 --> 00:02:35.880
+download and install the gateway, which is 51 megabytes.
+
+00:02:35.881 --> 00:02:39.780
+I'll press y.
+
+00:02:39.781 --> 00:02:44.159
+I will skip most of the download process. The download is
+
+00:02:44.160 --> 00:02:49.439
+wrapping up.
+
+00:02:49.440 --> 00:02:53.399
+Now, it's prompting me to start the gateway. I can either run
+
+00:02:53.400 --> 00:02:59.279
+M-x hyperdrive-start, or I can press this button. And
+
+00:02:59.280 --> 00:03:03.479
+after a few moments, we'll see that the gateway will start.
+
+00:03:03.480 --> 00:03:07.279
+It's ready. You can also click this button, "View hyperdrive
+
+00:03:07.280 --> 00:03:10.239
+User Info Manual", to view the same manual that we were
+
+00:03:10.240 --> 00:03:13.479
+viewing in the browser. The info manual comes with
+
+00:03:13.480 --> 00:03:17.319
+hyperdrive.el and is available offline. Now that
+
+00:03:17.320 --> 00:03:20.559
+everything's installed and the gateway is running, we're
+
+00:03:20.560 --> 00:03:23.399
+back at Alice's email. Let's click on the link to her
+
+00:03:23.400 --> 00:03:28.719
+hyperdrive. Here's Alice's hyperdrive. Let's open her
+
+00:03:28.720 --> 00:03:33.079
+hello.org file.
+
+00:03:33.080 --> 00:03:37.319
+I'm being prompted to mark Alice's hyperdrive. Currently,
+
+00:03:37.320 --> 00:03:41.879
+it's unknown. I'll press ? to see more details.
+
+00:03:41.880 --> 00:03:48.279
+"safe", "unsafe", "unknown". I'll press e for "explain". In the info
+
+00:03:48.280 --> 00:03:54.139
+manual, it says that if a hyperdrive is marked as safe, that
+
+00:03:54.140 --> 00:03:57.799
+means files in that hyperdrive will automatically have
+
+00:03:57.800 --> 00:04:02.559
+their major mode enabled based on their file extension. In
+
+00:04:02.560 --> 00:04:06.719
+this case, if I mark Alice's hyperdrive as safe and I click on
+
+00:04:06.720 --> 00:04:10.519
+this hello.org file, Emacs will automatically enable Org
+
+00:04:10.520 --> 00:04:14.919
+mode in that file. Since I know Alice directly, I'll mark her
+
+00:04:14.920 --> 00:04:19.639
+hyperdrive as safe. I'll click on the file hello.org again,
+
+00:04:19.640 --> 00:04:25.679
+and now I'll press Shift-s for safe.
+
+00:04:25.680 --> 00:04:30.639
+Now I'm going to set Alice's petname. hyperdrive.el has
+
+00:04:30.640 --> 00:04:34.679
+different ways to name a hyperdrive. The public key is the
+
+00:04:34.680 --> 00:04:38.719
+drive's unique identifier. You can also assign yourself a
+
+00:04:38.720 --> 00:04:42.359
+public nickname, which you announce to the world. Then
+
+00:04:42.360 --> 00:04:45.959
+users on their own machines can assign each hyperdrive that
+
+00:04:45.960 --> 00:04:50.439
+they are aware of a private petname. I'll assign Alice a
+
+00:04:50.440 --> 00:04:54.079
+petname, which is the way that I will identify Alice just on
+
+00:04:54.080 --> 00:05:01.906
+my own machine. I'll type in "My Friend Alice".
+
+00:05:01.907 --> 00:05:03.707
+Then when I refresh her drive,
+
+00:05:03.708 --> 00:05:07.359
+we see that it says petname in the top left.
+
+00:05:07.360 --> 00:05:09.392
+Now I'll do what she asks,
+
+00:05:09.393 --> 00:05:11.613
+which is to right click on her name and
+
+00:05:11.614 --> 00:05:15.259
+open her peer graph. In the context menu, I see a few
+
+00:05:15.260 --> 00:05:19.159
+different actions I can take, but I'll click on "Peer Graph".
+
+00:05:19.160 --> 00:05:22.959
+It's prompting me to pick the max hops for sources. Default 3.
+
+00:05:22.960 --> 00:05:26.799
+I'll choose the default. Same for blockers. I'll explain
+
+00:05:26.800 --> 00:05:27.599
+what that means later.
+
+00:05:30.380 --> 00:05:35.959
+This is Alice's peer graph. Here we can see that Alice has two
+
+00:05:35.960 --> 00:05:41.279
+direct sources, Bob and Eve. Both Bob and Eve have assigned
+
+00:05:41.280 --> 00:05:45.919
+themselves nicknames, and so we see Bob and Eve here. Eve has
+
+00:05:45.920 --> 00:05:50.479
+assigned this other hyperdrive to be a source. But this
+
+00:05:50.480 --> 00:05:55.959
+other hyperdrive, whose public key is "kb3zr6mq"
+
+00:05:55.960 --> 00:05:59.519
+and so on--if we hover over the hyperdrive, we'll see the full
+
+00:05:59.520 --> 00:06:03.239
+public key--has not assigned itself a nickname. So we
+
+00:06:03.240 --> 00:06:07.999
+just see the truncated short public key. Because we've
+
+00:06:08.000 --> 00:06:10.917
+assigned a petname for Alice,
+
+00:06:10.918 --> 00:06:14.558
+we see Alice's petname show up here.
+
+00:06:14.559 --> 00:06:17.839
+Now I'll open the peer list view to show the same
+
+00:06:17.840 --> 00:06:21.479
+information in a different way. Since I'm using a large
+
+00:06:21.480 --> 00:06:25.199
+font, I'll widen this window so we can see everything going
+
+00:06:25.200 --> 00:06:29.319
+on in the peer list. We see that the root hyperdrive is
+
+00:06:29.320 --> 00:06:33.639
+petname "My Friend Alice", nickname "alice", public key "dm1",
+
+00:06:33.640 --> 00:06:38.359
+and so on. We've set the sources max hops to three, which means
+
+00:06:38.360 --> 00:06:42.359
+that we will go out at most three hops from Alice in order to
+
+00:06:42.360 --> 00:06:49.839
+find sources. One hop from Alice are Bob and Eve. One hop
+
+00:06:49.840 --> 00:06:55.839
+from Eve is "kb3", which is two hops from Alice. Now we've set
+
+00:06:55.840 --> 00:06:59.159
+the max hops for sources to three, but in this case, the
+
+00:06:59.160 --> 00:07:04.279
+network is small, and "kb3" has no sources. So we can only go
+
+00:07:04.280 --> 00:07:07.959
+out two hops from Alice until we run out of sources. In the
+
+00:07:07.960 --> 00:07:11.159
+future, we plan to add a search feature based on this list of
+
+00:07:11.160 --> 00:07:14.479
+sources. You type in a query, and you get back a list of
+
+00:07:14.480 --> 00:07:19.879
+results published by Eve, Bob, or "kb3". It's also possible to
+
+00:07:19.880 --> 00:07:23.239
+block peers. I'll open the transient menu by pressing
+
+00:07:23.240 --> 00:07:28.759
+question mark. For now, let's turn on showing blocked
+
+00:07:28.760 --> 00:07:35.439
+peers. I'll press "s x", and now it says blocked sources.
+
+00:07:35.440 --> 00:07:38.839
+Now we can see Mallory also shows up. Mallory has been
+
+00:07:38.840 --> 00:07:43.399
+included as a source by Eve, but is blocked. So in the end
+
+00:07:43.400 --> 00:07:47.039
+result, she does not show up in the list of sources. Instead,
+
+00:07:47.040 --> 00:07:51.839
+she shows up as a blocked source. But how is it that Mallory
+
+00:07:51.840 --> 00:07:55.039
+ended up being blocked? Let's open up the transient menu
+
+00:07:55.040 --> 00:08:02.759
+once more and click "s b" to show blockers. Now we can see that
+
+00:08:02.760 --> 00:08:07.079
+Bob has blocked Mallory. This means that Bob is not
+
+00:08:07.080 --> 00:08:12.519
+interested in seeing search results from Mallory. Since
+
+00:08:12.520 --> 00:08:17.639
+Alice has included Bob as a blocker, that means that Alice
+
+00:08:17.640 --> 00:08:23.439
+trusts Bob to block people on her behalf. So since Bob has
+
+00:08:23.440 --> 00:08:27.479
+blocked Mallory, Mallory does not show up in Alice's
+
+00:08:27.480 --> 00:08:31.919
+peergraph as a source. Well, now I'm curious to see what it is
+
+00:08:31.920 --> 00:08:35.919
+Mallory published that drove Bob to block her. I'll
+
+00:08:35.920 --> 00:08:39.439
+right-click on Mallory, and in the context menu, "Open Hyperdrive"
+
+00:08:39.440 --> 00:08:44.319
+and... Wingsuit Flying Grand Canyon Point of View Not Clickbait?
+
+00:08:44.320 --> 00:08:49.879
+I gotta check this out! [playing: Rick Astley's "Never Gonna Give You Up"]
+
+00:08:49.880 --> 00:08:56.159
+No! Disgusting! No wonder Bob blocked Mallory. Let's go
+
+00:08:56.160 --> 00:09:01.839
+back to Alice's peer graph. Mallory is a blocked source.
+
+00:09:01.840 --> 00:09:05.599
+Are there any peers who are blocked but who aren't sources?
+
+00:09:05.600 --> 00:09:11.739
+I'll open the transient menu and I'll press "s x". Now we're
+
+00:09:11.740 --> 00:09:16.839
+looking at blocked non-sources. Darth, who's been blocked
+
+00:09:16.840 --> 00:09:20.759
+by Bob, has not been added by any of Alice's sources as a
+
+00:09:20.760 --> 00:09:25.559
+source. So Darth is a blocked non-source. I'll open the
+
+00:09:25.560 --> 00:09:29.699
+transient menu again and I'll press "s x". Now we're
+
+00:09:29.700 --> 00:09:34.639
+looking at all blocked peers. Both Mallory and Darth show
+
+00:09:34.640 --> 00:09:37.959
+up. If I scroll down in the peer list, we'll see that Mallory
+
+00:09:37.960 --> 00:09:42.519
+is listed under blocked sources, and Darth is listed under
+
+00:09:42.520 --> 00:09:45.559
+blocked non-sources. This view has gotten a little bit busy.
+
+00:09:45.560 --> 00:09:49.319
+Let's say that we're only interested in how Alice
+
+00:09:49.320 --> 00:09:54.519
+relates to Mallory. I'll open the transient menu, and I
+
+00:09:54.520 --> 00:09:58.519
+will filter the graph to show paths only to Mallory. I'll
+
+00:09:58.520 --> 00:10:05.519
+press "o a", type in Mallory, and hit enter. Now we see that
+
+00:10:05.520 --> 00:10:11.479
+Mallory has a bold border and "kb3" and Darth are missing from
+
+00:10:11.480 --> 00:10:16.679
+the graph. Eve shows up because there's a path from Alice to
+
+00:10:16.680 --> 00:10:22.479
+Mallory that goes through Eve. Same for Bob. We can also add
+
+00:10:22.480 --> 00:10:28.599
+more than one peer in this view. I'll press "o a" again, and
+
+00:10:28.600 --> 00:10:34.719
+this time I'll choose Darth. Now Darth and Mallory have bold
+
+00:10:34.720 --> 00:10:38.839
+borders, and "kb3" is still missing. We can remove Mallory and
+
+00:10:38.840 --> 00:10:42.799
+Darth one at a time with "o r", or we can press C-u, the
+
+00:10:42.800 --> 00:10:47.679
+universal prefix argument, and then "o r" to remove both
+
+00:10:47.680 --> 00:10:51.239
+Mallory and Darth from the list. Now we're back to seeing
+
+00:10:51.240 --> 00:10:55.679
+everybody. This view of the graph is somewhat simplified
+
+00:10:55.680 --> 00:10:57.537
+because we're showing only
+
+00:10:57.538 --> 00:11:00.238
+the shortest paths between peers.
+
+00:11:00.239 --> 00:11:06.039
+If I press Shift-s now we're looking at all paths.
+
+00:11:06.040 --> 00:11:10.039
+Here, we can see that in addition to going from Alice to
+
+00:11:10.040 --> 00:11:15.519
+Bob as a source directly, we also go from Alice to Bob through
+
+00:11:15.520 --> 00:11:21.079
+Eve as a source. Let's go back to showing only the shortest
+
+00:11:21.080 --> 00:11:27.719
+paths. Currently, the max hops for sources and for blockers
+
+00:11:27.720 --> 00:11:31.679
+is set to 3. Let's see what happens if we set the
+
+00:11:31.680 --> 00:11:33.519
+blockers max hops to 0.
+
+00:11:35.800 --> 00:11:39.479
+After the graph reloads, we now see that Mallory
+
+00:11:39.480 --> 00:11:43.286
+shows up as a source, not as a blocked source.
+
+00:11:43.287 --> 00:11:44.759
+This is because Bob,
+
+00:11:44.760 --> 00:11:49.199
+who is one hop away from Alice, is no longer included as a
+
+00:11:49.200 --> 00:11:52.479
+blocker, because we've set the blockers max hops to 0. And
+
+00:11:52.480 --> 00:11:57.519
+since Bob is not a blocker, the fact that Bob blocks Mallory
+
+00:11:57.520 --> 00:12:01.719
+doesn't factor in. While Alice is the only one who gets to
+
+00:12:01.720 --> 00:12:05.959
+decide who her direct sources, blockers, and blocked peers
+
+00:12:05.960 --> 00:12:10.239
+are, anyone can view Alice's peer graph, tinker with the
+
+00:12:10.240 --> 00:12:14.439
+sources or blockers max hops, and use her list of sources to
+
+00:12:14.440 --> 00:12:19.239
+do a search. Let's see what happens if we set sources max
+
+00:12:19.240 --> 00:12:24.719
+hops to 2. Well, the graph doesn't change, because we only
+
+00:12:24.720 --> 00:12:29.239
+ever went out 2 hops anyway. Let's set source's max hops to 1.
+
+00:12:30.140 --> 00:12:35.159
+Now we only see Bob and Eve, since "kb3" and Mallory are
+
+00:12:35.160 --> 00:12:43.079
+2 hops out. Source hops 0. Now we're left with just Alice.
+
+00:12:44.120 --> 00:12:47.999
+Now I'd like to create a new hyperdrive and add Alice as a
+
+00:12:48.000 --> 00:12:52.731
+source. I'll run M-x hyperdrive-new.
+
+00:12:52.732 --> 00:12:53.812
+Now it's prompting me
+
+00:12:53.813 --> 00:12:57.479
+for a new hyperdrive seed. A seed is a string of characters
+
+00:12:57.480 --> 00:13:01.359
+that's combined with your secret key, which is generated
+
+00:13:01.360 --> 00:13:04.719
+for you by the gateway program, in order to create a new
+
+00:13:04.720 --> 00:13:10.679
+public key for each new hyperdrive. I'll type in "Joseph".
+
+00:13:10.680 --> 00:13:15.319
+A new drive. Now, I'll right-click on my own name, and in the
+
+00:13:15.320 --> 00:13:21.599
+context menu, I'll choose "Set Relation From". From Joseph...
+
+00:13:21.600 --> 00:13:32.279
+to Alice...as a source. Now, I'll right-click on my name again,
+
+00:13:32.280 --> 00:13:40.919
+and click on "Peer Graph". Sources max hops, let's say three
+
+00:13:40.920 --> 00:13:41.879
+and [three] for blockers as well,
+
+00:13:45.440 --> 00:13:49.399
+Here's the peer graph from my newly created
+
+00:13:49.400 --> 00:13:54.199
+hyperdrive's perspective. Mallory is included as a
+
+00:13:54.200 --> 00:13:58.519
+source, three hops from the root. Let's open the list view.
+
+00:14:01.220 --> 00:14:06.439
+If we were to mark Alice as a blocker by clicking on this
+
+00:14:06.440 --> 00:14:10.319
+button in the blocker column next to the petname for Alice,
+
+00:14:12.120 --> 00:14:16.959
+Then we see that Mallory shows up as a blocked source. Only
+
+00:14:16.960 --> 00:14:21.359
+now that Joseph includes Alice as a blocker does the fact
+
+00:14:21.360 --> 00:14:26.399
+that Bob blocked Mallory take effect. You can click on
+
+00:14:26.400 --> 00:14:30.539
+another peer to set them as the root hyperdrive. I'll click
+
+00:14:30.540 --> 00:14:34.999
+on Eve. Now we're looking at the peer graph from Eve's
+
+00:14:35.000 --> 00:14:39.519
+perspective. This peer graph view has a history. If I open
+
+00:14:39.520 --> 00:14:42.359
+the transient menu, you'll see here there's a back and a
+
+00:14:42.360 --> 00:14:47.359
+forward button. Back is bound to "l" for "left". If I press "l",
+
+00:14:48.440 --> 00:14:51.839
+we're looking at the graph from Joseph's perspective. If I
+
+00:14:51.840 --> 00:14:56.279
+press "l" again, now we're looking at Alice, as at the
+
+00:14:56.280 --> 00:15:01.439
+beginning. I'll press "r" to go forward, and "r" again, and now
+
+00:15:01.440 --> 00:15:04.734
+we're back at Eve. Now, I'd like to show you
+
+00:15:04.735 --> 00:15:08.337
+the hyperdrive-org-transclusion package we published.
+
+00:15:08.338 --> 00:15:10.358
+I'll open up the hyperdrive manual
+
+00:15:10.359 --> 00:15:14.399
+to see how to install it.
+
+00:15:15.680 --> 00:15:20.999
+Now, from here, I'll press "m" and type in transclusion to jump
+
+00:15:21.000 --> 00:15:23.599
+straight to the "Org-transclusion integration" section of
+
+00:15:23.600 --> 00:15:27.079
+the manual. To summarize, we can install
+
+00:15:27.080 --> 00:15:30.879
+hyperdrive-org-transclusion with
+
+00:15:32.220 --> 00:15:33.919
+M-x package-install RET hyperdrive-org-transclusion.
+
+00:15:37.000 --> 00:15:42.159
+Then, once this is done, we will copy the following snippet
+
+00:15:43.780 --> 00:15:47.559
+and add it either to our init.el file or, in this case, I'll
+
+00:15:47.560 --> 00:15:52.439
+just evaluate it. Now, hyperdrive-org-transclusion-mode is
+
+00:15:52.440 --> 00:15:52.879
+enabled.
+
+00:15:58.100 --> 00:16:01.479
+Let's go back to the hello.org file in Alice's hyperdrive.
+
+00:16:01.480 --> 00:16:07.239
+I'll right-click on Alice, then click "Open Hyperdrive", and
+
+00:16:07.240 --> 00:16:11.359
+hit RET on hello.org. This time, I'm not prompted to mark
+
+00:16:11.360 --> 00:16:16.199
+Alice's hyperdrive as safe, since we did it already. I'll
+
+00:16:16.200 --> 00:16:20.719
+navigate to the "Check out my peers" heading. Then I'll run
+
+00:16:20.720 --> 00:16:28.359
+M-x org-store-link. Now, I'll create a new file in my
+
+00:16:28.360 --> 00:16:32.959
+hyperdrive by running M-x hyperdrive-find-file. I'll
+
+00:16:32.960 --> 00:16:38.488
+select my hyperdrive and I'll call this new file
+
+00:16:38.489 --> 00:16:45.919
+response-to-alice.org.
+
+00:16:45.920 --> 00:16:50.780
+Now, I'll paste in a response that I've written.
+
+00:16:50.781 --> 00:16:57.979
+I'll go to the bottom and I will run M-x org-insert-link
+
+00:16:57.980 --> 00:16:59.423
+and I'll insert the link
+
+00:16:59.424 --> 00:17:02.799
+that I stored earlier. As a link
+
+00:17:02.800 --> 00:17:07.759
+description, I'll change it to
+
+00:17:08.880 --> 00:17:09.879
+"Snippet from Alice's hyperdrive file".
+
+00:17:12.700 --> 00:17:18.399
+I'll save my hyperdrive file.
+
+00:17:18.400 --> 00:17:21.839
+Now, to show that the link works, I'll just kill this buffer
+
+00:17:21.840 --> 00:17:27.099
+showing the hello.org file, and I'll click on the link.
+
+00:17:27.100 --> 00:17:29.487
+Now, in addition to linking from my file
+
+00:17:29.488 --> 00:17:31.488
+to the heading in Alice's file,
+
+00:17:31.489 --> 00:17:35.699
+I'd like to transclude this heading's content in my file.
+
+00:17:35.700 --> 00:17:38.634
+So I'll go to the link in my file and run
+
+00:17:38.635 --> 00:17:45.400
+M-x org-transclusion-make-from-link
+
+00:17:45.401 --> 00:17:47.879
+and I'll save my file again.
+
+00:17:47.880 --> 00:17:50.504
+All that's been added is another link,
+
+00:17:50.505 --> 00:17:54.433
+prefixed with this transclude keyword.
+
+00:17:54.434 --> 00:17:57.034
+To make the transclusion show up inline,
+
+00:17:57.035 --> 00:18:02.359
+I'll run M-x org-transclusion-add. The content
+
+00:18:02.360 --> 00:18:05.359
+of Alice's file hasn't been copied into mine. It's just
+
+00:18:05.360 --> 00:18:12.959
+being transcluded. If I run M-x org-transclusion-remove,
+
+00:18:12.960 --> 00:18:15.439
+you'll see that the underlying content is still
+
+00:18:15.440 --> 00:18:21.639
+just the transclude keyword and the link.
+
+00:18:21.640 --> 00:18:24.319
+Now some time has passed and Alice has updated her
+
+00:18:24.320 --> 00:18:29.879
+hyperdrive file. She wrote, "Please add me as a source." Since
+
+00:18:29.880 --> 00:18:33.559
+the transclude link that I added in my file does not specify a
+
+00:18:33.560 --> 00:18:36.879
+version, it will always transclude the latest version of
+
+00:18:36.880 --> 00:18:42.639
+Alice's hello.org file. If I run M-x org-transclusion-add
+
+00:18:42.640 --> 00:18:46.719
+once more, we'll see that the latest version of Alice's
+
+00:18:46.720 --> 00:18:51.679
+file gets transcluded into mine. Let's say that I want to
+
+00:18:51.680 --> 00:18:54.959
+transclude the previous version of Alice's hello.org
+
+00:18:54.960 --> 00:18:58.879
+file, and I don't want my transclusion to change when Alice
+
+00:18:58.880 --> 00:19:02.919
+updates her file. That's possible too. I'll go over to her
+
+00:19:02.920 --> 00:19:09.759
+file and run M-x hyperdrive-open-previous-version. Now
+
+00:19:09.760 --> 00:19:14.079
+when I widen the window a little, we can see in the mode line
+
+00:19:14.080 --> 00:19:18.279
+that this is version 57. For an explanation of what the
+
+00:19:18.280 --> 00:19:21.599
+version numbers mean, check out the last video or the info
+
+00:19:21.600 --> 00:19:25.759
+manual. For now, I'll go down to her "Check out my peers"
+
+00:19:25.760 --> 00:19:32.999
+heading and run M-x org-store-link. Now, in my response to
+
+00:19:33.000 --> 00:19:39.159
+Alice, I'll insert the link. I'll run org-transclusion-make-from-link.
+
+00:19:39.160 --> 00:19:44.759
+Now there are two transclusions. The first
+
+00:19:44.760 --> 00:19:47.719
+transclusion will update whenever Alice updates her file,
+
+00:19:47.720 --> 00:19:52.919
+and the second transclusion is pinned to version 57.
+
+00:19:52.920 --> 00:19:53.356
+That covers hyperdrive-install, the peer graph, and
+
+00:19:53.357 --> 00:19:58.298
+hyperdrive-org-transclusion.
+
+00:19:58.299 --> 00:20:00.519
+Feel free to check out the hyperdrive.el
+
+00:20:00.520 --> 00:20:04.119
+info manual in the ushin hyperdrive here, or on the
+
+00:20:04.120 --> 00:20:08.439
+ushin.org website. Thanks to the folks at Sopranica, we
+
+00:20:08.440 --> 00:20:11.879
+have a public XMPP group chat you can join, either using an
+
+00:20:11.880 --> 00:20:15.919
+XMPP client or anonymously from your browser. If you use
+
+00:20:15.920 --> 00:20:19.799
+Matrix, there's also a bridge. Thank you for watching, and
+
+00:20:19.800 --> 00:20:22.519
+Thank you to the EmacsConf organizers and all the
+
+00:20:22.520 --> 00:20:25.160
+presenters who made this wonderful event possible.
diff --git a/2024/captions/emacsconf-2024-julia--exploring-shared-philosophies-in-julia-and-emacs--gabriele-bozzola--answers.vtt b/2024/captions/emacsconf-2024-julia--exploring-shared-philosophies-in-julia-and-emacs--gabriele-bozzola--answers.vtt
new file mode 100644
index 00000000..5f0d3fc5
--- /dev/null
+++ b/2024/captions/emacsconf-2024-julia--exploring-shared-philosophies-in-julia-and-emacs--gabriele-bozzola--answers.vtt
@@ -0,0 +1,346 @@
+WEBVTT
+
+NOTE Q: Do you have any suggestions for interactive debugging of Julia code in Emacs?
+
+00:00:00.000 --> 00:00:05.319
+... answer to that. I, I think the infrastructure for an
+
+00:00:05.320 --> 00:00:08.599
+ecosystem in Julia in general is as mature as other
+
+00:00:08.600 --> 00:00:12.559
+languages, and even debugger infiltrator themselves are
+
+00:00:12.560 --> 00:00:17.519
+not particularly well developed. And so I don't think
+
+00:00:17.520 --> 00:00:21.519
+there's much we can do about that right now. I think that it's
+
+00:00:21.520 --> 00:00:25.999
+unfortunate that most of the development for these type of
+
+00:00:26.000 --> 00:00:31.759
+tools is tightly linked to VS code. But even there, I don't
+
+00:00:31.760 --> 00:00:35.719
+think that there's much done in terms of interactive
+
+00:00:35.720 --> 00:00:42.359
+debugging. So I, yeah, I think this has to be worked on mostly
+
+00:00:42.360 --> 00:00:47.519
+on the Julia side first. And then probably Emacs can get
+
+00:00:47.520 --> 00:00:51.239
+something out of that. I know that there's development in
+
+00:00:51.240 --> 00:00:55.559
+debugger.jl itself for future releases to make it at least
+
+00:00:55.560 --> 00:01:01.839
+faster and more stable. But yeah, I think we're not there as
+
+00:01:01.840 --> 00:01:06.879
+Julia community itself. So let alone Emacs, integration
+
+00:01:06.880 --> 00:01:11.239
+with Emacs. The way I personally debug is mostly using,
+
+00:01:11.240 --> 00:01:15.199
+well, debugger and infiltrator with Julia REPL mode in
+
+NOTE Q: Can you call out something that Julia has that Emacs does not, and which could benefit Emacs?
+
+00:01:15.200 --> 00:01:21.679
+Emacs. The second question, can you call out something that
+
+00:01:21.680 --> 00:01:26.839
+Julia has that Emacs does not and which could benefit Emacs?
+
+00:01:26.840 --> 00:01:31.879
+Nothing stands out to me except the usual multi-threading
+
+00:01:31.880 --> 00:01:36.119
+and things like this. I don't necessarily see something
+
+00:01:36.120 --> 00:01:42.479
+that Julia has going on that DMX doesn't have, but I see some
+
+00:01:42.480 --> 00:01:45.839
+differences and approaches that I think are important,
+
+00:01:45.840 --> 00:01:49.759
+like the community. I think Julia is a very active and tight
+
+00:01:49.760 --> 00:01:54.159
+community. Julia uses Slack and is very, very active. I
+
+00:01:54.160 --> 00:01:56.559
+think he might say something like that, but it's maybe more
+
+00:01:56.560 --> 00:02:01.799
+on Reddit, IRC. JuliaCon is big and brings together lots and
+
+00:02:01.800 --> 00:02:05.159
+lots of people. And I think the sense of community is really
+
+00:02:05.160 --> 00:02:10.479
+powerful. It's very easy to essentially meet people that
+
+00:02:10.480 --> 00:02:12.919
+are interested in what we're building and interested in
+
+00:02:12.920 --> 00:02:15.999
+what we're doing and interested in Julian, our, you know,
+
+00:02:16.000 --> 00:02:21.239
+hacker spirit. I think Emacs is a very strong community.
+
+00:02:21.240 --> 00:02:24.279
+We're here on a Saturday talking about Emacs, which again
+
+00:02:24.280 --> 00:02:29.679
+proves that we are doing this. But I'd like to emphasize that
+
+00:02:29.680 --> 00:02:33.639
+the community is a really important aspect in Julia that I
+
+00:02:33.640 --> 00:02:38.159
+think we should double down on our side. The next question is
+
+NOTE Q: Is there a way to use lisp syntax with Julia, like hy for python or lisp flavoured erlang?
+
+00:02:38.160 --> 00:02:46.519
+about Lisp syntax with Julia, like what we can do in Python.
+
+00:02:46.520 --> 00:02:52.359
+I don't think that's, I don't, I am not aware of any package
+
+00:02:52.360 --> 00:02:56.879
+that does that. I would bet that there's something there. I
+
+00:02:56.880 --> 00:03:01.519
+think that that's possible. Indeed, there used to be a Lisp
+
+00:03:01.520 --> 00:03:08.079
+interpreter in Julia itself until the latest release. The
+
+00:03:08.080 --> 00:03:12.039
+syntax parsing was done with a Lisp, it was called TemtoList
+
+00:03:12.040 --> 00:03:18.679
+indeed. I think this got rid, get rid of this for our more
+
+00:03:18.680 --> 00:03:23.039
+Julia-based solution that is faster and with better code
+
+00:03:23.040 --> 00:03:28.599
+provenance. I think that it should be possible to use the
+
+00:03:28.600 --> 00:03:33.319
+metaprogramming features in Julia to change the structure
+
+00:03:33.320 --> 00:03:38.159
+of your syntax to be a Lispy syntax. I do want to emphasize
+
+00:03:38.160 --> 00:03:43.879
+that Julia is heavily inspired by Lisp, so I wouldn't be
+
+00:03:43.880 --> 00:03:49.239
+surprised if if something like this were possible.
+
+00:03:49.240 --> 00:03:51.239
+I have tried Julia Snail.
+
+NOTE Q: Have you tried the Julia Snail package for Emacs? It tries to be like SLY/SLIME for Common Lisp.
+
+00:03:51.240 --> 00:03:54.399
+So the next question is about Julia
+
+00:03:54.400 --> 00:03:58.199
+Snail. I found Julia REPL to be a little bit easier to set up
+
+00:03:58.200 --> 00:04:02.839
+and use. So I just settled on that. I should maybe revisit
+
+00:04:02.840 --> 00:04:05.999
+that. In particular, I use the Julia REPL with the vterm
+
+00:04:06.000 --> 00:04:10.959
+backend, which essentially makes a companion REPL to my
+
+00:04:10.960 --> 00:04:15.439
+scripts. And that works for me. I do think that the tooling
+
+00:04:15.440 --> 00:04:19.239
+uh, could be improved. I think there is definitely much room
+
+00:04:19.240 --> 00:04:26.079
+and I would like to see improvement in that area. Um, and, uh,
+
+NOTE Q: Is there a data inspector for a Julia REPL available that you can use in Emacs?
+
+00:04:26.080 --> 00:04:31.639
+so we have data inspector for Julia REPL.
+
+00:04:31.640 --> 00:04:37.279
+I don't think so. I don't, is there any data inspector
+
+00:04:37.280 --> 00:04:40.439
+in for, for the Julia REPL that we can use in Emacs?
+
+00:04:40.440 --> 00:04:44.839
+I'm not sure. I don't think so.
+
+00:04:44.840 --> 00:04:47.799
+I think the way I look at data is
+
+00:04:47.800 --> 00:04:50.519
+essentially ignoring Emacs when encoded. It's just using the
+
+00:04:50.520 --> 00:04:56.839
+REPL. And again, with Julia REPL. So I'm not aware of any
+
+00:04:56.840 --> 00:05:00.479
+specialized tool And again, maybe this is, again, a good
+
+00:05:00.480 --> 00:05:04.279
+moment to emphasize that tooling, the Julia community
+
+00:05:04.280 --> 00:05:09.079
+clusters around VS Code. And there is tools like the, pretty
+
+00:05:09.080 --> 00:05:14.199
+much all the work with VS Code, unfortunately. And while
+
+00:05:14.200 --> 00:05:17.759
+there's a very, very decent Julia mode and Julia repo mode
+
+00:05:17.760 --> 00:05:21.439
+and Julia snail, there's definitely, definitely room for
+
+00:05:21.440 --> 00:05:24.359
+improvement.
+
+NOTE Q: Have you tried literate programming Julia (using Org babel or some other means) in Emacs?
+
+00:05:24.360 --> 00:05:27.759
+Next, we have a question about literate programming in
+
+00:05:27.760 --> 00:05:32.439
+Julia. I haven't done much of it with Org Babel or
+
+00:05:32.440 --> 00:05:37.079
+anything else. I haven't done much of it. I can say that Julia
+
+00:05:37.080 --> 00:05:40.719
+has developed a new iteration of notebooks called Pluto.
+
+00:05:40.720 --> 00:05:47.119
+Here I'm thinking about Jupyter notebooks. The Pluto
+
+00:05:47.120 --> 00:05:55.359
+notebooks for Julia try to remove a bunch of the pain points
+
+00:05:55.360 --> 00:06:00.439
+that Jupyter notebooks have, meaning you cannot easily
+
+00:06:00.440 --> 00:06:03.639
+commit them to Git or things like this.
+
+00:06:03.640 --> 00:06:09.279
+I haven't used them, but I know some people are very fond of
+
+00:06:09.280 --> 00:06:13.559
+them. And so I think that that's what some of the Julia
+
+00:06:13.560 --> 00:06:16.879
+community would use for notebooks. And I think they can
+
+00:06:16.880 --> 00:06:22.239
+interact with Emacs with no problem. And that would be a form
+
+00:06:22.240 --> 00:06:26.879
+of later programming. But if you can do it in Python, you can
+
+00:06:26.880 --> 00:06:32.119
+do it in Julia. I think there is no reason. And actually, you
+
+00:06:32.120 --> 00:06:35.839
+can take advantage of all this just-in-time or
+
+00:06:35.840 --> 00:06:38.239
+just-out-of-time compilation by keeping the same
+
+00:06:38.240 --> 00:06:45.199
+session. So I think it will be definitely a nice use case. So
+
+00:06:45.200 --> 00:06:49.199
+these are the questions that I see here. I'm going to scroll
+
+00:06:49.200 --> 00:06:52.759
+through the comments and see if there's something that I
+
+00:06:52.760 --> 00:06:57.319
+should say about comments. I'm excited people want to learn
+
+00:06:57.320 --> 00:07:02.519
+Julia. I have to say that if I want to do GPU computing
+
+00:07:02.520 --> 00:07:06.399
+nowadays, I find it much easier to do it with Julia than with
+
+00:07:06.400 --> 00:07:11.759
+CUDA. So I encourage people to look into that. And I do,
+
+00:07:11.760 --> 00:07:19.359
+again, I would like to share what makes me excited about
+
+00:07:19.360 --> 00:07:23.799
+Emacs, about this being open, being collaborative, being
+
+00:07:23.800 --> 00:07:26.399
+respectable with documentation is something that I find in
+
+00:07:26.400 --> 00:07:30.999
+Julia. So I think people that are excited about the same
+
+00:07:31.000 --> 00:07:35.279
+features will find a little bit of joy in working with Julia.
+
+00:07:35.280 --> 00:07:41.999
+I think I addressed what I have here. I don't know if there's
+
+00:07:42.000 --> 00:07:43.559
+anything else that I should add.
+
+00:07:43.560 --> 00:07:52.879
+It took me a minute to unmute there.
+
+00:07:52.880 --> 00:07:57.519
+No, I think that was awesome. And thank you so much.
+
+00:07:57.520 --> 00:08:00.119
+I guess I thought it would
+
+00:08:00.120 --> 00:08:06.279
+collapse that shared area on BBB, my mistake, on the stream,
+
+00:08:06.280 --> 00:08:12.359
+or I would have left it open. But in any case, no, I thought
+
+00:08:12.360 --> 00:08:15.079
+that was great. You did a great job of responding to all the
+
+00:08:15.080 --> 00:08:17.839
+questions and comments. And thank you again so much for your
+
+00:08:17.840 --> 00:08:23.199
+talk and getting us all excited to learn Julia. Thank you.
+
+00:08:23.200 --> 00:08:27.759
+Enjoy EmacsConf. And again, thanks so much for attending,
+
+00:08:27.760 --> 00:08:42.400
+for being EmacsConf. Thank you.
diff --git a/2024/captions/emacsconf-2024-julia--exploring-shared-philosophies-in-julia-and-emacs--gabriele-bozzola--main.vtt b/2024/captions/emacsconf-2024-julia--exploring-shared-philosophies-in-julia-and-emacs--gabriele-bozzola--main.vtt
new file mode 100644
index 00000000..b6e69c85
--- /dev/null
+++ b/2024/captions/emacsconf-2024-julia--exploring-shared-philosophies-in-julia-and-emacs--gabriele-bozzola--main.vtt
@@ -0,0 +1,616 @@
+WEBVTT captioned by gabriele
+
+00:00:00.000 --> 00:00:02.359
+Hello, I'm very excited to tell you
+
+00:00:02.360 --> 00:00:03.679
+about shared philosophies
+
+00:00:03.680 --> 00:00:06.479
+between the Julia programming language and Emacs.
+
+00:00:06.480 --> 00:00:08.679
+While Julia and Emacs might look like
+
+00:00:08.680 --> 00:00:10.279
+different pieces of software,
+
+00:00:10.280 --> 00:00:13.439
+I think there is profound commonalities between the two.
+
+00:00:13.440 --> 00:00:16.359
+Let's start by introducing Julia.
+
+00:00:16.360 --> 00:00:19.719
+Julia is a high-level dynamic programming language.
+
+00:00:19.720 --> 00:00:21.679
+Julia is free and open source software
+
+00:00:21.680 --> 00:00:24.639
+and is used primarily for scientific computing.
+
+00:00:24.640 --> 00:00:27.039
+The reason Julia is used for scientific computing
+
+00:00:27.040 --> 00:00:29.679
+is that while Julia is high level
+
+00:00:29.680 --> 00:00:32.559
+and has a syntax that looks like Python or MATLAB,
+
+00:00:32.560 --> 00:00:34.559
+Julia can be high performance.
+
+00:00:34.560 --> 00:00:36.519
+I use it to develop climate models
+
+00:00:36.520 --> 00:00:38.479
+that run on hundreds of GPUs.
+
+00:00:38.480 --> 00:00:43.399
+Models that are traditionally developed with C, C++, or Fortran.
+
+00:00:43.400 --> 00:00:44.759
+But how is this possible?
+
+00:00:44.760 --> 00:00:46.799
+How can Julia be high performance
+
+00:00:46.800 --> 00:00:48.799
+but also high level at the same time?
+
+00:00:48.800 --> 00:00:50.424
+What makes Julia, Julia?
+
+00:00:50.425 --> 00:00:52.469
+Well, what makes Julia, Julia
+
+00:00:52.470 --> 00:00:54.719
+is the idea of multiple dispatch.
+
+00:00:54.720 --> 00:00:58.999
+Multiple dispatch is the concept where a function call is resolved
+
+00:00:59.000 --> 00:01:02.359
+by looking at the types of every single argument involved.
+
+00:01:02.360 --> 00:01:04.959
+So, let's explore this with this example.
+
+00:01:04.960 --> 00:01:07.719
+Here, I define a function add that takes two objects
+
+00:01:07.720 --> 00:01:09.159
+and sums them together.
+
+00:01:09.160 --> 00:01:11.879
+And I call add with two different types.
+
+00:01:11.880 --> 00:01:14.639
+First with just integers and second with floats.
+
+00:01:14.640 --> 00:01:17.559
+So, let's look at what this produces.
+
+00:01:17.560 --> 00:01:20.439
+Here is the output of add in Julia.
+
+00:01:20.440 --> 00:01:23.279
+So, first we have add, a function with one method.
+
+00:01:23.280 --> 00:01:24.839
+I'm going to explain this in a second.
+
+00:01:24.840 --> 00:01:28.719
+And then we have our return values 12 and 12.0.
+
+00:01:28.720 --> 00:01:30.799
+What we cannot see here is that
+
+00:01:30.800 --> 00:01:33.439
+Julia has specialized code
+
+00:01:33.440 --> 00:01:35.119
+for the two different function calls.
+
+00:01:35.120 --> 00:01:38.359
+For integers and for floating points.
+
+00:01:38.360 --> 00:01:42.239
+Let's make this more explicit by specifically providing
+
+00:01:42.240 --> 00:01:45.079
+a new method for the case with floating point.
+
+00:01:45.080 --> 00:01:47.599
+So here, now I have an add function
+
+00:01:47.600 --> 00:01:50.119
+specifically for floating point. Instead of taking
+
+00:01:50.120 --> 00:01:54.759
+A + B, this returns A exponent B. Let's call this.
+
+00:01:54.760 --> 00:01:56.799
+And what we can see here is that
+
+00:01:56.800 --> 00:01:58.319
+now we have two methods.
+
+00:01:58.320 --> 00:02:00.559
+So, we add a new method to the same function.
+
+00:02:00.560 --> 00:02:01.639
+This is a method that is
+
+00:02:01.640 --> 00:02:03.679
+specifically for floating points.
+
+00:02:03.680 --> 00:02:06.959
+And instead of having the value 12, we have 100.
+
+00:02:06.960 --> 00:02:09.039
+And this is where the trick lies.
+
+00:02:09.040 --> 00:02:13.879
+Julia compiles the most, um, specialized version
+
+00:02:13.880 --> 00:02:16.839
+that can be compiled. So, a version with integers,
+
+00:02:16.840 --> 00:02:19.199
+a version with floats. And in this,
+
+00:02:19.200 --> 00:02:22.679
+compiling is an actual compilation with LLVM
+
+00:02:22.680 --> 00:02:24.479
+with optimization and so on.
+
+00:02:24.480 --> 00:02:27.439
+This is not just ahead of time compilation.
+
+00:02:27.440 --> 00:02:30.719
+Soon as the Julia knows the type,
+
+00:02:30.720 --> 00:02:33.719
+a function is compiled if it's not compiled already
+
+00:02:33.720 --> 00:02:35.079
+and then it's used.
+
+00:02:35.080 --> 00:02:37.159
+When types are stable and well inferred,
+
+00:02:37.160 --> 00:02:40.079
+this can lead to code that is as performant
+
+00:02:40.080 --> 00:02:42.159
+or comparable to C and Fortran.
+
+00:02:42.160 --> 00:02:45.159
+So, this is what makes Julia, Julia.
+
+00:02:45.160 --> 00:02:48.439
+Multiple dispatch with just ahead of time compilation
+
+00:02:48.440 --> 00:02:49.719
+of highly efficient code.
+
+00:02:49.720 --> 00:02:53.439
+So now, what makes Emacs, Emacs?
+
+00:02:53.440 --> 00:02:56.679
+Well, in my opinion, what makes Emacs, Emacs
+
+00:02:56.680 --> 00:03:01.159
+is interactivity, extensibility, and community.
+
+00:03:01.160 --> 00:03:06.199
+And I claim that Julia has the same three.
+
+00:03:06.200 --> 00:03:09.079
+Interactivity, extensibility, and community
+
+00:03:09.080 --> 00:03:11.839
+are three key pillars for Julia.
+
+00:03:11.840 --> 00:03:14.599
+More specifically, Julia encourages a
+
+00:03:14.600 --> 00:03:17.079
+REPL-driven, introspective, interactive workflow.
+
+00:03:17.080 --> 00:03:19.879
+It's largely open to extension and modification
+
+00:03:19.880 --> 00:03:23.559
+to the point that most of Julia is written in Julia.
+
+00:03:23.560 --> 00:03:25.959
+And Julia has a thriving and welcoming community
+
+00:03:25.960 --> 00:03:28.799
+with lots of packages. So, let me showcase
+
+00:03:28.800 --> 00:03:31.079
+a little bit of this REPL-driven, introspective,
+
+00:03:31.080 --> 00:03:34.359
+interactive workflow with the hope that commonalities
+
+00:03:34.360 --> 00:03:36.759
+with Emacs will emerge naturally.
+
+00:03:36.760 --> 00:03:39.919
+So, let's start by opening a Julia REPL.
+
+00:03:39.920 --> 00:03:41.759
+Here, I have a Julia REPL.
+
+00:03:41.760 --> 00:03:44.399
+Let me give you a tour of the Julia REPL.
+
+00:03:44.400 --> 00:03:47.759
+So, the REPL comes with lots of useful features,
+
+00:03:47.760 --> 00:03:51.559
+from a shell to a package manager.
+
+00:03:51.560 --> 00:03:54.999
+So, for example, let's add the random package.
+
+00:03:55.000 --> 00:03:58.279
+Um, yeah, I have the random package.
+
+00:03:58.280 --> 00:03:59.279
+I can look at what's inside.
+
+00:03:59.280 --> 00:04:01.279
+We have the statistics with random
+
+00:04:01.280 --> 00:04:02.479
+in this particular environment.
+
+00:04:02.480 --> 00:04:05.719
+Environments are fully declarative.
+
+00:04:05.720 --> 00:04:08.039
+So here we have the dependencies of this environment.
+
+00:04:08.040 --> 00:04:10.239
+And I can explore in this manifest,
+
+00:04:10.240 --> 00:04:13.999
+the specific versions that are used.
+
+00:04:14.000 --> 00:04:17.719
+So we have a shell, we have a package manager,
+
+00:04:17.720 --> 00:04:20.559
+and then we have a very powerful help system.
+
+00:04:20.560 --> 00:04:24.199
+So, for example, I can ask for help for length.
+
+00:04:24.200 --> 00:04:26.639
+And here we can see we have, well,
+
+00:04:26.640 --> 00:04:30.999
+the help for length. Lots of information about
+
+00:04:31.000 --> 00:04:33.399
+how to call length, the expected return values,
+
+00:04:33.400 --> 00:04:36.119
+examples. And now you can probably start seeing that
+
+00:04:36.120 --> 00:04:37.759
+this is not that different from calling length.
+
+00:04:37.760 --> 00:04:42.119
+So this is the output for length,
+
+00:04:42.120 --> 00:04:44.999
+or for help for length in in Emacs.
+
+00:04:45.000 --> 00:04:47.959
+So we have help, and we can do more.
+
+00:04:47.960 --> 00:04:51.879
+We can even look at the source code for length.
+
+00:04:51.880 --> 00:04:57.079
+So now, what we can see here is that now, well,
+
+00:04:57.080 --> 00:04:58.919
+we cannot see because it's zoomed in
+
+00:04:58.920 --> 00:05:02.799
+because the font size is huge, but in this page here,
+
+00:05:02.800 --> 00:05:04.759
+we can see the implementation of length.
+
+00:05:04.760 --> 00:05:06.719
+It's this line here in the middle,
+
+00:05:06.720 --> 00:05:09.719
+or these few lines here in the middle.
+
+00:05:09.720 --> 00:05:12.079
+And as you... Let's do this again.
+
+00:05:12.080 --> 00:05:12.999
+As we can see here at the bottom,
+
+00:05:13.000 --> 00:05:13.799
+what we are looking at,
+
+00:05:13.800 --> 00:05:15.639
+this is the source code of Julia.
+
+00:05:15.640 --> 00:05:17.039
+We can change this.
+
+00:05:17.040 --> 00:05:20.039
+There's even a macro edit
+
+00:05:20.040 --> 00:05:22.759
+if you want to change its length.
+
+00:05:22.760 --> 00:05:24.599
+And yeah, I use the word macro.
+
+00:05:24.600 --> 00:05:28.639
+Julia supports metaprogramming.
+
+00:05:28.640 --> 00:05:30.359
+And actually metaprogramming is
+
+00:05:30.360 --> 00:05:32.079
+one of the key features in Julia.
+
+00:05:32.080 --> 00:05:33.639
+It's used extensively in the core,
+
+00:05:33.640 --> 00:05:36.399
+but it's also used extensively in packages,
+
+00:05:36.400 --> 00:05:40.079
+both to extend the Julia ecosystem and functionalities,
+
+00:05:40.080 --> 00:05:43.479
+but also to develop full domain specific languages.
+
+00:05:43.480 --> 00:05:47.239
+Some of the useful macros are, well, I don't know,
+
+00:05:47.240 --> 00:05:52.239
+like time. Here, we have a built-in
+
+00:05:52.240 --> 00:05:55.799
+basic performance tool in in in Julia.
+
+00:05:55.800 --> 00:06:00.479
+And I want to showcase more introspection, macros.
+
+00:06:00.480 --> 00:06:02.959
+But for that, I'm going to do it slightly different.
+
+00:06:02.960 --> 00:06:04.039
+I'm going to open a file
+
+00:06:04.040 --> 00:06:06.239
+example.jl where I define a
+
+00:06:06.240 --> 00:06:08.039
+function, or our
+
+00:06:08.040 --> 00:06:09.519
+function add, there was an asterisk
+
+00:06:09.520 --> 00:06:11.199
+and I will go back to that in a second.
+
+00:06:11.200 --> 00:06:15.239
+So now, I am going to include this this file,
+
+00:06:15.240 --> 00:06:18.199
+and I can call my function add, one and two,
+
+00:06:18.200 --> 00:06:22.639
+and we get three. And now, what I can do is this.
+
+00:06:22.640 --> 00:06:28.039
+I can look at what code gets compiled
+
+00:06:28.040 --> 00:06:31.359
+when I call my when I call 1 + 2.
+
+00:06:31.360 --> 00:06:33.359
+And here, now we can see
+
+00:06:33.360 --> 00:06:34.639
+that there is some integer stuff.
+
+00:06:34.640 --> 00:06:38.159
+But if I make this floating point,
+
+00:06:38.160 --> 00:06:40.239
+now the compiled code changes.
+
+00:06:40.240 --> 00:06:43.599
+Now, maybe assembly code
+
+00:06:43.600 --> 00:06:45.079
+is a little bit too hard to read,
+
+00:06:45.080 --> 00:06:48.639
+so I can look at the LLVM IR representation.
+
+00:06:48.640 --> 00:06:50.399
+In this case we can see that there is promotion.
+
+00:06:50.400 --> 00:06:52.239
+The promotion will probably go away
+
+00:06:52.240 --> 00:06:56.039
+if I make everything float. So this we have F add,
+
+00:06:56.040 --> 00:06:57.999
+floating point add for a double,
+
+00:06:58.000 --> 00:06:59.439
+but we can also look at
+
+00:06:59.440 --> 00:07:04.239
+the Julia lowered representation
+
+00:07:04.240 --> 00:07:06.079
+after the abstract syntax tree is produced.
+
+00:07:06.080 --> 00:07:07.919
+The reason I put this in a file is because
+
+00:07:07.920 --> 00:07:10.119
+now what I can do is I can change this.
+
+00:07:10.120 --> 00:07:14.079
+And now, one and two will be two.
+
+00:07:14.080 --> 00:07:16.879
+So this to me is very reminiscent
+
+00:07:16.880 --> 00:07:18.719
+of how I work in Emacs,
+
+00:07:18.720 --> 00:07:20.239
+where there is a global state
+
+00:07:20.240 --> 00:07:22.959
+that I can access and modify any time
+
+00:07:22.960 --> 00:07:27.159
+with no restrictions. And this happens in in Julia too.
+
+00:07:27.160 --> 00:07:29.559
+Typically, we don't want to modify functions
+
+00:07:29.560 --> 00:07:32.519
+that are in other packages or they are in base,
+
+00:07:32.520 --> 00:07:34.079
+but we can do that. For example,
+
+00:07:34.080 --> 00:07:37.639
+I can change what is plus for integers.
+
+00:07:37.640 --> 00:07:41.079
+And if I change with this plus
+
+00:07:41.080 --> 00:07:43.759
+and make it so that any two integers return zero,
+
+00:07:43.760 --> 00:07:46.319
+well, I can do this. This will break Julia because,
+
+00:07:46.320 --> 00:07:48.359
+well, Julia is built in Julia.
+
+00:07:48.360 --> 00:07:51.399
+So if we break this, well, nothing will work.
+
+00:07:51.400 --> 00:07:53.399
+But I can do that. This to me is one of
+
+00:07:53.400 --> 00:07:56.199
+the signs of the powerful, introspective,
+
+00:07:56.200 --> 00:07:58.479
+and powerful interactive type of workflows
+
+00:07:58.480 --> 00:07:59.279
+that Julia enables.
+
+00:07:59.280 --> 00:08:03.479
+Finally, I want to talk about the general registry.
+
+00:08:03.480 --> 00:08:06.399
+This is the equivalent of Melpa.
+
+00:08:06.400 --> 00:08:08.759
+It comes with with Julia.
+
+00:08:08.760 --> 00:08:11.119
+But this is very akin to Melpa.
+
+00:08:11.120 --> 00:08:14.479
+It's built upon Git essentially.
+
+00:08:14.480 --> 00:08:19.399
+It's collaborative, as relies heavily on GitHub, GitLab.
+
+00:08:19.400 --> 00:08:21.119
+It's heavily automated.
+
+00:08:21.120 --> 00:08:24.479
+And comes with lots and lots of tools and packages.
+
+00:08:24.480 --> 00:08:27.559
+What's beautiful about all these tools and packages
+
+00:08:27.560 --> 00:08:30.279
+is that in the same way many of Emacs packages
+
+00:08:30.280 --> 00:08:32.399
+just play nicely with each other
+
+00:08:32.400 --> 00:08:34.879
+without any input from the developers,
+
+00:08:34.880 --> 00:08:37.559
+the same is true for Julia packages.
+
+00:08:37.560 --> 00:08:40.679
+The Julia packages are highly composable,
+
+00:08:40.680 --> 00:08:42.879
+so two developers can develop
+
+00:08:42.880 --> 00:08:44.719
+two distinct packages
+
+00:08:44.720 --> 00:08:47.639
+that end up playing nicely together for free
+
+00:08:47.640 --> 00:08:51.879
+because of the intrinsic structure, intrinsic way
+
+00:08:51.880 --> 00:08:54.079
+Julia objects are built.
+
+00:08:54.080 --> 00:08:57.479
+So, with all of this, I also want to mention that
+
+00:08:57.480 --> 00:09:00.079
+the community, in addition to have all these packages,
+
+00:09:00.080 --> 00:09:02.599
+is highly active, highly collaborative.
+
+00:09:02.600 --> 00:09:06.159
+The community meets regularly on places like Slack,
+
+00:09:06.160 --> 00:09:08.199
+as opposed to the Emacs community
+
+00:09:08.200 --> 00:09:10.039
+that I'd say maybe meets on Reddit.
+
+00:09:10.040 --> 00:09:12.999
+So, with all of this, I want to thank you
+
+00:09:13.000 --> 00:09:16.560
+for your attention, enjoy Emacs, and enjoy Julia.
diff --git a/2024/captions/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--answers.vtt b/2024/captions/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--answers.vtt
new file mode 100644
index 00000000..009f023d
--- /dev/null
+++ b/2024/captions/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--answers.vtt
@@ -0,0 +1,961 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:05.159
+I'm doing well. Thank you so much. I was supposed to chat and
+
+00:00:05.160 --> 00:00:08.799
+write down stuff in the etherpad, but you guys accommodated
+
+00:00:08.800 --> 00:00:12.439
+me very nicely, swiftly, efficiently, in spite of my quirky
+
+00:00:12.440 --> 00:00:16.599
+last minute requests. Yeah, but that's okay because, well,
+
+00:00:16.600 --> 00:00:19.479
+it's funny that you talk about accommodating you and doing
+
+00:00:19.480 --> 00:00:22.159
+all the things we need to do because, frankly, your talk is
+
+00:00:22.160 --> 00:00:24.199
+about getting things done and you've mentioned the book,
+
+00:00:24.200 --> 00:00:27.439
+obviously, but the philosophy of getting things done is
+
+00:00:27.440 --> 00:00:30.759
+ultimately what we've been applying with Emacs Conf so that
+
+00:00:30.760 --> 00:00:33.759
+when we have curveballs thrown at us, like you've done right
+
+00:00:33.760 --> 00:00:36.399
+now, we can accommodate them because we made sure that
+
+00:00:36.400 --> 00:00:41.039
+everything else was done. So we'll move to questions and I
+
+00:00:41.040 --> 00:00:45.039
+invite viewers to go to the pad, to the etherpad that is on IRC
+
+00:00:45.040 --> 00:00:48.199
+and also on the talk page and put your questions over there.
+
+00:00:48.200 --> 00:00:51.559
+But first I wanted to make sure, Bala, that if you had
+
+00:00:51.560 --> 00:00:54.639
+anything that you could not include in your presentation,
+
+00:00:54.640 --> 00:01:00.159
+just to give you some time to mention them now if you want. I
+
+00:01:00.160 --> 00:01:09.119
+think I mentioned most of what I wanted to convey. I wanted to
+
+00:01:09.120 --> 00:01:12.479
+keep it general with whichever format people are
+
+00:01:12.480 --> 00:01:15.719
+comfortable with, whether it's Org Mode, whether it's
+
+00:01:15.720 --> 00:01:21.599
+plain text, whether it is docx. In fact, I was speaking to one
+
+00:01:21.600 --> 00:01:25.799
+of my friends and he said, Hey, I use Google Sheets to note
+
+00:01:25.800 --> 00:01:28.679
+down everything, all the tasks that are coming. I said, suit
+
+00:01:28.680 --> 00:01:33.439
+yourself, whatever it is. So, in that way, this methodology
+
+00:01:33.440 --> 00:01:37.359
+or whatever, the way which we follow is quite flexible. The
+
+00:01:37.360 --> 00:01:41.679
+system is quite flexible in whichever way you want to use it.
+
+00:01:41.680 --> 00:01:46.919
+go ahead and use it. But start emptying your teacup. That
+
+00:01:46.920 --> 00:01:50.599
+will be my first and foremost. I have nothing else to add per
+
+00:01:50.600 --> 00:01:54.879
+se. Okay, cool. So we'll start with the first question and
+
+00:01:54.880 --> 00:01:58.279
+I'll be reading the questions to you. And just so we know, we
+
+00:01:58.280 --> 00:02:01.079
+have about eight minutes of Q&A until we need to move to the
+
+00:02:01.080 --> 00:02:03.553
+next talk. All right, so first question.
+
+NOTE Q: What is TRIZ?
+
+00:02:03.554 --> 00:02:06.399
+What is TRIZ? Okay,
+
+00:02:06.400 --> 00:02:11.679
+this is a Russian methodology. It's pardon my, I mean poor
+
+00:02:11.680 --> 00:02:16.679
+Russian, but it translates to theory of inventive problem
+
+00:02:16.680 --> 00:02:21.919
+solving. So, that's what it translates to. What it is, is it
+
+00:02:21.920 --> 00:02:26.119
+is said that all the inventions problem solved so far in
+
+00:02:26.120 --> 00:02:30.239
+humanity. If you can categorize them, they fall into
+
+00:02:30.240 --> 00:02:36.159
+exactly 40 principles. That's one of the core tenets in
+
+00:02:36.160 --> 00:02:40.959
+theory of inventive problem solving. Also, that creative
+
+00:02:40.960 --> 00:02:46.319
+people have a process they follow. and in defining a problem
+
+00:02:46.320 --> 00:02:49.839
+and solving a problem. So, this is what I was trained in a
+
+00:02:49.840 --> 00:02:55.359
+company that I work for and I started using it and started
+
+00:02:55.360 --> 00:02:59.199
+applying it. So, creative process starts with defining a
+
+00:02:59.200 --> 00:03:02.799
+problem and solving a problem in a very systematic manner
+
+00:03:02.800 --> 00:03:06.239
+and you can be as creative as the creatives that we know about
+
+00:03:06.240 --> 00:03:11.759
+as the methodology talks about. So, that is what TRIZ is,
+
+00:03:11.760 --> 00:03:15.639
+Theory of Inventive Problem Solving. There is lot of open
+
+00:03:15.640 --> 00:03:19.799
+source literature like we have in Emacs. It is the same way
+
+00:03:19.800 --> 00:03:24.159
+with TRIZ, people share very generous and you can learn
+
+00:03:24.160 --> 00:03:29.879
+about it. what it can be useful for what in the core of our talk
+
+00:03:29.880 --> 00:03:34.679
+also is that many times we face conflicts, that is, I don't
+
+00:03:34.680 --> 00:03:38.719
+want to spend a lot of time, you know, figuring out a system
+
+00:03:38.720 --> 00:03:42.919
+like this. However, I want everything in one place, you
+
+00:03:42.920 --> 00:03:46.839
+know, how can that happen? So start little by little is one
+
+00:03:46.840 --> 00:03:50.399
+suggestion I have. Don't And this is also a contradiction we
+
+00:03:50.400 --> 00:03:55.199
+have, right? So, we need to spend a lot of time to set up things
+
+00:03:55.200 --> 00:03:58.559
+before we can start organizing our life. But there's not a
+
+00:03:58.560 --> 00:04:01.599
+lot of time because we haven't organized our life. So, we
+
+00:04:01.600 --> 00:04:04.839
+don't have that's a conundrum or a contradiction. That's
+
+00:04:04.840 --> 00:04:09.479
+what TRIZ methodology is about to identify that this is a
+
+00:04:09.480 --> 00:04:15.039
+contradiction and we have to resolve it not compromise. So,
+
+00:04:15.040 --> 00:04:18.319
+resolve it in a manner that gives you enough time to set up a
+
+00:04:18.320 --> 00:04:22.439
+system and enough time, free time to enjoy your life or focus
+
+00:04:22.440 --> 00:04:26.559
+on a project and be present when you're working with
+
+00:04:26.560 --> 00:04:31.439
+something. So, that's what the crux of the methodology is.
+
+00:04:31.440 --> 00:04:34.359
+Okay, splendid answer. Thank you. Moving on to the next one.
+
+NOTE Q: Do you agree that learning similar but different things again and again is ultimately wasted bandwidth? What can we do as technologists to push back against this?
+
+00:04:34.360 --> 00:04:37.199
+Thank you for this talk. Very interesting. One of the things
+
+00:04:37.200 --> 00:04:40.199
+that frustrates me about modern web development is the rate
+
+00:04:40.200 --> 00:04:43.279
+of churn when it comes to useful knowledge. I think Emacs can
+
+00:04:43.280 --> 00:04:45.679
+help to counteract against this by building lasting tools
+
+00:04:45.680 --> 00:04:48.279
+where mastery can be built. Do you agree that learning
+
+00:04:48.280 --> 00:04:50.799
+similar but different things again and again is ultimately
+
+00:04:50.800 --> 00:04:54.079
+wasted bandwidth? What can we do as technologists to push
+
+00:04:54.080 --> 00:05:00.159
+back against this? Yeah, this is an interesting one
+
+00:05:00.160 --> 00:05:04.879
+because, I mean, I'm like everyone else where a new package
+
+00:05:04.880 --> 00:05:09.439
+shows up. I mentioned that in my talk also, the first
+
+00:05:09.440 --> 00:05:12.879
+introduction. Sajajo's newsletter is amazing. It has all
+
+00:05:12.880 --> 00:05:15.599
+these new things coming up and new developments coming up.
+
+00:05:15.600 --> 00:05:18.879
+Same thing with web dev, I guess, you have new things coming
+
+00:05:18.880 --> 00:05:25.519
+up. So you want to learn that new thing. However, you need to
+
+00:05:25.520 --> 00:05:31.559
+also be aware that there are so many other projects and
+
+00:05:31.560 --> 00:05:37.879
+hobbies or life that's also waiting for you. And it's not a
+
+00:05:37.880 --> 00:05:42.799
+balancing act, but if you if you pay attention and be present
+
+00:05:42.800 --> 00:05:46.199
+and give whatever is in front of you, it's full attention.
+
+00:05:46.200 --> 00:05:50.959
+Then look back and connect. That's an interesting way,
+
+00:05:50.960 --> 00:05:55.759
+because hindsight is 20 20. Use it to your advantage. So my I
+
+00:05:55.760 --> 00:05:59.679
+don't know, I don't want to push back against this because
+
+00:05:59.680 --> 00:06:02.879
+some of it is just amazing because it thinks that you think is
+
+00:06:02.880 --> 00:06:05.759
+a waste of time and it's a distraction right now. could
+
+00:06:05.760 --> 00:06:09.719
+potentially be. I'm not saying it will be because there are
+
+00:06:09.720 --> 00:06:13.359
+things that are truly a waste of time that could truly
+
+00:06:13.360 --> 00:06:17.250
+potentially tie back to something and be really helpful.
+
+NOTE org-mode export, CSS, WeasyPrint
+
+00:06:17.251 --> 00:06:22.039
+I can give you an example from our Emacs part of my life. I was
+
+00:06:22.040 --> 00:06:27.839
+experimenting with CSS and Cascade style sheets and how I
+
+00:06:27.840 --> 00:06:34.599
+can customize it to use it in org mode export. For me at the
+
+00:06:34.600 --> 00:06:38.639
+time, it seemed like a waste of time. I was spending so much
+
+00:06:38.640 --> 00:06:42.599
+time. Then I parked it. I didn't do much about it later. But
+
+00:06:42.600 --> 00:06:47.319
+then one of my students said, "Your slides are too bulky for me
+
+00:06:47.320 --> 00:06:49.588
+to scroll through to get to exactly what I am looking for."
+
+00:06:49.589 --> 00:06:55.319
+I was using the reveal HTML and I used to pass on the link
+
+00:06:55.320 --> 00:07:00.999
+before. And the student sort of hinted at a handout. And now
+
+00:07:01.000 --> 00:07:05.319
+that's not easy with the RevealJS framework. It's rather
+
+00:07:05.320 --> 00:07:08.439
+tricky. At least I couldn't figure it out. but then it
+
+00:07:08.440 --> 00:07:10.879
+occurred to me that, hey, wait a second i've already looked at
+
+00:07:10.880 --> 00:07:15.799
+this CSS thing and maybe that'll help. It did help. I can
+
+00:07:15.800 --> 00:07:18.995
+drop in the name of the tool that I use now.
+
+00:07:18.996 --> 00:07:23.016
+It's called WeasyPrint uh let me use the uh
+
+00:07:23.017 --> 00:07:24.877
+i don't know if some...
+
+00:07:24.878 --> 00:07:32.100
+If you can look it up, W-E-A-S-Y print.
+
+00:07:32.101 --> 00:07:32.519
+That's what it's called. And that's
+
+00:07:32.520 --> 00:07:36.399
+mighty useful. That's really, really useful. You can
+
+00:07:36.400 --> 00:07:40.919
+customize it. You can change everything. I think I can even,
+
+00:07:40.920 --> 00:07:44.519
+I'll probably even share the code later on. It's really
+
+00:07:44.520 --> 00:07:48.959
+useful and I've been able to, so what seemed like a waste of
+
+00:07:48.960 --> 00:07:52.039
+time is actually something that became useful later on. But
+
+00:07:52.040 --> 00:07:55.519
+there are several other things I have truly wasted and it's
+
+00:07:55.520 --> 00:07:58.439
+not been useful because I couldn't connect the dots. So,
+
+00:07:58.440 --> 00:08:06.239
+perhaps the, let's say, wasteful of time so that you look at
+
+00:08:06.240 --> 00:08:09.159
+something and see how to connect back like the Zettelkasten
+
+00:08:09.160 --> 00:08:12.839
+that everybody talks about. I do not use it, but I like the
+
+00:08:12.840 --> 00:08:15.399
+idea that you look at it keeping in mind that you could
+
+00:08:15.400 --> 00:08:19.359
+probably connect to something later on. Perhaps, just try
+
+00:08:19.360 --> 00:08:24.519
+it out. OK, great, Bala. Sadly, we are a little short on time
+
+00:08:24.520 --> 00:08:27.159
+to answer all the questions that we have. I see three
+
+00:08:27.160 --> 00:08:31.039
+questions currently that can still be answered, and I don't
+
+00:08:31.040 --> 00:08:33.919
+think any of them would be answerable within just one
+
+00:08:33.920 --> 00:08:37.559
+minute. So what I suggest we do, Bala, feel free. Do you have
+
+00:08:37.560 --> 00:08:40.919
+access to the pad on your end? Yes, I do. I do. I have it here.
+
+00:08:40.920 --> 00:08:43.707
+Okay, cool. I'm putting the link on BBB just in case you need
+
+00:08:43.708 --> 00:08:44.919
+to review it.
+
+00:08:44.920 --> 00:08:47.039
+We're going to leave the room open. By the way,
+
+00:08:47.040 --> 00:08:49.399
+if anyone in the crowd wants to join so that they can ask the
+
+00:08:49.400 --> 00:08:51.919
+question directly with their voice to Bala, feel free to do
+
+00:08:51.920 --> 00:08:56.119
+so. The links are on the website. But Bala, if no one shows up,
+
+00:08:56.120 --> 00:08:58.559
+if you could just answer the three questions that we haven't
+
+00:08:58.560 --> 00:09:01.239
+covered yet, actually. Well, three questions because
+
+00:09:01.240 --> 00:09:04.359
+Sacha just put the link right there. That'd be lovely. And
+
+00:09:04.360 --> 00:09:06.080
+we'll make sure that the entire Q&A
+
+00:09:06.120 --> 00:09:07.839
+finds its place into the
+
+00:09:07.840 --> 00:09:10.719
+website afterwards. How does that sound for you? Yeah,
+
+00:09:10.720 --> 00:09:14.559
+sounds great. Thank you so much. I'll do make sure that I will
+
+00:09:14.560 --> 00:09:17.159
+have the answers there, but I'm going to wait here for some
+
+00:09:17.160 --> 00:09:20.559
+time so that somebody can join. Okay, sure. Any last word in
+
+00:09:20.560 --> 00:09:26.799
+10 seconds for the public? Well, empty your teacup and enjoy
+
+00:09:26.800 --> 00:09:27.199
+your life.
+
+00:09:27.200 --> 00:09:29.879
+Splendid. Thank you so much, Bala, for coming
+
+00:09:29.880 --> 00:09:32.359
+again to EmacsConf this year, and hopefully we'll be seeing
+
+00:09:32.360 --> 00:09:36.439
+you next year with further talks to discuss. Yeah, thank you
+
+00:09:36.440 --> 00:09:39.559
+so much. All right, and right now we'll be moving to the next
+
+00:09:39.560 --> 00:09:42.039
+talk of the day in about five seconds. Thank you again, Bala,
+
+00:09:42.040 --> 00:09:46.799
+and see you later. Bye.
+
+00:09:46.800 --> 00:09:49.399
+All right, we are a fair. So, Bala, I'll need to move to make
+
+00:09:49.400 --> 00:09:51.759
+sure that everything is working for the next talk. So, do as
+
+00:09:51.760 --> 00:09:55.320
+we said, and everything will be fine. Okay.
+
+00:09:55.333 --> 00:09:58.879
+Okay, bye-bye, Bala. Bye. Bye, Leo.
+
+00:09:58.880 --> 00:10:15.119
+Okay.
+
+00:10:15.120 --> 00:10:21.679
+Hello everyone, do you want me to answer a question? I'll be
+
+00:10:21.680 --> 00:10:23.399
+happy to answer that. You want to discuss something? You
+
+00:10:23.400 --> 00:10:27.759
+want to share something? I'm here for that. Please let me
+
+00:10:27.760 --> 00:11:06.479
+know.
+
+00:11:06.480 --> 00:11:10.599
+I'll hang around for another 5 to 10 minutes. Please let me
+
+00:11:10.600 --> 00:11:14.439
+know if you have any questions or if you're the ones who ask
+
+00:11:14.440 --> 00:11:36.739
+those questions also, please let me know.
+
+00:11:36.740 --> 00:11:38.560
+Are you there?
+
+00:11:38.625 --> 00:11:44.359
+Hi, yes. Some tips I've found for getting
+
+00:11:44.360 --> 00:11:50.399
+things done with an image for this stuff is like for
+
+00:11:50.400 --> 00:11:53.919
+separations you have like your Zettelkasten, you're
+
+00:11:53.920 --> 00:11:56.799
+getting things done, and then beyond that you have like
+
+00:11:56.800 --> 00:12:00.559
+dailies and global.
+
+00:12:00.560 --> 00:12:06.439
+Daily Zettelkasten would be journaling. Okay, okay. And
+
+00:12:06.440 --> 00:12:10.479
+then, like, global or daily getting things done, I
+
+00:12:10.480 --> 00:12:11.919
+generally like doing it in a week.
+
+00:12:11.920 --> 00:12:13.800
+And then splitting the,
+
+00:12:13.833 --> 00:12:16.120
+like, core tasks, secondary tasks,
+
+00:12:16.121 --> 00:12:17.220
+unplanned tasks,
+
+00:12:17.221 --> 00:12:22.079
+because those are good categories.
+
+00:12:22.080 --> 00:12:26.439
+I like what you're doing.
+
+00:12:26.440 --> 00:12:32.199
+Sorry? Do you do things like that at all?
+
+00:12:32.200 --> 00:12:38.279
+Or are there separations like with Zettelkasten
+
+00:12:38.280 --> 00:12:45.839
+versus the Getting Things Done?
+
+00:12:45.840 --> 00:12:52.279
+That's very interesting, yes. Daily log and weekly log,
+
+00:12:52.280 --> 00:12:56.800
+that's really helpful. I've also been trying to do that but
+
+00:12:56.821 --> 00:13:02.279
+not being able to successfully do a daily log plus a weekly
+
+00:13:02.280 --> 00:13:06.879
+log. So I gave up on the daily log because it seemed to be like a
+
+00:13:06.880 --> 00:13:12.479
+lot of overhead for me, so I just switch to a weekly review
+
+00:13:12.480 --> 00:13:16.759
+where I would log what's going on and how it is. But it's also
+
+00:13:16.760 --> 00:13:19.759
+interesting to see how it connects back to something that
+
+00:13:19.760 --> 00:13:22.639
+we've already worked on, or we've already learned
+
+00:13:22.640 --> 00:13:26.039
+somewhere, which is essentially using the ZIP and custom
+
+00:13:26.040 --> 00:13:30.239
+method. I probably want to try that a bit later on also.
+
+00:13:30.240 --> 00:13:34.199
+That's a great suggestion, nice idea. Oh, so some of the
+
+00:13:34.200 --> 00:13:38.039
+reason for the separation would be with the daily log, like,
+
+00:13:38.040 --> 00:13:42.839
+for instance, the title for the journal would be, Audinet
+
+00:13:42.840 --> 00:13:47.359
+would be the day, and it starts blank. And then, so if you have
+
+00:13:47.360 --> 00:13:50.159
+a straight thought, if you know it can go straight to your
+
+00:13:50.160 --> 00:13:53.479
+Zettelkasten, it goes into your Zettelkasten. If you don't
+
+00:13:53.480 --> 00:13:57.679
+know where it goes, it goes into your journal. And then same
+
+00:13:57.680 --> 00:14:01.839
+thing for like the week, is like your weeks always start
+
+00:14:01.840 --> 00:14:04.879
+emptying, so like if you have your core tasks, like if it
+
+00:14:04.880 --> 00:14:08.119
+spells beyond three, it's probably not a core task. So it
+
+00:14:08.120 --> 00:14:11.359
+gives you the idea of like, did I actually do what I wanted to
+
+00:14:11.360 --> 00:14:16.999
+yesterday, rather than getting 20 things done that I don't
+
+00:14:17.000 --> 00:14:22.159
+really care about that much. Yes. True, true, true. Very
+
+00:14:22.160 --> 00:14:23.759
+true. Yeah.
+
+00:14:23.760 --> 00:14:30.959
+Nice, nice talk. Thank you so much for sharing that. I've
+
+00:14:30.960 --> 00:14:35.279
+been a, let's say a start and many times I've started on
+
+00:14:35.280 --> 00:14:40.799
+Zettelkasten, you know, with little notes. They have these
+
+00:14:40.800 --> 00:14:43.399
+fleeting notes and permanent notes. I've tried many of
+
+00:14:43.400 --> 00:14:48.199
+those, but somehow it's not sticky for me. I've not been
+
+00:14:48.200 --> 00:14:51.399
+able to get rid of that.
+
+00:14:51.400 --> 00:14:55.919
+Yeah, I've got multiple attempts of using these systems,
+
+00:14:55.920 --> 00:15:01.999
+becoming too big or complex, like I don't know where to put a
+
+00:15:02.000 --> 00:15:06.679
+new piece of information, so then I throw the whole system
+
+00:15:06.680 --> 00:15:14.639
+away. So, this is my favorite iteration that I've done so
+
+00:15:14.640 --> 00:15:23.399
+far. I'm sure it'll change with time. Okay, okay, okay, I
+
+00:15:23.400 --> 00:15:25.079
+see. Yeah, I...
+
+NOTE Daily log
+
+00:15:25.080 --> 00:15:31.759
+I like the way the daily log works, that it has an embedded,
+
+00:15:31.760 --> 00:15:36.799
+you know, you just have a name stamp and then you embed
+
+00:15:36.800 --> 00:15:40.479
+something from another project. And when you go to the
+
+00:15:40.480 --> 00:15:44.559
+project page, the same thing shows up there in the log also. I
+
+00:15:44.560 --> 00:15:48.679
+wanted to take that feature and have that in my optimal
+
+00:15:48.680 --> 00:15:53.399
+setup. I'm not well versed enough to get that set up because I
+
+00:15:53.400 --> 00:15:56.799
+like that with that. Anything I enter in the daily log should
+
+00:15:56.800 --> 00:16:00.359
+show up in my project log also and vice versa. I want to
+
+00:16:00.360 --> 00:16:04.799
+execute on my project. I need that notes where I'm looking
+
+00:16:04.800 --> 00:16:10.599
+for. That's a key feature of that is with logseq you just have
+
+00:16:10.600 --> 00:16:14.160
+a button that says go to today. So you don't think about it and
+
+00:16:14.161 --> 00:16:18.060
+it always starts empty. It's that blank sheet that's always
+
+00:16:18.061 --> 00:16:23.079
+confirming you want the things that I used that before.
+
+00:16:23.080 --> 00:16:26.360
+One of the things I really wanted was, I want this,
+
+00:16:26.397 --> 00:16:29.198
+but I want it for Getting Things Done on my journal.
+
+00:16:29.199 --> 00:16:36.279
+I want two separate ones.
+
+00:16:36.280 --> 00:16:45.319
+Yeah, I like the, also I'm trying to see how to create pages
+
+00:16:45.320 --> 00:16:51.119
+quickly from within Org Mode. I know we can do the square
+
+00:16:51.120 --> 00:16:55.879
+bracket thing and enter and it should go into a new page. but
+
+00:16:55.880 --> 00:17:00.879
+it's not as seamless as in logseq or obsidian i'm trying to
+
+00:17:00.880 --> 00:17:06.239
+see how which way do i do that quickly so that you don't spend
+
+00:17:06.240 --> 00:17:10.439
+time on organizing once you have the bigger setup of the
+
+00:17:10.440 --> 00:17:14.959
+folder structures and the to do then it's easier to
+
+00:17:14.960 --> 00:17:18.599
+integrate it but if i'm starting from a business point of
+
+00:17:18.600 --> 00:17:22.679
+view it's rather tough for them to set it all up because the
+
+00:17:22.680 --> 00:17:27.679
+setup costs are very high in terms of system first and then
+
+00:17:27.680 --> 00:17:30.639
+start with this. Or like you said, you know we could also
+
+00:17:30.640 --> 00:17:33.759
+start with a blank sheet and then start filling it up and then
+
+00:17:33.760 --> 00:17:39.159
+see how to link up things or move it around so that it fits into
+
+00:17:39.160 --> 00:17:44.719
+your larger system or evolve a system as it goes. Don't start
+
+00:17:44.720 --> 00:17:47.959
+with the system in mind, but evolve it because it then fits
+
+00:17:47.960 --> 00:17:52.559
+into how you are rather than the you trying to adapt to the
+
+00:17:52.560 --> 00:17:53.159
+system.
+
+NOTE Capturing
+
+00:17:53.160 --> 00:18:00.559
+So, Denote and org-roam, they'll have a feature, like the
+
+00:18:00.560 --> 00:18:05.199
+note, you have a command called, let's see, create or
+
+00:18:05.200 --> 00:18:09.479
+existing note, and org-roam has an equivalent to that, and
+
+00:18:09.480 --> 00:18:14.999
+what that, you need to consult with that, as you are browsing
+
+00:18:15.000 --> 00:18:19.279
+your notes, you see that, and so if you're making a new note,
+
+00:18:19.280 --> 00:18:23.119
+power generation or something like that you'll easily see
+
+00:18:23.120 --> 00:18:27.799
+if you have any notes that are in power generation or like
+
+00:18:27.800 --> 00:18:30.839
+let's say you have something in power and if you don't you
+
+00:18:30.840 --> 00:18:34.079
+just go down to where you're just you know you don't have
+
+00:18:34.080 --> 00:18:39.599
+anything selected or so it's your what's in your uh what your
+
+00:18:39.600 --> 00:18:46.719
+current so you're not pre-selecting something existing
+
+00:18:46.720 --> 00:18:51.599
+and voila now you have a file And then you have consult so you
+
+00:18:51.600 --> 00:18:57.879
+can preview them as you move up and down the list.
+
+00:18:57.880 --> 00:19:02.319
+And then you also got Emacs
+
+00:19:02.320 --> 00:19:10.719
+Org Capture to just pop up a template
+
+00:19:10.720 --> 00:19:16.599
+capture buffer that is blank that you can tell to go into
+
+00:19:16.600 --> 00:19:20.919
+something like a journal or a GTD inbox.
+
+00:19:20.920 --> 00:19:27.279
+And yeah, this allows you to just make it like a specific
+
+00:19:27.280 --> 00:19:30.999
+buffer to do that specific task. I think Protesilaos has a
+
+00:19:31.000 --> 00:19:35.479
+video about how to make that into just a pop-up window. Like
+
+00:19:35.480 --> 00:19:41.519
+for instance, you're in your browser, you pop it up, Uh, jot
+
+00:19:41.520 --> 00:19:49.599
+down your task, press enter, and it's gone. Hmm, okay. Okay,
+
+NOTE Note silos
+
+00:19:49.600 --> 00:19:54.919
+okay, makes sense, makes sense. Yeah, for me, I wanted to try
+
+00:19:54.920 --> 00:20:01.079
+denote, but my folder structure, I found it very difficult
+
+00:20:01.080 --> 00:20:04.559
+to move it to a denote kind of a structure where the folder
+
+00:20:04.560 --> 00:20:08.519
+hierarchy is not as important because all nodes are treated
+
+00:20:08.520 --> 00:20:12.639
+the same. But for me, because I'm focusing on a project, I
+
+00:20:12.640 --> 00:20:17.079
+need only the project files show up. It was tricky for me to,
+
+00:20:17.080 --> 00:20:20.599
+because sometimes I share the folder with my colleagues and
+
+00:20:20.600 --> 00:20:24.519
+who are not on Emacs or more. So I can't show them all the
+
+00:20:24.520 --> 00:20:28.879
+files, all the notes. I just want that folder to be shared and
+
+00:20:28.880 --> 00:20:32.439
+ignore the todo.org that is there because it's not readable
+
+00:20:32.440 --> 00:20:37.679
+for them. So, I find it easier to share a folder level or a
+
+00:20:37.680 --> 00:20:41.639
+project level and that's why I stuck to this format which is a
+
+00:20:41.640 --> 00:20:46.639
+hierarchy of folders with the to-do inside those folders.
+
+00:20:46.640 --> 00:20:49.719
+That works very well for me, particularly keeping in mind
+
+00:20:49.720 --> 00:20:52.479
+that I need to share some folders sometimes with my
+
+00:20:52.480 --> 00:20:57.439
+colleagues. Whereas Denote with a flat structure or
+
+00:20:57.440 --> 00:21:01.919
+Roam with a flat structure, I find it very tricky to do that.
+
+00:21:01.920 --> 00:21:06.079
+With Denote, you can actually have, there's a feature
+
+00:21:06.080 --> 00:21:07.759
+called silos that will
+
+00:21:07.760 --> 00:21:13.199
+allow you to do both and I think you can make customized
+
+00:21:13.200 --> 00:21:17.959
+commands to go that work only in specific silos. I haven't
+
+00:21:17.960 --> 00:21:20.919
+messed around to it. too much with them. I don't think org run
+
+00:21:20.920 --> 00:21:24.719
+has anything like that though. Yes, I don't think they have
+
+00:21:24.720 --> 00:21:28.239
+that. But I remember seeing silos. Maybe I should give it
+
+00:21:28.240 --> 00:21:32.119
+another spin and see if that works. Because if it can solve my
+
+00:21:32.120 --> 00:21:36.519
+creating new node quickly from the denote part itself while
+
+00:21:36.520 --> 00:21:40.439
+I'm writing the nodes itself rather than go through the R
+
+00:21:40.440 --> 00:21:45.439
+capture. That will really help me in linking back and seeing
+
+00:21:45.440 --> 00:21:49.399
+how it maps to another project that I've already worked on
+
+00:21:49.400 --> 00:21:53.999
+from an archive and then bring it there. I think that's a good
+
+00:21:54.000 --> 00:21:57.639
+idea. I'll look at silos again. Also, with the silos, let's
+
+00:21:57.640 --> 00:22:03.719
+say you're going to use ripgrep on the directory, you could
+
+00:22:03.720 --> 00:22:07.799
+intentionally keep your Zettelkasten and your journal
+
+00:22:07.800 --> 00:22:13.159
+separated. in different folders, like, yeah. So that,
+
+00:22:13.160 --> 00:22:19.039
+like, if you direct them, or if you wanted to share folder by
+
+00:22:19.040 --> 00:22:23.399
+folder basis, yeah, you don't have to be the all-in or
+
+00:22:23.400 --> 00:22:30.759
+nothing approach. Yeah, that works. That works.
+
+00:22:30.760 --> 00:22:35.119
+Excellent.
+
+00:22:35.120 --> 00:22:37.839
+OK.
+
+00:22:37.840 --> 00:22:44.159
+Well, thank you so much for your time and for sharing what is
+
+00:22:44.160 --> 00:22:47.919
+really helpful for me. I hope the talk was useful for you.
+
+00:22:47.920 --> 00:22:53.839
+Yep. Thanks for sharing. Have fun with the rest of the Emacs
+
+00:22:53.840 --> 00:23:00.799
+camp. Okay. All right. Then see you then. Happy Emacs month
+
+00:23:00.800 --> 00:23:06.200
+to you too. Okay. Bye. Bye.
diff --git a/2024/captions/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--main--chapters.vtt b/2024/captions/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--main--chapters.vtt
new file mode 100644
index 00000000..1b100ff2
--- /dev/null
+++ b/2024/captions/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--main--chapters.vtt
@@ -0,0 +1,53 @@
+WEBVTT
+
+
+00:00:00.300 --> 00:01:33.849
+Introduction
+
+00:01:35.350 --> 00:01:46.474
+What is a skill?
+
+00:01:47.424 --> 00:02:09.890
+Why should you learn a new skill?
+
+00:02:11.040 --> 00:02:35.174
+What skills should you learn?
+
+00:02:35.974 --> 00:03:15.424
+What stops you from learning new skills?
+
+00:03:16.274 --> 00:04:40.374
+Empty your teacup
+
+00:04:40.424 --> 00:06:33.274
+Getting Things Done
+
+00:06:33.724 --> 00:07:32.740
+Archive
+
+00:07:33.290 --> 00:10:02.524
+Multiple steps
+
+00:10:02.874 --> 00:10:37.674
+Multiple projects
+
+00:10:37.874 --> 00:11:20.274
+What if the project stops before completion?
+
+00:11:20.974 --> 00:12:16.990
+What if you successfully complete the project?
+
+00:12:18.140 --> 00:12:53.519
+What if the project is ongoing and doesn't really end?
+
+00:12:54.320 --> 00:16:01.640
+What if you forget to visit the TODO files?
+
+00:16:02.740 --> 00:18:36.007
+Planning for the future
+
+00:18:36.957 --> 00:19:02.859
+Summary
+
+00:19:03.210 --> 00:19:36.650
+References
diff --git a/2024/captions/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--main.vtt b/2024/captions/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--main.vtt
new file mode 100644
index 00000000..81bac250
--- /dev/null
+++ b/2024/captions/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--main.vtt
@@ -0,0 +1,1349 @@
+WEBVTT captioned by rodrigo, checked by sachac and bhavin
+
+NOTE Introduction
+
+00:00:00.300 --> 00:00:00.874
+Oh, wow!
+
+00:00:00.924 --> 00:00:05.740
+I'm gonna tell you about how I'm learning this new thing…
+
+00:00:07.790 --> 00:00:08.539
+Okay…
+
+00:00:11.840 --> 00:00:15.157
+Hey dude, I am recording, okay? So, I'll call you back
+
+00:00:15.757 --> 00:00:18.074
+yeah yeah I'm doing learning the new thing.
+
+00:00:18.724 --> 00:00:20.574
+Yeah yeah yeah later later later
+
+00:00:20.624 --> 00:00:22.924
+not right now later later later later.
+
+00:00:24.024 --> 00:00:24.990
+Sorry about that.
+
+00:00:25.390 --> 00:00:28.719
+Okay, as I was saying, I'm going to tell you all about
+
+00:00:28.920 --> 00:00:30.774
+how I'm learning this new thing.
+
+00:00:32.074 --> 00:00:36.440
+Ooh, Sacha Chua's Emacs newsletter is out.
+
+00:00:36.490 --> 00:00:38.874
+Maybe I should spend some time…
+
+00:00:38.924 --> 00:00:41.769
+Oh, wait a second. I have to learn this new thing.
+
+00:00:43.370 --> 00:00:46.790
+Haha. Okay, so I'm going to tell you
+
+00:00:47.290 --> 00:00:51.474
+how we can learn new skills in the middle of
+
+00:00:51.524 --> 00:00:54.359
+so many other wonderful things that you want to do
+
+00:00:54.360 --> 00:00:56.959
+and to speak to wonderful people that you have to speak to.
+
+00:00:57.460 --> 00:01:01.407
+My name is Bala Ramadurai and I'm going to be talking about
+
+00:01:01.607 --> 00:01:06.307
+the Survival of The Skillest, that's what I call it, okay?
+
+00:01:07.407 --> 00:01:11.574
+Survival of The Skillest. Thriving in the Learning Jungle.
+
+00:01:11.724 --> 00:01:14.149
+Here I'm going to give you some tips and techniques
+
+00:01:14.250 --> 00:01:17.490
+as to how you can learn skills, new skills.
+
+00:01:17.990 --> 00:01:22.974
+I'm going to give you a quote from a multi-talented teacher.
+
+00:01:23.224 --> 00:01:27.007
+He was the second president of my country, India.
+
+00:01:27.357 --> 00:01:29.440
+S. Radhakrishnan, he says,
+
+00:01:29.590 --> 00:01:32.324
+“When we think we know, we cease to learn.”
+
+00:01:32.674 --> 00:01:33.849
+That was his quote.
+
+NOTE What is a skill?
+
+00:01:35.350 --> 00:01:36.240
+What is a skill?
+
+00:01:36.540 --> 00:01:39.157
+A skill is the knowledge and the ability
+
+00:01:39.507 --> 00:01:42.707
+that enables you to do something well.
+
+00:01:43.157 --> 00:01:45.557
+There's the knowledge first and the ability
+
+00:01:45.607 --> 00:01:46.474
+and you have to do it well.
+
+NOTE Why should you learn a new skill?
+
+00:01:47.424 --> 00:01:50.324
+Right. So why should you learn a new skill?
+
+00:01:50.824 --> 00:01:53.474
+Now if you can pause this video,
+
+00:01:53.674 --> 00:01:55.224
+watching streaming part of the video,
+
+00:01:55.524 --> 00:01:57.990
+then come up with your own reasons.
+
+00:01:58.040 --> 00:02:00.290
+I'm going to give you my top three reasons
+
+00:02:00.340 --> 00:02:02.424
+that you might want to learn a new skill.
+
+00:02:02.574 --> 00:02:03.989
+Get ahead in your career.
+
+00:02:04.390 --> 00:02:08.040
+Look good or cool in your community or peer group
+
+00:02:08.640 --> 00:02:09.890
+or someone forced you to.
+
+NOTE What skills should you learn?
+
+00:02:11.040 --> 00:02:14.174
+Now, what skills should you learn?
+
+00:02:14.574 --> 00:02:16.124
+Ok, there could be a whole list.
+
+00:02:16.674 --> 00:02:19.479
+Let me take a stab at some of the ones
+
+00:02:19.529 --> 00:02:21.757
+that I think could be cool: bungee jumping,
+
+00:02:22.057 --> 00:02:24.340
+teaching your pet to pick up the newspaper
+
+00:02:24.390 --> 00:02:25.679
+without tearing it to shreds.
+
+00:02:26.330 --> 00:02:29.974
+Perhaps with Python rearing, I meant coding, coding,
+
+00:02:30.024 --> 00:02:31.090
+you can do learning coding.
+
+00:02:31.240 --> 00:02:34.340
+So you could list your own skills that you have to learn,
+
+00:02:34.390 --> 00:02:35.174
+you want to learn.
+
+NOTE What stops you from learning new skills?
+
+00:02:35.974 --> 00:02:38.540
+But what stops you from learning new skills?
+
+00:02:39.140 --> 00:02:41.030
+The most common reason that I've heard
+
+00:02:41.230 --> 00:02:42.690
+in the past is lack of time.
+
+00:02:42.790 --> 00:02:45.174
+“Oh Bala, I have to do so many things.”
+
+00:02:45.474 --> 00:02:47.540
+“I don't have the time to learn any new skills.”
+
+00:02:48.140 --> 00:02:50.440
+Lack of motivation could be another reason.
+
+00:02:50.740 --> 00:02:52.257
+Or you're just a rebel.
+
+00:02:53.307 --> 00:02:56.407
+Who is he or who is she to tell me what I should learn?
+
+00:02:56.507 --> 00:02:57.707
+I'm going to learn things like that.
+
+00:02:57.857 --> 00:03:00.040
+So then it stops you from learning a new skill.
+
+00:03:01.040 --> 00:03:04.307
+But there's even more fundamental reason
+
+00:03:04.357 --> 00:03:06.874
+for why we don't learn a new skill so easily.
+
+00:03:07.374 --> 00:03:10.074
+And this comes from the story of scholar in the teacup.
+
+00:03:10.174 --> 00:03:12.157
+I can pass on the link later to you.
+
+00:03:12.257 --> 00:03:15.424
+You can watch this, my own version of the story.
+
+NOTE Empty your teacup
+
+00:03:16.274 --> 00:03:18.740
+The ultimate truth in this story
+
+00:03:18.790 --> 00:03:20.757
+or the moral in this story is that
+
+00:03:21.057 --> 00:03:23.657
+we are filled with preconceived ideas
+
+00:03:23.957 --> 00:03:25.874
+and the Zen master in the story says,
+
+00:03:26.074 --> 00:03:27.540
+it's like a full teacup.
+
+00:03:27.940 --> 00:03:32.107
+In order to learn new skills, you have to empty your teacup.
+
+00:03:32.807 --> 00:03:34.674
+Now, how do you empty your teacup?
+
+00:03:34.724 --> 00:03:37.607
+You just can't pour everything out of your head, right?
+
+00:03:37.707 --> 00:03:39.824
+So how do you really empty your teacup?
+
+00:03:40.624 --> 00:03:43.340
+So the way to empty your teacup,
+
+00:03:43.790 --> 00:03:46.540
+simplest way to do it is write down your thoughts.
+
+00:03:46.790 --> 00:03:48.390
+As simple as that.
+
+00:03:48.740 --> 00:03:51.157
+Just take a piece of paper and write it down.
+
+00:03:51.657 --> 00:03:53.674
+Or if you are on electronic means,
+
+00:03:53.724 --> 00:03:57.840
+use Emacs Org Mode and type out your thoughts, okay?
+
+00:03:58.490 --> 00:04:00.007
+There is a task for you right now.
+
+00:04:00.507 --> 00:04:02.607
+What you have to do is to create a folder
+
+00:04:02.657 --> 00:04:05.774
+in your documents folder called Inbox.
+
+00:04:05.824 --> 00:04:09.874
+Create one and create a new file called todo.org.
+
+00:04:10.224 --> 00:04:11.240
+If you are paper based,
+
+00:04:11.290 --> 00:04:14.607
+you can use a notebook or any other forms of the same file.
+
+00:04:15.257 --> 00:04:18.407
+In that, write down all your unfinished tasks
+
+00:04:18.707 --> 00:04:19.969
+personal and professional.
+
+00:04:20.270 --> 00:04:23.207
+Write down some things that have been worrying you,
+
+00:04:23.607 --> 00:04:25.074
+whatever worries you right now.
+
+00:04:25.124 --> 00:04:27.569
+just write it down, the whole thing, okay?
+
+00:04:28.019 --> 00:04:29.957
+Write down some tasks or actions that
+
+00:04:30.107 --> 00:04:32.174
+you are waiting for somebody else
+
+00:04:32.524 --> 00:04:34.740
+that could also be part of your list here.
+
+00:04:35.640 --> 00:04:37.859
+Great. Now that you have emptied your tea cup,
+
+00:04:38.160 --> 00:04:40.374
+I'm going to tell you the origin of these ideas.
+
+NOTE Getting Things Done
+
+00:04:40.424 --> 00:04:42.990
+These come from “Getting Things Done” by David Allen.
+
+00:04:43.090 --> 00:04:46.207
+It's a great book. I've read it multiple times. Fantastic.
+
+00:04:46.657 --> 00:04:50.240
+And he says, your mind is for having ideas,
+
+00:04:50.390 --> 00:04:51.424
+not holding them.
+
+00:04:52.274 --> 00:04:54.740
+You have to hold on to this idea in your mind.
+
+00:04:55.040 --> 00:04:55.840
+Keep it in your mind.
+
+00:04:55.890 --> 00:04:59.107
+saying it's for having ideas, not holding them.
+
+00:05:00.757 --> 00:05:05.007
+Alright, perform one of four actions on your task list.
+
+00:05:05.207 --> 00:05:07.474
+Okay? The one that you just wrote down.
+
+00:05:07.974 --> 00:05:10.274
+You delete them, okay? As simple as that.
+
+00:05:10.324 --> 00:05:13.574
+Strikethrough the task, hit the delete
+
+00:05:13.624 --> 00:05:16.274
+or change the state to cancel, okay?
+
+00:05:16.674 --> 00:05:18.307
+Alright, If you don't want to delete it,
+
+00:05:18.357 --> 00:05:20.074
+you want to defer it, do it later.
+
+00:05:20.524 --> 00:05:21.807
+Add it to your calendar.
+
+00:05:22.107 --> 00:05:23.840
+Add a reminder to it if you want.
+
+00:05:24.190 --> 00:05:27.307
+Or in Emacs Org Mode use C-c C-s to
+
+00:05:27.357 --> 00:05:31.207
+schedule it to a different time that you feel
+
+00:05:31.257 --> 00:05:32.940
+you would be able to do that task.
+
+00:05:33.640 --> 00:05:35.374
+Or just delegate it to somebody else.
+
+00:05:35.424 --> 00:05:37.380
+Maybe you are not the best person to do it
+
+00:05:37.430 --> 00:05:40.090
+or you probably won't find time to do this.
+
+00:05:40.590 --> 00:05:43.357
+Send it to your colleague, student, assistant,
+
+00:05:43.807 --> 00:05:46.524
+maybe even your favorite LLM to do this.
+
+00:05:47.374 --> 00:05:49.624
+LLM being large language model.
+
+00:05:50.274 --> 00:05:53.457
+Or just do it, right? As they say, just do it.
+
+00:05:53.807 --> 00:05:56.140
+Set a timer for two minutes and do the task.
+
+00:05:56.190 --> 00:05:57.807
+Finish the task, right here right now.
+
+00:05:58.257 --> 00:05:59.207
+Nothing is stopping you.
+
+00:05:59.257 --> 00:06:00.909
+Finish it. Oh, great, I'm going to do this
+
+00:06:01.360 --> 00:06:02.457
+but set yourself two minutes
+
+00:06:02.507 --> 00:06:04.940
+because sometimes it may spill over to half an hour
+
+00:06:04.990 --> 00:06:06.674
+and you still haven't processed through your list.
+
+00:06:07.024 --> 00:06:08.407
+That's why the timer for two minutes.
+
+00:06:08.907 --> 00:06:10.524
+One tip I'm going to give you is:
+
+00:06:10.624 --> 00:06:13.459
+Don't skip any of the items from your list
+
+00:06:13.910 --> 00:06:16.490
+because it's tough work you've been trying to avoid it,
+
+00:06:16.640 --> 00:06:17.374
+don't do that.
+
+00:06:17.724 --> 00:06:22.974
+Be rigorous and finish it off, processing at least, okay?
+
+00:06:23.324 --> 00:06:25.607
+Now you can do the absolute same process
+
+00:06:25.657 --> 00:06:26.940
+on your email inbox.
+
+00:06:27.090 --> 00:06:31.490
+I know, I know some of you have 55,000 emails in your inbox.
+
+00:06:31.540 --> 00:06:33.274
+How am I going to process all of them?
+
+NOTE Archive
+
+00:06:33.724 --> 00:06:36.490
+Well, Tiago Forte, whose method
+
+00:06:36.540 --> 00:06:39.157
+I'm going to be also talking about, says:
+
+00:06:39.257 --> 00:06:42.657
+Archive them all and pull out the top 100, okay?
+
+00:06:42.707 --> 00:06:45.007
+The last latest 100 and process that.
+
+00:06:45.757 --> 00:06:48.207
+That's a cool way to do it, okay?
+
+00:06:48.407 --> 00:06:50.674
+So you're not stuck to those 55,000,
+
+00:06:50.724 --> 00:06:52.340
+but just the top 100 of those.
+
+00:06:52.990 --> 00:06:53.957
+You can do the same,
+
+00:06:54.007 --> 00:06:55.140
+absolutely the same thing
+
+00:06:55.190 --> 00:06:57.624
+to any of your messaging apps as well:
+
+00:06:57.674 --> 00:07:01.240
+WhatsApp, Matrix, Slack, whatever you choose.
+
+00:07:01.890 --> 00:07:03.099
+Even to your physical inbox,
+
+00:07:03.200 --> 00:07:04.540
+you can do the absolute same things.
+
+00:07:04.590 --> 00:07:06.574
+You lift your items and
+
+00:07:06.624 --> 00:07:09.707
+see if you can need to process them, okay?
+
+00:07:10.407 --> 00:07:13.174
+What if the email or message or task is something
+
+00:07:13.224 --> 00:07:14.974
+that you might need in the future?
+
+00:07:15.274 --> 00:07:16.807
+Great! Archive them
+
+00:07:17.107 --> 00:07:19.507
+or move it to a place you may refer to later.
+
+00:07:19.757 --> 00:07:23.240
+So, you have plenty of storage in your cloud space,
+
+00:07:23.290 --> 00:07:25.690
+in your email space, in your computer space.
+
+00:07:26.040 --> 00:07:27.790
+Use that. Archive it.
+
+00:07:27.890 --> 00:07:29.719
+You can refer to it later. Not a worry.
+
+00:07:29.820 --> 00:07:31.040
+Don't want it right in front of you.
+
+00:07:31.090 --> 00:07:32.740
+That's the only thing here, right?
+
+NOTE Multiple steps
+
+00:07:33.290 --> 00:07:35.207
+Now another question that pops in your head is:
+
+00:07:35.257 --> 00:07:38.807
+What if something that requires multiple steps, right?
+
+00:07:38.907 --> 00:07:42.774
+not all steps are created… not all tasks are created alike,
+
+00:07:43.074 --> 00:07:44.474
+There are multiple steps to a task.
+
+00:07:45.024 --> 00:07:47.959
+That's when a task becomes a project, ok?
+
+00:07:48.009 --> 00:07:49.990
+An example or few examples of those
+
+00:07:50.190 --> 00:07:53.840
+are finishing a course on say Coursera or NPTEL or Udemy,
+
+00:07:54.340 --> 00:07:56.224
+teaching a course if you are a teacher
+
+00:07:56.274 --> 00:07:57.874
+in your college or school.
+
+00:07:58.224 --> 00:08:00.807
+If you are organizing a conference
+
+00:08:00.957 --> 00:08:03.607
+such as the Emacs conference, it's a huge project,
+
+00:08:03.957 --> 00:08:05.990
+you will need to use… it's a project.
+
+00:08:07.440 --> 00:08:10.359
+Arranging a birthday party for your spouse, that's sweet,
+
+00:08:10.560 --> 00:08:13.170
+but it's still a project, you will have many tasks in it.
+
+00:08:13.220 --> 00:08:14.824
+So these are examples of projects.
+
+00:08:15.874 --> 00:08:17.374
+Here's how one can handle projects.
+
+00:08:18.024 --> 00:08:19.940
+Create a folder for each project.
+
+00:08:20.390 --> 00:08:24.340
+Create a text or word doc or title it as todo.txt
+
+00:08:24.390 --> 00:08:26.559
+or todo.docx or todo.org.
+
+00:08:26.560 --> 00:08:28.507
+I prefer .org and you can do it.
+
+00:08:29.057 --> 00:08:32.340
+And in that, write down the success criteria,
+
+00:08:32.440 --> 00:08:35.079
+the goal or the deadline of the project.
+
+00:08:35.730 --> 00:08:38.290
+Write down all the tasks that need to be done.
+
+00:08:38.340 --> 00:08:40.040
+You don't have to think about all of it,
+
+00:08:40.190 --> 00:08:41.529
+but whatever comes to your mind,
+
+00:08:41.579 --> 00:08:42.474
+just put it in there
+
+00:08:42.524 --> 00:08:45.974
+as some tasks that you need to get done inside this project.
+
+00:08:46.624 --> 00:08:52.174
+Now, identify the immediate action that needs to be done
+
+00:08:52.224 --> 00:08:53.740
+for the project to move forward.
+
+00:08:54.040 --> 00:08:56.279
+That's usually something that's stopping the project
+
+00:08:56.580 --> 00:08:57.257
+from progressing.
+
+00:08:57.457 --> 00:08:58.874
+So identify that and say:
+
+00:08:58.924 --> 00:09:00.307
+“That's the next thing I'm going to do.”
+
+00:09:01.557 --> 00:09:03.974
+An example of a project is right here.
+
+00:09:04.274 --> 00:09:06.107
+Goal of the project is to deliver a talk
+
+00:09:06.207 --> 00:09:09.157
+about my organization system,
+
+00:09:09.257 --> 00:09:12.709
+make it like a workshop with pauses for activities.
+
+00:09:13.010 --> 00:09:14.890
+You can see that this is the talk
+
+00:09:14.940 --> 00:09:16.174
+that I am delivering right now.
+
+00:09:16.424 --> 00:09:19.590
+And right now if you see recording the talk, okay?
+
+00:09:19.840 --> 00:09:21.907
+Of course, the next one I'm going to do after this
+
+00:09:21.957 --> 00:09:24.024
+is going to be sending the recorded talk,
+
+00:09:24.074 --> 00:09:25.339
+the file and the PDF for the talk.
+
+00:09:25.389 --> 00:09:27.974
+Now, if you want, you can add some sub steps and all that
+
+00:09:28.024 --> 00:09:28.774
+also into this.
+
+00:09:29.174 --> 00:09:31.599
+Of course, I'd like to thank the coordinators for their
+
+00:09:31.600 --> 00:09:33.479
+absolutely wonderful work that they're doing
+
+00:09:33.480 --> 00:09:35.240
+throughout this, okay?
+
+00:09:35.640 --> 00:09:37.274
+Now, tasks for you.
+
+00:09:37.474 --> 00:09:38.579
+You can take your time.
+
+00:09:38.779 --> 00:09:40.440
+And first of all, think of a project
+
+00:09:40.490 --> 00:09:42.374
+that you have to absolutely get done.
+
+00:09:43.474 --> 00:09:48.274
+Create a folder on your computer or phone
+
+00:09:48.324 --> 00:09:49.557
+with the name of the project.
+
+00:09:50.157 --> 00:09:51.724
+Create a todo.org.
+
+00:09:52.024 --> 00:09:56.024
+If you want to use a notebook, you can use a fresh leaf.
+
+00:09:56.524 --> 00:10:00.074
+Write down all the tasks associated with this project.
+
+00:10:00.524 --> 00:10:02.524
+That's going to be how you handle it, right?
+
+NOTE Multiple projects
+
+00:10:02.874 --> 00:10:04.540
+Now, what if you have multiple projects?
+
+00:10:05.490 --> 00:10:08.107
+Not many of us have only one project.
+
+00:10:08.157 --> 00:10:09.757
+In fact, many of us have multiple projects.
+
+00:10:09.807 --> 00:10:11.240
+What do we do in that situation?
+
+00:10:11.790 --> 00:10:12.974
+Well, the answer is simple.
+
+00:10:13.274 --> 00:10:15.174
+Create a folder for each project.
+
+00:10:15.624 --> 00:10:20.157
+Add this Org file called todo into each of those folders
+
+00:10:20.657 --> 00:10:25.040
+and write down the task for all of these projects as well.
+
+00:10:25.190 --> 00:10:29.107
+Write down all of these tasks and mark one of them as next.
+
+00:10:29.207 --> 00:10:30.590
+There can be only one next action.
+
+00:10:30.790 --> 00:10:31.940
+It can't be multiple next actions.
+
+00:10:32.390 --> 00:10:34.840
+That's the immediate thing that has to be done
+
+00:10:34.990 --> 00:10:37.674
+to take this project forward, okay?
+
+NOTE What if the project stops before completion?
+
+00:10:37.874 --> 00:10:40.390
+What if the project stops before completion?
+
+00:10:40.440 --> 00:10:42.974
+There are possibilities sometimes you lose interest,
+
+00:10:43.024 --> 00:10:44.874
+sometimes your collaborator loses interest.
+
+00:10:45.124 --> 00:10:46.707
+What do you do in those situations?
+
+00:10:47.157 --> 00:10:49.590
+Have a folder in your computer or phone
+
+00:10:49.740 --> 00:10:52.040
+for abandoned projects called resources.
+
+00:10:52.590 --> 00:10:53.270
+Oh, by the way,
+
+00:10:53.320 --> 00:10:57.157
+for your projects folder, create an
+
+00:10:57.557 --> 00:11:01.239
+overarching projects folder and inside that are
+
+00:11:01.289 --> 00:11:02.507
+all the project folders.
+
+00:11:02.607 --> 00:11:03.507
+I forgot to tell you that.
+
+00:11:03.707 --> 00:11:06.807
+Same way, on the same level, create a resources folder.
+
+00:11:06.957 --> 00:11:09.057
+That's for all your abandoned projects
+
+00:11:09.107 --> 00:11:13.040
+or even could be on your research material as well,
+
+00:11:13.090 --> 00:11:14.859
+which you are not currently working on.
+
+00:11:15.509 --> 00:11:18.669
+Move this particular project that's abandoned or stopped
+
+00:11:18.769 --> 00:11:20.274
+somewhere in between to that folder.
+
+NOTE What if you successfully complete the project?
+
+00:11:20.974 --> 00:11:23.590
+Now, there's a possibility you might successfully complete.
+
+00:11:23.640 --> 00:11:26.840
+I hope all your projects end up being successful.
+
+00:11:27.190 --> 00:11:30.174
+But there are quite a few which will end up in this,
+
+00:11:30.224 --> 00:11:32.857
+quite a few which will end up abandoned as well.
+
+00:11:33.757 --> 00:11:37.390
+Now, I write an end report so that I can learn from this.
+
+00:11:37.440 --> 00:11:39.274
+What did I enjoy most in the project?
+
+00:11:39.324 --> 00:11:40.574
+What could have been better?
+
+00:11:40.874 --> 00:11:43.024
+What did I learn from this particular project?
+
+00:11:43.724 --> 00:11:45.699
+Now, you will need to move that folder
+
+00:11:45.849 --> 00:11:47.490
+to a folder called archives.
+
+00:11:47.790 --> 00:11:50.757
+This is the final resting place for the project,
+
+00:11:50.807 --> 00:11:53.490
+completed projects because if you come up
+
+00:11:53.540 --> 00:11:55.640
+with another project which sounds similar
+
+00:11:55.690 --> 00:11:56.807
+to the archives one,
+
+00:11:56.857 --> 00:11:59.140
+you can pick that out and create that as a template,
+
+00:11:59.190 --> 00:12:00.124
+use that as a template.
+
+00:12:00.524 --> 00:12:04.290
+Now, why would I have one folder per project
+
+00:12:04.340 --> 00:12:07.457
+when there's only one file sitting in it called todo.org?
+
+00:12:07.757 --> 00:12:10.774
+Well, most projects also have some project files
+
+00:12:10.824 --> 00:12:13.574
+and this folder can be a storehouse of all of that
+
+00:12:13.824 --> 00:12:15.824
+and you can access all of them at one shot.
+
+00:12:16.174 --> 00:12:16.990
+That's the advantage.
+
+NOTE What if the project is ongoing and doesn't really end?
+
+00:12:18.140 --> 00:12:20.740
+What if the project is ongoing and doesn't really end?
+
+00:12:20.790 --> 00:12:23.590
+That doesn't seem to have a deadline or an ending point.
+
+00:12:24.190 --> 00:12:27.107
+That's called an Area. This is now an Area.
+
+00:12:27.157 --> 00:12:31.674
+Examples of Areas: gardening, paying bills, never stops,
+
+00:12:32.024 --> 00:12:34.574
+bills never don't stop, blogging.
+
+00:12:34.624 --> 00:12:36.974
+These are all some examples of Areas that really
+
+00:12:37.024 --> 00:12:39.474
+don't have a definite deadline.
+
+00:12:40.374 --> 00:12:44.559
+For Areas also, create a folder for each of them, right?
+
+00:12:44.710 --> 00:12:47.274
+You can create a parent folder called Areas
+
+00:12:47.324 --> 00:12:50.540
+and under them you can have those areas, okay,
+
+00:12:50.990 --> 00:12:53.519
+and have a todo [file] in each of those folders.
+
+NOTE What if you forget to visit the TODO files?
+
+00:12:54.320 --> 00:12:56.724
+Now what if we forget to visit the todo files
+
+00:12:57.024 --> 00:12:58.824
+which in my case often happens?
+
+00:12:58.974 --> 00:13:00.790
+I forget to visit those todo files
+
+00:13:01.040 --> 00:13:03.540
+and see what the task net needs to be done.
+
+00:13:03.940 --> 00:13:08.174
+You can of course add all of this todo.org
+
+00:13:08.224 --> 00:13:11.110
+and into your org-agenda-files variable
+
+00:13:11.360 --> 00:13:14.014
+so that when you pull up your Org Agenda,
+
+00:13:14.015 --> 00:13:14.729
+all of them show up.
+
+00:13:15.080 --> 00:13:15.790
+That's a good idea.
+
+00:13:16.440 --> 00:13:18.574
+You need to have a weekly review with yourself.
+
+00:13:19.624 --> 00:13:22.090
+Weekly review is essentially a weekly appointment
+
+00:13:22.140 --> 00:13:24.207
+with yourself for you to stay
+
+00:13:24.357 --> 00:13:28.674
+in control of your life or career. To keep things on track.
+
+00:13:29.524 --> 00:13:32.474
+In the weekly review, you need to empty your teacup.
+
+00:13:32.724 --> 00:13:34.974
+That's the first and foremost, okay?
+
+00:13:35.274 --> 00:13:38.539
+Then process all your items in the TODO file.
+
+00:13:39.239 --> 00:13:42.007
+Process all your emails from the last week.
+
+00:13:42.057 --> 00:13:45.340
+Use the exact same structure of do, delete, defer, delegate.
+
+00:13:45.390 --> 00:13:47.074
+These are the four D's that you can use.
+
+00:13:47.474 --> 00:13:51.740
+Process all your messaging app messages from the last week.
+
+00:13:51.890 --> 00:13:54.024
+So last one whole week, whatever has come up,
+
+00:13:54.074 --> 00:13:56.824
+you need to process all of them, okay?
+
+00:13:57.174 --> 00:13:58.174
+In the weekly review,
+
+00:13:58.224 --> 00:14:01.439
+you also need to archive all your emails and
+
+00:14:01.440 --> 00:14:03.839
+messaging app messages that you have processed.
+
+00:14:03.990 --> 00:14:05.707
+You've already taken care of it.
+
+00:14:05.857 --> 00:14:07.690
+You don't need to have it right in front of you.
+
+00:14:07.740 --> 00:14:09.707
+You can move them all into archive.
+
+00:14:09.957 --> 00:14:12.240
+Most messaging apps and email systems
+
+00:14:12.290 --> 00:14:14.774
+have archives as part of their features.
+
+00:14:15.524 --> 00:14:17.124
+Look through the project TODO files
+
+00:14:17.174 --> 00:14:20.290
+to see if the next action is marked, okay?
+
+00:14:20.690 --> 00:14:22.374
+Now look through the project folder list
+
+00:14:22.424 --> 00:14:24.157
+to see if some of them need to be archived
+
+00:14:24.307 --> 00:14:26.274
+or moved to resources.
+
+00:14:26.474 --> 00:14:28.390
+Some may be abandoned, some may be done.
+
+00:14:28.640 --> 00:14:30.490
+You can move them successfully to
+
+00:14:30.540 --> 00:14:32.407
+all of where it needs to belong.
+
+00:14:33.257 --> 00:14:34.942
+Now task for you, you can pause this,
+
+00:14:34.943 --> 00:14:36.290
+of course, and do this.
+
+00:14:36.540 --> 00:14:39.679
+Set an appointment with yourself, sacrosanct time,
+
+00:14:39.730 --> 00:14:42.124
+only with yourself and title it weekly review.
+
+00:14:42.324 --> 00:14:43.674
+Start with half an hour,
+
+00:14:43.924 --> 00:14:45.907
+perhaps you can have it longer later on.
+
+00:14:46.057 --> 00:14:47.712
+As you need more time,
+
+00:14:47.713 --> 00:14:49.096
+you can have more time with yourself.
+
+00:14:49.846 --> 00:14:51.907
+And make it repeating every week.
+
+00:14:53.607 --> 00:14:56.307
+Now you can complain, I can hear you some of you complain
+
+00:14:56.357 --> 00:14:58.507
+“Oh, this is such a microscopic view of my life.
+
+00:14:58.557 --> 00:14:59.707
+What about the big picture?”
+
+00:14:59.857 --> 00:15:03.674
+Well, there is quarterly review, once every 13 weeks
+
+00:15:03.724 --> 00:15:06.107
+you can mark an appointment with yourself.
+
+00:15:06.357 --> 00:15:08.274
+Right after your weekly review
+
+00:15:08.324 --> 00:15:11.240
+to do your quarterly review, okay?
+
+00:15:11.290 --> 00:15:14.116
+And also every year, mark yourself--
+
+00:15:14.117 --> 00:15:15.174
+it could be at the start
+
+00:15:15.224 --> 00:15:18.840
+or the end of an academic year or a calendar year--
+
+00:15:18.990 --> 00:15:21.840
+mark yourself an appointment again with yourself
+
+00:15:21.940 --> 00:15:22.890
+called yearly review.
+
+00:15:23.790 --> 00:15:26.474
+And these contain some big life questions, okay?
+
+00:15:27.074 --> 00:15:31.157
+Now I'll give you some examples but feel free to modify it,
+
+00:15:31.207 --> 00:15:32.274
+have it as your own.
+
+00:15:33.324 --> 00:15:34.799
+How much money did I make?
+
+00:15:34.850 --> 00:15:36.540
+How much money did I save?
+
+00:15:36.640 --> 00:15:38.440
+How many people did I help?
+
+00:15:39.040 --> 00:15:42.307
+How many do I plan to help in the future?
+
+00:15:43.457 --> 00:15:44.690
+What projects did I enjoy?
+
+00:15:44.740 --> 00:15:47.707
+Look through your archives and resources.
+
+00:15:47.907 --> 00:15:49.840
+Which one are best avoided?
+
+00:15:49.890 --> 00:15:52.440
+I don't want to get on to this, okay?
+
+00:15:52.490 --> 00:15:55.359
+You can look through a personal and private… I'm sorry…
+
+00:15:55.360 --> 00:15:56.707
+personal and professional and
+
+00:15:56.757 --> 00:15:59.324
+see how much is there a balance between all of these.
+
+00:15:59.724 --> 00:16:01.640
+These are some questions you can answer.
+
+NOTE Planning for the future
+
+00:16:02.740 --> 00:16:04.840
+Now that you know how to manage them now...
+
+00:16:04.890 --> 00:16:06.590
+So far we have looked at the now,
+
+00:16:06.840 --> 00:16:08.240
+how do you plan for the future?
+
+00:16:08.290 --> 00:16:09.674
+like really into the future?
+
+00:16:10.224 --> 00:16:13.174
+Well, I have a trick called nine windows for you.
+
+00:16:13.474 --> 00:16:15.340
+Nine windows are essentially,
+
+00:16:15.640 --> 00:16:18.257
+it's like a tic-tac-toe grid
+
+00:16:18.507 --> 00:16:25.174
+and the left column is your past,
+
+00:16:25.574 --> 00:16:27.740
+the middle column is your present
+
+00:16:28.090 --> 00:16:31.740
+and the right column is your future, okay?
+
+00:16:31.940 --> 00:16:37.590
+and the bottom row is your skill set,
+
+00:16:37.940 --> 00:16:40.519
+the middle row is what you do
+
+00:16:40.920 --> 00:16:44.607
+and the top row is whom do you work for
+
+00:16:44.657 --> 00:16:46.674
+or whom do you serve, right?
+
+00:16:46.724 --> 00:16:50.349
+So you are doing something for an organization
+
+00:16:50.500 --> 00:16:51.869
+so those could be in your top row.
+
+00:16:52.570 --> 00:16:54.974
+Let me give you an example from my own life.
+
+00:16:55.424 --> 00:16:58.874
+This I made about 10 years ago, okay?
+
+00:16:59.024 --> 00:17:05.674
+So the middle column is the what I did 10 years ago.
+
+00:17:05.724 --> 00:17:09.207
+So that is the now let's keep it as the now, okay?
+
+00:17:09.257 --> 00:17:11.390
+So five years before that, I used to work
+
+00:17:11.440 --> 00:17:12.990
+for General Electric (GE).
+
+00:17:13.090 --> 00:17:14.790
+I was a research scientist for them
+
+00:17:15.240 --> 00:17:16.874
+and the skills that I had was:
+
+00:17:16.924 --> 00:17:22.474
+I had a PhD which was used in this profession.
+
+00:17:22.824 --> 00:17:23.740
+I had writing skills,
+
+00:17:23.790 --> 00:17:25.224
+I had some teaching skills,
+
+00:17:25.424 --> 00:17:28.224
+and I love to interact and learn from my teammates.
+
+00:17:29.224 --> 00:17:32.540
+Then I joined Mindtree, which was the current job
+
+00:17:32.590 --> 00:17:35.774
+when I did this, software services company.
+
+00:17:36.824 --> 00:17:38.474
+I co-founded TRIZIndia also.
+
+00:17:38.524 --> 00:17:40.574
+These are two organizations that I served.
+
+00:17:41.124 --> 00:17:44.940
+And facilitator, that was the main profession that I was in.
+
+00:17:45.240 --> 00:17:46.874
+And the skills I had was:
+
+00:17:46.924 --> 00:17:47.399
+TRIZ [Theory of Inventive Problem Solving],
+
+00:17:47.800 --> 00:17:51.874
+interacting with people outside of my team,
+
+00:17:52.224 --> 00:17:54.840
+and I could align well with my organization.
+
+00:17:54.890 --> 00:17:56.224
+I knew exactly where they were going
+
+00:17:56.274 --> 00:17:58.407
+and how to align myself, my goals with that.
+
+00:17:59.107 --> 00:18:02.174
+Now, I said, five years later,
+
+00:18:02.224 --> 00:18:04.674
+I want to be an entrepreneur and an author.
+
+00:18:05.174 --> 00:18:06.924
+And I want to do this for,
+
+00:18:07.224 --> 00:18:11.557
+I want to really work with academia and corporate companies.
+
+00:18:11.757 --> 00:18:12.790
+That was my goal.
+
+00:18:13.240 --> 00:18:15.007
+So the skills I needed to have were:
+
+00:18:15.057 --> 00:18:18.157
+marketing, writing, sales, hiring, people management,
+
+00:18:18.207 --> 00:18:19.474
+all of that I needed to have.
+
+00:18:19.924 --> 00:18:21.490
+And I had to plan that so I used
+
+00:18:21.540 --> 00:18:22.740
+the PARA structure [projects, areas, resources, archives]
+
+00:18:23.090 --> 00:18:27.240
+to manage how I'm going to learn all of these skills
+
+00:18:27.290 --> 00:18:29.207
+and imbibe those and get better at it.
+
+00:18:29.257 --> 00:18:30.357
+So that's where I use this.
+
+00:18:31.157 --> 00:18:32.439
+Ok, your turn.
+
+00:18:32.639 --> 00:18:34.940
+You can pause this video and build your own nine windows
+
+00:18:34.990 --> 00:18:36.007
+to plan for the future.
+
+NOTE Summary
+
+00:18:36.957 --> 00:18:39.957
+So in summary, you need to empty your teacup
+
+00:18:40.007 --> 00:18:42.740
+before engaging with the work in front of you.
+
+00:18:43.040 --> 00:18:45.340
+Use the PARA structure: projects, area,
+
+00:18:45.390 --> 00:18:46.669
+resources and archives.
+
+00:18:46.770 --> 00:18:51.479
+Create this folder structure and use reviews regularly,
+
+00:18:51.480 --> 00:18:53.474
+weekly, quarterly and yearly.
+
+00:18:54.024 --> 00:18:55.740
+Use the nine windows to your advantage
+
+00:18:55.790 --> 00:18:57.290
+for your future career planning
+
+00:18:57.640 --> 00:19:00.340
+and of course, apply PARA to your future plans
+
+00:19:00.440 --> 00:19:02.859
+to plan for those as well, ok?
+
+NOTE References
+
+00:19:03.210 --> 00:19:04.790
+Now, these are the references I have used.
+
+00:19:04.840 --> 00:19:07.240
+heavily borrowed upon Tiago Fortes' PARA,
+
+00:19:07.640 --> 00:19:09.239
+David Allen's “Getting Things Done”
+
+00:19:09.240 --> 00:19:13.039
+and Tasshin's way to implement this in Emacs and Org Mode.
+
+00:19:14.190 --> 00:19:15.457
+These are some acknowledgments.
+
+00:19:15.507 --> 00:19:17.790
+I used some generative AI for this.
+
+00:19:18.290 --> 00:19:20.590
+And this is a question to you:
+
+00:19:20.790 --> 00:19:24.090
+What parts of this talk are you planning on implementing?
+
+00:19:24.140 --> 00:19:26.274
+Please write this in the Etherpad.
+
+00:19:26.824 --> 00:19:28.519
+Thank you so much. If you have any questions,
+
+00:19:28.569 --> 00:19:30.357
+let me know in the Etherpad as well.
+
+00:19:30.857 --> 00:19:32.724
+Good luck managing your tasks,
+
+00:19:33.474 --> 00:19:36.650
+emptying your teacup, and planning for the future.
diff --git a/2024/captions/emacsconf-2024-links--unlocking-linked-data-replacing-specialized-apps-with-an-orgbased-semantic-wiki--abhinav-tushar--main--chapters.vtt b/2024/captions/emacsconf-2024-links--unlocking-linked-data-replacing-specialized-apps-with-an-orgbased-semantic-wiki--abhinav-tushar--main--chapters.vtt
new file mode 100644
index 00000000..89ebbd97
--- /dev/null
+++ b/2024/captions/emacsconf-2024-links--unlocking-linked-data-replacing-specialized-apps-with-an-orgbased-semantic-wiki--abhinav-tushar--main--chapters.vtt
@@ -0,0 +1,19 @@
+WEBVTT
+
+00:00:00.000 --> 00:01:30.000
+Specialized Apps and Linked Data
+
+00:01:30.000 --> 00:02:53.000
+Discovering Org Roam and Linked Notes
+
+00:02:53.000 --> 00:06:35.000
+Enhanced Org Roam Buffer: Rich Links and Similar Nodes
+
+00:06:35.000 --> 00:08:26.000
+Semantic Search on Link Contexts
+
+00:08:26.000 --> 00:10:38.000
+Exposing notes outside Emacs
+
+00:10:38.000 --> 00:11:20.000
+Future Directions and Potential Improvements \ No newline at end of file
diff --git a/2024/captions/emacsconf-2024-links--unlocking-linked-data-replacing-specialized-apps-with-an-orgbased-semantic-wiki--abhinav-tushar--main.vtt b/2024/captions/emacsconf-2024-links--unlocking-linked-data-replacing-specialized-apps-with-an-orgbased-semantic-wiki--abhinav-tushar--main.vtt
new file mode 100644
index 00000000..19d42157
--- /dev/null
+++ b/2024/captions/emacsconf-2024-links--unlocking-linked-data-replacing-specialized-apps-with-an-orgbased-semantic-wiki--abhinav-tushar--main.vtt
@@ -0,0 +1,841 @@
+WEBVTT captioned by abhinav
+
+00:00:00.560 --> 00:00:02.560
+Hello. My name is Abhinav, and I'm going
+
+00:00:02.560 --> 00:00:04.880
+to talk about unlocking linked data in Org
+
+00:00:04.880 --> 00:00:07.120
+Mode. So, like, a lot of you, I
+
+00:00:07.120 --> 00:00:09.360
+use Emacs and Org Mode for keeping a
+
+00:00:09.360 --> 00:00:12.320
+lot of my data, personal information. For example,
+
+00:00:12.320 --> 00:00:14.775
+if I'm trying to, you know, write journal
+
+00:00:14.775 --> 00:00:16.535
+entries, it's most likely going to be an
+
+00:00:16.535 --> 00:00:18.615
+Org Mode file. If I'm trying to save
+
+00:00:18.615 --> 00:00:21.015
+bookmarks or save links, again, they go into
+
+00:00:21.015 --> 00:00:23.415
+an Org Mode file. Now, I was doing
+
+00:00:23.415 --> 00:00:26.375
+that earlier, but, last year, I think I
+
+00:00:26.695 --> 00:00:28.615
+around last year, I started to use these
+
+00:00:28.615 --> 00:00:31.390
+specialized applications. So, you know, for example, if
+
+00:00:31.390 --> 00:00:33.710
+I'm trying to save bookmarks, I'm going to
+
+00:00:33.710 --> 00:00:37.230
+use a bookmark manager. I specifically was using
+
+00:00:37.230 --> 00:00:39.870
+Raindrop for it. What happened with that is
+
+00:00:39.870 --> 00:00:42.590
+that it allowed me to save bookmarks. Let's
+
+00:00:42.590 --> 00:00:43.790
+say, you know, when I'm on go, I'm
+
+00:00:43.790 --> 00:00:45.470
+on a mobile phone, I can just,
+
+00:00:45.470 --> 00:00:47.594
+you know, open my Android app and then
+
+00:00:47.594 --> 00:00:50.235
+save links there. I can also annotate and,
+
+00:00:50.235 --> 00:00:51.355
+you know, do other things that you can
+
+00:00:51.355 --> 00:00:54.235
+do on bookmarks. Similarly, you know, for reading,
+
+00:00:54.235 --> 00:00:56.074
+let's say, papers and PDFs, I would use
+
+00:00:56.074 --> 00:01:00.074
+Zotero. For, keeping notes about people, I'll use
+
+00:01:00.074 --> 00:01:03.650
+a tool called Monica CRM. Now all these
+
+00:01:03.650 --> 00:01:05.650
+tools, their aim is to kind of
+
+00:01:05.650 --> 00:01:08.050
+do one thing really well, but they kind
+
+00:01:08.050 --> 00:01:09.730
+of work in their own silos, and it's
+
+00:01:09.730 --> 00:01:11.810
+very hard to link data from one to
+
+00:01:11.810 --> 00:01:13.730
+another. For example, if you have a journal
+
+00:01:13.730 --> 00:01:16.855
+application, you can say things like, you know,
+
+00:01:16.855 --> 00:01:18.795
+"Hey today, I met this person, and then,
+
+00:01:18.935 --> 00:01:20.855
+you know, this person gave me this recipe,"
+
+00:01:20.855 --> 00:01:23.915
+whatever. But you know that the person information
+
+00:01:24.615 --> 00:01:26.375
+is still kept in a different application, and
+
+00:01:26.375 --> 00:01:27.895
+the recipe information is still kept in a
+
+00:01:27.895 --> 00:01:30.235
+different application. You have to, like, you know,
+
+00:01:30.720 --> 00:01:32.079
+like, do a lot of work to kind
+
+00:01:32.079 --> 00:01:35.920
+of make them come together. So, one thing
+
+00:01:35.920 --> 00:01:37.600
+that happened also last year was that I
+
+00:01:37.600 --> 00:01:39.840
+started using Org Roam a lot. So Org
+
+00:01:39.840 --> 00:01:41.920
+Roam is a Zettelkasten system, you know,
+
+00:01:41.920 --> 00:01:45.025
+which allows you to have linked notes. I'll
+
+00:01:45.025 --> 00:01:46.625
+not go too much into that detail, but
+
+00:01:46.625 --> 00:01:48.945
+basically, with Org Roam, you can, you know,
+
+00:01:48.945 --> 00:01:50.785
+have a lot of these text based files
+
+00:01:50.785 --> 00:01:53.025
+that you make anyway and then keep them
+
+00:01:53.025 --> 00:01:55.345
+connected and then, you know, like, have this
+
+00:01:55.345 --> 00:01:57.985
+knowledge base that you can build, around your
+
+00:01:57.985 --> 00:02:02.040
+information, your data. While it's a good system,
+
+00:02:02.040 --> 00:02:04.299
+I still feel like it's not very pro
+
+00:02:04.680 --> 00:02:07.080
+on providing, you know, very good amount of
+
+00:02:07.080 --> 00:02:10.520
+tools for, working with links. I'll show two
+
+00:02:10.520 --> 00:02:12.920
+kind of things. First is that, I'll show
+
+00:02:12.920 --> 00:02:16.885
+how my current knowledge base looks like, what
+
+00:02:16.885 --> 00:02:18.965
+kind of, you know, workflow I kind of
+
+00:02:18.965 --> 00:02:21.205
+use to save, let's say, any information or
+
+00:02:21.205 --> 00:02:22.644
+how do I, like, you know, connect new
+
+00:02:22.644 --> 00:02:25.924
+notes. The other is that because while this
+
+00:02:25.924 --> 00:02:28.084
+information base is working out well for
+
+00:02:28.084 --> 00:02:31.689
+me, I still want all of my external
+
+00:02:31.750 --> 00:02:34.470
+usages to be, you know, to be reflected
+
+00:02:34.470 --> 00:02:37.030
+back into this database of text files. So
+
+00:02:37.030 --> 00:02:38.950
+if I'm browsing something, I still want that
+
+00:02:38.950 --> 00:02:40.790
+thing to be, you know, saved in my
+
+00:02:40.790 --> 00:02:43.975
+Org Mode files, whether I'm browsing on Android
+
+00:02:43.975 --> 00:02:46.475
+or I'm browsing on, let's say, Firefox
+
+00:02:46.535 --> 00:02:49.015
+somewhere on a laptop. So, I'll show you
+
+00:02:49.015 --> 00:02:50.615
+those two things here. It's going to be
+
+00:02:50.615 --> 00:02:52.215
+a short talk, and then, yeah, hope you
+
+00:02:52.215 --> 00:02:54.855
+like it. Okay. So we'll start with this
+
+00:02:54.855 --> 00:02:57.830
+thing. So this is a simple Org Roam
+
+00:02:57.830 --> 00:02:59.990
+node. It's, you know, it's a dummy node.
+
+00:02:59.990 --> 00:03:01.190
+I've made, like, a lot of dummy nodes
+
+00:03:01.190 --> 00:03:03.110
+here just to kind of show, so, you
+
+00:03:03.110 --> 00:03:05.590
+know, maybe some of those information will be
+
+00:03:05.590 --> 00:03:08.470
+sparse, but I hope I convey the
+
+00:03:08.630 --> 00:03:12.555
+meaning clearly. Okay. So here, if you usually,
+
+00:03:12.635 --> 00:03:14.234
+you know, if you're just using plain Org
+
+00:03:14.234 --> 00:03:15.995
+Mode, you just have this file. Right? There's
+
+00:03:15.995 --> 00:03:19.114
+nothing else. Now if you are using Org
+
+00:03:19.114 --> 00:03:20.875
+Roam, you can do something called org-roam-
+
+00:03:20.875 --> 00:03:23.034
+buffer-toggle, which will show you, you know,
+
+00:03:23.034 --> 00:03:26.610
+a few of those connected nodes. Now, usually,
+
+00:03:26.750 --> 00:03:29.470
+the connections are shown here, they only show
+
+00:03:29.470 --> 00:03:32.190
+you backlinks. So, basically, any other node that
+
+00:03:32.190 --> 00:03:34.270
+has linked to this node is going to
+
+00:03:34.270 --> 00:03:36.910
+be shown there. But in my extension, you
+
+00:03:36.910 --> 00:03:40.485
+can see more things. For example, here, in
+
+00:03:40.485 --> 00:03:42.985
+this case, you can see, first of all,
+
+00:03:43.125 --> 00:03:45.364
+we show both links. So any link from
+
+00:03:45.364 --> 00:03:47.765
+this node to something else, will also be
+
+00:03:47.765 --> 00:03:49.285
+shown there. Any link from that node to
+
+00:03:49.285 --> 00:03:52.099
+something else will also be shown there. So
+
+00:03:52.099 --> 00:03:54.420
+you can see, that is one thing. The
+
+00:03:54.420 --> 00:03:56.099
+other thing is that all these links are
+
+00:03:56.099 --> 00:03:58.739
+categorized in, you know, type of notes. For
+
+00:03:58.739 --> 00:04:02.260
+example, when this note specifically right now is
+
+00:04:02.260 --> 00:04:05.005
+of kind book. Tag is one identifier for
+
+00:04:05.005 --> 00:04:06.045
+it, but there are, like, other ways to
+
+00:04:06.045 --> 00:04:09.165
+identify, you know, a kind of note. But
+
+00:04:09.165 --> 00:04:11.165
+this is connected to another node, which is
+
+00:04:11.165 --> 00:04:13.084
+of a kind person. So as you
+
+00:04:13.084 --> 00:04:15.165
+can see, the, Person A asked me to
+
+00:04:15.165 --> 00:04:16.685
+read this book. So, you know, that link
+
+00:04:16.685 --> 00:04:19.170
+is shown there in a very, rich format.
+
+00:04:19.170 --> 00:04:20.769
+So we have, like, more information about the
+
+00:04:20.769 --> 00:04:23.970
+link, in this. The other thing that you
+
+00:04:23.970 --> 00:04:26.610
+can see there is that, there are also
+
+00:04:26.610 --> 00:04:29.570
+links which are not existing right now, but
+
+00:04:29.570 --> 00:04:32.530
+they could be, you know, possibly interesting for
+
+00:04:32.530 --> 00:04:34.675
+me. So these are similar nodes. So these
+
+00:04:34.755 --> 00:04:36.514
+you can see the scores of similarity and
+
+00:04:36.514 --> 00:04:38.435
+then, you know, other nodes like Book on
+
+00:04:38.435 --> 00:04:40.354
+Mathematics, which is another dummy node that
+
+00:04:40.354 --> 00:04:42.995
+I made for this demo. Now these are
+
+00:04:42.995 --> 00:04:44.275
+nodes which, you know, again, I can just
+
+00:04:44.275 --> 00:04:45.474
+go in there and I can see if
+
+00:04:45.474 --> 00:04:47.389
+maybe they make sense or if, you know,
+
+00:04:47.710 --> 00:04:50.210
+I can just, like, make those connections explicitly.
+
+00:04:51.150 --> 00:04:53.229
+So let's let's try some other node here.
+
+00:04:53.229 --> 00:04:55.229
+So let's say so this is a node
+
+00:04:55.229 --> 00:04:57.389
+of a recipe. It's Bombay
+
+00:04:57.389 --> 00:04:59.550
+Sandwich. It's the recipe I made. Now if
+
+00:04:59.550 --> 00:05:01.389
+you go here on the right, you can
+
+00:05:01.389 --> 00:05:03.775
+see, you know, there's, like, some things on,
+
+00:05:04.095 --> 00:05:07.135
+some person liking the sandwich. There are some
+
+00:05:07.135 --> 00:05:09.775
+related notes also, similar notes which I have
+
+00:05:09.775 --> 00:05:12.575
+not linked. Plus, there are some journal entries.
+
+00:05:12.575 --> 00:05:15.855
+Now I use Org-Roam daily to kind of,
+
+00:05:15.855 --> 00:05:19.930
+you know, write down journal entries. And then,
+
+00:05:20.710 --> 00:05:22.150
+you know, what I have to do there
+
+00:05:22.150 --> 00:05:24.070
+is basically just write whatever I want and
+
+00:05:24.070 --> 00:05:25.590
+then just, you know, make those links to
+
+00:05:25.590 --> 00:05:28.630
+this node. So for doing
+
+00:05:28.630 --> 00:05:31.030
+that, I can see, that there were two
+
+00:05:31.030 --> 00:05:32.630
+days where I made Bombay Sandwich, and I
+
+00:05:32.630 --> 00:05:35.465
+had some observations around it, which, you know,
+
+00:05:35.465 --> 00:05:38.505
+you can see here. Right. Same so same
+
+00:05:38.505 --> 00:05:39.865
+for person. Let's say if you go to
+
+00:05:39.865 --> 00:05:41.705
+Person B, you can see that, you know,
+
+00:05:41.705 --> 00:05:43.385
+this person has, again, link to Person A
+
+00:05:43.385 --> 00:05:45.865
+and there's, like, some information around it. Plus,
+
+00:05:45.865 --> 00:05:50.050
+there are some similar notes there. This works
+
+00:05:50.050 --> 00:05:52.210
+really well. The similarity function works really well
+
+00:05:52.210 --> 00:05:54.530
+if you are basically trying to go to,
+
+00:05:54.530 --> 00:05:56.530
+you know, bookmarks that I have saved. So
+
+00:05:56.530 --> 00:05:58.470
+for example, here's a bookmark that I saved,
+
+00:05:58.610 --> 00:06:01.605
+which is, Google at Interspeech 2023. Now
+
+00:06:01.605 --> 00:06:03.845
+this bookmark is a blog post from Google
+
+00:06:03.845 --> 00:06:07.525
+AI team. Basically, you know, tells what research
+
+00:06:07.525 --> 00:06:09.785
+publications they had in this conference.
+
+00:06:10.005 --> 00:06:11.445
+Now if you go to the Similar Nodes
+
+00:06:11.445 --> 00:06:13.365
+here, you can see a very similar blog
+
+00:06:13.365 --> 00:06:15.925
+post from Google's team for other conferences that
+
+00:06:15.925 --> 00:06:17.840
+they attended. Right? Now this is very helpful
+
+00:06:17.840 --> 00:06:19.860
+for me, especially when I'm, like, reading something,
+
+00:06:20.240 --> 00:06:21.840
+later. So I, like, save a lot of
+
+00:06:21.840 --> 00:06:24.400
+links together. And then when I'm deciding
+
+00:06:24.400 --> 00:06:26.080
+to read something, I just open this and
+
+00:06:26.080 --> 00:06:28.319
+then see, you know, how everything is connected,
+
+00:06:28.319 --> 00:06:30.159
+what what else I have saved. Should I
+
+00:06:30.159 --> 00:06:32.625
+read something else or not? One interesting feature
+
+00:06:32.625 --> 00:06:34.784
+I was realizing I should try out is
+
+00:06:34.784 --> 00:06:37.425
+that, you know, if I go to this
+
+00:06:37.425 --> 00:06:39.985
+node, which is Person B, you can see
+
+00:06:39.985 --> 00:06:42.705
+that while I'm linking this to Person A,
+
+00:06:42.705 --> 00:06:45.040
+I also have some context on that. So
+
+00:06:45.040 --> 00:06:47.600
+I've written specifically uncle of Person
+
+00:06:47.600 --> 00:06:49.600
+A. Now if you have a semantic wiki,
+
+00:06:49.600 --> 00:06:52.240
+you will have a typed link where you
+
+00:06:52.240 --> 00:06:54.000
+don't have a plain link. You also have
+
+00:06:54.000 --> 00:06:55.840
+a type of the link. So in this
+
+00:06:55.840 --> 00:06:57.040
+case, the type of the link could be,
+
+00:06:57.040 --> 00:07:00.895
+you know, it's like `uncle:` whatever
+
+00:07:00.895 --> 00:07:03.335
+that link is. But, you know, I don't
+
+00:07:03.335 --> 00:07:05.175
+want to, like, go into that much detail,
+
+00:07:05.175 --> 00:07:07.335
+and I don't want to, like, learn how
+
+00:07:07.335 --> 00:07:09.175
+to link things, learn what kind of types
+
+00:07:09.175 --> 00:07:10.375
+I can make. So I can just write
+
+00:07:10.375 --> 00:07:12.294
+things in plain text. So I've written this
+
+00:07:12.294 --> 00:07:13.815
+in plain text. What I can do now
+
+00:07:13.815 --> 00:07:16.250
+is I can just search for links like
+
+00:07:16.250 --> 00:07:17.850
+this. For example, I can just do something
+
+00:07:17.850 --> 00:07:21.290
+like family members. Now this will show me
+
+00:07:21.290 --> 00:07:23.370
+all the links which have a context which
+
+00:07:23.370 --> 00:07:27.450
+makes sense as family members. So basically, this
+
+00:07:27.450 --> 00:07:29.610
+is semantic search on links, on the context
+
+00:07:29.610 --> 00:07:31.215
+of the links, and then, you know, it
+
+00:07:31.215 --> 00:07:33.134
+kind of gives me what I want here.
+
+00:07:33.134 --> 00:07:34.895
+For example, here, in this demo, I just
+
+00:07:34.895 --> 00:07:37.134
+had, like, one node, one link, which had
+
+00:07:37.134 --> 00:07:39.455
+this uncle relationship. So that kind of works
+
+00:07:39.455 --> 00:07:41.375
+out. Now let's just try another search. For
+
+00:07:41.375 --> 00:07:44.850
+example, let's say if I'm just typing 'check
+
+00:07:44.850 --> 00:07:47.410
+before meeting'. So these are now again links
+
+00:07:47.410 --> 00:07:49.410
+where I have written something where I kind
+
+00:07:49.410 --> 00:07:52.290
+of should do something before meeting someone. So
+
+00:07:52.290 --> 00:07:54.050
+for example, the first one you can see,
+
+00:07:54.850 --> 00:07:57.705
+there's a person called Meeting Person. It's a
+
+00:07:57.705 --> 00:08:00.745
+demo node again. And, I've written one note
+
+00:08:00.745 --> 00:08:05.085
+about, one connection here is basically saying that,
+
+00:08:05.145 --> 00:08:07.145
+hey, you know, read this link before you
+
+00:08:07.145 --> 00:08:09.720
+go to meet them. Right? So it's also
+
+00:08:09.720 --> 00:08:11.560
+been very helpful for me. There are, like,
+
+00:08:11.560 --> 00:08:13.800
+few patterns where I kind of feel this
+
+00:08:13.800 --> 00:08:17.319
+works out well. As I keep making more
+
+00:08:17.319 --> 00:08:20.120
+of the links and keep writing more context
+
+00:08:20.120 --> 00:08:21.800
+around the link, this kind of works
+
+00:08:21.800 --> 00:08:25.135
+out really helpful. This becomes really helpful for
+
+00:08:25.135 --> 00:08:27.935
+me. Okay. So the other few things, you
+
+00:08:27.935 --> 00:08:30.575
+know, how do I, like, work with, systems
+
+00:08:30.575 --> 00:08:32.735
+outside Emacs. Right? So the first thing
+
+00:08:32.735 --> 00:08:35.054
+is that, you know, the I haven't found
+
+00:08:35.054 --> 00:08:38.510
+anything that works really well for saving bookmarks,
+
+00:08:40.250 --> 00:08:42.250
+when I'm on my Android phone. So I
+
+00:08:42.250 --> 00:08:44.890
+had to make a new applications, application, and
+
+00:08:44.890 --> 00:08:47.930
+it's called pile-android. Now this application basically,
+
+00:08:47.930 --> 00:08:49.290
+you know, lets me do whatever I was
+
+00:08:49.290 --> 00:08:52.085
+doing with Raindrop, which was a bookmark manager.
+
+00:08:52.305 --> 00:08:53.825
+So I can open links. I can read
+
+00:08:53.825 --> 00:08:55.985
+stuff in Firefox on my browser on my,
+
+00:08:56.385 --> 00:08:58.065
+Android phone, and then I can save all
+
+00:08:58.065 --> 00:09:00.625
+of that in my Org Roam database. Org
+
+00:09:00.625 --> 00:09:02.465
+roam database here means the Org Roam files
+
+00:09:02.465 --> 00:09:03.905
+that I have. Because, again, these are plain
+
+00:09:03.905 --> 00:09:06.140
+text file, I can sync them through mobile
+
+00:09:06.140 --> 00:09:08.780
+phone to my, you know, desktop and laptop
+
+00:09:08.780 --> 00:09:11.340
+and everything else. So that's one place where
+
+00:09:11.340 --> 00:09:13.460
+I kind of, you know, stop, going to
+
+00:09:13.460 --> 00:09:16.860
+a, new application. I just basically ingest everything
+
+00:09:16.860 --> 00:09:19.625
+in my Org Roam setup. The other thing
+
+00:09:19.625 --> 00:09:22.444
+is that, when I'm browsing on my laptop,
+
+00:09:22.985 --> 00:09:25.785
+I still want to, you know, collect all
+
+00:09:25.785 --> 00:09:28.504
+the data inside my Org Roam system. So
+
+00:09:28.504 --> 00:09:30.504
+so here's something which I call Org Roam
+
+00:09:30.504 --> 00:09:33.380
+Sidekick. Now what you can do here is
+
+00:09:33.380 --> 00:09:34.740
+that, let's say, if you want to search
+
+00:09:34.740 --> 00:09:37.380
+for something, so you can basically do a
+
+00:09:37.380 --> 00:09:39.139
+search normally, which is going to do a
+
+00:09:39.139 --> 00:09:41.860
+web search. But if you call Org Roam
+
+00:09:41.860 --> 00:09:44.740
+SK, which is Sidekick, it will do a
+
+00:09:44.740 --> 00:09:48.025
+search on all of your Org Roam notes. So
+
+00:09:48.025 --> 00:09:50.905
+now this search is basically using recoll. So
+
+00:09:50.905 --> 00:09:53.145
+recoll kind of indexes all the plain text
+
+00:09:53.145 --> 00:09:54.925
+and does a full text search for you.
+
+00:09:55.385 --> 00:09:57.145
+But this this is really helpful because when
+
+00:09:57.145 --> 00:09:59.190
+I'm searching for something and I still want
+
+00:09:59.190 --> 00:10:00.550
+to know that, hey, you know, hey, I
+
+00:10:00.550 --> 00:10:03.510
+have saved some of those links earlier. So,
+
+00:10:03.830 --> 00:10:05.350
+can I, like, you know, see them back
+
+00:10:05.350 --> 00:10:07.590
+and then, you know, it's a very
+
+00:10:07.590 --> 00:10:09.990
+good way to kind of not lose track
+
+00:10:09.990 --> 00:10:12.665
+of what you've already saved. The other
+
+00:10:12.665 --> 00:10:13.625
+thing I can do is, like, I can
+
+00:10:13.625 --> 00:10:16.605
+also, you know again, since I have saved
+
+00:10:16.745 --> 00:10:20.185
+a project, in my Org Roam, I can
+
+00:10:20.185 --> 00:10:22.905
+basically call, again, Sidekick again, and I can
+
+00:10:22.905 --> 00:10:26.200
+see a note for that. That note here
+
+00:10:26.200 --> 00:10:28.780
+specifically is tracking my tasks for this project.
+
+00:10:29.240 --> 00:10:30.840
+And other than tasks, you know, again, I
+
+00:10:30.840 --> 00:10:32.920
+can see other things like similar notes. I
+
+00:10:32.920 --> 00:10:36.040
+can see, you know, other links that are
+
+00:10:36.040 --> 00:10:39.665
+there. So yeah, so this, there's still some
+
+00:10:39.665 --> 00:10:41.585
+optimizations to be done. I think this, you
+
+00:10:41.585 --> 00:10:44.385
+know, the bookmark here is not very intuitive.
+
+00:10:44.385 --> 00:10:46.385
+I still want, I want this to be
+
+00:10:46.385 --> 00:10:49.685
+following the browser, as I switch tabs.
+
+00:10:50.160 --> 00:10:51.839
+But, again, those things are something I'll work
+
+00:10:51.839 --> 00:10:55.519
+on. Other optimizations include, you know, the way
+
+00:10:55.519 --> 00:10:59.540
+I'm doing the search using ML that needs
+
+00:10:59.600 --> 00:11:02.735
+a little bit of fine tuning because, every
+
+00:11:02.735 --> 00:11:04.175
+time I make a new link, I have
+
+00:11:04.175 --> 00:11:07.375
+to, like, rerun the, you know, re kind of
+
+00:11:07.375 --> 00:11:09.855
+build the features and everything else, which I,
+
+00:11:10.335 --> 00:11:13.855
+need it to be real time. Yeah. So
+
+00:11:13.855 --> 00:11:16.334
+that concludes my talk. Hope you enjoyed it.
+
+00:11:16.734 --> 00:11:18.355
+Let me know if there are any questions.
+
+00:11:18.814 --> 00:11:19.554
+Thank you.
diff --git a/2024/captions/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--answers.vtt b/2024/captions/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--answers.vtt
new file mode 100644
index 00000000..803d43df
--- /dev/null
+++ b/2024/captions/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--answers.vtt
@@ -0,0 +1,996 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:04.839
+I'm doing great. Good to hear from you guys. Yeah, I mean,
+
+00:00:04.840 --> 00:00:07.959
+you've been a regular of the show, I would say, for quite a
+
+00:00:07.960 --> 00:00:11.399
+while, and it's good. I really like the retrospective that
+
+00:00:11.400 --> 00:00:14.959
+you did the first time you attended EmacsConf. And when was
+
+00:00:14.960 --> 00:00:18.759
+it? Was it 2015? I can't actually remember. 2015 was when I
+
+00:00:18.760 --> 00:00:22.319
+presented that, but I did an earlier talk the year before. So
+
+00:00:22.320 --> 00:00:25.479
+yeah, that's why it's kind of thing. It's like, wow, it's
+
+00:00:25.480 --> 00:00:31.279
+been a decade. It's been a while. Yeah, and I'm glad that you
+
+00:00:31.280 --> 00:00:35.559
+are in a much better recording situation than you were in
+
+00:00:35.560 --> 00:00:39.439
+2015 at the back of your colleague's house. It's good to see
+
+00:00:39.440 --> 00:00:44.359
+you at your own place. Well, it's also nice to pre-record and
+
+00:00:44.360 --> 00:00:48.239
+then just share. Yeah, I mean, that's why we keep talking
+
+00:00:48.240 --> 00:00:51.519
+about pre-recording. You know, when we really pushed
+
+00:00:51.520 --> 00:00:53.759
+pre-recordings, I think it was five years ago when we
+
+00:00:53.760 --> 00:00:57.679
+started, people were not really liking it. They thought,
+
+00:00:57.680 --> 00:01:00.039
+oh, but most conferences are just asking you to come and
+
+00:01:00.040 --> 00:01:02.919
+chat. And, you know, I don't need to do the pesky
+
+00:01:02.920 --> 00:01:06.319
+pre-recording. But now, and especially for you regulars,
+
+00:01:06.320 --> 00:01:08.359
+you're really starting to realize that pre-recordings are
+
+00:01:08.360 --> 00:01:11.279
+actually amazing for everyone. You're less stressed on the
+
+00:01:11.280 --> 00:01:14.199
+day of the conference. We, the organizers, are way less
+
+00:01:14.200 --> 00:01:16.519
+stressed. So it's a win-win scenario for absolutely
+
+00:01:16.520 --> 00:01:19.359
+everyone in the equation. Okay, so there's some
+
+00:01:19.360 --> 00:01:22.519
+confirmation bias at work, but I'm not really arguing with
+
+00:01:22.520 --> 00:01:27.639
+what Leo says for the record. It may be that we are just that
+
+00:01:27.640 --> 00:01:30.759
+this stoked that we're lying to ourselves by the
+
+00:01:30.760 --> 00:01:33.959
+opportunity that we have to chat with each of you. Sure.
+
+00:01:33.960 --> 00:01:38.759
+Sure. Sure. I have really appreciated all of the, the
+
+00:01:38.760 --> 00:01:43.559
+transcripts. It's been great that, you know, to be able to
+
+00:01:43.560 --> 00:01:46.519
+read and copy and paste and all that kind of thing. Yeah, it's
+
+00:01:46.520 --> 00:01:49.959
+great. So yeah, let's answer some questions here.
+
+00:01:49.960 --> 00:01:58.159
+Let's see. Yeah, just feel free to jump onto the Etherpad and
+
+00:01:58.160 --> 00:02:01.239
+just drop on the questions. I'll keep answering them all day
+
+00:02:01.240 --> 00:02:07.399
+kind of thing and get better answers as we go along.
+
+NOTE Q: What's the largest code base you've ever tackled with the literate approach (esp. Emacs + Org-mode)?
+
+00:02:07.400 --> 00:02:12.439
+So yeah, the first question here is, what's my largest code base?
+
+00:02:12.440 --> 00:02:18.359
+I kind of touched it in my presentation. However, I think
+
+00:02:18.360 --> 00:02:22.439
+someone just went through and did a better count than it
+
+00:02:22.440 --> 00:02:27.879
+looks like. a little bit more. So
+
+00:02:27.880 --> 00:02:32.959
+as I joked about in the video, we've all worked on larger code
+
+00:02:32.960 --> 00:02:36.799
+bases, but that's still, it's kind of significant. So it's
+
+00:02:36.800 --> 00:02:43.679
+not, so yeah, anyway. So let's talk a little bit about
+
+00:02:43.680 --> 00:02:49.519
+searching for functions here. If you've got your functions
+
+00:02:49.520 --> 00:02:53.679
+in your code or code block, well, you can search for the
+
+00:02:53.680 --> 00:02:59.319
+descriptions, you know, as long as you've evaluated it. And
+
+00:02:59.320 --> 00:03:04.519
+so that wasn't so much of a problem, but I did want to like look
+
+00:03:04.520 --> 00:03:07.839
+at the commentary around any function that I would define.
+
+00:03:07.840 --> 00:03:14.039
+And that's where, yeah, you know, the C-x or the
+
+00:03:14.040 --> 00:03:18.919
+C-f to define that function and display it. It won't
+
+00:03:18.920 --> 00:03:22.279
+pull out the literate stuff around it, obviously, it'll
+
+00:03:22.280 --> 00:03:27.159
+only do the doc header. But if you could search for it and find
+
+00:03:27.160 --> 00:03:30.559
+it quick, then it might be just as useful. And I guess that's
+
+00:03:30.560 --> 00:03:36.079
+why I started getting into seeing if I can't tie that into the
+
+00:03:36.080 --> 00:03:40.839
+X ref. you know, just the standard ways. My first part, I
+
+00:03:40.840 --> 00:03:45.799
+noticed that evil has a different way of searching through
+
+00:03:45.800 --> 00:03:50.999
+for looking for code definitions. That was my first foray
+
+00:03:51.000 --> 00:03:53.959
+into it. It's like, oh, that's not a bad idea. Let's hook it up
+
+00:03:53.960 --> 00:03:58.079
+under, you know, in the standard way.
+
+NOTE Q: Have you ever used org-transclusion?
+
+00:03:58.080 --> 00:04:02.279
+Let's see. Have I ever used org-transclusion?
+
+00:04:02.280 --> 00:04:05.319
+No, I haven't, but I think I want to
+
+00:04:05.320 --> 00:04:08.439
+take a look at it. I haven't heard of it before.
+
+NOTE Q: What is your usage of dynamic blocks in such workflows?
+
+00:04:08.440 --> 00:04:16.519
+Let's see. What's my usage of dynamic blocks in my
+
+00:04:16.520 --> 00:04:21.439
+workflows? You know, that's a real good question. I haven't
+
+00:04:21.440 --> 00:04:26.319
+really used them a lot in all of my workflows, but yeah, it's
+
+00:04:26.320 --> 00:04:29.439
+an interesting, you know, we always start.
+
+00:04:29.440 --> 00:04:30.999
+At first, all
+
+00:04:31.000 --> 00:04:33.679
+we're doing is just taking a few notes, then we start
+
+00:04:33.680 --> 00:04:36.039
+organizing, then we've got links, and then we're writing
+
+00:04:36.040 --> 00:04:39.519
+code blocks, and then agendas, and table, you know, we keep
+
+00:04:39.520 --> 00:04:40.999
+building up on it.
+
+00:04:41.000 --> 00:04:44.399
+I guess I haven't really added that to
+
+00:04:44.400 --> 00:04:46.978
+my workflow, but maybe I'll have to come back
+
+00:04:46.979 --> 00:04:48.839
+and report on that.
+
+NOTE Q: Is the minibuffer being deliberately hidden in this video?
+
+00:04:48.840 --> 00:04:51.599
+Is the mini buffer being deliberately hidden in my
+
+00:04:51.600 --> 00:04:57.879
+video? Not deliberately. I recorded it first and
+
+00:04:57.880 --> 00:05:03.759
+accidentally not clipped the video and turned that all off.
+
+00:05:03.760 --> 00:05:07.359
+So I went through and started fixing all of it. But yeah, so
+
+00:05:07.360 --> 00:05:10.759
+you'll notice the mini buffer kind of comes and goes in the
+
+00:05:10.760 --> 00:05:12.444
+video. Sorry about that.
+
+00:05:12.445 --> 00:05:17.340
+So yeah, it wasn't intentional at all.
+
+NOTE Q: What's your take on Emacs+Org vs. Jupyter notebooks (for interactive programming)?
+
+00:05:17.341 --> 00:05:21.839
+What's my take on Emacs Org versus Jupyter? That's a real
+
+00:05:21.840 --> 00:05:29.519
+good question. I've been toying about seeing if I could do
+
+00:05:29.520 --> 00:05:32.479
+everything that some people do with Jupyter notebooks in
+
+00:05:32.480 --> 00:05:36.079
+order. I don't need to do it as much because I'm still kind of
+
+00:05:36.080 --> 00:05:40.319
+doing a lot of list programming and a lot of my DevOps, which
+
+00:05:40.320 --> 00:05:45.559
+is a lot of shell work and a lot of Python. Most of the Jupyter
+
+00:05:45.560 --> 00:05:49.639
+notebooks, they automatically include a lot of things in
+
+00:05:49.640 --> 00:05:56.679
+from either Julia or Python, like NumPy and all the dynamic
+
+00:05:56.680 --> 00:06:01.439
+stuff that's going on there. Since it has a server,
+
+00:06:01.440 --> 00:06:07.439
+it seems like it's running a lot more stuff and then just
+
+00:06:07.440 --> 00:06:10.719
+shipping it back off into the web app. That has been the
+
+00:06:10.720 --> 00:06:16.239
+biggest challenge as I've tried to kind of duplicate that. I
+
+00:06:16.240 --> 00:06:20.439
+don't really know NumPy and all the math stuff and that sort
+
+00:06:20.440 --> 00:06:25.039
+of stuff that well. So trying to do like matrix
+
+00:06:25.040 --> 00:06:27.359
+multiplications and that kind of thing that seemed to be
+
+00:06:27.360 --> 00:06:33.119
+pretty easy in the Jupyter, it's not very easy in Org. I've
+
+00:06:33.120 --> 00:06:36.639
+attempted to kind of work with Julia and the Julia support
+
+00:06:36.640 --> 00:06:45.759
+for Org is really limited it seems. That's the, So, yeah,
+
+00:06:45.760 --> 00:06:49.199
+there's some improvements we could probably make. So, I
+
+00:06:49.200 --> 00:06:53.159
+think if somebody is comfortable with Jupiter, and that
+
+00:06:53.160 --> 00:06:59.039
+seems to work, you may have to stay there. I don't know how
+
+00:06:59.040 --> 00:07:04.679
+easy. I would be curious to try to see what we could do as a
+
+00:07:04.680 --> 00:07:07.799
+community to kind of make that transition a lot easier.
+
+NOTE Q: Do you think any programming language is more suited to literate programming than another?
+
+00:07:07.800 --> 00:07:12.416
+Do you think any programming language
+
+00:07:12.417 --> 00:07:13.559
+is more suited to literate
+
+00:07:13.560 --> 00:07:16.959
+programming than another? Hey, that's a real good
+
+00:07:16.960 --> 00:07:22.359
+question. A lot of mine is with Emacs Lisp, and obviously
+
+00:07:22.360 --> 00:07:27.639
+that's a first-class citizen in Emacs. Go figure, right? So
+
+00:07:27.640 --> 00:07:33.519
+that one certainly works. A lot depends on the support in the
+
+00:07:33.520 --> 00:07:38.199
+OB version for the Babel work. Python is really well
+
+00:07:38.200 --> 00:07:45.599
+supported, and yeah, Emacs Lisp. Others, Shell, you know,
+
+00:07:45.600 --> 00:07:50.439
+it works, but it's hard to get both the values, the variables
+
+00:07:50.440 --> 00:07:53.479
+out of the environment variables into your thing. So most
+
+00:07:53.480 --> 00:07:58.959
+everything is just with the results of output. So, you know,
+
+00:07:58.960 --> 00:08:03.079
+some languages aren't quite as good as others for sure. I
+
+00:08:03.080 --> 00:08:06.879
+would love to see better support for more interesting
+
+00:08:06.880 --> 00:08:10.439
+languages, especially ones that are compiled. I've been
+
+00:08:10.440 --> 00:08:16.639
+dabbling with Rust and like, yeah, what can we do to have Rust
+
+00:08:16.640 --> 00:08:21.559
+more iterative as well? So...
+
+NOTE Q: Do you use inline org function calls and org babel library and such?
+
+00:08:21.560 --> 00:08:29.159
+Do you use inline org function calls in Org Babel library? So
+
+00:08:29.160 --> 00:08:33.599
+I used to do a lot of Org Babel libraries to kind of share
+
+00:08:33.600 --> 00:08:35.639
+things.
+
+00:08:35.640 --> 00:08:46.399
+Yeah. What I. But yeah. Sorry, I'm just kind of thinking
+
+00:08:46.400 --> 00:08:49.839
+through here. I've done a lot of it in the past. There were a
+
+00:08:49.840 --> 00:08:54.919
+lot of bugs in it. Oh, I don't know, eight years ago when I was
+
+00:08:54.920 --> 00:08:59.359
+playing with it. I bet things have improved a lot more and it
+
+00:08:59.360 --> 00:09:04.239
+probably saved me a lot more effort. Right now, most of the
+
+00:09:04.240 --> 00:09:08.639
+literate devops, the devops kind of stuff that I'm doing, is
+
+00:09:08.640 --> 00:09:14.079
+calling a lot of back-end programs and that sort of thing. So
+
+00:09:14.080 --> 00:09:19.359
+the Org Babel kind of has limited help in that regard. And as
+
+00:09:19.360 --> 00:09:23.999
+far as my Emacs work, well, it's just part of the session. So
+
+00:09:24.000 --> 00:09:26.759
+it's going to be available or not. So that hasn't been as
+
+00:09:26.760 --> 00:09:30.559
+helpful either. So it's kind of dropped off. But I bet if
+
+00:09:30.560 --> 00:09:34.519
+you're using something like, say, Python, it might be a lot
+
+00:09:34.520 --> 00:09:36.969
+more helpful.
+
+NOTE Q: How do you handle the cases where org markup may sometimes interfere with some of the code?
+
+00:09:36.970 --> 00:09:40.159
+Another question, how do you handle the cases
+
+00:09:40.160 --> 00:09:43.999
+where markup may sometimes interfere with some of the code
+
+00:09:44.000 --> 00:09:50.559
+in places where you can't escape? Oh, okay. All right. Let me
+
+00:09:50.560 --> 00:09:54.719
+see if I understand the question correctly.
+
+00:09:54.720 --> 00:10:01.759
+When I, like, when I'm making prose, and I'm talking about a
+
+00:10:01.760 --> 00:10:04.839
+function that I've written somewhere else, like, oh, I need
+
+00:10:04.840 --> 00:10:09.439
+to work on this, or this calls this, and yeah, I'll use the
+
+00:10:09.440 --> 00:10:14.839
+tildes or the equal signs on either side to make sure it's.
+
+00:10:14.840 --> 00:10:20.399
+that it's clear that it's code. In my xref, when I'm doing a
+
+00:10:20.400 --> 00:10:27.479
+thing-at-point so it can go look for that symbol, I do look for
+
+00:10:27.480 --> 00:10:31.919
+those things at the end and strip them off so that I can mark it
+
+00:10:31.920 --> 00:10:35.039
+up and still search and it's still okay. I'm not sure if
+
+00:10:35.040 --> 00:10:39.359
+that's the answer to the question. Yeah, clarifying. I'm
+
+00:10:39.360 --> 00:10:41.759
+making prose. I'm talking about a function I've written
+
+00:10:41.760 --> 00:10:47.319
+somewhere else. Yeah, yeah, yeah, that is what I'm talking
+
+00:10:47.320 --> 00:10:53.279
+about, where a function with tildes on either end, and if I do
+
+00:10:53.280 --> 00:10:57.359
+an xref search find for that symbol, it'll strip that off and
+
+00:10:57.360 --> 00:11:01.439
+then still look for the function name, so I can still mark it
+
+00:11:01.440 --> 00:11:06.219
+correctly.
+
+NOTE Q: You said at the start that literate didn't catch on in corporate DevOps - why not?
+
+00:11:06.220 --> 00:11:08.439
+You said at the start that literate didn't catch on in
+
+00:11:08.440 --> 00:11:14.719
+corporate devops, why not? You know,
+
+00:11:14.720 --> 00:11:18.919
+I guess the big thing is not everybody's using Emacs,
+
+00:11:18.920 --> 00:11:20.610
+and I don't think anybody would be
+
+00:11:20.611 --> 00:11:23.651
+doing literate programming if you didn't
+
+00:11:23.652 --> 00:11:25.199
+have Emacs. I mean, you got to have Org, or it just
+
+00:11:25.200 --> 00:11:29.420
+doesn't work that well, right?
+
+NOTE Q: Why not that full stack on Markdown?
+
+00:11:29.421 --> 00:11:36.359
+Why not that full stack on Markdown? Yeah, so I often do a lot
+
+00:11:36.360 --> 00:11:44.279
+of Markdown. I have got, so I've gone through and make my
+
+00:11:44.280 --> 00:11:49.039
+markdown look a lot like Org. So my headers are the same size
+
+00:11:49.040 --> 00:11:54.759
+as org. When I mark, do the triple back ticks, you know, and
+
+00:11:54.760 --> 00:11:59.279
+specify your language, we can now colorize that.
+
+00:11:59.280 --> 00:12:01.521
+So you can kind of now have it
+
+00:12:01.522 --> 00:12:05.679
+syntactically marked up. It would be
+
+00:12:05.680 --> 00:12:11.199
+interesting if we kind of expanded on Markdown so that I
+
+00:12:11.200 --> 00:12:14.479
+could do a C-c twice on it and run that code block.
+
+00:12:14.480 --> 00:12:22.119
+That's a real good idea. Maybe we should work on that.
+
+NOTE Corwin's aside on orgvm
+
+00:12:22.120 --> 00:12:28.039
+How does your management of TODOs, projects, and tasks
+
+00:12:28.040 --> 00:12:31.679
+interact with this literate mindset? I can't believe I'm
+
+00:12:31.680 --> 00:12:33.879
+going to do this, but Howard, I'm going to break right in
+
+00:12:33.880 --> 00:12:37.119
+there because I just can't. I need to talk about that. So this
+
+00:12:37.120 --> 00:12:41.799
+is I bought a domain. And really what I mean is I have this
+
+00:12:41.800 --> 00:12:45.599
+domain if somebody gets some work done in this area. I'm
+
+00:12:45.600 --> 00:12:48.839
+fascinated by this. That's mostly really actually my whole
+
+00:12:48.840 --> 00:12:52.599
+comment. But I just wanted to say, indeed, that is something
+
+00:12:52.600 --> 00:12:56.599
+maybe we should work on. Well said. I think the idea of having
+
+00:12:56.600 --> 00:12:59.559
+something that's full-stack baked around Emacs is pretty
+
+00:12:59.560 --> 00:13:03.079
+fascinating, just thinking about it as some command line
+
+00:13:03.080 --> 00:13:05.639
+tool that we can run to get some work done, and then there are
+
+00:13:05.640 --> 00:13:07.969
+documents involved, and as you know coming back
+
+00:13:07.970 --> 00:13:10.511
+to the kind of corporate
+
+00:13:10.512 --> 00:13:12.759
+sense of some of the things like there...
+
+00:13:12.760 --> 00:13:15.319
+that's a little dicey the same way a free software
+
+00:13:15.320 --> 00:13:19.038
+project raising money for itself is a little dicey.
+
+00:13:19.039 --> 00:13:21.720
+It might be a necessary way to get through
+
+00:13:21.721 --> 00:13:23.882
+certain kinds of things and like
+
+00:13:23.883 --> 00:13:26.559
+what the corporate side of the world brings to the table
+
+00:13:26.560 --> 00:13:31.989
+Here in my mind is that idea of I've got a formal process,
+
+00:13:31.990 --> 00:13:33.830
+like the process itself is an asset.
+
+00:13:33.831 --> 00:13:35.239
+If I were selling my company,
+
+00:13:35.240 --> 00:13:39.399
+that would be visibly of value to outside auditors that
+
+00:13:39.400 --> 00:13:43.257
+would help us arbitrate the sale. It's just empirical.
+
+00:13:43.258 --> 00:13:48.239
+Then tie that together with free software is maybe a little
+
+00:13:48.240 --> 00:13:53.159
+unstated ethos of doing our work in the open, and you might
+
+00:13:53.160 --> 00:13:58.759
+even deal with some of the ick factor. that you know that for a
+
+00:13:58.760 --> 00:14:05.119
+handler. Maybe so, but yeah, the downside to that is you'd
+
+00:14:05.120 --> 00:14:09.679
+still need to use Emacs to run through it, right? You know,
+
+00:14:09.680 --> 00:14:13.719
+for all those cool features, yes, it would be kind of a yet
+
+00:14:13.720 --> 00:14:17.519
+another killer app that we would have. So my domain name is
+
+00:14:17.520 --> 00:14:22.239
+orgvm, and my concept is really put org into a box, build a UI
+
+00:14:22.240 --> 00:14:25.119
+around it, it executes things that manipulate files that
+
+00:14:25.120 --> 00:14:30.239
+generate, let's say, And that's just one conceptual
+
+00:14:30.240 --> 00:14:34.359
+solution. But I really do think this is a super fun topic. And
+
+00:14:34.360 --> 00:14:37.479
+that's the space. I'm not sure my idea is that wonderful. I
+
+00:14:37.480 --> 00:14:42.439
+personally haven't soaked too many weekends into it. But I
+
+00:14:42.440 --> 00:14:45.159
+just love the way you're thinking in terms of, well, we
+
+00:14:45.160 --> 00:14:49.519
+should think more about that. Gosh, that's great to hear.
+
+NOTE Org and Markdown fragmentation
+
+00:14:49.520 --> 00:14:53.399
+Yeah. Yeah, I mean, just like the talk yesterday on the
+
+00:14:53.400 --> 00:14:57.639
+future of org, it's like, let's standardize it. Because,
+
+00:14:57.640 --> 00:15:03.239
+yeah, we don't want to have org fragmented like Markdown is.
+
+00:15:03.240 --> 00:15:06.839
+Markdown is terribly fragmented. You know, everybody's
+
+00:15:06.840 --> 00:15:10.199
+got different implementations. And Yeah, what I've ended
+
+00:15:10.200 --> 00:15:15.039
+up doing, I don't know if you've seen my blog, but I often I'm
+
+00:15:15.040 --> 00:15:19.119
+always just writing an org and talking to myself and writing
+
+00:15:19.120 --> 00:15:22.919
+questions and answers and essays come out of that. And then
+
+00:15:22.920 --> 00:15:26.319
+I'll put them on my web page and easy. It's easy to publish to a
+
+00:15:26.320 --> 00:15:30.079
+web page. Well, I do the same thing at work, but I need to have
+
+00:15:30.080 --> 00:15:33.319
+it marked down. I don't start Markdown though. I'm always
+
+00:15:33.320 --> 00:15:36.479
+starting an org because that, you know, I can really work
+
+00:15:36.480 --> 00:15:40.239
+through the problem space, you know, executing code blocks
+
+00:15:40.240 --> 00:15:44.759
+and making sure they work and all of that sort of stuff. And
+
+00:15:44.760 --> 00:15:47.959
+then I just export to Markdown and then go cleaned up a little
+
+00:15:47.960 --> 00:15:51.679
+bit if I need to. And that makes sense. But I am editing
+
+00:15:51.680 --> 00:15:55.999
+Markdown afterwards. So yeah, it would be nice. It would be
+
+00:15:56.000 --> 00:16:00.359
+nice. It's just, it's all done over here as opposed to, you
+
+00:16:00.360 --> 00:16:02.879
+know, Adding it over there, but yeah, let's think about
+
+00:16:02.880 --> 00:16:06.519
+every bit as much as as that. You know, I jumped in in the
+
+00:16:06.520 --> 00:16:09.959
+spirit of yes, let's think about it. You know, your, your
+
+00:16:09.960 --> 00:16:12.599
+comments about, let's think about the workflows that work
+
+00:16:12.600 --> 00:16:17.919
+for us. Wow. Does that hit home? Right? So great. Yeah. Yeah.
+
+NOTE Q: How does your management of "TODOs" (projects/tasks) interact with this literate mindset, any insightful things you do on that front?
+
+00:16:17.920 --> 00:16:25.279
+Yeah. Okay. So, uh, on to do's and that sort of thing, um. You
+
+00:16:25.280 --> 00:16:32.199
+know, a lot is the same as it was 10 years ago. At the beginning
+
+00:16:32.200 --> 00:16:33.319
+of every sprint,
+
+00:16:33.320 --> 00:16:38.279
+my company, we're using JIRA.
+
+00:16:38.280 --> 00:16:46.159
+All jokes are valid when I say that. But I just go to its web
+
+00:16:46.160 --> 00:16:49.639
+page. I copy all the tasks that I need to do that sprint. I
+
+00:16:49.640 --> 00:16:54.119
+wrote a function that takes that code and reformats it as a
+
+00:16:54.120 --> 00:16:58.199
+bunch of org tasks for me to do that I can just now have all my
+
+00:16:58.200 --> 00:17:02.799
+to-dos. And I start to work off of that from that point on. So
+
+00:17:02.800 --> 00:17:06.479
+it'll reference all the projects, and I do symlinks to every
+
+00:17:06.480 --> 00:17:12.479
+code base that I need to use. Most of the to-dos I put inside my
+
+00:17:12.480 --> 00:17:16.639
+code block is kind of just for me, just so I can remember it.
+
+00:17:16.640 --> 00:17:21.086
+Because the work that I have to do
+
+00:17:21.087 --> 00:17:24.119
+needs to be tracked a little more
+
+00:17:24.120 --> 00:17:30.629
+fine-grained, I guess. Yeah.
+
+NOTE Q: Do you LP also on larger projects?
+
+00:17:30.630 --> 00:17:33.439
+Do I use LP also on larger
+
+00:17:33.440 --> 00:17:37.199
+projects? More files and nested directories? Yeah, I
+
+00:17:37.200 --> 00:17:43.879
+haven't really done nested directories, but I can now. Now
+
+00:17:43.880 --> 00:17:49.839
+that I've now kind of realized that I have the feature that I
+
+00:17:49.840 --> 00:17:54.439
+demonstrated where I can just jump to any projects for a
+
+00:17:54.440 --> 00:17:59.559
+particular project, all the org files and all the headings
+
+00:17:59.560 --> 00:18:02.439
+show up, that works in nested directories.
+
+00:18:02.440 --> 00:18:10.999
+Oh, okay, yeah, somebody's typing it in. Yeah, so it's
+
+00:18:11.000 --> 00:18:15.359
+definitely possible. And I have now, since I recorded the
+
+00:18:15.360 --> 00:18:20.519
+talk, I've been busy typing in and trying to extract that out
+
+00:18:20.520 --> 00:18:24.479
+of my init file and make it into a package. I'm looking for a
+
+00:18:24.480 --> 00:18:30.239
+good name right now. I'm calling it jobs, jump to project
+
+00:18:30.240 --> 00:18:36.399
+sections. Anyway, but yeah, I think that's kind of a nice,
+
+00:18:36.400 --> 00:18:38.935
+useful feature.
+
+NOTE Q: Have you used Cucumber/Gherkin/BDD and do you think it has a strong overlap to what you talked about here?
+
+00:18:38.936 --> 00:18:41.919
+Have I used Cucumber, Gherkin, and other
+
+00:18:41.920 --> 00:18:44.479
+behavior-driven development?
+
+00:18:44.480 --> 00:18:50.719
+Have I, I mean, I do a lot of...
+
+00:18:50.720 --> 00:19:00.279
+more test driven. I do a lot of unit tests and I just put it
+
+00:19:00.280 --> 00:19:04.679
+right in my code base because if it's in my pros, I can just
+
+00:19:04.680 --> 00:19:07.199
+shove it in there. I've got the test right next to the
+
+00:19:07.200 --> 00:19:11.519
+function that I'm testing. I like that so I can kind of see it.
+
+00:19:11.520 --> 00:19:15.359
+I don't tangle it out to that same source file. I tangle it
+
+00:19:15.360 --> 00:19:19.119
+somewhere else if I tangle it at all because I don't need to. I
+
+00:19:19.120 --> 00:19:23.199
+can just, you know, C-c that and run it. I like that
+
+00:19:23.200 --> 00:19:24.879
+aspect of it.
+
+00:19:24.880 --> 00:19:29.319
+Yeah, just keeping things together. That's the big problem
+
+00:19:29.320 --> 00:19:32.479
+I have with a lot of tests is the tests are somewhere else.
+
+00:19:32.480 --> 00:19:35.319
+It's separate from the code. I like seeing it all together,
+
+00:19:35.320 --> 00:19:39.879
+but a lot depends on how extensive it is. So for a lot of the,
+
+00:19:39.880 --> 00:19:43.359
+you know, the tests that we end up doing where, you know,
+
+00:19:43.360 --> 00:19:47.759
+you've got to do a lot of mocks and a lot of startup and tear
+
+00:19:47.760 --> 00:19:51.839
+down, that kind of thing. Yeah, that doesn't help as much.
+
+00:19:51.840 --> 00:19:54.599
+And you probably have to kind of go old school on that.
+
+NOTE Q: What granularity are you looking for re your org files and contents, with respect to a codebase that it tangles to, or in non-coding contexts?
+
+00:19:54.600 --> 00:20:01.359
+What granularity I'm looking for with my org files and my
+
+00:20:01.360 --> 00:20:03.634
+subcontent? That's a real good question
+
+00:20:03.635 --> 00:20:05.255
+and really subjective.
+
+00:20:05.256 --> 00:20:13.159
+I change that over time. I begin by just dumping.
+
+00:20:13.160 --> 00:20:16.378
+I just dump everything in my head into a file
+
+00:20:16.379 --> 00:20:19.679
+and then I go through and start to refine it.
+
+00:20:19.680 --> 00:20:26.159
+My goal at one point was to have an Emacs config file that was
+
+00:20:26.160 --> 00:20:29.919
+really small and simple. And boy, that just doesn't happen.
+
+00:20:29.920 --> 00:20:35.759
+It's just too fun to add things and try new ideas. And I found
+
+00:20:35.760 --> 00:20:41.839
+my files were just littered with good ideas that were
+
+00:20:41.840 --> 00:20:47.119
+half-baked and not finished. And so it's like, oh, I need to
+
+00:20:47.120 --> 00:20:49.959
+extract these and put them into different files so I can keep
+
+00:20:49.960 --> 00:20:54.359
+it clean. And so I think it's like with any code base, you're
+
+00:20:54.360 --> 00:20:58.999
+just going to keep refactoring. It's an iterative process.
+
+00:20:59.000 --> 00:21:04.199
+So having the ability to, like with an Org file, where you can
+
+00:21:04.200 --> 00:21:09.159
+archive a subtree. Okay, this idea didn't pan out. Archive
+
+00:21:09.160 --> 00:21:13.519
+it. I can come back to it later. Being able to just kind of
+
+00:21:13.520 --> 00:21:20.399
+shove it somewhere else is really a nice little feature. All
+
+00:21:20.400 --> 00:21:25.079
+right. Not a question, just a comment. We need more of your
+
+00:21:25.080 --> 00:21:29.239
+insightful posts and videos. Oh, thanks.
+
+00:21:29.240 --> 00:21:35.519
+I appreciate it. Yes, it's been a fun journey. And I think we
+
+00:21:35.520 --> 00:21:38.519
+are coming up on our time, actually. So that is just an
+
+00:21:38.520 --> 00:21:41.919
+amazing quiz. And it helps me from manipulating, as I said,
+
+00:21:41.920 --> 00:21:46.959
+or as I put it earlier, like my chance as an organizer, or not
+
+00:21:46.960 --> 00:21:50.679
+manipulating, monopolizing my chance as an organizer to
+
+00:21:50.680 --> 00:21:53.439
+just get a chance to pick your brain on all kinds of things,
+
+00:21:53.440 --> 00:21:58.959
+which is too kind, too kind. Appreciate it. It's been fun.
+
+00:21:58.960 --> 00:22:04.679
+All right, I'll try answering more questions online as
+
+00:22:04.680 --> 00:22:07.959
+well. All right, talk to you later. And we appreciate your
+
+00:22:07.960 --> 00:22:10.399
+being in a huge resource that you are to the community.
+
+00:22:10.400 --> 00:22:14.199
+Thanks to everyone for tuning in and we'll be coming over to
+
+00:22:14.200 --> 00:22:18.239
+our next talk in just a moment here. And so bear with us
+
+00:22:18.240 --> 00:22:23.239
+through the transition as we slip into, I think it's our, is
+
+00:22:23.240 --> 00:22:26.919
+that our penultimate or our ultimate talk? We have one or two
+
+00:22:26.920 --> 00:22:30.119
+left, I'm not sure. I think we've got a couple of talks left.
+
+00:22:30.120 --> 00:22:34.079
+I'm back. Thank you, Howard. And we will be moving to the next
+
+00:22:34.080 --> 00:22:37.159
+talk in about six minutes. So if you need to grab some coffee,
+
+00:22:37.160 --> 00:22:42.119
+some tea, use the time wisely. And to confirm, we will have
+
+00:22:42.120 --> 00:22:44.319
+one, two, three more talks this afternoon. So there's still
+
+00:22:44.320 --> 00:22:48.160
+plenty to go around. See you in a bit, folks.
diff --git a/2024/captions/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--main--chapters.vtt b/2024/captions/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--main--chapters.vtt
new file mode 100644
index 00000000..640735ad
--- /dev/null
+++ b/2024/captions/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--main--chapters.vtt
@@ -0,0 +1,47 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:01:35.252
+Introduction
+
+00:01:35.253 --> 00:03:06.331
+Do I still literate?
+
+00:03:06.332 --> 00:04:28.719
+Advantages
+
+00:04:28.720 --> 00:05:24.132
+Disadvantages
+
+00:05:24.133 --> 00:06:24.719
+Ease of typing
+
+00:06:24.720 --> 00:07:22.500
+Keep tangled code sync'd
+
+00:07:22.501 --> 00:08:19.959
+Code evaluation
+
+00:08:19.960 --> 00:09:05.238
+Has that block been eval'd?
+
+00:09:05.239 --> 00:09:26.871
+Evaluating code in a subtree
+
+00:09:26.872 --> 00:10:26.019
+Evaluating code from a distance
+
+00:10:26.020 --> 00:11:26.793
+Navigating by headers
+
+00:11:26.794 --> 00:13:40.479
+Navigating by function names
+
+00:13:40.480 --> 00:14:23.165
+Why literate programming?
+
+00:14:23.166 --> 00:14:55.799
+LP prose isn't comments
+
+00:14:55.800 --> 00:15:51.240
+Summary
diff --git a/2024/captions/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--main.vtt b/2024/captions/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--main.vtt
new file mode 100644
index 00000000..986320d0
--- /dev/null
+++ b/2024/captions/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--main.vtt
@@ -0,0 +1,724 @@
+WEBVTT captioned by sachac
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:09.359
+Can you believe it's been a decade since I started
+
+00:00:09.360 --> 00:00:12.358
+pontificating on literate programming?
+
+00:00:12.359 --> 00:00:17.542
+I am Howard Abrams. In 2015, I spoke at this EmacsConf
+
+00:00:17.543 --> 00:00:21.705
+where I described my challenges I called Literate DevOps.
+
+00:00:21.706 --> 00:00:25.634
+The conference wasn't completely virtual, even though I was.
+
+00:00:25.635 --> 00:00:29.317
+My city of Portland was suffering a citywide electrical outage
+
+00:00:29.318 --> 00:00:33.479
+and I was without power, so I gave the talk in a corner of my
+
+00:00:33.480 --> 00:00:37.439
+friend's living room. People online asking questions and
+
+00:00:37.440 --> 00:00:41.439
+wondering about literate programming... I also see comments
+
+00:00:41.440 --> 00:00:44.599
+explaining why literate programming hasn't caught on in
+
+00:00:44.600 --> 00:00:49.079
+corporate practice. I often don't engage. I mean, is the
+
+00:00:49.080 --> 00:00:51.599
+online arguments and chatter over ignorance or
+
+00:00:51.600 --> 00:00:56.719
+preference? Sure, we're wired differently. I mean, my
+
+00:00:56.720 --> 00:00:59.559
+favorite programming languages put the parentheses
+
+00:00:59.560 --> 00:01:01.939
+before the function name.
+
+00:01:01.940 --> 00:01:03.800
+Literate programming has come a long way
+
+00:01:03.801 --> 00:01:08.519
+since Knuth proposed it in the 19th century. I feel
+
+00:01:08.520 --> 00:01:12.999
+it's come a long way just in the last 10 years. Obviously,
+
+00:01:13.000 --> 00:01:16.399
+this interest is due to Org. I don't think I would bother if
+
+00:01:16.400 --> 00:01:21.359
+all I had was Knuth's original preprocessor. But since I'm
+
+00:01:21.360 --> 00:01:24.839
+talking to fellow nerds about an open source project
+
+00:01:24.840 --> 00:01:27.919
+without corporate backing, let me change the title of my
+
+00:01:27.920 --> 00:01:32.919
+talk and re-pitch Literate Programming in the 24th and a
+
+00:01:32.920 --> 00:01:35.252
+Half Century!
+
+NOTE Do I still literate?
+
+00:01:35.253 --> 00:01:36.653
+People often ask if I still program that way.
+
+00:01:36.654 --> 00:01:42.759
+I guess they want to know if there's any long-term benefits,
+
+00:01:42.760 --> 00:01:45.919
+for many of our tools and our workflows, while initially
+
+00:01:45.920 --> 00:01:51.079
+tantalizing, often don't last. But yes, when I sit down to
+
+00:01:51.080 --> 00:01:57.759
+write a program, I create a file with an extension of .org.
+
+00:01:57.760 --> 00:02:03.799
+I guess you can say I program literally.
+
+00:02:03.800 --> 00:02:07.359
+Let me be transparent. Do I use literate programming during
+
+00:02:07.360 --> 00:02:12.599
+my day job? Yes, but only for personal tools or for initial
+
+00:02:12.600 --> 00:02:16.759
+investigation. At the end of the sprint, I tangle the file
+
+00:02:16.760 --> 00:02:21.079
+and git commit that. My personal projects, on the other
+
+00:02:21.080 --> 00:02:25.679
+hand, are Org files. Since I can't show you the code from
+
+00:02:25.680 --> 00:02:27.839
+my day job, I'm afraid my example code will have a lot of
+
+00:02:27.840 --> 00:02:31.159
+parentheses.
+
+00:02:31.160 --> 00:02:33.955
+I'm sure you won't mind.
+
+00:02:33.956 --> 00:02:37.356
+I like having my Emacs configuration in Org.
+
+00:02:37.357 --> 00:02:40.359
+It's pretty bling. It has over 8,000
+
+00:02:40.360 --> 00:02:44.559
+lines of code. I know, I can hear the screams and gasps over
+
+00:02:44.560 --> 00:02:49.439
+the network. However, the surrounding prose in Org adds
+
+00:02:49.440 --> 00:02:53.410
+10,000 lines, and those lines are non-wrapped paragraphs.
+
+00:02:53.411 --> 00:02:58.119
+I mean, is that large? Sure, we've all worked on
+
+00:02:58.120 --> 00:03:03.639
+larger, so I guess it's not huge. Come on, it's still
+
+00:03:03.640 --> 00:03:06.331
+significant.
+
+NOTE Advantages
+
+00:03:06.332 --> 00:03:09.799
+Advantages? Look who I'm talking to. I'm sure
+
+00:03:09.800 --> 00:03:14.279
+you know the advantages, but indulge me. I feel that one
+
+00:03:14.280 --> 00:03:16.799
+advantage of literate programming, especially with large
+
+00:03:16.800 --> 00:03:20.279
+code bases, is how you can organize and manage the
+
+00:03:20.280 --> 00:03:24.839
+complexity. Most programming languages tame large bases
+
+00:03:24.840 --> 00:03:29.119
+by putting code in separate files. While Org can too, with
+
+00:03:29.120 --> 00:03:32.279
+Org, we can group related functions together under
+
+00:03:32.280 --> 00:03:35.043
+expandable headlines.
+
+00:03:35.044 --> 00:03:37.279
+Here's one. You can see that
+
+00:03:37.280 --> 00:03:40.706
+I've got different sections grouped together.
+
+00:03:40.707 --> 00:03:43.759
+In my original talk, I mentioned how I would attempt to organize
+
+00:03:43.760 --> 00:03:47.839
+my thoughts before coding. I appreciate how I can look back
+
+00:03:47.840 --> 00:03:53.599
+at my notes. In my Emacs configuration, I review the prose to
+
+00:03:53.600 --> 00:03:57.799
+help memorize key bindings.
+
+00:03:57.800 --> 00:04:01.039
+My section on getting email working with Emacs using
+
+00:04:01.040 --> 00:04:04.079
+notmuch means creating small collections of scripts and
+
+00:04:04.080 --> 00:04:08.199
+configuration files. I can tangle them all from one Org
+
+00:04:08.200 --> 00:04:16.799
+file. I like that I can explain each part separately.
+
+00:04:16.800 --> 00:04:20.879
+You just can't beat having links back to Stack Overflow or
+
+00:04:20.880 --> 00:04:25.519
+that GitHub repo where you stole, I mean, became inspired to
+
+00:04:25.520 --> 00:04:28.719
+write your code.
+
+NOTE Disadvantages
+
+00:04:28.720 --> 00:04:34.279
+Literate programming may push the boundaries of our
+
+00:04:34.280 --> 00:04:38.119
+workflows and revealing some abrasion, but we aren't
+
+00:04:38.120 --> 00:04:41.239
+solely working with Org. We have the flexibility of a Lisp
+
+00:04:41.240 --> 00:04:45.119
+engine to file down those rough parts. You may have your
+
+00:04:45.120 --> 00:04:48.159
+concerns. Perhaps you could reach out to me, and with
+
+00:04:48.160 --> 00:04:54.239
+particular issues, maybe we can figure something out.
+
+00:04:54.240 --> 00:04:57.439
+Here is my list of frictions, and the rest of my talk
+
+00:04:57.440 --> 00:05:02.159
+demonstrates my answers and my hacks. The goal in literate
+
+00:05:02.160 --> 00:05:05.039
+programming with Org is that it should not require more
+
+00:05:05.040 --> 00:05:08.679
+effort than non-literate programming. For instance, I
+
+00:05:08.680 --> 00:05:12.119
+shouldn't have to type much more than regular programming
+
+00:05:12.120 --> 00:05:15.719
+to get my code literate. I also shouldn't have to worry about
+
+00:05:15.720 --> 00:05:20.799
+the state between my Org file and the source code. I want
+
+00:05:20.800 --> 00:05:24.132
+to be able to jump around my code just as easily.
+
+NOTE Ease of typing
+
+00:05:24.133 --> 00:05:28.654
+Let me explain more. I've created some templates using
+
+00:05:28.655 --> 00:05:34.679
+yasnippet. Since I was used to the old org-tempo feature,
+
+00:05:34.680 --> 00:05:37.145
+my habit has all the snippets starting with a
+
+00:05:37.146 --> 00:05:40.759
+< character. I'm not sure if I should demonstrate all of them
+
+00:05:40.760 --> 00:05:45.999
+as you may be doing something similar. I like to build on top
+
+00:05:46.000 --> 00:05:49.999
+of characters to remind me that if I just enter a <s, I
+
+00:05:50.000 --> 00:05:53.519
+need to put in the language. But if I append a mnemonic, I can
+
+00:05:53.520 --> 00:05:56.839
+get a full language. Why not do that with a full function
+
+00:05:56.840 --> 00:06:01.199
+definition? In this case, I'm smooshing one yasnippet
+
+00:06:01.200 --> 00:06:11.679
+inside another one in order to save myself some typing.
+
+00:06:11.680 --> 00:06:15.159
+My point here is to pay attention to what slows you down or
+
+00:06:15.160 --> 00:06:24.719
+hinders you from getting the advantages you want.
+
+NOTE Keep tangled code sync'd
+
+00:06:24.720 --> 00:06:28.399
+Do you ever forget to tangle your code? You can append this
+
+00:06:28.400 --> 00:06:31.519
+code to the bottom of your Org file so that it gets tangled
+
+00:06:31.520 --> 00:06:36.159
+every time you save. I've written a function so I can visit
+
+00:06:36.160 --> 00:06:40.559
+that tangled file and then return. I've grouped all my
+
+00:06:40.560 --> 00:06:45.119
+functions together. I've taken a cue from Charles Choi, you
+
+00:06:45.120 --> 00:06:48.639
+know, kickingvegas, and his Casual feature set. But
+
+00:06:48.640 --> 00:06:52.374
+instead of Transient, I've just made a hydra using
+
+00:06:52.375 --> 00:06:57.399
+the major-mode-hydra package. Anyway, this allows me to use and
+
+00:06:57.400 --> 00:07:00.136
+remember my micro-optimizations.
+
+00:07:00.137 --> 00:07:03.697
+If you set the :comments property to link,
+
+00:07:03.698 --> 00:07:06.999
+the tangled output is back-connected.
+
+00:07:07.000 --> 00:07:11.479
+This allows us to edit the tangled code and have it update the
+
+00:07:11.480 --> 00:07:16.879
+Org file. Personally, I don't like this. My source of truth
+
+00:07:16.880 --> 00:07:22.500
+is the Org file, and I tangle as a one-way diode.
+
+NOTE Code evaluation
+
+00:07:22.501 --> 00:07:25.603
+Often a block of code will reference a variable
+
+00:07:25.604 --> 00:07:29.046
+or call a function to find in another block of code.
+
+00:07:29.047 --> 00:07:31.508
+In my original literate DevOps talk,
+
+00:07:31.509 --> 00:07:34.519
+I discussed how to use the output from one block into
+
+00:07:34.520 --> 00:07:37.799
+another block by naming the first block and referencing it
+
+00:07:37.800 --> 00:07:42.159
+with a :var for the second. However, if all the blocks use the
+
+00:07:42.160 --> 00:07:46.039
+same language, you can use sessions, which create a
+
+00:07:46.040 --> 00:07:51.479
+persistent REPL behind the scenes. Let's evaluate the
+
+00:07:51.480 --> 00:07:53.199
+blocks of Python code in this file.
+
+00:07:53.200 --> 00:08:00.119
+The evaluation created a Python REPL. It's available in
+
+00:08:00.120 --> 00:08:04.279
+another buffer. This buffer matches the name of the
+
+00:08:04.280 --> 00:08:07.959
+session, but with surrounding asterisks. Evaluating a
+
+00:08:07.960 --> 00:08:11.399
+code block sends it into the REPL, and now I can work with my
+
+00:08:11.400 --> 00:08:19.959
+code blocks interactively. (That's not quite right.)
+
+NOTE Has that block been eval'd?
+
+00:08:19.960 --> 00:08:24.039
+I primarily hack on Emacs Lisp, and textual changes to
+
+00:08:24.040 --> 00:08:28.199
+variables, functions, or macros--unless you habitually
+
+00:08:28.200 --> 00:08:31.679
+type C-c C-c--may not represent the state of your
+
+00:08:31.680 --> 00:08:35.439
+machine. A similar effect happens in any language that
+
+00:08:35.440 --> 00:08:39.319
+uses sessions. Sure, I can move the point to a block and
+
+00:08:39.320 --> 00:08:42.799
+evaluate, but I have three functions that allow me to
+
+00:08:42.800 --> 00:08:44.734
+evaluate all blocks in a buffer or all blocks in a subtree,
+
+00:08:44.735 --> 00:08:50.199
+or I can, without moving the point, evaluate any block I see.
+
+00:08:50.200 --> 00:08:54.919
+Now, this function here evaluates all blocks in a buffer.
+
+00:08:54.920 --> 00:08:58.279
+Someone mentioned calling this function when you first
+
+00:08:58.280 --> 00:09:02.359
+load a file. I'm not sure that's a good policy. I mean, have
+
+00:09:02.360 --> 00:09:05.238
+you not written a bug?
+
+NOTE Evaluating code in a subtree
+
+00:09:05.239 --> 00:09:08.559
+Since this function right here
+
+00:09:08.560 --> 00:09:12.039
+evaluates only visible blocks, we can limit what Emacs
+
+00:09:12.040 --> 00:09:18.799
+evaluates to a single Org mode section. For instance, with
+
+00:09:18.800 --> 00:09:23.759
+the cursor in one section, I can evaluate just the blocks in
+
+00:09:23.760 --> 00:09:26.871
+that header section.
+
+NOTE Evaluating code from a distance
+
+00:09:26.872 --> 00:09:29.399
+If I can see a block, why clumsily
+
+00:09:29.400 --> 00:09:33.079
+navigate to it when I can extend the avy project to just jump to
+
+00:09:33.080 --> 00:09:40.479
+it? For instance, let's pull this file up. I can jump to any of
+
+00:09:40.480 --> 00:09:41.639
+the four blocks.
+
+00:09:41.640 --> 00:09:50.319
+I think that's quite slick. Now why navigate to a code block
+
+00:09:50.320 --> 00:09:55.799
+solely to evaluate it? Yes, this is a terrible example, but
+
+00:09:55.800 --> 00:09:59.679
+these three blocks set a variable to different values. So
+
+00:09:59.680 --> 00:10:02.599
+without moving the point, I can evaluate any one of them.
+
+00:10:02.600 --> 00:10:09.719
+To be honest, the reason why I wrote this is because I often
+
+00:10:09.720 --> 00:10:13.999
+forget to evaluate a block after editing it. I've moved on,
+
+00:10:14.000 --> 00:10:17.839
+and I just don't want to jump back. Now, I can just evaluate
+
+00:10:17.840 --> 00:10:22.359
+from a distance. I apologize for the previous terrible
+
+00:10:22.360 --> 00:10:26.019
+examples, but I'm quite pleased with this feature.
+
+NOTE Navigating by headers
+
+00:10:26.020 --> 00:10:30.119
+As I mentioned earlier, in a large code base, we organize code by
+
+00:10:30.120 --> 00:10:33.839
+library or module, and each file contains a class composed
+
+00:10:33.840 --> 00:10:37.119
+of methods, functions, variables, fields, et cetera.
+
+00:10:37.120 --> 00:10:39.999
+Literate programming in Org files allows me to add a
+
+00:10:40.000 --> 00:10:43.159
+semantic organization layer where I can group related
+
+00:10:43.160 --> 00:10:46.919
+concepts under headlines. Now, while this isn't specific
+
+00:10:46.920 --> 00:10:50.799
+to literate programming, I wrote a little user interface to
+
+00:10:50.800 --> 00:10:54.296
+allow me to jump to any heading in any Org file
+
+00:10:54.297 --> 00:10:57.679
+in a particular project.
+
+00:10:57.680 --> 00:11:02.879
+These are the headings in my Emacs configuration project.
+
+00:11:02.880 --> 00:11:06.559
+Notice the file name beforehand, before the colon
+
+00:11:06.560 --> 00:11:09.759
+character. The header name and its parent headers are
+
+00:11:09.760 --> 00:11:14.799
+after. Let me search for the LSP sections. Maybe I only want
+
+00:11:14.800 --> 00:11:20.039
+the one for Python. Now I use ripgrep to search the files and
+
+00:11:20.040 --> 00:11:24.559
+then some Lisp to parse the output. Unless someone has
+
+00:11:24.560 --> 00:11:26.793
+already done this, I should package this up on MELPA.
+
+NOTE Navigating by function names
+
+00:11:26.794 --> 00:11:32.199
+What about jumping directly to the definition of a function,
+
+00:11:32.200 --> 00:11:36.799
+variable, or what have you? We can use Emacs's built-in xref
+
+00:11:36.800 --> 00:11:39.879
+library, but these functions don't understand that the
+
+00:11:39.880 --> 00:11:45.319
+source code is in Org files. When I started using Emacs
+
+00:11:45.320 --> 00:11:49.479
+30-something years ago, I would pre-index my source into
+
+00:11:49.480 --> 00:11:53.799
+tag files, but the dumb-jump project uses the newfangled and
+
+00:11:53.800 --> 00:11:58.319
+faster text search programs like ripgrep to find a symbol in
+
+00:11:58.320 --> 00:12:02.319
+real time. I followed this pattern and wrote an extension
+
+00:12:02.320 --> 00:12:08.119
+to the xref API. Now, I want to jump around my code from both
+
+00:12:08.120 --> 00:12:14.519
+code block or in the surrounding prose. I'm sure it
+
+00:12:14.520 --> 00:12:18.199
+comes as no surprise that my presentation is just an Org
+
+00:12:18.200 --> 00:12:23.919
+file. Let's suppose my cursor is on this symbol. I wrote this
+
+00:12:23.920 --> 00:12:28.079
+function for this demonstration. We can jump to the
+
+00:12:28.080 --> 00:12:30.759
+definition and I can jump back.
+
+00:12:30.760 --> 00:12:37.639
+Notice it jumped into an Org file and back out. References,
+
+00:12:37.640 --> 00:12:42.279
+unlike definitions, is where something is defined and
+
+00:12:42.280 --> 00:12:46.919
+where it's used. Well, you know how the xref system works.
+
+00:12:46.920 --> 00:12:52.679
+Here, I can jump to the definition or where it's
+
+00:12:52.680 --> 00:12:59.519
+used. Of course, and jump back. I think this is cool. This
+
+00:12:59.520 --> 00:13:04.319
+should be a nifty package on MELPA. But my code is specific to
+
+00:13:04.320 --> 00:13:08.799
+Lisp, and I'm not completely sure how to make it general. For
+
+00:13:08.800 --> 00:13:13.399
+instance, what is a symbol? If you know the language, this is
+
+00:13:13.400 --> 00:13:17.679
+obvious. But what should the language be when your cursor is
+
+00:13:17.680 --> 00:13:22.639
+in the prose of an Org file? Python only supports sequences
+
+00:13:22.640 --> 00:13:25.559
+of alphanumeric and underscores, but in Lisp, a symbol can
+
+00:13:25.560 --> 00:13:30.399
+be almost any character sequence. I've been stewing on how
+
+00:13:30.400 --> 00:13:34.479
+to do this. I have ideas like prompting during the first
+
+00:13:34.480 --> 00:13:37.719
+query or scanning the language based on the nearest code
+
+00:13:37.720 --> 00:13:40.479
+block. I think I'm babbling.
+
+NOTE Why literate programming?
+
+00:13:40.480 --> 00:13:47.199
+In true geek fashion, I dived into the details before
+
+00:13:47.200 --> 00:13:52.079
+answering some better questions. In my original Literate
+
+00:13:52.080 --> 00:13:55.479
+DevOps talk, I explained the advantages of initially
+
+00:13:55.480 --> 00:13:58.959
+writing down your thoughts, your plans, goals... the
+
+00:13:58.960 --> 00:14:02.879
+user requirements. But what do you do with all that luscious
+
+00:14:02.880 --> 00:14:06.359
+prose afterwards? Well, you do the same thing you do to your
+
+00:14:06.360 --> 00:14:09.279
+initial code. You refactor that prose.
+
+00:14:09.280 --> 00:14:14.759
+Just because the tech surrounding your code is now a
+
+00:14:14.760 --> 00:14:18.799
+first-class citizen doesn't excuse bad code. You want
+
+00:14:18.800 --> 00:14:23.165
+something more from both your code and your prose.
+
+NOTE LP prose isn't comments
+
+00:14:23.166 --> 00:14:25.586
+The prose of your literate program isn't
+
+00:14:25.587 --> 00:14:28.667
+just regurgitation of the code in the block.
+
+00:14:28.668 --> 00:14:31.527
+You want something more helpful.
+
+00:14:31.528 --> 00:14:35.736
+You're really writing a research paper to yourself.
+
+00:14:35.737 --> 00:14:38.577
+I know what you're thinking. You've seen my Git repos.
+
+00:14:38.578 --> 00:14:41.858
+I'm guilty and not always the best example.
+
+00:14:41.859 --> 00:14:44.559
+However, I do get great joy
+
+00:14:44.560 --> 00:14:48.680
+when I see someone ask about something in Emacs
+
+00:14:48.681 --> 00:14:51.041
+and my response is little more than a link
+
+00:14:51.042 --> 00:14:55.799
+to my online repo that I've rendered as a website.
+
+NOTE Summary
+
+00:14:55.800 --> 00:15:01.199
+I'm out of time. I hope this has been interesting
+
+00:15:01.200 --> 00:15:04.359
+philosophically as well as practically, as I think
+
+00:15:04.360 --> 00:15:08.559
+literate programming is the cat's meow. I'm afraid this
+
+00:15:08.560 --> 00:15:11.879
+summary slide is about my home-baked solutions that fit my
+
+00:15:11.880 --> 00:15:15.119
+needs, but hopefully you can recognize your pain points and
+
+00:15:15.120 --> 00:15:17.839
+address them. If you don't need my Literate
+
+00:15:17.840 --> 00:15:21.479
+DevOps-specific techniques for connecting code blocks, I
+
+00:15:21.480 --> 00:15:25.799
+suggest using sessions by default. I highly recommend
+
+00:15:25.800 --> 00:15:28.399
+looking at your workflow and writing snippets to give you
+
+00:15:28.400 --> 00:15:33.159
+less typing for Org blocks. I now jump by headlines in my
+
+00:15:33.160 --> 00:15:37.479
+projects, but extending xref to support Org files made
+
+00:15:37.480 --> 00:15:40.159
+literate programming as easy as programming the
+
+00:15:40.160 --> 00:15:44.319
+old-fashioned way. I do need to make it more general to put up
+
+00:15:44.320 --> 00:15:47.722
+on MELPA, though. Thanks for watching.
+
+00:15:47.723 --> 00:15:51.240
+Happy hacking, my friends.
diff --git a/2024/captions/emacsconf-2024-maxima--emacs-eev-and-maxima-now--eduardo-ochs--main.vtt b/2024/captions/emacsconf-2024-maxima--emacs-eev-and-maxima-now--eduardo-ochs--main.vtt
new file mode 100644
index 00000000..b35c8610
--- /dev/null
+++ b/2024/captions/emacsconf-2024-maxima--emacs-eev-and-maxima-now--eduardo-ochs--main.vtt
@@ -0,0 +1,1887 @@
+WEBVTT captioned by edrx
+Kind: captions
+Language: en-GB
+
+00:00:00.000 --> 00:00:03.000
+Hi! My name is Eduardo Ochs. I'm the author of
+
+00:00:03.000 --> 00:00:07.000
+an obscure package called eev and I
+
+00:00:07.000 --> 00:00:08.000
+think that it's better to start this
+
+00:00:08.000 --> 00:00:10.000
+presentation by the middle of the story -
+
+00:00:10.000 --> 00:00:12.000
+by this word here: Maxima.
+
+00:00:12.000 --> 00:00:15.000
+Maxima is a computer algebra system
+
+00:00:15.000 --> 00:00:17.000
+that has several interfaces. One
+
+00:00:17.000 --> 00:00:20.000
+of them is WxMaxima, that looks very
+
+00:00:20.000 --> 00:00:24.000
+modern and is very pretty, and it
+
+00:00:24.000 --> 00:00:26.000
+looks like this...
+
+00:00:26.000 --> 00:00:30.000
+it's a cell based interface. We can type
+
+00:00:30.000 --> 00:00:32.000
+an expression here and execute it...
+
+00:00:32.000 --> 00:00:35.000
+here's the result.
+
+00:00:35.000 --> 00:00:38.000
+But I don't like that interface
+
+00:00:38.000 --> 00:00:40.000
+because my memory is very bad, and I type
+
+00:00:40.000 --> 00:00:42.000
+very slowly and with lots of mistakes...
+
+00:00:42.000 --> 00:00:46.000
+so for me this ugly interface that
+
+00:00:46.000 --> 00:00:49.000
+I'm going to show now is much better -
+
+00:00:49.000 --> 00:00:51.000
+and here I'm going to show how I am teaching
+
+00:00:51.000 --> 00:00:54.000
+that ugly interface to beginners.
+
+00:00:54.000 --> 00:00:58.000
+If I type f8 on these three lines here
+
+00:00:58.000 --> 00:01:00.000
+it creates a Maxima running inside Emacs -
+
+00:01:00.000 --> 00:01:04.000
+I mean, using a terminal and running inside
+
+00:01:04.000 --> 00:01:06.000
+a shell buffer in Emacs...
+
+00:01:06.000 --> 00:01:09.000
+and if I type f8 on this other the lines here
+
+00:01:09.000 --> 00:01:15.000
+the 'f8's send lines to Maxima, and, ta-daaa,
+
+00:01:15.000 --> 00:01:20.000
+this small program drew this.
+
+00:01:20.000 --> 00:01:23.000
+I live in Brazil and people in
+
+00:01:23.000 --> 00:01:26.000
+developed countries cannot imagine
+
+00:01:26.000 --> 00:01:29.000
+how are the beginners that we have here...
+
+00:01:29.000 --> 00:01:32.000
+in a sense Brazil is another planet.
+
+00:01:32.000 --> 00:01:35.000
+Let me explain why, and also let me
+
+00:01:35.000 --> 00:01:37.000
+explain why Maxima, why Emacs... because
+
+00:01:37.000 --> 00:01:39.000
+people always say "you should use
+
+00:01:39.000 --> 00:01:41.000
+programs that everyone finds intuitive,
+
+00:01:41.000 --> 00:01:43.000
+like VSCode"...
+
+00:01:43.000 --> 00:01:45.000
+well, I teach Calculus in a bad Campus
+
+00:01:45.000 --> 00:01:47.000
+of a good Federal University in Brazil.
+
+00:01:47.000 --> 00:01:50.000
+My university is called UFF, for
+
+00:01:50.000 --> 00:01:53.000
+Universidade Federal Fluminense.
+
+00:01:53.000 --> 00:01:56.000
+The main campus of UFF is in Niterói,
+
+00:01:56.000 --> 00:02:00.000
+that is a big city near Rio de Janeiro,
+
+00:02:00.000 --> 00:02:03.000
+and I work in a city called Rio das Ostras,
+
+00:02:03.000 --> 00:02:03.000
+that is is a small city 200 Kms away
+
+00:02:03.000 --> 00:02:07.000
+from Rio de Janeiro.
+
+00:02:07.000 --> 00:02:09.000
+I started working there in 2009.
+
+00:02:09.000 --> 00:02:13.000
+My campus gets very little funding -
+
+00:02:13.000 --> 00:02:16.000
+that's a long story that I don't have time
+
+00:02:16.000 --> 00:02:20.000
+to tell now - and we get the
+
+00:02:20.000 --> 00:02:22.000
+students that don't get enough marks in
+
+00:02:22.000 --> 00:02:25.000
+the admission process to go to better places.
+
+00:02:25.000 --> 00:02:30.000
+Also, my campus has two institutes -
+
+00:02:30.000 --> 00:02:33.000
+I call them The Institute of Humanities
+
+00:02:33.000 --> 00:02:35.000
+and The Institute of Inhumanities.
+
+00:02:35.000 --> 00:02:38.000
+Each of our institutes has a small building...
+
+00:02:38.000 --> 00:02:41.000
+the Humanities building has lots of plants and
+
+00:02:41.000 --> 00:02:46.000
+lots of graffittis - I call it the Good Building -
+
+00:02:46.000 --> 00:02:49.000
+and the Inhumanities building has lots
+
+00:02:49.000 --> 00:02:51.000
+of rules and prohibitions, and I call it the
+
+00:02:51.000 --> 00:02:51.000
+Evil Building.
+
+00:02:51.000 --> 00:02:56.000
+I heard that the Inhumanities building
+
+00:02:56.000 --> 00:02:58.000
+has a laboratory with computers, and that
+
+00:02:58.000 --> 00:03:00.000
+it doesn't have any machine that runs Linux...
+
+00:03:00.000 --> 00:03:05.000
+but the Inhumanities building is
+
+00:03:05.000 --> 00:03:07.000
+shrouded in mystery, and basically
+
+00:03:07.000 --> 00:03:09.000
+humans avoid it - only inhumans go there.
+
+00:03:09.000 --> 00:03:12.000
+I only discovered how much "another planet"
+
+00:03:12.000 --> 00:03:15.000
+Brazil is a few months ago. In May and June
+
+00:03:15.000 --> 00:03:18.000
+of this year the federal universities in Brazil
+
+00:03:18.000 --> 00:03:21.000
+paralyzed their activities in a nationwide
+
+00:03:21.000 --> 00:03:23.000
+strike for two months, and during the strike
+
+00:03:23.000 --> 00:03:28.000
+the humanity students occupied the
+
+00:03:28.000 --> 00:03:31.000
+Humanities Building and organized lots
+
+00:03:31.000 --> 00:03:31.000
+of activities there.
+
+00:03:31.000 --> 00:03:34.000
+They asked me if I could give some workshops
+
+00:03:34.000 --> 00:03:36.000
+and I offered two hands-on workshops
+
+00:03:36.000 --> 00:03:40.000
+on Free Software for beginners -
+
+00:03:40.000 --> 00:03:45.000
+basically on Emacs and eev, with
+
+00:03:45.000 --> 00:03:49.000
+tutorials with lots of "try this"s...
+
+00:03:49.000 --> 00:03:54.000
+and, as usual, the students of
+
+00:03:54.000 --> 00:03:56.000
+Computer Science and Engineering ignored
+
+00:03:56.000 --> 00:03:59.000
+the workshop completely, and didn't come...
+
+00:03:59.000 --> 00:04:01.000
+but some students of psychology and of
+
+00:04:01.000 --> 00:04:04.000
+Producão Cultural, which is basically
+
+00:04:04.000 --> 00:04:08.000
+techniques for producing cultural
+
+00:04:08.000 --> 00:04:11.000
+activities, came to workshop... and they LOVED
+
+00:04:11.000 --> 00:04:14.000
+the workshop - they found it FUN.
+
+00:04:14.000 --> 00:04:17.000
+And after the workshop I told the
+
+00:04:17.000 --> 00:04:19.000
+students that there are lots of things
+
+00:04:19.000 --> 00:04:22.000
+that, uh, "everyone knows and I don't",
+
+00:04:22.000 --> 00:04:24.000
+and I would like to learn them,
+
+00:04:24.000 --> 00:04:27.000
+but I find them too hard to learn by myself
+
+00:04:27.000 --> 00:04:29.000
+because I'm a dinosaur - I'm only used to
+
+00:04:29.000 --> 00:04:31.000
+interfaces that are very old,
+
+00:04:31.000 --> 00:04:35.000
+and that are not graphical... and one
+
+00:04:35.000 --> 00:04:37.000
+of the examples of the things that I
+
+00:04:37.000 --> 00:04:39.000
+would like to learn was Canva.
+
+00:04:39.000 --> 00:04:42.000
+And then the student of Produção Cultural
+
+00:04:42.000 --> 00:04:45.000
+taught me Canva in 10 minutes,
+
+00:04:45.000 --> 00:04:54.000
+AND THAT CHANGED MY LIFE.
+
+00:04:54.000 --> 00:04:58.000
+Anyway, again, I'm working in that place,
+
+00:04:58.000 --> 00:05:00.000
+Rio das Ostras, since 2009,
+
+00:05:00.000 --> 00:05:04.000
+and the Computer Science students
+
+00:05:04.000 --> 00:05:06.000
+here know lots of programs and languages
+
+00:05:06.000 --> 00:05:08.000
+that I would like to learn, but in all
+
+00:05:08.000 --> 00:05:11.000
+these 15 years the Computer Science
+
+00:05:11.000 --> 00:05:14.000
+students only helped me twice.
+
+00:05:14.000 --> 00:05:17.000
+It turns out that our Inhumanities
+
+00:05:17.000 --> 00:05:20.000
+students don't have a culture of sharing
+
+00:05:20.000 --> 00:05:26.000
+and helping - but our Humanities students do.
+
+00:05:26.000 --> 00:05:29.000
+Another detail about how much Brazil
+
+00:05:29.000 --> 00:05:30.000
+is another planet...
+
+00:05:30.000 --> 00:05:33.000
+well, I only discovered this very
+
+00:05:33.000 --> 00:05:38.000
+recently, too... my research is in Logic,
+
+00:05:38.000 --> 00:05:40.000
+I sometimes go to conferences, usually in
+
+00:05:40.000 --> 00:05:44.000
+Brazil, very rarely outside, and people
+
+00:05:44.000 --> 00:05:46.000
+here don't bring their laptops to the
+
+00:05:46.000 --> 00:05:49.000
+conferences - we don't have a culture
+
+00:05:49.000 --> 00:05:51.000
+of sitting together with friends
+
+00:05:51.000 --> 00:05:54.000
+or colleagues to learn with them how to
+
+00:05:54.000 --> 00:05:56.000
+use the programs that they use...
+
+00:05:56.000 --> 00:06:01.000
+for example, many of my friends
+
+00:06:01.000 --> 00:06:05.000
+are logicians, so they have to draw
+
+00:06:05.000 --> 00:06:08.000
+lots of diagrams, and I don't know how
+
+00:06:08.000 --> 00:06:13.000
+they use their programs to draw diagrams...
+
+00:06:13.000 --> 00:06:15.000
+I don't know how things are in
+
+00:06:15.000 --> 00:06:18.000
+universities with good computer labs but,
+
+00:06:18.000 --> 00:06:22.000
+anyway, consider these sentences
+
+00:06:22.000 --> 00:06:25.000
+sentences that sort of everybody says...
+
+00:06:25.000 --> 00:06:25.000
+"Everyone knows VSCode",
+
+00:06:25.000 --> 00:06:27.000
+"Everyone knows Jupiter Notebooks",
+
+00:06:27.000 --> 00:06:31.000
+"Everyone draws diagrams with Quiver"...
+
+00:06:31.000 --> 00:06:34.000
+Here these things are not true -
+
+00:06:34.000 --> 00:06:36.000
+and they are not relevant -
+
+00:06:36.000 --> 00:06:40.000
+here knowledge about programs does not
+
+00:06:40.000 --> 00:06:40.000
+propagate... and
+
+00:06:40.000 --> 00:06:43.000
+one of my goals in life is
+
+00:06:43.000 --> 00:06:45.000
+to become friends with some people who
+
+00:06:45.000 --> 00:06:47.000
+know how to use for example, code blocks
+
+00:06:47.000 --> 00:06:50.000
+in Org, and JavaScript, and learn some of
+
+00:06:50.000 --> 00:06:55.000
+their workflows... or, rather one of my
+
+00:06:55.000 --> 00:06:57.000
+goals is to become someone who deserves
+
+00:06:57.000 --> 00:07:02.000
+help.
+
+00:07:02.000 --> 00:07:05.000
+More on Maxima for students...
+
+00:07:05.000 --> 00:07:08.000
+remember: our inhumanities students
+
+00:07:08.000 --> 00:07:10.000
+don't have a culture of sharing and helping
+
+00:07:10.000 --> 00:07:13.000
+but our humanity students do...
+
+00:07:13.000 --> 00:07:16.000
+I've been telling my students - I teach
+
+00:07:16.000 --> 00:07:19.000
+Calculus 2 and 3 here -that they will learn
+
+00:07:19.000 --> 00:07:21.000
+much faster if they learn Maxima,
+
+00:07:21.000 --> 00:07:24.000
+and that people who learn Maxima can take
+
+00:07:24.000 --> 00:07:27.000
+an optional test and earn extra marks
+
+00:07:27.000 --> 00:07:31.000
+in the course, but if they behave
+
+00:07:31.000 --> 00:07:34.000
+as typical inhumanities students -
+
+00:07:34.000 --> 00:07:37.000
+I mean, not asking questions and
+
+00:07:37.000 --> 00:07:39.000
+not helping their colleagues -
+
+00:07:39.000 --> 00:07:42.000
+then I won't help help...
+
+00:07:42.000 --> 00:07:45.000
+Actually it's even worse. I've
+
+00:07:45.000 --> 00:07:47.000
+told my students that my documentation
+
+00:07:47.000 --> 00:07:50.000
+is not good enough yet and every
+
+00:07:50.000 --> 00:07:53.000
+question helps me a lot, so PLEASE ask
+
+00:07:53.000 --> 00:07:57.000
+questions, and I've bagged on my knees...
+
+00:07:57.000 --> 00:08:01.000
+and now I can treat students
+
+00:08:01.000 --> 00:08:02.000
+who don't ask questions as people who
+
+00:08:02.000 --> 00:08:05.000
+won't help someone that they know
+
+00:08:05.000 --> 00:08:08.000
+who is begging on his knees!
+
+00:08:08.000 --> 00:08:12.000
+Now let me explain another word of
+
+00:08:12.000 --> 00:08:15.000
+the title of this presentation.
+
+00:08:15.000 --> 00:08:17.000
+The title of this presentation is
+
+00:08:17.000 --> 00:08:17.000
+"Emacs, eev, and Maxima - Now!"
+
+00:08:17.000 --> 00:08:22.000
+The "Now!" in the title means:
+
+00:08:22.000 --> 00:08:25.000
+in less than one hour and even for people
+
+00:08:25.000 --> 00:08:27.000
+who have never seen a terminal in their lives.
+
+00:08:27.000 --> 00:08:32.000
+Well, my title is a slight exaggeration...
+
+00:08:32.000 --> 00:08:34.000
+it only took less than one hour
+
+00:08:34.000 --> 00:08:37.000
+for one person, who is a school kid
+
+00:08:37.000 --> 00:08:40.000
+from a small City in the North of Brazil,
+
+00:08:40.000 --> 00:08:42.000
+who didn't know anything about programming,
+
+00:08:42.000 --> 00:08:44.000
+but who was competing in the local
+
+00:08:44.000 --> 00:08:50.000
+Math Olympiads, so not a typical person...
+
+00:08:50.000 --> 00:08:53.000
+Now let me tell a story based on
+
+00:08:53.000 --> 00:08:55.000
+real events and based on a real student.
+
+00:08:55.000 --> 00:08:58.000
+The student said: "I have Linux on my
+
+00:08:58.000 --> 00:09:00.000
+laptop, can you help me to do blah1?"
+
+00:09:00.000 --> 00:09:04.000
+I answered: "Sure, do blah2 and blah3..."
+
+00:09:04.000 --> 00:09:10.000
+this was all by chat, I don't remember if
+
+00:09:10.000 --> 00:09:10.000
+by WhatsApp or by Telegram...
+
+00:09:10.000 --> 00:09:13.000
+then one week passes, and the student
+
+00:09:13.000 --> 00:09:16.000
+talks to me again, and the student says:
+
+00:09:16.000 --> 00:09:19.000
+"It doesn't work!", and I answer:
+
+00:09:19.000 --> 00:09:21.000
+"What happens when you do blah4 and blah5?"
+
+00:09:21.000 --> 00:09:28.000
+another week passes, then the student reappears,
+
+00:09:28.000 --> 00:09:29.000
+and he says: "It doesn't work!"
+
+00:09:29.000 --> 00:09:33.000
+and I answer: "Type blah6 and blah7 in
+
+00:09:33.000 --> 00:09:36.000
+the terminal, press ENTER, take a
+
+00:09:36.000 --> 00:09:38.000
+photo of your screen... remember, not a
+
+00:09:38.000 --> 00:09:41.000
+screenshot, it's a photo of your screen...
+
+00:09:41.000 --> 00:09:43.000
+and send it to me." Then the student
+
+00:09:43.000 --> 00:09:46.000
+disappears again, another week passes and
+
+00:09:46.000 --> 00:09:49.000
+the student reappears and says:
+
+00:09:49.000 --> 00:09:50.000
+"How do I open a terminal?"
+
+00:09:50.000 --> 00:09:52.000
+Well, then...
+
+00:09:52.000 --> 00:09:54.000
+PLONK.
+
+00:09:54.000 --> 00:09:57.000
+According to the Jargon file "plonk" is
+
+00:09:57.000 --> 00:10:00.000
+the sound of that a newbie makes as he
+
+00:10:00.000 --> 00:10:02.000
+falls to the bottom of a kill file.
+
+00:10:02.000 --> 00:10:03.000
+I prefer this simpler definition here...
+
+00:10:03.000 --> 00:10:06.000
+for me "plonk" is the sound
+
+00:10:06.000 --> 00:10:08.000
+that a person makes when he, or she, or they
+
+00:10:08.000 --> 00:10:15.000
+hits the bottom of my list of priorities.
+
+00:10:15.000 --> 00:10:19.000
+I've been using this slogan with my
+
+00:10:19.000 --> 00:10:22.000
+students - it sounds much better in
+
+00:10:22.000 --> 00:10:25.000
+Portuguese, sorry... "I am not a telepath,
+
+00:10:25.000 --> 00:10:27.000
+and for me it is 100 times harder to
+
+00:10:27.000 --> 00:10:29.000
+discover the doubts of people who don't
+
+00:10:29.000 --> 00:10:32.000
+talk to me than to discover the doubts of
+
+00:10:32.000 --> 00:10:38.000
+people who do talk to me.
+
+00:10:38.000 --> 00:10:41.000
+There's an interesting thing here in
+
+00:10:41.000 --> 00:10:47.000
+this presentation by Abelson and Sussman.
+
+00:10:47.000 --> 00:10:51.000
+Let me explain now this word of
+
+00:10:51.000 --> 00:10:53.000
+my title, "Emacs"...
+
+00:10:53.000 --> 00:10:56.000
+and the idea is that learning Emacs can
+
+00:10:56.000 --> 00:10:58.000
+mean many things, learning Lisp can mean
+
+00:10:58.000 --> 00:11:03.000
+many things, and in this presentation...
+
+00:11:03.000 --> 00:11:07.000
+oh no, one second...
+
+00:11:07.000 --> 00:11:09.000
+sorry, back.
+
+00:11:09.000 --> 00:11:12.000
+In this presentation they say...
+
+00:11:12.000 --> 00:11:16.000
+"anyone can learn Lisp in one day,
+
+00:11:16.000 --> 00:11:18.000
+except that if they already know Fortran,
+
+00:11:18.000 --> 00:11:20.000
+then it will take three days".
+
+00:11:20.000 --> 00:11:24.000
+And I would add: and if the person
+
+00:11:24.000 --> 00:11:26.000
+is starting with Doom Emacs then it would
+
+00:11:26.000 --> 00:11:28.000
+take take five years.
+
+00:11:28.000 --> 00:11:20.000
+Why? Because the person is using
+
+00:11:20.000 --> 00:11:32.000
+a different notion of Emacs,
+
+00:11:32.000 --> 00:11:35.000
+and a different notion of Lisp.
+
+00:11:35.000 --> 00:11:38.000
+The person is starting by spending five
+
+00:11:38.000 --> 00:11:41.000
+years learning how to configure Emacs, and
+
+00:11:41.000 --> 00:11:43.000
+the person is using Lisp as a very weird
+
+00:11:43.000 --> 00:11:46.000
+configuration language.
+
+00:11:46.000 --> 00:11:48.000
+Usually the people who start by Doom Emacs
+
+00:11:48.000 --> 00:11:51.000
+they start by configuring Emacs,
+
+00:11:51.000 --> 00:11:54.000
+and only then they learn things like
+
+00:11:54.000 --> 00:11:56.000
+defun, etc...
+
+00:11:56.000 --> 00:11:58.000
+and another slogan that I use a lot
+
+00:11:58.000 --> 00:12:01.000
+with my students is that there are
+
+00:12:01.000 --> 00:12:03.000
+many cases in which learning just the
+
+00:12:03.000 --> 00:12:07.000
+thing B takes 200 hours but learning
+
+00:12:07.000 --> 00:12:13.000
+A and then B takes just 20 hours.
+
+00:12:13.000 --> 00:12:16.000
+Here are some kinds of beginners
+
+00:12:16.000 --> 00:12:19.000
+that I do not want to help.
+
+00:12:19.000 --> 00:12:21.000
+First example: a person who says "I can't
+
+00:12:21.000 --> 00:12:24.000
+read that page - it has too many links".
+
+00:12:24.000 --> 00:12:27.000
+Second example: a person who says
+
+00:12:27.000 --> 00:12:29.000
+"I don't want to read anything and
+
+00:12:29.000 --> 00:12:31.000
+I don't want to learn anything,
+
+00:12:31.000 --> 00:12:32.000
+I want something that just works".
+
+00:12:32.000 --> 00:12:36.000
+And third example: "I don't want to
+
+00:12:36.000 --> 00:12:38.000
+look at examples, you need to summarize
+
+00:12:38.000 --> 00:12:40.000
+everything to me in one paragraph".
+
+00:12:40.000 --> 00:12:43.000
+There are more explanations on
+
+00:12:43.000 --> 00:12:47.000
+these kinds of beginners at my page
+
+00:12:47.000 --> 00:12:49.000
+about this presentation - here.
+
+00:12:49.000 --> 00:12:53.000
+And here is one kind of beginner
+
+00:12:53.000 --> 00:12:54.000
+that I really want to help.
+
+00:12:54.000 --> 00:12:57.000
+Beginners that are nerdy kids
+
+00:12:57.000 --> 00:13:00.000
+who are used to:
+
+00:13:00.000 --> 00:13:03.000
+reading materials that are too advanced for them,
+
+00:13:03.000 --> 00:13:05.000
+understanding only a few percent of what they read,
+
+00:13:05.000 --> 00:13:10.000
+remembering just a tiny fraction of what they read,
+
+00:13:10.000 --> 00:13:14.000
+going to back to these materials later,
+
+00:13:14.000 --> 00:13:19.000
+and taking notes about what they read...
+
+00:13:19.000 --> 00:13:22.000
+and who are also always interested in
+
+00:13:22.000 --> 00:13:25.000
+experimenting with new ways of taking notes,
+
+00:13:25.000 --> 00:13:28.000
+transcribing, summarizing and saving links
+
+00:13:28.000 --> 00:13:32.000
+to primary sources.
+
+00:13:32.000 --> 00:13:36.000
+I'd like to say something about how
+
+00:13:36.000 --> 00:13:38.000
+I've been plonking the paragraph people...
+
+00:13:38.000 --> 00:13:40.000
+who are the people who say:
+
+00:13:40.000 --> 00:13:43.000
+"I don't want to look at examples,
+
+00:13:43.000 --> 00:13:45.000
+you need to summarize everything to me
+
+00:13:45.000 --> 00:13:45.000
+in one paragraph".
+
+00:13:45.000 --> 00:13:48.000
+Well, I'm a mathematician...
+
+00:13:48.000 --> 00:13:50.000
+I work with lots of things
+
+00:13:50.000 --> 00:13:52.000
+that can only be summarized in a paragraph
+
+00:13:52.000 --> 00:13:55.000
+if we choose the level of who
+
+00:13:55.000 --> 00:13:57.000
+we are talking to...
+
+00:13:57.000 --> 00:13:59.000
+so we have many different
+
+00:13:59.000 --> 00:14:02.000
+one-paragraph summaries,
+
+00:14:02.000 --> 00:14:04.000
+one for each level...
+
+00:14:04.000 --> 00:14:06.000
+and in many cases this sentence,
+
+00:14:06.000 --> 00:14:08.000
+"you need to summarize it
+
+00:14:08.000 --> 00:14:10.000
+in one paragraph", is WRONG -
+
+00:14:10.000 --> 00:14:13.000
+the person means I want to learn a lot
+
+00:14:13.000 --> 00:14:15.000
+in 10 minutes - and this needs diagrams
+
+00:14:15.000 --> 00:14:18.000
+animations, AND EXAMPLES.
+
+00:14:18.000 --> 00:14:21.000
+This is an example of something
+
+00:14:21.000 --> 00:14:24.000
+in mathematics - in category Theory -
+
+00:14:24.000 --> 00:14:27.000
+I only understood after too many time -
+
+00:14:27.000 --> 00:14:29.000
+after zillions of years...
+
+00:14:29.000 --> 00:14:30.000
+It is called The Yoneda Lemma.
+
+00:14:30.000 --> 00:14:32.000
+This is the general case -
+
+00:14:32.000 --> 00:14:35.000
+this small thing here...
+
+00:14:35.000 --> 00:14:40.000
+but I only understood it after
+
+00:14:40.000 --> 00:14:45.000
+understanding many particular cases, and
+
+00:14:45.000 --> 00:14:49.000
+then organizing them in a way in which
+
+00:14:49.000 --> 00:14:52.000
+different figures had similar shapes...
+
+00:14:52.000 --> 00:14:56.000
+and the textual explanations
+
+00:14:56.000 --> 00:14:58.000
+for the Yoneda Lemma - the one paragraph
+
+00:14:58.000 --> 00:15:00.000
+explanations, or the many paragraph
+
+00:15:00.000 --> 00:15:04.000
+explanations - never helped the much...
+
+00:15:04.000 --> 00:15:07.000
+they contained formulas...
+
+00:15:07.000 --> 00:15:10.000
+in mathematics, but written linearly...
+
+00:15:10.000 --> 00:15:12.000
+that had too many symbols...
+
+00:15:12.000 --> 00:15:15.000
+and my mental buffer is very small...
+
+00:15:15.000 --> 00:15:18.000
+and I had to find several tricks to reduce
+
+00:15:18.000 --> 00:15:21.000
+the cognitive overload of all these ideas.
+
+00:15:21.000 --> 00:15:24.000
+For example, I had to name the symbols
+
+00:15:24.000 --> 00:15:29.000
+consecutively, like A, B, C,
+
+00:15:29.000 --> 00:15:31.000
+so there's a kind of a temporal order
+
+00:15:31.000 --> 00:15:34.000
+in which the symbols that appear first
+
+00:15:34.000 --> 00:15:37.000
+have initial letters...
+
+00:15:37.000 --> 00:15:40.000
+I had to find a way to put
+
+00:15:40.000 --> 00:15:42.000
+an archetypal case and the general case
+
+00:15:42.000 --> 00:15:43.000
+side to side -
+
+00:15:43.000 --> 00:15:45.000
+they have the same "shape"...
+
+00:15:45.000 --> 00:15:47.000
+I had to find good conventions
+
+00:15:47.000 --> 00:15:49.000
+for fonts and types...
+
+00:15:49.000 --> 00:15:51.000
+I had to choose good meanings
+
+00:15:51.000 --> 00:15:53.000
+for what it means...
+
+00:15:53.000 --> 00:15:57.000
+sorry, for what are vertical arrows,
+
+00:15:57.000 --> 00:16:01.000
+what are horizontal arrows, and so on...
+
+00:16:01.000 --> 00:16:06.000
+and what is "above without an arrow"...
+
+00:16:06.000 --> 00:16:09.000
+So, how much detail should we include
+
+00:16:09.000 --> 00:16:12.000
+in our technical explanations?
+
+00:16:12.000 --> 00:16:14.000
+Well there are many measures
+
+00:16:14.000 --> 00:16:17.000
+for cognitive (over)load...
+
+00:16:17.000 --> 00:16:20.000
+For example, I asked many technical questions
+
+00:16:20.000 --> 00:16:21.000
+on the Maxima mailing list
+
+00:16:21.000 --> 00:16:24.000
+that got answers that included
+
+00:16:24.000 --> 00:16:27.000
+snippets and names of of Lisp functions...
+
+00:16:27.000 --> 00:16:29.000
+in Common Lisp, because Maxima is written
+
+00:16:29.000 --> 00:16:32.000
+in Common Lisp... and I liked that...
+
+00:16:32.000 --> 00:16:35.000
+and I asked some some technical questions
+
+00:16:35.000 --> 00:16:35.000
+on the Org mailing list
+
+00:16:35.000 --> 00:16:37.000
+and on the Hyperbole mailing list,
+
+00:16:37.000 --> 00:16:40.000
+and usually I got answers
+
+00:16:40.000 --> 00:16:43.000
+that avoided the technical details...
+
+00:16:43.000 --> 00:16:45.000
+note that I chose the term "avoided"
+
+00:16:45.000 --> 00:16:47.000
+to denote frustration...
+
+00:16:47.000 --> 00:16:50.000
+by the way, if one of my students panics
+
+00:16:50.000 --> 00:16:54.000
+on this part here...
+
+00:16:54.000 --> 00:16:56.000
+"After setting the user and password
+
+00:16:56.000 --> 00:16:57.000
+you will get a Unix prompt"...
+
+00:16:57.000 --> 00:17:01.000
+if the student panics on this
+
+00:17:01.000 --> 00:17:05.000
+and does not know what to ask
+
+00:17:05.000 --> 00:17:07.000
+and just gives up, then...
+
+00:17:07.000 --> 00:17:09.000
+plonk.
+
+00:17:09.000 --> 00:17:13.000
+So... I was talking a lot about
+
+00:17:13.000 --> 00:17:15.000
+plonking people...
+
+00:17:15.000 --> 00:17:16.000
+What's left after plonking many people?
+
+00:17:16.000 --> 00:17:19.000
+Well, several kinds of beginners
+
+00:17:19.000 --> 00:17:21.000
+that I want to interact with...
+
+00:17:21.000 --> 00:17:26.000
+note that "kinds" is plural...
+
+00:17:26.000 --> 00:17:30.000
+Also, I get a definition for the term
+
+00:17:30.000 --> 00:17:32.000
+"beginners"... think on books...
+
+00:17:32.000 --> 00:17:37.000
+technical books, that start with
+
+00:17:37.000 --> 00:17:38.000
+"This book is written for the persons
+
+00:17:38.000 --> 00:17:40.000
+of the types such and such"...
+
+00:17:40.000 --> 00:17:43.000
+Maybe several definitions
+
+00:17:43.000 --> 00:17:47.000
+for the term "beginners"...
+
+00:17:47.000 --> 00:17:49.000
+also, a metric that lets me choose between
+
+00:17:49.000 --> 00:17:52.000
+options A, B and C when I'm trying to
+
+00:17:52.000 --> 00:17:55.000
+write material for my beginners...
+
+00:17:55.000 --> 00:18:00.000
+for example, here, again...
+
+00:18:00.000 --> 00:18:04.000
+should I explain what is a Unix prompt?
+
+00:18:04.000 --> 00:18:07.000
+No!!!
+
+00:18:07.000 --> 00:18:09.000
+Why "no"?
+
+00:18:09.000 --> 00:18:11.000
+Well, let me use another example.
+
+00:18:11.000 --> 00:18:16.000
+This one I took from a discussion on IRC...
+
+00:18:16.000 --> 00:18:18.000
+we were helping a certain beginner
+
+00:18:18.000 --> 00:18:20.000
+that was there...
+
+00:18:20.000 --> 00:18:24.000
+and one person suggested to the beginner
+
+00:18:24.000 --> 00:18:27.000
+to do this: type M-:, and then this
+
+00:18:27.000 --> 00:18:29.000
+thing here, and then ENTER.
+
+00:18:29.000 --> 00:18:33.000
+And I suggested this instead.
+
+00:18:33.000 --> 00:18:35.000
+Copy this expression to your notes,
+
+00:18:35.000 --> 00:18:38.000
+and then type C-e C-x C-e...
+
+00:18:38.000 --> 00:18:42.000
+and the mnemonic for C-e C-x C-e is
+
+00:18:42.000 --> 00:18:44.000
+C-exe, for "execute".
+
+00:18:44.000 --> 00:18:47.000
+And then... for me the option 1,
+
+00:18:47.000 --> 00:18:50.000
+this option here, is very costly,
+
+00:18:50.000 --> 00:18:53.000
+because the person has to type a lot
+
+00:18:53.000 --> 00:18:55.000
+without errors,
+
+00:18:55.000 --> 00:18:59.000
+and then after running that
+
+00:18:59.000 --> 00:19:03.000
+and reading this page here...
+
+00:19:03.000 --> 00:19:06.000
+the way of going back to that page is gone.
+
+00:19:06.000 --> 00:19:08.000
+So the person has to commit lots
+
+00:19:08.000 --> 00:19:10.000
+of information to memory -
+
+00:19:10.000 --> 00:19:13.000
+either the person learns from this page
+
+00:19:13.000 --> 00:19:16.000
+everything that she needs or the person
+
+00:19:16.000 --> 00:19:20.000
+memorizes how to go there the next time....
+
+00:19:20.000 --> 00:19:24.000
+and for me the option 2 - this one:
+
+00:19:24.000 --> 00:19:27.000
+put this in your notes and then
+
+00:19:27.000 --> 00:19:29.000
+execute it with C-exe -
+
+00:19:29.000 --> 00:19:32.000
+is much better, because the person
+
+00:19:32.000 --> 00:19:34.000
+commits information to notes,
+
+00:19:34.000 --> 00:19:36.000
+and the person learns a way to return
+
+00:19:36.000 --> 00:19:40.000
+to this node of the manual later...
+
+00:19:40.000 --> 00:19:45.000
+and with this the person learns
+
+00:19:45.000 --> 00:19:47.000
+another way to use her notes.
+
+00:19:47.000 --> 00:19:50.000
+I have a lot of material about that...
+
+00:19:50.000 --> 00:19:52.000
+see for example this page here -
+
+00:19:52.000 --> 00:19:54.000
+there's a link to it
+
+00:19:54.000 --> 00:19:56.000
+in my page for this talk...
+
+00:19:56.000 --> 00:19:58.000
+also, I live in a place in which
+
+00:19:58.000 --> 00:20:00.000
+the people who find my instructions
+
+00:20:00.000 --> 00:20:03.000
+too complex or too boring
+
+00:20:03.000 --> 00:20:06.000
+disappear - either for months or forever...
+
+00:20:06.000 --> 00:20:08.000
+So if I give an instruction
+
+00:20:08.000 --> 00:20:10.000
+that the person cannot understand
+
+00:20:10.000 --> 00:20:13.000
+and the person gives up
+
+00:20:13.000 --> 00:20:15.000
+I lose the person...
+
+00:20:15.000 --> 00:20:18.000
+Now let me do some things in a weird order.
+
+00:20:18.000 --> 00:20:20.000
+In a normal presentation this would be
+
+00:20:20.000 --> 00:20:22.000
+the conclusion, and it would be presented
+
+00:20:22.000 --> 00:20:24.000
+at the end...
+
+00:20:24.000 --> 00:20:26.000
+but I will present it now,
+
+00:20:26.000 --> 00:20:28.000
+before the technical details.
+
+00:20:28.000 --> 00:20:31.000
+So, I was teaching Emacs, eev and Maxima
+
+00:20:31.000 --> 00:20:34.000
+for students... did it work well?
+
+00:20:34.000 --> 00:20:36.000
+Well... sort of, but in a weird way.
+
+00:20:36.000 --> 00:20:39.000
+Many students decided to take my test
+
+00:20:39.000 --> 00:20:42.000
+on Emacs, eev, and Maxima...
+
+00:20:42.000 --> 00:20:45.000
+let me consider only the 35 students
+
+00:20:45.000 --> 00:20:48.000
+in the two last semesters that were able
+
+00:20:48.000 --> 00:20:51.000
+to do what I asked, that was to use a link
+
+00:20:51.000 --> 00:20:56.000
+like this one to go to my notes...
+
+00:20:56.000 --> 00:20:59.000
+they had to go to a specific small program
+
+00:20:59.000 --> 00:21:02.000
+in Maxima, copy that program to their notes,
+
+00:21:02.000 --> 00:21:04.000
+modify it a bit to make it solve
+
+00:21:04.000 --> 00:21:06.000
+a slightly different problem,
+
+00:21:06.000 --> 00:21:08.000
+and then save the new program.
+
+00:21:08.000 --> 00:21:11.000
+So it was mostly a test on the interface,
+
+00:21:11.000 --> 00:21:14.000
+and to test if they knew some
+
+00:21:14.000 --> 00:21:16.000
+very basic things on Maxima...
+
+00:21:16.000 --> 00:21:19.000
+but of these 35 students only 10 students
+
+00:21:19.000 --> 00:21:21.000
+asked questions on the Telegram group...
+
+00:21:21.000 --> 00:21:24.000
+Mostly they discussed
+
+00:21:24.000 --> 00:21:27.000
+with other students...
+
+00:21:27.000 --> 00:21:30.000
+sometimes live - they would bring
+
+00:21:30.000 --> 00:21:34.000
+their laptops to the university to discuss...
+
+00:21:34.000 --> 00:21:37.000
+they only do that very rarely,
+
+00:21:37.000 --> 00:21:40.000
+but they brought it...
+
+00:21:40.000 --> 00:21:42.000
+other times they would discuss
+
+00:21:42.000 --> 00:21:44.000
+with their colleagues on Discord...
+
+00:21:44.000 --> 00:21:47.000
+but I got very little feedback
+
+00:21:47.000 --> 00:21:50.000
+for my usability test.
+
+00:21:50.000 --> 00:21:52.000
+So my experiment failed - in the sense
+
+00:21:52.000 --> 00:21:55.000
+that I didn't get the feedback
+
+00:21:55.000 --> 00:21:57.000
+that I expected - I only got a fraction
+
+00:21:57.000 --> 00:21:59.000
+of the feedback that I expected...
+
+00:21:59.000 --> 00:22:03.000
+...but I learned lots of things.
+
+00:22:03.000 --> 00:22:06.000
+Well, I got very angry, very frustrated,
+
+00:22:06.000 --> 00:22:08.000
+but I saw that I can't invest a lot of energy
+
+00:22:08.000 --> 00:22:11.000
+on students who... how do I say?
+
+00:22:11.000 --> 00:22:13.000
+who "won't talk to me".
+
+00:22:13.000 --> 00:22:16.000
+then I decided to make contact
+
+00:22:16.000 --> 00:22:19.000
+with some schools - secondary schools -
+
+00:22:19.000 --> 00:22:21.000
+and to make a long story short...
+
+00:22:21.000 --> 00:22:25.000
+in one of the schools I was
+
+00:22:25.000 --> 00:22:27.000
+very well received...
+
+00:22:27.000 --> 00:22:29.000
+the students asked lots of questions,
+
+00:22:29.000 --> 00:22:31.000
+and in the middle of the discussion
+
+00:22:31.000 --> 00:22:35.000
+we were discussing this little program here,
+
+00:22:35.000 --> 00:22:37.000
+that splits the the frame in two windows
+
+00:22:37.000 --> 00:22:38.000
+and displays the file ~/HELP
+
+00:22:38.000 --> 00:22:41.000
+in the window at the right...
+
+00:22:41.000 --> 00:22:46.000
+and I showed them Elisp tutorial,
+
+00:22:46.000 --> 00:22:50.000
+that starts... here...
+
+00:22:50.000 --> 00:22:55.000
+and right in its third section
+
+00:22:55.000 --> 00:22:57.000
+it explains 'quote'.
+
+00:22:57.000 --> 00:23:00.000
+So, I had to explain to them
+
+00:23:00.000 --> 00:23:03.000
+how we can use quote to pass...
+
+00:23:03.000 --> 00:23:07.000
+to avoid evaluating a program...
+
+00:23:07.000 --> 00:23:09.000
+we can use quote to pass unevaluated
+
+00:23:09.000 --> 00:23:11.000
+programs as arguments...
+
+00:23:11.000 --> 00:23:13.000
+and quote blew their minds,
+
+00:23:13.000 --> 00:23:16.000
+and I was amazed by their questions,
+
+00:23:16.000 --> 00:23:18.000
+and I saw more clearly that the campus
+
+00:23:18.000 --> 00:23:20.000
+in which I work is a hole,
+
+00:23:20.000 --> 00:23:22.000
+and that I need to do more things outside.
+
+00:23:22.000 --> 00:23:25.000
+Now let's see some technical details.
+
+00:23:25.000 --> 00:23:28.000
+What exactly am I teaching to
+
+00:23:28.000 --> 00:23:20.000
+these students?
+
+00:23:20.000 --> 00:23:32.000
+Basically, my old tutorial for eev
+
+00:23:32.000 --> 00:23:36.000
+was this one... it started with a
+
+00:23:36.000 --> 00:23:39.000
+section on installing eev, and then it
+
+00:23:39.000 --> 00:23:42.000
+explained Lisp, and how to use
+
+00:23:42.000 --> 00:23:44.000
+elisp hyperlinks...
+
+00:23:44.000 --> 00:23:46.000
+and then lots of other things...
+
+00:23:46.000 --> 00:23:49.000
+but I'm using this new tutorial here,
+
+00:23:49.000 --> 00:23:51.000
+that I am not announcing in many places
+
+00:23:51.000 --> 00:23:54.000
+because I wanted to test it a lot
+
+00:23:54.000 --> 00:23:59.000
+before making it very public...
+
+00:23:59.000 --> 00:24:04.000
+and it starts with other installation
+
+00:24:04.000 --> 00:24:06.000
+instructions, that start with
+
+00:24:06.000 --> 00:24:11.000
+instructions for installing WSL
+
+00:24:11.000 --> 00:24:13.000
+on a machine with Windows,
+
+00:24:13.000 --> 00:24:16.000
+and then installing Debian there
+
+00:24:16.000 --> 00:24:19.000
+and then after that people have to install
+
+00:24:19.000 --> 00:24:26.000
+Emacs, and then they have to install eev...
+
+00:24:26.000 --> 00:24:30.000
+And I'm also using this map here,
+
+00:24:30.000 --> 00:24:32.000
+that I'm reorganizing,
+
+00:24:32.000 --> 00:24:34.000
+so it's going to change a lot
+
+00:24:34.000 --> 00:24:36.000
+in the next days...
+
+00:24:36.000 --> 00:24:40.000
+it has a 2-dimensional map here,
+
+00:24:40.000 --> 00:24:44.000
+and it has lots of things that I'm putting
+
+00:24:44.000 --> 00:24:46.000
+in a single place to make it easier
+
+00:24:46.000 --> 00:24:49.000
+to answer questions, and to show
+
+00:24:49.000 --> 00:24:51.000
+to the students that I have answers
+
+00:24:51.000 --> 00:24:56.000
+for the most common questions...
+
+00:24:56.000 --> 00:24:59.000
+Remember, my target audience
+
+00:24:59.000 --> 00:25:02.000
+is mostly composed of beginners who have
+
+00:25:02.000 --> 00:25:04.000
+never seen a terminal in their lives,
+
+00:25:04.000 --> 00:25:06.000
+and that get bored very quickly...
+
+00:25:06.000 --> 00:25:10.000
+and when they get bored they disappear.
+
+00:25:10.000 --> 00:25:15.000
+What are my main goals for the first day?
+
+00:25:15.000 --> 00:25:19.000
+I want them to "install everything",
+
+00:25:19.000 --> 00:25:22.000
+where "everything" means WSL on their
+
+00:25:22.000 --> 00:25:27.000
+Windows machines, then Debian, Emacs, eev,
+
+00:25:27.000 --> 00:25:32.000
+lots of Debian packages that they install
+
+00:25:32.000 --> 00:25:44.000
+with this block here...
+
+00:25:44.000 --> 00:25:47.000
+After that they need to run
+
+00:25:47.000 --> 00:25:51.000
+some Maxima programs, and some test blocks...
+
+00:25:51.000 --> 00:25:53.000
+and configure Emacs, and create a first set
+
+00:25:53.000 --> 00:25:57.000
+of executable notes, and I consider
+
+00:25:57.000 --> 00:25:59.000
+that after that the person is
+
+00:25:59.000 --> 00:26:01.000
+autonomous.
+
+00:26:01.000 --> 00:26:04.000
+I said that the students
+
+00:26:04.000 --> 00:26:05.000
+learn how to "Run some Maxima programs".
+
+00:26:05.000 --> 00:26:07.000
+Let me be more precise about that.
+
+00:26:07.000 --> 00:26:09.000
+The first step is something
+
+00:26:09.000 --> 00:26:14.000
+that I call "The 5-minute workshop"...
+
+00:26:14.000 --> 00:26:17.000
+it happens in the classroom,
+
+00:26:17.000 --> 00:26:20.000
+on my laptop, and I make the students
+
+00:26:20.000 --> 00:26:20.000
+run this.
+
+00:26:20.000 --> 00:26:24.000
+Actually in a first moment I run
+
+00:26:24.000 --> 00:26:27.000
+this thing here, and then I ask them
+
+00:26:27.000 --> 00:26:30.000
+to run it themselves.
+
+00:26:30.000 --> 00:26:35.000
+So: I type f8 on these three things here,
+
+00:26:35.000 --> 00:26:37.000
+we get a target buffer running Maxima,
+
+00:26:37.000 --> 00:26:40.000
+then I type f8 several other times here...
+
+00:26:40.000 --> 00:26:42.000
+when I type f8 here it opens a GNUPlot
+
+00:26:42.000 --> 00:26:46.000
+window, that I have to close
+
+00:26:46.000 --> 00:26:49.000
+by typing 'q' here...
+
+00:26:49.000 --> 00:26:51.000
+and that's it. And then I say:
+
+00:26:51.000 --> 00:26:53.000
+now it's your turn. And the students go there,
+
+00:26:53.000 --> 00:26:56.000
+they type f8 three times, and then they
+
+00:26:56.000 --> 00:27:03.000
+type f8 f8 f8 f8 f8 f8 f8 q f8 q...
+
+00:27:03.000 --> 00:27:07.000
+The second step is similar -
+
+00:27:07.000 --> 00:27:09.000
+is another individual workshop,
+
+00:27:09.000 --> 00:27:01.000
+also just a few minutes long,
+
+00:27:01.000 --> 00:27:15.000
+in which they learn how to access my notes.
+
+00:27:15.000 --> 00:27:17.000
+My notes on Maxima are here -
+
+00:27:17.000 --> 00:27:21.000
+I mean, this is the HTMLized version...
+
+00:27:21.000 --> 00:27:26.000
+it starts with a header, then a huge index,
+
+00:27:26.000 --> 00:27:29.000
+then many blocks like this...
+
+00:27:29.000 --> 00:27:31.000
+and this is a specific block that corresponds
+
+00:27:31.000 --> 00:27:33.000
+to the thing that we we ran
+
+00:27:33.000 --> 00:27:37.000
+in the first 5-minute workshop.
+
+00:27:37.000 --> 00:27:40.000
+And in this second 5-minute workshop
+
+00:27:40.000 --> 00:27:43.000
+they run the instructions in this section...
+
+00:27:43.000 --> 00:27:46.000
+usually I skip this thing in the first moment,
+
+00:27:46.000 --> 00:27:52.000
+then I explain it to them...
+
+00:27:52.000 --> 00:27:56.000
+and they run something like this,
+
+00:27:56.000 --> 00:27:58.000
+that downloads a copy
+
+00:27:58.000 --> 00:28:02.000
+of my notes on Maxima,
+
+00:28:02.000 --> 00:28:04.000
+puts that copy in a temporary buffer...
+
+00:28:04.000 --> 00:28:06.000
+and they can run the thing here
+
+00:28:06.000 --> 00:28:18.000
+exactly in the same way as before...
+
+00:28:18.000 --> 00:28:22.000
+And I also ask them to run the small
+
+00:28:22.000 --> 00:28:25.000
+Maxim programs in other blocks,
+
+00:28:25.000 --> 00:28:27.000
+like this one, for example...
+
+00:28:27.000 --> 00:28:29.000
+if we run this it calculates the solution
+
+00:28:29.000 --> 00:28:31.000
+of a question that I put in a test
+
+00:28:31.000 --> 00:28:34.000
+one or two semesters ago...
+
+00:28:34.000 --> 00:28:38.000
+it starts by calculating several integrals
+
+00:28:38.000 --> 00:28:41.000
+and then it organizes all the solutions
+
+00:28:41.000 --> 00:28:49.000
+in a big Matrix like this...
+
+00:28:49.000 --> 00:28:52.000
+I said that at one point the students
+
+00:28:52.000 --> 00:28:55.000
+have to install lots of Debian packages.
+
+00:28:55.000 --> 00:28:59.000
+This happens after they have installed
+
+00:28:59.000 --> 00:29:05.000
+Debian, then Emacs, and eev...
+
+00:29:05.000 --> 00:29:09.000
+and they already know a bit about eepitch,
+
+00:29:09.000 --> 00:29:12.000
+so they are in this section of the
+
+00:29:12.000 --> 00:29:14.000
+instructions, and they just have to type
+
+00:29:14.000 --> 00:29:20.000
+f8 here several times and watch what
+
+00:29:20.000 --> 00:29:22.000
+happens...
+
+00:29:22.000 --> 00:29:24.000
+after that we have many options,
+
+00:29:24.000 --> 00:29:26.000
+and I have this map here and I usually
+
+00:29:26.000 --> 00:29:29.000
+choose a path according to the interests
+
+00:29:29.000 --> 00:29:32.000
+and the questions of the students...
+
+00:29:32.000 --> 00:29:34.000
+and there are many things that can go wrong,
+
+00:29:34.000 --> 00:29:37.000
+so this page also works as as a place
+
+00:29:37.000 --> 00:29:41.000
+in which I put all my troubleshooting
+
+00:29:41.000 --> 00:29:43.000
+instructions...
+
+00:29:43.000 --> 00:29:43.000
+and if a student has a question...
+
+00:29:43.000 --> 00:29:47.000
+I mean, suppose that the student is
+
+00:29:47.000 --> 00:29:50.000
+talking to me by WhatsApp or Telegram,
+
+00:29:50.000 --> 00:29:52.000
+and the student is saying:
+
+00:29:52.000 --> 00:29:54.000
+okay I installed the things such and such,
+
+00:29:54.000 --> 00:29:56.000
+and I tried the thing blahblah, and
+
+00:29:56.000 --> 00:29:58.000
+something went wrong...
+
+00:29:58.000 --> 00:29:59.000
+and I say: ok, can you send me a screenshot
+
+00:29:59.000 --> 00:30:02.000
+or a photo of your screen?
+
+00:30:02.000 --> 00:30:04.000
+And then we can troubleshoot that
+
+00:30:04.000 --> 00:30:10.000
+by using a section of this page here.
+
+00:30:10.000 --> 00:30:11.000
+This is a work in progress,
+
+00:30:11.000 --> 00:30:14.000
+I'm reorganizing this thing for
+
+00:30:14.000 --> 00:30:15.000
+the 10th time...
+
+00:30:15.000 --> 00:30:19.000
+and the rest of what can happen
+
+00:30:19.000 --> 00:30:21.000
+with these students can't be explained
+
+00:30:21.000 --> 00:30:23.000
+clearly in a video... so I'm going
+
+00:30:23.000 --> 00:30:26.000
+to put the all the other stuff in the
+
+00:30:26.000 --> 00:30:28.000
+page of the video, and I'm going to stop
+
+00:30:28.000 --> 00:30:30.000
+the video here.
+
+00:30:30.000 --> 00:07:12.000
+So: thanks, and bye!
diff --git a/2024/captions/emacsconf-2024-mcclim--elisp-and-mcclim--screwlisp--answers.vtt b/2024/captions/emacsconf-2024-mcclim--elisp-and-mcclim--screwlisp--answers.vtt
new file mode 100644
index 00000000..812e174f
--- /dev/null
+++ b/2024/captions/emacsconf-2024-mcclim--elisp-and-mcclim--screwlisp--answers.vtt
@@ -0,0 +1,574 @@
+WEBVTT
+
+NOTE I would love to see the GUI interacting with the scheduling stuff
+
+00:00:00.000 --> 00:00:01.999
+...volume of code I've written that.
+
+00:00:02.000 --> 00:00:06.319
+I will do a follow-up video with the kind of synchronized
+
+00:00:06.320 --> 00:00:12.519
+elisp-mode stuff because that is the point of the talk. Sorry
+
+00:00:12.520 --> 00:00:38.599
+for talking over you. Please continue.
+
+00:00:38.600 --> 00:00:41.879
+sachac is saying (car kill-ring).
+
+00:00:41.880 --> 00:00:57.559
+Oh, yeah, so this question, they're just asking in the
+
+NOTE Q: Or any other GUI stuff you've worked on in the past that you'd be comfortable showing?
+
+00:00:57.560 --> 00:01:01.319
+Scratchpad, is there any other GUI stuff I've worked on in
+
+00:01:01.320 --> 00:01:07.319
+the past? I guess my Toobnix channel, I was doing a bunch of
+
+00:01:07.320 --> 00:01:12.639
+that, so just Common Lisp development, homed around
+
+00:01:12.640 --> 00:01:16.359
+McCLIM. What is my Toobnix channel? If you find a Toobnix
+
+00:01:16.360 --> 00:01:21.519
+channel and it has a name like Screwtape, that'll
+
+00:01:21.520 --> 00:01:28.679
+presumably be that. So Toobnix is SDF.org's PeerTube.
+
+00:01:28.680 --> 00:01:35.719
+Nope, not that one.
+
+00:01:35.720 --> 00:01:41.319
+Sacha's got it here in the IRC. I think it's
+
+00:01:41.320 --> 00:01:47.959
+screwtape_channels/videos. Yeah. So the
+
+00:01:47.960 --> 00:01:52.639
+author of mastodon.el, which hopefully lots of us are using
+
+00:01:52.640 --> 00:01:58.079
+for our mastodoning, I used the name Screwtape as my
+
+00:01:58.080 --> 00:02:01.519
+username, and I think Wintermute said some kind of
+
+00:02:01.520 --> 00:02:06.119
+exasperated Emacs theme. You know what? Screw Lisp. Then
+
+00:02:06.120 --> 00:02:09.719
+Mousebot of mastodon.el rechristened me screwlisp. So
+
+00:02:09.720 --> 00:02:12.319
+sometimes you see my name written one way, and sometimes you
+
+00:02:12.320 --> 00:02:15.039
+see my name written the other way. I quite like it. A lot of
+
+00:02:15.040 --> 00:02:19.319
+people thought that I was quitting Emacs when I changed my
+
+00:02:19.320 --> 00:02:23.399
+name to be mainly screwlisp. I love it. That's a great story.
+
+00:02:23.400 --> 00:02:27.319
+Thank you. It's so great to have a name from somebody else. I
+
+00:02:27.320 --> 00:02:29.999
+was just thrilled. So thank you, mousebot. Everyone use
+
+00:02:30.000 --> 00:02:35.199
+mousebot's mode. Welcome to Green Guest. I'm with you
+
+00:02:35.200 --> 00:02:38.399
+there. All my kids want to choose their own names, and I'm
+
+00:02:38.400 --> 00:02:41.359
+just like, more power to you. I'm very glad that my parents
+
+00:02:41.360 --> 00:02:45.479
+picked mine for me, and that's one thing I never had to think
+
+00:02:45.480 --> 00:02:50.439
+about. All right, so do we have to cut short so I can go back to
+
+00:02:50.440 --> 00:02:55.839
+watching MPV? of the other stuff. We don't have to, but you
+
+00:02:55.840 --> 00:02:58.999
+are not obligated to sit here one moment more answering our
+
+00:02:59.000 --> 00:03:02.039
+questions than, you know, but of course, you know, we've
+
+00:03:02.040 --> 00:03:07.399
+talked a little before, but I, so I have a pile of questions.
+
+NOTE Lispy Gopher Show
+
+00:03:07.400 --> 00:03:11.159
+You promised to come on the Lispy Gopher show. That's right.
+
+00:03:11.160 --> 00:03:13.239
+I have so much to say. I could, I could, I could come right on
+
+00:03:13.240 --> 00:03:16.039
+your show and just talk to you there, but I'm just curious.
+
+00:03:16.040 --> 00:03:18.559
+Talk to us a little bit about that. Tell us more about the
+
+00:03:18.560 --> 00:03:23.799
+program. Oh, the Lispy Gopher climate. What do we do? So it's
+
+00:03:23.800 --> 00:03:29.039
+hosted by the Superdimensional Fortress, SDF.org, who are
+
+00:03:29.040 --> 00:03:32.919
+a public access Unix mainly. They do their own little radio
+
+00:03:32.920 --> 00:03:38.359
+thing as well. And so I guess for a few years now, I do a weekly
+
+00:03:38.360 --> 00:03:45.559
+show every zero hundred hours UTC. We always start off with
+
+00:03:45.560 --> 00:03:49.119
+kind of climate crisis topics, because that is a climate
+
+00:03:49.120 --> 00:03:54.439
+crisis topic. But there's a sort of joy in that, because Kent
+
+00:03:54.440 --> 00:03:58.279
+Pitman, who Kent Pitman you're familiar with from the
+
+00:03:58.280 --> 00:04:03.599
+Pit Manual and so forth, writes a kind of climate crisis
+
+00:04:03.600 --> 00:04:07.599
+haiku, which we kind of lead out with, and we kind of go into
+
+00:04:07.600 --> 00:04:10.239
+the discussions there. Then obviously the show has- It's a
+
+00:04:10.240 --> 00:04:16.959
+highlight, not gonna lie. Yeah, yeah, I love it. I try and do
+
+00:04:16.960 --> 00:04:19.479
+these dramatic readings, but it's often stumble over.
+
+00:04:19.480 --> 00:04:23.719
+Actually, when Sacha was on, there was an auxiliary poem
+
+00:04:23.720 --> 00:04:27.959
+that happened, which was pretty interesting, too. What was
+
+00:04:27.960 --> 00:04:31.319
+I going to say? Then, I mean, the way we got named the Lispy
+
+00:04:31.320 --> 00:04:33.839
+Gopher Climate was because, broadly speaking, I like to
+
+00:04:33.840 --> 00:04:37.959
+talk about kind of lisp, and most of my writing for a long time
+
+00:04:37.960 --> 00:04:41.919
+was on the Gopher. Though I accidentally locked myself out
+
+00:04:41.920 --> 00:04:45.679
+of the Gopher recently, so there hasn't been an update there
+
+00:04:45.680 --> 00:04:52.159
+for a while. I'm kind of around the IRCs and Mastodon quite a
+
+00:04:52.160 --> 00:04:56.759
+bit now. Lisp, I like to use the term Lisp inclusively,
+
+00:04:56.760 --> 00:04:59.719
+basically. Obviously this talk, I was making the point that
+
+00:04:59.720 --> 00:05:05.519
+I just could go through a 1978 paper written in, and so pre-D
+
+00:05:05.520 --> 00:05:10.279
+machine inter-LISP, right? And it basically just worked in
+
+00:05:10.280 --> 00:05:13.439
+modern Emacs LISP. Somebody was pointing out to me, who
+
+00:05:13.440 --> 00:05:20.119
+pointed out where I was like, I don't know what PUT is in,
+
+00:05:20.120 --> 00:05:23.039
+in Emacs Lisp, and somebody was saying definitely there's
+
+00:05:23.040 --> 00:05:28.319
+put in Emacs Lisp. So I'm going to come back to the recording
+
+00:05:28.320 --> 00:05:31.199
+of this talk, and I'm going to just pinpoint this moment the
+
+00:05:31.200 --> 00:05:34.519
+next time somebody says, we need to modernize Lisp. I'm
+
+00:05:34.520 --> 00:05:37.799
+going to say, no, no, no, this is modern Emacs Lisp. You see,
+
+00:05:37.800 --> 00:05:42.359
+here's people talking about, yeah, I'm just tripping over,
+
+00:05:42.360 --> 00:05:45.519
+not tripping over, I'm amused by your phrase there, but
+
+00:05:45.520 --> 00:05:48.599
+that's exactly how I see it too. And I take your point utterly
+
+00:05:48.600 --> 00:05:53.359
+that, you know, this tradition of Lisp of carrying forward
+
+00:05:53.360 --> 00:05:57.799
+ideas. And, you know, we, you know, especially in Emacs, it
+
+00:05:57.800 --> 00:06:00.799
+really is like a brain trust, right? Buckets of knowledge of
+
+00:06:00.800 --> 00:06:04.399
+how to get some sort of work done, or, you know, how to work
+
+00:06:04.400 --> 00:06:08.919
+with some kind of code or some kind of data. Yeah, but I had a
+
+00:06:08.920 --> 00:06:12.079
+kind of, interesting experience with some great friends of
+
+00:06:12.080 --> 00:06:15.799
+mine, whom I love dearly. Vidak, if you're watching this,
+
+00:06:15.800 --> 00:06:21.559
+I'm gossiping about you people over in Australia there.
+
+NOTE Lisp already did it
+
+00:06:21.560 --> 00:06:25.439
+Where people come to you with really exciting ideas that
+
+00:06:25.440 --> 00:06:30.359
+seem to be very cutting edge and like, you know, very much the
+
+00:06:30.360 --> 00:06:33.559
+current talk of the day, like you can hear in other
+
+00:06:33.560 --> 00:06:36.119
+programming languages, and they're telling you how they
+
+00:06:36.120 --> 00:06:39.639
+think you might be able to do this in Lisp. And you have to say,
+
+00:06:39.640 --> 00:06:43.719
+well, you know, if we go back to the late 70s, where the Lisp
+
+00:06:43.720 --> 00:06:47.959
+community really kind of pioneered this topic already.
+
+00:06:47.960 --> 00:06:51.399
+Here's how we did it in the late 70s. And there's actually
+
+00:06:51.400 --> 00:06:56.439
+quite a kind of awkward, just kind of disjunction there. I
+
+00:06:56.440 --> 00:06:59.079
+mean, that's the thing, right? Where use of Emacs in
+
+00:06:59.080 --> 00:07:03.759
+particular use of Lisp in general will unravel somebody's
+
+00:07:03.760 --> 00:07:06.319
+whole big bag of wind that they've built up around why
+
+00:07:06.320 --> 00:07:10.439
+something has to be rebuilt and well right but that's just a
+
+00:07:10.440 --> 00:07:13.359
+function you know it's data so we'll probably just think
+
+00:07:13.360 --> 00:07:16.679
+about that as I don't know sitting in a variable.
+
+00:07:16.680 --> 00:07:21.359
+Oh, so that whole problem, like the elegance of a solution
+
+00:07:21.360 --> 00:07:25.959
+can entirely fall away once you fall back to an earlier way of
+
+00:07:25.960 --> 00:07:29.479
+thinking about it. And then, you know, look at the pieces
+
+00:07:29.480 --> 00:07:32.039
+you've carried forward the idea of the declarative
+
+00:07:32.040 --> 00:07:37.119
+language, right? Declaring user experience. Yeah. Once
+
+00:07:37.120 --> 00:07:41.999
+again, tangentially to, um, to the actual talk we've just
+
+00:07:42.000 --> 00:07:47.479
+watched, which I will try and follow up on as well. But one
+
+00:07:47.480 --> 00:07:51.919
+example was After watching me use the Common Lisp loop
+
+00:07:51.920 --> 00:07:55.999
+facility so much, Kent pointed out to me, hey, you know, why
+
+00:07:56.000 --> 00:08:01.719
+don't you try using Richard Waters' series iteration
+
+00:08:01.720 --> 00:08:05.799
+stuff, which was kind of lazy evaluation of series that
+
+00:08:05.800 --> 00:08:09.119
+Waters did. And so after criticizing Haskell for a long
+
+00:08:09.120 --> 00:08:12.879
+time, me kind of saying, hey, you know, I don't think this
+
+00:08:12.880 --> 00:08:16.519
+lazy evaluation is important. then Kent pointed out to me
+
+00:08:16.520 --> 00:08:22.399
+that, for example, the series, like what is it? AIM 1082 or
+
+00:08:22.400 --> 00:08:28.799
+something published in 1989 was Lazy Evaluation in LISP
+
+00:08:28.800 --> 00:08:33.639
+with series. And so I thought, well, once I realized that
+
+00:08:33.640 --> 00:08:37.879
+this was part of kind of almost classic LISP history to have
+
+00:08:37.880 --> 00:08:43.679
+lazy evaluation, I adopted series, I kind of had to rethink
+
+00:08:43.680 --> 00:08:47.799
+my LISP worldview to realize it did already include lazy
+
+00:08:47.800 --> 00:08:51.679
+evaluation, which I attributed to the late 80s. And then
+
+00:08:51.680 --> 00:08:55.239
+when I actually read a little bit further, lazy evaluation,
+
+00:08:55.240 --> 00:08:59.159
+depending on your research group, has been, was kind of
+
+00:08:59.160 --> 00:09:02.719
+established in the late 70s by Waters again, actually.
+
+00:09:02.720 --> 00:09:05.719
+Sorry for the anecdote, just kind of the interesting
+
+00:09:05.720 --> 00:09:11.159
+medley. Not at all.
+
+00:09:11.160 --> 00:09:17.919
+Yeah.
+
+00:09:17.920 --> 00:09:25.639
+Ellis over in the IRC has come up with a good slime about
+
+00:09:25.640 --> 00:09:33.339
+async. Oh, I see. So yeah,
+
+00:09:33.340 --> 00:09:38.199
+I guess that would work. I have to try that. OK, so you're just
+
+00:09:38.200 --> 00:09:42.679
+getting me reading this. They have had a stab at resolving
+
+00:09:42.680 --> 00:09:49.279
+our asynchronous calls thing more elegantly than me. Left
+
+00:09:49.280 --> 00:09:53.879
+as an exercise to the listener. It's one of the big virtues of
+
+00:09:53.880 --> 00:09:56.799
+something like a convention. It'll bring us together with
+
+00:09:56.800 --> 00:10:01.079
+other people that can kind of see past the boats in our eyes.
+
+00:10:01.080 --> 00:10:06.239
+Oh yeah, that's easy for me. Yeah, definitely. Hearing
+
+00:10:06.240 --> 00:10:10.279
+somebody else's kind of thought process from you and from
+
+00:10:10.280 --> 00:10:16.639
+just the past speaker who was Robin, I think, because this
+
+00:10:16.640 --> 00:10:19.519
+was in the morning for me, so I just kind of got up and caught
+
+00:10:19.520 --> 00:10:25.919
+some of Robin. Yeah, it's so great, kind of vicariously
+
+00:10:25.920 --> 00:10:30.559
+experiencing somebody else's Emacs usage and how it kind of
+
+00:10:30.560 --> 00:10:34.799
+subtly backs onto their own development flows. Yeah, so I
+
+00:10:34.800 --> 00:10:37.319
+really appreciate this talk. I'm constantly cribbing from
+
+00:10:37.320 --> 00:10:40.519
+everyone I meet. And yeah, this talk has been eye-popping,
+
+00:10:40.520 --> 00:10:43.599
+just watching you casually navigate Emacs, actually.
+
+NOTE IELM
+
+00:10:43.600 --> 00:10:51.519
+Yeah, it's cool. Yeah, I enjoyed discovering IELM mode.
+
+00:10:51.520 --> 00:10:54.959
+That was going to be my other question for people. Are there
+
+00:10:54.960 --> 00:10:59.439
+any IELM Power users around? I could really go for an
+
+00:10:59.440 --> 00:11:05.679
+EmacsConf talk on IELM mode. Aha, yes. Very good. Note
+
+00:11:05.680 --> 00:11:12.199
+taken. Yeah. So, just thoughts for next year? Oh, well, I
+
+00:11:12.200 --> 00:11:15.999
+kind of want to get back onto the MPV, but thank you so much for
+
+00:11:16.000 --> 00:11:22.039
+this. You are cmak in the IRC, right? I am Corwin, same as you.
+
+00:11:22.040 --> 00:11:26.159
+So you're Corwin. There's also cmak, and I guess there are a
+
+00:11:26.160 --> 00:11:28.719
+few other people. Sorry that I'm tripping over the
+
+00:11:28.720 --> 00:11:31.359
+different people here. But you're going to come on the Lispy
+
+00:11:31.360 --> 00:11:35.719
+Gopher Climate later. Sure, I'm happy to. That sounds
+
+00:11:35.720 --> 00:11:38.479
+like fun. I always got a million things to talk about me or an
+
+00:11:38.480 --> 00:11:42.399
+opinion on everything. But of course, my favorite thing to
+
+00:11:42.400 --> 00:11:48.359
+talk about is just the huge thanks that, you know, sharing
+
+00:11:48.360 --> 00:11:53.639
+that, the generosity or the, you know, my appreciation for
+
+00:11:53.640 --> 00:11:57.159
+you and all the other members of the Emacs community that
+
+00:11:57.160 --> 00:12:00.519
+create talks like this and make the conference and the rest
+
+00:12:00.520 --> 00:12:04.839
+of the community so rich. Well, yeah, and thank you for your
+
+00:12:04.840 --> 00:12:09.759
+work. Sacha is just saying over in Lambda that when I say I
+
+00:12:09.760 --> 00:12:13.039
+want someone to give the talk, this means I'm volunteering
+
+00:12:13.040 --> 00:12:17.079
+to give the IELM talk. That's what I wrote down. Oh, yeah. I've
+
+00:12:17.080 --> 00:12:19.479
+been working for Sacha. I mean, helping Sacha with this
+
+00:12:19.480 --> 00:12:23.919
+conference for years. I know. No, I'm kidding. That would be
+
+00:12:23.920 --> 00:12:28.559
+cool. I will absolutely go to your ielm talk. I make a lot of use
+
+00:12:28.560 --> 00:12:32.879
+of that and could do more. Yeah, we're meant to suddenly
+
+NOTE Q: Are we going to get a McCLIM LambdaMOO client?
+
+00:12:32.880 --> 00:12:36.639
+stop. But a guest over in Lambda also said, are we going to get
+
+00:12:36.640 --> 00:12:41.239
+a McCLIM LambdaMOO client? And I actually had all my kind of
+
+00:12:41.240 --> 00:12:44.519
+Moo stuff I'd written in Common Lisp, which I was thinking of
+
+00:12:44.520 --> 00:12:47.639
+just kind of jettisoning. But you're right, I should make
+
+00:12:47.640 --> 00:12:51.479
+that into a client for Common Lisp. Anyway, I'm going to hang
+
+00:12:51.480 --> 00:12:55.839
+up so I can keep watching the conference sounds good so we'll
+
+00:12:55.840 --> 00:12:58.399
+just cut away with the stream throw some music and a
+
+00:12:58.400 --> 00:13:02.799
+countdown uh back on give us just a second to make that on bbb
+
+00:13:02.800 --> 00:13:05.359
+and then i'll give you the big thumbs up thank you thank you
+
+00:13:05.360 --> 00:13:08.359
+recording here we'll get it all posted up uh right next to
+
+00:13:08.360 --> 00:13:09.839
+your awesome pre-recorded talk
+
+00:13:09.840 --> 00:13:17.159
+thanks again like it's been fun chatting and uh Yeah,
+
+00:13:17.160 --> 00:13:20.799
+definitely seeing you around in the conference channel off
+
+00:13:20.800 --> 00:13:23.879
+off season. So to speak, you're like, you're totally
+
+00:13:23.880 --> 00:13:26.679
+welcome to use our chat like it to the extent you need to IRC
+
+00:13:26.680 --> 00:13:29.039
+channel that's been working on great for me. It's fun to fun
+
+00:13:29.040 --> 00:13:30.639
+to see it.
+
+00:13:30.640 --> 00:13:39.319
+All right, I'm gonna hang up this thing. All right. Happy day
+
+00:13:39.320 --> 00:13:44.119
+flowy. Sorry, I mean, screwlisp. Oh my gosh, I have
+
+00:13:44.120 --> 00:13:54.360
+conference brain. Bye bye. All right, later, later.
diff --git a/2024/captions/emacsconf-2024-mcclim--elisp-and-mcclim--screwlisp--main--chapters.vtt b/2024/captions/emacsconf-2024-mcclim--elisp-and-mcclim--screwlisp--main--chapters.vtt
new file mode 100644
index 00000000..ecc41f76
--- /dev/null
+++ b/2024/captions/emacsconf-2024-mcclim--elisp-and-mcclim--screwlisp--main--chapters.vtt
@@ -0,0 +1,14 @@
+WEBVTT
+
+
+00:00:01.750 --> 00:03:21.652
+Introduction
+
+00:03:21.702 --> 00:19:12.752
+Calendar
+
+00:19:12.802 --> 00:29:09.414
+Inferior Lisp and McCLIM
+
+00:29:10.964 --> 00:34:28.780
+Putting things together
diff --git a/2024/captions/emacsconf-2024-mcclim--elisp-and-mcclim--screwlisp--main.vtt b/2024/captions/emacsconf-2024-mcclim--elisp-and-mcclim--screwlisp--main.vtt
new file mode 100644
index 00000000..f37aea64
--- /dev/null
+++ b/2024/captions/emacsconf-2024-mcclim--elisp-and-mcclim--screwlisp--main.vtt
@@ -0,0 +1,1413 @@
+WEBVTT captioned by rodrigo
+
+NOTE Introduction
+
+00:00:01.750 --> 00:00:11.969
+Welcome everyone to my EmacsConf presentation,
+
+00:00:15.370 --> 00:00:22.089
+where we're going to look at Lisp's vdemo[??] app from 1978,
+
+00:00:22.139 --> 00:00:25.659
+but done in modern Elisp.
+
+00:00:28.460 --> 00:00:33.039
+Then we're going to look at getting inferior-lisp working,
+
+00:00:33.390 --> 00:00:34.753
+my dear Common Lisp.
+
+00:00:37.003 --> 00:00:42.059
+Then we're going to use the Common Lisp interface manager,
+
+00:00:42.159 --> 00:00:45.663
+the open source child of the Common Lisp interface manager,
+
+00:00:47.813 --> 00:00:52.959
+McCLIM, from inferior-lisp in Superior Lisp,
+
+00:00:55.710 --> 00:00:58.325
+which is the opposite order that I initially thought
+
+00:00:58.375 --> 00:00:59.276
+we were going to do things in,
+
+00:00:59.326 --> 00:01:00.779
+but this is how it's kind of turned out.
+
+00:01:00.829 --> 00:01:01.795
+So it's this article,
+
+00:01:01.845 --> 00:01:05.199
+I thought, from 1978, was interesting to us today.
+
+00:01:05.999 --> 00:01:08.702
+“Programming in an Interactive Environment:
+
+00:01:08.752 --> 00:01:11.805
+the ‘Lisp’ Experience.”
+
+00:01:12.005 --> 00:01:17.678
+Explaining what all these LISP programmers were doing to
+
+00:01:19.478 --> 00:01:22.466
+people unfamiliar with LISP programming.
+
+00:01:22.566 --> 00:01:24.401
+“LISP systems have been used for
+
+00:01:24.451 --> 00:01:27.454
+highly interactive programming for more than a decade.”
+
+00:01:27.604 --> 00:01:29.790
+This was from 1978.
+
+00:01:29.990 --> 00:01:31.959
+And we're just going to go and,
+
+00:01:34.109 --> 00:01:39.717
+almost verbatim, port the demo application for LISP
+
+00:01:40.017 --> 00:01:46.119
+out of 1978 Interlisp and into Emacs Lisp.
+
+00:01:49.720 --> 00:01:51.428
+And we're going to do it without Org Mode,
+
+00:01:51.478 --> 00:01:54.231
+because I think everyone is finding out
+
+00:01:54.281 --> 00:01:56.950
+how great Org Mode is already.
+
+00:01:58.100 --> 00:02:00.787
+For inferior Lisp, I thought instead of org-mode,
+
+00:02:00.837 --> 00:02:02.823
+we'll theme it around slime-mode and then it turned out
+
+00:02:02.873 --> 00:02:06.059
+most of this presentation happens in Emacs Lisp,
+
+00:02:06.109 --> 00:02:08.929
+because this is an Emacs Lisp conference.
+
+00:02:09.379 --> 00:02:12.799
+But I found out that there's ielm-mode,
+
+00:02:12.849 --> 00:02:17.604
+which is pretty similar to slime-mode,
+
+00:02:19.054 --> 00:02:23.610
+but in our hearts, we can imagine that this is
+
+00:02:23.660 --> 00:02:27.448
+an Emacs example, homed around slime-mode,
+
+00:02:27.498 --> 00:02:33.353
+Superior Lisp Interaction Mode for Emacs, instead of org-mode.
+
+00:02:33.403 --> 00:02:36.390
+Though, you know, I do secretly use org-mode as well,
+
+00:02:36.440 --> 00:02:37.858
+not very secretly.
+
+00:02:37.958 --> 00:02:40.539
+But that means we're kind of improvising,
+
+00:02:46.790 --> 00:02:48.786
+improvising a presentation mode.
+
+00:02:49.986 --> 00:02:55.576
+So we have this big buffer of Elisp, and let's just...
+
+00:02:56.726 --> 00:02:59.164
+This is me, not Sandewall, out of interest,
+
+00:03:00.614 --> 00:03:02.616
+let's make a keyboard macro,
+
+00:03:04.216 --> 00:03:10.240
+go get the S-expression wherever the cursor is,
+
+00:03:10.290 --> 00:03:13.611
+move it to the next S-expression, paste it in here,
+
+00:03:13.661 --> 00:03:15.989
+and the keyboard macro, alright.
+
+00:03:20.190 --> 00:03:21.652
+What was basically happening...
+
+NOTE Calendar
+
+00:03:21.702 --> 00:03:25.306
+So the demo application in this case is
+
+00:03:25.356 --> 00:03:27.842
+a scheduling application.
+
+00:03:28.792 --> 00:03:34.631
+And so you can imagine improvising a calendar like this
+
+00:03:34.731 --> 00:03:36.633
+if you weren't existingly using an
+
+00:03:36.683 --> 00:03:38.952
+org-mode integrated calendar.
+
+00:03:39.252 --> 00:03:42.739
+So, you know, just have a list and maybe
+
+00:03:43.989 --> 00:03:49.479
+each list is of sublists, where the first element,
+
+00:03:49.579 --> 00:03:51.531
+the car of the sublist, I guess,
+
+00:03:51.931 --> 00:03:55.669
+is a sensible-sounding date format, like sat dec 7,
+
+00:03:56.119 --> 00:03:59.589
+this is clearly the first day of EmacsConf.
+
+00:03:59.939 --> 00:04:06.230
+Then after that, a list of basically from and to times,
+
+00:04:06.280 --> 00:04:18.592
+and then a quick written description of whatever event
+
+00:04:18.642 --> 00:04:19.576
+was at that time.
+
+00:04:19.876 --> 00:04:23.130
+So similar to what we were seeing recently
+
+00:04:23.180 --> 00:04:25.449
+as of me recording this in our Structure and
+
+00:04:25.499 --> 00:04:28.902
+Interpretation of Computer Programs study group,
+
+00:04:29.902 --> 00:04:35.709
+you have all these little methods, sorry, defuns.
+
+00:04:35.759 --> 00:04:39.513
+So hours of a time is actually just car of the time,
+
+00:04:40.763 --> 00:04:42.966
+minutes of the time, cadr of time.
+
+00:04:43.216 --> 00:04:46.719
+And so we all know these kind of little,
+
+00:04:46.720 --> 00:04:50.173
+basically turning car and cadr,
+
+00:04:50.223 --> 00:04:53.093
+which we do use into descriptive names like from and to.
+
+00:04:53.143 --> 00:04:56.329
+You can see how this lines up with the appointments.
+
+00:04:56.379 --> 00:05:01.701
+So for "reproducibly building emacs" described event,
+
+00:05:01.751 --> 00:05:05.679
+I guess from would be 16 25.
+
+00:05:05.680 --> 00:05:07.658
+Let's just grab that and literally use those,
+
+00:05:07.708 --> 00:05:11.011
+because we're in interactive programming, right?
+
+00:05:11.711 --> 00:05:18.216
+So we have this quoted form and then
+
+00:05:18.266 --> 00:05:22.240
+let's do from of that. Great.
+
+00:05:22.290 --> 00:05:24.458
+And let's do minutes.
+
+00:05:25.308 --> 00:05:31.498
+So from 16 25, 16 45 reproducibly building Emacs,
+
+00:05:31.548 --> 00:05:34.801
+so when I do from to that I get 16 25
+
+00:05:34.851 --> 00:05:40.707
+when I do minutes to 16 25, I get 25
+
+00:05:42.057 --> 00:05:45.489
+and a description of this number in octal and hexadecimal,
+
+00:05:45.590 --> 00:05:47.147
+out of interest.
+
+00:05:48.047 --> 00:05:52.953
+What was up next? Okay, getting nextday from a date.
+
+00:05:53.553 --> 00:05:57.023
+And so, what was it? Saturday, December 27th.
+
+00:05:57.073 --> 00:05:59.245
+So what happens? So this function,
+
+00:06:01.345 --> 00:06:05.932
+I guess this was part of Sandewall's personal exploration of
+
+00:06:06.032 --> 00:06:12.188
+atoms using symbols with property lists,
+
+00:06:12.238 --> 00:06:15.492
+with an attached property list to every symbol.
+
+00:06:15.942 --> 00:06:18.059
+And so you can kind of see how this works.
+
+00:06:21.510 --> 00:06:32.799
+I get whatever was keyed by the symbol nextweekday out of
+
+00:06:32.800 --> 00:06:36.529
+the day symbol, so I guess we would do...
+
+00:06:36.579 --> 00:06:46.640
+so if we had Sat December 6, I guess we get Sat
+
+00:06:48.140 --> 00:06:54.379
+Oh, it destructures that itself somehow, get nextweekday.
+
+00:06:58.429 --> 00:07:02.279
+Sorry, nextday.
+
+00:07:02.280 --> 00:07:10.170
+set December 6th
+
+00:07:10.270 --> 00:07:12.732
+But of course these weren't defined yet,
+
+00:07:12.782 --> 00:07:23.593
+so what if we (setf (get 'sat 'nextweekday) 'sun)
+
+00:07:23.793 --> 00:07:25.239
+and it's going to be sun right
+
+00:07:28.990 --> 00:07:34.369
+And then if we (nextday '(sat dec 6)),
+
+00:07:36.720 --> 00:07:38.392
+Sunday, December 7th.
+
+00:07:38.942 --> 00:07:41.628
+Yeah, so that kind of makes sense in an intuitive way.
+
+00:07:41.778 --> 00:07:43.550
+And you can see cond is being used.
+
+00:07:43.850 --> 00:07:51.538
+So if you're not a Lisp person, cond evaluates a condition.
+
+00:07:51.588 --> 00:07:54.708
+If the condition returns non-nil,
+
+00:07:54.758 --> 00:07:57.160
+it executes the code attached to that condition.
+
+00:07:57.210 --> 00:08:00.247
+It evaluates each of these conditions in terms
+
+00:08:00.297 --> 00:08:04.851
+and then stops when one returns non-nil,
+
+00:08:04.901 --> 00:08:07.420
+as you might expect as a Lisp programmer.
+
+00:08:07.670 --> 00:08:09.622
+Let's keep marching along.
+
+00:08:09.672 --> 00:08:11.691
+Okay, so we have to populate this.
+
+00:08:11.741 --> 00:08:13.493
+And this was an interesting one.
+
+00:08:13.543 --> 00:08:15.562
+As you can see, this was my attempt.
+
+00:08:15.612 --> 00:08:19.199
+let days mon tue wed, so forth.
+
+00:08:19.249 --> 00:08:23.403
+Then I used cl-loop from Emacs Lisp, you know,
+
+00:08:23.453 --> 00:08:32.359
+for day in days, for nex in cdr days, setf nextweekday.
+
+00:08:32.610 --> 00:08:35.382
+This I thought was surprisingly deep, was that
+
+00:08:36.432 --> 00:08:38.435
+Lisp programmers, Sandewall thought,
+
+00:08:38.485 --> 00:08:43.123
+are basically constantly trying to break new ground and they
+
+00:08:43.723 --> 00:08:45.325
+lose interest very quickly when
+
+00:08:45.425 --> 00:08:46.743
+that's not what they're doing.
+
+00:08:46.843 --> 00:08:50.129
+And he was making the point that breaking new ground
+
+00:08:50.229 --> 00:08:52.832
+involves solving a problem exactly once.
+
+00:08:54.232 --> 00:08:55.903
+And so you kind of should do it
+
+00:08:56.003 --> 00:08:58.572
+in the most expedient way possible
+
+00:08:58.672 --> 00:09:00.692
+to solve it kind of for the first time.
+
+00:09:00.992 --> 00:09:07.113
+And after that, it's not breaking new ground anymore.
+
+00:09:07.663 --> 00:09:10.350
+And so I thought that was a kind of fun point
+
+00:09:10.400 --> 00:09:14.521
+from Sandewall's paper that we could kind of chew on.
+
+00:09:15.121 --> 00:09:19.359
+Do something similar for months and month lengths.
+
+00:09:21.059 --> 00:09:30.120
+But as we can see, if I get Feb,
+
+00:09:32.120 --> 00:09:41.982
+nrdr days I think that characters in 1978,
+
+00:09:42.082 --> 00:09:45.418
+characters and symbols in 1978 were more precious
+
+00:09:45.468 --> 00:09:47.821
+which is why Sandewall was writing in this abbreviated way.
+
+00:09:47.871 --> 00:09:51.341
+We might write more verbosely these days.
+
+00:09:51.391 --> 00:09:54.177
+We get 28th but it is in fact a leap year,
+
+00:09:54.277 --> 00:09:58.998
+so let's just set that to be 29. Now, it's fine.
+
+00:09:59.048 --> 00:10:05.638
+Then I guess if we do, we were doing nextday.
+
+00:10:06.038 --> 00:10:10.944
+Sure, nextday. I don't know what day it was.
+
+00:10:10.994 --> 00:10:16.716
+let's assume it was Sunday Feb 28
+
+00:10:22.716 --> 00:10:26.179
+some kind of typo crept in there, but we can deal with it.
+
+00:10:26.230 --> 00:10:43.844
+Let's just setf get sun nextweekday month.
+
+00:10:43.944 --> 00:10:48.648
+So once we've solved it once, we should be fine, right?
+
+00:10:48.698 --> 00:10:51.849
+Okay, I think I have to speed up a bit.
+
+00:10:52.000 --> 00:10:55.555
+Yeah, there we go, Monday February 29th and then
+
+00:10:55.605 --> 00:11:01.194
+what if we nextday... Tuesday March 1st.
+
+00:11:01.244 --> 00:11:03.700
+Okay, it basically seems to be working.
+
+00:11:03.750 --> 00:11:06.398
+And I'd argue it's actually fun that
+
+00:11:06.448 --> 00:11:08.535
+we kind of had to do that.
+
+00:11:08.585 --> 00:11:13.473
+Then, just imagining you're kind of functioning with
+
+00:11:13.523 --> 00:11:18.311
+other people: day begins at 900, ends at 1700,
+
+00:11:18.361 --> 00:11:22.415
+so kind of a 9:00 to 5:00, imagining... though perhaps,
+
+00:11:23.915 --> 00:11:25.318
+shorter is more appropriate,
+
+00:11:25.368 --> 00:11:27.320
+but let's not quibble about that.
+
+00:11:27.420 --> 00:11:29.789
+What was happening next in this app?
+
+00:11:29.839 --> 00:11:35.562
+holesin. Oh, yeah, so get me the free slots
+
+00:11:35.712 --> 00:11:40.060
+in from start time, list of appointments,
+
+00:11:40.110 --> 00:11:45.238
+remembering characters, I guess, were more precious
+
+00:11:45.288 --> 00:11:46.556
+is my theory.
+
+00:11:46.906 --> 00:11:58.399
+And then an end time, so if I go holesin and then from 900
+
+00:11:59.050 --> 00:12:02.689
+to where I've written 9 space 0 0
+
+00:12:03.389 --> 00:12:05.959
+and what are my appointments?
+
+00:12:07.459 --> 00:12:09.930
+So I have a list of appointments that
+
+00:12:09.980 --> 00:12:12.032
+need to have start times and finish times.
+
+00:12:12.132 --> 00:12:20.080
+So let's go 12 59 to 13 01.
+
+00:12:23.580 --> 00:12:25.379
+The description, I guess, can be test.
+
+00:12:25.429 --> 00:12:28.715
+And then let's finish that at 1700,
+
+00:12:29.115 --> 00:12:30.729
+like we kind of thought.
+
+00:12:37.830 --> 00:12:41.049
+Oops, some of these were meant to be arguments.
+
+00:12:54.800 --> 00:12:55.742
+Okay, there we go.
+
+00:12:56.042 --> 00:13:01.297
+And so the available times between nine and five,
+
+00:13:01.397 --> 00:13:04.429
+if there's one appointment from 12:59 to 1:01,
+
+00:13:05.580 --> 00:13:13.092
+are from 9 to 1259 and from 1 past 1 to 5,
+
+00:13:13.792 --> 00:13:15.528
+which is kind of what we were expecting.
+
+00:13:15.728 --> 00:13:18.631
+And so our appointment app is kind of coming along.
+
+00:13:18.931 --> 00:13:20.379
+Then we have commonholes,
+
+00:13:23.430 --> 00:13:25.189
+kind of works in a sensible way.
+
+00:13:33.890 --> 00:13:36.199
+Do we have, what are some common holes from
+
+00:13:36.249 --> 00:13:40.153
+two lists of appointments, I guess? commonholes.
+
+00:13:50.903 --> 00:13:53.800
+I guess, let's have one person have an appointment
+
+00:13:53.850 --> 00:13:56.419
+from 9 to 10.
+
+00:13:59.569 --> 00:14:02.508
+That's going to be their only appointment.
+
+00:14:02.558 --> 00:14:05.946
+And let's have another person have an appointment
+
+00:14:05.996 --> 00:14:10.399
+from 9.30 to 10.30.
+
+00:14:14.450 --> 00:14:18.391
+Oh, we didn't do beforetime yet.
+
+00:14:18.441 --> 00:14:22.295
+This is the order Sandewall implemented things in there.
+
+00:14:22.345 --> 00:14:25.465
+Ok, there.
+
+00:14:25.515 --> 00:14:32.972
+So the commonholes are from 9.30 to 10.
+
+00:14:34.272 --> 00:14:42.182
+That's actually the overlapping time.
+
+00:14:42.232 --> 00:14:43.850
+I'll re-record this
+
+00:14:43.900 --> 00:14:50.799
+if some kind of gremlin has crept into my things.
+
+00:15:04.150 --> 00:15:06.839
+And then, what did we first start by doing?
+
+00:15:07.389 --> 00:15:11.444
+Emacsconf track 1 and Emacsconf track 2,
+
+00:15:11.494 --> 00:15:15.139
+and we'll do it on Saturday, December 7.
+
+00:15:21.140 --> 00:15:23.756
+commontime, and I'm being prompted, of course.
+
+00:15:23.806 --> 00:15:27.226
+emacsconf-track-1,
+
+00:15:29.676 --> 00:15:32.369
+emacsconf-track-2,
+
+00:15:33.370 --> 00:15:35.485
+the date that we grabbed.
+
+00:15:36.585 --> 00:15:39.519
+Let's say we want five minutes.
+
+00:15:49.120 --> 00:15:52.418
+And, as always, I'm forgetting to quote things.
+
+00:15:52.468 --> 00:15:56.689
+And so my opportunities for common times
+
+00:15:56.739 --> 00:16:01.326
+between emacsconf-track-1 to emacsconf-track-2
+
+00:16:01.376 --> 00:16:02.819
+on the first day of the conference,
+
+00:16:02.869 --> 00:16:05.464
+Saturday, December 7th, for five minutes.
+
+00:16:05.864 --> 00:16:08.834
+I have an opportunity between 9:20 and 9:40,
+
+00:16:08.984 --> 00:16:13.639
+11:40 and 13:00, 13:10, 13:25,
+
+00:16:14.489 --> 00:16:19.612
+13:45, 13:55, and 16:15 to 16:25.
+
+00:16:19.662 --> 00:16:21.581
+So I think that's all working.
+
+00:16:23.881 --> 00:16:29.155
+And it was done with almost exactly the same code,
+
+00:16:31.355 --> 00:16:38.965
+except for my loopy populating symbol plist bits earlier,
+
+00:16:39.015 --> 00:16:46.489
+in Interlisp in 1978 as Emacs Lisp in 2024.
+
+00:16:46.539 --> 00:16:48.625
+I thought that was pretty interesting that
+
+00:16:48.675 --> 00:16:49.492
+you could do that.
+
+00:16:49.542 --> 00:16:57.049
+I think setf get was put prop
+
+00:16:57.099 --> 00:17:02.737
+was the biggest difference in 1978 Interlisp and
+
+00:17:02.787 --> 00:17:04.690
+modern Emacs Lisp.
+
+00:17:04.740 --> 00:17:09.178
+And obviously modern Emacs Lisp has Common Lisp loop in it,
+
+00:17:09.228 --> 00:17:11.514
+kind of. It's another big difference.
+
+00:17:11.914 --> 00:17:16.099
+How are we doing for time? 17 minutes?
+
+00:17:16.450 --> 00:17:19.105
+Great, because now let's get a bit closer to what
+
+00:17:19.805 --> 00:17:21.941
+my talk title has promised.
+
+00:17:21.991 --> 00:17:24.911
+We're going to use Common Lisp from Emacs Lisp
+
+00:17:25.211 --> 00:17:28.080
+and we're going to use Common Lisp Interface Manager,
+
+00:17:28.130 --> 00:17:30.116
+the open source implementation of
+
+00:17:30.166 --> 00:17:33.786
+Common Lisp Interface Manager from
+
+00:17:33.836 --> 00:17:36.999
+Inferior Lisp from Emacs Lisp.
+
+00:17:37.300 --> 00:17:42.695
+And what we just went over in Sandewall's paper...
+
+00:17:45.550 --> 00:17:47.683
+This was the starting point, and Sandewall says,
+
+00:17:47.783 --> 00:17:51.537
+well, if you just kind of jammed these ideas using lists
+
+00:17:51.587 --> 00:17:55.341
+you just kind of made hour a synonym for car and
+
+00:17:55.391 --> 00:17:58.945
+minute a synonym for cadr and so forth,
+
+00:17:59.795 --> 00:18:03.066
+you can then make a whole bunch of improvements.
+
+00:18:04.166 --> 00:18:06.689
+Can we actually get a glimpse of the …
+
+00:18:09.239 --> 00:18:10.423
+No, I didn't really write this.
+
+00:18:10.473 --> 00:18:14.244
+Yeah, so you can see I basically just ported out of
+
+00:18:14.294 --> 00:18:17.430
+the Interlisp code in the text of this paper.
+
+00:18:17.580 --> 00:18:21.300
+Yeah, you see from lambda of appointment,
+
+00:18:21.350 --> 00:18:24.904
+car appointment, and that's defineq.
+
+00:18:24.954 --> 00:18:27.857
+I guess Interlisp in 1978 used defineq,
+
+00:18:27.907 --> 00:18:32.311
+whereas we used defun in Elisp,
+
+00:18:33.361 --> 00:18:35.264
+but I'd encourage you to explore that yourselves.
+
+00:18:35.314 --> 00:18:38.551
+But the extension that I wanted to develop today is,
+
+00:18:38.601 --> 00:18:41.187
+since Common Lisp interface manager is just Lisp,
+
+00:18:41.237 --> 00:18:43.422
+and Inferior Lisp is just Lisp,
+
+00:18:43.472 --> 00:18:45.291
+and Emacs Lisp is just Lisp,
+
+00:18:45.341 --> 00:18:48.878
+and Interlisp in 1978 is just Lisp,
+
+00:18:48.928 --> 00:18:50.112
+we could kind of use them all together
+
+00:18:50.162 --> 00:18:51.430
+in a kind of funky way.
+
+00:18:51.480 --> 00:18:57.036
+But a complaint you often hear, or a statement of confusion
+
+00:18:57.086 --> 00:19:00.373
+that you often hear as a Lisp person,
+
+00:19:00.423 --> 00:19:06.712
+people from other languages often can't kind of figure out
+
+00:19:06.762 --> 00:19:09.715
+how to get started with Lisp.
+
+00:19:09.765 --> 00:19:12.752
+So I'm just going to try and do everything here and now.
+
+NOTE Inferior Lisp and McCLIM
+
+00:19:12.802 --> 00:19:18.357
+And this is the second piece of my three pieces,
+
+00:19:18.407 --> 00:19:22.628
+so let's just get inferior lisp and McCLIM happening.
+
+00:19:22.928 --> 00:19:29.268
+We normally use slime Superior Lisp Interaction Mode
+
+00:19:29.318 --> 00:19:41.847
+for Emacs, which we could get from Emacs's package manager.
+
+00:19:41.897 --> 00:19:48.604
+If I go package-list-packages and then we wait
+
+00:19:48.954 --> 00:19:50.969
+for however fast my network is,
+
+00:19:54.270 --> 00:19:55.311
+we're going to see how long it's been
+
+00:19:55.361 --> 00:19:57.079
+since I updated something.
+
+00:19:58.629 --> 00:20:00.999
+Yeah, but you see it's in MELPA, right?
+
+00:20:15.750 --> 00:20:16.982
+It's got to be somewhere here.
+
+00:20:18.082 --> 00:20:18.501
+Yeah, all right.
+
+00:20:18.551 --> 00:20:21.420
+So there's one slime available in non-GNU,
+
+00:20:21.470 --> 00:20:25.958
+one possibly more recent one available in
+
+00:20:26.758 --> 00:20:28.678
+the MELPA package repositories.
+
+00:20:30.278 --> 00:20:30.963
+I don't know about you,
+
+00:20:31.013 --> 00:20:33.616
+but I can sympathize with people who feel confused by this
+
+00:20:33.666 --> 00:20:36.469
+because I think if you look online,
+
+00:20:36.519 --> 00:20:38.637
+if you found a search engine result,
+
+00:20:38.687 --> 00:20:44.110
+it doesn't customize these like I customize them.
+
+00:20:44.160 --> 00:20:45.945
+So let's just do this.
+
+00:20:45.995 --> 00:20:48.147
+customize-variable.
+
+00:20:48.197 --> 00:20:52.318
+package-archives.
+
+00:20:54.518 --> 00:21:00.392
+Yeah and you can see here I've ins-ed gnu, non-gnu, and melpa.
+
+00:21:00.542 --> 00:21:02.628
+It's melpa, not melpa stable.
+
+00:21:03.478 --> 00:21:04.359
+Saved and set.
+
+00:21:06.810 --> 00:21:08.334
+So that's how I do that.
+
+00:21:08.384 --> 00:21:13.279
+We're just kind of totally get an inferior lisp working.
+
+00:21:17.130 --> 00:21:20.599
+And then, like we saw before,
+
+00:21:20.949 --> 00:21:22.648
+this might occur, buffer is still open.
+
+00:21:23.148 --> 00:21:26.879
+No. occur. slime.
+
+00:21:35.330 --> 00:21:38.631
+So we could install and execute that.
+
+00:21:38.681 --> 00:21:41.734
+I cloned slime since Common Lisp people
+
+00:21:41.784 --> 00:21:48.874
+might use slime and swank, like McCLIM does outside of Emacs.
+
+00:21:48.924 --> 00:21:51.043
+I think we can secretly see
+
+00:21:51.093 --> 00:21:55.614
+I've got it here already in my ~/.emacs.d/slime,
+
+00:21:56.064 --> 00:22:00.119
+but you could install it like that. The hotkey is I,
+
+00:22:00.169 --> 00:22:02.021
+and then execute the install.
+
+00:22:02.071 --> 00:22:03.789
+I realize you all already know this,
+
+00:22:04.039 --> 00:22:06.759
+but many of you might not yet be Common Lisp programmers,
+
+00:22:06.809 --> 00:22:09.569
+and you can use both Superior and Inferior Lisp.
+
+00:22:10.370 --> 00:22:14.733
+Instead of package archives in Emacs,
+
+00:22:14.783 --> 00:22:19.705
+in Inferior Lisp, and with great controversy,
+
+00:22:19.755 --> 00:22:22.708
+we often use QuickLisp.
+
+00:22:22.758 --> 00:22:25.778
+People sometimes complain QuickLisp releases
+
+00:22:25.828 --> 00:22:27.780
+get out of date quite quickly.
+
+00:22:28.630 --> 00:22:31.717
+But there was one recently, so they're pretty in date.
+
+00:22:32.167 --> 00:22:35.321
+And so there should be a …
+
+00:22:35.371 --> 00:22:39.058
+Yeah, so basically you download quicklisp.lisp,
+
+00:22:39.158 --> 00:22:41.959
+you check its SHA-256 sum.
+
+00:22:44.910 --> 00:22:47.829
+So I guess in, ooh, over here, if I press D,
+
+00:22:51.229 --> 00:22:53.706
+~screwtape/downloads/quicklisp.lisp.
+
+00:22:53.756 --> 00:22:57.376
+Great. If we open a shell, we realize that
+
+00:22:57.426 --> 00:23:03.599
+this is just riveting for all of our experts there.
+
+00:23:06.450 --> 00:23:15.919
+sha256 ~/Downloads/quicklisp.lisp
+
+00:23:19.720 --> 00:23:22.001
+Your SHA-256 might be different to mine.
+
+00:23:22.601 --> 00:23:25.471
+Somebody please tell me during the actual conference,
+
+00:23:25.621 --> 00:23:29.125
+the right Emacs idiom to do this.
+
+00:23:29.225 --> 00:23:32.679
+I guess it will be tools decrypt something.
+
+00:23:33.930 --> 00:23:36.014
+But then once you have QuickLisp,
+
+00:23:36.214 --> 00:23:37.959
+let's go back to our shell.
+
+00:23:41.810 --> 00:23:46.625
+I'm on OpenBSD or a BSD, so I type pkg_add ecl
+
+00:23:46.675 --> 00:23:48.239
+to get embeddable Common Lisp.
+
+00:23:53.590 --> 00:23:55.090
+However, I think I already have it.
+
+00:23:58.540 --> 00:24:02.069
+And then, let's start ecl [embeddable Common Lisp].
+
+00:24:04.670 --> 00:24:07.039
+Quicklisp inserts itself already,
+
+00:24:11.290 --> 00:24:14.920
+but just loading that quicklisp.lisp file
+
+00:24:14.970 --> 00:24:16.989
+kind of would get you here anyway.
+
+00:24:17.039 --> 00:24:22.939
+Now let's (ql:quickload :mcclim)
+
+00:24:27.140 --> 00:24:28.769
+I'm actually following my plan.
+
+00:24:33.269 --> 00:24:38.294
+McCLIM is kind of like Emacs in that
+
+00:24:38.344 --> 00:24:40.713
+it handles all sorts of graphical stuff
+
+00:24:41.013 --> 00:24:42.748
+like if you have GTK Emacs,
+
+00:24:42.798 --> 00:24:44.333
+you know, it can do really a lot of stuff.
+
+00:24:44.383 --> 00:24:48.604
+That's the reason why compiling and loading
+
+00:24:50.504 --> 00:24:53.125
+the McCLIM package takes a while
+
+00:24:53.175 --> 00:24:56.962
+and I do use my old computer laptop,
+
+00:24:57.012 --> 00:25:00.299
+my old computer challenge laptop all the time,
+
+00:25:00.349 --> 00:25:02.685
+so when you do this, your computer will be
+
+00:25:02.735 --> 00:25:05.504
+substantially faster or you will be feeling
+
+00:25:06.404 --> 00:25:09.609
+smug about how slow you're running your computer,
+
+00:25:12.759 --> 00:25:15.481
+and so there's no problem.
+
+00:25:15.531 --> 00:25:17.316
+Next, we're going to start Swank
+
+00:25:17.366 --> 00:25:23.699
+which is the Lisp part of Emacs's slime-mode.
+
+00:25:27.649 --> 00:25:32.298
+If I remember, we looked at this before
+
+00:25:32.348 --> 00:25:34.700
+in my .emacs.d,
+
+00:25:35.050 --> 00:25:40.499
+and then there should be slime/start-swank.lisp.
+
+00:25:41.699 --> 00:25:44.643
+Let's just grab that and load it.
+
+00:25:46.293 --> 00:25:48.470
+You don't have to type #p.
+
+00:25:48.870 --> 00:25:51.150
+The string will work as well as the path name,
+
+00:25:51.200 --> 00:25:52.618
+but it's kind of fun to do so.
+
+00:25:52.668 --> 00:25:55.287
+Now, slime-connect.
+
+00:25:55.437 --> 00:25:56.859
+You installed slime earlier.
+
+00:25:57.559 --> 00:25:59.024
+Default values.
+
+00:25:59.074 --> 00:26:01.794
+Oh, the reason we had to do this
+
+00:26:01.844 --> 00:26:07.064
+and not use Slime, start Slime normally was that
+
+00:26:07.214 --> 00:26:10.736
+CLIM, Common Lisp Interface Manager,
+
+00:26:10.786 --> 00:26:12.204
+McCLIM, implementation of the
+
+00:26:12.254 --> 00:26:16.275
+Common Lisp Interface Manager spec, also uses Swank
+
+00:26:16.675 --> 00:26:19.912
+and McCLIM really wants to be in the driver's seat.
+
+00:26:20.162 --> 00:26:23.282
+We can have our Emacs connect
+
+00:26:23.332 --> 00:26:28.053
+to the Swank that McCLIM was already running.
+
+00:26:28.553 --> 00:26:30.823
+So (in-package :clim-user)...
+
+00:26:30.873 --> 00:26:33.575
+I don't know if this is an Emacs Lisp idiom,
+
+00:26:33.625 --> 00:26:37.112
+so you normally have user packages to absorb user code
+
+00:26:37.162 --> 00:26:38.809
+just for fooling around.
+
+00:26:42.110 --> 00:26:47.556
+Then let's just use clim at all.
+
+00:26:47.606 --> 00:26:52.544
+And so clim does lots of things around presentations
+
+00:26:53.094 --> 00:26:58.317
+but one thing it does is automatically, to a large extent,
+
+00:26:58.367 --> 00:27:03.956
+generate graphical user interfaces.
+
+00:27:04.006 --> 00:27:09.394
+So there's a lot to it that's not about graphics,
+
+00:27:09.444 --> 00:27:13.332
+kind of richer interfaces than
+
+00:27:14.082 --> 00:27:17.089
+ANSI Common Lisp's character streams.
+
+00:27:19.389 --> 00:27:23.158
+But let's use it to grab a graphical pop-up
+
+00:27:23.258 --> 00:27:24.393
+that returns a value.
+
+00:27:24.743 --> 00:27:27.413
+So we have this accepting-values tool.
+
+00:27:28.013 --> 00:27:31.950
+t is just choose whatever you think the default stream is.
+
+00:27:32.150 --> 00:27:36.088
+We're going to want our own window, t as well,
+
+00:27:36.688 --> 00:27:38.390
+so just a keyword argument.
+
+00:27:38.640 --> 00:27:43.328
+After that, we can just write things like (accept 'string).
+
+00:27:44.978 --> 00:27:47.883
+And I'm just doing this in, for people only listening,
+
+00:27:47.933 --> 00:27:50.936
+I've just done this in my ECL Slime REPL.
+
+00:27:50.986 --> 00:27:55.279
+Enter a string: foo bar baz.
+
+00:27:56.530 --> 00:27:58.849
+Alt-Enter, I think, is the shortcut to return that.
+
+00:27:59.150 --> 00:28:02.248
+As you can see, its first return was "foo bar baz",
+
+00:28:02.298 --> 00:28:04.316
+and it had second and third returns,
+
+00:28:04.366 --> 00:28:10.105
+string being the type, presentation type that it got,
+
+00:28:10.155 --> 00:28:13.739
+and t, I think, to indicate that it exited successfully.
+
+00:28:16.189 --> 00:28:20.916
+We can also do expression, might be more interesting.
+
+00:28:20.966 --> 00:28:22.189
+There are a whole bunch of these.
+
+00:28:26.140 --> 00:28:29.308
+clim's examples folder is pretty good.
+
+00:28:29.358 --> 00:28:32.294
+And the documentation, everybody's documentation,
+
+00:28:32.344 --> 00:28:34.713
+McCLIM's documentation, you know,
+
+00:28:35.413 --> 00:28:39.135
+lispworks and franz's documentation will tell you about
+
+00:28:39.385 --> 00:28:45.069
+the different default presentation types you can accept.
+
+00:28:47.969 --> 00:28:49.862
+And they're pretty intuitive and
+
+00:28:49.912 --> 00:28:52.464
+they're kind of very Lisp compatible,
+
+00:28:53.264 --> 00:28:54.266
+which everything kind of is.
+
+00:28:54.316 --> 00:29:00.399
+We could accept an expression. foo bar baz.
+
+00:29:05.350 --> 00:29:09.414
+return "foo bar baz 123" because that's what I wrote.
+
+NOTE Putting things together
+
+00:29:10.964 --> 00:29:14.570
+And now the kind of pièce de résistance
+
+00:29:14.820 --> 00:29:17.055
+of putting those things together.
+
+00:29:17.555 --> 00:29:21.326
+Let's just run over to our scratch buffer.
+
+00:29:22.226 --> 00:29:24.096
+Oh, or our ielm thing, right?
+
+00:29:24.246 --> 00:29:25.564
+That's what we're actually doing.
+
+00:29:25.964 --> 00:29:28.951
+So now, I think we're going to do, hang on,
+
+00:29:30.251 --> 00:29:32.871
+M-:.
+
+00:29:32.921 --> 00:29:41.313
+I think it's going to be slime-eval-save,
+
+00:29:41.663 --> 00:29:44.549
+because it'll eval asynchronously.
+
+00:29:45.849 --> 00:29:49.121
+There's a question of how to get the value out of
+
+00:29:49.171 --> 00:29:52.124
+the asynchronous slime evaluation.
+
+00:29:52.524 --> 00:29:55.761
+And so an obvious way is to yank it.
+
+00:29:59.661 --> 00:30:02.234
+I'm looking forward to learning from kickingvegas.
+
+00:30:02.284 --> 00:30:06.638
+He finally makes it stick in my brain how to...
+
+00:30:07.138 --> 00:30:10.559
+Options other than just starting to write a command
+
+00:30:10.959 --> 00:30:14.013
+in the minibuffer and then mashing Tab
+
+00:30:14.063 --> 00:30:16.465
+and looking at what the likely sounding results are.
+
+00:30:16.765 --> 00:30:21.720
+That's what I will be learning this conference, if anything.
+
+00:30:22.070 --> 00:30:26.558
+slime-eval-save and then, what was happening over here?
+
+00:30:26.958 --> 00:30:31.769
+(accepting-values (t :own-window t) (accept 'expression)).
+
+00:30:33.369 --> 00:30:38.319
+Kind of confusingly, slime-eval-save takes a string,
+
+00:30:39.169 --> 00:30:41.840
+but it works really well, I'd argue.
+
+00:30:41.940 --> 00:30:43.475
+I think it's about to work really well.
+
+00:30:45.825 --> 00:30:46.712
+Ok, this is great.
+
+00:30:46.762 --> 00:30:50.182
+So you can see I've used... Oh, please enter an expression.
+
+00:30:50.882 --> 00:30:52.117
+So we're doing an expression.
+
+00:30:52.167 --> 00:30:59.057
+And so let's write like (3 4/2 5/6).
+
+00:30:59.357 --> 00:31:00.609
+That's an expression, right?
+
+00:31:03.609 --> 00:31:05.797
+And now I've yanked it.
+
+00:31:05.847 --> 00:31:07.379
+I should have really been in *scratch*,
+
+00:31:07.429 --> 00:31:11.770
+because I just want to dump. Sorry, *scratch*.
+
+00:31:13.770 --> 00:31:15.290
+Dump whatever that did.
+
+00:31:16.540 --> 00:31:19.480
+Oh, yeah, and see, it kind of simplified that
+
+00:31:19.530 --> 00:31:20.712
+while it was reading it.
+
+00:31:20.762 --> 00:31:27.486
+So running in Elisp, (slime-eval-save "(accepting-values
+
+00:31:27.536 --> 00:31:32.557
+(t :own-window t), accept 'expression))").
+
+00:31:33.157 --> 00:31:36.328
+And I got the three returns all the way
+
+00:31:36.378 --> 00:31:43.235
+from McCLIM to inferior-lisp to Elisp.
+
+00:31:43.885 --> 00:31:46.471
+3, 2, 5/6.
+
+00:31:46.521 --> 00:31:50.575
+Second return, it was a presentation type of expression,
+
+00:31:50.625 --> 00:31:52.811
+returned successfully, key.
+
+00:31:53.561 --> 00:31:56.679
+Yeah, so that's pretty cool. How out of time are we?
+
+00:31:58.530 --> 00:32:00.859
+Oh, we did this in basically half an hour.
+
+00:32:04.009 --> 00:32:07.209
+Maybe we could stop and assume there will be a bit under
+
+00:32:07.259 --> 00:32:10.796
+half an hour of interactive discussion.
+
+00:32:11.646 --> 00:32:15.634
+And when I also watch this and also receive suggestions,
+
+00:32:16.934 --> 00:32:20.071
+there will be additions and changes to make, I think.
+
+00:32:21.671 --> 00:32:32.617
+But can we quickly defun accept-date?
+
+00:32:34.667 --> 00:32:36.589
+Let's not take any arguments.
+
+00:32:40.239 --> 00:32:41.709
+Let's do this.
+
+00:32:48.409 --> 00:32:49.769
+accept-date.
+
+00:32:55.519 --> 00:32:58.099
+Saturday, December 7th.
+
+00:33:02.649 --> 00:33:04.015
+Oh, it doesn't return it.
+
+00:33:04.215 --> 00:33:05.518
+But it gets pretty close to returning it.
+
+00:33:05.568 --> 00:33:06.718
+I guess it yanks it.
+
+00:33:07.818 --> 00:33:18.359
+I would have to call … I'm going to say it's slime-sync,
+
+00:33:21.160 --> 00:33:25.370
+at which point it will resolve the slime-eval-async.
+
+00:33:25.670 --> 00:33:28.757
+And then I could get the first value out of
+
+00:33:28.807 --> 00:33:32.179
+my kill-ring pop, right?
+
+00:33:33.629 --> 00:33:35.046
+Does kill ring pop what I want?
+
+00:33:36.646 --> 00:33:39.918
+You know, you tell me in the interactive feedback,
+
+00:33:39.968 --> 00:33:41.720
+which should be happening in LambdaMOO.
+
+00:33:43.020 --> 00:33:45.559
+Well, I'll record another draft of this later
+
+00:33:45.609 --> 00:33:47.709
+after getting some feedback.
+
+00:33:48.609 --> 00:33:51.580
+Or worse to worse, this is just what you'll hear.
+
+00:33:52.180 --> 00:33:58.503
+Hopefully we have some questions and constructive comments.
+
+00:33:59.303 --> 00:34:00.255
+All right, see everybody later.
+
+00:34:00.305 --> 00:34:01.359
+Thank you so much for being here.
+
+00:34:04.470 --> 00:34:08.613
+Please do drop in to my live show
+
+00:34:08.663 --> 00:34:11.266
+if you're so inclined on Wednesdays
+
+00:34:11.316 --> 00:34:14.186
+where you're not busy with cool Emacs conferences.
+
+00:34:14.936 --> 00:34:16.169
+The list be go for climate.
+
+00:34:16.219 --> 00:34:17.572
+Thank you to everyone who helped.
+
+00:34:17.772 --> 00:34:18.640
+Thank you to Sacha
+
+00:34:18.690 --> 00:34:21.660
+for really getting me into this conference
+
+00:34:21.710 --> 00:34:23.428
+and kind of getting me going and
+
+00:34:23.678 --> 00:34:26.181
+submitting this prerecorded talk.
+
+00:34:27.981 --> 00:34:28.780
+See everybody later.
diff --git a/2024/captions/emacsconf-2024-open-mic--open-micpad-for-quick-updates-etc--main--chapters.vtt b/2024/captions/emacsconf-2024-open-mic--open-micpad-for-quick-updates-etc--main--chapters.vtt
new file mode 100644
index 00000000..a1fbcf55
--- /dev/null
+++ b/2024/captions/emacsconf-2024-open-mic--open-micpad-for-quick-updates-etc--main--chapters.vtt
@@ -0,0 +1,26 @@
+WEBVTT
+
+
+00:03:08.240 --> 00:05:58.719
+Vertico
+
+00:05:58.720 --> 00:06:46.079
+which-key
+
+00:06:46.080 --> 00:07:54.799
+eldoc
+
+00:07:54.800 --> 00:10:37.559
+Casual
+
+00:10:37.560 --> 00:13:33.879
+Closing remarks
+
+00:13:33.880 --> 00:19:00.279
+Graphical web browsing
+
+00:19:00.280 --> 00:20:28.239
+org-web-tools
+
+00:20:28.240 --> 00:40:13.360
+qutebrowser
diff --git a/2024/captions/emacsconf-2024-open-mic--open-micpad-for-quick-updates-etc--main.vtt b/2024/captions/emacsconf-2024-open-mic--open-micpad-for-quick-updates-etc--main.vtt
new file mode 100644
index 00000000..eca74be0
--- /dev/null
+++ b/2024/captions/emacsconf-2024-open-mic--open-micpad-for-quick-updates-etc--main.vtt
@@ -0,0 +1,1751 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:08.399
+I believe we are live, so hi again folks and welcome to a
+
+00:00:08.400 --> 00:00:12.319
+little bit of an unstructured time that we wanted to have for
+
+00:00:12.320 --> 00:00:15.399
+this particular EmacsConf. We have a bit of a lighter
+
+00:00:15.400 --> 00:00:19.239
+afternoon compared to previous years and we just thought it
+
+00:00:19.240 --> 00:00:23.999
+would be a nice opportunity for us and for you to join if
+
+00:00:24.000 --> 00:00:27.279
+you've got anything to share like you wanted maybe to have a
+
+00:00:27.280 --> 00:00:29.879
+talk this year but haven't had the time to submit a
+
+00:00:29.880 --> 00:00:32.879
+presentation well now's your time think of it more like the
+
+00:00:32.880 --> 00:00:36.199
+traditional workshops that Emacs Paris or Emacs Berlin
+
+00:00:36.200 --> 00:00:39.839
+tends to run so if you've got anything to share we've made
+
+00:00:39.840 --> 00:00:43.479
+sure to publish the link to this room on IRC and perhaps as
+
+00:00:43.480 --> 00:00:49.279
+well on the website And yeah, it's just a moment for you. If
+
+00:00:49.280 --> 00:00:53.399
+it's a little slow because people do not join, we might start
+
+00:00:53.400 --> 00:00:56.239
+chatting a little bit about Emacs Conf in general, and
+
+00:00:56.240 --> 00:00:59.359
+perhaps take a little bit of advance on the closing remarks
+
+00:00:59.360 --> 00:01:04.079
+for the day, just so that I can go to bed early. But otherwise,
+
+00:01:04.080 --> 00:01:10.679
+the mic is yours.
+
+00:01:10.680 --> 00:01:14.479
+Does any of my fellow co-organizers want to maybe join in and
+
+00:01:14.480 --> 00:01:19.119
+say a word? Maybe you, Corwin?
+
+00:01:19.120 --> 00:01:23.559
+Who, me? No, I usually just sit here quietly. You know me,
+
+00:01:23.560 --> 00:01:31.759
+Leo. Nothing to say to me. I see Karthik here.
+
+00:01:31.760 --> 00:01:35.919
+Karthik has joined the chat. We can see what Karthik has been
+
+00:01:35.920 --> 00:01:44.839
+up to.
+
+00:01:44.840 --> 00:01:53.159
+Hi, everyone. Hi. Hey, I hear you.
+
+00:01:53.160 --> 00:01:57.999
+Is there anything you wanted to share, Karthik?
+
+00:01:58.000 --> 00:02:01.879
+Nothing in particular, but if people suggest topics and
+
+00:02:01.880 --> 00:02:06.839
+have something to say or show off, then I'll jump in. Right,
+
+00:02:06.840 --> 00:02:10.639
+you're coming in as someone who wants to react to stuff, not
+
+00:02:10.640 --> 00:02:12.319
+someone who wants to present, but that's completely fine
+
+00:02:12.320 --> 00:02:15.279
+too. But that means that we are still stopped for people who
+
+00:02:15.280 --> 00:02:18.599
+want to chat. We're still pointing fingers at people in the
+
+00:02:18.600 --> 00:02:36.319
+chat, otherwise.
+
+00:02:36.320 --> 00:02:40.399
+Well, and if you're watching and you want to. Yep. If you, I
+
+00:02:40.400 --> 00:02:42.799
+was just going to say, if, uh, if you're watching the stream
+
+00:02:42.800 --> 00:02:45.919
+and you'd like to get involved, uh, you can join, uh,
+
+00:02:45.920 --> 00:02:53.599
+libera.chat on IRC and join the emacsconf-gen channel. Um, uh, or,
+
+00:02:53.600 --> 00:02:57.599
+uh, just, just, uh, reach out in one of those channels and,
+
+00:02:57.600 --> 00:03:01.359
+and we'll, we'll, we'll ship you a link to join in the BBB
+
+00:03:01.360 --> 00:03:05.839
+here. I'm not sure if that got auto published. I didn't see it
+
+00:03:05.840 --> 00:03:08.239
+on the website.
+
+NOTE Vertico
+
+00:03:08.240 --> 00:03:15.239
+I can suggest a topic, since many people have demoed or used
+
+00:03:15.240 --> 00:03:20.119
+transient in this conf. I was wondering if someone has any
+
+00:03:20.120 --> 00:03:25.639
+interesting uses for transient.
+
+00:03:25.640 --> 00:03:28.479
+It's an interesting topic, sadly one in which I'm not going
+
+00:03:28.480 --> 00:03:31.839
+to be personally able to participate in because I'm still
+
+00:03:31.840 --> 00:03:37.199
+old school. It took me, you know, the VertiCo stack. Did we
+
+00:03:37.200 --> 00:03:40.359
+actually present something on vertico at EmacsConf? I'm not
+
+00:03:40.360 --> 00:03:44.439
+sure, but it's a completion engine in separate packages,
+
+00:03:44.440 --> 00:03:49.279
+very similar to what people may be more familiar with, i.e.
+
+00:03:49.280 --> 00:03:55.199
+Ivy, Helm, ido, all those tools. But I'm old school and I
+
+00:03:55.200 --> 00:03:59.919
+still use Hydra when it comes to interaction. But I've been
+
+00:03:59.920 --> 00:04:05.159
+meaning to transition into Transient at some point and I'd
+
+00:04:05.160 --> 00:04:09.159
+actually be quite interested in people sharing how they've
+
+00:04:09.160 --> 00:04:13.199
+been able to use Transient to supplement their interfaces.
+
+00:04:13.200 --> 00:04:17.959
+but I'm obviously a big user as I think most people would be in
+
+00:04:17.960 --> 00:04:25.679
+this room and on live viewers. The Git, I use it plenty and
+
+00:04:25.680 --> 00:04:29.319
+it's a wonderful interface and I wish I could develop
+
+00:04:29.320 --> 00:04:33.239
+similar interfaces for my own packages that I manage. So
+
+00:04:33.240 --> 00:04:36.159
+maybe at some point. But apparently part of the discussion I
+
+00:04:36.160 --> 00:04:40.359
+think revolves around the fact that transients might be a
+
+00:04:40.360 --> 00:04:43.999
+little hard to approach for people who are perhaps used to
+
+00:04:44.000 --> 00:04:50.639
+the simplicity of a Hydra set up with aboabo's packages. So,
+
+00:04:50.640 --> 00:04:52.919
+if anyone has got anything to say about this, you're more
+
+00:04:52.920 --> 00:04:57.639
+than welcome to join us on BBB. You can also chat it up on IRC
+
+00:04:57.640 --> 00:05:01.759
+and we'll try to give voice to the lines you write and we might
+
+00:05:01.760 --> 00:05:05.599
+be able to react. Otherwise, I suggest if we got a call in.
+
+00:05:05.600 --> 00:05:07.799
+Although that's where I was going to take it to. I think
+
+00:05:07.800 --> 00:05:11.759
+that's a perfect question. Because for once, although
+
+00:05:11.760 --> 00:05:16.959
+obviously any of us can probably talk about how interesting
+
+00:05:16.960 --> 00:05:20.039
+it is at some length, it's not something that Leo and I,
+
+00:05:20.040 --> 00:05:26.559
+normally such loquacious people, have any real insight to.
+
+00:05:26.560 --> 00:05:31.039
+So kind of pick up the phone, call in, jump on the BBB, or
+
+00:05:31.040 --> 00:05:35.399
+through your comments in IRC, exactly as Leo says. Love to,
+
+00:05:35.400 --> 00:05:38.439
+love to have, uh, invite more participation in the
+
+00:05:38.440 --> 00:05:41.759
+discussion and thinking about how to answer that. I myself,
+
+00:05:41.760 --> 00:05:44.199
+uh, you know, jump into my own workflow and I'd start
+
+00:05:44.200 --> 00:05:49.359
+thinking about, oh, well, what is working for me so well, I
+
+00:05:49.360 --> 00:05:58.719
+haven't dug into that sort of where I take the question.
+
+NOTE which-key
+
+00:05:58.720 --> 00:06:02.039
+which-key actually is the direct answer to that, right? For
+
+00:06:02.040 --> 00:06:05.999
+me, that particular package, which seems to come up a lot in
+
+00:06:06.000 --> 00:06:09.719
+sort of help-adjacent forums as being a discovery tool, a
+
+00:06:09.720 --> 00:06:15.519
+way to learn different bindings. I self-identify as being
+
+00:06:15.520 --> 00:06:19.559
+kind of on a path of memorizing all the keystrokes I'm going
+
+00:06:19.560 --> 00:06:23.959
+to care about and how to find ones that I, it would have been
+
+00:06:23.960 --> 00:06:27.559
+convenient if I cared more about before today, right? So
+
+00:06:27.560 --> 00:06:32.079
+it's, for me, a lot of Emacs's power is the, you know,
+
+00:06:32.080 --> 00:06:35.159
+whatever brings to me the knowledge of what I should have
+
+00:06:35.160 --> 00:06:39.519
+done a moment ago, need to do, you know, how to do what I need to
+
+00:06:39.520 --> 00:06:46.079
+do next and so on.
+
+NOTE eldoc
+
+00:06:46.080 --> 00:06:49.999
+I'll also be a user of which-key here and all the fancy tools
+
+00:06:50.000 --> 00:06:53.799
+like eldoc which provides you in your modeline the signature
+
+00:06:53.800 --> 00:06:56.599
+of the function you're currently writing such as if you're
+
+00:06:56.600 --> 00:06:59.959
+writing an elist function but you've suddenly forgotten
+
+00:06:59.960 --> 00:07:03.519
+which is the first argument which is the second argument
+
+00:07:03.520 --> 00:07:07.639
+usually you have if you stay inside the function it will show
+
+00:07:07.640 --> 00:07:10.839
+in the modline what the arguments are supposed to be and what
+
+00:07:10.840 --> 00:07:13.599
+their names are so that it's actually pretty useful. And you
+
+00:07:13.600 --> 00:07:16.399
+get similar things if you're writing other languages, like
+
+00:07:16.400 --> 00:07:19.999
+I write Go for a living, and it's always good to have the
+
+00:07:20.000 --> 00:07:22.599
+signature appears in the model line whenever you're
+
+00:07:22.600 --> 00:07:28.199
+writing the start of a function. So I'm seeing, I'll read out
+
+00:07:28.200 --> 00:07:34.919
+a couple comments here. I just, I note the, you know, use of
+
+00:07:34.920 --> 00:07:38.559
+transient as a bridge to Elisp, especially if you don't know
+
+00:07:38.560 --> 00:07:42.519
+it well, you're not interested in learning it, even
+
+00:07:42.520 --> 00:07:48.759
+perhaps. I've certainly run into that. You know, oh, yuck,
+
+00:07:48.760 --> 00:07:51.799
+Elisp. No, I'm doing fine with Customize or whatever works
+
+00:07:51.800 --> 00:07:54.799
+for you, right? That's a lot of the Emacs spirit. So I hear
+
+NOTE Casual
+
+00:07:54.800 --> 00:08:00.879
+that. Uh, and then, and that brings up casual, which, uh,
+
+00:08:00.880 --> 00:08:04.599
+I've seen a lot of discussion of personally, and that, that
+
+00:08:04.600 --> 00:08:09.719
+looks, uh, you know, uh, it's an, all of these types of things
+
+00:08:09.720 --> 00:08:12.879
+like org actually, which we've been talking a lot about this
+
+00:08:12.880 --> 00:08:17.919
+weekend. you know, bring together a lot of functionality
+
+00:08:17.920 --> 00:08:21.039
+kind of cross-cuttingly across Emacs, all the different
+
+00:08:21.040 --> 00:08:26.079
+languages that we can figure out how to view nicely in Emacs
+
+00:08:26.080 --> 00:08:29.519
+will, you know, fit into some sort of, you know, kind of
+
+00:08:29.520 --> 00:08:34.759
+literate format to talk about. code that needs to span a lot
+
+00:08:34.760 --> 00:08:40.639
+of languages for whatever reason, right? So I guess my bite
+
+00:08:40.640 --> 00:08:47.759
+at the apple there. Yeah, casual's neat and so is transient.
+
+00:08:47.760 --> 00:08:52.559
+I haven't... I haven't for myself... I've seen some comments in
+
+00:08:52.560 --> 00:08:56.439
+chat throughout the weekend good discussion around hey
+
+00:08:56.440 --> 00:08:59.639
+that's you know it's kind of hard to learn how to use how do I
+
+00:08:59.640 --> 00:09:01.999
+fit this into my use case how do I think about things in the
+
+00:09:02.000 --> 00:09:07.079
+same terms that transients abstractions do so that you know
+
+00:09:07.080 --> 00:09:10.359
+to the extent I need to I build my program in terms of those
+
+00:09:10.360 --> 00:09:14.759
+same abstractions or to the extent that isn't necessary or
+
+00:09:14.760 --> 00:09:18.479
+helpful just so that it's natural for me to set up my
+
+00:09:18.480 --> 00:09:22.399
+customized variables so that my saved routines just do the
+
+00:09:22.400 --> 00:09:25.639
+right thing or my read routine spectrum in the right place or
+
+00:09:25.640 --> 00:09:30.119
+whatever, tying the room together, sorts of integration. I
+
+00:09:30.120 --> 00:09:34.119
+haven't run into that because for me, I'm on this journey of
+
+00:09:34.120 --> 00:09:36.639
+learning the keys was my point. I'm not actually preaching
+
+00:09:36.640 --> 00:09:41.839
+for that's the way to use Emacs, quite the reverse.
+
+00:09:41.840 --> 00:09:42.199
+away.
+
+00:09:42.200 --> 00:09:50.839
+All right, I see that some people are joining us on the BBB, so
+
+00:09:50.840 --> 00:09:53.559
+if you've got a mic on, we're gonna assume that you want to be
+
+00:09:53.560 --> 00:09:56.879
+chatting, but don't hesitate to interrupt us if you've got
+
+00:09:56.880 --> 00:10:00.559
+anything to contribute, meaningful otherwise, if you just
+
+00:10:00.560 --> 00:10:04.999
+want to chat it up with us, we are also here for this. Yeah, and
+
+00:10:05.000 --> 00:10:07.999
+to do the radio announcer thing a little harder too. Like,
+
+00:10:08.000 --> 00:10:10.679
+you know, I guess in my mind, I'm thinking of this as a call-in
+
+00:10:10.680 --> 00:10:13.679
+format. Just come over and grab a microphone and talk about
+
+00:10:13.680 --> 00:10:16.319
+your thoughts and whether it's something that Leo or I are
+
+00:10:16.320 --> 00:10:19.959
+saying, or Sacha, that you've been pretty quiet over there,
+
+00:10:19.960 --> 00:10:24.879
+that are setting you going, or you just kind of walk into the
+
+00:10:24.880 --> 00:10:27.719
+room with, hey guys, why aren't we talking about, or let's
+
+00:10:27.720 --> 00:10:31.119
+talk more about, or thoughts from the weekend, which as Leo
+
+00:10:31.120 --> 00:10:35.079
+mentioned, is kind of where we're gonna where we in our own
+
+00:10:35.080 --> 00:10:37.559
+minds are sort of sitting, walking into the room.
+
+NOTE Closing remarks
+
+00:10:37.560 --> 00:10:49.759
+Perhaps what we could do is I mentioned that we could perhaps
+
+00:10:49.760 --> 00:10:51.999
+take a little bit of advance on the closing remark. I know it
+
+00:10:52.000 --> 00:10:54.719
+feels weird to be closing a conference that has not yet
+
+00:10:54.720 --> 00:10:57.639
+finished because we still have many talks in the afternoon.
+
+00:10:57.640 --> 00:11:01.359
+If I count, we have one, two, three, four, five talks. Well,
+
+00:11:01.360 --> 00:11:05.759
+actually, no, four. So there's still plenty to go. But
+
+00:11:05.760 --> 00:11:10.199
+since, you know, you know, I'm still in Europe and it's still
+
+00:11:10.200 --> 00:11:14.839
+pretty tough to maintain composure until 11. Might be a good
+
+00:11:14.840 --> 00:11:18.559
+time for us maybe to read over the closing remarks. How do you
+
+00:11:18.560 --> 00:11:21.079
+feel, Corwin, about this and Sacha, how do you feel about
+
+00:11:21.080 --> 00:11:27.239
+this? Yep, that'd be cool. Sacha? Fine with me. People can
+
+00:11:27.240 --> 00:11:30.919
+continue to share thoughts and ideas in the chat or in the
+
+00:11:30.920 --> 00:11:34.679
+Etherpad and we can go through the closing remarks. You want
+
+00:11:34.680 --> 00:11:40.159
+to share the sun-close? Uh, I do have them. I'm not sure. So you
+
+00:11:40.160 --> 00:11:43.199
+did copy over. Okay, good. I can kind of rotate the screen
+
+00:11:43.200 --> 00:11:47.519
+between them if that works. And I'll try to jump over to chat a
+
+00:11:47.520 --> 00:11:52.119
+little more. Uh, you know, sure. I'm putting the link on BBB
+
+00:11:52.120 --> 00:11:54.759
+just in case people in there wants to follow. And also for
+
+00:11:54.760 --> 00:11:58.079
+you, Corwin, if you want to open it up more quickly. Yeah,
+
+00:11:58.080 --> 00:12:01.359
+that's going to be easier. Thank you.
+
+00:12:01.360 --> 00:12:08.359
+Pretty sure I have the Sunday close pad here, but I'll take
+
+00:12:08.360 --> 00:12:09.679
+your link, sir.
+
+00:12:09.680 --> 00:12:37.839
+Um, I mean, I've got my org channel. Sure. I mean, Elephant
+
+00:12:37.840 --> 00:12:40.479
+Ergo, if you want to jump in, you know, we were suggesting
+
+00:12:40.480 --> 00:12:45.319
+doing the Saturday, Sunday close, sorry. Instead of having
+
+00:12:45.320 --> 00:12:47.999
+people chat, but if you have something to say right now, feel
+
+00:12:48.000 --> 00:12:50.239
+free to jump in. Although you do not have your microphone on,
+
+00:12:50.240 --> 00:12:57.599
+you would need to join the audio in order to chat. Yep, and you
+
+00:12:57.600 --> 00:13:01.919
+can also use any of the private message type of features. Did
+
+00:13:01.920 --> 00:13:05.639
+you guys want me to bring up the pad here? I did pull it up. Oh,
+
+00:13:05.640 --> 00:13:12.359
+well, I got it already. Understood. Okay, cool. So I think
+
+00:13:12.360 --> 00:13:14.839
+Elephant Ergonomics is currently switching to the
+
+00:13:14.840 --> 00:13:18.239
+microphone so that they may ask a question. So I suggest we
+
+00:13:18.240 --> 00:13:18.999
+wait a little bit.
+
+00:13:19.000 --> 00:13:24.759
+Elephant Ergonomics, yes, right now, you figured it out.
+
+00:13:24.760 --> 00:13:30.119
+Hi. Is this working? Oh, wow. Cool. Okay. Long time
+
+00:13:30.120 --> 00:13:33.879
+listener. First time on the show. Wow.
+
+NOTE Graphical web browsing
+
+00:13:33.880 --> 00:13:39.839
+Okay. Well, I shouldn't let my nerves get the best of me now
+
+00:13:39.840 --> 00:13:44.839
+because I got it all set up. So basically the thing that I've
+
+00:13:44.840 --> 00:13:50.519
+been thinking about because I've had a a handful of thoughts
+
+00:13:50.520 --> 00:13:55.719
+related to graphical web browsing. Because I know that
+
+00:13:55.720 --> 00:14:00.999
+that's a point of friction for me, for sure. I don't know how
+
+00:14:01.000 --> 00:14:04.599
+much other people experience that. I know that I've
+
+00:14:04.600 --> 00:14:08.199
+certainly heard murmurs about it. But I've been
+
+00:14:08.200 --> 00:14:14.239
+speculating about a couple of thoughts about that recently
+
+00:14:14.240 --> 00:14:18.239
+for some of the stuff that can be done in order to get like the
+
+00:14:18.240 --> 00:14:22.719
+sort of invasive graphical JavaScript, giant
+
+00:14:22.720 --> 00:14:27.639
+unmanageable spec sort of version of the browser working
+
+00:14:27.640 --> 00:14:31.359
+inside of Emacs, you know, in addition to, you know, the much
+
+00:14:31.360 --> 00:14:33.439
+more manageable EWW kind of thing.
+
+00:14:33.440 --> 00:14:42.919
+So yeah, basically as part of my rambling, I had basically
+
+00:14:42.920 --> 00:14:47.719
+two major thoughts for strategies, because God knows this is
+
+00:14:47.720 --> 00:14:52.519
+way too big of a thing for me to tackle just for me. And I have
+
+00:14:52.520 --> 00:14:55.759
+been kind of thinking, you know, where do I go about getting
+
+00:14:55.760 --> 00:14:59.559
+started? And I think maybe that would probably just look
+
+00:14:59.560 --> 00:15:03.959
+like maybe, you know, pitching ideas that have been on the
+
+00:15:03.960 --> 00:15:08.119
+back of my mind.
+
+00:15:08.120 --> 00:15:14.919
+The first of which is that I stumbled upon uh, this
+
+00:15:14.920 --> 00:15:20.119
+application while ago called browsh. Uh, it's a, I'm going to
+
+00:15:20.120 --> 00:15:25.127
+go ahead and post that in the chat. Um, and just the, uh,
+
+00:15:25.128 --> 00:15:26.479
+emacsconf-gen.
+
+00:15:26.480 --> 00:15:31.479
+So let's see here. It's not going.
+
+00:15:31.480 --> 00:15:43.079
+Oh, trying to light space. Cool. So this is a, I have no
+
+00:15:43.080 --> 00:15:46.319
+personal involvement with this project. The person that
+
+00:15:46.320 --> 00:15:50.919
+developed this does not know I exist, but I stumbled upon
+
+00:15:50.920 --> 00:15:54.479
+this in the wild. And what's really quite interesting about
+
+00:15:54.480 --> 00:15:58.879
+it is that it will run, it's effectively a headless browser
+
+00:15:58.880 --> 00:16:04.839
+in the background and then convert this into blocks of text
+
+00:16:04.840 --> 00:16:07.959
+for the sake of rendering inside a terminal. This is
+
+00:16:07.960 --> 00:16:12.479
+especially helpful in the case where you can run the daemon
+
+00:16:12.480 --> 00:16:15.159
+that's actually responsible for the headless browser
+
+00:16:15.160 --> 00:16:20.599
+instance on a completely different box than the one that
+
+00:16:20.600 --> 00:16:25.879
+you're actually running your shell on. And you have this
+
+00:16:25.880 --> 00:16:30.959
+complete separation between the I/O and the actual handling
+
+00:16:30.960 --> 00:16:36.319
+of all of the complex, kind of opaque, really unmanageable,
+
+00:16:36.320 --> 00:16:39.959
+big browser stuff. I'm thinking that there's definitely
+
+00:16:39.960 --> 00:16:44.039
+something that we could consider cannibalizing here,
+
+00:16:44.040 --> 00:16:44.599
+either for
+
+00:16:44.600 --> 00:16:51.959
+one of the different rendering paradigms that fits inside
+
+00:16:51.960 --> 00:16:57.839
+of Emacs more cleanly, especially either like the SVG
+
+00:16:57.840 --> 00:17:02.679
+renderer. Or again, trying to figure out how to break it into
+
+00:17:02.680 --> 00:17:06.479
+blocks somehow, but I feel like there's definitely.
+
+00:17:06.480 --> 00:17:11.559
+Something very Emacs-y about the strategy that I would love to
+
+00:17:11.560 --> 00:17:16.079
+consider, especially for someone more technically
+
+00:17:16.080 --> 00:17:20.359
+qualified than I. To consider, I would love to tackle this.
+
+00:17:20.360 --> 00:17:24.959
+Given that I have the time, but I didn't want to sit on this
+
+00:17:24.960 --> 00:17:29.119
+idea. On my own on the basis that, you know, there's a lot
+
+00:17:29.120 --> 00:17:33.479
+really qualified people here and I figured that. You know,
+
+00:17:33.480 --> 00:17:36.519
+someone that's a little bit more frustrated than me about
+
+00:17:36.520 --> 00:17:39.719
+this could very well. Pick this up and run with it.
+
+00:17:39.720 --> 00:17:46.599
+So I wanted to suggest that I also wanted to suggest the
+
+00:17:46.600 --> 00:17:53.759
+prospect of... I found a couple of just completely separately
+
+00:17:53.760 --> 00:17:57.899
+as a strategy to
+
+00:17:57.900 --> 00:18:07.000
+the ability to re-render outputted DOM content
+
+00:18:07.001 --> 00:18:10.417
+that would be rendered by, again, a
+
+00:18:10.418 --> 00:18:13.599
+full-fledged browser, probably in a headless,
+
+00:18:13.600 --> 00:18:15.309
+a sort of instance and then
+
+00:18:15.310 --> 00:18:20.530
+converting that DOM content to SVG,
+
+00:18:20.531 --> 00:18:22.791
+which we could then render inside of Emacs
+
+00:18:22.792 --> 00:18:25.319
+either piecewise or as
+
+00:18:25.320 --> 00:18:31.279
+the entire document. And I feel that that could be another
+
+00:18:31.280 --> 00:18:36.719
+strategy that we could perhaps consider as something that
+
+00:18:36.720 --> 00:18:41.399
+we can do for, you know, headless processing, and then
+
+00:18:41.400 --> 00:18:43.839
+having the Emacs rendering engine actually responsible
+
+00:18:43.840 --> 00:18:52.759
+for the display and the I/O. So yeah, I just wanted to suggest a
+
+00:18:52.760 --> 00:19:00.279
+couple of those sort of ideas I've been sitting on. A couple
+
+NOTE org-web-tools
+
+00:19:00.280 --> 00:19:03.479
+of things related to that stuff would be org-web-tools, I
+
+00:19:03.480 --> 00:19:07.519
+think is what it's called, from alphapapa. It'll allow you
+
+00:19:07.520 --> 00:19:12.359
+to download a webpage into an Org Mode document. Or if you
+
+00:19:12.360 --> 00:19:16.519
+wanted to use a web browser that would have key bindings,
+
+00:19:16.520 --> 00:19:20.759
+primarily, you would want to use the next browser or
+
+00:19:20.760 --> 00:19:27.719
+qutebrowser, where they're more of meant to have their settings
+
+00:19:27.720 --> 00:19:33.319
+saved in a text document. And in the case of Next, it's
+
+00:19:33.320 --> 00:19:39.839
+written in Common Lisp and is very deeply inspired by Emacs.
+
+00:19:39.840 --> 00:19:43.199
+So I'll just break in what is a great discussion briefly to
+
+00:19:43.200 --> 00:19:45.959
+say. If you're just joining us, you're watching the Emacs
+
+00:19:45.960 --> 00:19:50.479
+conference. We're doing a brief open mic session. And we've
+
+00:19:50.480 --> 00:19:56.119
+been joined, we have... Sorry, I was just going to introduce
+
+00:19:56.120 --> 00:20:13.039
+you, Plasma. Sorry. Nasty feedback from you, Sacha. Sorry.
+
+00:20:13.040 --> 00:20:17.719
+We'll definitely have to check out integration for those
+
+00:20:17.720 --> 00:20:22.559
+two browsers. You know, this is my first time taking a look at
+
+00:20:22.560 --> 00:20:28.239
+web tools. This could definitely help me.
+
+NOTE qutebrowser
+
+00:20:28.240 --> 00:20:32.879
+I've been using qutebrowser really persistently. It has
+
+00:20:32.880 --> 00:20:35.199
+dramatically improved my browser experience, but I'm
+
+00:20:35.200 --> 00:20:39.559
+still definitely having that last little bit of context
+
+00:20:39.560 --> 00:20:43.359
+switch friction that I would love to make disappear. Next
+
+00:20:43.360 --> 00:20:47.439
+might be part of the recipe, but I definitely think that, you
+
+00:20:47.440 --> 00:20:51.199
+know, certainly the goal for me is that I would love to see it
+
+00:20:51.200 --> 00:20:56.839
+inside Emacs itself. But this is, this definitely
+
+00:20:56.840 --> 00:21:00.319
+represents a big piecewise improvement I'm going to have to
+
+00:21:00.320 --> 00:21:05.679
+pursue. So thank you.
+
+00:21:05.680 --> 00:21:09.439
+So I think that that intersects some some several
+
+00:21:09.440 --> 00:21:11.679
+conversations that I think we've heard throughout the
+
+00:21:11.680 --> 00:21:17.879
+weekend kind of touching on the idea of, you know, baking our
+
+00:21:17.880 --> 00:21:22.759
+baking our thoughts into the core of Emacs right. and
+
+00:21:22.760 --> 00:21:27.519
+realizing, oh yeah, this is a pattern other people or a
+
+00:21:27.520 --> 00:21:30.159
+problem other people are running into or a way that other
+
+00:21:30.160 --> 00:21:38.199
+people work or a way that people want Emacs to look or just
+
+00:21:38.200 --> 00:21:40.479
+starts me thinking about like alternate key binding
+
+00:21:40.480 --> 00:21:43.639
+packages, which over the last few years, I feel like we've
+
+00:21:43.640 --> 00:21:47.159
+seen just a ton of options in a space that had been somewhat
+
+00:21:47.160 --> 00:21:50.439
+dormant, right? There was evil and everything else. And now
+
+00:21:50.440 --> 00:21:54.759
+there is a lot of granularity in my mind to everything else.
+
+00:21:54.760 --> 00:21:57.039
+So although I'm not using any of these things, I think I've
+
+00:21:57.040 --> 00:22:02.039
+bumped into them a lot. A couple of other related topics in
+
+00:22:02.040 --> 00:22:05.359
+case that jogs anyone's interest to jump in and join the
+
+00:22:05.360 --> 00:22:16.039
+discussion. Yeah, thanks. Thanks for the comments.
+
+00:22:16.040 --> 00:22:18.679
+Any other person wants to share something in the room
+
+00:22:18.680 --> 00:22:22.159
+currently? I'm seeing plenty of familiar names, so this is
+
+00:22:22.160 --> 00:22:26.399
+an invitation for those who I haven't heard so far to come in
+
+00:22:26.400 --> 00:22:30.479
+and chat.
+
+00:22:30.480 --> 00:22:34.839
+And I mentioned to a comment I see from wasamasa saying, I've
+
+00:22:34.840 --> 00:22:39.399
+been experimenting with using some crap to review ELIS
+
+00:22:39.400 --> 00:22:43.239
+security issues. That's something.
+
+00:22:43.240 --> 00:22:48.999
+you want to leave. I'm not sure that is. Yeah. I'm not sure if
+
+00:22:49.000 --> 00:22:52.599
+Wes and Marcel wants to deprive themselves of, well,
+
+00:22:52.600 --> 00:22:56.559
+actually unmuted yourself. So please go. What? I've only
+
+00:22:56.560 --> 00:23:00.959
+got my name, that's all. I was just reading out your comment
+
+00:23:00.960 --> 00:23:06.199
+from the chat. Yeah. Just jump in on any topic, honestly.
+
+00:23:06.200 --> 00:23:09.599
+Okay. I thought like, it's like an invitation for people to
+
+00:23:09.600 --> 00:23:12.519
+talk what, you know, they've recently started trying to do
+
+00:23:12.520 --> 00:23:15.359
+in Emacs. That's exactly right. A hundred percent. Okay.
+
+00:23:15.360 --> 00:23:22.519
+Okay. So, well, I do review security things for work. And one
+
+00:23:22.520 --> 00:23:25.839
+colleague has been like bugging me all the time about, hey,
+
+00:23:25.840 --> 00:23:28.279
+try semgrep. It's pretty cool if you have like, you know,
+
+00:23:28.280 --> 00:23:32.119
+decent rules to review stuff. And I postponed it for the
+
+00:23:32.120 --> 00:23:35.879
+longest time. And then I thought, actually, you know what,
+
+00:23:35.880 --> 00:23:38.959
+which would really make sense to like try out whether it even
+
+00:23:38.960 --> 00:23:44.039
+works for elisp source code review at all. And the answer is
+
+00:23:44.040 --> 00:23:47.119
+somewhat like apparently they've added LISP support,
+
+00:23:47.120 --> 00:23:50.439
+which is pretty cool. So it seems it's like best developed
+
+00:23:50.440 --> 00:23:55.279
+for like reviewing closure code. There are no rules to my
+
+00:23:55.280 --> 00:23:59.599
+knowledge. I started writing some and yeah, it does work. I
+
+00:23:59.600 --> 00:24:02.999
+have no idea how many, how many other people are trying to
+
+00:24:03.000 --> 00:24:05.799
+actively look into Emacs security issues. It feels to me
+
+00:24:05.800 --> 00:24:07.919
+like it's like a handful at best, like I don't know,
+
+00:24:07.920 --> 00:24:13.279
+somewhere between three and five people maybe. And yeah. If
+
+00:24:13.280 --> 00:24:17.159
+anyone knows any rule sets for making this easier, I would be
+
+00:24:17.160 --> 00:24:20.999
+very interested, because then we'd have a common place to
+
+00:24:21.000 --> 00:24:24.799
+share them. Maybe it'd be appropriate for me to jump back in
+
+00:24:24.800 --> 00:24:28.159
+here and just share that, you know, you're somebody that I
+
+00:24:28.160 --> 00:24:31.639
+definitely trust with these issues. We could talk in the
+
+00:24:31.640 --> 00:24:36.039
+abstract at least about places where, you know, Emacs, not
+
+00:24:36.040 --> 00:24:38.599
+necessarily the Emacs team, but maybe more the Free
+
+00:24:38.600 --> 00:24:41.839
+Software Society has said, oh, somebody reached out to us
+
+00:24:41.840 --> 00:24:44.879
+about this possible concern. Can you dig into that and find
+
+00:24:44.880 --> 00:24:48.279
+out if there's, you know, any reason to be concerned and then
+
+00:24:48.280 --> 00:24:52.279
+find the right people on the Emacs project team and work with
+
+00:24:52.280 --> 00:24:54.599
+that. So I know that this is something you've been working on
+
+00:24:54.600 --> 00:24:57.519
+actually for, I don't want to say several years, but more
+
+00:24:57.520 --> 00:25:05.719
+than a year.
+
+00:25:05.720 --> 00:25:08.959
+All right. Any other person wants to share something?
+
+00:25:08.960 --> 00:25:12.519
+Otherwise we have about 15 minutes until the next talk is due
+
+00:25:12.520 --> 00:25:15.239
+to go live, which would leave us some time to do the closing
+
+00:25:15.240 --> 00:25:15.559
+remarks.
+
+00:25:15.560 --> 00:25:27.359
+Let's wait just a bit, let's give people 30 seconds maybe to
+
+00:25:27.360 --> 00:25:31.359
+connect their thoughts and share them on IRC or to join the
+
+00:25:31.360 --> 00:25:36.079
+BBB. So in the spirit of, you know, get it out of the way so that
+
+00:25:36.080 --> 00:25:39.479
+we can let people go to bed and not do our usual rambling two
+
+00:25:39.480 --> 00:25:42.359
+hours of open remarks where we regret that we didn't turn
+
+00:25:42.360 --> 00:25:45.279
+them into the open mic. Right. So hopefully everyone's
+
+00:25:45.280 --> 00:25:47.959
+getting the message that, you know, we love to talk about
+
+00:25:47.960 --> 00:25:50.999
+Emacs and if you've been to prior conferences, you're
+
+00:25:51.000 --> 00:25:52.959
+probably, and you've watched through the closing
+
+00:25:52.960 --> 00:25:55.879
+ceremonies, you may have noticed that we do, you know, We
+
+00:25:55.880 --> 00:25:59.239
+have a lot of fun talking about all the different ideas that
+
+00:25:59.240 --> 00:26:03.959
+have come forward here. And so this is realizing that and
+
+00:26:03.960 --> 00:26:08.239
+also realizing that our habit of talking for several hours
+
+00:26:08.240 --> 00:26:12.879
+as part of closing the conference is maybe keeping some of us
+
+00:26:12.880 --> 00:26:19.839
+up at night and jobs and things. So in that spirit, I just want
+
+00:26:19.840 --> 00:26:23.599
+to throw out And I you know, I like to talk about this at least
+
+00:26:23.600 --> 00:26:28.679
+once a year. I mean isn't here and I tend to defer to him It's so
+
+00:26:28.680 --> 00:26:31.679
+I'll also use this opportunity to say gosh. I miss that guy
+
+00:26:31.680 --> 00:26:38.239
+and thanks so much For all of you've done over the years. Yeah
+
+00:26:38.240 --> 00:26:41.279
+I'm sorry, you can't make it this year and I'm actually have
+
+00:26:41.280 --> 00:26:44.799
+personally having a lot of fun covering for me for you It
+
+00:26:44.800 --> 00:26:48.079
+gives me a A lot of little things that I've picked up how to do,
+
+00:26:48.080 --> 00:26:50.919
+I'm actually getting to do a little bit of. So fun stuff for
+
+00:26:50.920 --> 00:26:58.879
+me, but miss you. And in that spirit and thinking of you,
+
+00:26:58.880 --> 00:27:05.599
+Amin, I'll also say that, and that's Bandali, if you know him
+
+00:27:05.600 --> 00:27:06.599
+from IRC more.
+
+00:27:06.600 --> 00:27:12.399
+He would want us to make sure that we talk about the Free
+
+00:27:12.400 --> 00:27:16.999
+Software Foundation and the fact that that is giving to the
+
+00:27:17.000 --> 00:27:19.719
+Free Software Foundation as the primary means to support
+
+00:27:19.720 --> 00:27:23.759
+development of Emacs and other GNU packages. We, as a
+
+00:27:23.760 --> 00:27:26.399
+project, are part of the giving... Somebody help me with the
+
+00:27:26.400 --> 00:27:31.199
+name of the project. It's not in the... I'll just go back to it
+
+00:27:31.200 --> 00:27:39.439
+and even show it, right? So, we are part of the giving
+
+00:27:39.440 --> 00:27:45.359
+together or working together. A program, and you can, you
+
+00:27:45.360 --> 00:27:48.399
+can get through that. There may be some matching going on.
+
+00:27:48.400 --> 00:27:52.359
+There's a fundraiser also that happens to typically run
+
+00:27:52.360 --> 00:27:57.719
+during the conference currently. and I encourage you to
+
+00:27:57.720 --> 00:28:03.039
+become a member and there's some newer, lower amount. Also,
+
+00:28:03.040 --> 00:28:06.599
+you can get directly directed through this program to the
+
+00:28:06.600 --> 00:28:09.599
+Emacs conference. For the first time this year, we're
+
+00:28:09.600 --> 00:28:13.679
+actually using those funds. Sacha went and did a bunch of
+
+00:28:13.680 --> 00:28:17.879
+work to enable us to use some more scalable purchased
+
+00:28:17.880 --> 00:28:20.719
+infrastructure that's different from what the FSF just
+
+00:28:20.720 --> 00:28:23.359
+provides us, for example. We use a lot of different things
+
+00:28:23.360 --> 00:28:27.799
+and thanks also to Pearl and others who are providing us
+
+00:28:27.800 --> 00:28:30.639
+infrastructure, as well as Sacha for just the amazing work
+
+00:28:30.640 --> 00:28:38.279
+that you do there. And as well to people that are giving in
+
+00:28:38.280 --> 00:28:41.679
+some other way, such as your time contributed to the EMAX
+
+00:28:41.680 --> 00:28:45.439
+project, to the many cool packages I myself take advantage
+
+00:28:45.440 --> 00:28:49.319
+of. And all of that, don't please feel pressured to break the
+
+00:28:49.320 --> 00:28:53.839
+piggy bank when that's a bad idea to help out, but it's help
+
+00:28:53.840 --> 00:29:02.119
+when you can. All right, how about we start from the top of the
+
+00:29:02.120 --> 00:29:04.359
+closing remarks so that we make sure that we don't forget
+
+00:29:04.360 --> 00:29:08.119
+anyone or anything. So if you could scroll just a little bit
+
+00:29:08.120 --> 00:29:10.079
+over, Corbyn, on your screen.
+
+00:29:10.080 --> 00:29:21.119
+I think you went on the right one. It's a little small for me to
+
+00:29:21.120 --> 00:29:22.719
+see which one it is.
+
+00:29:22.720 --> 00:29:29.919
+No, I think it's the other pad. You had it open right before. I
+
+00:29:29.920 --> 00:29:34.439
+think it's Sunday Close, the other tab on your browser. I
+
+00:29:34.440 --> 00:29:37.159
+managed to meet myself in BBB. That's what happened there.
+
+00:29:37.160 --> 00:29:42.879
+Okay, sorry. So here, and you wanted up or down? I wanted up,
+
+00:29:42.880 --> 00:29:47.759
+just as soon as you see the dashed line. Run through these
+
+00:29:47.760 --> 00:29:52.039
+instead of Corwin getting his stuff out of the way. Word.
+
+00:29:52.040 --> 00:29:56.599
+Yeah, but I'll make sure to skip over the stuff that you
+
+00:29:56.600 --> 00:30:00.599
+already mentioned. But yes, let's try to preempt a little
+
+00:30:00.600 --> 00:30:05.599
+bit the end of the conference for the reasons I've mentioned
+
+00:30:05.600 --> 00:30:10.359
+before. I get first to thank you all so much for being part of
+
+00:30:10.360 --> 00:30:15.759
+Emacs Conf 2024. Obviously, we still have a handful more
+
+00:30:15.760 --> 00:30:19.039
+talks to go this afternoon, but thanks again for showing up.
+
+00:30:19.040 --> 00:30:24.039
+We've had steady numbers for the last five years or so. This
+
+00:30:24.040 --> 00:30:28.199
+is my fifth year. hosting the general track and we've always
+
+00:30:28.200 --> 00:30:32.399
+averaged between 150 to 200 viewers which is amazing when
+
+00:30:32.400 --> 00:30:38.279
+you just think about it but we We are accruing plenty more
+
+00:30:38.280 --> 00:30:41.759
+views over the years because everyone is watching either on
+
+00:30:41.760 --> 00:30:44.959
+the website or on YouTube or on PeerTube. So thank you so much
+
+00:30:44.960 --> 00:30:48.079
+for everyone taking the time to, well, first come to the
+
+00:30:48.080 --> 00:30:51.879
+show. To watch the video, to share it, absolutely. Yes,
+
+00:30:51.880 --> 00:30:53.999
+because we've just talked about viewers. If you're
+
+00:30:54.000 --> 00:30:57.119
+watching this a year from now, we're thanking you for the
+
+00:30:57.120 --> 00:31:00.999
+view. We're talking to you. If you're mentioning a video of
+
+00:31:01.000 --> 00:31:06.159
+the Society Maths Conference, Thanks for doing that.
+
+00:31:06.160 --> 00:31:10.319
+That's what makes this worth it. The thing that we have to
+
+00:31:10.320 --> 00:31:14.239
+talk about for hours after it ends every year, sorry about
+
+00:31:14.240 --> 00:31:18.399
+that if it's been a disruption for your schedule, is the
+
+00:31:18.400 --> 00:31:21.199
+sense of community that we feel when we come together and
+
+00:31:21.200 --> 00:31:24.319
+watch all the different chats running on all these. I have a
+
+00:31:24.320 --> 00:31:27.959
+bunch of screens going so that I can see all the different
+
+00:31:27.960 --> 00:31:32.439
+chats and we all have a different way of connecting to all the
+
+00:31:32.440 --> 00:31:34.759
+different conversations going on. It's just a lot of
+
+00:31:34.760 --> 00:31:41.879
+energy. But at the end of the day, it's about helping people
+
+00:31:41.880 --> 00:31:46.399
+connect with the other groups and subgroups of people that
+
+00:31:46.400 --> 00:31:48.759
+are excited about the same stuff using Emacs to get there.
+
+00:31:48.760 --> 00:31:55.959
+Yeah, definitely. A word on those recordings, because we
+
+00:31:55.960 --> 00:32:00.879
+mentioned the previous year's videos, but when it comes to
+
+00:32:00.880 --> 00:32:04.439
+this conference, the videos, most of the pre-recording and
+
+00:32:04.440 --> 00:32:07.719
+most of the talk that we had except one this year, they are
+
+00:32:07.720 --> 00:32:13.079
+already available on emaxconf-.org, the website. You can
+
+00:32:13.080 --> 00:32:16.839
+also find them on the YouTube account for emaxconf, they're
+
+00:32:16.840 --> 00:32:21.159
+fairly easy to find. We'll try to get them on PeerTube at some
+
+00:32:21.160 --> 00:32:26.159
+point. We are not sure when. But the rule is, right now, we are
+
+00:32:26.160 --> 00:32:28.999
+going to take some time. Go on, Sacha, if you want. There are
+
+00:32:29.000 --> 00:32:33.959
+two things already. I should put a URL to the channel in.
+
+00:32:33.960 --> 00:32:38.959
+Okay, sure. So, Sacha will take care of this. But all the
+
+00:32:38.960 --> 00:32:41.839
+pre-recordings are already available with the subtitles
+
+00:32:41.840 --> 00:32:44.159
+when we manage to receive them sufficiently early. And if
+
+00:32:44.160 --> 00:32:47.279
+not, it'll take maybe a couple of days for us to get them out
+
+00:32:47.280 --> 00:32:50.319
+there. But yes, the pre-recordings are there. When it comes
+
+00:32:50.320 --> 00:32:53.599
+to the live Q&A, so the little sessions you've seen us do live
+
+00:32:53.600 --> 00:32:57.239
+when we were on BBB asking questions to the speakers and also
+
+00:32:57.240 --> 00:32:59.799
+having people join in the discussion, this will take a
+
+00:32:59.800 --> 00:33:02.759
+little more time for us to publish them because we like to
+
+00:33:02.760 --> 00:33:06.919
+follow a process of captioning them and making sure we take
+
+00:33:06.920 --> 00:33:09.319
+all the questions and all the answers from the pad and
+
+00:33:09.320 --> 00:33:12.999
+centralize everything on the website. So this is a process
+
+00:33:13.000 --> 00:33:16.439
+that takes about two to three weeks and we are not putting a
+
+00:33:16.440 --> 00:33:18.959
+lot of pressure on us to do this. If there is anything you're
+
+00:33:18.960 --> 00:33:21.839
+dying to see you'll have to wait a little bit but we'll try to
+
+00:33:21.840 --> 00:33:24.959
+make sure to make the information available as soon as we
+
+00:33:24.960 --> 00:33:27.999
+can. So
+
+00:33:28.000 --> 00:33:31.759
+Let me read the notes just to make sure we're not forgetting
+
+00:33:31.760 --> 00:33:36.839
+anything. Yes, when it comes to the publishing process, if
+
+00:33:36.840 --> 00:33:39.279
+you want to keep in touch and know when something is going to
+
+00:33:39.280 --> 00:33:42.199
+be released, we will announce all of this on the
+
+00:33:42.200 --> 00:33:45.959
+emacsconf-discuss mailing list, so emacsconf-discuss.
+
+00:33:45.960 --> 00:33:49.639
+You'll be able to find the link on the website as well and it's
+
+00:33:49.640 --> 00:33:53.039
+already on the pad that we are sharing currently on the
+
+00:33:53.040 --> 00:33:54.559
+screen.
+
+00:33:54.560 --> 00:33:59.679
+So obviously we'd be very happy to get some feedback from you
+
+00:33:59.680 --> 00:34:03.359
+on the conference and you can do this on this pad. We'll
+
+00:34:03.360 --> 00:34:05.519
+mention this at the end of the day again so that you get a
+
+00:34:05.520 --> 00:34:08.839
+chance to watch the last few talks of the conference and
+
+00:34:08.840 --> 00:34:11.559
+mention your thoughts on this but yeah we are very open to
+
+00:34:11.560 --> 00:34:17.319
+feedback. Part of the reason why It feels like a well-oiled
+
+00:34:17.320 --> 00:34:19.759
+machine, EmacsConf, is the fact that we've been iterating
+
+00:34:19.760 --> 00:34:25.159
+over the process for many years at this point. We'll get to
+
+00:34:25.160 --> 00:34:27.679
+the thanking to Sacha for the automation and to other
+
+00:34:27.680 --> 00:34:30.959
+volunteers for all their work, but really, it's really the
+
+00:34:30.960 --> 00:34:34.199
+feedback that you give us that allows us to refine the
+
+00:34:34.200 --> 00:34:37.439
+process of running the conference. And if it looks smooth
+
+00:34:37.440 --> 00:34:40.359
+and all this, well, it's mostly thanks to you, because what
+
+00:34:40.360 --> 00:34:43.559
+you believe was smooth, you mentioned as a feedback, and
+
+00:34:43.560 --> 00:34:47.639
+then we try to adapt our own processes so that we can match the
+
+00:34:47.640 --> 00:34:50.879
+level of smoothness that you expected. So thank you so much.
+
+00:34:50.880 --> 00:34:53.359
+Part of the success of EmacsConf is definitely on you.
+
+00:34:53.360 --> 00:34:59.879
+So again, if you've got feedback, please include them in the
+
+00:34:59.880 --> 00:35:03.279
+pad. When it comes to the stats, as I mentioned, we are
+
+00:35:03.280 --> 00:35:07.519
+usually averaging between 150 and 200 viewers. And this
+
+00:35:07.520 --> 00:35:12.079
+year, on the two tracks, we managed somehow to peak higher on
+
+00:35:12.080 --> 00:35:14.239
+the Dev track than on the Gen track, which is a first for the
+
+00:35:14.240 --> 00:35:16.839
+last five years. So that's an interesting tidbit of
+
+00:35:16.840 --> 00:35:20.959
+knowledge for you. But yeah, overall we had perhaps 300
+
+00:35:20.960 --> 00:35:22.999
+viewers total between the channels, which is amazing
+
+00:35:23.000 --> 00:35:27.039
+because you've got 300 people watching you live present and
+
+00:35:27.040 --> 00:35:32.919
+so that's a rich experience. All right, moving to the
+
+00:35:32.920 --> 00:35:36.319
+thanking section. We have plenty of people to thank without
+
+00:35:36.320 --> 00:35:42.399
+whom this conference would not be possible. First, I'd like
+
+00:35:42.400 --> 00:35:45.279
+to thank all the speakers, all the volunteers, the
+
+00:35:45.280 --> 00:35:48.399
+participants, and all the other people in our lives who make
+
+00:35:48.400 --> 00:35:50.839
+it possible through time and support to run this
+
+00:35:50.840 --> 00:35:53.199
+conference. Obviously, the speakers I've already
+
+00:35:53.200 --> 00:35:55.959
+mentioned, volunteers, you have some of them in the room
+
+00:35:55.960 --> 00:35:59.919
+right now. We've got Corwin, we've got Sacha, we also have
+
+00:35:59.920 --> 00:36:02.959
+Flowy, but we also have plenty of captioners in the
+
+00:36:02.960 --> 00:36:07.599
+background, whom I will get to in just a little while. This
+
+00:36:07.600 --> 00:36:11.239
+year's conference hosts are myself, Leo Vivier, and Corwin Brust
+
+00:36:11.240 --> 00:36:16.199
+and well not technically not FlowyCoder, not yet at least.
+
+00:36:16.200 --> 00:36:19.719
+Flowy, as you know, joined us last year and has been running
+
+00:36:19.720 --> 00:36:22.879
+check-ins in the background and we are very thankful for his
+
+00:36:22.880 --> 00:36:27.279
+contributions and maybe this afternoon he might be able to
+
+00:36:27.280 --> 00:36:31.719
+come. This is a fun process if you want to imagine what it's
+
+00:36:31.720 --> 00:36:35.359
+like for us backstage. Imagine, you know, Flowy's like
+
+00:36:35.360 --> 00:36:38.439
+getting everybody warmed up, goes in, talks to, gets a
+
+00:36:38.440 --> 00:36:41.879
+conversation going, everybody's ready, you know, the
+
+00:36:41.880 --> 00:36:45.079
+video is playing of the live stream, he's doing the warm hand
+
+00:36:45.080 --> 00:36:48.279
+up, everything ready, checking everything out. And then he
+
+00:36:48.280 --> 00:36:52.439
+hands the torch to Leo, or maybe me, and then we get to come in
+
+00:36:52.440 --> 00:36:54.959
+and have this amazing conversation based on all the buzz
+
+00:36:54.960 --> 00:36:57.079
+that's just been built up, knowing everything works out
+
+00:36:57.080 --> 00:37:00.359
+great. And one of these times, what Leo is telling you is that
+
+00:37:00.360 --> 00:37:04.159
+Flowy's just going to give Leo or me the cold shoulder and do
+
+00:37:04.160 --> 00:37:07.359
+the hosting himself. He did a great job with that last year,
+
+00:37:07.360 --> 00:37:14.119
+and we're looking forward to more of that. All right, I'll do
+
+00:37:14.120 --> 00:37:17.039
+a quick fire of thankings because we need to soon move on to
+
+00:37:17.040 --> 00:37:21.159
+the next talk of the day. I'd also like obviously to thank
+
+00:37:21.160 --> 00:37:25.239
+Sacha for managing the two streams and the one stream today
+
+00:37:25.240 --> 00:37:27.279
+because she's in the background making sure that
+
+00:37:27.280 --> 00:37:30.519
+everything goes all right for all our automation. And
+
+00:37:30.520 --> 00:37:34.759
+obviously Flowy again for the check-ins. I want also to thank,
+
+00:37:34.760 --> 00:37:40.639
+to extend my thankings, to the proposal review volunteers
+
+00:37:40.640 --> 00:37:44.839
+James Howell, Jean-Christophe Helary, and others for
+
+00:37:44.840 --> 00:37:48.119
+helping with the early acceptance process. I mentioned
+
+00:37:48.120 --> 00:37:50.839
+them, the captioning volunteers, Mark Lewin, Rodrigo
+
+00:37:50.840 --> 00:37:54.319
+Morales, Anoush, annona, and James Howell, and some speakers
+
+00:37:54.320 --> 00:37:56.799
+who captioned their own talks. I'm thinking about Eduardo
+
+00:37:56.800 --> 00:38:03.359
+especially. I guess thanks to me, be weird for me to read
+
+00:38:03.360 --> 00:38:07.399
+this, but I'm still going to do this, for fiddling with the
+
+00:38:07.400 --> 00:38:11.199
+audio and getting things nicely synced. For those who do not
+
+00:38:11.200 --> 00:38:13.759
+know, I also manage, I make sure that the audio is
+
+00:38:13.760 --> 00:38:16.079
+normalized, cleaned up, and all this for the conference,
+
+00:38:16.080 --> 00:38:18.479
+and usually it's one of the few things that Sacha doesn't
+
+00:38:18.480 --> 00:38:21.959
+like doing, and I'm very happy to pick the little crumbs to
+
+00:38:21.960 --> 00:38:26.199
+make sure that Emacs is as cool as it can get. Also thanks to
+
+00:38:26.200 --> 00:38:28.759
+Bhavin Gandhi, Christopher Howard, Joseph Turner and
+
+00:38:28.760 --> 00:38:30.959
+Screwless for quality checking the videos in the
+
+00:38:30.960 --> 00:38:34.359
+backstage. Thanks obviously to Shoshin for the music that
+
+00:38:34.360 --> 00:38:36.999
+has been accompanying us during the breaks. We've
+
+00:38:37.000 --> 00:38:41.039
+mentioned him already, but thanks to Amin Bandali for help
+
+00:38:41.040 --> 00:38:44.999
+with infrastructure and communication. Thanks to Ry P for
+
+00:38:45.000 --> 00:38:47.679
+the server that we're using for OBS streaming and for
+
+00:38:47.680 --> 00:38:50.719
+processing the videos. That's part of the reason why we are
+
+00:38:50.720 --> 00:38:55.879
+able to get the titles out so fast. And Corwin already
+
+00:38:55.880 --> 00:38:57.799
+mentioned the FSF but thanks to the Free Software
+
+00:38:57.800 --> 00:39:01.079
+Foundation for Emacs itself, the mailing list,
+
+00:39:01.080 --> 00:39:05.599
+media.emacs.org server where we host the conferences. We
+
+00:39:05.600 --> 00:39:10.799
+might have a little word about donations and funding the FSF
+
+00:39:10.800 --> 00:39:14.159
+later in the afternoon. I'll make sure that Corbyn
+
+00:39:14.160 --> 00:39:17.919
+gets to it. But finally, thanks to the many users and
+
+00:39:17.920 --> 00:39:20.479
+commuters to the project and team that create all the
+
+00:39:20.480 --> 00:39:22.879
+awesome free software that we use, especially
+
+00:39:22.880 --> 00:39:26.239
+BigBlueButton, Etherpad, IceCast, OBS, The Lounge,
+
+00:39:26.240 --> 00:39:30.359
+LiberaChat, FFmpeg, OpenAI, Whisper, WhisperX, and the
+
+00:39:30.360 --> 00:39:33.919
+Aeneas Forced Alignment Tool site transfer sub. Anyway,
+
+00:39:33.920 --> 00:39:35.559
+we're going to get started with the next talk of the day.
+
+00:39:35.560 --> 00:39:38.079
+We'll continue with the thankings later on. Enjoy the
+
+00:39:38.080 --> 00:39:43.839
+conference. Thanks for tuning in, really appreciate you.
+
+00:39:43.840 --> 00:39:45.508
+All right, we are off air.
+
+00:39:45.509 --> 00:39:45.542
+So I will go back to Mumble now.
+
+00:39:45.543 --> 00:39:51.734
+All right. That was pretty good.
+
+00:39:51.735 --> 00:39:52.875
+That was good, right?
+
+00:39:52.876 --> 00:39:55.858
+I think that was good. I'm glad we did that.
+
+00:39:55.859 --> 00:39:59.399
+Thank you for that. I'm hoping we would do.
+
+00:39:59.400 --> 00:40:02.799
+Yeah, sorry. For the people who are still in chat, right now
+
+00:40:02.800 --> 00:40:06.359
+we are moving to the next live talk, so feel free to join us
+
+00:40:06.360 --> 00:40:08.839
+later. We might stay in this room, we do not know, but we'll
+
+00:40:08.840 --> 00:40:13.360
+see you later anyway. Okay, bye-bye.
diff --git a/2024/captions/emacsconf-2024-org-update--the-future-of-org--ihor-radchenko--answers.vtt b/2024/captions/emacsconf-2024-org-update--the-future-of-org--ihor-radchenko--answers.vtt
new file mode 100644
index 00000000..a32b0da2
--- /dev/null
+++ b/2024/captions/emacsconf-2024-org-update--the-future-of-org--ihor-radchenko--answers.vtt
@@ -0,0 +1,1294 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:05.039
+And I believe we are live. Okay. Hi again, Ihor. How are you
+
+00:00:05.040 --> 00:00:09.359
+doing? Ready to answer questions, right? Yes. Ready to
+
+00:00:09.360 --> 00:00:13.039
+answer questions and all this. I mean, ready for
+
+00:00:13.040 --> 00:00:14.999
+everything. It's not just a question, it's the maintenance
+
+00:00:15.000 --> 00:00:21.679
+that is now lying in front of you. So... Oh, that's not the end
+
+00:00:21.680 --> 00:00:25.159
+of the day. I mean, it's a rare thing indeed, because you
+
+00:00:25.160 --> 00:00:27.439
+might not be able to see it on BBB. I'm checking in, but we've
+
+00:00:27.440 --> 00:00:30.599
+got Ihor, obviously, but we also have Bastien and also
+
+00:00:30.600 --> 00:00:34.199
+Carsten in the room. So, we have three maintainers of Org
+
+00:00:34.200 --> 00:00:36.119
+Mode right there in the room to answer all your questions.
+
+00:00:36.120 --> 00:00:40.759
+So, it's a rare occasion that I invite all of you to seize the
+
+00:00:40.760 --> 00:00:44.679
+day on this. Ihor, do you have anything maybe to say before we
+
+00:00:44.680 --> 00:00:49.599
+start moving into the questions? Well, I hope that I said
+
+00:00:49.600 --> 00:00:51.759
+everything I wanted. Hello, Bastien. during the
+
+00:00:51.760 --> 00:00:55.519
+presentation. Well, actually, I can say a lot more, like
+
+00:00:55.520 --> 00:01:01.439
+infinitely, because when I first recorded it, it was like
+
+00:01:01.440 --> 00:01:05.999
+one hour. So yeah. I mean, you did a, I'll just let you know,
+
+00:01:06.000 --> 00:01:08.359
+you did a fine job condensing everything in just 40 minutes.
+
+00:01:08.360 --> 00:01:14.079
+So congratulations on this. Yeah, it's, yeah, usually one
+
+00:01:14.080 --> 00:01:18.039
+minute per slide is the best way. Otherwise, it's something
+
+00:01:18.040 --> 00:01:22.319
+that's wrong with this presentation. Right, so just moving
+
+00:01:22.320 --> 00:01:25.519
+into the question, and by the way we've got 20 minutes, we
+
+00:01:25.520 --> 00:01:27.799
+might be able to chat a little more if Bastien wants to say
+
+00:01:27.800 --> 00:01:29.919
+something as well and Carsten, you know, feel free to
+
+00:01:29.920 --> 00:01:33.119
+intervene at any point during the questions if you've got
+
+00:01:33.120 --> 00:01:35.279
+anything to contribute or our voice will just show the
+
+00:01:35.280 --> 00:01:37.879
+breeze later on. So the first question is relating to
+
+00:01:37.880 --> 00:01:41.479
+something you said about 10 minutes 34 that might speak more
+
+00:01:41.480 --> 00:01:42.685
+to you than to me.
+
+NOTE Q: Is the track-changes item about the org-element parser?
+
+00:01:42.686 --> 00:01:45.159
+Is the track changes item about the org
+
+00:01:45.160 --> 00:01:51.519
+element parser Yes, the track changes is a new library that
+
+00:01:51.520 --> 00:01:58.959
+helps to receive changes in buffers incrementally. So like
+
+00:01:58.960 --> 00:02:03.079
+you can, it has API where you can request what changes
+
+00:02:03.080 --> 00:02:07.999
+happened in buffer since last request, chunk by chunk. And
+
+00:02:08.000 --> 00:02:14.119
+in org mode, in org element parser, we do pretty much the same
+
+00:02:14.120 --> 00:02:19.879
+thing, but using timers. So this track changes library
+
+00:02:19.880 --> 00:02:25.159
+should improve things, first, because it's a bit faster,
+
+00:02:25.160 --> 00:02:29.279
+because we don't need to conjure every single change, and
+
+00:02:29.280 --> 00:02:32.119
+track changes can agglomerate changes into chunks much
+
+00:02:32.120 --> 00:02:36.039
+more efficiently. And second, it's a built-in library, so
+
+00:02:36.040 --> 00:02:40.439
+it's a good idea to use built-in library when there is such an
+
+00:02:40.440 --> 00:02:45.879
+option, instead of running out our own implementation.
+
+00:02:45.880 --> 00:02:49.399
+Definitely. Moving on to the second question, although I'm
+
+00:02:49.400 --> 00:02:52.664
+not sure it refers that much to what you can do.
+
+NOTE Q: Could you please keep IRC alive? I prefer it to Matrix
+
+00:02:52.665 --> 00:02:57.759
+Could you please keep IRC alive? And I prefer it to Matrix. I mean,
+
+00:02:57.760 --> 00:03:03.239
+you did talk about IRC, right? But did we talk about phasing
+
+00:03:03.240 --> 00:03:08.799
+it out? So I try to be live on IRC, but I use mobile client for
+
+00:03:08.800 --> 00:03:12.999
+IRC to keep connected. So I usually connected, I usually see
+
+00:03:13.000 --> 00:03:15.519
+messages, except certain times when I don't have mobile
+
+00:03:15.520 --> 00:03:19.239
+internet. Right. Okay. That's why many people will tell
+
+00:03:19.240 --> 00:03:23.399
+you, you need a bouncer and all this, but the IRC crowd is very
+
+00:03:23.400 --> 00:03:33.679
+loud. I just don't know a good bouncer. I don't have a good
+
+00:03:33.680 --> 00:03:36.399
+setup for a bouncer. Okay.
+
+00:03:36.400 --> 00:03:41.239
+Personally, I use WeChat usually to stay connected to
+
+00:03:41.240 --> 00:03:44.119
+email. It's obviously a client for IRC, but it also allows
+
+00:03:44.120 --> 00:03:47.959
+you to, you know, you can keep it as a bouncer, but it's not in
+
+00:03:47.960 --> 00:03:54.159
+Emacs. It is. I don't have a computer that is running 24
+
+00:03:54.160 --> 00:03:56.839
+hours, so. I mean, that's the thing. I do have a server to run
+
+00:03:56.840 --> 00:04:02.239
+it off. All right, moving on to the third question. That is
+
+00:04:02.240 --> 00:04:06.559
+what is running 24 hours. Right. Okay. All right. Moving on
+
+00:04:06.560 --> 00:04:07.987
+to the third question.
+
+NOTE Q: Is there any plan for adding support for other modalities of notes like handwritten,  audio, etc.?
+
+00:04:07.988 --> 00:04:09.519
+Is there any plan for adding support
+
+00:04:09.520 --> 00:04:11.959
+for other modalities of note-like, handwritten, audio,
+
+00:04:11.960 --> 00:04:14.919
+and et cetera? Would that be interesting to the community?
+
+00:04:14.920 --> 00:04:20.319
+It will definitely be useful for me. I didn't. Okay. So this
+
+00:04:20.320 --> 00:04:25.399
+is not the idea I hear frequently. So there's no plan for such
+
+00:04:25.400 --> 00:04:29.959
+thing. Modalities of notes like handwritten audio. I think
+
+00:04:29.960 --> 00:04:34.519
+John Kitchin did some handwritten note.
+
+00:04:34.520 --> 00:04:46.119
+John Kitchin. Yeah. And for audio, I think as well. I. So
+
+00:04:46.120 --> 00:04:48.999
+basically you can use attachments, you can use images to
+
+00:04:49.000 --> 00:04:54.279
+paste you. I think John Kitchin even use it to automatically
+
+00:04:54.280 --> 00:04:58.519
+recognize notes.
+
+00:04:58.520 --> 00:05:05.359
+I think the previous speaker was talking about a whisper to
+
+00:05:05.360 --> 00:05:10.399
+recognize voice. Right.
+
+00:05:10.400 --> 00:05:13.959
+Otherwise there is no special workflow and I'm not even sure
+
+00:05:13.960 --> 00:05:16.919
+what we can do to support this workflow specifically.
+
+00:05:16.920 --> 00:05:22.759
+Yeah, it definitely feels like Org Mode is a good format for
+
+00:05:22.760 --> 00:05:25.719
+textual stuff, and a lot of things are textual. I mean,
+
+00:05:25.720 --> 00:05:29.679
+that's the whole philosophy behind Emacs. But when it comes
+
+00:05:29.680 --> 00:05:34.439
+to voice, it feels like it's... I think the person asking the
+
+00:05:34.440 --> 00:05:36.799
+question probably needs to specify what they mean by voice.
+
+00:05:36.800 --> 00:05:40.279
+Is it just raw note-taking, as Blaine mentioned in a
+
+00:05:40.280 --> 00:05:43.199
+previous talk, or is it something else? Feel free to add up to
+
+00:05:43.200 --> 00:05:46.759
+the question and we'll return to it later on.
+
+00:05:46.760 --> 00:05:51.919
+I think this is kind of related to drag and drop. I think you
+
+00:05:51.920 --> 00:05:57.279
+would like to be able to have an audio file and drop it in and
+
+00:05:57.280 --> 00:06:00.879
+have it translated to text. I think that would be an
+
+00:06:00.880 --> 00:06:03.959
+interesting API to do this, right? So that you can integrate
+
+00:06:03.960 --> 00:06:07.599
+it into something like drag and drop. I think I'm going to
+
+00:06:07.600 --> 00:06:12.079
+talk with supporters in since overnight. So we have, I
+
+00:06:12.080 --> 00:06:14.959
+believe what constant is alluring to is the fact that not
+
+00:06:14.960 --> 00:06:17.679
+just pictures but imagine if you were bringing in an audio
+
+00:06:17.680 --> 00:06:20.399
+file maybe you could, I mean I'm not sure it would work with
+
+00:06:20.400 --> 00:06:24.279
+whisper but. transcribing it in a way and inserting it as
+
+00:06:24.280 --> 00:06:27.079
+text. Although I'm not sure how we would be able to do this,
+
+00:06:27.080 --> 00:06:30.159
+but it's an interesting idea though. It can work if you write
+
+00:06:30.160 --> 00:06:35.359
+some kind of automatic speech recognition. It's not really
+
+00:06:35.360 --> 00:06:39.479
+a job for work. If you have some library that can transform
+
+00:06:39.480 --> 00:06:43.959
+audio to text or transform image to text in Elixir, then we
+
+00:06:43.960 --> 00:06:47.599
+can happily use that library. Definitely, but I can tell you
+
+00:06:47.600 --> 00:06:50.119
+that Whisper is not something that works very quickly. We do
+
+00:06:50.120 --> 00:06:53.479
+use Whisper AI to transcribe some of the talks that we
+
+00:06:53.480 --> 00:06:56.879
+broadcast during EmacsConf, and I can tell you it takes a
+
+00:06:56.880 --> 00:06:59.359
+fair while. If you have a video that lasts one minute, it's
+
+00:06:59.360 --> 00:07:03.439
+definitely going to take more than one minute to try to
+
+00:07:03.440 --> 00:07:09.239
+transcribe the video. We had to wait for a few years until it
+
+00:07:09.240 --> 00:07:12.679
+passed. Probably, but it's good to have the ID now so
+
+00:07:12.680 --> 00:07:17.479
+that we are ready eventually to do this. There is the new
+
+00:07:17.480 --> 00:07:23.319
+asynchronous IP. It's called org-pending. It's work in
+
+00:07:23.320 --> 00:07:29.599
+progress. And that basically allows to defer inserting
+
+00:07:29.600 --> 00:07:34.199
+text into our buffers until later. And while it's being
+
+00:07:34.200 --> 00:07:37.719
+worked on, it will basically highlight the place where it
+
+00:07:37.720 --> 00:07:43.159
+will be inserted. And you can click on it, see the progress,
+
+00:07:43.160 --> 00:07:49.519
+and stuff like that. So this is for Babylon, but I imagine for
+
+00:07:49.520 --> 00:07:56.159
+things like voice recognition, it can also work.
+
+00:07:56.160 --> 00:07:59.799
+All right, what I suggest we do, we're going to fill the two
+
+00:07:59.800 --> 00:08:02.279
+questions that we have now, and then it'd be nice if we could
+
+00:08:02.280 --> 00:08:05.399
+hear a word from Bastien and from Carsten as well, because
+
+00:08:05.400 --> 00:08:08.719
+it's rare to have all of you three in a room, and it would be
+
+00:08:08.720 --> 00:08:11.439
+nice maybe to chat a little bit about this. So quickly, with
+
+NOTE Q: WRT IETF standardization, have you looked at Karl Voit's OrgDown?
+
+00:08:11.440 --> 00:08:14.199
+the last two questions, with regards to IETF
+
+00:08:14.200 --> 00:08:17.039
+standardization, have you looked at Karl Voit's Orgdown?
+
+00:08:17.040 --> 00:08:24.919
+So, of course, there was a discussion on the mailing list,
+
+00:08:24.920 --> 00:08:28.319
+and there was a lot of pushback to this idea, especially to
+
+00:08:28.320 --> 00:08:33.399
+simplify the syntax. So, in short, the conclusion from
+
+00:08:33.400 --> 00:08:37.799
+there is we want the full syntax, we don't want to have things
+
+00:08:37.800 --> 00:08:43.079
+like different versus Org mode. But for the syntax, we may
+
+00:08:43.080 --> 00:08:49.279
+specify different like coverage. So for example, it's a
+
+00:08:49.280 --> 00:08:53.119
+minimal, it has a minimal support so people can, there's
+
+00:08:53.120 --> 00:08:59.079
+some parsers or apps can support just whatever curl calls
+
+00:08:59.080 --> 00:09:04.239
+fork down like level zero or level one or whatever. But the
+
+00:09:04.240 --> 00:09:10.079
+key point is, when it goes to IETF, we want to have the full
+
+00:09:10.080 --> 00:09:13.119
+syntax. We don't want to split it into pieces.
+
+00:09:13.120 --> 00:09:18.959
+Makes a lot of sense. All right. And the last question we have
+
+NOTE Q: About a year ago we discussed switching GNU documentation from texinfo to org. Do you still consider this?
+
+00:09:18.960 --> 00:09:22.359
+for now. About a year ago, we discussed switching new
+
+00:09:22.360 --> 00:09:26.239
+documentation from texinfo to org. Do you still consider
+
+00:09:26.240 --> 00:09:30.879
+this? definitely contributed to some of the ideas about
+
+00:09:30.880 --> 00:09:34.479
+syntax. For example, the inline special blocks, I think
+
+00:09:34.480 --> 00:09:41.639
+about them with this in mind, so that, so basically, one
+
+00:09:41.640 --> 00:09:45.999
+clarity, we don't want to complicate our syntax, we don't
+
+00:09:46.000 --> 00:09:50.319
+want to have special built-in support for variable, or I
+
+00:09:50.320 --> 00:09:54.319
+don't know, function name, or all this kind of specific
+
+00:09:54.320 --> 00:10:00.959
+markup. But instead, the idea is to have some generic custom
+
+00:10:00.960 --> 00:10:06.479
+syntax. And then when it goes to software manuals, we want
+
+00:10:06.480 --> 00:10:09.759
+some like optional library that will provide certain
+
+00:10:09.760 --> 00:10:12.439
+syntax extensions, like inline special block for
+
+00:10:12.440 --> 00:10:15.479
+variables, inline special block for acronym and stuff like
+
+00:10:15.480 --> 00:10:20.999
+that. Then people who want to use Org mode for manuals should
+
+00:10:21.000 --> 00:10:26.119
+be able to use that new markup to achieve what they want.
+
+00:10:26.120 --> 00:10:34.359
+That's a distant idea. But the key point is we want to keep org
+
+00:10:34.360 --> 00:10:39.039
+mode as generic syntax. We don't want to specialize it for
+
+00:10:39.040 --> 00:10:43.799
+software specifically. But generic in the sense that it can
+
+00:10:43.800 --> 00:10:44.759
+be used for software as well.
+
+00:10:44.760 --> 00:10:50.959
+All right, well thank you so much for your answer here and
+
+00:10:50.960 --> 00:10:56.399
+that was very enlightening but I'd first like to give the mic
+
+00:10:56.400 --> 00:11:00.359
+to Bastien who might need to leave shortly and I just want to
+
+00:11:00.360 --> 00:11:03.559
+make sure that you get to chat a little bit Bastien because
+
+00:11:03.560 --> 00:11:06.199
+it's a big thing we've had you as a maintainer for however
+
+00:11:06.200 --> 00:11:13.199
+long now? Well, officially, it was 14 years. But obviously,
+
+00:11:13.200 --> 00:11:17.999
+EHO has been doing much of the groundwork as a de facto
+
+00:11:18.000 --> 00:11:20.239
+maintainer for several years now, I believe for three or
+
+00:11:20.240 --> 00:11:28.679
+four years. And before Before IHO, there was Nicolas Goaziou,
+
+00:11:28.680 --> 00:11:33.679
+who's doing a lot of work. Also Kyle Meyer, who is still
+
+00:11:33.680 --> 00:11:40.599
+active, backporting Emacs changes. So
+
+00:11:40.600 --> 00:11:46.039
+it's a relief that we can do things properly, that I didn't
+
+00:11:46.040 --> 00:11:51.439
+give up before someone could really step up. I'm glad we're
+
+00:11:51.440 --> 00:11:57.679
+doing this. And I'm glad there was so much help during the
+
+00:11:57.680 --> 00:12:01.959
+time when I was not available enough. Well, thank you,
+
+00:12:01.960 --> 00:12:05.039
+Bastien. I think on behalf of the community, I think I'd like
+
+00:12:05.040 --> 00:12:07.719
+to extend a big thank you for all the work you've done
+
+00:12:07.720 --> 00:12:12.279
+throughout those 14 years. And if we pull the rope just a
+
+00:12:12.280 --> 00:12:15.719
+little more, before those 14 years, we had someone else
+
+00:12:15.720 --> 00:12:18.199
+maintaining Org Mode, well, not actually just maintaining
+
+00:12:18.200 --> 00:12:20.879
+Org Mode, but also inventing it. Carsten, how are you doing?
+
+00:12:20.880 --> 00:12:26.799
+I am. I'm doing fine. A really great opportunity to be here.
+
+NOTE Community
+
+00:12:26.800 --> 00:12:31.279
+First, I would like to start by indeed thanking Bastien
+
+00:12:31.280 --> 00:12:34.839
+because, I mean, he was not only maintainer after I stopped,
+
+00:12:34.840 --> 00:12:37.839
+but already during the time I was there, he was one of the key
+
+00:12:37.840 --> 00:12:40.559
+contributors who helped the project along for quite a bit.
+
+00:12:40.560 --> 00:12:44.759
+So it's an incredible investment of time and energy that
+
+00:12:44.760 --> 00:12:48.399
+Basquiat has shown, which is really fantastic. And now I see
+
+00:12:48.400 --> 00:12:52.479
+Ihor taking over with, as far as I can see, deep knowledge and
+
+00:12:52.480 --> 00:12:56.199
+all the right ideas about philosophy. So I'm really
+
+00:12:56.200 --> 00:13:00.039
+impressed. For me, this is really totally amazing because I
+
+00:13:00.040 --> 00:13:04.719
+started hacking this more than 20 years ago. And to just see
+
+00:13:04.720 --> 00:13:07.679
+that there's a community that has sustained itself with the
+
+00:13:07.680 --> 00:13:11.439
+help of new maintainers for such a long time makes me
+
+00:13:11.440 --> 00:13:13.999
+extremely grateful. So thank you very much to all of you.
+
+00:13:14.000 --> 00:13:20.679
+Okay, well, amazing. I mean, I'm a little flustered, I must
+
+00:13:20.680 --> 00:13:23.559
+admit, because I'm seeing three players of the community in
+
+00:13:23.560 --> 00:13:27.639
+a way that have kept me busy with very fun stuff to do with Org
+
+00:13:27.640 --> 00:13:30.999
+Mode, and it's really amazing to see three giants of the
+
+00:13:31.000 --> 00:13:34.239
+community being able to maintain Org Mode for so long and
+
+00:13:34.240 --> 00:13:38.199
+contribute so much to it. So, again, thanks to all of you
+
+00:13:38.200 --> 00:13:40.981
+three. I must also admit that it's really amazing for me
+
+00:13:40.982 --> 00:13:45.442
+that all of you three stress the importance of the community
+
+00:13:45.440 --> 00:13:48.479
+a whole lot, and I know that Bastien, you've talked about
+
+00:13:48.480 --> 00:13:51.359
+maintaining software last year at Emacs Confs, and even
+
+00:13:51.360 --> 00:13:55.519
+today, during the one-minute little chat that you did in
+
+00:13:55.520 --> 00:13:59.279
+Ihor's chat, you stressed the importance of maintenance and to
+
+00:13:59.280 --> 00:14:06.559
+be future-oriented about it. I'm kind of wondering, why do
+
+00:14:06.560 --> 00:14:12.679
+you think community is so important to Org Mode in general?
+
+00:14:12.680 --> 00:14:14.679
+Like, obviously we've talked about maintainers and we've
+
+00:14:14.680 --> 00:14:16.879
+talked about volunteers, but don't you think there's
+
+00:14:16.880 --> 00:14:19.159
+something more about community in general, about Org Mode
+
+00:14:19.160 --> 00:14:20.950
+and the fact that we are all taking notes
+
+00:14:20.951 --> 00:14:34.799
+and doing so much with it? Yeah, are you asking me?
+
+00:14:34.800 --> 00:14:40.640
+I remember Carsten made his point during the Google talk about
+
+00:14:40.680 --> 00:14:45.159
+the core idea of Org Mode, about mixing note taking and to-do
+
+00:14:45.160 --> 00:14:49.959
+manager. It was really powerful. And also in the same
+
+00:14:49.960 --> 00:14:53.399
+presentation that 98%
+
+00:14:53.400 --> 00:14:57.047
+of the features were organically developed as ideas
+
+00:14:57.048 --> 00:15:00.668
+by the community. And Ihor just said the same today
+
+00:15:00.669 --> 00:15:03.589
+in the presentation, like most of the features,
+
+00:15:03.590 --> 00:15:06.875
+not only the ideas, but also the code came from
+
+00:15:06.876 --> 00:15:11.350
+the communities. So that's why the community is so rich.
+
+00:15:11.351 --> 00:15:12.759
+And another thing is
+
+00:15:12.760 --> 00:15:16.919
+also that I do remember. Now everyone is having kind of an open
+
+00:15:16.920 --> 00:15:20.799
+source fatigue and questions about how is it okay to be
+
+00:15:20.800 --> 00:15:24.039
+maintainer? How do you keep open source project
+
+00:15:24.040 --> 00:15:28.199
+sustainable? And I'm saying open source on purpose with
+
+00:15:28.200 --> 00:15:33.119
+this audience to see beyond just the small GNU project and
+
+00:15:33.120 --> 00:15:36.359
+the small free software community. So at large, there is
+
+00:15:36.360 --> 00:15:40.679
+some sense of fatigue. I remember that the Org community
+
+00:15:40.680 --> 00:15:44.079
+right from the beginning had a reputation of being an
+
+00:15:44.080 --> 00:15:48.839
+amazing community and I think it
+
+00:15:48.840 --> 00:15:54.879
+continues to be one and I'm amazed that sometimes when I'm,
+
+00:15:54.880 --> 00:15:59.199
+you know, sometimes I'm, I have this fatigue of moderating
+
+00:15:59.200 --> 00:16:01.839
+emails from the mailing list, for example, and filtering
+
+00:16:01.840 --> 00:16:06.199
+out spam. And then I go on the list and I read some emails and I
+
+00:16:06.200 --> 00:16:09.536
+feel like, okay, this is still there. And it's really
+
+00:16:09.537 --> 00:16:14.559
+a boost of energy. I wish that this repetition outside Org Mode,
+
+00:16:14.560 --> 00:16:19.239
+outside Emacs, of being a nice welcoming,
+
+00:16:19.240 --> 00:16:22.559
+community of knowledgeable people talking of things
+
+00:16:22.560 --> 00:16:25.319
+and learning from each other that we can
+
+00:16:25.320 --> 00:16:30.159
+keep up with this pace. Yeah, maybe if I
+
+00:16:30.160 --> 00:16:32.919
+can just add to this, I think you're making an extremely
+
+00:16:32.920 --> 00:16:36.679
+important point, Pascal. I think that was really, from the
+
+00:16:36.680 --> 00:16:39.639
+beginning, something that was really special. And I think
+
+00:16:39.640 --> 00:16:45.639
+the reason why we all community still works is that first me,
+
+00:16:45.640 --> 00:16:49.239
+but in particular also the two of you and more people have
+
+00:16:49.240 --> 00:16:53.359
+been able to keep up the friendly spirit in this community.
+
+00:16:53.360 --> 00:16:57.239
+Because we had very few fights on the mailing list. There
+
+00:16:57.240 --> 00:17:02.879
+were a few at some point, we had a few contributors with a
+
+00:17:02.880 --> 00:17:06.719
+little bit of fights. And I remember that I, for example, had
+
+00:17:06.720 --> 00:17:10.159
+to invest a lot of time to keep that one under control, but I
+
+00:17:10.160 --> 00:17:14.199
+think it was totally worth it because as a group, as a whole, I
+
+00:17:14.200 --> 00:17:18.679
+think it was really fantastic. Our friendly people
+
+00:17:18.680 --> 00:17:21.719
+always were, and I think that has spurred all the
+
+00:17:21.720 --> 00:17:22.640
+contributions that we had. Because
+
+00:17:22.680 --> 00:17:25.542
+if you are in a toxic environment, you will
+
+00:17:25.543 --> 00:17:29.458
+not be willing to stay and to invest all their time. And if you
+
+00:17:29.708 --> 00:17:32.291
+are in an appreciative environment where people support
+
+00:17:32.292 --> 00:17:35.191
+each other, it's a completely different game. So I really
+
+00:17:35.192 --> 00:17:38.566
+think that Org Mode is a great example for open source
+
+00:17:38.567 --> 00:17:43.774
+projects that many other communities can learn from.
+
+00:17:43.775 --> 00:17:52.441
+If I may just interject for a second, because we need to go
+
+00:17:52.442 --> 00:17:55.441
+into the next chat for the live stream. But as usual, I invite
+
+00:17:55.442 --> 00:17:57.524
+you, if you're interested with the discussion, we are
+
+00:17:57.525 --> 00:18:01.482
+staying on BBB, asking questions to Bastien, to Ihor and
+
+00:18:01.483 --> 00:18:04.316
+to Carsten. So feel free to join on BBB and chat with them
+
+00:18:04.317 --> 00:18:07.857
+live. The stream will be moving on to the next chat, but we
+
+00:18:07.858 --> 00:18:10.566
+will be recording the Q&A and posting it afterwards on
+
+00:18:10.567 --> 00:18:13.441
+emacsconf. So, I'll use the opportunity to thank you again,
+
+00:18:13.442 --> 00:18:18.941
+all three, for taking part in this EmacsConf, and enjoy the
+
+00:18:18.942 --> 00:18:27.482
+discussion, and we'll see you later! Thank you, bye bye! So,
+
+00:18:27.483 --> 00:18:31.274
+yeah, what I was starting to say actually is I feel that the
+
+00:18:31.275 --> 00:18:35.024
+Org Mode community and to the big extent the Emacs community
+
+00:18:35.000 --> 00:18:38.679
+is a bit like research in the early days when there was a bunch
+
+00:18:38.680 --> 00:18:43.959
+of enthusiasts who just exchanged mails together and tried
+
+00:18:43.960 --> 00:18:49.159
+to find out something new. And there was like no feeling of
+
+00:18:49.160 --> 00:18:52.719
+competition or too much competition at that time. Unlike
+
+00:18:52.720 --> 00:18:58.759
+now when we like we all rise for funding and stuff. So it's,
+
+00:18:58.760 --> 00:19:02.199
+it's really, it's really nice to, to, to have communities
+
+00:19:02.200 --> 00:19:05.919
+that has the spirit and they hope it can keep the spirit in
+
+00:19:05.920 --> 00:19:08.279
+future as well.
+
+00:19:08.280 --> 00:19:14.599
+Yeah. Yeah. I thought I'm very optimistic after. So I mean,
+
+00:19:14.600 --> 00:19:18.679
+actually had not been reading the mailing list for quite a
+
+00:19:18.680 --> 00:19:23.039
+while, but I started to read it again a little while ago and I
+
+00:19:23.040 --> 00:19:26.719
+could just see you also working on it and see how everything
+
+00:19:26.720 --> 00:19:30.919
+was going. That made me extremely happy to see that and made
+
+00:19:30.920 --> 00:19:37.679
+me very proud that this is still ongoing.
+
+00:19:37.680 --> 00:19:42.799
+I was interested about your point about the tables with
+
+00:19:42.800 --> 00:19:49.079
+multi-lines. My unsolicited advice is don't do it, because
+
+00:19:49.080 --> 00:19:52.639
+I think it's going to be a mess. Which I think is reflected
+
+00:19:52.640 --> 00:19:56.039
+also by you saying that nobody has a good idea on how to do
+
+00:19:56.040 --> 00:20:01.079
+this. I have certainly thought about it. It is requested so
+
+00:20:01.080 --> 00:20:04.599
+often. It's requested so often that it feels like it would be
+
+00:20:04.600 --> 00:20:07.959
+nice to come out with something. The question is, it is what?
+
+00:20:07.960 --> 00:20:11.399
+Yeah, that's a big question. Because I don't always ask
+
+00:20:11.400 --> 00:20:15.919
+eDocs, for example, and they do have multi line cells in
+
+00:20:15.920 --> 00:20:21.279
+tables, but that syntax is so ugly. Yes. Yeah, no, exactly. I
+
+00:20:21.280 --> 00:20:28.719
+think this is a problem and the question is, how far do you
+
+00:20:28.720 --> 00:20:33.639
+want to develop or want to be a completely full authoring
+
+00:20:33.640 --> 00:20:35.839
+system in the sense that you have all these options there
+
+00:20:35.840 --> 00:20:39.999
+because I think to me, the Org Mode tables have a specific
+
+00:20:40.000 --> 00:20:42.759
+application. They have this fast way of building
+
+00:20:42.760 --> 00:20:46.079
+something. And if I would have to go and build a hugely
+
+00:20:46.080 --> 00:20:50.279
+complicated table with different numbers of columns and
+
+00:20:50.280 --> 00:20:53.959
+columns going away and appearing further down the table, so
+
+00:20:53.960 --> 00:20:56.639
+I would probably go somewhere else. So for me, this seems to
+
+00:20:56.640 --> 00:21:00.319
+be overkill. So I don't want to curb anybody's enthusiasm.
+
+00:21:00.320 --> 00:21:04.919
+But I think it's really important to keep to keep the kind of
+
+00:21:04.920 --> 00:21:11.199
+functionality that it has. It's a very easy use and quick
+
+00:21:11.200 --> 00:21:15.879
+ability to do something interesting that I think is more
+
+00:21:15.880 --> 00:21:23.319
+important. There could be reasons to not do something. So
+
+00:21:23.320 --> 00:21:28.399
+again, the thing is, we don't have a good idea. But what I know
+
+00:21:28.400 --> 00:21:32.319
+100% is that we are not going to give up the existing syntax.
+
+00:21:32.320 --> 00:21:38.839
+Yeah, for sure. So even if you come up with something good,
+
+00:21:38.840 --> 00:21:42.279
+the existing syntax will remain working. And if people who
+
+00:21:42.280 --> 00:21:46.159
+need to use simple tables, they should remain possible in
+
+00:21:46.160 --> 00:21:52.759
+exactly the same way. But I know many people struggle and try
+
+00:21:52.760 --> 00:21:55.839
+in LaTeX and other workarounds just to create more complex
+
+00:21:55.840 --> 00:22:01.039
+tables. So there's clearly a demand. I think this is related
+
+00:22:01.040 --> 00:22:04.439
+to the other question that you asked earlier. I think it's
+
+00:22:04.440 --> 00:22:06.639
+related to the question about the different parsers. And
+
+00:22:06.640 --> 00:22:09.999
+then, of course, the way the tables are implemented now is by
+
+00:22:10.000 --> 00:22:11.944
+basically just looking at what's around you
+
+00:22:11.945 --> 00:22:13.484
+and doing the right things with
+
+00:22:13.485 --> 00:22:20.479
+this regular expression-based part of
+
+00:22:20.480 --> 00:22:24.279
+the parser. And you probably would have to fully use the
+
+00:22:24.280 --> 00:22:28.839
+other parts and to do all the changes in the formal structure
+
+00:22:28.840 --> 00:22:31.559
+in order to do something like this. So I have to be honest that
+
+00:22:31.560 --> 00:22:35.559
+I don't understand this well enough to really have a
+
+00:22:35.560 --> 00:22:39.679
+meaningful idea about it. Not only that, we'll also need to
+
+00:22:39.680 --> 00:22:42.799
+rewrite the spreadsheet functionality because it is
+
+00:22:42.800 --> 00:22:47.679
+completely using regular expressions. Exactly. Not only
+
+00:22:47.680 --> 00:22:50.639
+idea is missing that the roadmap will be very complicated if
+
+00:22:50.640 --> 00:22:57.519
+you get there. Yeah. I mean, I do remember. Yeah, go ahead.
+
+00:22:57.520 --> 00:23:03.359
+Yeah, sorry. I do remember Richard Stallman saying that
+
+00:23:03.360 --> 00:23:09.759
+Org Mode was doing too much. So my answer was just, coming from
+
+00:23:09.760 --> 00:23:14.159
+the inventor of Emacs, I took it as a compliment for Org Mode.
+
+00:23:14.160 --> 00:23:19.319
+But of course, that was just humor. And I agree that the
+
+00:23:19.320 --> 00:23:24.279
+simple things should keep being simple. And I like the
+
+00:23:24.280 --> 00:23:30.039
+custom syntax idea of Juan because it goes in the direction
+
+00:23:30.040 --> 00:23:34.159
+of flexibility while keeping things simple.
+
+00:23:34.160 --> 00:23:40.319
+And looking forward to what people will come up with. I like
+
+00:23:40.320 --> 00:23:44.839
+the idea that you want to formalize the syntax. I think that
+
+00:23:44.840 --> 00:23:48.479
+is really very good. I'd like to also submit it. I think that
+
+00:23:48.480 --> 00:23:52.359
+would be excellent. I'm also... I think it was proposed by
+
+00:23:52.360 --> 00:23:57.239
+Timothy, yeah. Initially. Okay. Yeah, that's really
+
+00:23:57.240 --> 00:24:02.839
+helpful. Pascal, are you still talking, I think? No, yeah, I
+
+00:24:02.840 --> 00:24:08.399
+just wanted to say also for the younger Emacs users, there is
+
+00:24:08.400 --> 00:24:12.839
+a lot of new things in Emacs the last five years. It has been so
+
+00:24:12.840 --> 00:24:17.719
+exciting. And I believe it's exciting for Org Mode too, the
+
+00:24:17.720 --> 00:24:22.439
+things you mentioned about track changes. uh native
+
+00:24:22.440 --> 00:24:25.639
+compilation and all that stuff that that's really good like
+
+00:24:25.640 --> 00:24:29.879
+some some performance problems that we had for org mode for
+
+00:24:29.880 --> 00:24:33.759
+the agenda and stuff like that were suddenly solved by uh the
+
+00:24:33.760 --> 00:24:38.159
+the crazy amazing work by Eli and emacs maintainers so
+
+00:24:38.160 --> 00:24:40.457
+it's really exciting for org as well.
+
+00:24:40.458 --> 00:24:43.566
+I don't know how you feel, Ihor, about this,
+
+00:24:43.567 --> 00:24:45.482
+but I know you are reading the Emacs
+
+00:24:45.483 --> 00:24:50.732
+development mailing list and keeping this is a job in
+
+00:24:50.733 --> 00:24:54.774
+itself, but it's really exciting for everyone, I guess. Not
+
+00:24:54.775 --> 00:24:58.274
+only that, I hope we can upstream org-ql, which will speed up
+
+00:24:58.275 --> 00:25:00.566
+agenda specifically even more.
+
+00:25:00.567 --> 00:25:06.982
+Okay. I need to fly away, but it was really nice connecting
+
+00:25:06.983 --> 00:25:13.899
+and I hope everyone has a great conference. Bye-bye. It was
+
+00:25:13.900 --> 00:25:16.107
+so good to see you. Thank you again for everything that you
+
+00:25:16.108 --> 00:25:21.399
+have done. Thanks to you both. Thank you. Bye-bye. Bye-bye.
+
+NOTE Off-stream Q&A
+
+00:25:28.520 --> 00:25:35.959
+All right. Is it only the two of us now? I don't really know who
+
+00:25:35.960 --> 00:25:40.239
+else. Can you see if there's anybody else in this room? I
+
+00:25:40.240 --> 00:25:45.079
+don't know. There are like two, four, six people and Sacha is
+
+00:25:45.080 --> 00:25:48.159
+one of them, so probably five people. Oh, Sacha is here.
+
+00:25:48.160 --> 00:25:51.999
+Okay. I haven't heard her say anything, but I see her in the
+
+00:25:52.000 --> 00:25:58.479
+chat. Okay. It's the same room, basically. Hi, Sacha. Oh,
+
+00:25:58.480 --> 00:26:02.199
+okay. They're also at her pad, so we may want to finish other
+
+00:26:02.200 --> 00:26:08.839
+questions, maybe, if there are some. This is just a circle.
+
+NOTE microemacs
+
+00:26:08.840 --> 00:26:12.079
+This is just a historical question, but Carsten, I think you
+
+00:26:12.080 --> 00:26:14.359
+used microemacs back in the day.
+
+00:26:14.360 --> 00:26:17.839
+Did that have any influence
+
+00:26:17.840 --> 00:26:23.879
+on Org? That is a really interesting question. I used
+
+00:26:23.880 --> 00:26:27.359
+microemacs as my first version of emacs, and then I stepped
+
+00:26:27.360 --> 00:26:33.359
+over to Emacs. I actually did two things at the same time. I
+
+00:26:33.360 --> 00:26:39.119
+also was working with so Awk basically, that language. I ran
+
+00:26:39.120 --> 00:26:45.599
+against walls with both Micro-Emacs and with Awk, where I had
+
+00:26:45.600 --> 00:26:48.639
+the feeling I don't have enough freedom to do everything
+
+00:26:48.640 --> 00:26:52.839
+that I wanted, so I switched to Perl on one side and to Emacs on
+
+00:26:52.840 --> 00:26:58.679
+the other side. That's what it was. Micro-Emacs absolutely
+
+00:26:58.680 --> 00:27:02.679
+had the function to pull me into Emacs, But it's not that I
+
+00:27:02.680 --> 00:27:04.759
+have specific microemacs features that would have
+
+00:27:04.760 --> 00:27:08.119
+triggered me to do something for Org Mode. I think that would be
+
+00:27:08.120 --> 00:27:14.207
+the answer to your question. All right, thanks.
+
+00:27:14.200 --> 00:27:21.639
+Are you a user of microemacs, George? I posted the source to
+
+00:27:21.640 --> 00:27:26.719
+CompSource's Amiga in 86, and I was somewhat responsible
+
+00:27:26.720 --> 00:27:31.959
+for it being in the wild. Oh, I'm so sorry that I didn't,
+
+00:27:31.960 --> 00:27:35.199
+wasn't really aware that I made the connection to your name.
+
+00:27:35.200 --> 00:27:39.719
+No, no, no, no. We all moved on and the world is a better place.
+
+00:27:39.720 --> 00:27:44.799
+Yeah. No, I actually did use it for something like, I think
+
+00:27:44.800 --> 00:27:47.440
+six years as my only admin at the time before I made the
+
+00:27:47.440 --> 00:27:51.359
+switch. No, I put it out to the list. David Lawrence ran with
+
+00:27:51.360 --> 00:27:55.399
+it and you know, that was about, that was the end of it. And I
+
+00:27:55.400 --> 00:27:57.599
+actually implemented something like fly spell for
+
+00:27:57.600 --> 00:28:02.359
+microemacs. I remember doing that at some point. Yeah, no, I
+
+00:28:02.360 --> 00:28:05.319
+don't want us to get stuck on that. I don't want us to get stuck
+
+00:28:05.320 --> 00:28:10.279
+on that, so. Yeah, yeah. Good. Thank you. Thank you for
+
+00:28:10.280 --> 00:28:17.679
+Org Mode. Yeah, you're most welcome.
+
+00:28:17.680 --> 00:28:22.199
+For microemacs, actually, I also tried it once. It feels
+
+00:28:22.200 --> 00:28:27.959
+like at home after Emacs, of course, the major downside was at
+
+00:28:27.960 --> 00:28:33.599
+this point is that there is no UTF support. I think that was
+
+00:28:33.600 --> 00:28:40.039
+like, unfortunately, that that's not going to work. I
+
+00:28:40.040 --> 00:28:43.959
+think I'm also going to disconnect now. But it was really
+
+00:28:43.960 --> 00:28:49.119
+fantastic to listen to your talk. I wish you all the best. I'm
+
+00:28:49.120 --> 00:28:53.479
+sure that is a good answer. Thank you for joining, and nice to
+
+00:28:53.480 --> 00:29:00.159
+meet you. Yeah, bye. Bye.
+
+00:29:00.160 --> 00:29:02.799
+Okay, so there are still people in the room, so if you want to
+
+00:29:02.800 --> 00:29:10.440
+ask questions, feel free to do it. I
+
+00:29:10.440 --> 00:29:12.679
+think there's one unanswered question in the etherpad
+
+00:29:12.680 --> 00:29:18.119
+also. Let me see.
+
+00:29:18.120 --> 00:29:21.639
+It's probably awkward to answer. Okay, I can answer and then
+
+00:29:21.640 --> 00:29:24.039
+probably answering the answer for this one. So there's a
+
+00:29:24.040 --> 00:29:28.519
+question about, from a person, I spent some time writing a
+
+00:29:28.520 --> 00:29:31.919
+library for myself, which involved working with Org files.
+
+NOTE Q: Is there/could there be a resource with which to recommend particularly well written codebases for review by others?
+
+00:29:31.920 --> 00:29:34.359
+One thing I struggled with was finding a good source of
+
+00:29:34.360 --> 00:29:41.599
+reference code which demonstrated idiomatic usage.
+
+00:29:41.600 --> 00:29:46.319
+particularly well-written code bases for review by
+
+00:29:46.320 --> 00:29:52.599
+others? That's a good question. We have some wiki pages.
+
+00:29:52.600 --> 00:29:57.039
+I'll put it in the answer later. You can also check Org Mode's
+
+00:29:57.040 --> 00:30:02.399
+code, but usually in org-element there are good usages, and
+
+00:30:02.400 --> 00:30:06.919
+in Org export.
+
+00:30:06.920 --> 00:30:10.279
+Otherwise, maybe something from Alphapapa, but I need to
+
+00:30:10.280 --> 00:30:13.320
+check that and probably reply later.
+
+00:30:16.167 --> 00:30:23.875
+Otherwise, that's all. So I'm going to end this.
+
+00:30:52.400 --> 00:32:09.720
+Bye bye.
diff --git a/2024/captions/emacsconf-2024-org-update--the-future-of-org--ihor-radchenko--main--chapters.vtt b/2024/captions/emacsconf-2024-org-update--the-future-of-org--ihor-radchenko--main--chapters.vtt
new file mode 100644
index 00000000..0e543be3
--- /dev/null
+++ b/2024/captions/emacsconf-2024-org-update--the-future-of-org--ihor-radchenko--main--chapters.vtt
@@ -0,0 +1,86 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:01:14.279
+Introduction
+
+00:01:14.280 --> 00:03:15.919
+Message from Bastien Guerry
+
+00:03:15.920 --> 00:05:09.240
+My step-by-step journey to Org maintenance
+
+00:05:09.241 --> 00:08:11.766
+Priorities for Org maintenance
+
+00:08:11.767 --> 00:08:41.589
+Modular Org
+
+00:08:41.590 --> 00:09:59.999
+Slim down large Org libraries
+
+00:10:00.000 --> 00:11:25.399
+Upstream generic Org libraries
+
+00:11:25.400 --> 00:13:13.256
+Use modern Emacs APIs and libraries
+
+00:13:13.257 --> 00:14:45.730
+Improve Org parser APIs
+
+00:14:45.731 --> 00:15:57.379
+Improve Org babel APIs
+
+00:15:57.380 --> 00:16:31.199
+Beyond Org code and Emacs: third-party packages, apps, parsers
+
+00:16:31.200 --> 00:17:37.819
+org-contrib
+
+00:17:37.820 --> 00:18:25.839
+Org orphanage
+
+00:18:25.840 --> 00:20:23.868
+Mobile apps and parsers
+
+00:20:23.869 --> 00:21:56.239
+Long-standing syntax problems
+
+00:21:56.240 --> 00:23:30.502
+New syntax features
+
+00:23:30.503 --> 00:25:54.072
+New features I hope to see in Org
+
+00:25:54.073 --> 00:26:01.357
+Org community
+
+00:26:01.358 --> 00:27:17.159
+Org community forums - Org mailing list
+
+00:27:17.160 --> 00:30:05.579
+Org mailing list - world
+
+00:30:05.580 --> 00:31:01.519
+Contribute ideas!
+
+00:31:01.520 --> 00:31:34.999
+How much can a single person do?
+
+00:31:35.000 --> 00:33:02.079
+Contribute code!
+
+00:33:02.080 --> 00:35:40.239
+Why contribute?
+
+00:35:40.240 --> 00:37:41.419
+Benefits for code contributors
+
+00:37:41.420 --> 00:38:30.439
+Contributing as non-programmer
+
+00:38:30.440 --> 00:39:12.996
+Got no free time, but still want to help?
+
+00:39:12.997 --> 00:39:34.440
+Thank you
diff --git a/2024/captions/emacsconf-2024-org-update--the-future-of-org--ihor-radchenko--main.vtt b/2024/captions/emacsconf-2024-org-update--the-future-of-org--ihor-radchenko--main.vtt
new file mode 100644
index 00000000..9a13366b
--- /dev/null
+++ b/2024/captions/emacsconf-2024-org-update--the-future-of-org--ihor-radchenko--main.vtt
@@ -0,0 +1,2046 @@
+WEBVTT captioned by sachac
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:03.039
+Hello, everyone. My name is Ihor Radchenko,
+
+00:00:03.040 --> 00:00:07.319
+and I'm the new official Org Mode maintainer.
+
+00:00:07.320 --> 00:00:09.679
+Today, I'll briefly introduce myself
+
+00:00:09.680 --> 00:00:12.319
+and then share my ideas about the future of
+
+00:00:12.320 --> 00:00:16.039
+Org Mode development. I will start by passing
+
+00:00:16.040 --> 00:00:18.759
+the word from Bastien, the previous maintainer.
+
+00:00:18.760 --> 00:00:22.239
+Then I will tell you a little bit about my story,
+
+00:00:22.240 --> 00:00:24.119
+starting from ordinary Org Mode user
+
+00:00:24.120 --> 00:00:26.039
+all the way to the maintainer.
+
+00:00:26.040 --> 00:00:30.839
+Then I will detail the new directions of development
+
+00:00:30.840 --> 00:00:33.599
+and specific features which I want to see
+
+00:00:33.600 --> 00:00:35.799
+in Org Mode in the coming years.
+
+00:00:35.800 --> 00:00:39.659
+And I will conclude by asking you, Org Mode users,
+
+00:00:39.660 --> 00:00:42.399
+to contribute to Org Mode
+
+00:00:42.400 --> 00:00:46.759
+because all the features which are too many
+
+00:00:46.760 --> 00:00:49.259
+can only be implemented with the help of the community,
+
+00:00:49.260 --> 00:00:51.879
+with the help of more contributors.
+
+00:00:51.880 --> 00:00:53.579
+And for that, of course, I will also talk
+
+00:00:53.580 --> 00:00:59.479
+about Org community and how I see it evolve
+
+00:00:59.480 --> 00:01:01.199
+so that we have a good communication
+
+00:01:01.200 --> 00:01:03.039
+between the development of Org Mode
+
+00:01:03.040 --> 00:01:07.559
+and the community ideas.
+
+00:01:07.560 --> 00:01:14.279
+Let me first pass the word to Bastien.
+
+NOTE Message from Bastien Guerry
+
+00:01:14.280 --> 00:01:17.599
+Hello, everyone. Ihor Radchenko is the new Org Mode
+
+00:01:17.600 --> 00:01:18.519
+maintainer.
+
+00:01:18.520 --> 00:01:21.039
+He's been acting as such for a couple of years now,
+
+00:01:21.040 --> 00:01:23.479
+and I'm really glad he's finally agreed to take on the
+
+00:01:23.480 --> 00:01:26.439
+role officially. As a maintainer, I've probably done
+
+00:01:26.440 --> 00:01:29.439
+a few things right and certainly made many mistakes.
+
+00:01:29.440 --> 00:01:32.319
+Here are 4 lessons I've learned in 14 years.
+
+00:01:32.320 --> 00:01:34.319
+The first is that maintaining Org Mode
+
+00:01:34.320 --> 00:01:36.439
+isn't just about code, it's mostly
+
+00:01:36.440 --> 00:01:40.679
+about users. Of course, some of them will never learn how to
+
+00:01:40.680 --> 00:01:43.159
+report a bug, some of them will behave like spoiled
+
+00:01:43.160 --> 00:01:46.319
+children, and most of them will expect you to work for free
+
+00:01:46.320 --> 00:01:50.439
+forever. Nevertheless, the time is as valuable as yours.
+
+00:01:50.440 --> 00:01:53.639
+Whatever they request, there is always something that can
+
+00:01:53.640 --> 00:01:57.879
+lead to a positive outcome for Org Mode or its community.
+
+00:01:57.880 --> 00:02:00.719
+The second lesson is that maintenance isn't just about
+
+00:02:00.720 --> 00:02:04.239
+technical choices. It's also about predictability.
+
+00:02:04.240 --> 00:02:07.879
+Be very clear and very loud about what users and contributors
+
+00:02:07.880 --> 00:02:11.159
+can expect of your time, skills, and motivations.
+
+00:02:11.160 --> 00:02:12.879
+Stick to the robustness principle
+
+00:02:12.880 --> 00:02:15.719
+by being liberal in what you accept
+
+00:02:15.720 --> 00:02:19.319
+and strict in what you produce. Thirdly, it's all
+
+00:02:19.320 --> 00:02:22.319
+about learning. Let's build a culture together where it's
+
+00:02:22.320 --> 00:02:25.719
+okay to ask stupid questions. No one is born knowing how to
+
+00:02:25.720 --> 00:02:28.639
+write in English, how to report a bug, or how to maintain a
+
+00:02:28.640 --> 00:02:32.059
+large piece of code. Remember that old-timers were newbies
+
+00:02:32.060 --> 00:02:35.199
+and that newbies could become maintainers. We all have a lot
+
+00:02:35.200 --> 00:02:38.759
+to learn, even if it's just how to respect each other.
+
+00:02:38.760 --> 00:02:42.239
+Finally, as a maintainer, think about the next one. Who will
+
+00:02:42.240 --> 00:02:45.519
+be in your shoes next? What kind of maintainer do you want for
+
+00:02:45.520 --> 00:02:48.839
+a software you will be using for decades? It's also a
+
+00:02:48.840 --> 00:02:52.159
+responsibility of the Org Mode community. How can we
+
+00:02:52.160 --> 00:02:55.999
+collectively attract maintainers that want to help us use
+
+00:02:56.000 --> 00:02:59.359
+and enhance this wonderful little tool? How can we,
+
+00:02:59.360 --> 00:03:02.199
+as Org Mode users, help Ihor pave the way
+
+00:03:02.200 --> 00:03:04.399
+for the next maintainers?
+
+00:03:04.400 --> 00:03:08.279
+Enough said. I'm confident Org Mode is in good hands and I'm a very
+
+00:03:08.280 --> 00:03:11.559
+happy user. Thanks everyone for all these years of fun and
+
+00:03:11.560 --> 00:03:15.919
+learning.
+
+NOTE My step-by-step journey to Org maintenance
+
+00:03:15.920 --> 00:03:20.279
+Now back to my talk. Let me start by briefly introducing
+
+00:03:20.280 --> 00:03:23.959
+myself. I'm actually not a programmer. By training, I'm a
+
+00:03:23.960 --> 00:03:27.519
+material scientist. and I only started using Emacs and
+
+00:03:27.520 --> 00:03:30.719
+Org Mode and naturally doing programming (because that's
+
+00:03:30.720 --> 00:03:36.799
+Emacs) when I was doing my PhD and I wanted to use Org Mode to
+
+00:03:36.800 --> 00:03:40.479
+tame my research work. A couple of years I was just an
+
+00:03:40.480 --> 00:03:44.599
+ordinary user, until I learned enough and
+
+00:03:44.600 --> 00:03:48.463
+got enough courage to report my first bug.
+
+00:03:48.464 --> 00:03:51.639
+Then it all evolved over the years.
+
+00:03:51.640 --> 00:03:53.959
+I started participating in the mailing list,
+
+00:03:53.960 --> 00:03:56.559
+I started learning more about Elisp,
+
+00:03:56.560 --> 00:03:59.839
+I reported more complex bugs,
+
+00:03:59.840 --> 00:04:08.879
+I eventually got around to go and fix the tricky bugs.
+
+00:04:08.880 --> 00:04:11.719
+Then I started participating more in Org mailing list
+
+00:04:11.720 --> 00:04:16.919
+in helping fixing bugs in selected areas of Org
+
+00:04:16.920 --> 00:04:22.839
+mode and eventually switching to all parts of Org.
+
+00:04:22.840 --> 00:04:27.639
+At some point I ended up doing the de facto maintenance job
+
+00:04:27.640 --> 00:04:32.679
+together with Bastien and got an actual maintenance offer
+
+00:04:32.680 --> 00:04:38.599
+which I accepted recently. The key takeaway I want you to get
+
+00:04:38.600 --> 00:04:40.999
+from here is that you don't have to be a programmer, you don't
+
+00:04:41.000 --> 00:04:47.239
+have to know Elisp to contribute, and you don't even have to
+
+00:04:47.240 --> 00:04:51.439
+be like that to become a maintainer. All it takes is
+
+00:04:51.440 --> 00:04:55.279
+slow, methodical, persistent learning over the years,
+
+00:04:55.280 --> 00:04:58.499
+participating in the community, and eventually
+
+00:04:58.500 --> 00:05:02.399
+submitting your patches upstream. And eventually you can
+
+00:05:02.400 --> 00:05:07.679
+become a maintainer, or not a maintainer as you wish.
+
+00:05:07.680 --> 00:05:09.240
+Enough about me.
+
+NOTE Priorities for Org maintenance
+
+00:05:09.241 --> 00:05:13.359
+Let's talk about what I think should happen with
+
+00:05:13.360 --> 00:05:18.859
+Org Mode and what my goals on Org Mode is. The first and top
+
+00:05:18.860 --> 00:05:25.199
+priority for me is the basics. The basics, the
+
+00:05:25.200 --> 00:05:26.069
+code-based stability.
+
+00:05:26.070 --> 00:05:29.719
+Basically, all the foundations, all the APIs in
+
+00:05:29.720 --> 00:05:34.959
+Org Mode, all the basic libraries, which everything builds
+
+00:05:34.960 --> 00:05:39.079
+upon so that we have fewer bugs and we have more
+
+00:05:39.080 --> 00:05:42.599
+understandable code so that others who want to contribute
+
+00:05:42.600 --> 00:05:44.651
+have easier time understanding
+
+00:05:44.652 --> 00:05:46.371
+what is going on in the code base and
+
+00:05:46.372 --> 00:05:52.259
+contribute without much of a problem or confusion.
+
+00:05:52.260 --> 00:05:56.339
+Second equally important direction is the Org community,
+
+00:05:56.340 --> 00:06:00.579
+because a single person, even a couple of people, cannot
+
+00:06:00.580 --> 00:06:05.599
+really develop such a big project as Org Mode. And we always
+
+00:06:05.600 --> 00:06:08.439
+want new contributors, which are not coming from nowhere.
+
+00:06:08.440 --> 00:06:10.228
+We need to have the community of users.
+
+00:06:10.229 --> 00:06:12.199
+We have a community of
+
+00:06:12.200 --> 00:06:15.679
+people who participate in discussions, who later submit
+
+00:06:15.680 --> 00:06:19.719
+patches and code, and that's where we get most of the new
+
+00:06:19.720 --> 00:06:24.919
+features. So I would like to improve the communication
+
+00:06:24.920 --> 00:06:29.879
+between Org community and the development. The third
+
+00:06:29.880 --> 00:06:34.259
+direction I want to pursue is making life easier for
+
+00:06:34.260 --> 00:06:38.639
+third-party packages. Because we don't only have org-mode
+
+00:06:38.640 --> 00:06:41.319
+as it's distributed with Emacs. We have a lot of
+
+00:06:41.320 --> 00:06:45.196
+ELPA packages. We have a lot of MELPA packages.
+
+00:06:45.197 --> 00:06:47.917
+People who want some specific features
+
+00:06:47.918 --> 00:06:49.839
+on top of org-mode do develop
+
+00:06:49.840 --> 00:06:54.279
+these packages which are widely used or not so widely used.
+
+00:06:54.280 --> 00:06:57.639
+It's not only about Emacs. We have a lot of mobile apps
+
+00:06:57.640 --> 00:07:01.879
+that can work with Org files, have a lot of parsers which
+
+00:07:01.880 --> 00:07:06.039
+enable this mobile apps, or in general, programs outside
+
+00:07:06.040 --> 00:07:11.019
+Elisp to understand Org files.
+
+00:07:11.020 --> 00:07:14.959
+Fourth direction is the Org markup as a foundation of
+
+00:07:14.960 --> 00:07:18.319
+org-mode as a major mode, because we have a lot of
+
+00:07:18.320 --> 00:07:20.573
+functionality in org-mode itself inside Emacs,
+
+00:07:20.574 --> 00:07:23.674
+but it's all based on the underlying markup,
+
+00:07:23.675 --> 00:07:27.435
+and markup should have enough features
+
+00:07:27.436 --> 00:07:32.479
+to support the functions we want to see there.
+
+00:07:32.480 --> 00:07:34.919
+Last direction, which is somewhat less
+
+00:07:34.920 --> 00:07:37.834
+important, mostly because I don't have
+
+00:07:37.835 --> 00:07:40.136
+that much time to focus on everything,
+
+00:07:40.137 --> 00:07:44.159
+is the new features. I do want to see
+
+00:07:44.160 --> 00:07:46.840
+certain important features in Org mode,
+
+00:07:46.841 --> 00:07:50.262
+but I usually cannot spend too much time on them
+
+00:07:50.263 --> 00:07:53.084
+because of the previous more important parts.
+
+00:07:53.085 --> 00:07:54.999
+I do rely on the org community and
+
+00:07:55.000 --> 00:07:57.456
+the contributors to implement these new features.
+
+00:07:57.457 --> 00:08:01.915
+My idea is that I want to direct which features
+
+00:08:01.916 --> 00:08:03.757
+and how they should be implemented,
+
+00:08:03.758 --> 00:08:05.299
+but the actual people who implement
+
+00:08:05.300 --> 00:08:09.463
+them should come from the community.
+
+00:08:09.464 --> 00:08:11.766
+Now let's go into the details.
+
+NOTE Modular Org
+
+00:08:11.767 --> 00:08:15.719
+The code base. As a bit of motivation, I would like
+
+00:08:15.720 --> 00:08:19.279
+to share this email from Richard Stallman, who a couple of
+
+00:08:19.280 --> 00:08:27.039
+years ago asked about improving Org mode by making it
+
+00:08:27.040 --> 00:08:32.839
+more modular. That's directly asking about improving the
+
+00:08:32.840 --> 00:08:35.639
+foundations of the code. That's what I think is
+
+00:08:35.640 --> 00:08:41.589
+an important direction as well. Here's an example.
+
+NOTE Slim down large Org libraries
+
+00:08:41.590 --> 00:08:45.312
+We have a lot of really, really large org libraries,
+
+00:08:45.313 --> 00:08:49.376
+like org.el, which is like one megabyte or something large,
+
+00:08:49.377 --> 00:08:51.558
+org-agenda, org-table, org-list,
+
+00:08:51.559 --> 00:08:52.879
+a number of files which are really,
+
+00:08:52.880 --> 00:08:56.599
+really, really large. What is worse is they are hard to
+
+00:08:56.600 --> 00:09:00.906
+understand sometimes. I even have an example,
+
+00:09:00.907 --> 00:09:04.505
+alphapapa complained that part of his motivation
+
+00:09:04.506 --> 00:09:07.867
+to write org-ql and specifically his agenda part,
+
+00:09:07.868 --> 00:09:08.879
+agenda-like part, was
+
+00:09:08.880 --> 00:09:13.119
+because org-agenda is so hard to understand that it's
+
+00:09:13.120 --> 00:09:15.572
+easier to start from scratch.
+
+00:09:15.573 --> 00:09:17.079
+I don't want such situations
+
+00:09:17.080 --> 00:09:20.374
+to happen in future, if possible at all.
+
+00:09:20.375 --> 00:09:21.879
+One of the projects
+
+00:09:21.880 --> 00:09:23.116
+I'm currently working on,
+
+00:09:23.117 --> 00:09:25.100
+it's work in progress now,
+
+00:09:25.101 --> 00:09:28.437
+is splitting Org libraries into smaller parts,
+
+00:09:28.438 --> 00:09:31.808
+into more documented parts,
+
+00:09:31.809 --> 00:09:34.239
+into the APIs which are actually
+
+00:09:34.240 --> 00:09:38.470
+documented and explained in the code at least,
+
+00:09:38.471 --> 00:09:42.571
+so that people who just open org-mode code
+
+00:09:42.572 --> 00:09:45.239
+cannot be scared away and go and
+
+00:09:45.240 --> 00:09:47.999
+read the comments and understand what is happening there
+
+00:09:48.000 --> 00:09:52.039
+easier. At this point, I have almost doubled the number of
+
+00:09:52.040 --> 00:09:54.839
+libraries. It's still work in progress, so there's a lot of
+
+00:09:54.840 --> 00:09:59.999
+room for improvement in this area.
+
+NOTE Upstream generic Org libraries
+
+00:10:00.000 --> 00:10:04.599
+Another direction which is
+
+00:10:04.600 --> 00:10:09.799
+somewhat reasonable in relation to splitting things down
+
+00:10:09.800 --> 00:10:15.159
+is that some libraries are really generic in Org Mode,
+
+00:10:15.160 --> 00:10:18.239
+because Org Mode often has a functionality
+
+00:10:18.240 --> 00:10:20.100
+which is really new, and for that,
+
+00:10:20.101 --> 00:10:22.239
+it had to implement some very generic
+
+00:10:22.240 --> 00:10:24.222
+functionality that doesn't have to be used
+
+00:10:24.223 --> 00:10:24.903
+just for Org Mode.
+
+00:10:24.904 --> 00:10:27.924
+This can be generalized for Emacs in general.
+
+00:10:27.925 --> 00:10:29.645
+There is a number of libraries
+
+00:10:29.646 --> 00:10:32.999
+which we may or may not upstream to
+
+00:10:33.000 --> 00:10:37.559
+Emacs, depending on what Emacs maintain, I think. As one
+
+00:10:37.560 --> 00:10:40.719
+example is org-capture, because it's a very obvious
+
+00:10:40.720 --> 00:10:43.679
+example. org-capture started as support from remember.el,
+
+00:10:43.680 --> 00:10:46.759
+which is still a part of Emacs. It has more features than
+
+00:10:46.760 --> 00:10:50.039
+remember.el, which we required for Org. But, you know,
+
+00:10:50.040 --> 00:10:55.139
+these features can be backported. Why not? And then
+
+00:10:55.140 --> 00:10:58.679
+not only Org-mode, but other Emacs libraries can benefit
+
+00:10:58.680 --> 00:11:01.957
+from these features we have in Org-mode only.
+
+00:11:01.958 --> 00:11:04.739
+Similarly, I have a long list of
+
+00:11:04.740 --> 00:11:12.039
+different libraries that can be shared.
+
+00:11:12.040 --> 00:11:14.004
+Yeah, for some I'm not sure,
+
+00:11:14.005 --> 00:11:18.959
+but in general, there is a lot of
+
+00:11:18.960 --> 00:11:25.399
+work that may be done and may be discussed in the future.
+
+NOTE Use modern Emacs APIs and libraries
+
+00:11:25.400 --> 00:11:31.479
+The third part about the basics is making use of the new Emacs
+
+00:11:31.480 --> 00:11:36.039
+libraries. Org Mode in general is quite well written in terms
+
+00:11:36.040 --> 00:11:40.039
+of Emacs integration. We do support many of the Emacs
+
+00:11:40.040 --> 00:11:44.359
+features and libraries which are generic. However, in more
+
+00:11:44.360 --> 00:11:47.999
+recent Emacs versions, we started getting some new
+
+00:11:48.000 --> 00:11:50.799
+features, and we do want to make use of them in Org.
+
+00:11:50.800 --> 00:11:55.879
+For example, recently we contributed yank-media support for
+
+00:11:55.880 --> 00:12:00.359
+clipboard pasting and drag and drop. Now it is supported
+
+00:12:00.360 --> 00:12:04.399
+in Org mode already in the released version. Eventually
+
+00:12:04.400 --> 00:12:08.359
+we want to support transient.el, because now Org uses ad hoc
+
+00:12:08.360 --> 00:12:11.999
+system. It's of course much better to use existing and
+
+00:12:12.000 --> 00:12:14.839
+more powerful menus, which are implemented in
+
+00:12:14.840 --> 00:12:18.159
+transient. It even has some initial work-in-progress
+
+00:12:18.160 --> 00:12:20.028
+implementation. I hope it can be eventually
+
+00:12:20.029 --> 00:12:23.960
+extended to the whole Org Mode
+
+00:12:23.961 --> 00:12:29.359
+There are other things like compatibility, which there is
+
+00:12:29.360 --> 00:12:33.519
+an excellent Emacs library, compat.el, that provides
+
+00:12:33.520 --> 00:12:37.599
+backwards compatibility and Org also has something like this
+
+00:12:37.600 --> 00:12:39.439
+in org-compat. We don't have to write it ourself again.
+
+00:12:39.440 --> 00:12:43.741
+We can make use of the existing library.
+
+00:12:43.742 --> 00:12:46.043
+Similarly, there's a very, very new library
+
+00:12:46.044 --> 00:12:48.759
+track-changes for tracking changes
+
+00:12:48.760 --> 00:12:53.159
+in real time. Eventually, if you want to support
+
+00:12:53.160 --> 00:12:56.359
+context-menu mode, maybe touchscreen, Android
+
+00:12:56.360 --> 00:13:00.999
+support, I don't know, but I hope it can be done by someone.
+
+00:13:01.000 --> 00:13:09.319
+And some more generic library: select thingatpt.
+
+00:13:09.320 --> 00:13:13.256
+That's about using external APIs.
+
+NOTE Improve Org parser APIs
+
+00:13:13.257 --> 00:13:18.557
+Now about the internal Org APIs.
+
+00:13:18.558 --> 00:13:19.439
+One important, probably one of the most important
+
+00:13:19.440 --> 00:13:23.259
+parts of Org is the parser, how Org itself understands the
+
+00:13:23.260 --> 00:13:27.159
+Org files. The situation is that we have two parsers in
+
+00:13:27.160 --> 00:13:30.999
+Org mode. One is the Org element, the proper parser, which we
+
+00:13:31.000 --> 00:13:34.519
+use as a reference, but many parts of Org still use regular
+
+00:13:34.520 --> 00:13:38.079
+expressions, which are approximate. These two parsers
+
+00:13:38.080 --> 00:13:41.839
+are not exactly consistent, which is really bad, and I hope
+
+00:13:41.840 --> 00:13:47.999
+to solve this. I already started doing some work by
+
+00:13:48.000 --> 00:13:54.140
+factoring out some part of abstract syntax tree and working
+
+00:13:54.141 --> 00:13:57.519
+on real-time parser, incremental parser, which is enabled
+
+00:13:57.520 --> 00:14:00.039
+by default in Org 9.6, but there are still parts which I need
+
+00:14:00.040 --> 00:14:02.999
+to work on. Eventually I want to get rid of regular
+
+00:14:03.000 --> 00:14:05.439
+expression-based parser completely, so that we don't have
+
+00:14:05.440 --> 00:14:10.199
+any inconsistencies inside Org Mode. One of the examples of
+
+00:14:10.200 --> 00:14:13.159
+these parts that are still using regular expression is
+
+00:14:13.160 --> 00:14:16.719
+fontification, which is often simply wrong, especially in
+
+00:14:16.720 --> 00:14:21.639
+some edge cases, and we really want to use the proper parser
+
+00:14:21.640 --> 00:14:27.559
+in this area. Maybe even editing org files using the parser
+
+00:14:27.560 --> 00:14:31.799
+syntax tree, but that might be tricky, although there is an
+
+00:14:31.800 --> 00:14:38.119
+existing library that implements some ideas for this.
+
+00:14:38.120 --> 00:14:41.519
+The key point is that org-element-api, the parser, should
+
+00:14:41.520 --> 00:14:42.749
+eventually be used everywhere
+
+00:14:42.750 --> 00:14:45.730
+so that everything is consistent.
+
+NOTE Improve Org babel APIs
+
+00:14:45.731 --> 00:14:50.359
+The second important API is the Org babel.
+
+00:14:50.360 --> 00:14:54.414
+Currently, Org babel does have some API,
+
+00:14:54.415 --> 00:14:56.195
+but first, it's not well documented.
+
+00:14:56.196 --> 00:14:59.039
+Second, it's sometimes awkwardly
+
+00:14:59.040 --> 00:15:04.819
+designed, especially compared with the exporter.
+
+00:15:04.820 --> 00:15:11.419
+I do want Org Babel APIs to be more consistent.
+
+00:15:11.420 --> 00:15:14.879
+Another thing about Org Babel, it's not exactly API, but you
+
+00:15:14.880 --> 00:15:18.259
+know that documentation for most of the Babel backends are
+
+00:15:18.260 --> 00:15:20.879
+not even in the Org manual, even though the backends are
+
+00:15:20.880 --> 00:15:25.559
+built-in. They are on Org Wiki, and we do want to move them to
+
+00:15:25.560 --> 00:15:29.919
+the manual eventually. That's the important part, and it
+
+00:15:29.920 --> 00:15:34.519
+should be done. Those are some obstacles, like not all the
+
+00:15:34.520 --> 00:15:39.399
+features are properly implemented, and that's a bit of an
+
+00:15:39.400 --> 00:15:43.159
+extra job that should be done. Another small thing which
+
+00:15:43.160 --> 00:15:48.079
+thanks to Bruno Barbier is being done, in progress: we
+
+00:15:48.080 --> 00:15:51.599
+should have a more robust asynchronous API for babel.
+
+00:15:51.600 --> 00:15:53.600
+I hope it can progress further.
+
+00:15:53.601 --> 00:15:57.379
+For now, it already progressed quite far.
+
+NOTE Beyond Org code and Emacs: third-party packages, apps, parsers
+
+00:15:57.380 --> 00:15:59.959
+That's all about the basics, the underlying
+
+00:15:59.960 --> 00:16:04.799
+backbone of the Org codebase. Let's move to the second
+
+00:16:04.800 --> 00:16:09.519
+important direction which is
+
+00:16:09.520 --> 00:16:13.739
+the third-party packages and basically the parsers
+
+00:16:13.740 --> 00:16:18.279
+for mobile apps. I will postpone the community to the end
+
+00:16:18.280 --> 00:16:23.919
+because I want to have a call for contribution at the end.
+
+00:16:23.920 --> 00:16:31.199
+For third-party packages, I would like to remind you that
+
+NOTE org-contrib
+
+00:16:31.200 --> 00:16:34.239
+Org mode used to have something called org-contrib as a
+
+00:16:34.240 --> 00:16:39.799
+part of Org mode, which is a collection of small libraries,
+
+00:16:39.800 --> 00:16:44.079
+small packages that didn't have a proper
+
+00:16:44.080 --> 00:16:45.495
+copyright assignment basically,
+
+00:16:45.496 --> 00:16:49.359
+but more or less a part of Org mode. This is
+
+00:16:49.360 --> 00:16:52.119
+no longer the case. Now what we did is
+
+00:16:52.120 --> 00:16:56.641
+we moved a number of very rarely used libraries
+
+00:16:56.642 --> 00:16:58.759
+from Org core itself to org-contrib,
+
+00:16:58.760 --> 00:17:03.779
+and now we treat org-contrib as basically the libraries
+
+00:17:03.780 --> 00:17:08.020
+that we really want someone to take responsibility for.
+
+00:17:08.021 --> 00:17:10.580
+We want to maintain this for everything that is in
+
+00:17:10.581 --> 00:17:18.079
+org-contrib, and from me and other Org team, we
+
+00:17:18.080 --> 00:17:21.162
+do not spend too much time maintaining this package,
+
+00:17:21.163 --> 00:17:25.286
+just do some most basic bug fixing, and that's all.
+
+00:17:25.287 --> 00:17:27.359
+If you know, if you see
+
+00:17:27.360 --> 00:17:30.031
+some libraries from org-contrib and you use them,
+
+00:17:30.032 --> 00:17:31.991
+and you know Elisp, please volunteer to be
+
+00:17:31.992 --> 00:17:34.454
+the maintainer, because otherwise
+
+00:17:34.455 --> 00:17:37.819
+there will be not much progress in these libraries.
+
+NOTE Org orphanage
+
+00:17:37.820 --> 00:17:40.719
+As a natural extension of this and inspired by
+
+00:17:40.720 --> 00:17:46.199
+Tarsius's Emacs Orphanage idea, we also maintain a small
+
+00:17:46.200 --> 00:17:50.359
+page basically listing the libraries, some others like
+
+00:17:50.360 --> 00:17:55.439
+packages, Emacs packages that are not really maintained.
+
+00:17:55.440 --> 00:17:59.239
+If you are a maintainer of a library and you don't have time
+
+00:17:59.240 --> 00:18:02.507
+to do it, you can write to Org mailing list
+
+00:18:02.508 --> 00:18:05.209
+and we can add the library to this page
+
+00:18:05.210 --> 00:18:09.918
+so that we can search for new maintainers
+
+00:18:09.919 --> 00:18:12.839
+in a more centralized way. If you are an
+
+00:18:12.840 --> 00:18:18.119
+Elisp hacker and you want to help something for Org Mode,
+
+00:18:18.120 --> 00:18:25.839
+you can check that page and see where you can help.
+
+NOTE Mobile apps and parsers
+
+00:18:25.840 --> 00:18:29.879
+Now away from Emacs, or mobile apps.
+
+00:18:29.880 --> 00:18:33.948
+We have quite a lot of mobile apps at this point.
+
+00:18:33.949 --> 00:18:35.759
+Unfortunately, it's very hard
+
+00:18:35.760 --> 00:18:42.459
+for me and many other Elisp contributors to contribute to
+
+00:18:42.460 --> 00:18:46.759
+these apps because they are not using Elisp naturally. But
+
+00:18:46.760 --> 00:18:52.359
+these applications heavily rely on Org markup. I do hope
+
+00:18:52.360 --> 00:18:55.799
+that we can keep Org markup consistent enough and rich
+
+00:18:55.800 --> 00:19:00.599
+enough so that people don't have to invent extensions to Org
+
+00:19:00.600 --> 00:19:06.020
+like what happened to Markdown.
+
+00:19:06.021 --> 00:19:09.542
+I really want to emphasize that
+
+00:19:09.543 --> 00:19:12.359
+I want to see more Org parsers in different
+
+00:19:12.360 --> 00:19:13.739
+languages so that they can be used by developers.
+
+00:19:13.740 --> 00:19:24.185
+For people who are writing these parsers,
+
+00:19:24.186 --> 00:19:27.267
+I want to share this link. It is the org-syntax reference.
+
+00:19:27.268 --> 00:19:29.368
+It is the official Org syntax,
+
+00:19:29.369 --> 00:19:33.631
+which is what we think it should be.
+
+00:19:33.632 --> 00:19:36.212
+It's described in plain human language.
+
+00:19:36.213 --> 00:19:39.855
+It's not a code. All details should be listed there.
+
+00:19:39.856 --> 00:19:43.557
+Please use it as a reference if you are writing a parser.
+
+00:19:43.558 --> 00:19:45.118
+Eventually, this document will be
+
+00:19:45.119 --> 00:19:51.672
+submitted to IETF, I hope. In the future
+
+00:19:51.673 --> 00:19:56.059
+I hope to write a set of tests which will work as benchmarks.
+
+00:19:56.060 --> 00:19:58.839
+basically we have some existing tests for our internal
+
+00:19:58.840 --> 00:20:04.319
+parser and I want to factor out these tests so they can be used
+
+00:20:04.320 --> 00:20:07.359
+by any parser, so that we can compare the performance and
+
+00:20:07.360 --> 00:20:14.579
+which parts of Org mode are parsed and which parts are not.
+
+00:20:14.580 --> 00:20:18.999
+I mentioned that we want to submit to IETF, which means that
+
+00:20:19.000 --> 00:20:23.868
+Org markup will become the actual registered format.
+
+NOTE Long-standing syntax problems
+
+00:20:23.869 --> 00:20:31.279
+But before we do that and thus fix Org markup in stone,
+
+00:20:31.280 --> 00:20:34.614
+because it's very hard to change things in the IETF,
+
+00:20:34.615 --> 00:20:38.836
+it's important to address important problems,
+
+00:20:38.837 --> 00:20:41.217
+existing problems with Org syntax.
+
+00:20:41.218 --> 00:20:43.639
+There are some problems, like I mentioned the
+
+00:20:43.640 --> 00:20:46.941
+inconsistencies between the two existing parsers
+
+00:20:46.942 --> 00:20:51.407
+in Org mode. There are also some parts,
+
+00:20:51.408 --> 00:20:53.149
+there are some examples, like there are
+
+00:20:53.150 --> 00:20:54.799
+problems with numeric priorities, for
+
+00:20:54.800 --> 00:20:58.719
+example, which are not treated consistently. There are
+
+00:20:58.720 --> 00:21:02.599
+problems, more general problems with syntax when people
+
+00:21:02.600 --> 00:21:07.239
+request some edge cases which should be addressed. Like,
+
+00:21:07.240 --> 00:21:10.101
+it's very hard to do interword markup.
+
+00:21:10.102 --> 00:21:13.701
+We have zero-width space workaround, but many people dislike it,
+
+00:21:13.702 --> 00:21:16.262
+so maybe we want to do something about it.
+
+00:21:16.263 --> 00:21:18.079
+We have some edge cases when we
+
+00:21:18.080 --> 00:21:22.119
+combine emphasis with links. We have some edge cases when we
+
+00:21:22.120 --> 00:21:24.959
+have double blank lines inside some source blocks, for
+
+00:21:24.960 --> 00:21:30.079
+example, and combination in the list. I hope we can
+
+00:21:30.080 --> 00:21:33.399
+somehow address it. It's not impossible to do it, it just
+
+00:21:33.400 --> 00:21:38.919
+requires time. One annoying part is the inline task syntax.
+
+00:21:38.920 --> 00:21:41.479
+It's annoying both from the programming perspective,
+
+00:21:41.480 --> 00:21:43.919
+internally as implementation, and from the UI
+
+00:21:43.920 --> 00:21:47.519
+perspective, because there are too many stars. We
+
+00:21:47.520 --> 00:21:50.479
+probably should redesign it eventually, maybe in
+
+00:21:50.480 --> 00:21:56.239
+backwards-compatible way, but we will see how it goes.
+
+NOTE New syntax features
+
+00:21:56.240 --> 00:22:00.639
+Another part is not just fixing the edge cases or problems,
+
+00:22:00.640 --> 00:22:04.039
+it's the completely new syntax features. That's probably
+
+00:22:04.040 --> 00:22:07.959
+done after we submit to IETF. But there are important things
+
+00:22:07.960 --> 00:22:11.119
+that people often request, like time zone support in
+
+00:22:11.120 --> 00:22:15.919
+timestamps. Better repeaters, like more flexible
+
+00:22:15.920 --> 00:22:21.799
+repeaters, that's really a frequent request also.
+
+00:22:21.800 --> 00:22:28.919
+Another idea is some custom markup, which is
+
+00:22:28.920 --> 00:22:31.939
+coming to various requests, like, for example, people
+
+00:22:31.940 --> 00:22:37.887
+often ask to highlight some words with a color,
+
+00:22:37.888 --> 00:22:40.890
+for example, or with some other special way
+
+00:22:40.891 --> 00:22:43.333
+and then export it in a special way,
+
+00:22:43.334 --> 00:22:47.239
+just as we do with special blocks, basically.
+
+00:22:47.240 --> 00:22:51.061
+What I want to introduce is the ability to do it
+
+00:22:51.062 --> 00:22:54.601
+on a macro level or inline.
+
+00:22:54.602 --> 00:22:57.879
+Of course, a new syntax feature which I wish we could
+
+00:22:57.880 --> 00:23:01.064
+have is the multi-line cells in tables.
+
+00:23:01.065 --> 00:23:02.545
+It's very frequently requested as well,
+
+00:23:02.546 --> 00:23:07.007
+but I really have no clue how to do it.
+
+00:23:07.008 --> 00:23:09.239
+We had a discussion about this in previous
+
+00:23:09.240 --> 00:23:13.359
+discussions, but there was no conclusion. We don't see a
+
+00:23:13.360 --> 00:23:16.155
+good way how to implement it syntax-wise.
+
+00:23:16.156 --> 00:23:19.140
+Unlike time zones where we decided exactly the syntax,
+
+00:23:19.141 --> 00:23:22.665
+how it could be and we just need patches to be submitted,
+
+00:23:22.666 --> 00:23:25.610
+here even the idea of syntax is not clear.
+
+00:23:25.611 --> 00:23:26.771
+Please do participate in these discussions
+
+00:23:26.772 --> 00:23:30.502
+if you have ideas.
+
+NOTE New features I hope to see in Org
+
+00:23:30.503 --> 00:23:32.519
+The last direction is the
+
+00:23:32.520 --> 00:23:36.319
+new features. In general, I welcome all kinds of good
+
+00:23:36.320 --> 00:23:39.559
+features, but there are certain things which I explicitly
+
+00:23:39.560 --> 00:23:43.919
+want to see and I hope to see submitted. If you are
+
+00:23:43.920 --> 00:23:48.559
+interested, please do submit patches. One, and probably
+
+00:23:48.560 --> 00:23:50.799
+many people are aware about it, is the asynchronous LaTeX
+
+00:23:50.800 --> 00:23:55.319
+preview, developed by Timothy and Karthik. I hope it can be
+
+00:23:55.320 --> 00:23:59.279
+finalized eventually and upstreamed. It's pretty much in
+
+00:23:59.280 --> 00:24:02.319
+ready state, but on the technical level it should be
+
+00:24:02.320 --> 00:24:09.879
+discussed further and revised. The second is org-ql by Adam.
+
+00:24:09.880 --> 00:24:17.239
+I hope it can be upstreamed. It's also a work in progress.
+
+00:24:17.240 --> 00:24:20.519
+It's just a question of free time for Adam mostly, I think,
+
+00:24:20.520 --> 00:24:26.199
+and me. That's another important part, new feature. The
+
+00:24:26.200 --> 00:24:30.239
+third is the so-called multi-page export. The idea is the
+
+00:24:30.240 --> 00:24:34.319
+same as many packages for blog posts, so that you have a
+
+00:24:34.320 --> 00:24:39.479
+single Org file and then you can export multiple HTML pages,
+
+00:24:39.480 --> 00:24:42.599
+for example, or PDF pages, anything like that. This work in
+
+00:24:42.600 --> 00:24:46.687
+progress by Orm, thanks to him,
+
+00:24:46.688 --> 00:24:49.349
+although it was a little bit stuck because
+
+00:24:49.350 --> 00:24:52.079
+I am not exactly sure how to best integrate it
+
+00:24:52.080 --> 00:24:56.879
+into the existing APIs. If you are a developer of one of the
+
+00:24:56.880 --> 00:25:01.079
+blogging packages, I would appreciate if you can chime in
+
+00:25:01.080 --> 00:25:06.479
+and probably share some ideas here. Next are just some
+
+00:25:06.480 --> 00:25:09.839
+wishes I wish we could have, but
+
+00:25:09.840 --> 00:25:11.949
+it's not very detailed. One is
+
+00:25:11.950 --> 00:25:14.159
+the multi-language support, so that we can have Org
+
+00:25:14.160 --> 00:25:16.879
+documents in multiple languages, or maybe even
+
+00:25:16.880 --> 00:25:21.159
+translations. The collaborative editing that many
+
+00:25:21.160 --> 00:25:25.359
+people would wish to have, I think. Things like tracking
+
+00:25:25.360 --> 00:25:28.999
+changes, adding comments, importing from
+
+00:25:29.000 --> 00:25:30.874
+some other Org formats with
+
+00:25:30.875 --> 00:25:32.035
+the comments and changes
+
+00:25:32.036 --> 00:25:34.018
+so that we can actually participate
+
+00:25:34.019 --> 00:25:36.962
+with all those Microsoft Word users
+
+00:25:36.963 --> 00:25:39.743
+and stuff like that.
+
+00:25:39.744 --> 00:25:43.719
+But that's really too much for me alone to handle.
+
+00:25:43.720 --> 00:25:47.839
+If you want to see one of these features, please consider
+
+00:25:47.840 --> 00:25:50.039
+contributing. Just write the mailing list about your
+
+00:25:50.040 --> 00:25:54.072
+interest and we can start from there.
+
+NOTE Org community
+
+00:25:54.073 --> 00:25:57.455
+Now, the important part is, you see,
+
+00:25:57.456 --> 00:25:58.635
+I keep asking people like,
+
+00:25:58.636 --> 00:25:59.799
+please contribute, please contribute,
+
+00:25:59.800 --> 00:26:01.357
+but who should contribute?
+
+NOTE Org community forums - Org mailing list
+
+00:26:01.358 --> 00:26:03.799
+So I want to improve communication between the
+
+00:26:03.800 --> 00:26:12.479
+community and the mailing list. Now, people often
+
+00:26:12.480 --> 00:26:16.799
+discuss new features or ideas on all kinds of places like
+
+00:26:16.800 --> 00:26:20.239
+Reddit, Mastodon, like all kinds of Matrix/IRC chats,
+
+00:26:20.240 --> 00:26:25.439
+even on meetups, some non-English language. That's very
+
+00:26:25.440 --> 00:26:29.479
+nice that we have this community, but not all the ideas are
+
+00:26:29.480 --> 00:26:34.499
+visible to the developers. I do wish that the most
+
+00:26:34.500 --> 00:26:38.279
+important things that people want to see should end up on the
+
+00:26:38.280 --> 00:26:42.331
+mailing list, one way or another.
+
+00:26:42.332 --> 00:26:43.519
+I'll later talk about some
+
+00:26:43.520 --> 00:26:48.839
+ideas how I think it can be done. Another part is
+
+00:26:48.840 --> 00:26:52.554
+we have org-wiki and I hope that
+
+00:26:52.555 --> 00:26:55.239
+we can make it more centralized
+
+00:26:55.240 --> 00:26:58.476
+space for interesting Org mode articles,
+
+00:26:58.477 --> 00:27:00.617
+for tutorials, for blog posts,
+
+00:27:00.618 --> 00:27:03.679
+at least linked to blog posts. If you have
+
+00:27:03.680 --> 00:27:08.119
+some idea about good blog posts, it would be nice if you
+
+00:27:08.120 --> 00:27:13.025
+submit a patch to work or at least email about this link
+
+00:27:13.026 --> 00:27:17.159
+to the mailing list.
+
+NOTE Org mailing list - world
+
+00:27:17.160 --> 00:27:21.054
+Of course, not everyone likes to use mailing lists
+
+00:27:21.055 --> 00:27:23.809
+or don't have a good setup to do it,
+
+00:27:23.810 --> 00:27:25.559
+or even don't want to read
+
+00:27:25.560 --> 00:27:27.599
+everything on Org mailing list, because there are things
+
+00:27:27.600 --> 00:27:31.359
+like bug reports, people don't really want to see that. So
+
+00:27:31.360 --> 00:27:35.439
+Bastien actually developed a tool that can help with this.
+
+00:27:35.440 --> 00:27:39.239
+If you want to monitor Org mailing list, but want to see
+
+00:27:39.240 --> 00:27:42.799
+only the most important discussions, and maybe
+
+00:27:42.800 --> 00:27:45.479
+participate if you decide to, you don't have to register. We
+
+00:27:45.480 --> 00:27:51.919
+have Woof, which is basically a web page that monitors our
+
+00:27:51.920 --> 00:27:55.639
+main list, but not every email. That's the most important
+
+00:27:55.640 --> 00:27:58.719
+announcements, some blog-like posts, or feature
+
+00:27:58.720 --> 00:28:02.799
+requests, or some discussions. Then on this webpage,
+
+00:28:02.800 --> 00:28:06.119
+you can see it as HTML, or you can subscribe as RSS, or even
+
+00:28:06.120 --> 00:28:11.119
+download in Org or MD format.
+
+00:28:11.120 --> 00:28:15.359
+Thanks to Sacha Chua, also weekly news about Emacs in
+
+00:28:15.360 --> 00:28:23.199
+general, but Org Mode as well. It also includes the
+
+00:28:23.200 --> 00:28:26.639
+new features in Org Mode on the development branch and the
+
+00:28:27.100 --> 00:28:30.199
+interesting new blog posts and discussions on various
+
+00:28:30.200 --> 00:28:35.879
+Reddit forums or mailing lists everywhere. I did this
+
+00:28:35.880 --> 00:28:39.519
+little bit of experimental integration so that many lists
+
+00:28:39.520 --> 00:28:45.159
+can also be read, kind of announced on the chats.
+
+00:28:45.160 --> 00:28:48.319
+For example, in #org-mode Matrix room, we have a bot that
+
+00:28:48.320 --> 00:28:53.239
+connects to Woof RSS so that all the news and discussions are
+
+00:28:53.240 --> 00:28:55.923
+notified in the chat so that people
+
+00:28:55.924 --> 00:28:58.764
+can see if they are interested
+
+00:28:58.765 --> 00:29:02.519
+and maybe, hopefully, participate. I wish
+
+00:29:02.520 --> 00:29:05.599
+we could also have similar kind of both for Reddit, Mastodon
+
+00:29:05.600 --> 00:29:10.879
+and maybe IRC. That way we have mailing list connected to
+
+00:29:10.880 --> 00:29:17.719
+more active and more modern forums and chats.
+
+00:29:17.720 --> 00:29:19.959
+More people exposed to what is happening.
+
+00:29:19.960 --> 00:29:26.719
+Another part is that we actually have a web interface to Org
+
+00:29:26.720 --> 00:29:29.048
+mailing list and you can even reply from there,
+
+00:29:29.049 --> 00:29:31.400
+but it's not always obvious, unfortunately.
+
+00:29:31.401 --> 00:29:37.745
+We have this public inbox software
+
+00:29:37.746 --> 00:29:39.999
+to transform the mailing list into
+
+00:29:40.000 --> 00:29:45.719
+HTML pages. That's a decent interface, but it could be
+
+00:29:45.720 --> 00:29:49.199
+improved to look more forum-like, so that people can easily
+
+00:29:49.200 --> 00:29:53.079
+find the reply button or basically participate without
+
+00:29:53.080 --> 00:29:56.119
+too much effort, even if they are not subscribed or they are just
+
+00:29:56.120 --> 00:29:59.079
+casually reading. That would be nice if someone
+
+00:29:59.080 --> 00:30:05.579
+knowledgeable of CSS could help with this.
+
+NOTE Contribute ideas!
+
+00:30:05.580 --> 00:30:12.199
+Again, I cannot emphasize more that most of the Org ideas of
+
+00:30:12.200 --> 00:30:16.974
+the new features are coming from people,
+
+00:30:16.975 --> 00:30:23.221
+but often they are known either by someone
+
+00:30:23.222 --> 00:30:24.479
+submitting a patch to the mailing list or
+
+00:30:24.480 --> 00:30:28.239
+submitting an idea to the mailing list. Rarely, it happens when
+
+00:30:28.240 --> 00:30:31.999
+someone is reading posts from Reddit that don't share to the
+
+00:30:32.000 --> 00:30:35.639
+mailing list. If you think that there is some important
+
+00:30:35.640 --> 00:30:38.599
+discussion happening on the forum,
+
+00:30:38.600 --> 00:30:42.415
+it would be nice that you can go ahead and share it
+
+00:30:42.416 --> 00:30:46.519
+with Org mailing list. We don't care about
+
+00:30:46.520 --> 00:30:49.500
+on-topic, off-topic, because unlike
+
+00:30:49.501 --> 00:30:51.385
+emacs-devel, we don't focus on development.
+
+00:30:51.386 --> 00:30:54.929
+We can discuss some related to Org mode topics
+
+00:30:54.930 --> 00:31:01.519
+in open-end list, just like on an ordinary forum.
+
+NOTE How much can a single person do?
+
+00:31:01.520 --> 00:31:08.439
+I would like to end my talk with the call for contributions.
+
+00:31:08.440 --> 00:31:13.639
+Let me explain a little bit, because you saw now I shared many
+
+00:31:13.640 --> 00:31:19.319
+many ideas and I do spend a lot of time on Org Mode. In fact,
+
+00:31:19.320 --> 00:31:21.322
+for the last year, I was spending like
+
+00:31:21.323 --> 00:31:23.437
+30 hours per week or something.
+
+00:31:23.438 --> 00:31:27.319
+Until recently, I can spend a bit less, but still
+
+00:31:27.320 --> 00:31:29.900
+even with that much of commitment,
+
+00:31:29.901 --> 00:31:31.479
+there is no way I can handle
+
+00:31:31.480 --> 00:31:34.999
+everything by myself.
+
+NOTE Contribute code!
+
+00:31:35.000 --> 00:31:38.551
+We really, really need more people to contribute
+
+00:31:38.552 --> 00:31:43.633
+so that Org mode keeps moving forward.
+
+00:31:43.634 --> 00:31:45.079
+Again, I just shared ideas,
+
+00:31:45.080 --> 00:31:46.394
+but I have so many more.
+
+00:31:46.395 --> 00:31:48.734
+I have more than a thousand ideas noted down.
+
+00:31:48.735 --> 00:31:52.636
+Yeah, there's no way I can do it myself.
+
+00:31:52.637 --> 00:31:57.350
+I do need help for new contributions, for new features.
+
+00:31:57.351 --> 00:31:57.617
+If someone can help fixing bugs, it would be really great.
+
+00:31:57.618 --> 00:32:04.291
+If someone knows specialized things,
+
+00:32:04.292 --> 00:32:06.873
+like for example Open Document Format,
+
+00:32:06.874 --> 00:32:08.759
+which I don't know very well, it would be
+
+00:32:08.760 --> 00:32:12.999
+really nice, because things like ODT export requires
+
+00:32:13.000 --> 00:32:14.089
+knowing that, and if someone already has the knowledge,
+
+00:32:14.090 --> 00:32:18.081
+it would be much easier
+
+00:32:18.082 --> 00:32:23.480
+if that person can help with such things.
+
+00:32:23.481 --> 00:32:26.868
+Although in the coming years,
+
+00:32:26.869 --> 00:32:28.159
+it's very important to have
+
+00:32:28.160 --> 00:32:28.830
+regular contributors
+
+00:32:28.831 --> 00:32:31.921
+because my life is my life
+
+00:32:31.922 --> 00:32:34.363
+and things may happen,
+
+00:32:34.364 --> 00:32:37.244
+so it would be nice to have some kind of backup
+
+00:32:37.245 --> 00:32:40.245
+so that bugs keep being fixed
+
+00:32:40.245 --> 00:32:40.245
+and things like patches being accepted
+
+00:32:40.246 --> 00:32:44.567
+and stuff like that,
+
+00:32:44.568 --> 00:32:46.168
+so that some person can at least
+
+00:32:46.169 --> 00:32:49.879
+temporarily take on my job.
+
+00:32:49.880 --> 00:32:51.510
+I would like to emphasize
+
+00:32:51.511 --> 00:32:53.319
+that the code contributors are the most
+
+00:32:53.320 --> 00:32:56.212
+important contributions for Org Mode.
+
+00:32:56.213 --> 00:33:02.079
+All other types are less important, really.
+
+NOTE Why contribute?
+
+00:33:02.080 --> 00:33:03.959
+I want to spend a couple of slides
+
+00:33:03.960 --> 00:33:07.719
+trying to motivate you to contribute.
+
+00:33:07.720 --> 00:33:11.128
+If you ever considered contributing
+
+00:33:11.129 --> 00:33:13.359
+or if you ever wished to have some
+
+00:33:13.360 --> 00:33:16.879
+feature in Org Mode, really don't wait, because
+
+00:33:16.880 --> 00:33:18.239
+most new features are contributed by people.
+
+00:33:18.240 --> 00:33:23.736
+They are not contributed by me.
+
+00:33:23.737 --> 00:33:25.199
+I contribute a few things, but I am alone.
+
+00:33:25.200 --> 00:33:27.038
+I cannot contribute many things.
+
+00:33:27.039 --> 00:33:30.300
+Most of the things are contributed by users
+
+00:33:30.301 --> 00:33:33.441
+who go ahead and submit patches.
+
+00:33:33.442 --> 00:33:37.323
+And even in very commonly requested features,
+
+00:33:37.324 --> 00:33:40.344
+it's usually someone who steps up.
+
+00:33:40.345 --> 00:33:42.199
+If you want something, don't wait.
+
+00:33:42.200 --> 00:33:44.206
+Just go ahead and write to mailing list.
+
+00:33:44.207 --> 00:33:46.207
+You don't have to submit a patch immediately.
+
+00:33:46.208 --> 00:33:48.729
+You can just say, I am interested.
+
+00:33:48.730 --> 00:33:53.819
+We will start from there.
+
+00:33:53.820 --> 00:33:56.043
+We'll start because that's my job
+
+00:33:56.044 --> 00:33:57.644
+and I will guide you through.
+
+00:33:57.645 --> 00:33:58.990
+If you have problems with Org in general,
+
+00:33:58.991 --> 00:34:02.308
+I'll explain, because that's what I know.
+
+00:34:02.309 --> 00:34:05.030
+I will explain how to implement things better,
+
+00:34:05.031 --> 00:34:06.999
+but I need someone to actually do
+
+00:34:07.000 --> 00:34:10.070
+the job and write the code.
+
+00:34:10.071 --> 00:34:19.057
+Even if you don't have 10 years experience with Elisp,
+
+00:34:19.058 --> 00:34:21.178
+it doesn't matter. You can learn on the way.
+
+00:34:21.179 --> 00:34:22.519
+There are many examples of this in the
+
+00:34:22.520 --> 00:34:25.642
+mailing list when we start slowly,
+
+00:34:25.643 --> 00:34:27.759
+fix things one by one, and
+
+00:34:27.760 --> 00:34:29.225
+eventually arrive to a good quality
+
+00:34:29.226 --> 00:34:31.707
+when the person is not experienced.
+
+00:34:31.708 --> 00:34:34.759
+You just need to be ready to learn things,
+
+00:34:34.760 --> 00:34:37.992
+Spend your free time (that's as usual, right?),
+
+00:34:37.993 --> 00:34:41.214
+and have the interest in specific thing
+
+00:34:41.215 --> 00:34:43.499
+you are contributing.
+
+00:34:43.500 --> 00:34:44.475
+Don't be afraid to be wrong.
+
+00:34:44.476 --> 00:34:47.578
+I will be there to assist.
+
+00:34:47.579 --> 00:34:48.937
+If you don't like emails,
+
+00:34:48.938 --> 00:34:51.239
+if you don't like patches, it doesn't matter.
+
+00:34:51.240 --> 00:34:55.361
+Again, you can share GitHub link. It's okay.
+
+00:34:55.362 --> 00:34:57.684
+You can go and modify some workflow directly.
+
+00:34:57.685 --> 00:34:59.565
+You submit the modified version. It's also okay.
+
+00:34:59.566 --> 00:35:05.119
+It's easy for me to create patches if I need to.
+
+00:35:05.120 --> 00:35:07.279
+If you don't like emails at all, you don't want to
+
+00:35:07.280 --> 00:35:11.879
+participate in the mailing list, it's not ideal, but I can
+
+00:35:11.880 --> 00:35:16.005
+still work with this. I am on IRC, I am on Matrix,
+
+00:35:16.006 --> 00:35:19.799
+you can ping me, it's yantar92.
+
+00:35:19.800 --> 00:35:22.347
+We also have monthly meetup,
+
+00:35:22.348 --> 00:35:23.987
+so you can go and ask by voice,
+
+00:35:23.988 --> 00:35:27.088
+we can just talk in person, discuss your ideas,
+
+00:35:27.089 --> 00:35:29.299
+it's also fine.
+
+00:35:29.300 --> 00:35:35.159
+The key point is that we always welcome new contributors.
+
+00:35:35.160 --> 00:35:40.239
+The more contributions to Org Mode is better.
+
+NOTE Benefits for code contributors
+
+00:35:40.240 --> 00:35:41.519
+To increase the motivation,
+
+00:35:41.520 --> 00:35:44.919
+I'll just try to show some benefits
+
+00:35:44.920 --> 00:35:49.479
+of contributing to Org Mode and free software in general.
+
+00:35:49.480 --> 00:35:52.079
+It can be actually useful for your CV if you're a programmer.
+
+00:35:52.080 --> 00:35:54.999
+It doesn't matter if it's Lisp, because you can have a pet
+
+00:35:55.000 --> 00:35:59.039
+project that demonstrates your skills, that you can finish
+
+00:35:59.040 --> 00:36:04.359
+something to a usable state.
+
+00:36:04.360 --> 00:36:06.800
+A pet project usually demonstrates
+
+00:36:06.801 --> 00:36:08.839
+that you can work alone, but it doesn't
+
+00:36:08.840 --> 00:36:12.119
+demonstrate anything about you working in a team, in the
+
+00:36:12.120 --> 00:36:15.519
+production team. When you contribute to
+
+00:36:15.520 --> 00:36:17.629
+Libre software, look,
+
+00:36:17.630 --> 00:36:20.759
+you will work with a number of people
+
+00:36:20.760 --> 00:36:24.352
+who contribute and comment on your work.
+
+00:36:24.353 --> 00:36:27.073
+You'll have to learn a new code base.
+
+00:36:27.074 --> 00:36:30.075
+You will have to follow certain standards.
+
+00:36:30.076 --> 00:36:33.239
+All these things, by having a public record
+
+00:36:33.240 --> 00:36:37.559
+of contribution, will be a valid point that proves your
+
+00:36:37.560 --> 00:36:42.087
+knowledge in your CV. I put a small quote
+
+00:36:42.088 --> 00:36:44.869
+(which I'm not going to read in the interest of time)
+
+00:36:44.870 --> 00:36:46.279
+from Rudolf Adamkovič,
+
+00:36:46.280 --> 00:36:50.159
+who is describing these three points in probably a
+
+00:36:50.160 --> 00:36:56.519
+more expressive way.
+
+00:36:56.520 --> 00:36:59.939
+Another benefit is you can actually get money from this.
+
+00:36:59.940 --> 00:37:03.999
+Thanks to a number of Org Mode users who kindly contribute to
+
+00:37:04.000 --> 00:37:07.199
+Org development, we have some amount of money
+
+00:37:07.200 --> 00:37:11.009
+coming in, and we don't hold on this money.
+
+00:37:11.010 --> 00:37:13.550
+If we get another person who contributes
+
+00:37:13.551 --> 00:37:17.511
+to Org regularly, we are happy to share this money,
+
+00:37:17.512 --> 00:37:22.539
+because we do know that
+
+00:37:22.540 --> 00:37:24.599
+getting some extra money, even a little bit,
+
+00:37:24.600 --> 00:37:27.216
+does improve motivation.
+
+00:37:27.217 --> 00:37:29.158
+We are really ready to share this.
+
+00:37:29.159 --> 00:37:33.523
+If you are serious about contributing,
+
+00:37:33.524 --> 00:37:34.919
+you can just request this
+
+00:37:34.920 --> 00:37:41.419
+and we can share a part of the donations to you.
+
+NOTE Contributing as non-programmer
+
+00:37:41.420 --> 00:37:45.199
+For non-programmers, we also have a lot of work to do.
+
+00:37:45.200 --> 00:37:47.092
+There's a lot of stuff we can do on the Org wiki,
+
+00:37:47.093 --> 00:37:48.754
+especially with CSS styles,
+
+00:37:48.755 --> 00:37:53.178
+with updating articles,
+
+00:37:53.179 --> 00:37:54.880
+with adding links to tutorials,
+
+00:37:54.881 --> 00:37:56.222
+or even writing tutorials about Org Mode.
+
+00:37:56.223 --> 00:38:01.081
+It would be nice to have more screencasts.
+
+00:38:01.082 --> 00:38:02.702
+It would be nice to improve Org manual,
+
+00:38:02.703 --> 00:38:05.283
+because that's the most difficult part for me
+
+00:38:05.284 --> 00:38:07.325
+because I'm too familiar with the code.
+
+00:38:07.326 --> 00:38:11.226
+Writing the manual when you know things internally
+
+00:38:11.227 --> 00:38:13.727
+is very hard. I just know too many things.
+
+00:38:13.728 --> 00:38:16.809
+I can assume that people know too much,
+
+00:38:16.810 --> 00:38:20.911
+that new users have no idea about certain things.
+
+00:38:20.912 --> 00:38:30.439
+I can just omit those without being aware.
+
+NOTE Got no free time, but still want to help?
+
+00:38:30.440 --> 00:38:33.319
+The final slide I would go to come back is about
+
+00:38:33.320 --> 00:38:37.919
+donations. Again, most important is contributing code,
+
+00:38:37.920 --> 00:38:42.879
+but I do hope that donations can
+
+00:38:42.880 --> 00:38:45.445
+increase the number of contributors.
+
+00:38:45.446 --> 00:38:47.999
+I don't know. I know for sure because some
+
+00:38:48.000 --> 00:38:52.439
+people like Timothy, who is participating in this, he did
+
+00:38:52.440 --> 00:38:55.319
+find the donations helpful, especially for more boring
+
+00:38:55.320 --> 00:39:00.079
+tasks like bug fixing and to move things
+
+00:39:00.080 --> 00:39:07.835
+over the long time. If you cannot contribute by other means,
+
+00:39:07.836 --> 00:39:12.996
+it would be appreciated to contribute money.
+
+NOTE Thank you
+
+00:39:12.997 --> 00:39:14.817
+We came to the end of my talk.
+
+00:39:14.818 --> 00:39:16.277
+Thank you for your attention.
+
+00:39:16.278 --> 00:39:19.698
+If you have any questions, please feel free to ask.
+
+00:39:19.699 --> 00:39:22.898
+I think we can even discuss further
+
+00:39:22.899 --> 00:39:28.180
+during the next Org Meetup in the coming week.
+
+00:39:28.181 --> 00:39:30.320
+There, if you have more detailed questions,
+
+00:39:30.321 --> 00:39:31.640
+we can continue discussing
+
+00:39:31.641 --> 00:39:34.440
+apart from what happens after this presentation.
diff --git a/2024/captions/emacsconf-2024-p-search--psearch-a-local-search-engine-in-emacs--zac-romero--answers.vtt b/2024/captions/emacsconf-2024-p-search--psearch-a-local-search-engine-in-emacs--zac-romero--answers.vtt
new file mode 100644
index 00000000..cd09d3cb
--- /dev/null
+++ b/2024/captions/emacsconf-2024-p-search--psearch-a-local-search-engine-in-emacs--zac-romero--answers.vtt
@@ -0,0 +1,2017 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:03.559
+...starting the recording here in the chat, and I see some
+
+00:00:03.560 --> 00:00:06.039
+questions already coming in. So thank you so much for your
+
+00:00:06.040 --> 00:00:09.359
+talk, Zac, and I'll step out of your way and let you field
+
+00:00:09.360 --> 00:00:10.279
+some of these questions.
+
+00:00:10.280 --> 00:00:21.999
+Sounds good. All right, so let's see. I'm going off of the
+
+00:00:22.000 --> 00:00:22.969
+question list.
+
+NOTE Q: Do you think a reduced version of this functionality could be integrated into isearch?
+
+00:00:22.970 --> 00:00:25.839
+So the first one is about having reduced
+
+00:00:25.840 --> 00:00:31.999
+version of the functionality integrated into iSearch. So
+
+00:00:32.000 --> 00:00:37.919
+yeah, with the way things are set up, it is essentially a
+
+00:00:37.920 --> 00:00:42.679
+framework. So
+
+00:00:42.680 --> 00:00:46.279
+you can create a candidate. So just a review from the talk. So
+
+00:00:46.280 --> 00:00:49.919
+you have these candidate generators which generate search
+
+00:00:49.920 --> 00:00:54.559
+candidates. So you can have a file system candidate which
+
+00:00:54.560 --> 00:00:58.519
+generates these file documents, which have text content in
+
+00:00:58.520 --> 00:01:01.799
+them. In theory, you could have like a website candidate
+
+00:01:01.800 --> 00:01:06.399
+generator, and it could be like a web crawler. I mean, so
+
+00:01:06.400 --> 00:01:10.519
+there's a lot of different options. So one option, it's on my
+
+00:01:10.520 --> 00:01:15.039
+mind, and I hope to get to this soon, is create a defun, like a
+
+00:01:15.040 --> 00:01:18.599
+defun candidate generator. So basically it takes a file,
+
+00:01:18.600 --> 00:01:22.279
+splits it up into like defunds, kind of like just like what
+
+00:01:22.280 --> 00:01:26.279
+iSearch would do. and then use each of those, the body of
+
+00:01:26.280 --> 00:01:30.959
+those, as a content for the search session. So, I mean,
+
+00:01:30.960 --> 00:01:35.359
+essentially you could just, you could start up a session,
+
+00:01:35.360 --> 00:01:39.479
+and there's like programmatic ways to start these up too. So
+
+00:01:39.480 --> 00:01:42.599
+you could, if such a candidate generator was created, you
+
+00:01:42.600 --> 00:01:49.559
+could easily, and just like, you know, one command. Get the
+
+00:01:49.560 --> 00:01:54.599
+defunds, create a search session with it, and then just go
+
+00:01:54.600 --> 00:02:01.439
+straight to your query. So, definitely, something
+
+00:02:01.440 --> 00:02:06.919
+just like this is in the works. And I guess another thing is
+
+00:02:06.920 --> 00:02:08.239
+interface.
+
+00:02:08.240 --> 00:02:17.079
+The whole dedicated buffer is helpful for searching, but
+
+00:02:17.080 --> 00:02:21.919
+with this isearch case, there's currently not a way to have a
+
+00:02:21.920 --> 00:02:27.839
+reduced UI, where it's just like, OK, I have these function
+
+00:02:27.840 --> 00:02:32.239
+defuns for the current file. I just want them to pop up at the
+
+00:02:32.240 --> 00:02:35.799
+bottom so I can quickly go through it. So currently, I don't
+
+00:02:35.800 --> 00:02:41.199
+have that. But such a UI is definitely, yeah, thinking about
+
+00:02:41.200 --> 00:02:45.359
+how that could be done.
+
+NOTE Q: Any idea how this would work with personal information like Zettlekastens?
+
+00:02:45.360 --> 00:02:50.359
+Alright, so yeah. So next question. Any idea how this
+
+00:02:50.360 --> 00:02:52.599
+will work with personal information like Zettelkasten?
+
+00:02:52.600 --> 00:02:58.319
+So this is, this is like, I mean, it's essentially usable as
+
+00:02:58.320 --> 00:03:04.559
+is with Zettelkasten method. So, I mean, that I mean
+
+00:03:04.560 --> 00:03:08.279
+basically what like for example org-roam, and I think other
+
+00:03:08.280 --> 00:03:12.159
+ones like Denote, they put all these files in the
+
+00:03:12.160 --> 00:03:15.919
+directory, and so with the already existing file system
+
+00:03:15.920 --> 00:03:19.679
+candidate generator all you'd have to do is set that to be the
+
+00:03:19.680 --> 00:03:23.199
+directory of your Zettelkasten system and then it would
+
+00:03:23.200 --> 00:03:26.799
+just pick up all the files in there and
+
+00:03:26.800 --> 00:03:28.799
+then add those as search candidates. So you could easily
+
+00:03:28.800 --> 00:03:33.279
+just search whatever system you have.
+
+00:03:33.280 --> 00:03:36.039
+Based off of the ways it's set up, if you had maybe your
+
+00:03:36.040 --> 00:03:40.999
+dailies you didn't want to search, it's just as easy to add a
+
+00:03:41.000 --> 00:03:44.519
+criteria saying, I don't want dailies to be searched. Like
+
+00:03:44.520 --> 00:03:47.599
+give, like just eliminate the date, like the things from the
+
+00:03:47.600 --> 00:03:51.679
+daily from the sub directory. And then there you go. you have
+
+00:03:51.680 --> 00:03:57.799
+your Zettelkasten search engine, and you could just copy
+
+00:03:57.800 --> 00:03:59.999
+the, you know, there's, I mean, I need, I'm working on
+
+00:04:00.000 --> 00:04:03.519
+documentation for this to kind of set this up easily, but,
+
+00:04:03.520 --> 00:04:06.679
+you know, you could just create your simple command, just
+
+00:04:06.680 --> 00:04:10.679
+like, your simple command, just like, just take in a text
+
+00:04:10.680 --> 00:04:14.359
+query, run it through the system, and then just get your
+
+00:04:14.360 --> 00:04:19.599
+search results right there. So yeah, definitely that is a
+
+00:04:19.600 --> 00:04:22.040
+use case that's on top of my mind.
+
+NOTE Q: How good does the search work for synonyms especially if you use different languages?
+
+00:04:22.041 --> 00:04:23.239
+So next one, how good does a
+
+00:04:23.240 --> 00:04:26.439
+search work for synonyms, especially if you use different
+
+00:04:26.440 --> 00:04:30.719
+languages? Okay, this is a good question because with the
+
+00:04:30.720 --> 00:04:34.719
+way that VM25 works, it's essentially just like trying to
+
+00:04:34.720 --> 00:04:41.119
+find where terms occur and just counts them up.
+
+00:04:41.120 --> 00:04:43.999
+I mean, this is something I couldn't get into. There's just
+
+00:04:44.000 --> 00:04:46.919
+too much on the topic of information retrieval to kind of go
+
+00:04:46.920 --> 00:04:52.879
+into this, but there is a whole kind of field of just like, how
+
+00:04:52.880 --> 00:04:58.279
+do you, given a search term, how do you know what you should
+
+00:04:58.280 --> 00:05:02.519
+search for? So like popular kind of industrial search
+
+00:05:02.520 --> 00:05:07.519
+engines, like they have kind of this feature where you can
+
+00:05:07.520 --> 00:05:11.039
+like define synonyms, define, term replacement. So
+
+00:05:11.040 --> 00:05:14.079
+whenever you see this term, it should be this. And it even
+
+00:05:14.080 --> 00:05:15.091
+gets even further.
+
+NOTE Plurals
+
+00:05:15.092 --> 00:05:19.439
+If someone searches for a plural string,
+
+00:05:19.440 --> 00:05:22.279
+how do you get the singular from that and search for that? So
+
+00:05:22.280 --> 00:05:27.559
+this is a huge topic that currently p-search doesn't
+
+00:05:27.560 --> 00:05:33.519
+address, but it's on the top of my mind as to how. So that's one
+
+00:05:33.520 --> 00:05:33.882
+part.
+
+NOTE Different languages
+
+00:05:33.883 --> 00:05:38.999
+The next part is for different languages, one thing
+
+00:05:39.000 --> 00:05:42.839
+that kind of seems like it's promising is vector search,
+
+00:05:42.840 --> 00:05:47.399
+which, I mean, with the way p-search is set up, you could
+
+00:05:47.400 --> 00:05:51.159
+easily just create a vector search prior, plug it into the
+
+00:05:51.160 --> 00:05:54.599
+system, and start using it. The only problem is that kind of
+
+00:05:54.600 --> 00:05:58.879
+the vector search functions, like you have to do like cosine
+
+00:05:58.880 --> 00:06:03.639
+similarity, like if you have like 10,000 documents, If
+
+00:06:03.640 --> 00:06:06.679
+you're writing Elisp to calculate the cosine similarity
+
+00:06:06.680 --> 00:06:09.879
+between the vectors, that's going to be very slow. And so now
+
+00:06:09.880 --> 00:06:14.159
+the whole can of worms of indexing comes up. And how do you do
+
+00:06:14.160 --> 00:06:17.479
+that? And is that going to be native elisp? And so that's a
+
+00:06:17.480 --> 00:06:21.839
+whole other can of worms. So yeah, vector search seems
+
+00:06:21.840 --> 00:06:25.959
+promising. And then hopefully maybe other traditional
+
+00:06:25.960 --> 00:06:33.439
+synonyms, stemming, that kind of stuff for alternate
+
+00:06:33.440 --> 00:06:40.199
+terms, that could also be incorporated.
+
+NOTE Q: When searching by author I know authors may setup a new machine and not put the exact same information. Is this doing anything to combine those into one author?
+
+00:06:40.200 --> 00:06:43.719
+Okay, next one. When searching by author, I know authors may
+
+00:06:43.720 --> 00:06:47.119
+set up a new machine and not put the exact same information.
+
+00:06:47.120 --> 00:06:49.519
+Is this doing anything to combine these two in one author?
+
+00:06:49.520 --> 00:06:54.399
+Okay, so for this one, it's not. So it's like the way the get
+
+00:06:54.400 --> 00:06:58.119
+prior is currently set up is that it just does like a get
+
+00:06:58.120 --> 00:07:01.999
+command to get all the get authors. You select one and then it
+
+00:07:02.000 --> 00:07:07.959
+just uses that. But the thing is, is if you knew the two emails
+
+00:07:07.960 --> 00:07:12.519
+that user might have used, the two usernames, you could just
+
+00:07:12.520 --> 00:07:14.279
+set up the
+
+00:07:14.280 --> 00:07:19.799
+two priors. One for the old user's email, and then just add
+
+00:07:19.800 --> 00:07:24.079
+another prior for the new user's email. And then that would
+
+00:07:24.080 --> 00:07:29.279
+be a way to just get both of those set up. So that's kind of a
+
+00:07:29.280 --> 00:07:32.959
+running theme throughout p-search is that It's made to be
+
+00:07:32.960 --> 00:07:36.239
+very flexible and very kind of like Lego block ish kind of
+
+00:07:36.240 --> 00:07:39.959
+like you can just, you know, if you need, you know, if
+
+00:07:39.960 --> 00:07:41.919
+something doesn't meet your needs, you know, it's easy to
+
+00:07:41.920 --> 00:07:45.959
+put pieces in, create new components of the search
+
+00:07:45.960 --> 00:07:51.799
+engine. Let's see, a cool powerful grep "Rak" to maybe have
+
+00:07:51.800 --> 00:07:58.839
+some good ideas. I have searches record code while
+
+00:07:58.840 --> 00:08:04.039
+searching. Okay. So. Okay, that's interesting. I'll have
+
+00:08:04.040 --> 00:08:05.239
+to look into this
+
+00:08:05.240 --> 00:08:15.279
+tool. I haven't seen that. I do kind of keep my eyes out for
+
+00:08:15.280 --> 00:08:18.199
+these kind of things. One thing I have seen that was kind of
+
+00:08:18.200 --> 00:08:24.439
+that, I mean, looked interesting was kind of like AST, like
+
+00:08:24.440 --> 00:08:29.519
+the treesitter, the treesitter grep tools. But like, you
+
+00:08:29.520 --> 00:08:35.359
+can grep for a string in the language itself. So that's
+
+00:08:35.360 --> 00:08:37.959
+something I think would be cool to implement either,
+
+00:08:37.960 --> 00:08:41.359
+because I mean, there's treesitter in Emacs, so it's
+
+00:08:41.360 --> 00:08:44.519
+possible to do a new list. If not, there are those kind of like
+
+00:08:44.520 --> 00:08:47.719
+treesitter. So that's, that's something that I think would
+
+00:08:47.720 --> 00:08:50.719
+be cool to incorporate.
+
+NOTE Q: Have you thought about integrating results from using cosine similarity with a deep-learning based vector embedding?
+
+00:08:50.720 --> 00:08:58.279
+Let's see. Have you thought about integrating results from
+
+00:08:58.280 --> 00:09:00.999
+using cosine similarity with a deep learning based vector
+
+00:09:01.000 --> 00:09:06.679
+embedding? Yeah, exactly. So yeah, this kind of goes back to
+
+00:09:06.680 --> 00:09:09.759
+the topic before it. Definitely the whole semantic search
+
+00:09:09.760 --> 00:09:12.679
+with vector embeddings, that's something that, I mean, it
+
+00:09:12.680 --> 00:09:15.479
+would be actually kind of trivial to implement that in
+
+00:09:15.480 --> 00:09:20.239
+p-search. But like I said, computing the cosine similarity
+
+00:09:20.240 --> 00:09:25.959
+in elisp, it's probably too slow.
+
+00:09:25.960 --> 00:09:34.879
+And then also there's a whole question of how do you get the embeddings?
+
+00:09:34.880 --> 00:09:36.919
+Like, how do you get the system running locally on your
+
+00:09:36.920 --> 00:09:41.239
+machine if you want to run it that or, I mean, so that's
+
+00:09:41.240 --> 00:09:48.879
+actually another kind of aspect that I need to look into.
+
+00:09:48.880 --> 00:10:01.939
+Okay, so let's see.
+
+NOTE Q: Is it possible to save/bookmark searches or search templates so they can be used again and again?
+
+00:10:01.940 --> 00:10:06.319
+Okay, next question. Let's see. I'm sorry if this has been
+
+00:10:06.320 --> 00:10:09.079
+covered. Is it possible to save/bookmark searches or search
+
+00:10:09.080 --> 00:10:14.559
+templates so they can be used again and again? Exactly. So
+
+00:10:14.560 --> 00:10:18.199
+just recently I added bookmarking capabilities. So
+
+00:10:18.200 --> 00:10:21.119
+you can essentially just bookmark whatever search session you
+
+00:10:21.120 --> 00:10:26.359
+have. And yeah, and it's just, it was just a bookmark. You can
+
+00:10:26.360 --> 00:10:29.839
+just open and just like reopen that, rerun that search from
+
+00:10:29.840 --> 00:10:36.119
+where you left off. So there's that. And then also, I tried to
+
+00:10:36.120 --> 00:10:40.559
+set this up so that there is a one-to-one mapping of a Lisp
+
+00:10:40.560 --> 00:10:44.759
+object to the search session. So from every search session
+
+00:10:44.760 --> 00:10:49.519
+you make, you should be able to get a, there's a command to do
+
+00:10:49.520 --> 00:10:55.199
+this, to get a data representation of the search. So it would
+
+00:10:55.200 --> 00:11:00.079
+just be like some plist. All you have to do is just take that
+
+00:11:00.080 --> 00:11:04.479
+plist, call this function p-search-setup-buffer with that
+
+00:11:04.480 --> 00:11:09.119
+data. And then that function should set up the session as you
+
+00:11:09.120 --> 00:11:12.599
+left off. So then like, you know, you could make your
+
+00:11:12.600 --> 00:11:15.359
+commands easy. You can make custom search commands super
+
+00:11:15.360 --> 00:11:18.919
+easy. You just get the data representation of that search,
+
+00:11:18.920 --> 00:11:22.519
+find what pieces you want the user to be able to, you know, the
+
+00:11:22.520 --> 00:11:26.333
+search term, make that a parameter in the
+
+00:11:26.334 --> 00:11:29.079
+command, in the interactive code. So you'd have like
+
+00:11:29.080 --> 00:11:31.906
+print on top and then there you go. You have,
+
+00:11:31.907 --> 00:11:34.327
+you have a command to do the search
+
+00:11:34.328 --> 00:11:35.759
+just like just right there. So, so
+
+00:11:35.760 --> 00:11:38.519
+there's a lot of those things and there's a lot more that
+
+00:11:38.520 --> 00:11:40.999
+could be done. Like maybe having, you know, there's kind of
+
+00:11:41.000 --> 00:11:45.479
+in the works and like thinking about having groups of groups
+
+00:11:45.480 --> 00:11:48.959
+of these things, like maybe you can set up like, Oh, I always
+
+00:11:48.960 --> 00:11:51.919
+add these three criteria together. So I, you know, maybe I
+
+00:11:51.920 --> 00:11:54.559
+can make a preset out of these and make them easy, easily
+
+00:11:54.560 --> 00:11:58.079
+addable. So yeah. A lot of things like that are, you know, I'm
+
+00:11:58.080 --> 00:12:02.799
+thinking about a lot of things about that, so.
+
+NOTE Q: You mentioned about candidate generators. Could you explain about to what the score is assigned to?
+
+00:12:02.800 --> 00:12:06.079
+Okay, so next question. You mentioned about candidate
+
+00:12:06.080 --> 00:12:08.479
+generators. Could you explain about what the score is
+
+00:12:08.480 --> 00:12:12.199
+assigned to? Is this to a line or whatever the candidate
+
+00:12:12.200 --> 00:12:17.079
+generates? How does it work with our junior demo? Okay,
+
+00:12:17.080 --> 00:12:21.799
+yeah, so this is a, this is, so actually I had to implement, I
+
+00:12:21.800 --> 00:12:26.719
+had to rewrite p-search just to get this part right. So the
+
+00:12:26.720 --> 00:12:31.159
+candidate generator generates documents. Documents have
+
+00:12:31.160 --> 00:12:36.919
+properties. So the most notable property is the content
+
+00:12:36.920 --> 00:12:40.599
+property. So essentially what happens is that when you
+
+00:12:40.600 --> 00:12:42.879
+create a file system candidate generator and give it a
+
+00:12:42.880 --> 00:12:45.919
+directory, the code goes into the directory, kind of
+
+00:12:45.920 --> 00:12:49.079
+recursively goes through all the directories, and
+
+00:12:49.080 --> 00:12:51.559
+generates a candidate, which is just like a simple list
+
+00:12:51.560 --> 00:12:55.679
+form. It's saying, this is a file, the file path is this. So
+
+00:12:55.680 --> 00:13:00.799
+that's the document ID. So this is saying, this is a file,
+
+00:13:00.800 --> 00:13:05.559
+it's a file, and its file path is this. And so from that, you
+
+00:13:05.560 --> 00:13:09.279
+get all of the different properties, the sub properties. If
+
+00:13:09.280 --> 00:13:11.719
+you're given that, you know how to get the content. If you're
+
+00:13:11.720 --> 00:13:15.439
+given that, you know how to... So all these properties come
+
+00:13:15.440 --> 00:13:18.839
+out. And then also the candidate generator is the thing that
+
+00:13:18.840 --> 00:13:25.439
+knows how best to search for the terms. So for example, there
+
+00:13:25.440 --> 00:13:29.159
+is a buffer candidate generator. What that does is it just
+
+00:13:29.160 --> 00:13:34.759
+puts all your buffers as search candidates. So obviously
+
+00:13:34.760 --> 00:13:37.879
+you can't, you can't run ripgrep on buffers like you can't you
+
+00:13:37.880 --> 00:13:41.759
+can't do that, you can't run ripgrep on just like yeah just
+
+00:13:41.760 --> 00:13:44.319
+just like buffers that don't have files attached or, for
+
+00:13:44.320 --> 00:13:47.559
+example, maybe there's like an internet search candidate
+
+00:13:47.560 --> 00:13:51.279
+generator, like a web crawler thing. You just imagine it
+
+00:13:51.280 --> 00:13:55.759
+goes to a website, kind of crawls all the links and all that,
+
+00:13:55.760 --> 00:13:58.119
+and then just gets your web pages for the candidates.
+
+00:13:58.120 --> 00:14:01.159
+Obviously, you can't use ripgrep for that either. So, every
+
+00:14:01.160 --> 00:14:04.679
+candidate generator knows how best to search for the terms
+
+00:14:04.680 --> 00:14:08.919
+of what candidate it's generating. So, the file system
+
+00:14:08.920 --> 00:14:12.359
+candidate generator will say, okay, I have a base
+
+00:14:12.360 --> 00:14:17.239
+directory. So, if you ask me, the file system candidate
+
+00:14:17.240 --> 00:14:21.239
+generator, how to get the terms, it knows it's set up to use
+
+00:14:21.240 --> 00:14:25.199
+ripgrep. And so, it runs ripgrep, and so then it goes
+
+00:14:25.200 --> 00:14:29.439
+through, it runs the command, gets the counts, and then
+
+00:14:29.440 --> 00:14:32.359
+store those counts. So, the lines have nothing. At this
+
+00:14:32.360 --> 00:14:35.999
+point, the lines have nothing. There's no notion of lines at
+
+00:14:36.000 --> 00:14:40.559
+all. It's just document, document ID with the amount of
+
+00:14:40.560 --> 00:14:43.839
+times it matched. And that's all you need to run this BM25
+
+00:14:43.840 --> 00:14:47.519
+algorithm. But then when you get the top results, you
+
+00:14:47.520 --> 00:14:51.359
+obviously want to see the lines that matched. And so there's
+
+00:14:51.360 --> 00:14:56.399
+another thing, another method to kind of get the exact
+
+00:14:56.400 --> 00:15:00.559
+thing, to kind of match out the particular lines. And so
+
+00:15:00.560 --> 00:15:03.159
+that's a separate mechanism. And that can be done in Elist,
+
+00:15:03.160 --> 00:15:05.719
+because if you're not displaying, that's kind of a design
+
+00:15:05.720 --> 00:15:09.319
+decision of P-Search, is that it only displays like maybe 10
+
+00:15:09.320 --> 00:15:12.519
+or 20. It doesn't display all the results. So you can have
+
+00:15:12.520 --> 00:15:16.679
+Elist just go crazy with just like highlighting things,
+
+00:15:16.680 --> 00:15:22.719
+picking the best kind of pieces to show. So yeah, that's how
+
+00:15:22.720 --> 00:15:27.359
+that's set up.
+
+00:15:27.360 --> 00:15:38.279
+So, here's perhaps a good moment for me to just jump in and
+
+00:15:38.280 --> 00:15:42.079
+comment that in a minute or so we will break away with the live
+
+00:15:42.080 --> 00:15:47.439
+stream to give people an hour of less content to make sure
+
+00:15:47.440 --> 00:15:50.639
+everybody goes and takes their lunch and break a little bit.
+
+00:15:50.640 --> 00:15:55.039
+But if you would like to keep going in here, Love to love to
+
+00:15:55.040 --> 00:15:59.839
+take as many questions. And, of course, we will include
+
+00:15:59.840 --> 00:16:06.159
+that all when we publish the Q and A. Sounds good. Yeah, I'll go
+
+00:16:06.160 --> 00:16:12.199
+and stick around on the stream as we cut away, as we've got a
+
+00:16:12.200 --> 00:16:15.999
+little video surprise we've all prepared to play, just some
+
+00:16:16.000 --> 00:16:19.359
+comments from an Emacs user dated in 2020 or something like
+
+00:16:19.360 --> 00:16:29.679
+this. I forget the detail. Thank you again so much, Zac, for
+
+00:16:29.680 --> 00:16:30.959
+your fascinating talk.
+
+00:16:30.960 --> 00:16:32.301
+Yeah, so, okay.
+
+NOTE Q: easy filtering with orderless - did this or something like this help or infulce the design of psearch?
+
+00:16:32.302 --> 00:16:33.359
+This makes me really think about the
+
+00:16:33.360 --> 00:16:35.999
+emergent workflows with Denote and easy filtering with
+
+00:16:36.000 --> 00:16:36.639
+orderless.
+
+00:16:36.640 --> 00:16:42.039
+Did this or something like this help influence the design of
+
+00:16:42.040 --> 00:16:47.359
+p-search? Yeah, exactly. So, I mean, yeah, I mean, there's
+
+00:16:47.360 --> 00:16:49.919
+just so many different searches. Like, it's just kind of
+
+00:16:49.920 --> 00:16:52.519
+mind-boggling. Like, you could search for whatever you want
+
+00:16:52.520 --> 00:16:54.599
+on your computer. Like, there's just so much, like, you
+
+00:16:54.600 --> 00:17:01.199
+can't, yeah, you can't just like, you can't just like hard
+
+00:17:01.200 --> 00:17:04.159
+code any of these things. It's all malleable. Like maybe
+
+00:17:04.160 --> 00:17:09.279
+somebody wants to search these directories. And so, yeah,
+
+00:17:09.280 --> 00:17:10.639
+like
+
+00:17:10.640 --> 00:17:18.399
+exactly like that use case of having a directory of files
+
+00:17:18.400 --> 00:17:18.959
+where
+
+00:17:18.960 --> 00:17:25.919
+they contain your personal knowledge management system.
+
+00:17:25.920 --> 00:17:33.479
+Yeah, that use case definitely was at the top of my mind.
+
+00:17:33.480 --> 00:17:35.879
+Let's see.
+
+00:17:35.880 --> 00:17:56.959
+Let's see, so Git covers the multiple names thing itself.
+
+NOTE Q: Notmuch with the p-search UI
+
+00:17:56.960 --> 00:18:00.359
+Okay, yeah,
+
+00:18:00.360 --> 00:18:09.599
+so something about notmuch with p-search UI. Actually,
+
+00:18:09.600 --> 00:18:16.399
+interestingly, I think notmuch is, I haven't used it
+
+00:18:16.400 --> 00:18:22.759
+myself, but that's the, email something about yeah so i mean
+
+00:18:22.760 --> 00:18:25.679
+this is like these things are just like these these kind of
+
+00:18:25.680 --> 00:18:30.479
+extensions could kind of go go forever but one thing i
+
+00:18:30.480 --> 00:18:33.369
+thought about is like i use mu4e for email
+
+00:18:33.370 --> 00:18:41.119
+and that uses a full-fledged index. And so having
+
+00:18:41.120 --> 00:18:44.879
+some method to kind of reach into these different systems
+
+00:18:44.880 --> 00:18:47.938
+and kind of be kind of like a front end for this.
+
+00:18:47.939 --> 00:18:52.000
+Another thing is maybe SQL database.
+
+00:18:52.001 --> 00:18:55.823
+You can create a candidate generator from a SQLite query
+
+00:18:55.824 --> 00:19:01.919
+and then... yeah...
+
+00:19:02.583 --> 00:19:05.519
+I've had tons of ideas of different things you could
+
+00:19:05.520 --> 00:19:09.559
+incorporate into the system. Slowly,
+
+00:19:09.560 --> 00:19:13.599
+they're being implemented. Just recently, I implemented
+
+NOTE Info
+
+00:19:13.600 --> 00:19:17.039
+an info file candidate generator. So it lists out all the
+
+00:19:17.040 --> 00:19:21.559
+info files, and then it creates a candidate for each of the
+
+00:19:21.560 --> 00:19:26.759
+info nodes. So it turns out, yeah, I mean, it works pretty, I
+
+00:19:26.760 --> 00:19:32.559
+mean, just as well as Google. So I'm up for my own testing.
+
+00:19:32.560 --> 00:19:39.999
+Let's see, you can search a buffer using ripgrep feeding in
+
+00:19:40.000 --> 00:19:44.759
+as standard in to the ripgrep process, can't you? Yep, yeah,
+
+00:19:44.760 --> 00:19:50.039
+you can definitely search a buffer that way. So, yeah, I
+
+00:19:50.040 --> 00:19:56.359
+mean, based off of I mean, if this, yeah, so one thing that
+
+00:19:56.360 --> 00:19:59.039
+came up is that the system wants, I mean, I wanted the system
+
+00:19:59.040 --> 00:20:03.559
+to be able to search a lot of different things. And so it came
+
+00:20:03.560 --> 00:20:05.999
+up that I had, you know, implementing,
+
+00:20:06.000 --> 00:20:10.159
+doing these search things, having an Elist
+
+00:20:10.160 --> 00:20:13.079
+implementation, despite it being slow, would be
+
+00:20:13.080 --> 00:20:17.399
+necessary. So like anything that isn't represented as a
+
+00:20:17.400 --> 00:20:21.639
+file, Elisp, there's a mechanism in p-search to search for
+
+00:20:21.640 --> 00:20:23.319
+it.
+
+00:20:23.320 --> 00:20:29.719
+So, yeah, so having that redundancy kind of lets you get into
+
+00:20:29.720 --> 00:20:32.799
+the, you know, using kind of ripgrep for the big scale
+
+00:20:32.800 --> 00:20:37.759
+things. But then when you get to the individual file, you
+
+00:20:37.760 --> 00:20:40.999
+know, just going back to Elisp to kind of get the finer
+
+00:20:41.000 --> 00:20:47.199
+details seems to, you know, seems to end up working pretty
+
+00:20:47.200 --> 00:21:04.239
+well.
+
+00:21:04.240 --> 00:21:27.399
+Thank you all for listening. Yeah, sounds like we're about
+
+00:21:27.400 --> 00:21:31.279
+out of questions. Hi, Zacc. I have a question or still a
+
+00:21:31.280 --> 00:21:34.119
+question. I just want to thank everybody one more time for
+
+00:21:34.120 --> 00:21:37.719
+their participation, especially you for speaking, Zack. I
+
+00:21:37.720 --> 00:21:41.239
+look forward to playing with p-search myself. Thank you.
+
+00:21:41.240 --> 00:21:44.039
+Yeah, there might be one last question. Is there someone?
+
+00:21:44.040 --> 00:21:48.519
+Yes, there is. I don't know if you can understand me, but
+
+00:21:48.520 --> 00:21:50.359
+thank you for making this lovely thing
+
+00:21:50.360 --> 00:21:57.919
+I feel inspired to try it out and I'm thinking about how to
+
+00:21:57.920 --> 00:22:04.199
+integrate it because it sounds modular and nicely thought
+
+00:22:04.200 --> 00:22:09.799
+out. One small question. Have you thought about Project L
+
+00:22:09.800 --> 00:22:13.719
+integration? And then I have a little bigger question about
+
+00:22:13.720 --> 00:22:14.879
+the interface.
+
+NOTE project.el integration
+
+00:22:14.880 --> 00:22:20.799
+Yeah, project.el integration, it's used in a couple of ways.
+
+00:22:20.800 --> 00:22:25.719
+It's kind of used to kind of as like kind of like a default.
+
+00:22:25.720 --> 00:22:31.279
+This is the directory I want to search for the default
+
+00:22:31.280 --> 00:22:33.639
+p-search command. It does, yeah, it kind of goes off of
+
+00:22:33.640 --> 00:22:37.119
+project.el. If there is a project, it kind of says, okay, this,
+
+00:22:37.120 --> 00:22:40.319
+I want to search this project. And so it kind of, it used that
+
+00:22:40.320 --> 00:22:46.119
+as a default. So there's that. Because I use the project-grep
+
+00:22:46.120 --> 00:22:50.679
+or git-grep search a lot and maybe this is a better solution to
+
+00:22:50.680 --> 00:22:55.319
+the search and the interface you have right now for the
+
+00:22:55.320 --> 00:22:56.476
+search results.
+
+NOTE Q: How happy are you with the interface?
+
+00:22:56.477 --> 00:22:58.719
+How happy are you with it and have you
+
+00:22:58.720 --> 00:23:02.599
+thought about improving or have you ideas for
+
+00:23:02.600 --> 00:23:06.639
+improvements? Yeah, well actually what you see in the demo
+
+00:23:06.640 --> 00:23:09.199
+in the video isn't... There's actually, there is an
+
+00:23:09.200 --> 00:23:13.959
+improvement in the current code. Basically, what it
+
+00:23:13.960 --> 00:23:17.239
+does is it scans there's the current default as it scans
+
+00:23:17.240 --> 00:23:20.054
+the entire file for all of the searches.
+
+00:23:20.055 --> 00:23:25.959
+It finds the window that that has the highest score. So it kind
+
+00:23:25.960 --> 00:23:29.599
+of goes through entire file and just says... And it kind of finds
+
+00:23:29.600 --> 00:23:33.479
+like the piece of the section of text that has the most
+
+00:23:33.480 --> 00:23:37.919
+matches with the terms that score the best. So it's, I mean,
+
+00:23:37.920 --> 00:23:40.119
+that section is pretty good. I mean, that, so yeah, that,
+
+00:23:40.120 --> 00:23:44.519
+that ends up working pretty well. So I mean, in terms of other
+
+00:23:44.520 --> 00:23:46.879
+UI stuff, there's, there's tons, there's tons more that
+
+00:23:46.880 --> 00:23:50.159
+could be done, like, especially like debug ability or like
+
+00:23:50.160 --> 00:23:53.799
+introspection. Like, so this, this result, like, for
+
+00:23:53.800 --> 00:23:57.119
+example, this result ranks really high. Maybe you don't
+
+00:23:57.120 --> 00:24:01.719
+know why though. It's like, because of this, this text query
+
+00:24:01.720 --> 00:24:04.479
+arrow, was it because of this criteria? I think
+
+00:24:04.480 --> 00:24:09.039
+there's some UI elements that could kind of help the user
+
+00:24:09.040 --> 00:24:12.519
+understand why results are scoring high or low. So that's
+
+00:24:12.520 --> 00:24:15.639
+definitely... And that makes a lot of sense to me. You know, a
+
+00:24:15.640 --> 00:24:19.039
+lot of it is demystifying, like understanding what you're
+
+00:24:19.040 --> 00:24:22.719
+learning better and not just finding the right thing. A lot
+
+00:24:22.720 --> 00:24:26.519
+of it is, you know, kind of exploring your data. I love that.
+
+00:24:26.520 --> 00:24:31.639
+Thanks. Okay. I'm not trying to hurry us through either by
+
+00:24:31.640 --> 00:24:36.599
+any stretch. I would be happy to see this be a conversation.
+
+00:24:36.600 --> 00:24:42.359
+I also want to be considerate of your time. And I also wanted to
+
+00:24:42.360 --> 00:24:45.479
+make a quick shout out to everybody who's been updating and
+
+00:24:45.480 --> 00:24:50.479
+helping us capture the questions and the comments and the
+
+00:24:50.480 --> 00:24:53.639
+etherpad. That's just a big help to the extent that people
+
+00:24:53.640 --> 00:24:57.199
+are jumping in there and you know, revising and extending
+
+00:24:57.200 --> 00:24:59.799
+and just doing the best job we can to capture all the
+
+00:24:59.800 --> 00:25:00.799
+thoughtful remarks.
+
+00:25:00.800 --> 00:25:14.839
+Yeah, thank you, Zac. I'm not too sure what to ask anymore,
+
+00:25:14.840 --> 00:25:20.559
+but yes, would love to try it out now. Yeah, I mean,
+
+00:25:20.560 --> 00:25:22.076
+definitely feel free to...
+
+00:25:22.077 --> 00:25:25.679
+any feedback, here's my mail, or issues...
+
+00:25:25.680 --> 00:25:29.039
+I mean I'm happy to get any any feedback. It's
+
+00:25:29.040 --> 00:25:31.679
+still in the early stages, so still kind of a lot of
+
+00:25:31.680 --> 00:25:35.599
+documentation that needs to be writing. There's a lot.
+
+00:25:35.600 --> 00:25:38.439
+There's a lot on the roadmap, but yeah, I mean, hopefully, I
+
+00:25:38.440 --> 00:25:42.759
+could even publish this to ELPA and have a nice
+
+00:25:42.760 --> 00:25:47.727
+manual so yeah hopefully yeah those come soon. Epic.
+
+00:25:47.728 --> 00:25:50.279
+That sounds great, yes.
+
+NOTE gptel
+
+00:25:50.280 --> 00:25:59.359
+The ability to save your searches kind of reminds me of like
+
+00:25:59.360 --> 00:26:05.119
+the gptel package for the AI, where you can save searches,
+
+00:26:05.120 --> 00:26:10.799
+which makes it feel a lot more different. And yeah, we don't
+
+00:26:10.800 --> 00:26:14.839
+have something for that with search, but yeah, that's a
+
+00:26:14.840 --> 00:26:19.279
+whole different dynamic where it's like, okay, yeah, and
+
+00:26:19.280 --> 00:26:24.679
+makes it a unique tool that is, I guess would be unique to
+
+00:26:24.680 --> 00:26:28.079
+Emacs where you don't see that with like this AI package
+
+00:26:28.080 --> 00:26:31.119
+where the gptel is kind of unique because it's not just throw
+
+00:26:31.120 --> 00:26:37.039
+away. It's how did I get this? How did I search for it? And be an
+
+00:26:37.040 --> 00:26:40.319
+organic search, kind of like the orderless and vertico
+
+00:26:40.320 --> 00:26:43.039
+and...
+
+00:26:43.040 --> 00:26:46.279
+Yeah, that's a good, I mean, that brings me to another thing
+
+00:26:46.280 --> 00:26:48.239
+in that, so,
+
+00:26:48.240 --> 00:26:53.199
+I mean, you could easily...
+
+00:26:53.200 --> 00:26:57.399
+you could create bridges from p-search to these different
+
+00:26:57.400 --> 00:27:01.519
+other packages, like, for example, kind of a RAG search,
+
+00:27:01.520 --> 00:27:04.679
+like there's this RAG, there's this thing called a RAG
+
+00:27:04.680 --> 00:27:06.879
+workflow, which is kind of popular these days. It's like
+
+00:27:06.880 --> 00:27:11.639
+retrieval augmented generation. So, you do a search and
+
+00:27:11.640 --> 00:27:14.199
+then based off the search results you get, then you pass
+
+00:27:14.200 --> 00:27:20.359
+those into LLM. So, the cool thing is that like you could use
+
+00:27:20.360 --> 00:27:25.119
+p-search for the retrieval. And so you could even like, I
+
+00:27:25.120 --> 00:27:28.799
+mean, you could even ask an LM to come up with the search terms
+
+00:27:28.800 --> 00:27:32.079
+and then have it search. There's no
+
+00:27:32.080 --> 00:27:35.439
+programmatical interface now to do this exact workflow.
+
+00:27:35.440 --> 00:27:39.039
+But I mean, there's another kind of direction I'm starting
+
+00:27:39.040 --> 00:27:43.199
+to think about. So like you could have maybe
+
+00:27:43.200 --> 00:27:47.759
+a question answer kind of workflow where it does
+
+00:27:47.760 --> 00:27:51.639
+like an initial search for the terms and then you get the top
+
+00:27:51.640 --> 00:27:57.199
+results and then you can put that through maybe gptel or all
+
+00:27:57.200 --> 00:27:59.759
+these other different systems. So that's, and that seems
+
+00:27:59.760 --> 00:28:01.479
+like a promising thing. And then another thing is like,
+
+NOTE Saving a search
+
+00:28:01.480 --> 00:28:10.594
+well, you mentioned the ability to save a search.
+
+00:28:10.595 --> 00:28:11.479
+One thing I've noticed
+
+00:28:11.480 --> 00:28:15.359
+kind of like with the DevOps workflows is, I'll write a
+
+00:28:15.360 --> 00:28:20.519
+CLI command that I do, or like a calculator command. Then I end
+
+00:28:20.520 --> 00:28:23.999
+up in the org mode document, write what I wrote, had the
+
+00:28:24.000 --> 00:28:26.943
+results in there, and then I'll go back to that.
+
+00:28:26.944 --> 00:28:31.966
+It's like, oh, this is why, this is that calculation I did
+
+00:28:31.967 --> 00:28:34.007
+and this is why I did it.
+
+00:28:34.008 --> 00:28:36.959
+I'll have run the same tool three different
+
+00:28:36.960 --> 00:28:40.519
+times to get three different answers, if it was like a
+
+00:28:40.520 --> 00:28:41.799
+calculator, for example.
+
+NOTE Workflows
+
+00:28:41.800 --> 00:28:49.319
+But yeah, that's a very unique feature that isn't seen and
+
+00:28:49.320 --> 00:28:53.959
+will make me look at it and see about integrating it into my
+
+00:28:53.960 --> 00:28:59.079
+workflow. Yeah, I think you get on some interesting, you
+
+00:28:59.080 --> 00:29:03.159
+know, kind of what makes Emacs really unique there and how
+
+00:29:03.160 --> 00:29:07.399
+to... interesting kind of ways to exploit
+
+00:29:07.400 --> 00:29:12.439
+Emacs to learn in the problem. I'm seeing a number of
+
+00:29:12.440 --> 00:29:15.799
+ways you're getting at that. For example, if I think about
+
+00:29:15.800 --> 00:29:18.999
+like an automation workflow, and there's just a million
+
+00:29:19.000 --> 00:29:22.719
+we'll say, assumptions that are baked into a search
+
+00:29:22.720 --> 00:29:26.719
+product, so to speak, like represented by a Google search or
+
+00:29:26.720 --> 00:29:31.639
+Bing or what have you. And then as I unpack that and repack it
+
+00:29:31.640 --> 00:29:35.159
+from an Emacs workflow standpoint, thinking about, well,
+
+00:29:35.160 --> 00:29:39.079
+first of all, what is the yak I'm shaving? And then also, what
+
+00:29:39.080 --> 00:29:43.759
+does doing it right mean? How would I reuse this? How would I
+
+00:29:43.760 --> 00:29:47.679
+make the code accessible to others for their own purposes in
+
+00:29:47.680 --> 00:29:52.439
+a free software world kind of way? and all of the different
+
+00:29:52.440 --> 00:29:57.479
+sort of say like orthogonal headspacey kind of things,
+
+00:29:57.480 --> 00:30:00.079
+right? Emacs brings a lot to the table from a search
+
+00:30:00.080 --> 00:30:03.719
+standpoint because I'm going to want to think about. I'm
+
+00:30:03.720 --> 00:30:07.799
+going to want to think about where does the UI come in? Where
+
+00:30:07.800 --> 00:30:11.399
+might the user want to get involved interactively? Where
+
+00:30:11.400 --> 00:30:14.359
+might the user want to get involved declaratively with
+
+00:30:14.360 --> 00:30:16.919
+their configuration, perhaps based on the particular
+
+00:30:16.920 --> 00:30:21.359
+environment where this Emacs is running? And there's just a
+
+00:30:21.360 --> 00:30:24.879
+lot of what Emacs users think about that really applies.
+
+00:30:24.880 --> 00:30:28.359
+I'll use the word again, orthogonally across all my many
+
+00:30:28.360 --> 00:30:33.239
+workflows as an Emacs user. You know, the search is just such
+
+00:30:33.240 --> 00:30:38.519
+a big word. Yeah, that's actually, this exact point I was
+
+00:30:38.520 --> 00:30:43.159
+thinking about with this. It's like, I mean, it seems kind of
+
+00:30:43.160 --> 00:30:46.319
+obvious, like just like using grep or something, just like to
+
+00:30:46.320 --> 00:30:49.359
+get search counts, like, okay, you can just run the command,
+
+00:30:49.360 --> 00:30:51.439
+get the term counts and you could just run it through a
+
+00:30:51.440 --> 00:30:55.959
+relatively simple algorithm. to get your search score. So
+
+00:30:55.960 --> 00:31:01.759
+if it's this easy, though, why don't we see this in other... And
+
+00:31:01.760 --> 00:31:06.919
+the results are actually surprisingly good. So why don't we
+
+00:31:06.920 --> 00:31:10.559
+see this anywhere, really? And it occurred to me that just
+
+00:31:10.560 --> 00:31:16.399
+the amount of configuration... The amount of setup you have to
+
+00:31:16.400 --> 00:31:20.039
+do to get it right.
+
+00:31:20.040 --> 00:31:24.599
+It's above this threshold that you need something like
+
+00:31:24.600 --> 00:31:27.856
+Emacs to kind of get pushed through that configuration.
+
+NOTE Transient and configuration
+
+00:31:27.857 --> 00:31:30.799
+So for example, that's why I rely heavily on transient
+
+00:31:30.800 --> 00:31:34.119
+to set up the system. 'Cause like, if you want to get good
+
+00:31:34.120 --> 00:31:36.079
+search results, you're going to have to configure a lot
+
+00:31:36.080 --> 00:31:38.519
+of stuff. I want this directory. I want this, I don't
+
+00:31:38.520 --> 00:31:41.559
+want this directory. I want these search terms, you know,
+
+00:31:41.560 --> 00:31:48.159
+there's a lot to set up. And in most programs, I mean, they
+
+00:31:48.160 --> 00:31:52.079
+don't have an easy way to, I mean, they'll often try and try to
+
+00:31:52.080 --> 00:31:55.039
+hide all this complexity. Like they say, okay, our users
+
+00:31:55.040 --> 00:31:59.199
+too, you know, we don't want to, you know, we don't wanna, you
+
+00:31:59.200 --> 00:32:02.719
+know, make our users, we don't wanna scare our users with
+
+00:32:02.720 --> 00:32:06.879
+like, complicated search engine configuration. So we're
+
+00:32:06.880 --> 00:32:09.079
+just going to do it all in the background and we're just not
+
+00:32:09.080 --> 00:32:12.599
+going to let the user even know that it's happening. I mean,
+
+00:32:12.600 --> 00:32:15.119
+that's the third time you've made me laugh out loud. Sorry
+
+00:32:15.120 --> 00:32:17.879
+for interrupting you, but yeah, you're just spot on there.
+
+00:32:17.880 --> 00:32:22.999
+You're some people's users. Am I right? like, you know, and
+
+00:32:23.000 --> 00:32:25.390
+also some people's workflows.
+
+NOTE Problem space
+
+00:32:25.391 --> 00:32:27.719
+And, you know, another case
+
+00:32:27.720 --> 00:32:30.799
+where just like, if you're thinking about Emacs, you either
+
+00:32:30.800 --> 00:32:33.279
+have to pick a tunnel to dive into and be like, no, this is
+
+00:32:33.280 --> 00:32:37.759
+going to be right for my work, or your problem space is never
+
+00:32:37.760 --> 00:32:40.879
+ending in terms of discovering the ways other people are
+
+00:32:40.880 --> 00:32:45.839
+using Emacs and how that breaks your feature. and how that
+
+00:32:45.840 --> 00:32:49.679
+breaks your conceptualization of the problem space,
+
+00:32:49.680 --> 00:32:53.559
+right? Or you just have to get so narrowed down that can
+
+00:32:53.560 --> 00:32:57.119
+actually be hard to find people that are quite understand
+
+00:32:57.120 --> 00:33:00.279
+you, right? You get into the particular, well, it solves
+
+00:33:00.280 --> 00:33:03.039
+these three problems for me. Well, what are these three
+
+00:33:03.040 --> 00:33:08.639
+problems again? And this is a month to unpack. You have Emacs
+
+00:33:08.640 --> 00:33:12.639
+and I don't know, it's like you got a lot of, they all agree is
+
+00:33:12.640 --> 00:33:16.559
+like we're going to use elisp to set variables every emacs
+
+00:33:16.560 --> 00:33:21.199
+package is going to do that we're going to use elisp and have a
+
+00:33:21.200 --> 00:33:25.479
+search in place to put our documentation and like it does
+
+00:33:25.480 --> 00:33:32.559
+also eliminate a lot of confusion and gives a lot of
+
+00:33:32.560 --> 00:33:37.719
+expectations of what they want. One thing that I'm
+
+00:33:37.720 --> 00:33:39.855
+surprised I haven't seen elsewhere is you have the
+
+NOTE consult-omni
+
+00:33:39.856 --> 00:33:44.239
+consult-omni package which allows you to search multiple websites
+
+00:33:44.240 --> 00:33:49.799
+simultaneously for multiple web search engines. and put
+
+00:33:49.800 --> 00:33:52.799
+them in one thing and it's like, and then you use orderless.
+
+NOTE orderless
+
+00:33:52.800 --> 00:33:55.159
+Why would you use orderless? Because that's what you
+
+00:33:55.160 --> 00:33:57.799
+configured and you know exactly what you wanna use and you
+
+00:33:57.800 --> 00:34:01.679
+use the same font and your same mini buffer and you use all
+
+00:34:01.680 --> 00:34:04.079
+that existing configuration because, well, you're an
+
+00:34:04.080 --> 00:34:07.599
+Emacs user or like you're a command line user. You know how
+
+00:34:07.600 --> 00:34:11.559
+you want these applications to go. You don't want them to be
+
+00:34:11.560 --> 00:34:17.399
+reinvented the wheel 1600 times in 1,600 different ways,
+
+00:34:17.400 --> 00:34:23.079
+you want it to use your mini buffer, your font, your et
+
+00:34:23.080 --> 00:34:28.159
+cetera, et cetera, et cetera. But I haven't
+
+00:34:28.160 --> 00:34:32.479
+seen a website where I can search multiple websites at the
+
+00:34:32.480 --> 00:34:35.159
+same time in something like Emacs before. And it's like,
+
+00:34:35.160 --> 00:34:38.319
+yeah, with my sorting algorithm,
+
+00:34:38.320 --> 00:34:49.359
+Yeah, exactly. Yeah. Yeah. Yeah. I mean, just setting the
+
+00:34:49.360 --> 00:34:57.079
+bar for configuration and set up just like, yeah, you have to
+
+00:34:57.080 --> 00:35:02.839
+have a list. Yeah. I mean, it, it does, obviously it's not,
+
+00:35:02.840 --> 00:35:05.839
+it's not most beginner beginner friendly, but I mean, it,
+
+00:35:05.840 --> 00:35:10.319
+yeah, it definitely widens the amount of the solution space
+
+00:35:10.320 --> 00:35:14.679
+you can have to such problems. Oh my gosh, you used the word
+
+00:35:14.680 --> 00:35:18.759
+solution space. I love it. But on the flip side, it's like,
+
+00:35:18.760 --> 00:35:25.119
+why does Emacs get this consult-omni package? Or let's see,
+
+00:35:25.120 --> 00:35:30.719
+you have elfeed-youtube where it will put a flowing
+
+00:35:30.720 --> 00:35:34.479
+transcript on a YouTube video or you got your package. Why
+
+00:35:34.480 --> 00:35:39.879
+does it get all these applications? And I don't see
+
+00:35:39.880 --> 00:35:45.679
+applications like this as much outside of Emacs. So there's
+
+00:35:45.680 --> 00:35:46.267
+a way that it just makes it easier.
+
+NOTE User interface
+
+00:35:46.268 --> 00:35:47.479
+It's because user
+
+00:35:47.480 --> 00:35:51.439
+interface is the, you know, it's the economy stupid of
+
+00:35:51.440 --> 00:35:58.119
+technology, right? If you grab people by the UX, you can sell
+
+00:35:58.120 --> 00:36:01.679
+a million of any product that solves problem that I didn't
+
+00:36:01.680 --> 00:36:04.639
+think technology could solve, or that I didn't think I had
+
+00:36:04.640 --> 00:36:08.319
+the patience to use technology to solve, which is a lot of
+
+00:36:08.320 --> 00:36:12.159
+times what it comes down to. And here exactly is the, you
+
+00:36:12.160 --> 00:36:16.799
+know, the the Emacs sort of conundrum, right? How much time
+
+00:36:16.800 --> 00:36:20.759
+should I spend today updating my Emacs so that tomorrow I can
+
+00:36:20.760 --> 00:36:26.319
+just work more, right? And, you know, I love that little
+
+00:36:26.320 --> 00:36:29.839
+graph of the Emacs learning curve, right? Where it's this
+
+00:36:29.840 --> 00:36:33.399
+concentric, it becomes this concentric spiral, right? The
+
+00:36:33.400 --> 00:36:38.759
+Vim learning curve is like a ladder, right? Or, you know, and
+
+00:36:38.760 --> 00:36:44.119
+And the nano learning curve is like just a flat plane, you
+
+00:36:44.120 --> 00:36:49.279
+know, or a ladder, a vertical ladder or a horizontal ladder.
+
+00:36:49.280 --> 00:36:56.719
+There we go. And the Emacs learning curve is this kind of
+
+00:36:56.720 --> 00:36:59.799
+straight up line until it curves back on itself and
+
+00:36:59.800 --> 00:37:03.079
+eventually spirals. And the more you learn, the harder it is
+
+00:37:03.080 --> 00:37:05.839
+to learn the next thing. And are you really moving forward at
+
+00:37:05.840 --> 00:37:09.039
+all? Like, it just works for me. What a great analogy. And
+
+00:37:09.040 --> 00:37:15.279
+that's my answer, I think. Yeah. You know, it's because
+
+00:37:15.280 --> 00:37:20.199
+we... The spiral is great. Sorry. There are each of these
+
+00:37:20.200 --> 00:37:26.639
+weird little packages that some of us, you know, it solves
+
+00:37:26.640 --> 00:37:29.279
+that one problem and lets us get back to work. And for others,
+
+00:37:29.280 --> 00:37:32.439
+it makes us go, gosh, now that makes me rethink a whole bunch
+
+00:37:32.440 --> 00:37:35.239
+of things because there's... Like I don't even know what
+
+00:37:35.240 --> 00:37:37.719
+you're talking about with some of your conceptualizations
+
+00:37:37.720 --> 00:37:41.039
+of UI. Maybe it comes from Visual Studio, and I've not
+
+00:37:41.040 --> 00:37:44.679
+used that or something. So for you, it's a perfectly normal UX
+
+00:37:44.680 --> 00:37:48.799
+paradigm that you kind of lean on for others. It's like you
+
+00:37:48.800 --> 00:37:51.999
+know occupying some screen space and I don't know what the
+
+00:37:52.000 --> 00:37:57.759
+gadgets do and when I open them up... They're thinking
+
+00:37:57.760 --> 00:38:00.999
+about... they have... they imply their own
+
+00:38:01.000 --> 00:38:03.639
+abstractions let's say logically against a programming
+
+00:38:03.640 --> 00:38:06.999
+language. This would be tree sitter, right. If i'm not used to
+
+00:38:07.000 --> 00:38:11.719
+thinking in terms of an abstract abstract syntax tree, some
+
+00:38:11.720 --> 00:38:14.799
+of the concepts just aren't as natural for me. If i'm used to
+
+00:38:14.800 --> 00:38:19.039
+like emacs at a more fundamental level is, or the old modes
+
+00:38:19.040 --> 00:38:23.479
+right, we're used to them thinking in terms of progressing
+
+00:38:23.480 --> 00:38:26.959
+forward through some text, managing a stack of markers into
+
+00:38:26.960 --> 00:38:29.239
+the text, right? It's a different paradigm. The world
+
+00:38:29.240 --> 00:38:33.559
+changes. Emacs kind of supports it all. That's why all the
+
+00:38:33.560 --> 00:38:37.039
+apps are built there. That's why when you're talking about
+
+00:38:37.040 --> 00:38:40.759
+that spiral. what that hints at is that this is really just a
+
+00:38:40.760 --> 00:38:44.239
+different algorithm that you're transferring out that
+
+00:38:44.240 --> 00:38:47.319
+makes some things a lot easier and some things a lot harder.
+
+00:38:47.320 --> 00:38:51.719
+That's why I was bringing in those three packages, because
+
+00:38:51.720 --> 00:38:59.708
+in some way it's making these search terms with reusable...
+
+00:38:59.709 --> 00:39:07.083
+Let's see... saveable buffers or interactive buffers in a way
+
+00:39:07.084 --> 00:39:10.359
+that... in a way, that is bigger than what I think it should have,
+
+00:39:10.360 --> 00:39:15.479
+especially in comparison to like how many people use
+
+00:39:15.480 --> 00:39:20.319
+YouTube, but I don't see very many YouTube apps that will
+
+00:39:20.320 --> 00:39:26.279
+show Rolling subtitle list that you can click on to move up
+
+00:39:26.280 --> 00:39:27.315
+and down the video
+
+00:39:27.316 --> 00:39:30.139
+even though YouTube's been around for years.
+
+00:39:30.140 --> 00:39:33.359
+Why does Emacs have a very good implementation
+
+00:39:33.360 --> 00:39:37.159
+that was duct taped together? So before I let you respond to
+
+00:39:37.160 --> 00:39:40.439
+that, Zac, let me just say we're coming up on eating up a
+
+00:39:40.440 --> 00:39:43.879
+whole half hour of your lunchtime and thank you for giving us
+
+00:39:43.880 --> 00:39:47.879
+that extra time. But let me just say, let's, you know, if I
+
+00:39:47.880 --> 00:39:50.879
+could ask you to take like up to another five minutes and then
+
+00:39:50.880 --> 00:39:53.759
+I'll try to kick us off here and make sure everybody does
+
+00:39:53.760 --> 00:39:54.999
+remember to eat.
+
+00:39:55.000 --> 00:40:04.119
+Yeah, so yeah, it looks like there's one other question. So
+
+NOTE Q: Do you think the Emacs being kinda slow will get in the way of being able to run a lot of scoring algorithms?
+
+00:40:04.120 --> 00:40:06.679
+yeah, do you think Emacs being kind of slow will get in the way
+
+00:40:06.680 --> 00:40:11.319
+of being able to run a lot of scoring algorithms? So this is
+
+00:40:11.320 --> 00:40:15.039
+actually a thought I had. Yeah, Emacs, because the code
+
+00:40:15.040 --> 00:40:19.919
+currently kind of does, I mean, it kind of does, it's kind of
+
+00:40:19.920 --> 00:40:24.039
+dumb in a lot of places. a lot of times it just, it does just go
+
+00:40:24.040 --> 00:40:27.599
+through all the files and then just compute some score for
+
+00:40:27.600 --> 00:40:30.679
+them. But I'm surprised that it's, that part actually isn't
+
+00:40:30.680 --> 00:40:34.799
+that slow. Like, like it turns out like, okay, like if you
+
+00:40:34.800 --> 00:40:40.759
+take, for example, Emacs, like the Emacs directory or the
+
+00:40:40.760 --> 00:40:44.879
+Emacs Git repository, or maybe another big Git repository,
+
+00:40:44.880 --> 00:40:49.079
+like you could have an Elisp function enumerate those, and
+
+00:40:49.080 --> 00:40:52.599
+multiply some numbers, maybe multiply 10 numbers
+
+00:40:52.600 --> 00:41:01.039
+together. And that isn't that slow. And that's the bulk of
+
+00:41:01.040 --> 00:41:05.799
+what the only thing that Elisp has to do is just like multiply
+
+00:41:05.800 --> 00:41:11.599
+these numbers. Obviously, if you have to resort to Elisp to
+
+00:41:11.600 --> 00:41:15.519
+search all the files and you have like 10 or 100,000 files,
+
+00:41:15.520 --> 00:41:18.759
+then yeah, Emacs will be slow
+
+00:41:18.760 --> 00:41:23.959
+to manually search, like if you're not using ripgrep or any
+
+00:41:23.960 --> 00:41:26.839
+faster tool and you have, and you have millions of files and
+
+00:41:26.840 --> 00:41:30.959
+yeah, it will be slow. But what I noticed though is like, for
+
+00:41:30.960 --> 00:41:35.119
+example, let's say you want to search for, let's say you want
+
+00:41:35.120 --> 00:41:40.199
+to search like info directory, like info files for Emacs and
+
+00:41:40.200 --> 00:41:46.039
+the Emacs info file and the Elisp info file. So those are two
+
+00:41:46.040 --> 00:41:49.279
+decently sized kind of books, kind of like reference
+
+00:41:49.280 --> 00:41:50.199
+material on Emacs.
+
+00:41:50.200 --> 00:41:55.999
+Relying on Elisp to search both of those together, it's
+
+00:41:56.000 --> 00:41:58.079
+actually pretty, it's actually like almost instant. I
+
+00:41:58.080 --> 00:42:00.639
+mean, it's not slow enough. So I think that's
+
+00:42:00.640 --> 00:42:03.679
+another thing is like scale. Like I think on, on kind of like
+
+00:42:03.680 --> 00:42:09.679
+individual human level scales, I think Elisp can be good
+
+00:42:09.680 --> 00:42:14.359
+enough. if you're going on the scale of like enterprise,
+
+00:42:14.360 --> 00:42:18.399
+like all the repositories, all the Git repositories of an
+
+00:42:18.400 --> 00:42:21.199
+enterprise, then yeah, that scale might, it might, it might
+
+00:42:21.200 --> 00:42:26.039
+be too much. But I think on, on the scale of what most
+
+00:42:26.040 --> 00:42:30.519
+individuals have to deal with on a daily basis, like for
+
+00:42:30.520 --> 00:42:34.719
+example, maybe somebody has some, yeah, I mean, I think it
+
+00:42:34.720 --> 00:42:36.959
+should, I think it hopefully should be enough. And if not,
+
+00:42:36.960 --> 00:42:39.639
+there's always room for optimizations.
+
+00:42:39.640 --> 00:42:55.999
+Yeah, so so I'll redirect you a little bit because based on a
+
+00:42:56.000 --> 00:43:00.279
+couple of things I got into, you know, or if you want to be done
+
+00:43:00.280 --> 00:43:04.759
+be like, you know, give me the hi sign by all means and we can
+
+00:43:04.760 --> 00:43:08.639
+we can shut up shop, but I'm curious, you know, what are what
+
+NOTE Boundary conditions
+
+00:43:08.640 --> 00:43:13.079
+are your boundary conditions? What what tends to cause you
+
+00:43:13.080 --> 00:43:16.679
+to to to write something more complicated and what what
+
+00:43:16.680 --> 00:43:20.959
+causes you to? So to work around it with more complex
+
+00:43:20.960 --> 00:43:23.559
+workflow in Emacs terms, like where do you break out the big
+
+00:43:23.560 --> 00:43:27.919
+guns? Just thinking about, like search, we talked about,
+
+00:43:27.920 --> 00:43:31.439
+maybe that's too abstract a question, but just general
+
+00:43:31.440 --> 00:43:36.679
+usage. Search is an example where almost all of us have
+
+00:43:36.680 --> 00:43:39.599
+probably written something to go find something, right?
+
+00:43:39.600 --> 00:43:43.519
+Yeah, I mean, this is a good question. I'm actually of the
+
+00:43:43.520 --> 00:43:51.999
+idea, at my work, for example, I tried to get rid of all, I
+
+00:43:52.000 --> 00:43:54.879
+mean, this is probably a typical Emacs user thing, but like,
+
+00:43:54.880 --> 00:43:59.319
+I mean, I think that just like getting, just like having
+
+00:43:59.320 --> 00:44:02.559
+Emacs expand to whatever it can get into and whatever it can
+
+00:44:02.560 --> 00:44:08.839
+automate, like any task, any, like, just like the more you
+
+00:44:08.840 --> 00:44:13.719
+can kind of get that coded, I actually find that kind of like,
+
+00:44:13.720 --> 00:44:20.439
+I mean, it is kind of like a meme. Like, yeah, I have to
+
+00:44:20.440 --> 00:44:24.199
+configure my Emacs until it's fun, and then I'll do it. But I
+
+00:44:24.200 --> 00:44:27.959
+actually I actually think that maybe for like a normal
+
+00:44:27.960 --> 00:44:31.999
+software developer, if you invest, if you invest, maybe,
+
+00:44:32.000 --> 00:44:34.839
+maybe you have like some spare time after you've done all
+
+00:44:34.840 --> 00:44:39.679
+your tasks, if you invest all that time in, in just like kind
+
+00:44:39.680 --> 00:44:42.359
+of going through all the workflows, all the, you know, just,
+
+00:44:42.360 --> 00:44:46.279
+just getting all of that in, in Emacs, then I think that that,
+
+00:44:46.280 --> 00:44:52.039
+that acts as kind of like a, it kind of like a productivity
+
+00:44:52.040 --> 00:44:56.759
+multiplier. And so. So I found that, I mean, I found to not
+
+00:44:56.760 --> 00:44:59.519
+have those boundaries. I mean, obviously there's things
+
+00:44:59.520 --> 00:45:04.599
+you can't do, like web-based things. I mean, that's a hard
+
+00:45:04.600 --> 00:45:10.199
+boundary, but that's more because... Yeah, there's really
+
+00:45:10.200 --> 00:45:13.719
+not much to do about that. Nobody's written a front-end
+
+00:45:13.720 --> 00:45:18.759
+engine, and too much of the forebrain is occupied with
+
+00:45:18.760 --> 00:45:22.559
+things that should happen on the "end-users
+
+00:45:22.560 --> 00:45:29.839
+infrastructure", so to speak. So with like 40 seconds left, I
+
+00:45:29.840 --> 00:45:33.519
+was going to say a minute, but I guess, any final thoughts?
+
+00:45:33.520 --> 00:45:40.159
+Yeah, I mean, just thank you for listening, and And thank you
+
+00:45:40.160 --> 00:45:45.559
+for putting this on. It's a really nice conference to have,
+
+00:45:45.560 --> 00:45:50.679
+and I'm glad things like this exist. So thank you. Yeah, it's
+
+00:45:50.680 --> 00:45:54.639
+you and the other folks on this call. Thank you so much,
+
+00:45:54.640 --> 00:45:58.639
+PlasmaStrike, and all the rest of you for hopping on the BBB
+
+00:45:58.640 --> 00:46:03.119
+and having such an interesting discussion. Keeps it really
+
+00:46:03.120 --> 00:46:08.239
+fun for us as organizers. And thanks, everybody, for being
+
+00:46:08.240 --> 00:46:21.320
+here.
diff --git a/2024/captions/emacsconf-2024-p-search--psearch-a-local-search-engine-in-emacs--zac-romero--main--chapters.vtt b/2024/captions/emacsconf-2024-p-search--psearch-a-local-search-engine-in-emacs--zac-romero--main--chapters.vtt
new file mode 100644
index 00000000..3c81657f
--- /dev/null
+++ b/2024/captions/emacsconf-2024-p-search--psearch-a-local-search-engine-in-emacs--zac-romero--main--chapters.vtt
@@ -0,0 +1,38 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:01:24.199
+Search in daily workflows
+
+00:01:24.200 --> 00:03:58.232
+Problems with editor search tools
+
+00:03:58.233 --> 00:04:34.295
+Information retrieval
+
+00:04:34.296 --> 00:06:21.756
+Search engine in Emacs: the index
+
+00:06:21.757 --> 00:06:43.552
+Search engine in Emacs: Ranking
+
+00:06:43.553 --> 00:07:41.159
+tf-idf: term-frequency x inverse-document-frequency
+
+00:07:41.160 --> 00:08:41.199
+BM25
+
+00:08:41.200 --> 00:10:41.456
+Searching with p-search
+
+00:10:41.457 --> 00:16:06.770
+Flight AF 447
+
+00:16:06.771 --> 00:20:40.404
+Modifying priors
+
+00:20:40.405 --> 00:21:38.559
+Importance
+
+00:21:38.560 --> 00:22:42.240
+Complement or inverse
diff --git a/2024/captions/emacsconf-2024-p-search--psearch-a-local-search-engine-in-emacs--zac-romero--main.vtt b/2024/captions/emacsconf-2024-p-search--psearch-a-local-search-engine-in-emacs--zac-romero--main.vtt
new file mode 100644
index 00000000..111f2728
--- /dev/null
+++ b/2024/captions/emacsconf-2024-p-search--psearch-a-local-search-engine-in-emacs--zac-romero--main.vtt
@@ -0,0 +1,970 @@
+WEBVTT captioned by sachac
+
+NOTE Search in daily workflows
+
+00:00:00.000 --> 00:00:03.399
+Hello, my name is Zachary Romero, and today I'll be going
+
+00:00:03.400 --> 00:00:08.115
+over p-search, a local search engine in Emacs.
+
+00:00:08.116 --> 00:00:12.398
+Search these days is everywhere in software, from text editors,
+
+00:00:12.399 --> 00:00:18.359
+to IDEs, to most online websites. These tools tend to fall
+
+00:00:18.360 --> 00:00:25.839
+into one of two categories. One are tools that run locally,
+
+00:00:25.840 --> 00:00:31.279
+and work by matching string to text. The most common
+
+00:00:31.280 --> 00:00:35.639
+example of this is grep. In Emacs, there are a lot of
+
+00:00:35.640 --> 00:00:38.959
+extensions which provide functionality on top of these
+
+00:00:38.960 --> 00:00:42.388
+tools, such as projectile-grep, deadgrep,
+
+00:00:42.389 --> 00:00:46.849
+consult-ripgrep. Most editors have some sort of
+
+00:00:46.850 --> 00:00:52.691
+search current project feature. Most of the time,
+
+00:00:52.692 --> 00:00:56.393
+some of these tools have features like regular expressions,
+
+00:00:56.394 --> 00:00:59.215
+or you can specify file extension,
+
+00:00:59.216 --> 00:01:01.636
+or a directory you want to search in,
+
+00:01:01.637 --> 00:01:03.957
+but features are pretty limited.
+
+00:01:03.958 --> 00:01:07.919
+The other kind of search we use are usually hosted online,
+
+00:01:07.920 --> 00:01:12.302
+and they usually search a vast corpus of data.
+
+00:01:12.303 --> 00:01:15.639
+These are usually proprietary
+
+00:01:15.640 --> 00:01:18.765
+online services such as Google, GitHub,
+
+00:01:18.766 --> 00:01:24.199
+SourceGraph for code.
+
+NOTE Problems with editor search tools
+
+00:01:24.200 --> 00:01:28.839
+The kind of search feature that editors
+
+00:01:28.840 --> 00:01:36.719
+usually have have a lot of downsides to them. For one, a lot
+
+00:01:36.720 --> 00:01:38.839
+of times you don't know the exact search string you're
+
+00:01:38.840 --> 00:01:42.783
+searching for. Some complicated term like this
+
+00:01:42.784 --> 00:01:46.860
+high volume demand partner, you know, do you know if...
+
+00:01:46.861 --> 00:01:49.708
+Are some words abbreviated, is it capitalized,
+
+00:01:49.709 --> 00:01:53.089
+is it in kebab case, camel case, snake case?
+
+00:01:53.090 --> 00:01:57.571
+You often have to search all these variations.
+
+00:01:57.572 --> 00:02:05.434
+Another downside is that the search results returned
+
+00:02:05.435 --> 00:02:07.769
+contain a lot of noise. For example,
+
+00:02:07.770 --> 00:02:10.816
+you may get a lot of test files.
+
+00:02:10.817 --> 00:02:13.537
+If the tool hits your vendor directory,
+
+00:02:13.538 --> 00:02:17.199
+it may get a bunch of results from libraries
+
+00:02:17.200 --> 00:02:22.879
+you're using, which most are not helpful. Another downside
+
+00:02:22.880 --> 00:02:26.679
+is that the order given is, well, there's no meaning to the
+
+00:02:26.680 --> 00:02:30.319
+order. It's usually just the search order that the tool
+
+00:02:30.320 --> 00:02:34.639
+happens to look in first.
+
+00:02:34.640 --> 00:02:38.639
+Another thing is, so when you're searching, you oftentimes
+
+00:02:38.640 --> 00:02:41.639
+have to keep the state of the searches in your head. For
+
+00:02:41.640 --> 00:02:46.639
+example, you try one search, you see the results, find the
+
+00:02:46.640 --> 00:02:49.639
+results you think are relevant, keep them in your head, run
+
+00:02:49.640 --> 00:02:52.519
+search number two, look through the results, kind of
+
+00:02:52.520 --> 00:02:56.119
+combine these different search results in your head until
+
+00:02:56.120 --> 00:02:59.970
+you get an idea of which ones might be relevant.
+
+00:02:59.971 --> 00:03:04.515
+Another thing is that the search primitives are fairly limited.
+
+00:03:04.516 --> 00:03:10.599
+So yeah, you can search regular expressions, but you can't
+
+00:03:10.600 --> 00:03:14.719
+really define complex things like, I want to search files in
+
+00:03:14.720 --> 00:03:18.439
+this directory, and this directory, and this directory,
+
+00:03:18.440 --> 00:03:22.319
+except these subdirectories, and accept test files, and I
+
+00:03:22.320 --> 00:03:25.559
+only want files with this file extension. Criteria like
+
+00:03:25.560 --> 00:03:28.919
+that are really hard to... I'm sure they're possible in tools
+
+00:03:28.920 --> 00:03:34.479
+like grep, but they're pretty hard to construct.
+
+00:03:34.480 --> 00:03:38.199
+And lastly, there's no notion of any relevance. All the
+
+00:03:38.200 --> 00:03:42.039
+results you get back, I mean, you don't know, is the search
+
+00:03:42.040 --> 00:03:43.095
+more relevant? Is it twice as relevant? Is it
+
+00:03:43.096 --> 00:03:52.279
+100 times more relevant? These tools usually don't provide
+
+00:03:52.280 --> 00:03:58.232
+such information.
+
+NOTE Information retrieval
+
+00:03:58.233 --> 00:04:00.394
+There's a field called information retrieval,
+
+00:04:00.395 --> 00:04:02.616
+and this deals with this exact problem.
+
+00:04:02.617 --> 00:04:04.718
+You have lots of data you're searching for.
+
+00:04:04.719 --> 00:04:09.261
+How do you construct a search query?
+
+00:04:09.262 --> 00:04:09.839
+How do you get results back fast? How do you
+
+00:04:09.840 --> 00:04:14.519
+rank which ones are most relevant? How do you evaluate
+
+00:04:14.520 --> 00:04:20.079
+your search system to see if it's getting better or worse?
+
+00:04:20.080 --> 00:04:23.119
+There's a lot of work, a lot of books written on the topic of
+
+00:04:23.120 --> 00:04:28.159
+information retrieval. If one wants to improve
+
+00:04:28.160 --> 00:04:31.879
+searching in Emacs, then drawing inspiration from this
+
+00:04:31.880 --> 00:04:34.295
+field is necessary.
+
+NOTE Search engine in Emacs: the index
+
+00:04:34.296 --> 00:04:41.383
+The first aspect of information retrieval is the index.
+
+00:04:41.384 --> 00:04:46.608
+The reverse index is what search engines use to find results really fast.
+
+00:04:46.609 --> 00:04:51.454
+Essentially, it's a map of search term
+
+00:04:51.455 --> 00:04:54.738
+to locations where that term is located.
+
+00:04:54.739 --> 00:04:57.079
+You'll have all the terms or maybe even parts of
+
+00:04:57.080 --> 00:04:59.159
+the terms, and then you'll have all the locations where
+
+00:04:59.160 --> 00:05:02.119
+they're located. Any query could easily look up
+
+00:05:02.120 --> 00:05:05.919
+where things are located, join results together, and
+
+00:05:05.920 --> 00:05:12.879
+that's how they get the results to be really fast. For this
+
+00:05:12.880 --> 00:05:19.159
+project, I decided to forgo creating an index altogether.
+
+00:05:19.160 --> 00:05:23.759
+An index is pretty complicated to maintain because
+
+00:05:23.760 --> 00:05:27.319
+it always has to be in sync. Any time you open a file and save
+
+00:05:27.320 --> 00:05:29.959
+it, you would have to re-index, you would have to make sure
+
+00:05:29.960 --> 00:05:32.559
+that file is re-indexed properly. Then you have the
+
+00:05:32.560 --> 00:05:36.119
+whole issue of, well, if you're searching in Emacs,
+
+00:05:36.120 --> 00:05:38.799
+you have all these projects, this directory,
+
+00:05:38.800 --> 00:05:42.479
+that directory, how do you know which? Do you always have to
+
+00:05:42.480 --> 00:05:47.399
+keep them in sync? It's quite a hard task to handle
+
+00:05:47.400 --> 00:05:53.079
+that. Then on the other end, tools like ripgrep can
+
+00:05:53.080 --> 00:05:59.119
+search very fast. Even though they can't search maybe on the
+
+00:05:59.120 --> 00:06:03.919
+order of tens of thousands of repositories, for a local
+
+00:06:03.920 --> 00:06:06.039
+setting, they should be plenty fast enough.
+
+00:06:06.040 --> 00:06:12.239
+I benchmarked. Ripgrep, for example, is
+
+00:06:12.240 --> 00:06:15.959
+on the order of gigabytes per second.
+
+00:06:15.960 --> 00:06:19.239
+Definitely, it can search a few pretty big size
+
+00:06:19.240 --> 00:06:21.756
+repositories.
+
+NOTE Search engine in Emacs: Ranking
+
+00:06:21.757 --> 00:06:24.799
+Next main task. We decided not to use an
+
+00:06:24.800 --> 00:06:29.959
+index. Next task is how do we rank search results? So there's
+
+00:06:29.960 --> 00:06:33.439
+two main algorithms that are used these days. The first
+
+00:06:33.440 --> 00:06:36.519
+one is tf-idf, which stands for term frequency, inverse
+
+00:06:36.520 --> 00:06:43.039
+target frequency. Then there's BM25, which is sort of a
+
+00:06:43.040 --> 00:06:43.552
+modified tf-idf algorithm.
+
+NOTE tf-idf: term-frequency x inverse-document-frequency
+
+00:06:43.553 --> 00:06:45.679
+tf-idf, without going into
+
+00:06:45.680 --> 00:06:49.159
+too much detail, essentially multiplies two terms. One
+
+00:06:49.160 --> 00:06:51.879
+is the term frequency, and then you multiply it by the
+
+00:06:51.880 --> 00:06:54.559
+inverse document frequency. The term frequency is a
+
+00:06:54.560 --> 00:06:58.519
+measure of how often that search term occurs. The
+
+00:06:58.520 --> 00:07:00.799
+inverse document frequency is a measure of how much
+
+00:07:00.800 --> 00:07:06.199
+information that term provides. If the term occurs a lot,
+
+00:07:06.200 --> 00:07:08.719
+then it gets a higher score in the term frequency section.
+
+00:07:08.720 --> 00:07:12.399
+But if it's a common word that exists in a lot of documents,
+
+00:07:12.400 --> 00:07:13.900
+then its inverse document frequency goes down.
+
+00:07:13.901 --> 00:07:20.879
+It kind of scores it less. You'll find that words like the,
+
+00:07:20.880 --> 00:07:25.959
+in, is, these really common words, since they occur
+
+00:07:25.960 --> 00:07:29.199
+everywhere, their inverse document frequency is
+
+00:07:29.200 --> 00:07:32.479
+essentially zero. They don't really count towards a
+
+00:07:32.480 --> 00:07:35.679
+score. But when you have rare words that only occur in a
+
+00:07:35.680 --> 00:07:37.679
+few documents, they're weighted a lot more. So the more
+
+00:07:37.680 --> 00:07:41.159
+those rare words occur, they boost the score higher.
+
+NOTE BM25
+
+00:07:41.160 --> 00:07:48.839
+BM25 is a modification of this. It's essentially TF, it's
+
+00:07:48.840 --> 00:07:53.119
+essentially the previous one, except it dampens out terms
+
+00:07:53.120 --> 00:07:55.439
+that occur more often. Imagine you have a bunch of
+
+00:07:55.440 --> 00:07:59.359
+documents. One has a term 10 times, one has a term, that same
+
+00:07:59.360 --> 00:08:02.439
+term a hundred times, another has a thousand times.
+
+00:08:02.440 --> 00:08:06.799
+You'll see the score dampens off as the number of
+
+00:08:06.800 --> 00:08:10.639
+occurrences increases. That prevents any one term from
+
+00:08:10.640 --> 00:08:16.559
+overpowering the score. This is the algorithm I ended up
+
+00:08:16.560 --> 00:08:21.039
+choosing for my implementation. So with a plan of using a
+
+00:08:21.040 --> 00:08:29.559
+command line tool like ripgrep to get term occurrences, and
+
+00:08:29.560 --> 00:08:36.799
+then using a scoring algorithm like BM25 to rank the terms,
+
+00:08:36.800 --> 00:08:40.079
+we can combine this together and create a simple search
+
+00:08:40.080 --> 00:08:41.199
+mechanism.
+
+NOTE Searching with p-search
+
+00:08:41.200 --> 00:08:47.439
+Here we're in the directory for the Emacs source code.
+
+00:08:47.440 --> 00:08:53.479
+Let's say we want to search for the display code. We
+
+00:08:53.480 --> 00:08:58.679
+run the p-search command, starting the search engine. It
+
+00:08:58.680 --> 00:09:01.159
+opens up. We notice it has three sections, the candidate
+
+00:09:01.160 --> 00:09:05.199
+generators, the priors, and the search results. The
+
+00:09:05.200 --> 00:09:09.999
+candidate generators generates the search space we're
+
+00:09:10.000 --> 00:09:14.719
+looking on. These are all composable and you can add as
+
+00:09:14.720 --> 00:09:19.719
+many as you want. So with this, it specifies that here
+
+00:09:19.720 --> 00:09:25.239
+we're searching on the file system and we're searching in
+
+00:09:25.240 --> 00:09:30.799
+this directory. We're using the ripgrep tool to search
+
+00:09:30.800 --> 00:09:33.359
+with, and we want to make sure that we're searching only on
+
+00:09:33.360 --> 00:09:40.479
+files committed to Git. Here we see the search results.
+
+00:09:40.480 --> 00:09:45.159
+Notice here is their final probability. Here, notice
+
+00:09:45.160 --> 00:09:47.079
+that they're all the same, and they're the same because we
+
+00:09:47.080 --> 00:09:50.719
+don't have any search criteria specified here. Suppose
+
+00:09:50.720 --> 00:09:55.679
+we want to search for display-related code. We add a
+
+00:09:55.680 --> 00:09:57.359
+query: display.
+
+00:09:57.360 --> 00:10:06.559
+So then it spins off the processes, gets the search term
+
+00:10:06.560 --> 00:10:10.879
+counts and calculates the new scores. Notice here that
+
+00:10:10.880 --> 00:10:15.759
+the results that come on top are just at first glance appear
+
+00:10:15.760 --> 00:10:19.919
+to be relevant to display. Remember, if we compare
+
+00:10:19.920 --> 00:10:25.079
+that to just running a ripgrep raw, notice here we're
+
+00:10:25.080 --> 00:10:31.279
+getting 53,000 results and it's pretty hard to go through
+
+00:10:31.280 --> 00:10:34.319
+these results and make sense of it.
+
+00:10:34.320 --> 00:10:41.456
+So that's p-search in a nutshell.
+
+NOTE Flight AF 447
+
+00:10:41.457 --> 00:10:45.982
+Next, I wanted to talk about the story of Flight 447.
+
+00:10:45.983 --> 00:10:49.326
+Flight 447 going from Rio de Janeiro to Paris
+
+00:10:49.327 --> 00:10:51.509
+crashed somewhere in the Atlantic Ocean
+
+00:10:51.510 --> 00:10:54.713
+on June 1st, 2009, killing everyone on board.
+
+00:10:54.714 --> 00:10:56.894
+Four search attempts were made to find the wreckage.
+
+00:10:56.895 --> 00:11:01.075
+None of them were successful, except the finding of some debris
+
+00:11:01.076 --> 00:11:05.479
+and a dead body. It was decided that they really wanted
+
+00:11:05.480 --> 00:11:09.519
+to find the wreckage to retrieve data as to why the search
+
+00:11:09.520 --> 00:11:14.639
+occurred. This occurred two years after the
+
+00:11:14.640 --> 00:11:19.959
+initial crash. With this next search attempt, they
+
+00:11:19.960 --> 00:11:23.199
+wanted to create a probability distribution of where the
+
+00:11:23.200 --> 00:11:26.759
+crash could be. The only piece of concrete data they had
+
+00:11:26.760 --> 00:11:35.079
+was a GPS signal from the ship at 210 containing the GPS
+
+00:11:35.080 --> 00:11:40.239
+location of the plane was at 2.98 degrees north, 30.59
+
+00:11:40.240 --> 00:11:44.719
+degrees west. That was the only data they had to go off of.
+
+00:11:44.720 --> 00:11:50.079
+So they drew a circle around that point
+
+00:11:50.080 --> 00:11:54.679
+with a radius of 40 nautical miles. They assumed that
+
+00:11:54.680 --> 00:11:57.479
+anything outside the circle would have been impossible for
+
+00:11:57.480 --> 00:12:01.239
+the ship to reach. This was the starting point for
+
+00:12:01.240 --> 00:12:04.799
+creating the probability distribution of where the
+
+00:12:04.800 --> 00:12:08.119
+wreckage occurred. Anything outside the circle, they
+
+00:12:08.120 --> 00:12:09.639
+assumed it was impossible to reach.
+
+00:12:09.640 --> 00:12:16.479
+The only other pieces of data were the four failed search
+
+00:12:16.480 --> 00:12:21.719
+attempts and then some of the debris found. One thing they
+
+00:12:21.720 --> 00:12:26.159
+did decide was to look at similar crashes where control was
+
+00:12:26.160 --> 00:12:30.319
+lost to analyze where the crashes landed, compared to where
+
+00:12:30.320 --> 00:12:37.399
+the loss of control started. This probability
+
+00:12:37.400 --> 00:12:43.479
+distribution, the circular normal distribution was
+
+00:12:43.480 --> 00:12:47.919
+decided upon. Here you can see that the center has a lot
+
+00:12:47.920 --> 00:12:51.879
+higher chance of finding the wreckage. As you go away
+
+00:12:51.880 --> 00:12:55.399
+from the center, the probability of finding the wreckage
+
+00:12:55.400 --> 00:13:02.319
+decreases a lot. The next thing they looked at was, well,
+
+00:13:02.320 --> 00:13:05.959
+they noticed they had retrieved some dead bodies from the
+
+00:13:05.960 --> 00:13:12.959
+wreckage. So they thought that they could calculate the
+
+00:13:12.960 --> 00:13:18.439
+backward drift on that particular day to find where the
+
+00:13:18.440 --> 00:13:21.479
+crash might've occurred. If they found bodies at a
+
+00:13:21.480 --> 00:13:25.119
+particular location, they can kind of work backwards from
+
+00:13:25.120 --> 00:13:30.665
+that in order to find where the initial crash occurred.
+
+00:13:30.666 --> 00:13:34.719
+So here you can see the probability distribution based off of
+
+00:13:34.720 --> 00:13:40.279
+the backward drift model. Here you see the darker colors
+
+00:13:40.280 --> 00:13:46.159
+have a higher probability of finding the location. So
+
+00:13:46.160 --> 00:13:50.679
+with all these pieces of data, so with that circular 40
+
+00:13:50.680 --> 00:13:54.959
+nautical mile uniform distribution, with that circular
+
+00:13:54.960 --> 00:14:02.199
+normal distribution of comparing similar crashes, as well
+
+00:14:02.200 --> 00:14:07.439
+as with the backward drift, they were able to combine all
+
+00:14:07.440 --> 00:14:08.559
+three of these pieces
+
+00:14:08.560 --> 00:14:14.599
+in order to come up with a final prior distribution of where
+
+00:14:14.600 --> 00:14:19.519
+the wreckage occurred. So this is what the final model
+
+00:14:19.520 --> 00:14:24.719
+they came upon. Here you can see it has that 40 nautical
+
+00:14:24.720 --> 00:14:29.679
+mile radius circle. It has that darker center, which
+
+00:14:29.680 --> 00:14:32.039
+indicates a higher probability because of the
+
+00:14:32.040 --> 00:14:38.959
+crash similarity. Then here you also see along this line
+
+00:14:38.960 --> 00:14:50.799
+has a slightly higher probability due to the backward drift
+
+00:14:50.800 --> 00:14:52.119
+distribution.
+
+00:14:52.120 --> 00:14:56.559
+So the next thing is, since they had performed searches,
+
+00:14:56.560 --> 00:15:00.559
+they decided to incorporate the data from those searches
+
+00:15:00.560 --> 00:15:04.759
+into their new distribution. Here you can see places
+
+00:15:04.760 --> 00:15:08.879
+where they searched initially. If you think about it,
+
+00:15:08.880 --> 00:15:11.399
+you can assume that, well, if you search for something,
+
+00:15:11.400 --> 00:15:14.199
+there's a good chance you'll find it, but not necessarily.
+
+00:15:14.200 --> 00:15:18.439
+Anywhere where they searched, the probability of it
+
+00:15:18.440 --> 00:15:22.839
+finding it there is greatly reduced. It's not zero because
+
+00:15:22.840 --> 00:15:26.879
+obviously you can look for something and miss it, but it kind
+
+00:15:26.880 --> 00:15:31.119
+of reduces the probability that we would expect to find it in
+
+00:15:31.120 --> 00:15:36.679
+those already searched locations. This is the
+
+00:15:36.680 --> 00:15:41.919
+posterior distribution or distribution after counting
+
+00:15:41.920 --> 00:15:44.559
+observations made.
+
+00:15:44.560 --> 00:15:48.759
+Here we can see kind of these cutouts of where the
+
+00:15:48.760 --> 00:15:53.959
+previous searches occurred. This is the final
+
+00:15:53.960 --> 00:15:56.999
+distribution they went off of to perform the subsequent
+
+00:15:57.000 --> 00:16:01.999
+search. In the end, the wreckage was found at a point close to
+
+00:16:02.000 --> 00:16:06.770
+the center here, thus validating this methodology.
+
+NOTE Modifying priors
+
+00:16:06.771 --> 00:16:10.332
+We can see the power of this Bayesian search methodology
+
+00:16:10.333 --> 00:16:13.999
+in the way that we could take information from all the sources we had.
+
+00:16:14.000 --> 00:16:19.237
+We could draw analogies to similar situations.
+
+00:16:19.238 --> 00:16:22.479
+We can quantify these, combine them into a model,
+
+00:16:22.480 --> 00:16:27.893
+and then also update our model according to each observation we make.
+
+00:16:27.894 --> 00:16:30.359
+I think there's a lot of similarities to be drawn with
+
+00:16:30.360 --> 00:16:35.159
+searching on a computer in the sense that when we search for
+
+00:16:35.160 --> 00:16:39.399
+something, there's oftentimes a story we kind of have as to
+
+00:16:39.400 --> 00:16:43.959
+what search terms exist, where we expect to find the file.
+
+00:16:43.960 --> 00:16:46.719
+For example, if you're implementing a new feature, you'll
+
+00:16:46.720 --> 00:16:49.919
+often have some search terms in mind that you think will be
+
+00:16:49.920 --> 00:16:54.719
+relevant. Some search terms, you might think they have a
+
+00:16:54.720 --> 00:16:57.599
+possibility of being relevant, but maybe you're not sure.
+
+00:16:57.600 --> 00:17:02.879
+There's some directories where you know that they're not
+
+00:17:02.880 --> 00:17:07.759
+relevant. There's other criteria like, well, you know that
+
+00:17:07.760 --> 00:17:11.399
+maybe somebody in particular worked on this code.
+
+00:17:11.400 --> 00:17:16.319
+What if you could incorporate that information? Like, I know
+
+00:17:16.320 --> 00:17:21.399
+this author, he's always working on this feature. What if
+
+00:17:21.400 --> 00:17:25.519
+I just give the files that this person works on a higher
+
+00:17:25.520 --> 00:17:32.599
+probability than ones he doesn't work on? Or maybe you think
+
+00:17:32.600 --> 00:17:38.599
+that this is a file that's committed too often. You think
+
+00:17:38.600 --> 00:17:43.439
+that maybe the amount of times of commits it receives
+
+00:17:43.440 --> 00:17:47.719
+should change your probability of this file being
+
+00:17:47.720 --> 00:17:52.839
+relevant. That's where p-search comes in.
+
+00:17:52.840 --> 00:17:57.679
+Its aim is to be a framework in order to incorporate all these
+
+00:17:57.680 --> 00:18:01.359
+sorts of different prior information into your searching
+
+00:18:01.360 --> 00:18:05.999
+process. You're able to say things like, I want files
+
+00:18:06.000 --> 00:18:11.119
+authored by this user to be given higher probability. I want
+
+00:18:11.120 --> 00:18:13.919
+this author to be given a lower priority. I know this author
+
+00:18:13.920 --> 00:18:18.759
+never works on this code. If he has a commit, then lower its
+
+00:18:18.760 --> 00:18:24.679
+probability, or you can specify specific paths, or you can
+
+00:18:24.680 --> 00:18:30.199
+specify multiple search terms, weighing different ones
+
+00:18:30.200 --> 00:18:38.919
+according to how you think those terms should be relevant.
+
+00:18:38.920 --> 00:18:42.079
+So with p-search, we're able to incorporate information
+
+00:18:42.080 --> 00:18:46.279
+from multiple sources. Here, for example, we have a prior
+
+00:18:46.280 --> 00:18:52.079
+of type git author, and we're looking for all of the files
+
+00:18:52.080 --> 00:18:56.719
+that are committed to by Lars. So the more commits he has,
+
+00:18:56.720 --> 00:19:01.399
+the higher probability is given to that file. Suppose
+
+00:19:01.400 --> 00:19:04.559
+there's a feature I know he worked on, but I don't know the
+
+00:19:04.560 --> 00:19:09.159
+file or necessarily even key terms of it. Well, with this, I
+
+00:19:09.160 --> 00:19:12.140
+can incorporate that information.
+
+00:19:12.141 --> 00:19:15.999
+So let's search again. Let's add display.
+
+00:19:16.000 --> 00:19:22.959
+Let's see what responses we get back here. We can add
+
+00:19:22.960 --> 00:19:27.199
+as many of these criteria as we want. We can even specify that
+
+00:19:27.200 --> 00:19:31.519
+the title of the file name should be a certain type. Let's
+
+00:19:31.520 --> 00:19:36.599
+say we're only concerned about C files. We add the file
+
+00:19:36.600 --> 00:19:45.399
+name should contain .c in it. With this, now we
+
+00:19:45.400 --> 00:19:51.319
+notice that all of the C files containing display authored
+
+00:19:51.320 --> 00:19:56.279
+by Lars should be given higher probability. We can
+
+00:19:56.280 --> 00:20:02.719
+continue to add these priors as we feel fit. The workflow
+
+00:20:02.720 --> 00:20:07.519
+that I found helps when searching is that you'll add
+
+00:20:07.520 --> 00:20:11.359
+criteria, you'll see some good results come up and some bad
+
+00:20:11.360 --> 00:20:15.319
+results come up. So you'll often find a pattern in those
+
+00:20:15.320 --> 00:20:18.839
+bad results, like, oh, I don't want test files, or this
+
+00:20:18.840 --> 00:20:22.679
+directory isn't relevant, or something like that. Then
+
+00:20:22.680 --> 00:20:27.199
+you can update your prior distribution, adding its
+
+00:20:27.200 --> 00:20:31.119
+criteria, and then rerun it, and then it will get different
+
+00:20:31.120 --> 00:20:35.159
+probabilities for the files. So in the end, you'll have a
+
+00:20:35.160 --> 00:20:37.639
+list of results that's tailor-made to the thing you're
+
+00:20:37.640 --> 00:20:40.404
+searching for.
+
+NOTE Importance
+
+00:20:40.405 --> 00:20:41.639
+There's a couple of other features I
+
+00:20:41.640 --> 00:20:49.079
+want to go through. One thing is that each of these priors,
+
+00:20:49.080 --> 00:20:55.839
+you can specify the importance. In other words, how
+
+00:20:55.840 --> 00:21:01.119
+important is this particular piece of information to your
+
+00:21:01.120 --> 00:21:05.199
+search? So here, everything is of importance medium. But
+
+00:21:05.200 --> 00:21:07.879
+let's say I really care about something having the word
+
+00:21:07.880 --> 00:21:12.679
+display in it. I'm going to change its importance.
+
+00:21:12.680 --> 00:21:18.599
+Instead of medium, I'll change its importance to high.
+
+00:21:18.600 --> 00:21:23.279
+What that does essentially is things that don't have
+
+00:21:23.280 --> 00:21:28.079
+display in it are given a much bigger penalty and things with
+
+00:21:28.080 --> 00:21:28.128
+the word display in it are rated much higher.
+
+00:21:28.129 --> 00:21:38.559
+With this, we're able to fine-tune the results that we get.
+
+NOTE Complement or inverse
+
+00:21:38.560 --> 00:21:45.639
+Another thing you can do is that you can add the complement or
+
+00:21:45.640 --> 00:21:49.759
+the inverse of certain queries. Let's say you want to
+
+00:21:49.760 --> 00:21:53.239
+search for display, but you don't want it to contain the word
+
+00:21:53.240 --> 00:21:58.039
+frame. With the complement option on, when we create this
+
+00:21:58.040 --> 00:22:01.839
+search prior, now it's going to be searching for frame, but
+
+00:22:01.840 --> 00:22:04.959
+instead of increasing the search score, it's going to
+
+00:22:04.960 --> 00:22:06.999
+decrease it if it contains the word frame.
+
+00:22:07.000 --> 00:22:14.319
+So here, things related to frame are kind of
+
+00:22:14.320 --> 00:22:18.079
+deprioritized. We can also say that we really don't want
+
+00:22:18.080 --> 00:22:21.599
+the search to contain the word frame by increasing its
+
+00:22:21.600 --> 00:22:27.199
+importance. So with all these composable pieces, we can
+
+00:22:27.200 --> 00:22:33.412
+create kind of a search that's tailor-made to our needs.
+
+00:22:33.413 --> 00:22:35.759
+That concludes this talk. There's a lot more I could talk
+
+00:22:35.760 --> 00:22:37.799
+about with regards to research, so definitely follow the
+
+00:22:37.800 --> 00:22:40.639
+project if you're interested. Thanks for watching, and I
+
+00:22:40.640 --> 00:22:42.240
+hope you enjoy the rest of the conference.
diff --git a/2024/captions/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--answers.vtt b/2024/captions/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--answers.vtt
new file mode 100644
index 00000000..1ab5dd02
--- /dev/null
+++ b/2024/captions/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--answers.vtt
@@ -0,0 +1,842 @@
+WEBVTT indexed by sachac
+
+00:00:00.000 --> 00:00:03.667
+... mentally over the next couple of days, but I can assure you
+
+00:00:03.668 --> 00:00:06.759
+that it will be many organizers in the background also
+
+00:00:06.760 --> 00:00:10.199
+working. You'll probably get to see us later on. But for now,
+
+00:00:10.200 --> 00:00:12.775
+without further ado, I want to say hi to Vincent.
+
+00:00:12.776 --> 00:00:15.417
+Hi, Vincent.
+
+00:00:15.418 --> 00:00:17.458
+Hi, thanks for having me.
+
+00:00:17.459 --> 00:00:18.099
+Yeah, and thanks for
+
+00:00:18.140 --> 00:00:22.902
+coming and thanks for presenting. I mean, you didn't decide
+
+00:00:22.942 --> 00:00:25.704
+to go first. It's mostly the time zone for you which decided
+
+00:00:25.724 --> 00:00:28.883
+for you because I believe you are in Japan, correctly. Yeah,
+
+00:00:28.920 --> 00:00:33.039
+exactly. So I'm living there now and it's very late. It's
+
+00:00:33.040 --> 00:00:37.319
+really funny to see everyone saying good morning in the
+
+00:00:37.320 --> 00:00:39.959
+chat. It's always the same for me. So personally, I'm in
+
+00:00:39.960 --> 00:00:43.959
+France. So for me, it's only 3 p.m. For you, it's probably 9 or
+
+00:00:43.960 --> 00:00:47.959
+10 p.m. if I'm correct. Already 11 here, yeah. It's already
+
+00:00:47.960 --> 00:00:51.678
+11, so thank you for staying up so late for us.
+
+00:00:51.679 --> 00:00:55.181
+And how about we just get started with the questions
+
+00:00:55.182 --> 00:00:56.521
+because you've just presented something
+
+00:00:56.522 --> 00:00:59.200
+that is very dear to my heart, which is
+
+00:00:59.240 --> 00:01:01.959
+writing academic paper with Org Mode, which is, for the
+
+00:01:01.960 --> 00:01:05.279
+record, how I got started with Org Roam and stuff like this.
+
+00:01:05.280 --> 00:01:08.799
+So, unless you've got anything else to add on top of your
+
+00:01:08.800 --> 00:01:11.839
+presentation that wasn't able to fit in, I suggest we just
+
+00:01:11.840 --> 00:01:16.559
+start taking questions. All right. So yeah, right now I'm
+
+00:01:16.560 --> 00:01:19.439
+reading the question from IRC and also from the pad. So I
+
+00:01:19.440 --> 00:01:23.159
+guess I'm gonna take what's already written there.
+
+NOTE Q: I'd be interested how to start this journey of writing academic papers in Org-Roam when not having used Emacs Org-Mode yet? Thanks!
+
+00:01:23.160 --> 00:01:27.359
+So the first one is asking, I'd be interested in how to start this
+
+00:01:27.360 --> 00:01:30.239
+journey to write academic paper in org-roam when not having
+
+00:01:30.240 --> 00:01:36.639
+used Emacs org mode yet. So I saw this one before and I guess it
+
+00:01:36.640 --> 00:01:43.039
+would be possible to do that, to use Org documents only
+
+00:01:43.040 --> 00:01:46.759
+as the way that you are writing papers. Maybe you can
+
+00:01:46.760 --> 00:01:51.959
+just use that as a template that you're going to export.
+
+00:01:51.960 --> 00:01:54.959
+If you are familiar with LaTeX, it's going to be more useful,
+
+00:01:54.960 --> 00:01:59.599
+and maybe more convenient to work with inside of
+
+00:01:59.600 --> 00:02:04.999
+Emacs. But then I'm not 100% sure if that's... How do you say
+
+00:02:05.000 --> 00:02:10.799
+that? Maybe, in my opinion, the benefits of using
+
+00:02:10.800 --> 00:02:14.679
+org-roam in that setup is that you can link the things. For
+
+00:02:14.680 --> 00:02:18.839
+me, I'm using the search function for org-roam to just
+
+00:02:18.840 --> 00:02:21.959
+navigate between the files. So that's really some, a good
+
+00:02:21.960 --> 00:02:26.119
+advantage, but like, yeah, that could be, like Leo said in
+
+00:02:26.120 --> 00:02:28.039
+the presentation, that's some, maybe that's something you
+
+00:02:28.040 --> 00:02:35.839
+can start using org-mode with to write papers. So yeah.
+
+NOTE Q: How about connecting Emacs Org-Roam to Zotero? Is that something you have experience with?
+
+00:02:35.840 --> 00:02:38.879
+Second question. So how about connecting Emacs or Roam
+
+00:02:38.880 --> 00:02:42.079
+to Zotero? Is that something that you have experience with?
+
+00:02:42.080 --> 00:02:47.119
+Not at all. Actually, I used briefly Zotero in the past and I
+
+00:02:47.120 --> 00:02:51.439
+really didn't like it or didn't really get into that. I don't
+
+00:02:51.440 --> 00:02:55.599
+know. But right now,
+
+NOTE Q: Out of curiosity, how do you manage your bibliography? Do you do it from inside Emacs, or using a separate program like Zotero?
+
+00:02:55.600 --> 00:03:00.319
+I don't connect that at all. The question after, out of
+
+00:03:00.320 --> 00:03:03.559
+curiosity, how do you manage your bibliography? Do you do it
+
+00:03:03.560 --> 00:03:06.519
+from inside Emacs or using a separate program, ex: Zotero?
+
+00:03:06.520 --> 00:03:09.119
+Because personally, I have struggled to do it from Emacs,
+
+00:03:09.120 --> 00:03:13.879
+though I have wanted to for some time. So the way I manage that
+
+00:03:13.880 --> 00:03:20.799
+is I just have a couple of .bib files that I edit by hand, where
+
+00:03:20.800 --> 00:03:25.359
+I put the reference when I find them.
+
+00:03:25.360 --> 00:03:28.599
+And yeah, I just showed very briefly in the presentation,
+
+00:03:28.600 --> 00:03:34.119
+but the way.
+
+00:03:34.120 --> 00:03:39.519
+One of the great thing with the org reference system is that
+
+00:03:39.520 --> 00:03:43.239
+if you have your bibliographic files that are connected to
+
+00:03:43.240 --> 00:03:47.959
+that system, you can just like, you can put the link, the
+
+00:03:47.960 --> 00:03:51.879
+reference to the paper, like click on it from your org note,
+
+00:03:51.880 --> 00:03:56.479
+and then you can open the PDF. You can open the DOI link to open
+
+00:03:56.480 --> 00:04:00.719
+the whatever publisher page.
+
+00:04:00.720 --> 00:04:10.159
+So no, I don't use Zotero and I just edit bib or bib files by
+
+00:04:10.160 --> 00:04:12.959
+hand in Emacs.
+
+00:04:12.960 --> 00:04:16.159
+I was just going to add something because you know
+
+00:04:16.160 --> 00:04:19.024
+org-roam-bibtex is actually one of the packages that I
+
+00:04:19.025 --> 00:04:25.399
+developed and I got it working with Zotero because for me it
+
+00:04:25.400 --> 00:04:28.524
+was convenient. I was studying humanities and for me it was
+
+00:04:28.525 --> 00:04:32.599
+very easy to connect reference taken in my browser with
+
+00:04:32.600 --> 00:04:36.799
+Zotero and just post-processing them a little bit but it is
+
+00:04:36.800 --> 00:04:40.279
+possible to make org-roam, org-roam-bibtex and Zotero
+
+00:04:40.280 --> 00:04:44.959
+work together. But it's a little bit of an involved process to
+
+00:04:44.960 --> 00:04:49.439
+get everything working in Emacs.
+
+00:04:49.440 --> 00:04:54.519
+Yeah, for sure. And
+
+00:04:54.520 --> 00:05:01.999
+yeah, I guess the way I'm doing it, I understand the appeal
+
+00:05:02.000 --> 00:05:03.839
+for having it integrated in the browser. Maybe
+
+00:05:03.840 --> 00:05:06.279
+that's something I should look up, actually, because right
+
+00:05:06.280 --> 00:05:09.359
+now I just like doing it very much by hand, like going on the
+
+00:05:09.360 --> 00:05:15.199
+publisher page and copying the bibtex block and
+
+00:05:15.200 --> 00:05:20.039
+just using putting that in my file. Yes, it can be not a very
+
+00:05:20.040 --> 00:05:23.359
+efficient workflow on that side. But after that, you're
+
+00:05:23.360 --> 00:05:26.599
+having the PDF and having it inside the note.
+
+00:05:26.600 --> 00:05:30.759
+Yeah, it's great. Yeah. To some extent, it kind of depends on
+
+00:05:30.760 --> 00:05:33.319
+the reference system that is used by the field in which you
+
+00:05:33.320 --> 00:05:36.279
+are or the university in which you're publishing. Because
+
+00:05:36.280 --> 00:05:39.519
+sometimes, you know, you're going to have some basic BibTeX
+
+00:05:39.520 --> 00:05:41.479
+file and sometimes you're going to have better BibTeX
+
+00:05:41.480 --> 00:05:44.959
+files. And those are very different metadata that you need
+
+00:05:44.960 --> 00:05:49.119
+to reconcile. And depending on which LaTeX compiler you're
+
+00:05:49.120 --> 00:05:52.439
+using, be it zLaTeX[??], be it regular LaTeX, lualatex, it's
+
+00:05:52.440 --> 00:05:55.439
+going to be all different. So it's a whole can of worms that
+
+00:05:55.440 --> 00:05:57.799
+I'm not sure we want to be opening now. But if you are
+
+00:05:57.800 --> 00:06:00.999
+interested and if you're not too attached about getting
+
+00:06:01.000 --> 00:06:03.679
+everything right, it's really easy to get started with
+
+00:06:03.680 --> 00:06:06.319
+stuff like org-roam-bibtex. It's supposed to get you
+
+00:06:06.320 --> 00:06:11.319
+most of the way down to a working setup. And if you need to get
+
+00:06:11.320 --> 00:06:14.359
+everything working down to the comma based on your
+
+00:06:14.360 --> 00:06:16.479
+reference system, that's going to be a little harder. But
+
+00:06:16.480 --> 00:06:19.439
+it's possible. I managed to do it and many people actually
+
+00:06:19.440 --> 00:06:22.599
+managed to do it. Okay, anyway, so let's move on to the next
+
+NOTE Q: How do you start a new document?
+
+00:06:22.600 --> 00:06:26.679
+question. All right, so the next question asking how do you
+
+00:06:26.680 --> 00:06:30.999
+start a new document? There are a lot of headers you have to
+
+00:06:31.000 --> 00:06:34.639
+set up. Do you use a template? I'm curious if you use your
+
+00:06:34.640 --> 00:06:38.839
+snippets to deal with all of these LaTeX org metacommands.
+
+00:06:38.840 --> 00:06:44.759
+So I don't use a snippets template of any kind for that.
+
+00:06:44.760 --> 00:06:47.279
+Probably I should. That's actually a good idea. I'm
+
+00:06:47.280 --> 00:06:51.279
+probably going to look into that. No, the way I do actually is
+
+00:06:51.280 --> 00:06:56.199
+I just reuse some previous documents. I copy it, delete all
+
+00:06:56.200 --> 00:07:01.439
+the contents and adjust it until it works the way I like.
+
+00:07:01.440 --> 00:07:09.679
+The main issue in general after that step is to make it work
+
+00:07:09.680 --> 00:07:13.999
+with the template I receive and Let's say if I have some
+
+00:07:14.000 --> 00:07:20.839
+template that needs to work with another LaTeX compiler,
+
+00:07:20.840 --> 00:07:26.599
+I'm probably going to try to copy an existing file that I have
+
+00:07:26.600 --> 00:07:30.959
+that uses the same compiler to save me some work. But yeah,
+
+00:07:30.960 --> 00:07:37.119
+no, I don't use any snippet or something. Probably I should,
+
+00:07:37.120 --> 00:07:40.879
+but I'm just doing it the quick and dirty way to just copy some
+
+00:07:40.880 --> 00:07:41.719
+existing thing.
+
+NOTE Q: What do you think of using citar with org-roam-bibtex?
+
+00:07:41.720 --> 00:07:48.319
+Then what do you think of citar with org-roam-bibtex? It seems
+
+00:07:48.320 --> 00:07:55.999
+that bibtex completion is tied to org-roam-bibtex. I don't
+
+00:07:56.000 --> 00:08:02.079
+know. I never really looked into citar that much. I
+
+00:08:02.080 --> 00:08:06.799
+don't know about that. I don't know either, so I'm not going
+
+00:08:06.800 --> 00:08:07.759
+to be able to help on this one.
+
+00:08:07.760 --> 00:08:17.119
+Because yeah, the bibtex completion is tied to the overall
+
+00:08:17.120 --> 00:08:24.799
+bibtex. I guess so. So what I'm interpreting, because I do,
+
+00:08:24.800 --> 00:08:30.039
+so BibTeX completion is the single motor that drives helm
+
+00:08:30.040 --> 00:08:32.719
+BibTeX and Ivy BibTeX. Perhaps there's another
+
+00:08:32.720 --> 00:08:35.679
+alternative now that is using the Vertico stack for
+
+00:08:35.680 --> 00:08:40.399
+completion. But org-roam-bibtex was interfacing with BibTeX
+
+00:08:40.400 --> 00:08:46.679
+completion to retrieve all the references from a bib file.
+
+00:08:46.680 --> 00:08:50.599
+and I assume citar would be something very similar in a way
+
+00:08:50.600 --> 00:08:54.039
+that it interfaces with a bib file, but I couldn't tell you
+
+00:08:54.040 --> 00:08:57.439
+more. I need to explore a little more and sadly I haven't
+
+00:08:57.440 --> 00:09:00.759
+touched any of this stack in like three years, so I'm a little
+
+00:09:00.760 --> 00:09:03.199
+out of touch. I guess this is what comes with leaving
+
+00:09:03.200 --> 00:09:07.519
+academia to go work as a corporate developer. I'm no longer
+
+00:09:07.520 --> 00:09:10.319
+so interested in the publishing process, even though I'm
+
+00:09:10.320 --> 00:09:12.799
+obviously very appreciative of people who still do, and
+
+00:09:12.800 --> 00:09:13.679
+especially people who use
+
+00:09:13.680 --> 00:09:20.239
+Yeah, same here. I definitely going to look into the citar
+
+00:09:20.240 --> 00:09:23.399
+package to see what's possible. Maybe can be using in some
+
+00:09:23.400 --> 00:09:26.319
+way that is useful for me. Yeah.
+
+NOTE Q: Most academic journals insist that papers are formatted in their own custom LaTeX documentclass.  Does org-roam make it easy to do that?
+
+00:09:26.320 --> 00:09:30.919
+And if I go to the next question, so most academic journal
+
+00:09:30.920 --> 00:09:33.639
+insist that paper are formatted in their own custom LaTeX
+
+00:09:33.640 --> 00:09:38.199
+document class. Does org-roam make it easy to do that? The
+
+00:09:38.200 --> 00:09:43.239
+answer is no. That's mostly what I was presenting in the
+
+00:09:43.240 --> 00:09:44.279
+slide.
+
+00:09:44.280 --> 00:09:48.000
+Actually, that's also why I made the presentation, because
+
+00:09:48.001 --> 00:09:51.940
+if someone has a solution, I would gladly take it. No, the way
+
+00:09:51.941 --> 00:09:57.500
+I do it is that I have to add a... I don't have that on top of my head.
+
+00:09:57.501 --> 00:10:09.582
+plus. Yeah, exactly. So I just make a custom org-latex class with the
+
+00:10:09.583 --> 00:10:16.159
+name of the latex template. In general, I think people use
+
+00:10:16.160 --> 00:10:19.359
+that to redefine like stuff like section and subsection,
+
+00:10:19.360 --> 00:10:24.279
+but for me, I just, it shows in the slide where I just map the
+
+00:10:24.280 --> 00:10:27.239
+section to the same section. I just changed the name of the
+
+00:10:27.240 --> 00:10:33.719
+class. And this way it allows to import the, the CLS and then
+
+00:10:33.720 --> 00:10:39.079
+the rest is just like putting the TeX template that is
+
+00:10:39.080 --> 00:10:48.519
+provided either in headers, in LaTeX headers at the top or
+
+00:10:48.520 --> 00:10:56.079
+Yeah, or just on a LaTeX block in the body of the document if
+
+00:10:56.080 --> 00:11:02.039
+that's needed, for example, for the acknowledgement.
+
+00:11:02.040 --> 00:11:05.759
+Sometimes they need some different formatting, but no,
+
+00:11:05.760 --> 00:11:09.079
+it's not really easy because it needs to modify some
+
+00:11:09.080 --> 00:11:12.359
+configuration in Emacs to do that. Then after that, a little
+
+00:11:12.360 --> 00:11:15.719
+bit like manually adapt the templates into your org notes.
+
+00:11:15.720 --> 00:11:18.799
+So that's a little bit some upfront work to do. But once it's
+
+00:11:18.800 --> 00:11:22.159
+done, your notes are going to be exported exactly like the
+
+00:11:22.160 --> 00:11:27.319
+template and you don't have to worry about it. Yeah, it's an
+
+00:11:27.320 --> 00:11:32.679
+interesting topic because the thing about, on one side, you
+
+00:11:32.680 --> 00:11:36.159
+know, you want to have, when you're using LaTeX, it kind of
+
+00:11:36.160 --> 00:11:39.359
+translates into you caring a lot about the document that you
+
+00:11:39.360 --> 00:11:42.879
+produce. Either you care about how quickly you can turn a
+
+00:11:42.880 --> 00:11:46.719
+plain text document into a very nicely formatted PDF at the
+
+00:11:46.720 --> 00:11:52.239
+end, or, you know, you just care about the output of your
+
+00:11:52.240 --> 00:11:54.439
+documents, making sure that everything is properly
+
+00:11:54.440 --> 00:11:57.039
+formatted. We were talking about references just before,
+
+00:11:57.040 --> 00:12:00.239
+you know, the formatting rule for references are highly
+
+00:12:00.240 --> 00:12:04.319
+dependent upon the manual that you're using and, you know,
+
+00:12:04.320 --> 00:12:07.159
+some people really care about this. And what I found in my
+
+00:12:07.160 --> 00:12:09.799
+particular experience, my own personal experience
+
+00:12:09.800 --> 00:12:15.199
+writing for academia, was that I was more in the latter crowd
+
+00:12:15.200 --> 00:12:17.839
+that really cared about the output format and making sure
+
+00:12:17.840 --> 00:12:20.599
+everything was correct and it's really a struggle to get
+
+00:12:20.600 --> 00:12:23.519
+everything working especially when you're transpiling
+
+00:12:23.520 --> 00:12:27.199
+from Org Mode documents straight into LaTeX. You're
+
+00:12:27.200 --> 00:12:30.119
+obviously going to be resorting to a number of hacks to get
+
+00:12:30.120 --> 00:12:32.439
+everything working like Vincent just mentioned with the
+
+00:12:32.440 --> 00:12:36.519
+class or you're going to end up with many imported files just
+
+00:12:36.520 --> 00:12:39.999
+to get everything working, but really you're fighting
+
+00:12:40.000 --> 00:12:42.839
+against the tide if you want to get something a little
+
+00:12:42.840 --> 00:12:45.759
+different from what is shipping with Walmart. Maybe
+
+00:12:45.760 --> 00:12:48.479
+everything has gotten better since I was writing my papers,
+
+00:12:48.480 --> 00:12:53.879
+but generally... Kindly disagree. Yeah, go on. I kindly
+
+00:12:53.880 --> 00:12:57.159
+disagree. I actually, I'm surprised that a lot of template
+
+00:12:57.160 --> 00:13:00.679
+is so complex that you don't just change the document class,
+
+00:13:00.680 --> 00:13:03.359
+but also need to do something else. I'd say it's rather
+
+00:13:03.360 --> 00:13:05.919
+uncommon. I guess it depends on the area of your search.
+
+00:13:05.920 --> 00:13:12.599
+Yeah, exactly. I mean, that's it. It just needs CLS and
+
+00:13:12.600 --> 00:13:17.559
+that's all. Yeah, but it really depends on, as you said, on
+
+00:13:17.560 --> 00:13:19.639
+the field in which you're publishing. Some fields are a
+
+00:13:19.640 --> 00:13:22.599
+little more lax with their rules. And just the fact that you
+
+00:13:22.600 --> 00:13:26.479
+can introduce mathematic formulas kind of makes LaTeX the
+
+00:13:26.480 --> 00:13:29.919
+de facto for publishing math documents. But when you're
+
+00:13:29.920 --> 00:13:33.599
+doing humanities, they're more attached to other kinds of
+
+00:13:33.600 --> 00:13:36.879
+formatting. So I think things are much better, anyway,
+
+00:13:36.880 --> 00:13:42.919
+since I started five years ago. Oh, yeah. I have heard from
+
+00:13:42.920 --> 00:13:46.639
+humanities people Microsoft Word. Yes. Sadly, that's the
+
+00:13:46.640 --> 00:13:51.879
+format we're fighting against. Yeah. As for document,
+
+00:13:51.880 --> 00:13:57.079
+yeah, for LaTeX classes, it is a customization and it is the
+
+00:13:57.080 --> 00:14:00.319
+right way to customize this thing, that's all. I'm not sure
+
+00:14:00.320 --> 00:14:03.999
+why it's a hack. It's not a hack. It's an actual user
+
+00:14:04.000 --> 00:14:08.959
+customization. Right. So, we've got about four more
+
+00:14:08.960 --> 00:14:13.559
+minutes of question. Vincent, we've got a couple of Yeah. So
+
+00:14:13.560 --> 00:14:15.319
+I've got a little voice talking in my ear telling me that
+
+00:14:15.320 --> 00:14:17.839
+exactly the same thing. So we've got about two more
+
+00:14:17.840 --> 00:14:21.159
+questions. Vincent, do you want to field them? Sure. So, are
+
+NOTE Q: Are you using zotra or org-ref?
+
+00:14:21.160 --> 00:14:27.799
+you using Zotra (sending some link) or org-ref? No, I don't.
+
+00:14:27.800 --> 00:14:31.879
+I've never heard of Zotra, actually. Looking that very
+
+00:14:31.880 --> 00:14:34.639
+briefly. That's something I'm going to have to look into.
+
+00:14:34.640 --> 00:14:38.519
+Apparently, the short for Zotero translator, so that might
+
+00:14:38.520 --> 00:14:41.759
+be something useful for me since I'm not using Zotero yet,
+
+00:14:41.760 --> 00:14:45.119
+maybe trying to combine. But no, I've never really tried
+
+NOTE Q: How much of this is tied to org-roam specifically?
+
+00:14:45.120 --> 00:14:52.519
+these, but I will. Then the last question, how much of this is
+
+00:14:52.520 --> 00:14:59.479
+tied to Org-roam specifically? Not a lot. Actually apart
+
+00:14:59.480 --> 00:15:02.959
+from the org-roam-bibtex, I think.
+
+00:15:02.960 --> 00:15:11.919
+Maybe I'm mixing up stuff there. But no, not a lot actually.
+
+00:15:11.920 --> 00:15:14.999
+It's just the fact that I'm using that as a in my org-roam
+
+00:15:15.000 --> 00:15:22.159
+system. But apart from that, most of, I mean, actually all of
+
+00:15:22.160 --> 00:15:27.519
+the exports can be done from a normal org-note or any other
+
+00:15:27.520 --> 00:15:31.799
+knowledge management system that you do with org-notes. So
+
+00:15:31.800 --> 00:15:34.119
+no, it's not specifically tied to org-roam, just that
+
+00:15:34.120 --> 00:15:38.399
+that's the way I'm using it. And I'm showing it this way, but
+
+00:15:38.400 --> 00:15:41.759
+yeah, actually the export process can be, can be done with,
+
+00:15:41.760 --> 00:15:49.839
+Yes, specifically tight work room. Yeah, just confirming
+
+00:15:49.840 --> 00:15:54.519
+this, the only way Org Roam intervenes into this process is
+
+00:15:54.520 --> 00:15:57.439
+just referencing
+
+00:15:57.440 --> 00:16:00.319
+bibliography elements. It just kind of intercedes a little
+
+00:16:00.320 --> 00:16:03.319
+bit between what Org Roam usually does. But when it comes to
+
+00:16:03.320 --> 00:16:08.759
+the exports to LaTeX and PDF eventually, that's completely
+
+00:16:08.760 --> 00:16:13.279
+deferring to org exports. So, ox-latex and all of this. So,
+
+00:16:13.280 --> 00:16:16.039
+we are not intervening in any way into this transpiling
+
+00:16:16.040 --> 00:16:20.719
+format. One comment. Yeah, I don't know if I imagine it is,
+
+00:16:20.720 --> 00:16:25.759
+but it looked from the slides that it was our graph was it.
+
+00:16:25.760 --> 00:16:35.439
+Sorry, that it was? org-ref, org-ref.
+
+00:16:35.440 --> 00:16:42.719
+Yes. Because it is a link system for citations. Built-in
+
+00:16:42.720 --> 00:16:46.359
+citations, which is, there is a built-in citation system in
+
+00:16:46.360 --> 00:16:50.639
+art mode. It uses, it doesn't use links. It has a special way
+
+00:16:50.640 --> 00:16:57.359
+to cite things. Yeah, because I believe, yeah, go on please,
+
+00:16:57.360 --> 00:17:01.519
+Vincent. No, I just wanted to say, in that case, I'm using the
+
+00:17:01.520 --> 00:17:10.119
+link with the cite command. I'm not using the org-roam link
+
+00:17:10.120 --> 00:17:14.079
+for the reference. I didn't really show that very
+
+00:17:14.080 --> 00:17:17.679
+carefully. But then, yeah, it's a site element that is
+
+00:17:17.680 --> 00:17:21.639
+exported. So the roam part is just like, you can access the
+
+00:17:21.640 --> 00:17:26.519
+org notes that you have attached to a reference paper. But
+
+00:17:26.520 --> 00:17:31.879
+that's it. Okay, because I was confused by why the
+
+00:17:31.880 --> 00:17:35.919
+bibliography is a link, why style is a link, because it is the
+
+00:17:35.920 --> 00:17:37.239
+approach org-ref uses.
+
+00:17:37.240 --> 00:17:47.839
+Ah, right. Okay, I see. Yeah, the thing is, actually I don't
+
+00:17:47.840 --> 00:17:52.159
+know why, but In my experience, using the org-roam,
+
+00:17:52.160 --> 00:17:57.599
+org-roam-bibtex links doesn't export or doesn't export
+
+00:17:57.600 --> 00:18:01.999
+properly. So like adding them with the org-ref-cite worked
+
+00:18:02.000 --> 00:18:05.359
+better. So that's, that's why I'm using these. If I may
+
+00:18:05.360 --> 00:18:07.439
+interject. If you're using org-ref-cite, you're using
+
+00:18:07.440 --> 00:18:11.319
+org-ref-for-export, which is slightly different. I'm
+
+00:18:11.320 --> 00:18:14.039
+going to interject very quickly because sadly we are a
+
+00:18:14.040 --> 00:18:15.919
+little pressed for time because we are heading into the next
+
+00:18:15.920 --> 00:18:18.559
+discussion. So just very quickly, if you want to continue
+
+00:18:18.560 --> 00:18:21.279
+the discussion, the BBB room is available at
+
+00:18:21.280 --> 00:18:24.319
+emacsconf-org. You can go to the talk and get the link to join
+
+00:18:24.320 --> 00:18:27.319
+the BBB. And the stream will be moving on to the next stream in
+
+00:18:27.320 --> 00:18:30.239
+about 5 to 10 seconds. So I'll see you on the other side. And
+
+00:18:30.240 --> 00:18:36.439
+thank you, Vincent. Thank you. All right, sorry for cutting
+
+00:18:36.440 --> 00:18:38.839
+a little abruptly. It's because we use crontabs to move to
+
+00:18:38.840 --> 00:18:42.519
+the next talk. And sadly, I don't have any leeway on this. So
+
+00:18:42.520 --> 00:18:45.279
+feel free to continue the discussion. I'll be moving on to
+
+00:18:45.280 --> 00:18:48.639
+make sure everything is working. So enjoy the discussion.
+
+00:18:48.640 --> 00:19:00.720
+Thank you very much. Bye-bye.
diff --git a/2024/captions/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--main--chapters.vtt b/2024/captions/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--main--chapters.vtt
new file mode 100644
index 00000000..03e28951
--- /dev/null
+++ b/2024/captions/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--main--chapters.vtt
@@ -0,0 +1,38 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:20.129
+Introduction
+
+00:00:20.130 --> 00:01:21.376
+What?
+
+00:01:21.377 --> 00:02:16.214
+Why?
+
+00:02:16.215 --> 00:03:35.319
+Challenges
+
+00:03:35.320 --> 00:04:08.060
+Basic Org to PDF
+
+00:04:08.061 --> 00:04:32.303
+How to LaTeX properly, though?
+
+00:04:32.304 --> 00:04:54.624
+LaTeX-specific headers
+
+00:04:54.625 --> 00:05:31.394
+Using a formatting class file
+
+00:05:31.395 --> 00:06:13.137
+Using a different LaTeX command
+
+00:06:13.138 --> 00:07:09.719
+References links for bibliography
+
+00:07:09.720 --> 00:07:41.239
+Examples
+
+00:07:41.240 --> 00:10:07.400
+Tags
diff --git a/2024/captions/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--main.vtt b/2024/captions/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--main.vtt
new file mode 100644
index 00000000..11fcffad
--- /dev/null
+++ b/2024/captions/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--main.vtt
@@ -0,0 +1,490 @@
+WEBVTT captioned by sachac
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:04.799
+Okay. Hi, everyone. My name is Vincent. I'm a PhD student in
+
+00:00:04.800 --> 00:00:07.439
+Nanzan University, Japan. Today I'm going to present to
+
+00:00:07.440 --> 00:00:11.799
+you how I'm using Org notes and Org Roam to write academic
+
+00:00:11.800 --> 00:00:14.999
+papers. The slides I'm going to present here are available
+
+00:00:15.000 --> 00:00:17.305
+in the Git repository, so you can check them later
+
+00:00:17.306 --> 00:00:20.129
+if you want to.
+
+NOTE What?
+
+00:00:20.130 --> 00:00:21.910
+Firstly what are we talking about here?
+
+00:00:21.911 --> 00:00:26.692
+So in general, it's possible, if you have any Org nodes,
+
+00:00:26.693 --> 00:00:31.315
+to export them as LaTeX. Given some extra configuration,
+
+00:00:31.316 --> 00:00:34.956
+it's possible, basically, to reproduce any LaTeX setup
+
+00:00:34.957 --> 00:00:42.031
+that you would use to create documents with an Org file.
+
+00:00:42.032 --> 00:00:46.753
+In my case, I'm using that system to take some notes
+
+00:00:46.754 --> 00:00:48.453
+that I have in my org-roam system
+
+00:00:48.454 --> 00:00:52.239
+and to export that into finished academic papers
+
+00:00:52.240 --> 00:00:56.279
+that you can submit eventually to a conference and so on.
+
+00:00:56.280 --> 00:00:59.439
+Actually, before I submit that proposal, after I submit
+
+00:00:59.440 --> 00:01:03.559
+that proposal, I just noticed that Mike Hamrick in last
+
+00:01:03.560 --> 00:01:07.879
+year's EmacsConf made a very extensive presentation about
+
+00:01:07.880 --> 00:01:13.039
+org export. But in here, I just want to showcase my usage of
+
+00:01:13.040 --> 00:01:16.959
+org-roam and to present what are the configuration I'm
+
+00:01:16.960 --> 00:01:21.376
+using to be able to achieve that. Why do that?
+
+NOTE Why?
+
+00:01:21.377 --> 00:01:23.037
+In general, like I said, I'm using that
+
+00:01:23.038 --> 00:01:26.639
+as part of my writing system, so in
+
+00:01:26.640 --> 00:01:30.239
+having org-roam notes that can be exported as a document
+
+00:01:30.240 --> 00:01:34.159
+make for a great workflow in my opinion. It makes Org even
+
+00:01:34.160 --> 00:01:38.839
+more versatile, so if you use that for maybe writing code in
+
+00:01:38.840 --> 00:01:41.599
+the literate programming, now you're going to be also able
+
+00:01:41.600 --> 00:01:47.559
+to export that into any format you want.
+
+00:01:47.560 --> 00:01:49.879
+The Org notes are very clean. In my opinion, it looks
+
+00:01:49.880 --> 00:01:53.799
+better to work in Org rather than editing LaTeX code
+
+00:01:53.800 --> 00:01:58.959
+directly. The centralized bibliography system is also
+
+00:01:58.960 --> 00:02:02.559
+great because it allows to have just a few notes that you can
+
+00:02:02.560 --> 00:02:06.599
+reference everywhere and have links to them. Of course
+
+00:02:06.600 --> 00:02:09.479
+everything is happening inside of Emacs so you have access
+
+00:02:09.480 --> 00:02:13.359
+to all the tools you are used to like Magit or Projectile and
+
+00:02:13.360 --> 00:02:16.214
+whatnot.
+
+NOTE Challenges
+
+00:02:16.215 --> 00:02:18.599
+However, to quote one of the funniest recent
+
+00:02:18.600 --> 00:02:22.999
+video about Emacs: "[With LaTeX,] I used to spend hours trying to
+
+00:02:23.000 --> 00:02:25.599
+get the image on the right page. Now I use Org Mode LaTeX and
+
+00:02:25.600 --> 00:02:28.759
+just accept it's impossible." Like all the jokes in that
+
+00:02:28.760 --> 00:02:32.799
+video, it lands in very well because there is some truth to
+
+00:02:32.800 --> 00:02:38.239
+that in that with that system you are not getting rid of
+
+00:02:38.240 --> 00:02:41.239
+the complexity of LaTeX, so if you have problems, you're going to
+
+00:02:41.240 --> 00:02:45.959
+have to deal with the very long logs. It's a layer on top of
+
+00:02:45.960 --> 00:02:50.519
+LaTeX, so if you need to debug your configuration, if you
+
+00:02:50.520 --> 00:02:52.999
+want to adjust something specific, you would need to be
+
+00:02:53.000 --> 00:02:58.879
+proficient in LaTeX and also in being very at ease with
+
+00:02:58.880 --> 00:03:03.119
+your Emacs configuration. The way to use the Org export is
+
+00:03:03.120 --> 00:03:06.639
+less documented than using LaTeX so if you want to implement
+
+00:03:06.640 --> 00:03:09.959
+something, probably it's going to be described in pure LaTeX,
+
+00:03:09.960 --> 00:03:13.599
+and then you're going to need to adjust that to make it work
+
+00:03:13.600 --> 00:03:17.679
+inside your Org files. I explained before that the
+
+00:03:17.680 --> 00:03:20.959
+bibliography system is great, although it's very picky
+
+00:03:20.960 --> 00:03:26.359
+on the way it works, especially to be exported. Depending
+
+00:03:26.360 --> 00:03:29.239
+on the template you are using, you might run into issues
+
+00:03:29.240 --> 00:03:33.199
+with some packages that are in conflict, so there is
+
+00:03:33.200 --> 00:03:35.319
+that to be taken in mind.
+
+NOTE Basic Org to PDF
+
+00:03:35.320 --> 00:03:41.519
+In general, if you have a Org note, you can simply export it
+
+00:03:41.520 --> 00:03:46.199
+with a C-c C-e and l o with the menu that appears. I can
+
+00:03:46.200 --> 00:03:49.479
+show that briefly: C-e, then you have the menu. You can select
+
+00:03:49.480 --> 00:03:53.519
+l and o to export. That works very well. In general,
+
+00:03:53.520 --> 00:03:56.959
+with that, you are able to deal with everything that you have
+
+00:03:56.960 --> 00:03:59.959
+in your normal Org notes. If you have images, tables,
+
+00:03:59.960 --> 00:04:03.559
+links, it's going to be exported in a way that looks decent.
+
+00:04:03.560 --> 00:04:08.060
+That's what we are starting with.
+
+NOTE How to LaTeX properly, though?
+
+00:04:08.061 --> 00:04:11.543
+However, if you want to make a publication,
+
+00:04:11.544 --> 00:04:13.479
+if you have a template that you receive
+
+00:04:13.480 --> 00:04:17.479
+from a conference or whatnot, you want to be able to adapt
+
+00:04:17.480 --> 00:04:20.519
+your Org notes to be able to export it exactly the way you
+
+00:04:20.520 --> 00:04:23.039
+want. I'm going to present the four points that I'm
+
+00:04:23.040 --> 00:04:25.919
+showing here that are, for me, the elements that you need to
+
+00:04:25.920 --> 00:04:29.879
+be careful with when you try to work with templates and
+
+00:04:29.880 --> 00:04:32.303
+exporting to LaTeX.
+
+NOTE LaTeX-specific headers
+
+00:04:32.304 --> 00:04:34.525
+Firstly, you have headers. So basically,
+
+00:04:34.526 --> 00:04:37.119
+this allows to add LaTeX elements that are going
+
+00:04:37.120 --> 00:04:41.559
+to be at the top of the file. You're going to have the title.
+
+00:04:41.560 --> 00:04:44.119
+You're going to have your extra packages here. You're going
+
+00:04:44.120 --> 00:04:46.959
+to have your class. I'm going to present that later. That's
+
+00:04:46.960 --> 00:04:50.479
+the part that you're going to adjust to make it look like the
+
+00:04:50.480 --> 00:04:54.624
+.tex template that you receive.
+
+NOTE Using a formatting class file
+
+00:04:54.625 --> 00:04:58.625
+Then you have the formatting class file. That's a .cls file
+
+00:04:58.626 --> 00:05:01.786
+that you would receive as a part of the template.
+
+00:05:01.787 --> 00:05:08.147
+This one is used instead of the typical doc class like article.
+
+00:05:08.148 --> 00:05:10.588
+The way I'm using them is to add an entry,
+
+00:05:10.589 --> 00:05:12.759
+like add an element to the list or get a
+
+00:05:12.760 --> 00:05:18.599
+class in my Emacs init. This way I can use the CLS file
+
+00:05:18.600 --> 00:05:22.719
+directly and also give the parameters that I want. In that
+
+00:05:22.720 --> 00:05:26.402
+case, I'm going to have a apris.cls next to my Org note,
+
+00:05:26.403 --> 00:05:31.394
+and it's going to be able to to use it.
+
+NOTE Using a different LaTeX command
+
+00:05:31.395 --> 00:05:33.599
+A third element is, in some cases,
+
+00:05:33.600 --> 00:05:38.359
+you might want to use a different LaTeX compiler to build
+
+00:05:38.360 --> 00:05:41.719
+your project, to build your notes. That can be done per
+
+00:05:41.720 --> 00:05:45.319
+file, per note, in my opinion, that's the most flexible way,
+
+00:05:45.320 --> 00:05:48.519
+by editing, by adding this line as the very first line of your
+
+00:05:48.520 --> 00:05:52.599
+file and thus changing the LaTeX PDF process variable. And
+
+00:05:52.600 --> 00:06:00.461
+in there, you can put multiple commands in a row.
+
+00:06:00.462 --> 00:06:01.959
+For example you can have the shell
+
+00:06:01.960 --> 00:06:06.079
+escape to have the minted note block, the BibTeX element, so
+
+00:06:06.080 --> 00:06:08.959
+that works very well. When you add that, you need to
+
+00:06:08.960 --> 00:06:13.137
+reload your file, though. Something to keep in mind.
+
+NOTE References links for bibliography
+
+00:06:13.138 --> 00:06:16.999
+Lastly, you have the bibliography. When you have a reference,
+
+00:06:17.000 --> 00:06:19.879
+when you want to put a reference, you can use the
+
+00:06:19.880 --> 00:06:23.719
+org-roam-bibtex package that needs to be installed. Then you
+
+00:06:23.720 --> 00:06:27.759
+have some configuration to to be set so you have the bibtex
+
+00:06:27.760 --> 00:06:31.199
+compilation bibliography, where you explain where is your
+
+00:06:31.200 --> 00:06:35.959
+your reference file, your bib file. You can also give a path
+
+00:06:35.960 --> 00:06:40.079
+for where to search for PDFs. If you have matching names
+
+00:06:40.080 --> 00:06:44.039
+with your BibTeX entries and some PDF files in there,
+
+00:06:44.040 --> 00:06:46.479
+they're going to be linked. I'm going to show that later. So
+
+00:06:46.480 --> 00:06:49.199
+that's something that's going to be part of your init
+
+00:06:49.200 --> 00:06:53.039
+configuration as part of the org-roam-bibtex package
+
+00:06:53.040 --> 00:06:56.479
+configuration. Then in the node you are exporting, you want
+
+00:06:56.480 --> 00:07:01.319
+to add a section called reference. Here you can set a style
+
+00:07:01.320 --> 00:07:06.479
+for the bibliography. Again you put which of the
+
+00:07:06.480 --> 00:07:09.719
+reference file you want to use.
+
+NOTE Examples
+
+00:07:09.720 --> 00:07:15.559
+With all of that, I'm going to show some examples. Here I
+
+00:07:15.560 --> 00:07:21.759
+have an Org note that I used as the file to be exported into a
+
+00:07:21.760 --> 00:07:26.719
+publication. You can see up front, I set all my headers
+
+00:07:26.720 --> 00:07:30.519
+package. I have some extra package I put. I have the class
+
+00:07:30.520 --> 00:07:35.839
+that is something that is next to it. You can see in the
+
+00:07:35.840 --> 00:07:41.239
+files, I have the apris.cls just here.
+
+NOTE Tags
+
+00:07:41.240 --> 00:07:47.119
+Also, with all of that, you can also add tags. I
+
+00:07:47.120 --> 00:07:49.399
+didn't explain that, but you can also ignore some
+
+00:07:49.400 --> 00:07:52.719
+sections. That's quite convenient as well. Here we
+
+00:07:52.720 --> 00:07:57.359
+have some section, and if you want to add a bibliography,
+
+00:07:57.360 --> 00:08:04.999
+you're going to do c l cite:, you can put some cite entry, put
+
+00:08:05.000 --> 00:08:08.199
+any file in there, no description, and you're going to put
+
+00:08:08.200 --> 00:08:11.919
+some link like that. It's very convenient because, firstly,
+
+00:08:11.920 --> 00:08:14.519
+it's going to be exported as a reference like I'm going to
+
+00:08:14.520 --> 00:08:18.079
+show later, but also it gives you access to it directly from
+
+00:08:18.080 --> 00:08:22.679
+the note. If I click the thing here, I have some menu, I can
+
+00:08:22.680 --> 00:08:31.039
+open the bibliography page.
+
+00:08:31.040 --> 00:08:34.799
+I can also open the PDF that was linked to it. If I do
+
+00:08:34.800 --> 00:08:38.919
+that, here is the file that pops up that was linked to the
+
+00:08:38.920 --> 00:08:44.959
+bibliography. That's great. Otherwise, within
+
+00:08:44.960 --> 00:08:47.759
+that document, you're going to have other things you can
+
+00:08:47.760 --> 00:08:53.279
+have. Figures with parameters set on top, footnotes as well if
+
+00:08:53.280 --> 00:08:57.279
+that's something that you need. For example, here it's a
+
+00:08:57.280 --> 00:09:00.959
+section that's not exported, but you can have your
+
+00:09:00.960 --> 00:09:04.079
+normal footnotes. We can go back and forth. If they are in
+
+00:09:04.080 --> 00:09:07.759
+the exported section, they're going to be
+
+00:09:07.760 --> 00:09:11.919
+managed. So with that, you can export the notes. You're going to
+
+00:09:11.920 --> 00:09:16.879
+C-c C-e so you have that menu for exporting
+
+00:09:16.880 --> 00:09:23.479
+Org files. You do l for LaTeX and then o for running directly as
+
+00:09:23.480 --> 00:09:27.399
+PDF and opening it. It takes a little while to build. Here we
+
+00:09:27.400 --> 00:09:31.359
+are. The templates have been used, so there is a
+
+00:09:31.360 --> 00:09:34.879
+two-column situation happening, we have a specific header
+
+00:09:34.880 --> 00:09:41.519
+format and figures and the citation that we put. It's
+
+00:09:41.520 --> 00:09:45.079
+happening, it's shown here, and it's also going to be
+
+00:09:45.080 --> 00:09:49.879
+visible at the end in the reference section. Like I
+
+00:09:49.880 --> 00:09:55.479
+said, a fully ready, finished paper can be
+
+00:09:55.480 --> 00:10:01.119
+produced this way. That's all that I had for today.
+
+00:10:01.120 --> 00:10:03.199
+Thank you very much for your attention. I am
+
+00:10:03.200 --> 00:10:06.232
+available for questions on IRC or in the video chat.
+
+00:10:06.233 --> 00:10:07.400
+Thank you.
diff --git a/2024/captions/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--answers.vtt b/2024/captions/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--answers.vtt
new file mode 100644
index 00000000..c361ae62
--- /dev/null
+++ b/2024/captions/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--answers.vtt
@@ -0,0 +1,873 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:10.839
+And I believe we are live. Hi, Eric, how are you doing? Very
+
+00:00:10.840 --> 00:00:15.599
+well, thanks. It's a pleasure to have you as one of our
+
+00:00:15.600 --> 00:00:19.639
+speakers but it's also very nice to see you present about
+
+00:00:19.640 --> 00:00:24.239
+pgmacs because I found your talk to be very didactic and very
+
+00:00:24.240 --> 00:00:26.479
+visual. So thank you for taking the time to do a very nice
+
+00:00:26.480 --> 00:00:31.079
+presentation. I wanted to give the opportunity as I do with
+
+00:00:31.080 --> 00:00:36.279
+other speakers to maybe talk about some stuff that you could
+
+00:00:36.280 --> 00:00:39.279
+not include into the talk because of the format. So is there
+
+00:00:39.280 --> 00:00:41.319
+anything you'd like to share with the viewers that you
+
+00:00:41.320 --> 00:00:45.439
+weren't able to include?
+
+00:00:45.440 --> 00:00:50.719
+Oh, I think I gave most of the most of the relevant
+
+00:00:50.720 --> 00:00:54.759
+information. This is a fairly young application. I've been
+
+00:00:54.760 --> 00:00:58.159
+developing this since roughly the beginning of the year. So
+
+00:00:58.160 --> 00:01:02.879
+there are probably some rough edges that people will run
+
+00:01:02.880 --> 00:01:07.479
+into if they use Postgres differently from what I do. Or they
+
+00:01:07.480 --> 00:01:10.919
+hear maybe conflicts with some other Emacs packages that
+
+00:01:10.920 --> 00:01:14.959
+people use that I don't use. So I would really welcome people
+
+00:01:14.960 --> 00:01:19.359
+trying it out and sending out bug reports if they do
+
+00:01:19.360 --> 00:01:23.479
+encounter some. Yeah, I mean, it's usually... Go on,
+
+00:01:23.480 --> 00:01:29.079
+please. Yeah, that would certainly help to make sure it's
+
+00:01:29.080 --> 00:01:31.599
+nice and robust. And of course, if you're letting this loose
+
+00:01:31.600 --> 00:01:35.959
+on some production database that you might have, you want
+
+00:01:35.960 --> 00:01:41.239
+this to be quite robust, obviously. Yeah, indeed. Because
+
+00:01:41.240 --> 00:01:43.879
+usually, you know, when you start publishing packages like
+
+00:01:43.880 --> 00:01:46.599
+this, that's when you realize that it has bad interaction
+
+00:01:46.600 --> 00:01:49.759
+with other modes in the Emacs of other persons. But
+
+00:01:49.760 --> 00:01:52.039
+especially when you're dealing with databases, you also
+
+00:01:52.040 --> 00:01:54.639
+realize that the domain space of what you're trying to do
+
+00:01:54.640 --> 00:01:58.999
+with your mode also is hugely dependent on what people have
+
+00:01:59.000 --> 00:02:03.839
+in their database, which schema they have. So, indeed, if
+
+00:02:03.840 --> 00:02:05.839
+you have been interested, and I think plenty of people have
+
+00:02:05.840 --> 00:02:09.039
+been interested by what you've presented, part of the
+
+00:02:09.040 --> 00:02:11.679
+reason a software becomes great is that you've got plenty of
+
+00:02:11.680 --> 00:02:14.759
+people making bug reports and making sure that all the
+
+00:02:14.760 --> 00:02:18.799
+faults have been ironed out. So, you know what your task is. I
+
+00:02:18.800 --> 00:02:21.319
+will also ask you, particularly right now, people
+
+00:02:21.320 --> 00:02:24.519
+currently viewing, to add your questions on the pad as
+
+00:02:24.520 --> 00:02:27.639
+usual, because you've had plenty of nice reactions, but I'm
+
+00:02:27.640 --> 00:02:30.799
+sure you have plenty of questions as well. So Eric, what I'll
+
+00:02:30.800 --> 00:02:33.759
+be doing, I'll be reading you the questions so that it's a
+
+00:02:33.760 --> 00:02:37.439
+little more didactic. Starting with the first one. This is
+
+NOTE Q: Do you know if PGmacs works with TRAMP?
+
+00:02:37.440 --> 00:02:41.079
+brilliant, thank you. Do you know if pgmacs works with TRAMP?
+
+00:02:41.080 --> 00:02:44.119
+I often use TRAMP multi-hop to access databases both
+
+00:02:44.120 --> 00:02:46.959
+remotely when accessing via bastion server and locally
+
+00:02:46.960 --> 00:02:49.639
+when using OCI containers. I believe you've already
+
+00:02:49.640 --> 00:02:53.079
+answered but if you could just perhaps read your answer as
+
+00:02:53.080 --> 00:02:58.799
+well for everyone to benefit from it. Yep, sure, that's my
+
+00:02:58.800 --> 00:03:02.319
+comment indeed. So I haven't currently implemented any
+
+00:03:02.320 --> 00:03:07.559
+TRAMP support. I'm not sure that TRAMP is really useful for
+
+00:03:07.560 --> 00:03:11.439
+this type of situation, because as I understand it, TRAMP is
+
+00:03:11.440 --> 00:03:17.159
+establishing SSH connections itself to remote servers.
+
+00:03:17.160 --> 00:03:22.519
+pgmacs is doing the same thing, so it doesn't currently have
+
+00:03:22.520 --> 00:03:27.399
+any support for hooking in with the TRAMP support. Right.
+
+00:03:27.400 --> 00:03:31.439
+Pardon me if I missed the presentation. Oh, go on, please. I
+
+00:03:31.440 --> 00:03:34.359
+guess you could set up an SSH tunnel. It does work with an SSH
+
+00:03:34.360 --> 00:03:39.919
+tunnel, obviously, but there's no support for hooking into
+
+00:03:39.920 --> 00:03:43.799
+an SSH tunnel that TRAMP might be able to create. I'm not sure
+
+00:03:43.800 --> 00:03:46.959
+TRAMP actually uses SSH tunnels rather than direct
+
+00:03:46.960 --> 00:03:51.439
+commands, but anyway. Yeah, I think that might be useful.
+
+00:03:51.440 --> 00:03:54.759
+Yeah, I don't know either. I don't have the answer whether
+
+00:03:54.760 --> 00:03:59.039
+TRAMP actually can create tunnels like this. I'm usually
+
+00:03:59.040 --> 00:04:02.039
+used to TRAMP connecting to an endpoint, be it a directory or
+
+00:04:02.040 --> 00:04:06.239
+a file, and the tunnel is just you accessing the file. But
+
+00:04:06.240 --> 00:04:08.959
+usually, if you're trying to access a remote Postgres
+
+00:04:08.960 --> 00:04:12.039
+database, you would probably manage the port forwarding in
+
+00:04:12.040 --> 00:04:15.199
+a separate terminal just to be able to make sure that
+
+00:04:15.200 --> 00:04:17.759
+everything maps correctly to your machine, and then you
+
+00:04:17.760 --> 00:04:21.959
+would launch pgmacs with the forward port information.
+
+00:04:21.960 --> 00:04:25.519
+That's, I assume, how you would do it anyway. But yeah, I
+
+00:04:25.520 --> 00:04:29.119
+mean, if you could specify what you mean by TRAMP support and
+
+00:04:29.120 --> 00:04:31.839
+if you have something specific in mind, I'm talking to the
+
+00:04:31.840 --> 00:04:35.119
+questioner, feel free to specify and we'll see if you can
+
+00:04:35.120 --> 00:04:38.239
+answer it. But in the meantime, moving to the next question.
+
+NOTE Q: How did you come up with this brilliant idea?
+
+00:04:38.240 --> 00:04:41.999
+Great work, I'm impressed. How did you come up with this
+
+00:04:42.000 --> 00:04:49.079
+brilliant idea, I assume, to create pgmacs? Well, thanks for
+
+00:04:49.080 --> 00:04:52.839
+the compliment. It's a lot of fun developing something
+
+00:04:52.840 --> 00:04:57.799
+which is, as I said, such a small amount of code and which
+
+00:04:57.800 --> 00:05:02.359
+provides quite a bit of useful functionality. In
+
+00:05:02.360 --> 00:05:06.839
+particular, if you compare it with existing Terminal mode
+
+00:05:06.840 --> 00:05:12.799
+applications for manipulating Postgres data, they are
+
+00:05:12.800 --> 00:05:19.279
+not as extensible as Emacs is naturally. So I actually got
+
+00:05:19.280 --> 00:05:23.439
+the idea for developing this when I first tested out the
+
+00:05:23.440 --> 00:05:27.439
+SQLite mode, which is available in Emacs 29.1.
+
+00:05:27.440 --> 00:05:31.879
+And I thought, well, that's really quite impressive. And it
+
+00:05:31.880 --> 00:05:37.359
+allows you to delete rows and insert content and so on. And I
+
+00:05:37.360 --> 00:05:42.359
+was thinking, yeah, Emacs is a, is a useful environment to do
+
+00:05:42.360 --> 00:05:50.079
+that. And since several years ago, when I was doing my PhD, so
+
+00:05:50.080 --> 00:05:53.999
+to avoid doing my PhD, I was developing Emacs, I was
+
+00:05:54.000 --> 00:05:58.399
+developing stuff in Emacs Lisp and one of the libraries I
+
+00:05:58.400 --> 00:06:02.959
+developed was an interface to Postgres over the network. So
+
+00:06:02.960 --> 00:06:08.039
+that's the library called pg.el, which is used by pgmacs to
+
+00:06:08.040 --> 00:06:14.239
+access Postgres and to do all the parsing of data which
+
+00:06:14.240 --> 00:06:19.279
+arrives in Postgres formats into the Emacs Lisp into the
+
+00:06:19.280 --> 00:06:22.999
+Emacs corresponding versions. So, for example, integers
+
+00:06:23.000 --> 00:06:25.399
+are passed as Emacs integers, floating point numbers as
+
+00:06:25.400 --> 00:06:30.839
+floating point numbers, and so on. Right, yeah. I mean, it's
+
+00:06:30.840 --> 00:06:34.439
+pretty needed, obviously, when you have such a tooling like
+
+00:06:34.440 --> 00:06:37.359
+this, to make sure that the type conversion works properly,
+
+00:06:37.360 --> 00:06:39.879
+because the types that you have in Postgres do not
+
+00:06:39.880 --> 00:06:43.879
+necessarily map over to what we have in Emacs. Like, I'm
+
+00:06:43.880 --> 00:06:49.239
+interested, how would you handle g's and b columns in pgmacs?
+
+00:06:49.240 --> 00:06:55.039
+JSON is mapped to an edis dict, a dictionary.
+
+00:06:55.040 --> 00:07:03.759
+It depends on the top level object type for your JSON column.
+
+00:07:03.760 --> 00:07:07.599
+If it's an array, it's mapped to an Emacs Lisp array. If it's a
+
+00:07:07.600 --> 00:07:12.639
+dict, which is most common, it's mapped to an Emacs Lisp
+
+00:07:12.640 --> 00:07:17.679
+dictionary. All right, well it makes perfect sense. So I can
+
+00:07:17.680 --> 00:07:21.839
+break in with a question. Thanks, I just helped myself to the
+
+00:07:21.840 --> 00:07:26.159
+BBB privilege of kind of running around backstage, being a
+
+00:07:26.160 --> 00:07:31.679
+helper backstage. So thanks for your awesome talk, Eric. I
+
+00:07:31.680 --> 00:07:36.719
+super appreciated it. You know, I noticed that you that
+
+00:07:36.720 --> 00:07:43.159
+you're on a slightly older version of Emacs that I deal with
+
+00:07:43.160 --> 00:07:49.519
+in helping with producing the Windows binaries I run into
+
+00:07:49.520 --> 00:07:53.839
+and with some other stuff I do. I'm dealing with that
+
+00:07:53.840 --> 00:07:56.919
+friction of sometimes I've got some work of my own that
+
+00:07:56.920 --> 00:07:59.719
+applies against a specific version of Emacs and it's a bunch
+
+00:07:59.720 --> 00:08:02.519
+of work to think about moving it forward. Just curious if you
+
+00:08:02.520 --> 00:08:06.479
+started thinking about that or if you routine, if that's a
+
+00:08:06.480 --> 00:08:09.919
+routine that you haven't done or there's something maybe
+
+00:08:09.920 --> 00:08:14.599
+specifically going on with, you know, with trunk
+
+00:08:14.600 --> 00:08:20.599
+development that looks intimidating to deal with. Thanks
+
+00:08:20.600 --> 00:08:24.959
+for the comment. I'm not sure I'm using a really old version
+
+00:08:24.960 --> 00:08:29.239
+for Windows. I don't really develop often on Windows, but I I
+
+00:08:29.240 --> 00:08:32.639
+occasionally check that it works, and I took a screenshot
+
+00:08:32.640 --> 00:08:34.799
+that I included in the slides here, but I think I'm using
+
+00:08:34.800 --> 00:08:40.559
+29.4, the current version on Windows. I thought I saw 29.1,
+
+00:08:40.560 --> 00:08:48.839
+so that's probably my, I probably missed it when it went by.
+
+00:08:48.840 --> 00:08:54.879
+My bad. No, no, I use it via the choco package updater so that
+
+00:08:54.880 --> 00:08:58.479
+updates the Emacs version quite easily on Windows. So
+
+00:08:58.480 --> 00:09:03.079
+thanks for your work on maintaining Windows binaries. I
+
+00:09:03.080 --> 00:09:07.519
+realize that was- I sit downstream at the end of a lot of other
+
+00:09:07.520 --> 00:09:11.399
+people's hard work and then just focus on trying to QA well
+
+00:09:11.400 --> 00:09:15.559
+and help catch problems early. It's really fun. But of
+
+00:09:15.560 --> 00:09:16.399
+course, my pleasure.
+
+00:09:16.400 --> 00:09:21.799
+Coming back to the previous question, so the the
+
+00:09:21.800 --> 00:09:26.919
+questionnaire actually provided a little more context. So
+
+NOTE TRAMP continued
+
+00:09:26.920 --> 00:09:30.599
+with docker.el, kubel, etc, it's often possible to, for
+
+00:09:30.600 --> 00:09:33.919
+example, select a container pod or whatever that is hosted
+
+00:09:33.920 --> 00:09:36.639
+on the machine you've connected to via TRAMP, such as
+
+00:09:36.640 --> 00:09:41.799
+Podman, colon image colon path and trigger a terminal shell
+
+00:09:41.800 --> 00:09:44.959
+as well as pull forward on other similar things. It'd be nice
+
+00:09:44.960 --> 00:09:47.679
+to be able to use this tool in a similar way since it would open
+
+00:09:47.680 --> 00:09:49.919
+up the ability to use it with complex connection
+
+00:09:49.920 --> 00:09:53.679
+configuration. Doing SSH tunnel manually is of course
+
+00:09:53.680 --> 00:09:56.879
+totally fine in practice and if it is actually the case
+
+00:09:56.880 --> 00:10:01.319
+personally when I need to remote into a kubernetes machine I
+
+00:10:01.320 --> 00:10:05.239
+use POSIX script that I use on most of my machines but I don't
+
+00:10:05.240 --> 00:10:08.599
+do it inside Emacs. But yeah, if such a thing is possible via
+
+00:10:08.600 --> 00:10:11.039
+TRAMP, it definitely feels like it would be possible to do
+
+00:10:11.040 --> 00:10:14.919
+something similar in pgmacs. So perhaps that's a path of
+
+00:10:14.920 --> 00:10:19.559
+investigation for you that has opened up. Yeah, thanks for
+
+00:10:19.560 --> 00:10:22.759
+these comments. I'll look into that indeed if people have
+
+00:10:22.760 --> 00:10:26.159
+some shortcuts registered in TRAMP. So not for a terminal,
+
+00:10:26.160 --> 00:10:29.599
+because pgmacs won't work through a terminal, but through a
+
+00:10:29.600 --> 00:10:33.439
+port forward, then that would be convenient. I'll see how
+
+00:10:33.440 --> 00:10:38.639
+easy that is to set up. Yeah, I'm pretty sure the way it works
+
+00:10:38.640 --> 00:10:41.279
+is that it starts some processes in the background in Emacs
+
+00:10:41.280 --> 00:10:45.359
+just to either maintain the port forward or to maybe remap
+
+00:10:45.360 --> 00:10:49.239
+some kubecon things or whatever. So with pgmacs,
+
+00:10:49.240 --> 00:10:51.879
+considering complex pipelines to get to the end
+
+00:10:51.880 --> 00:10:54.679
+destination, it feels like it would be possible to do
+
+00:10:54.680 --> 00:10:57.439
+something. But perhaps it's not the responsibility of
+
+00:10:57.440 --> 00:11:00.199
+pgmacs, perhaps it's the responsibility of another,
+
+00:11:00.200 --> 00:11:03.639
+perhaps something that would target TRAMP more so than
+
+00:11:03.640 --> 00:11:08.399
+pgmacs. But it's nice to see again how the beauty of Emacs
+
+00:11:08.400 --> 00:11:12.119
+is that everything is Elisp at the end, and the way they
+
+00:11:12.120 --> 00:11:16.079
+interact, you might want to question yourself whether this
+
+00:11:16.080 --> 00:11:18.919
+belongs more to pgmacs or more to TRAMP, but at the end of the
+
+00:11:18.920 --> 00:11:22.439
+day, both applications will be able to benefit from the
+
+00:11:22.440 --> 00:11:24.759
+functions of the other. So that's the beauty of the
+
+00:11:24.760 --> 00:11:29.159
+philosophy right here. I do see... Absolutely, I agree.
+
+00:11:29.160 --> 00:11:32.279
+Sorry, before we move to different questions, an
+
+00:11:32.280 --> 00:11:36.759
+additional point. I should point out that to warn people
+
+00:11:36.760 --> 00:11:41.159
+that probably running over an SSH tunnel is going to be a bit
+
+00:11:41.160 --> 00:11:46.839
+slow. I mostly use it on my own machine via a local Unix
+
+00:11:46.840 --> 00:11:50.439
+connection. And for some reason that I haven't understood,
+
+00:11:50.440 --> 00:11:55.119
+pgmacs is quite a bit slower when it's even connecting to the
+
+00:11:55.120 --> 00:12:00.359
+same database on the local machine, but via Emacs' network
+
+00:12:00.360 --> 00:12:05.039
+support instead of via the Unix socket support. There is
+
+00:12:05.040 --> 00:12:11.639
+like a factor 10 difference in throughput and in latency. I
+
+00:12:11.640 --> 00:12:15.839
+don't really understand why currently, because it's using
+
+00:12:15.840 --> 00:12:21.919
+exactly the same Emacs Lisp level primitives. And when you
+
+00:12:21.920 --> 00:12:24.799
+do this using other libraries like libpq, which is the
+
+00:12:24.800 --> 00:12:30.639
+Postgres standard official library for connecting to
+
+00:12:30.640 --> 00:12:34.319
+Postgres, there's not such a performance difference. So
+
+00:12:34.320 --> 00:12:39.759
+there's probably something that is not working perfectly
+
+00:12:39.760 --> 00:12:43.879
+in the Emacs network support. I'll have to see whether I can
+
+00:12:43.880 --> 00:12:48.679
+investigate how to improve that performance. Yeah, I'm
+
+00:12:48.680 --> 00:12:52.999
+going to say it sounds like a great bug to have because it
+
+00:12:53.000 --> 00:12:57.319
+feels like it will allow you to dig deeper into Emacs to
+
+00:12:57.320 --> 00:12:59.679
+understand what is going on here. Because as you said,
+
+00:12:59.680 --> 00:13:01.519
+normally it's supposed to work exactly the same,
+
+00:13:01.520 --> 00:13:04.319
+especially if it's still in your local machine, but it
+
+00:13:04.320 --> 00:13:07.919
+doesn't. Personally, that's the kind of bug that I really
+
+00:13:07.920 --> 00:13:11.199
+like and that I'd like to spend more time investigating. So
+
+00:13:11.200 --> 00:13:14.759
+perhaps you might think otherwise, but I wish you luck on the
+
+00:13:14.760 --> 00:13:18.599
+debugging with this particular matter. All right, moving
+
+00:13:18.600 --> 00:13:21.519
+to the last question that we have and then we'll probably go
+
+00:13:21.520 --> 00:13:22.965
+on a little bit of a break.
+
+NOTE Q: Is sqlite-mode also capable of all of this functionality (table relations, etc)? If not, will it be possible to abstract out this functionality from pgmacs somehow?
+
+00:13:22.966 --> 00:13:25.399
+Question. Is SQLite mode also
+
+00:13:25.400 --> 00:13:28.439
+capable of all of this functionality, table relations,
+
+00:13:28.440 --> 00:13:31.559
+etc.? If not, would it be possible to abstract out this
+
+00:13:31.560 --> 00:13:33.279
+functionality from pgmacs somehow?
+
+00:13:33.280 --> 00:13:41.319
+So I'm not very familiar with SQLite because I don't really
+
+00:13:41.320 --> 00:13:46.439
+use it very much myself. I'm not sure I can answer that
+
+00:13:46.440 --> 00:13:53.079
+question. Sorry about that. I think it is probably a bit more
+
+00:13:53.080 --> 00:13:56.639
+basic because SQLite itself is quite a bit more basic in
+
+00:13:56.640 --> 00:14:01.639
+terms of the types of indexes it's able to support and the
+
+00:14:01.640 --> 00:14:09.199
+types of constraints it's able to support. Is it relevant to
+
+00:14:09.200 --> 00:14:13.799
+create an abstract API for connecting to databases? I think
+
+00:14:13.800 --> 00:14:19.639
+there is already actually a library that abstracts out from
+
+00:14:19.640 --> 00:14:25.439
+SQLite and Postgres. Postgres, when you connect to it via a
+
+00:14:25.440 --> 00:14:29.159
+PSQL subsystem,
+
+00:14:29.160 --> 00:14:38.439
+it might be worthwhile doing that, but there are often a few
+
+00:14:38.440 --> 00:14:42.279
+minor differences in SQL syntax and so on between
+
+00:14:42.280 --> 00:14:45.879
+databases. So it might be difficult to have something that
+
+00:14:45.880 --> 00:14:53.159
+really works with generic queries in an effective way. All
+
+00:14:53.160 --> 00:14:58.239
+these SQL dialects are a little bit different,
+
+00:14:58.240 --> 00:15:02.319
+unfortunately. So there was another question about I was
+
+00:15:02.320 --> 00:15:06.510
+just going to read out the next question.
+
+NOTE Q: Would it be possible to move it into Emacs tree? Are the maintainers interested in it?
+
+00:15:06.511 --> 00:15:07.519
+So have you thought
+
+00:15:07.520 --> 00:15:12.559
+about integrating your work into the Emacs tree? Do you know
+
+00:15:12.560 --> 00:15:17.599
+if people are interested? This was a question from the past.
+
+00:15:17.600 --> 00:15:24.639
+Yeah, I think it's probably a bit young to do so, so far.
+
+00:15:24.640 --> 00:15:30.119
+I'm updating it quite regularly. Maybe once it's more
+
+00:15:30.120 --> 00:15:35.399
+stabilized, I wouldn't necessarily object to this. I have
+
+00:15:35.400 --> 00:15:38.559
+some sort of philosophical objections to giving away my
+
+00:15:38.560 --> 00:15:42.519
+copyright, so I'm not sure that will actually be possible.
+
+00:15:42.520 --> 00:15:48.079
+Oh, that'd be interesting. I'd love to get you on maybe a
+
+00:15:48.080 --> 00:15:51.639
+panel talk about that sometime. Something I'd think about.
+
+00:15:51.640 --> 00:15:55.999
+Well, from a very simple point of view, I think that the
+
+00:15:56.000 --> 00:16:01.159
+copyright and the system works well with the existing
+
+00:16:01.160 --> 00:16:05.319
+license and without a license transfer, so I don't feel that
+
+00:16:05.320 --> 00:16:07.766
+the, sorry, without a copyright transfer,
+
+00:16:07.767 --> 00:16:14.679
+I don't feel that the copyright transfer is really a necessary step for
+
+00:16:14.680 --> 00:16:21.639
+taking things away from maintainers. It feels like asking
+
+00:16:21.640 --> 00:16:26.559
+the maintainers to give up on some of their copyright...
+
+00:16:26.560 --> 00:16:29.999
+Indeed. Yeah, I see where that's a little beyond our scope,
+
+00:16:30.000 --> 00:16:33.519
+but it's a fascinating topic and I appreciate your sharing
+
+00:16:33.520 --> 00:16:36.959
+your views there. I mean, that sounds like a whole topic of
+
+00:16:36.960 --> 00:16:41.599
+its own, frankly.
+
+00:16:41.600 --> 00:16:47.039
+Yeah. Corwin, do you want to fill the last question? Sure. So
+
+00:16:47.040 --> 00:16:52.039
+the question was, I almost missed this one, so glad I didn't.
+
+00:16:52.040 --> 00:16:53.849
+This may have been answered already.
+
+NOTE Q: What do you use for the in-buffer tables? Vtable?
+
+00:16:53.850 --> 00:16:55.159
+What do you use for
+
+00:16:55.160 --> 00:17:00.039
+in-buffer tables? Do you use vtable? Yep. Thanks for the
+
+00:17:00.040 --> 00:17:04.599
+question. It is indeed vtable. However, it's not really
+
+00:17:04.600 --> 00:17:10.919
+vtable. It's a fork that I made, which is called pgmix table.
+
+00:17:10.920 --> 00:17:17.199
+because Vtable doesn't have exactly the right
+
+00:17:17.200 --> 00:17:22.119
+functionality in particular for recoloring rows when you
+
+00:17:22.120 --> 00:17:28.239
+add a row. So I've currently forked this. I'm thinking about
+
+00:17:28.240 --> 00:17:36.359
+giving those back as patches to Vtable, plausibly.
+
+00:17:36.360 --> 00:17:40.719
+I know that there is some ongoing work also on vTable in the
+
+00:17:40.720 --> 00:17:45.839
+core. So I'll have to look at what is plausible to feed back
+
+00:17:45.840 --> 00:17:46.719
+into the main version.
+
+00:17:46.720 --> 00:17:55.199
+All right, great. I think we are nearing the end of the Q&A. We
+
+00:17:55.200 --> 00:17:59.079
+are due to move to the next talk in about three minutes now. I
+
+00:17:59.080 --> 00:18:02.719
+can fill 30 seconds or a minute of that with I guess one more
+
+00:18:02.720 --> 00:18:05.079
+maybe back and forth and I'll try to be quicker this time.
+
+00:18:05.080 --> 00:18:08.879
+First of all, thanks for your kind remarks. But my question
+
+00:18:08.880 --> 00:18:11.839
+wasn't really about Windows so much, it was just how I'm
+
+00:18:11.840 --> 00:18:16.639
+relating... So have you, let me put it more simply, have you
+
+NOTE Integrating with Emacs 30?
+
+00:18:16.640 --> 00:18:20.639
+started looking at integrating with Emacs 30 or with the
+
+00:18:20.640 --> 00:18:24.679
+master branch at all? Do you have any sense of how much work
+
+00:18:24.680 --> 00:18:27.079
+it's going to be for you to carry things forward there? I've
+
+00:18:27.080 --> 00:18:31.039
+tested it with the pre-release, yes. I mean, just a very
+
+00:18:31.040 --> 00:18:35.079
+basic testing and everything works perfectly. There's
+
+00:18:35.080 --> 00:18:39.799
+really no... There was no difference that I have noticed
+
+00:18:39.800 --> 00:18:46.279
+between 29.4 and the 30 pre-release on the aspects that I use
+
+00:18:46.280 --> 00:18:48.959
+at least in Emacs. Neato.
+
+00:18:48.960 --> 00:18:56.439
+That was it, Leo. Thanks for letting me back in for one more
+
+00:18:56.440 --> 00:18:58.799
+bite at the apple there. And I appreciate everybody tuning
+
+00:18:58.800 --> 00:19:03.479
+in and participating in the Q&A and this awesome talk.
+
+00:19:03.480 --> 00:19:06.879
+Thanks for your questions. That was great. Yeah, and thank
+
+00:19:06.880 --> 00:19:10.319
+you for answering them and for the presentation as well. So
+
+00:19:10.320 --> 00:19:14.199
+we'll be moving in about two minutes to the next talk, which
+
+00:19:14.200 --> 00:19:20.159
+is pre-recorded as well. Well, we didn't really give you the
+
+00:19:20.160 --> 00:19:29.399
+chance, Eric, to have the last word. So do you have any last
+
+00:19:29.400 --> 00:19:29.799
+word?
+
+00:19:29.800 --> 00:19:34.479
+please try it out, try out pgmacs and send some feedback
+
+00:19:34.480 --> 00:19:39.279
+that'll help improve it over time. Sure, great. Well, thank
+
+00:19:39.280 --> 00:19:41.559
+you so much, Eric, for taking the time to come to the
+
+00:19:41.560 --> 00:19:45.999
+conference, and we'll see you soon. Thank you. Bye,
+
+00:19:46.000 --> 00:19:50.279
+everyone. Bye. And we'll be live with the next talk in about 1
+
+00:19:50.280 --> 00:19:53.119
+minute 30. So we'll take a little bit of a breather, go make
+
+00:19:53.120 --> 00:19:56.599
+some coffee, go take a bio break. We'll be back soon. See you
+
+00:19:56.600 --> 00:20:01.880
+in a bit.
diff --git a/2024/captions/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--main--chapters.vtt b/2024/captions/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--main--chapters.vtt
new file mode 100644
index 00000000..9ecf670d
--- /dev/null
+++ b/2024/captions/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--main--chapters.vtt
@@ -0,0 +1,35 @@
+WEBVTT
+
+
+00:00:01.260 --> 00:01:24.380
+Introduction
+
+00:01:26.710 --> 00:03:53.280
+Demo
+
+00:03:53.960 --> 00:05:11.160
+Deletion
+
+00:05:12.880 --> 00:05:41.190
+Export
+
+00:05:42.250 --> 00:06:10.790
+HStore
+
+00:06:11.510 --> 00:06:30.390
+Connecting to a different database
+
+00:06:31.110 --> 00:07:31.800
+SchemaSpy
+
+00:07:32.620 --> 00:08:17.790
+Convenience queries
+
+00:08:18.850 --> 00:09:35.590
+Emacs as an application development platform
+
+00:09:36.250 --> 00:11:48.580
+Extending pgmacs
+
+00:11:49.400 --> 00:13:15.420
+Conclusion
diff --git a/2024/captions/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--main.vtt b/2024/captions/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--main.vtt
new file mode 100644
index 00000000..3ce11b67
--- /dev/null
+++ b/2024/captions/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--main.vtt
@@ -0,0 +1,1151 @@
+WEBVTT captioned by eric
+
+NOTE Introduction
+
+1
+00:00:01.260 --> 00:00:03.980
+Hi, this is a short presentation about PGmacs,
+
+2
+00:00:04.180 --> 00:00:07.100
+which is a browsing and editing interface for
+
+3
+00:00:07.100 --> 00:00:08.360
+Postgres databases.
+
+4
+00:00:08.920 --> 00:00:11.320
+My name is Eric Marsden, and I'm the
+
+5
+00:00:11.320 --> 00:00:13.540
+developer of this Emacs Lisp library.
+
+6
+00:00:14.800 --> 00:00:17.420
+PGmacs was inspired by sqlite-mode, which is a
+
+7
+00:00:17.420 --> 00:00:20.600
+great feature available from Emacs 29 onwards.
+
+8
+00:00:21.060 --> 00:00:24.560
+It allows you to view and modify SQLite
+
+9
+00:00:24.560 --> 00:00:26.220
+databases you might have lying around.
+
+10
+00:00:26.760 --> 00:00:28.140
+It's a really great feature.
+
+11
+00:00:28.140 --> 00:00:30.840
+It would be even better, however, if it
+
+12
+00:00:30.840 --> 00:00:32.900
+were able to use a real database.
+
+13
+00:00:34.540 --> 00:00:36.200
+And I happen to know that was possible
+
+14
+00:00:36.200 --> 00:00:38.120
+because a few years ago, I wrote an
+
+15
+00:00:38.120 --> 00:00:42.920
+Emacs Lisp library, pg.el, which implements the wire
+
+16
+00:00:42.920 --> 00:00:46.280
+protocol used for communication over the network between
+
+17
+00:00:46.280 --> 00:00:49.600
+a Postgres client and the Postgres backend, the
+
+18
+00:00:49.600 --> 00:00:50.440
+Postgres server.
+
+19
+00:00:51.580 --> 00:00:53.560
+I've included here an example of what it
+
+20
+00:00:53.560 --> 00:00:54.820
+looks like to use this library.
+
+21
+00:00:54.820 --> 00:00:58.240
+You connect to the database by specifying the
+
+22
+00:00:58.240 --> 00:01:01.520
+database name, your username, your password, potentially the
+
+23
+00:01:01.520 --> 00:01:03.099
+hostname that you're connecting to.
+
+24
+00:01:03.800 --> 00:01:06.680
+Once you're connected, you can then execute SQL
+
+25
+00:01:06.680 --> 00:01:09.640
+statements, for example, to create a new table,
+
+26
+00:01:10.180 --> 00:01:13.860
+to insert values into that table, and to
+
+27
+00:01:13.860 --> 00:01:16.140
+count the number of rows in a table.
+
+28
+00:01:17.100 --> 00:01:20.300
+And pg.el does automatic type conversion to
+
+29
+00:01:20.300 --> 00:01:24.180
+and from Emacs Lisp types and Postgres types for
+
+30
+00:01:24.180 --> 00:01:24.380
+you.
+
+NOTE Demo
+
+31
+00:01:26.710 --> 00:01:29.170
+Probably the best is to jump straight into
+
+32
+00:01:29.170 --> 00:01:30.690
+a demo of PGmacs.
+
+33
+00:01:31.210 --> 00:01:34.130
+When we connect to a database, we see
+
+34
+00:01:34.130 --> 00:01:36.330
+up the top of the buffer, some information
+
+35
+00:01:36.330 --> 00:01:39.070
+about the backend that we're connected to, some
+
+36
+00:01:39.070 --> 00:01:42.010
+version information and the total database size on
+
+37
+00:01:42.010 --> 00:01:42.230
+disk.
+
+38
+00:01:43.090 --> 00:01:45.170
+There are some shortcuts to some commands we
+
+39
+00:01:45.170 --> 00:01:47.370
+can run on the database, and there's a
+
+40
+00:01:47.370 --> 00:01:49.490
+list of tables that we have access to,
+
+41
+00:01:50.230 --> 00:01:52.650
+with again, metainformation about their size on
+
+42
+00:01:52.650 --> 00:01:53.650
+disk and their owner.
+
+43
+00:01:53.650 --> 00:01:56.490
+Now, we can enter a table by pressing
+
+44
+00:01:56.490 --> 00:01:57.090
+return.
+
+45
+00:01:58.510 --> 00:02:01.230
+Here we again see some metainformation about
+
+46
+00:02:01.230 --> 00:02:04.210
+the table, such as the list of columns,
+
+47
+00:02:05.510 --> 00:02:08.490
+the SQL type of each column, any defaults
+
+48
+00:02:08.490 --> 00:02:11.170
+that might be present and any SQL constraints.
+
+49
+00:02:11.970 --> 00:02:14.370
+We see any indexes that might be present
+
+50
+00:02:14.370 --> 00:02:16.790
+on this table, and then we see the
+
+51
+00:02:16.790 --> 00:02:19.070
+list of rows of data in the table.
+
+52
+00:02:19.830 --> 00:02:22.870
+If we see any information which is incorrect
+
+53
+00:02:22.870 --> 00:02:26.710
+or incomplete, we can easily fix it by
+
+54
+00:02:26.710 --> 00:02:36.300
+pressing enter again, and this updates the information
+
+55
+00:02:36.300 --> 00:02:37.900
+present in the database.
+
+56
+00:02:38.200 --> 00:02:39.840
+PGmacs shows us this in the minibuffer
+
+57
+00:02:39.840 --> 00:02:42.480
+it has updated one row.
+
+58
+00:02:43.540 --> 00:02:45.440
+We can look at help for the key
+
+59
+00:02:45.440 --> 00:02:47.440
+bindings that are present in this type of
+
+60
+00:02:47.440 --> 00:02:47.780
+buffer.
+
+61
+00:02:48.120 --> 00:02:49.580
+If we scroll down, we can see that
+
+62
+00:02:49.580 --> 00:02:51.580
+we can upcase the value of a cell
+
+63
+00:02:51.580 --> 00:02:52.680
+with M-u.
+
+64
+00:02:52.920 --> 00:02:53.920
+Let's try that out.
+
+65
+00:02:56.430 --> 00:02:58.950
+Okay, here we have updated the value of
+
+66
+00:02:58.950 --> 00:03:00.670
+the cell in the database.
+
+67
+00:03:00.830 --> 00:03:03.330
+We can now lowercase it, and we can
+
+68
+00:03:03.330 --> 00:03:06.510
+put it back to the initial
+
+69
+00:03:06.510 --> 00:03:07.930
+title case of the value.
+
+70
+00:03:09.010 --> 00:03:11.550
+We can also run a shell command on
+
+71
+00:03:11.550 --> 00:03:14.570
+a cell value, to count the number of
+
+72
+00:03:14.570 --> 00:03:15.670
+characters, for example.
+
+73
+00:03:17.570 --> 00:03:20.390
+We can run a shell command with a
+
+74
+00:03:20.390 --> 00:03:22.990
+prefix argument, which updates the value in the
+
+75
+00:03:22.990 --> 00:03:25.610
+database with the output from the shell command.
+
+76
+00:03:27.470 --> 00:03:29.790
+So that has updated the database.
+
+77
+00:03:30.270 --> 00:03:32.790
+If we do that again, that will reverse
+
+78
+00:03:32.790 --> 00:03:39.750
+the value. If we come back
+
+79
+00:03:39.750 --> 00:03:41.590
+to the list of tables, we see
+
+80
+00:03:41.590 --> 00:03:43.010
+that there is a table which is called
+
+81
+00:03:43.010 --> 00:03:43.590
+deleteme.
+
+82
+00:03:43.890 --> 00:03:50.140
+We can try renaming this table with R,
+
+83
+00:03:50.380 --> 00:03:52.880
+we can look at what is in this
+
+84
+00:03:52.880 --> 00:03:53.280
+table.
+
+NOTE Deletion
+
+85
+00:03:53.960 --> 00:03:56.600
+Okay, there is only one row of information
+
+86
+00:03:56.600 --> 00:03:59.280
+that doesn't seem very important, so let's delete
+
+87
+00:03:59.280 --> 00:03:59.680
+that.
+
+88
+00:04:02.160 --> 00:04:05.600
+Let's now delete the table with DEL.
+
+89
+00:04:07.980 --> 00:04:11.000
+PGmacs asks for confirmation, and we've deleted the
+
+90
+00:04:11.000 --> 00:04:11.240
+table.
+
+91
+00:04:13.390 --> 00:04:15.470
+Now when we have a big table with
+
+92
+00:04:15.470 --> 00:04:18.250
+a lot of data, PGmacs is going to
+
+93
+00:04:18.250 --> 00:04:21.150
+show us the results paginated, so we can
+
+94
+00:04:21.150 --> 00:04:23.350
+go chunk by chunk through the table.
+
+95
+00:04:24.370 --> 00:04:28.070
+We can implement a where filter on the
+
+96
+00:04:28.070 --> 00:04:30.570
+rows to only show the rows that match
+
+97
+00:04:30.570 --> 00:04:32.390
+a certain SQL clause.
+
+98
+00:04:33.110 --> 00:04:35.450
+So for example, here we have some temperature
+
+99
+00:04:35.450 --> 00:04:35.950
+measurements.
+
+100
+00:04:36.490 --> 00:04:38.690
+We want to focus on measurements that are
+
+101
+00:04:38.690 --> 00:04:41.270
+more than 40 degrees Celsius, for example.
+
+102
+00:04:45.980 --> 00:04:48.120
+Okay, we have now filtered on a certain
+
+103
+00:04:48.120 --> 00:04:49.240
+number of rows.
+
+104
+00:04:49.540 --> 00:04:51.240
+The filter is shown to us just up
+
+105
+00:04:51.240 --> 00:04:53.540
+here, and we see here that we have
+
+106
+00:04:53.540 --> 00:04:55.960
+some values that look anomalous.
+
+107
+00:04:56.500 --> 00:04:59.120
+There's one, 140, and one is 61.
+
+108
+00:04:59.840 --> 00:05:02.980
+We probably want to delete them, they represent
+
+109
+00:05:02.980 --> 00:05:03.540
+errors.
+
+110
+00:05:04.080 --> 00:05:06.080
+We can mark them for deletion with d,
+
+111
+00:05:06.560 --> 00:05:09.680
+and then really delete them, expunge them, as
+
+112
+00:05:09.680 --> 00:05:11.160
+in Dired, with x.
+
+NOTE Export
+
+113
+00:05:12.880 --> 00:05:16.120
+We can export this table in CSV format,
+
+114
+00:05:16.480 --> 00:05:17.800
+thanks to this little button up here.
+
+115
+00:05:19.860 --> 00:05:22.760
+Here we have our table conveniently formatted as
+
+116
+00:05:22.760 --> 00:05:23.400
+CSV.
+
+117
+00:05:23.400 --> 00:05:28.480
+We can also export a particular row to
+
+118
+00:05:28.480 --> 00:05:32.080
+JSON by typing j, let's look at
+
+119
+00:05:32.080 --> 00:05:36.270
+what that looks like.
+
+120
+00:05:37.810 --> 00:05:40.230
+Okay, here's the JSON for one of the
+
+121
+00:05:40.230 --> 00:05:41.190
+rows in the table.
+
+NOTE HStore
+
+122
+00:05:42.250 --> 00:05:44.270
+Now let's look at a table that contains
+
+123
+00:05:44.270 --> 00:05:46.350
+a column of type HStore.
+
+124
+00:05:46.430 --> 00:05:48.850
+This is a Postgres-specific key-value map.
+
+125
+00:05:49.110 --> 00:05:51.170
+Then the attributes column is of type
+
+126
+00:05:51.170 --> 00:05:54.750
+JSON, which can be stored natively in Postgres.
+
+127
+00:05:54.750 --> 00:05:56.910
+It's possible to edit these values using a
+
+128
+00:05:56.910 --> 00:06:00.490
+widget-based interface by typing w, and here
+
+129
+00:06:00.490 --> 00:06:03.630
+we have a convenient interface for modifying these
+
+130
+00:06:03.630 --> 00:06:04.450
+types of values.
+
+131
+00:06:05.410 --> 00:06:08.390
+Likewise, for the JSON type parameter, we can
+
+132
+00:06:08.390 --> 00:06:10.790
+update using a widget-based interface.
+
+NOTE Connecting to a different database
+
+133
+00:06:11.510 --> 00:06:14.270
+Let's connect to a different database.
+
+134
+00:06:14.490 --> 00:06:18.910
+We do that with a M-x pgmacs, and
+
+135
+00:06:18.910 --> 00:06:26.670
+then enter our username and password.
+
+136
+00:06:27.310 --> 00:06:29.390
+Here we have the list of tables present
+
+137
+00:06:29.390 --> 00:06:30.390
+in this database.
+
+NOTE SchemaSpy
+
+138
+00:06:31.110 --> 00:06:33.690
+PGmacs has some support for running the SchemaSpy
+
+139
+00:06:33.690 --> 00:06:37.950
+utility, which generates a graphical representation of the
+
+140
+00:06:37.950 --> 00:06:41.710
+relationships between tables in this database, which can
+
+141
+00:06:41.710 --> 00:06:44.470
+be useful when you're discovering the database.
+
+142
+00:06:45.170 --> 00:06:47.870
+Here is the SVG that's output by this
+
+143
+00:06:47.870 --> 00:06:48.470
+utility.
+
+144
+00:06:50.860 --> 00:06:53.840
+This is a test database containing information about
+
+145
+00:06:53.840 --> 00:06:55.460
+a digital media store.
+
+146
+00:06:55.880 --> 00:06:58.160
+It has a table with information about the
+
+147
+00:06:58.160 --> 00:06:59.300
+tracks that are available.
+
+148
+00:07:00.960 --> 00:07:03.480
+If we look at this table, we
+
+149
+00:07:03.480 --> 00:07:04.780
+see that we have the name of the
+
+150
+00:07:04.780 --> 00:07:08.980
+track, a reference to the album, album ID.
+
+151
+00:07:09.240 --> 00:07:11.240
+This is a reference to a foreign key,
+
+152
+00:07:11.660 --> 00:07:13.520
+a key in the table which is called
+
+153
+00:07:13.520 --> 00:07:13.940
+album.
+
+154
+00:07:14.820 --> 00:07:16.840
+Now we can follow this foreign key reference
+
+155
+00:07:16.840 --> 00:07:20.580
+simply by pressing Enter, and here we find
+
+156
+00:07:20.580 --> 00:07:23.100
+it's the album called For Those About To
+
+157
+00:07:23.100 --> 00:07:23.340
+Rock.
+
+158
+00:07:24.260 --> 00:07:26.420
+And in the same way, here we have
+
+159
+00:07:26.420 --> 00:07:28.780
+a foreign key reference to the relevant artist
+
+160
+00:07:28.780 --> 00:07:29.680
+which we can follow.
+
+161
+00:07:30.080 --> 00:07:31.800
+That's, of course, AC/DC.
+
+NOTE Convenience queries
+
+162
+00:07:32.620 --> 00:07:35.720
+And finally, PGmacs has some convenience queries that
+
+163
+00:07:35.720 --> 00:07:38.280
+allows us to list the procedures which are
+
+164
+00:07:38.280 --> 00:07:39.820
+defined in this database.
+
+165
+00:07:40.260 --> 00:07:42.820
+Here we have the built-in procedures, mostly
+
+166
+00:07:42.820 --> 00:07:45.300
+used by the PostGIS extension.
+
+167
+00:07:48.430 --> 00:07:52.110
+We can also display some more information about
+
+168
+00:07:52.110 --> 00:07:52.690
+our backend.
+
+169
+00:07:53.090 --> 00:07:56.450
+Here we have the list of extensions which
+
+170
+00:07:56.450 --> 00:07:56.990
+are available.
+
+171
+00:07:57.470 --> 00:08:00.250
+We can load one of these extensions if
+
+172
+00:08:00.250 --> 00:08:01.570
+we have the rights to do that.
+
+173
+00:08:02.350 --> 00:08:05.290
+Here we've loaded the relevant extension.
+
+174
+00:08:06.210 --> 00:08:08.850
+We can show some information about the Postgres
+
+175
+00:08:08.850 --> 00:08:16.650
+settings also, and update them if we have
+
+176
+00:08:16.650 --> 00:08:17.790
+the rights to do that.
+
+NOTE Emacs as an application development platform
+
+177
+00:08:18.850 --> 00:08:21.650
+Now I'm preaching to the converted, but Emacs
+
+178
+00:08:21.650 --> 00:08:24.870
+is a really great application development platform.
+
+179
+00:08:25.510 --> 00:08:29.130
+PGmacs is currently around 3000 lines of code.
+
+180
+00:08:29.630 --> 00:08:32.510
+A first point of comparison, PGCLI, which is
+
+181
+00:08:32.510 --> 00:08:36.409
+a text user interface for accessing Postgres implemented
+
+182
+00:08:36.409 --> 00:08:39.289
+in Python, is 17,000 lines of code.
+
+183
+00:08:40.390 --> 00:08:43.190
+PGAdmin4, which is a well-known Python GUI
+
+184
+00:08:43.190 --> 00:08:47.010
+for administrating Postgres databases, is almost half a
+
+185
+00:08:47.010 --> 00:08:48.050
+million lines of code.
+
+186
+00:08:48.410 --> 00:08:51.450
+And DBeaver, implemented in Java, is almost a
+
+187
+00:08:51.450 --> 00:08:52.490
+million lines of code.
+
+188
+00:08:53.130 --> 00:08:56.030
+Developing things on Emacs, you get for
+
+189
+00:08:56.030 --> 00:08:58.270
+free portability between different platforms.
+
+190
+00:08:58.470 --> 00:09:00.130
+As I'm showing you, it works great on
+
+191
+00:09:00.130 --> 00:09:02.730
+Linux, which is where I developed this library.
+
+192
+00:09:03.070 --> 00:09:06.530
+It also works perfectly in the terminal, except
+
+193
+00:09:06.530 --> 00:09:08.530
+for some of the functionality I showed, which
+
+194
+00:09:08.530 --> 00:09:10.190
+requires SVG support.
+
+195
+00:09:10.970 --> 00:09:12.630
+It also works well, if you're into that
+
+196
+00:09:12.630 --> 00:09:15.230
+kind of thing, on MacOS and on Windows.
+
+197
+00:09:15.830 --> 00:09:19.130
+And it even works perfectly on Haiku, which
+
+198
+00:09:19.130 --> 00:09:20.770
+is a free BeOS clone.
+
+199
+00:09:21.300 --> 00:09:23.870
+Emacs is actually really pretty on this operating
+
+200
+00:09:23.870 --> 00:09:26.590
+system, so congratulations to the people who did
+
+201
+00:09:26.590 --> 00:09:27.330
+the port there.
+
+202
+00:09:27.530 --> 00:09:29.350
+Now, of course, the main advantage of building
+
+203
+00:09:29.350 --> 00:09:32.430
+on the Emacs development platform, is that the
+
+204
+00:09:32.430 --> 00:09:35.590
+application is easy for the user to extend.
+
+NOTE Extending pgmacs
+
+205
+00:09:36.250 --> 00:09:38.690
+To illustrate that, previously we were looking at
+
+206
+00:09:38.690 --> 00:09:40.650
+a table of temperature measurements.
+
+207
+00:09:42.070 --> 00:09:44.510
+Imagine we want to highlight rows in this
+
+208
+00:09:44.510 --> 00:09:48.430
+table, which look anomalous, where the value looks
+
+209
+00:09:48.430 --> 00:09:49.450
+a bit extreme.
+
+210
+00:09:50.090 --> 00:09:52.150
+That's quite easy to do with a bit
+
+211
+00:09:52.150 --> 00:09:53.130
+of Emacs Lisp.
+
+212
+00:09:54.610 --> 00:09:58.410
+We define a function, which, if the cell
+
+213
+00:09:58.410 --> 00:10:01.570
+value is bigger than 40, is going to
+
+214
+00:10:01.570 --> 00:10:03.850
+display it in a face which has a
+
+215
+00:10:03.850 --> 00:10:04.950
+dark red foreground.
+
+216
+00:10:05.950 --> 00:10:08.890
+We can now register this display function for
+
+217
+00:10:08.890 --> 00:10:11.590
+the measurement column in the temperatures table.
+
+218
+00:10:12.190 --> 00:10:16.490
+And if we reopen the table now, we
+
+219
+00:10:16.490 --> 00:10:19.950
+see that the anomalous measurements are indeed highlighted
+
+220
+00:10:19.950 --> 00:10:20.810
+in red.
+
+221
+00:10:24.100 --> 00:10:27.320
+Another example, imagine we have a table which
+
+222
+00:10:27.320 --> 00:10:28.880
+contains image data.
+
+223
+00:10:29.200 --> 00:10:31.740
+There's a column which is of BYTEA type,
+
+224
+00:10:31.740 --> 00:10:35.020
+which contains images in binary form.
+
+225
+00:10:35.340 --> 00:10:38.920
+We can display these inline as follows.
+
+226
+00:10:40.340 --> 00:10:44.900
+We create an inline image display function, using
+
+227
+00:10:44.900 --> 00:10:47.080
+Emacs' image support.
+
+228
+00:10:47.080 --> 00:10:49.540
+And then we'd register this function to display
+
+229
+00:10:49.540 --> 00:10:52.460
+the image column in the inline image table.
+
+230
+00:10:52.780 --> 00:10:55.540
+If we now reopen the inline image table,
+
+231
+00:10:56.060 --> 00:10:59.140
+we see the images are displayed inline.
+
+232
+00:10:59.660 --> 00:11:03.160
+And as a final example of customisation, here's
+
+233
+00:11:03.160 --> 00:11:05.440
+how to bind a key to a specific
+
+234
+00:11:05.440 --> 00:11:07.860
+function, in the row-list buffer.
+
+235
+00:11:08.800 --> 00:11:12.080
+Let's define a function that does a DuckDuckGo
+
+236
+00:11:12.080 --> 00:11:15.500
+lookup for a particular value in
+
+237
+00:11:15.500 --> 00:11:16.700
+the Emacs web browser.
+
+238
+00:11:18.080 --> 00:11:22.140
+We can define a function which does a
+
+239
+00:11:22.140 --> 00:11:24.400
+funcall on the cell value for this
+
+240
+00:11:24.400 --> 00:11:26.200
+DuckDuckGo lookup function.
+
+241
+00:11:27.100 --> 00:11:30.060
+And finally we can define a key, the
+
+242
+00:11:30.060 --> 00:11:33.360
+capital D key, in the row-list map,
+
+243
+00:11:33.540 --> 00:11:35.480
+which calls this function that does a
+
+244
+00:11:35.480 --> 00:11:36.900
+DuckDuckGo lookup.
+
+245
+00:11:37.240 --> 00:11:39.600
+And now if I'm browsing information in a
+
+246
+00:11:39.600 --> 00:11:41.580
+table that I want to do a web
+
+247
+00:11:41.580 --> 00:11:45.380
+search on, I can use my D shortcut
+
+248
+00:11:45.380 --> 00:11:48.580
+and see some web results concerning the cell.
+
+NOTE Conclusion
+
+249
+00:11:49.400 --> 00:11:53.880
+So to conclude, the source and installation instructions
+
+250
+00:11:53.880 --> 00:11:56.520
+for PGmacs are available on GitHub.
+
+251
+00:11:56.680 --> 00:11:58.780
+It requires Emacs 29.
+
+252
+00:11:59.260 --> 00:12:01.620
+There is a prebuilt container image which you
+
+253
+00:12:01.620 --> 00:12:02.820
+can use for testing.
+
+254
+00:12:02.980 --> 00:12:04.100
+It's a Docker image.
+
+255
+00:12:04.580 --> 00:12:06.160
+The Docker image only works in terminal mode.
+
+256
+00:12:06.160 --> 00:12:08.380
+And of course that's a recommended way of
+
+257
+00:12:08.380 --> 00:12:11.020
+testing Emacs Lisp code that you load
+
+258
+00:12:11.020 --> 00:12:13.100
+into your Emacs before having read it.
+
+259
+00:12:13.360 --> 00:12:15.720
+It works with any recent version of Postgres
+
+260
+00:12:15.720 --> 00:12:18.580
+over the past 10 years, including the latest
+
+261
+00:12:18.580 --> 00:12:19.900
+release, Postgres 17.
+
+262
+00:12:20.440 --> 00:12:22.700
+It does work with a certain number of
+
+263
+00:12:22.700 --> 00:12:26.440
+databases that are compatible with Postgres, such as
+
+264
+00:12:26.440 --> 00:12:30.360
+ParadeDB, TimescaleDB and IvorySQL.
+
+265
+00:12:30.940 --> 00:12:33.560
+However, it doesn't work with all databases that
+
+266
+00:12:33.560 --> 00:12:35.340
+claim to be Postgres compatible.
+
+267
+00:12:35.340 --> 00:12:37.840
+It doesn't work, for example, with CrateDB or
+
+268
+00:12:37.840 --> 00:12:39.960
+with CockroachDB or some others that you see
+
+269
+00:12:39.960 --> 00:12:40.640
+listed here.
+
+270
+00:12:40.760 --> 00:12:42.660
+The reason for that is that these databases
+
+271
+00:12:42.660 --> 00:12:46.440
+don't implement the system tables that PGmacs queries
+
+272
+00:12:46.440 --> 00:12:49.600
+to obtain information about the columns present in
+
+273
+00:12:49.600 --> 00:12:52.220
+a table, the size on disk, the ownership
+
+274
+00:12:52.220 --> 00:12:53.560
+of tables, etc.
+
+275
+00:12:54.600 --> 00:12:58.180
+PGmacs supports TLS encrypted connections to the database,
+
+276
+00:12:58.380 --> 00:13:01.400
+as well as local Unix socket connections.
+
+277
+00:13:02.040 --> 00:13:04.600
+And in terms of stability, I would classify
+
+278
+00:13:04.600 --> 00:13:06.160
+it as beta status.
+
+279
+00:13:06.680 --> 00:13:09.200
+I do use it myself in production on
+
+280
+00:13:09.200 --> 00:13:11.160
+some not very important data.
+
+281
+00:13:11.560 --> 00:13:13.060
+Really, it works quite well.
+
+282
+00:13:14.300 --> 00:13:15.420
+Thanks for your attention.
diff --git a/2024/captions/emacsconf-2024-project--managing-writing-project-metadata-with-orgmode--blaine-mooers--answers.vtt b/2024/captions/emacsconf-2024-project--managing-writing-project-metadata-with-orgmode--blaine-mooers--answers.vtt
new file mode 100644
index 00000000..803490e2
--- /dev/null
+++ b/2024/captions/emacsconf-2024-project--managing-writing-project-metadata-with-orgmode--blaine-mooers--answers.vtt
@@ -0,0 +1,2423 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:10.319
+And about, I think we are live. Okay, hi again everyone. And hi
+
+00:00:10.320 --> 00:00:14.679
+Blaine, how are you doing? Fantastic, happy to be here.
+
+00:00:14.680 --> 00:00:17.479
+Yeah, it's good to see you again. We were just reminiscing in
+
+00:00:17.480 --> 00:00:20.239
+a room right now that it's almost been a year exactly since we
+
+00:00:20.240 --> 00:00:23.879
+last spoke because you were at the EmacsConf last year. That's
+
+00:00:23.880 --> 00:00:28.559
+right. This is great fun. Yeah, well, thank you for coming in
+
+00:00:28.560 --> 00:00:33.079
+and especially every time you come with a very well-crafted
+
+00:00:33.080 --> 00:00:37.279
+talks talking about, you know, what you do with Org Mode, Org
+
+00:00:37.280 --> 00:00:41.039
+Roam and whatever. And it's really fascinating as someone
+
+00:00:41.040 --> 00:00:43.479
+who develops and use those tools constantly to see you put
+
+00:00:43.480 --> 00:00:46.199
+them in action so well. Because you, you know, the way you
+
+00:00:46.200 --> 00:00:49.719
+talk about your research, it really reminds me on what we
+
+00:00:49.720 --> 00:00:53.279
+were, sorry, I've got elves talking in my ears and I'm still
+
+00:00:53.280 --> 00:00:56.639
+not used to it at this point. But it's really nice to see you
+
+00:00:56.640 --> 00:01:00.359
+put all of this together into a very cohesive way for you to
+
+00:01:00.360 --> 00:01:03.759
+write. Okay, let me just share my screen and I'll be sharing
+
+00:01:03.760 --> 00:01:11.879
+the questions. Where is it? All right, take presenter. And I
+
+00:01:11.880 --> 00:01:18.079
+will be sharing the questions. All right. Can you see my
+
+00:01:18.080 --> 00:01:24.159
+screen all right? I can, yes. OK, cool. So we move straight to
+
+00:01:24.160 --> 00:01:26.999
+the question. Let me just check on the time. I think we have
+
+00:01:27.000 --> 00:01:31.999
+about until 10.20, which is in 17 minutes. So let's take
+
+00:01:32.000 --> 00:01:35.639
+about 10 to 15 minutes of question time. And if people have
+
+00:01:35.640 --> 00:01:38.599
+joined on BBB, we'll also be taking questions live. All
+
+NOTE Q: what does 0573 means in your init. file name?
+
+00:01:38.600 --> 00:01:44.079
+right. Starting with the first question, what does 0573
+
+00:01:44.080 --> 00:01:49.719
+mean in your init file name? So this name is, you can think of
+
+00:01:49.720 --> 00:01:55.879
+it as a prefix or a stub. It's an index number that I utilize
+
+00:01:55.880 --> 00:02:01.479
+before a short name that describes the project. So I have all
+
+00:02:01.480 --> 00:02:06.119
+my projects in my home directory, and I just start typing the
+
+00:02:06.120 --> 00:02:12.199
+project number or index number. in the terminal and I have
+
+00:02:12.200 --> 00:02:17.879
+autocompletion available through oh my ZSH package. So I
+
+00:02:17.880 --> 00:02:21.199
+just hit tab and it autocompletes the name of the project and
+
+00:02:21.200 --> 00:02:26.319
+pops me into that folder. And so I find this to be very easy for
+
+00:02:26.320 --> 00:02:30.919
+navigating between projects. As you saw, I work on multiple
+
+00:02:30.920 --> 00:02:37.399
+projects in a given day and this helps me move about. And I
+
+00:02:37.400 --> 00:02:45.639
+also use this number at the start of the log file name and at
+
+00:02:45.640 --> 00:02:50.639
+the start of the manuscript name and the start of the, I also
+
+00:02:50.640 --> 00:02:54.079
+have an annotated bibliography. So all those files are
+
+00:02:54.080 --> 00:02:59.359
+identified just in case I accidentally save one to the wrong
+
+00:02:59.360 --> 00:03:04.639
+folder. I can avoid, I can sort them out later. Great
+
+00:03:04.640 --> 00:03:09.519
+question. Thank you. Next question, which I think is going
+
+NOTE Q: What does Zettelkasten mean?
+
+00:03:09.520 --> 00:03:16.159
+to be a long one. What does Zettelkasten mean? So this means
+
+00:03:16.160 --> 00:03:20.719
+like, I guess, notebox, something along those lines. You
+
+00:03:20.720 --> 00:03:24.879
+can think of it as a- Yeah, spitbox usually, that's the word
+
+00:03:24.880 --> 00:03:29.159
+we use. Thank you. So this is a kind of like a card catalog
+
+00:03:29.160 --> 00:03:33.359
+system that when it was done on paper, and now it's being done
+
+00:03:33.360 --> 00:03:38.679
+electronically through various software packages. So in
+
+00:03:38.680 --> 00:03:43.199
+the Emacs world, org-roam is a one of several alternate
+
+00:03:43.200 --> 00:03:47.999
+packages that you can use. Prot has the note and there's a
+
+00:03:48.000 --> 00:03:59.079
+couple others. So, idea is that you create a note, usually a,
+
+00:03:59.080 --> 00:04:04.239
+ultimately what you want to do is create a nugget of
+
+00:04:04.240 --> 00:04:09.479
+knowledge from your reading that you've done. and you add it
+
+00:04:09.480 --> 00:04:15.879
+to this note system in such a way that you can recover it more
+
+00:04:15.880 --> 00:04:20.159
+easily than what had to be done in the old days with index
+
+00:04:20.160 --> 00:04:23.719
+cards.
+
+00:04:23.720 --> 00:04:28.199
+So you set up backlinks and then you can use the search
+
+00:04:28.200 --> 00:04:34.919
+features in Org Roam to filter and find the notes again in the
+
+00:04:34.920 --> 00:04:43.079
+future. Org Roam has a wonderful GUI interface where you can
+
+00:04:43.080 --> 00:04:47.079
+display it as a knowledge graph, essentially, all your
+
+00:04:47.080 --> 00:04:52.479
+nodes and the backlinks between them. I set mine up in a
+
+00:04:52.480 --> 00:04:56.639
+rather hierarchical fashion to, at least right now, it's
+
+00:04:56.640 --> 00:05:01.959
+pretty hierarchical at this point, but it may become more
+
+00:05:01.960 --> 00:05:07.679
+disorganized over time. But I find it I'm sort of a visual
+
+00:05:07.680 --> 00:05:12.519
+person. I like mind maps a lot. I find that this visual
+
+00:05:12.520 --> 00:05:16.919
+display of my Zettelkasten is similar, resembles to a
+
+00:05:16.920 --> 00:05:22.439
+certain degree, a mind map.
+
+00:05:22.440 --> 00:05:25.599
+Okay, well, that's a pretty good definition of what
+
+00:05:25.600 --> 00:05:28.839
+Zettelkasten is, and you also went on to specify what it
+
+00:05:28.840 --> 00:05:31.599
+means inside Emacs, so thank you. I think that clarifies it
+
+00:05:31.600 --> 00:05:34.199
+for the two people in the room who still do not know, after
+
+00:05:34.200 --> 00:05:36.759
+attending four Emacs conferences, what is the
+
+00:05:36.760 --> 00:05:41.759
+Zettelkasten method. Moving on to the next question,
+
+NOTE Q: How many papers are you writing at the same time?
+
+00:05:41.760 --> 00:05:44.399
+how many papers are you writing at the same time? Because I
+
+00:05:44.400 --> 00:05:47.759
+believe you mentioned that you had concurrent papers being
+
+00:05:47.760 --> 00:05:51.959
+written during your presentation. So I'm probably working
+
+00:05:51.960 --> 00:05:57.839
+on, in a given year, somewhere between 10 and 15. How many do I
+
+00:05:57.840 --> 00:06:03.199
+get published in a year? Probably anywhere from one to four
+
+00:06:03.200 --> 00:06:08.639
+or five. So these papers often, the work on them spans
+
+00:06:08.640 --> 00:06:13.559
+multiple years. will start working on a paper when I begin,
+
+00:06:13.560 --> 00:06:16.519
+before I begin the experiments, ideally, because I'm
+
+00:06:16.520 --> 00:06:23.439
+trying to do hypothesis-driven research. And so that helps
+
+00:06:23.440 --> 00:06:27.559
+define the scope of the project and limit the number of
+
+00:06:27.560 --> 00:06:32.959
+rabbit holes I go down. So, but through the nature of the
+
+00:06:32.960 --> 00:06:36.919
+work, there's a lot of waiting required in my case for
+
+00:06:36.920 --> 00:06:39.679
+crystals to grow and then the opportunity to collect
+
+00:06:39.680 --> 00:06:43.879
+diffraction data on the crystals. And then the structures
+
+00:06:43.880 --> 00:06:48.559
+have to be determined and refined and analyzed and then
+
+00:06:48.560 --> 00:06:52.799
+deposited, figures have to be made. So a lot of steps are
+
+00:06:52.800 --> 00:06:57.759
+involved that those take generally span, that work can span
+
+00:06:57.760 --> 00:07:02.559
+several years.
+
+00:07:02.560 --> 00:07:09.399
+In a given day, I try to work on two papers, ideally. I haven't
+
+00:07:09.400 --> 00:07:12.279
+been doing so well lately over the past month.
+
+00:07:12.280 --> 00:07:19.759
+In the past year, there was a couple of days where I worked on
+
+00:07:19.760 --> 00:07:24.239
+five papers. There was something like a half dozen where I
+
+00:07:24.240 --> 00:07:29.159
+worked on four, about 40 days where I worked on three, and I
+
+00:07:29.160 --> 00:07:33.479
+think there was something like about 100 days where I worked
+
+00:07:33.480 --> 00:07:40.999
+on two papers a day, about 140 days where I just worked on one.
+
+00:07:41.000 --> 00:07:45.719
+So my idea is, I've been sort of developing more recently is
+
+00:07:45.720 --> 00:07:49.159
+that I'll start doing like the generative writing on a paper
+
+00:07:49.160 --> 00:07:51.959
+at the beginning of the day on the paper project I'm most
+
+00:07:51.960 --> 00:07:55.439
+excited about. I tried to, I'm a night owl. I tried to do this
+
+00:07:55.440 --> 00:08:00.519
+work early in the morning when I'm half awake to try to
+
+00:08:00.520 --> 00:08:03.439
+overcome my internal editor that inhibits me from writing
+
+00:08:03.440 --> 00:08:09.879
+prose freely. And so the idea is just to get a lot of words out,
+
+00:08:09.880 --> 00:08:14.639
+worry about editing them later. And then after about three
+
+00:08:14.640 --> 00:08:17.999
+hours, I'll switch to the second project that I'm less
+
+00:08:18.000 --> 00:08:21.999
+excited about. And I can go for another 90 minutes to two
+
+00:08:22.000 --> 00:08:27.719
+hours on that project. So I build up a lot of momentum, and
+
+00:08:27.720 --> 00:08:31.959
+then I do the switch. And I find that switch to be relatively
+
+00:08:31.960 --> 00:08:37.359
+easy. So my process will be On project A, make some final
+
+00:08:37.360 --> 00:08:42.359
+notes about what was accomplished in the writing log. Then
+
+00:08:42.360 --> 00:08:47.999
+I'll switch over to the writing log for the project B, and
+
+00:08:48.000 --> 00:08:51.359
+I'll go to the diary section at the beginning. I'll make a
+
+00:08:51.360 --> 00:08:59.333
+little to-do list and maybe look at the prior entry in the
+
+00:08:59.334 --> 00:09:03.199
+diary if I need to reboot my memory. And then I'll move on to
+
+00:09:03.200 --> 00:09:07.919
+the manuscript and go for 90 minutes or two hours.
+
+00:09:07.920 --> 00:09:12.479
+Generally, you're only good for somewhere between four and
+
+00:09:12.480 --> 00:09:15.359
+a half, five and a half hours. If you try to write in a
+
+00:09:15.360 --> 00:09:17.839
+generative fashion much longer than that, your
+
+00:09:17.840 --> 00:09:21.279
+productivity goes down quite a bit. You're better off
+
+00:09:21.280 --> 00:09:24.039
+switching to a completely different activity and then
+
+00:09:24.040 --> 00:09:30.159
+using your experience doing that writing to essentially
+
+00:09:30.160 --> 00:09:33.199
+launch background jobs in your subconscious. And so you
+
+00:09:33.200 --> 00:09:37.479
+will get those ideas in the shower the next morning.
+
+00:09:37.480 --> 00:09:44.519
+I find it really funny because I also relate. I've also
+
+00:09:44.520 --> 00:09:48.919
+worked a lot on organization as linked to paper writing but
+
+00:09:48.920 --> 00:09:53.719
+also to on my work as a developer and it's funny how you refer
+
+00:09:53.720 --> 00:09:56.999
+to your ability to think about something in very similar
+
+00:09:57.000 --> 00:09:59.399
+terms to how a computer would think about something. You've
+
+00:09:59.833 --> 00:10:02.399
+mentioned in your presentation the cost of context
+
+00:10:02.400 --> 00:10:04.919
+switching between different things but it's also
+
+00:10:04.920 --> 00:10:08.119
+something that we use in computing when a processor needs to
+
+00:10:08.120 --> 00:10:11.719
+be thinking about something else, well, it has a cost. And
+
+00:10:11.720 --> 00:10:15.359
+it's really fun for me to hear you talk about, oh, I need to
+
+00:10:15.360 --> 00:10:19.159
+select two topics, but no longer than 90 minutes per topic,
+
+00:10:19.160 --> 00:10:21.319
+because it's really about maximizing your output for
+
+00:10:21.320 --> 00:10:25.239
+creativity. And overall, your entire chat, your entire
+
+00:10:25.240 --> 00:10:28.519
+presentation here is about really maximizing the
+
+00:10:28.520 --> 00:10:32.959
+engagement that you have between outputs and your
+
+00:10:32.960 --> 00:10:37.159
+cognition. And I really find this amazing how down to the T
+
+00:10:37.160 --> 00:10:40.279
+you've managed to do this. And it actually leads me to
+
+00:10:40.280 --> 00:10:42.679
+another question which is being asked of you, which is,
+
+NOTE Q: How you capture those ideas when when you are away from Emacs?
+
+00:10:42.680 --> 00:10:45.959
+how do you capture those ideas when you are away from Emacs? And
+
+00:10:45.960 --> 00:10:47.999
+perhaps not only those you have in the showers, but also
+
+00:10:48.000 --> 00:10:53.919
+elsewhere. So that's a great question. Over the past year, I
+
+00:10:53.920 --> 00:10:59.239
+actually, last January, upon recommendation of a senior
+
+00:10:59.240 --> 00:11:05.399
+colleague, I bought a digital voice recorder for $85 from
+
+00:11:05.400 --> 00:11:10.279
+Sony, and it's the best investment I've made in a very long
+
+00:11:10.280 --> 00:11:16.399
+time. other than my laptop computer, because I then record
+
+00:11:16.400 --> 00:11:21.439
+my thoughts. So I have a half hour commute. And to me, that's
+
+00:11:21.440 --> 00:11:25.359
+largely a waste of time. I wish I lived a lot closer to work.
+
+00:11:25.360 --> 00:11:33.679
+But I use that time to generate ideas. So maybe I'll start my
+
+00:11:33.680 --> 00:11:40.559
+day at home for 90 minutes, worked on paper A, and then I might
+
+00:11:40.560 --> 00:11:44.799
+try to prime my mind about project B, or I might still have
+
+00:11:44.800 --> 00:11:48.199
+ideas that are flowing about project A. And I'll record
+
+00:11:48.200 --> 00:11:50.982
+those in the digital voice recorder. And then when I get to
+
+00:11:50.983 --> 00:11:54.441
+the lab, I'll transfer the audio file to my computer, and
+
+00:11:54.442 --> 00:12:00.066
+I'll transcribe it using Whisper. So I've set up some
+
+00:12:00.067 --> 00:12:03.759
+Python scripts and bash functions to go through and I
+
+00:12:03.760 --> 00:12:10.999
+convert all the sentences into one sentence per line
+
+00:12:11.000 --> 00:12:16.359
+because that's the way I like to write and edit things. And so
+
+00:12:16.360 --> 00:12:19.679
+it does all this pre-processing for me. And I have this
+
+00:12:19.680 --> 00:12:23.279
+transcript that's in pretty good shape. I don't have to do
+
+00:12:23.280 --> 00:12:29.159
+very much editing. And I'll then copy that over and work on
+
+00:12:29.160 --> 00:12:33.079
+it, clean it up, and pluck out the ideas that I think might be
+
+00:12:33.080 --> 00:12:40.439
+useful. Unfortunately, I'm not very I'm not away from my
+
+00:12:40.440 --> 00:12:47.959
+computer that much. I'm in front of it, 12, 14 hours a day. So
+
+00:12:47.960 --> 00:12:53.039
+when I'm teaching, when I'm in seminar, other committee
+
+00:12:53.040 --> 00:12:58.359
+meetings, traveling, then I'll capture ideas on paper. I
+
+00:12:58.360 --> 00:13:01.649
+don't have a cell phone. I'm trying to be the last human on
+
+00:13:01.650 --> 00:13:07.316
+earth without a cell phone. I think I would be so distracted
+
+00:13:07.317 --> 00:13:12.442
+by a cell phone. I would be the worst person on the planet,
+
+00:13:12.443 --> 00:13:14.163
+I would be totally focused on my cell phone
+
+00:13:14.164 --> 00:13:16.399
+if I had one. So I'm like one
+
+00:13:16.400 --> 00:13:22.999
+of the few people left who can read a map. So I do run into some
+
+00:13:23.000 --> 00:13:26.199
+difficulties hailing taxis and that sort of thing when I'm
+
+00:13:26.200 --> 00:13:30.599
+traveling. So there are some downsides to not having a cell
+
+00:13:30.600 --> 00:13:35.719
+phone, but these days. Yeah, but I think there's a pretty
+
+00:13:35.720 --> 00:13:38.639
+significant upside because, you know, you talk about cell
+
+00:13:38.640 --> 00:13:40.999
+phones here, but before you were talking about the 90
+
+00:13:41.000 --> 00:13:44.799
+minutes of uninterrupted focus on a given topic. And I think
+
+00:13:44.800 --> 00:13:48.359
+plenty of people would be envious of this ability to focus
+
+00:13:48.360 --> 00:13:54.519
+for that long on a topic. And I guess if we are to thread the
+
+00:13:54.520 --> 00:13:57.239
+needle here, well, the lack of cell phone might be for
+
+00:13:57.240 --> 00:14:00.839
+something for this ability to focus. So take of this what you
+
+00:14:00.840 --> 00:14:06.799
+will. True, I am a sucker for the web browser. I can get
+
+00:14:06.800 --> 00:14:11.759
+distracted going down various rabbit holes thanks to
+
+00:14:11.760 --> 00:14:17.279
+Google searches and that sort of thing. Likewise, email is
+
+00:14:17.280 --> 00:14:22.399
+another tension grabber. So, there's those other battles I
+
+00:14:22.400 --> 00:14:27.599
+have to fight too. So, right, that is a huge battle that all of
+
+00:14:27.600 --> 00:14:31.839
+us face is developing focus and being able to maintain
+
+00:14:31.840 --> 00:14:37.159
+focus. Right. So, we have about three more minutes of
+
+00:14:37.160 --> 00:14:39.279
+questions. So, thank you so much already for answering many
+
+00:14:39.280 --> 00:14:43.319
+questions. How about we do a quick fire for the remaining
+
+00:14:43.320 --> 00:14:47.079
+questions and then maybe we will take a question from... from
+
+00:14:47.080 --> 00:14:50.272
+here or in the room. So how about we go for the next one?
+
+NOTE Q: What if an ideas does not belong to any current working manuscript?
+
+00:14:50.273 --> 00:14:51.573
+What if an ID does not belong
+
+00:14:51.574 --> 00:14:55.199
+to any current working manuscript? So I
+
+00:14:55.200 --> 00:14:57.799
+have a sandbox area in the log file.
+
+00:14:57.800 --> 00:15:04.319
+So if it's likely going to be related to something to a
+
+00:15:04.320 --> 00:15:09.119
+certain degree, if the idea is totally unrelated to
+
+00:15:09.120 --> 00:15:12.719
+anything I'm working on, then I will
+
+00:15:12.720 --> 00:15:21.359
+I maintain a 700 through 750 words. I maintain a kind of a
+
+00:15:21.360 --> 00:15:26.719
+external diary and I just capture those kind of ideas there.
+
+00:15:26.720 --> 00:15:31.199
+So, I have access to a web interface to this big text area with
+
+00:15:31.200 --> 00:15:37.079
+nothing in it. And I just dump ideas all day long in there. So,
+
+00:15:37.080 --> 00:15:42.799
+and I save that away. I have that in a big LaTeX document
+
+00:15:42.800 --> 00:15:49.999
+currently on Overleaf. but each day has its own page. And so
+
+00:15:50.000 --> 00:15:53.079
+that information is captured and I can recover it. And maybe
+
+00:15:53.080 --> 00:15:57.599
+it's gonna take me a week, a month, a year to take that idea and
+
+00:15:57.600 --> 00:16:00.279
+think about it. And then eventually I'll get to a point where
+
+00:16:00.280 --> 00:16:04.279
+I have a critical mass of momentum and data and so forth,
+
+00:16:04.280 --> 00:16:08.279
+where I could start a new writing project. But you're right,
+
+00:16:08.280 --> 00:16:11.399
+that is a problem, capturing those ideas and keeping track
+
+00:16:11.400 --> 00:16:16.719
+of them. The Xenocasting can also help with that. Right. OK,
+
+00:16:16.720 --> 00:16:19.159
+so we have time for one more question and I think I'm going to
+
+00:16:19.160 --> 00:16:22.679
+skip this one. You can take all the time you want after we're
+
+00:16:22.680 --> 00:16:25.679
+done with the live show for you to answer in BBB, obviously,
+
+00:16:25.680 --> 00:16:28.319
+and even after the conference. But I'd really like to finish
+
+00:16:28.320 --> 00:16:28.801
+on this one.
+
+NOTE Q: If there were one habit from your process (referencing your extensive flow chart) that you want active learners/professional researchers to adopt, which would it be and why?
+
+00:16:28.802 --> 00:16:31.879
+So, if there were one habit from your process,
+
+00:16:31.880 --> 00:16:35.079
+referencing your extensive flowchart, that you want
+
+00:16:35.080 --> 00:16:37.839
+active learners or professional researchers to adopt,
+
+00:16:37.840 --> 00:16:44.479
+which would it be and why? So,
+
+00:16:44.480 --> 00:16:49.999
+I think just keeping that daily diary, that's the essential
+
+00:16:50.000 --> 00:16:55.239
+part for overcoming the fear of forgetting and the fear of
+
+00:16:55.240 --> 00:16:58.319
+losing momentum. One reason why people don't work on two
+
+00:16:58.320 --> 00:17:02.399
+projects a day is that they fear losing momentum on the first
+
+00:17:02.400 --> 00:17:07.319
+project they're working on. But we often are stuck with
+
+00:17:07.320 --> 00:17:09.999
+working on multiple writing projects, and they're best
+
+00:17:10.000 --> 00:17:13.199
+done over longer periods of time rather than in a hasty
+
+00:17:13.200 --> 00:17:18.679
+fashion. I try to avoid binge writing, although I do my share
+
+00:17:18.680 --> 00:17:23.479
+of that, too. Okay, well, Blaine, thank you so much for all
+
+00:17:23.480 --> 00:17:29.199
+your questions. The stream is going to move to the next chat
+
+00:17:29.200 --> 00:17:31.999
+and talk. We're moving to the next talk of the day, but feel
+
+00:17:32.000 --> 00:17:35.159
+free to stay in a room. For everyone interested in asking
+
+00:17:35.160 --> 00:17:38.479
+more questions to Blaine, the BBB, sorry, BigBlueButton
+
+00:17:38.480 --> 00:17:41.250
+link is available on the website. You can join and ask
+
+00:17:41.240 --> 00:17:43.319
+questions directly to Blaine. And otherwise, we'll make
+
+00:17:43.320 --> 00:17:45.479
+sure that all the remaining questions on the pad get their
+
+00:17:45.480 --> 00:17:48.239
+answer eventually. Thank you so much, Blaine. You're
+
+00:17:48.240 --> 00:17:56.559
+welcome. Bye-bye. Bye.
+
+00:17:56.560 --> 00:18:00.079
+okay I think the stream is moving on. Just making sure. okay. Yes
+
+00:18:00.080 --> 00:18:02.079
+we are moving on to the next stream. So Blaine, I'm going to need to
+
+00:18:02.080 --> 00:18:04.919
+get ready for the next talk. Thank you so much for all your
+
+00:18:04.920 --> 00:18:08.079
+answers and feel free to answer your questions. I'm
+
+00:18:08.080 --> 00:18:11.759
+sorry that i didn't get to fill your question live. It's just
+
+00:18:11.760 --> 00:18:16.599
+there was a lot of questions actually. It was a comment. Okay.
+
+NOTE Off-stream Q&A
+
+00:18:16.600 --> 00:18:24.199
+Yeah, yeah. You mentioned about that you sit all the day in
+
+00:18:24.200 --> 00:18:27.999
+front of computer, right? And I have to say, it's not too
+
+00:18:28.000 --> 00:18:31.439
+different from a bathroom if you get distracted by web
+
+00:18:31.440 --> 00:18:34.919
+browser. I also have the same problem. And one interesting
+
+00:18:34.920 --> 00:18:38.679
+solution I found at some point is that I pry my mind about
+
+00:18:38.680 --> 00:18:44.039
+certain task, I leave my office and I go for a walk while
+
+00:18:44.040 --> 00:18:49.079
+thinking about this. And that really forces to focus
+
+00:18:49.080 --> 00:18:52.839
+because while you're working you have nothing else to do.
+
+00:18:52.840 --> 00:18:56.999
+You cannot go and like go like searching Google and stuff
+
+00:18:57.000 --> 00:19:03.359
+like that. It can really help in some cases.
+
+00:19:03.360 --> 00:19:09.559
+Yeah, I try to. Periodically, I'll try to restart doing the
+
+00:19:09.560 --> 00:19:12.879
+Pomodoro method, where you're supposed to get up every 25
+
+00:19:12.880 --> 00:19:17.959
+minutes and take a break. But that requires a lot of
+
+00:19:17.960 --> 00:19:23.799
+discipline. And it also has, I find I'm more exhausted by
+
+00:19:23.800 --> 00:19:26.879
+following that method at the end of the day. But I think the
+
+00:19:26.880 --> 00:19:30.919
+problem with, well, I think in part- No, no, I don't mean
+
+00:19:30.920 --> 00:19:36.079
+Pomodoro actually. I mean, more like showers. Because when
+
+00:19:36.080 --> 00:19:39.079
+you take a shower, you think about something, right? When
+
+00:19:39.080 --> 00:19:43.159
+you just go for a walk, you again think about it. So this is not
+
+00:19:43.160 --> 00:19:46.119
+a break to take rest. It's a break to think away from
+
+00:19:46.120 --> 00:19:49.039
+computer.
+
+00:19:49.040 --> 00:19:54.239
+And you prime yourself, your brain by... picking something
+
+00:19:54.240 --> 00:19:56.719
+to work on. So I have a project, I think, like certain
+
+00:19:56.720 --> 00:20:01.079
+questions I want to think about. I sometimes take my, like a
+
+00:20:01.080 --> 00:20:05.319
+piece of paper with me. And then when I walk, I like take
+
+00:20:05.320 --> 00:20:10.279
+notes. You can record voice in your case. And like half an
+
+00:20:10.280 --> 00:20:15.239
+hour and you can really generate ideas.
+
+00:20:15.240 --> 00:20:18.519
+I have been doing a similar thing. I will take a clipboard.
+
+00:20:18.520 --> 00:20:24.799
+Maybe I'll have, um, Some blank pages where I'll write, jot
+
+00:20:24.800 --> 00:20:29.799
+down ideas as I walk. I'll go for like a half hour, hour-long
+
+00:20:29.800 --> 00:20:33.879
+walk and also read a paper sometimes, and in the process of
+
+00:20:33.880 --> 00:20:39.159
+reading, I get ideas.
+
+00:20:39.160 --> 00:20:45.159
+The clipboard though is socially less acceptable. It
+
+00:20:45.160 --> 00:20:49.359
+reminds people of their gym teacher, I think, or their
+
+00:20:49.360 --> 00:20:53.799
+marine drill sergeant, and they give me all kinds of weird
+
+00:20:53.800 --> 00:20:59.279
+looks. Even though they're walking and reading their cell
+
+00:20:59.280 --> 00:21:03.759
+phone, looking down at their cell phone, they give me weird
+
+00:21:03.760 --> 00:21:08.599
+looks for looking down at a clipboard as I walk. So there's
+
+00:21:08.600 --> 00:21:16.719
+that weird aspect to it. It's kind of hilarious.
+
+00:21:16.720 --> 00:21:21.479
+Thank you very much for the comment. Yeah, hopefully it's
+
+00:21:21.480 --> 00:21:24.799
+helpful. Because I really struggled about this web browser
+
+00:21:24.800 --> 00:21:28.346
+in the past. Not so much these days. Very good.
+
+00:21:28.347 --> 00:21:57.279
+That's good to hear.
+
+00:21:57.280 --> 00:21:57.639
+I asked,
+
+00:21:57.640 --> 00:22:06.519
+when I write notes, I've noticed like with the
+
+00:22:06.520 --> 00:22:10.360
+Getting Things Done and the Zettelkasten, I like to separate them
+
+00:22:10.400 --> 00:22:14.759
+out. And beyond that, I also like to separate them out on
+
+00:22:14.760 --> 00:22:19.959
+daily things and the global things. So that, for instance,
+
+00:22:19.960 --> 00:22:24.719
+your Zettelkasten, a daily would be like a journal. If you
+
+00:22:24.720 --> 00:22:29.599
+separate it out, It gives a lot of tension of, oh, well, if
+
+00:22:29.600 --> 00:22:33.119
+it's just a stray thought, I'll write it into my journal if I
+
+00:22:33.120 --> 00:22:36.959
+don't know where it goes. If I can think of a permanent place
+
+00:22:36.960 --> 00:22:41.479
+for it to go, it goes into the Zettelkasten. Same thing with,
+
+00:22:41.480 --> 00:22:44.599
+and then with like the getting things done is like, I don't,
+
+00:22:44.600 --> 00:22:48.159
+you start with like a fresh sheet of paper every single day or
+
+00:22:48.160 --> 00:22:54.639
+note or whatever. You ever done, you have tricks like that
+
+00:22:54.640 --> 00:22:59.359
+that you've noticed? So I'm sort of doing something similar
+
+00:22:59.360 --> 00:23:04.279
+through this. Well, to be honest, I like at the start of the
+
+00:23:04.280 --> 00:23:07.399
+day, I actually will just do sort of a brain dump of what
+
+00:23:07.400 --> 00:23:11.879
+happened the day before, just to try to get writing again.
+
+00:23:11.880 --> 00:23:16.959
+And these days, because of carpal tunnel syndrome, I'll use
+
+00:23:16.960 --> 00:23:22.159
+a voice speech to text to generate that initial text. And I'm
+
+00:23:22.160 --> 00:23:28.479
+just trying to, build up momentum of generating words. And
+
+00:23:28.480 --> 00:23:35.559
+so I capture, but I'm also adding to that document
+
+00:23:35.560 --> 00:23:40.719
+throughout the day. And so that is available through the web
+
+00:23:40.720 --> 00:23:47.279
+browser. I have a tab open to 750 words all the time. There's
+
+00:23:47.280 --> 00:23:51.719
+an alternate to it that is called Write Honey, that somebody
+
+00:23:51.720 --> 00:23:55.919
+in Berlin started, because they benefited so greatly from
+
+00:23:55.920 --> 00:23:58.679
+this practice. They have made it available for free,
+
+00:23:58.680 --> 00:24:05.039
+apparently for life. And so there's no word limit, whereas I
+
+00:24:05.040 --> 00:24:10.599
+have a grandfathered version of 750 words, and I have a word
+
+00:24:10.600 --> 00:24:15.519
+limit of 5,000 words. I rarely hit it. It's nice to know that
+
+00:24:15.520 --> 00:24:20.599
+right honey doesn't have that limit. So, that's how I'm
+
+00:24:20.600 --> 00:24:26.199
+capturing things. And then, so some of that text winds up
+
+00:24:26.200 --> 00:24:32.279
+being moved into my log file or even sometimes into the
+
+00:24:32.280 --> 00:24:37.799
+manuscript.
+
+00:24:37.800 --> 00:24:42.079
+So maybe a little less organized than the getting things
+
+00:24:42.080 --> 00:24:47.559
+done approach with the dailies and then the refiling
+
+00:24:47.560 --> 00:24:54.319
+process. So I don't do any refiling. I want to file once. I
+
+00:24:54.320 --> 00:24:58.079
+don't want to file a second time or have to go back and handle
+
+00:24:58.080 --> 00:25:03.319
+something a second time. So that's my rationale for the
+
+00:25:03.320 --> 00:25:08.159
+approach I take. I'm not using it. I've had various
+
+00:25:08.160 --> 00:25:12.759
+iterations of systems I've used, but I think my favorite one
+
+00:25:12.760 --> 00:25:15.559
+for like getting things done is actually not using
+
+00:25:15.560 --> 00:25:18.799
+Org Agenda, just like making a blank sheet and kind of doing
+
+00:25:18.800 --> 00:25:24.039
+like a template where it's just like, and separating my
+
+00:25:24.040 --> 00:25:28.119
+tasks out into three categories, like core tasks, like, and
+
+00:25:28.120 --> 00:25:32.279
+rule of thumb is like, if it's beyond three, it's too much too
+
+00:25:32.280 --> 00:25:36.359
+many. And like core tasks, secondary tasks and unplanned
+
+00:25:36.360 --> 00:25:39.759
+tasks. So these, those three categories, like for
+
+00:25:39.760 --> 00:25:42.039
+instance, the core task, if it's greater than three, it's
+
+00:25:42.040 --> 00:25:46.999
+too many. That way is like, when you look back, then you can
+
+00:25:47.000 --> 00:25:51.439
+see, like, if I got my core tasks done, I did really good. or if
+
+00:25:51.440 --> 00:25:56.879
+I got a lot of secondary tasks but not my core tasks done, I got
+
+00:25:56.880 --> 00:25:58.873
+side reactions with things that don't matter.
+
+00:25:58.874 --> 00:26:00.674
+If I got a lot of unplanned tasks,
+
+00:26:00.640 --> 00:26:03.679
+I could look at those unplanned tasks to see, oh yeah, okay,
+
+00:26:03.680 --> 00:26:07.639
+that was fine. Okay, the day didn't go as
+
+00:26:07.640 --> 00:26:14.999
+planned, but it was, yeah. That's an excellent suggestion.
+
+00:26:15.000 --> 00:26:20.119
+I generally just And I ended up long of a to-do list. It's
+
+00:26:20.120 --> 00:26:25.079
+impossible to accomplish in a day. Then I just like
+
+00:26:25.080 --> 00:26:29.799
+furnaces. Another trick that I liked was I also put like that
+
+00:26:29.800 --> 00:26:34.719
+under like a week. Cause it makes more sense to do it under a
+
+00:26:34.720 --> 00:26:39.079
+week. And then I'd have like subheadings under that, like,
+
+00:26:39.080 --> 00:26:45.079
+you know, so week day. Um, then I'd have those three
+
+00:26:45.080 --> 00:26:48.599
+categories for each of the tasks and then kind of as an
+
+00:26:48.600 --> 00:26:51.719
+unofficial day at the end, I just like have a staging area for
+
+00:26:51.720 --> 00:26:56.199
+all tasks. So I just kind of, then I just, I want to be using org
+
+00:26:56.200 --> 00:27:00.319
+agenda. So then I just be moving up and down, you know, cause
+
+00:27:00.320 --> 00:27:03.199
+you could, cause you're able to rearrange stuff in org mode
+
+00:27:03.200 --> 00:27:08.079
+so easily. I don't know if there's a good way of, that's been
+
+00:27:08.080 --> 00:27:11.919
+my favorite iteration
+
+00:27:11.920 --> 00:27:20.759
+of doing it. So I wrote a little function that pops in the
+
+00:27:20.760 --> 00:27:25.439
+to-dos that are specific to a particular project in the log
+
+00:27:25.440 --> 00:27:31.359
+file for that project.
+
+00:27:31.360 --> 00:27:36.599
+And then I add the log file name to the list of org files that
+
+00:27:36.600 --> 00:27:41.919
+Org Agenda searches, so those to-dos will show up. But my
+
+00:27:41.920 --> 00:27:46.199
+list is too long, and that becomes overwhelming. So I'll
+
+00:27:46.200 --> 00:27:51.399
+just assign a to-do heading to the top item in my to-do list to
+
+00:27:51.400 --> 00:27:54.479
+try to, but maybe it should be three. That would be a
+
+00:27:54.480 --> 00:27:58.479
+reasonable compromise.
+
+00:27:58.480 --> 00:28:03.879
+That's a good idea.
+
+00:28:03.880 --> 00:28:12.879
+So you're doing weekly planning then? I can show up. I was.
+
+00:28:12.880 --> 00:28:16.879
+This is, yeah, this was, yeah. What ended up making me stop is
+
+00:28:16.880 --> 00:28:20.439
+I didn't know how to make a template of it. And I, I ended up
+
+00:28:20.440 --> 00:28:25.879
+getting annoyed by manually changing the days every single
+
+00:28:25.880 --> 00:28:29.759
+time and naming like my files and stuff like that. If I Maybe
+
+00:28:29.760 --> 00:28:34.159
+if I did it now, I could figure out how to program it or if I
+
+00:28:34.160 --> 00:28:36.439
+spent enough time, but that's what I think eventually made
+
+00:28:36.440 --> 00:28:42.479
+me stop doing it. So there's a, um, you can make a snippet for
+
+00:28:42.480 --> 00:28:45.640
+the week and then you could have code in the snippet that
+
+00:28:45.680 --> 00:28:51.519
+would generate the dates automatically. Um, So I have like
+
+00:28:51.520 --> 00:28:56.599
+for my daily entry, I have a snippet called entry and then I
+
+00:28:56.600 --> 00:29:02.079
+hit tab and our control or whatever to insert the snippet and
+
+00:29:02.080 --> 00:29:07.919
+that has the current date already entered. So I skip that, I
+
+00:29:07.920 --> 00:29:13.479
+don't have to deal with that. So I think you could probably
+
+00:29:13.480 --> 00:29:18.639
+feed what you want to accomplish to a copilot, for example,
+
+00:29:18.640 --> 00:29:21.801
+being copilot. I've been using Bing Copilot
+
+00:29:21.802 --> 00:29:25.833
+for the past three or four months to return
+
+00:29:25.834 --> 00:29:29.227
+Elisp code that works 90% of the time.
+
+00:29:29.228 --> 00:29:34.399
+I've been pretty impressed. And it's free. So no
+
+00:29:34.400 --> 00:29:43.119
+API key required. It runs. So I guess I installed the Bing
+
+00:29:43.120 --> 00:29:49.362
+Copilot plugin in the Google Chrome.
+
+00:29:49.363 --> 00:29:50.199
+And that's what I've been using.
+
+00:29:50.200 --> 00:30:00.807
+Yeah, I can show you my screen if
+
+00:30:00.808 --> 00:30:05.852
+you want to see what the screen looks like.
+
+00:30:05.853 --> 00:30:06.839
+I can email you the template. I kind of have it saved as a
+
+00:30:06.840 --> 00:30:12.639
+template. I've got to find it, though. Let's see.
+
+00:30:12.640 --> 00:30:17.439
+Not exactly set up to.
+
+00:30:17.440 --> 00:30:44.159
+Alright, so. I
+
+00:30:44.160 --> 00:30:50.159
+don't know if you can see this well enough, but...
+
+00:30:50.160 --> 00:30:59.599
+Yeah, let's make it bigger. Can you see that at all? I can see a
+
+00:30:59.600 --> 00:31:01.279
+little bit of it. Yeah, it's kind of blurry.
+
+00:31:01.280 --> 00:31:07.399
+Alright, well. But then you just do that right there. So it's
+
+00:31:07.400 --> 00:31:13.239
+all color coded. I, so I get a sense of, uh, uh, what the kind of
+
+00:31:13.240 --> 00:31:18.599
+greenish blue lines must be or days, I guess, or. Okay. Well,
+
+00:31:18.600 --> 00:31:22.639
+right. There's like, so you can see like startup show two
+
+00:31:22.640 --> 00:31:27.519
+levels. Then I have like numbers right there. So right on one
+
+00:31:27.520 --> 00:31:30.919
+day you have like the core tasks, there's three out of four
+
+00:31:30.920 --> 00:31:37.119
+done. Then I have like secondary and unplanned and then.
+
+00:31:37.120 --> 00:31:42.079
+Yeah, that's just the general idea
+
+00:31:42.080 --> 00:31:50.319
+So that this is you raise you know the so the dilemma I face of
+
+00:31:50.320 --> 00:31:55.119
+course is that I have maintain like a to-do list and our
+
+00:31:55.120 --> 00:31:58.799
+project specific and then there's the all the other things I
+
+00:31:58.800 --> 00:32:04.439
+have to do and So there should be like some The org agenda
+
+00:32:04.440 --> 00:32:09.879
+should be a way of being able to pull the two sets together, I
+
+00:32:09.880 --> 00:32:10.319
+guess.
+
+00:32:10.320 --> 00:32:16.959
+I had broken up my,
+
+00:32:16.960 --> 00:32:25.359
+well, I had way too many to-do lists stored in various
+
+00:32:25.360 --> 00:32:25.919
+places.
+
+00:32:25.920 --> 00:32:32.199
+And so that's a problem, I guess, when you have too many
+
+00:32:32.200 --> 00:32:37.359
+to-dos and the org Agenda becomes overwhelming and sort of
+
+00:32:37.360 --> 00:32:44.479
+discourages Yeah, I figure that the general task on that is
+
+00:32:44.480 --> 00:32:49.199
+like I start writing things up. I get more and more items.
+
+00:32:49.200 --> 00:32:52.319
+I'll make a master to-do list. Oh my master to-do list has too
+
+00:32:52.320 --> 00:32:58.759
+many items. Let me throw it out Well, there's another name
+
+00:32:58.760 --> 00:33:01.559
+for that kind of list you could you know called a grass
+
+NOTE Time Power
+
+00:33:01.560 --> 00:33:06.959
+catcher list. So Charles Hobbs was this, he wrote a book in
+
+00:33:06.960 --> 00:33:16.079
+the 80s called Time Power. And he had like, you know, so he was
+
+00:33:16.080 --> 00:33:22.679
+one of these time management gurus. And so, let's
+
+00:33:22.680 --> 00:33:26.519
+see, you get the name of some, like Tony Robbins and,
+
+00:33:26.520 --> 00:33:34.879
+I forget the name of the other guy, that's Brian Tracy. So
+
+00:33:34.880 --> 00:33:39.119
+that they have kind of pushed the same kind of similar
+
+00:33:39.120 --> 00:33:43.279
+approaches. But Charles Hobbs had a very more organized
+
+00:33:43.280 --> 00:33:46.679
+approach, I think, and more disciplined. And he identified
+
+00:33:46.680 --> 00:33:49.439
+that kind of list as a grass catcher list, where you have a
+
+00:33:49.440 --> 00:33:52.839
+list of items that you think you might want to do, but you
+
+00:33:52.840 --> 00:33:57.359
+haven't prioritized them yet. And you haven't scheduled
+
+00:33:57.360 --> 00:34:03.199
+them yet. but they need a safe place to be stored. When time
+
+00:34:03.200 --> 00:34:06.199
+permits, the idea was you would pull items off that grass
+
+00:34:06.200 --> 00:34:10.599
+catcher list and move it into a to-do item that you will
+
+00:34:10.600 --> 00:34:18.079
+schedule and commit to getting done. That was the idea,
+
+00:34:18.080 --> 00:34:20.999
+separating them between core tasks, secondary tasks,
+
+00:34:21.000 --> 00:34:24.119
+unplanned tasks, because your whole day can't be planned.
+
+00:34:24.120 --> 00:34:27.919
+Right, right. You have things you have to do that are
+
+00:34:27.920 --> 00:34:31.319
+unscheduled that come through your door or land in your
+
+00:34:31.320 --> 00:34:35.239
+inbox or land in your email. You've got to do them. And then
+
+00:34:35.240 --> 00:34:38.799
+core tasks, I don't know, like to-do lists, their whole
+
+00:34:38.800 --> 00:34:43.279
+point is. So for instance, like journal and Zettelkasten
+
+00:34:43.280 --> 00:34:46.679
+are kind of, and like that's global lists versus the daily
+
+00:34:46.680 --> 00:34:49.399
+lists are kind of. done a little differently. With
+
+00:34:49.400 --> 00:34:53.639
+Zettelkasten, it's organic. Things build up. If you make a
+
+00:34:53.640 --> 00:34:56.359
+note, it's great. If you don't, if it has a small amount,
+
+00:34:56.360 --> 00:35:00.479
+that's great. Have a small note. With a daily to-do, you want
+
+00:35:00.480 --> 00:35:05.199
+to use it to make decisions. That's the idea of having the
+
+00:35:05.200 --> 00:35:08.639
+core task and the secondary task separate because the whole
+
+00:35:08.640 --> 00:35:12.719
+thing about it is, I wanna use this to eliminate what I'm
+
+00:35:12.720 --> 00:35:15.759
+going to do. It's to choose what I'm going to do, like the core
+
+00:35:15.760 --> 00:35:19.839
+tasks. Because if I can get my core tasks, I can be happy with
+
+00:35:19.840 --> 00:35:26.519
+my previous days. And then I would probably start using
+
+00:35:26.520 --> 00:35:30.639
+agenda a lot more if I was more consistent with using like
+
+00:35:30.640 --> 00:35:34.439
+these as like weekly files. I don't know. But then the whole
+
+00:35:34.440 --> 00:35:37.559
+goal thing is just like, let me see what I wanna populate the
+
+00:35:37.560 --> 00:35:43.879
+day list with. So how many core tasks wind up spanning
+
+00:35:43.880 --> 00:35:47.359
+multiple days because they're such big projects?
+
+00:35:47.360 --> 00:35:54.519
+I would need more time using the system before I'd figure
+
+00:35:54.520 --> 00:35:59.679
+something like that out. As I said, I'm not using it right
+
+00:35:59.680 --> 00:36:04.759
+now, but that has been my favorite iteration of using these.
+
+00:36:04.760 --> 00:36:13.519
+So within the core tasks, do you assign priorities? So the
+
+00:36:13.520 --> 00:36:20.279
+way I would translate this a little bit would be like in this
+
+00:36:20.280 --> 00:36:24.999
+method that Charles Hobbs had, he had a category for the
+
+00:36:25.000 --> 00:36:29.399
+items that you really have to get done, and they're really
+
+00:36:29.400 --> 00:36:34.119
+important. And so they get a priority of A. And then the
+
+00:36:34.120 --> 00:36:39.519
+secondary tasks would get a priority of B. But then within
+
+00:36:39.520 --> 00:36:42.079
+the A category, you would number them like one through
+
+00:36:42.080 --> 00:36:45.039
+three, I guess. All right, so this would be part of the
+
+00:36:45.040 --> 00:36:49.079
+purpose of separating the daily list or like the weekly list
+
+00:36:49.080 --> 00:36:51.719
+from the global list. So for instance, your global list,
+
+00:36:51.720 --> 00:36:55.679
+you'd say, I want this project that will take a long duration
+
+00:36:55.680 --> 00:37:00.639
+of time. But your daily list would just say, I want to work on
+
+00:37:00.640 --> 00:37:05.039
+it today, even if I don't get it done today. Like, I want to
+
+00:37:05.040 --> 00:37:11.399
+work on it today. then maybe you can link like for instance
+
+00:37:11.400 --> 00:37:16.239
+that your daily list to that global list or something along
+
+00:37:16.240 --> 00:37:20.479
+those lines. But that would be I think a good answer to that
+
+00:37:20.480 --> 00:37:24.719
+type of problem because yeah, the daily list is like
+
+00:37:24.720 --> 00:37:30.999
+supposed to be for that day, not for, Like for instance, you
+
+00:37:31.000 --> 00:37:34.679
+start out clean, you make the list like that would probably
+
+00:37:34.680 --> 00:37:38.599
+be your first task for the week is what do I want for the week?
+
+00:37:38.600 --> 00:37:41.639
+Then you have some tasks that you do with staging. And then
+
+00:37:41.640 --> 00:37:43.799
+like for instance, since you look at it as a whole week at a
+
+00:37:43.800 --> 00:37:47.559
+time, you're able to rearrange it and say, these are the
+
+00:37:47.560 --> 00:37:51.159
+things I wanna get done this week. This is what I really wanna
+
+00:37:51.160 --> 00:37:53.639
+get done on this day. This is what I don't care about on this
+
+00:37:53.640 --> 00:37:53.959
+day or yeah.
+
+00:37:53.960 --> 00:38:03.079
+Another person that kind of, and this is kind of related,
+
+00:38:03.080 --> 00:38:05.559
+there's this idea of
+
+00:38:05.560 --> 00:38:14.039
+of time blocking. So obviously, three tasks, core tasks,
+
+00:38:14.040 --> 00:38:18.839
+maybe they're going to take three or four hours each or two or
+
+00:38:18.840 --> 00:38:23.919
+three. And you can assign blocks of time in your schedule to
+
+00:38:23.920 --> 00:38:30.039
+get them done. And often, what happens is they take longer
+
+00:38:30.040 --> 00:38:33.799
+than you expect. And you have to extend the blocks. Calvin
+
+00:38:33.800 --> 00:38:39.359
+Newport has a that's a kind of approach he advocates is you
+
+00:38:39.360 --> 00:38:43.519
+and I think the power to that is you're you. you're mapping
+
+00:38:43.520 --> 00:38:48.599
+out, you know, you're allocating the time to do these things
+
+00:38:48.600 --> 00:38:52.679
+and you're seeing how you actually, how much time things
+
+00:38:52.680 --> 00:38:56.119
+actually take. And then you, so you wind up adjusting in the
+
+00:38:56.120 --> 00:39:00.079
+future. And the idea is with this approach is do it on paper.
+
+00:39:00.080 --> 00:39:03.559
+And then you have to like, uh, if something takes longer,
+
+00:39:03.560 --> 00:39:06.599
+that pushes everything else down. You just wind up
+
+00:39:06.600 --> 00:39:12.799
+redrawing your schedule for the day, uh, manually. And, um,
+
+00:39:12.800 --> 00:39:17.399
+So it's kind of laborious, and that labor is supposed to
+
+00:39:17.400 --> 00:39:21.799
+inhibit you from spending too much time on a project. As you
+
+00:39:21.800 --> 00:39:24.959
+know, you've got the pain of redrawing everything if you
+
+00:39:24.960 --> 00:39:27.919
+spend too much time on the first project.
+
+00:39:27.920 --> 00:39:36.999
+Yeah, there was a, let's see. It's whatever you strategy you
+
+00:39:37.000 --> 00:39:40.359
+want to do. Like for instance, to me, it's like doing it this
+
+00:39:40.360 --> 00:39:45.519
+way makes me say, I want to focus on like what matters. Then
+
+00:39:45.520 --> 00:39:49.239
+it'll tell me if I feel good about that day, depends on what
+
+00:39:49.240 --> 00:39:52.759
+algorithm, what level and what type of strategy you're
+
+00:39:52.760 --> 00:39:56.119
+using. If you're using time blocking, you're optimizing
+
+00:39:56.120 --> 00:40:02.879
+for each level of time block where I'm, where's like, And you
+
+00:40:02.880 --> 00:40:09.359
+can combine the approaches. It'd be trickier. But like, now
+
+00:40:09.360 --> 00:40:12.919
+let's see. I was listening to a talk with Jordan Peterson.
+
+00:40:12.920 --> 00:40:15.159
+One of the things he said that really resonated with me is
+
+00:40:15.160 --> 00:40:19.119
+like, you wanna use a calendar, but the first rule of using a
+
+00:40:19.120 --> 00:40:24.599
+calendar is don't let the calendar tyrannize you. Because
+
+00:40:24.600 --> 00:40:27.999
+like the first thing you wanna do whenever you use a calendar
+
+00:40:28.000 --> 00:40:33.039
+is schedule every single minute of the day Now you don't have
+
+00:40:33.040 --> 00:40:37.279
+any room for if any task overruns at all. And after a couple of
+
+00:40:37.280 --> 00:40:42.719
+tests, you're like, I don't want to do this anymore. I rebel.
+
+00:40:42.720 --> 00:40:49.879
+I'm going to throw it out. So one kind of combination is
+
+00:40:49.880 --> 00:40:53.799
+through this Pomodoro method I mentioned earlier, where
+
+00:40:53.800 --> 00:40:57.719
+you would sort of like block out, say, two hours. You work for
+
+00:40:57.720 --> 00:41:02.199
+like 25 minutes, take a little, break for up to five minutes
+
+00:41:02.200 --> 00:41:07.279
+and get back to work. And then after two hours, you're to take
+
+00:41:07.280 --> 00:41:11.119
+like a 15 minute break in the morning. In the afternoon, you
+
+00:41:11.120 --> 00:41:14.599
+might even let that break run longer and you might only have
+
+00:41:14.600 --> 00:41:19.279
+three work sessions between breaks. So because you're
+
+00:41:19.280 --> 00:41:24.319
+going to be more run down in the afternoon. And so you build in
+
+00:41:24.320 --> 00:41:26.919
+some
+
+00:41:26.920 --> 00:41:31.639
+into your schedule, some flex like, okay, that's supposed
+
+00:41:31.640 --> 00:41:34.439
+to be a break time, but you know, maybe some urgency comes up
+
+00:41:34.440 --> 00:41:37.999
+and you got to deal with, um, and you have to break out of this,
+
+00:41:38.000 --> 00:41:44.039
+uh, Pomodoro technique. So, uh, that, that, that's one way
+
+00:41:44.040 --> 00:41:48.799
+of kind of scheduling in some, uh, flexibility is through
+
+00:41:48.800 --> 00:41:54.399
+the breaks at Peterson's[??], right. Right. That... I can't, I
+
+00:41:54.400 --> 00:41:59.239
+can't... I don't schedule to that kind of detail. That's just
+
+00:41:59.240 --> 00:42:00.039
+too oppressive.
+
+00:42:00.040 --> 00:42:05.399
+Well, neither do I, but it's like that, like I, that's, I
+
+00:42:05.400 --> 00:42:09.119
+don't try to, to me, the much more interesting question that
+
+00:42:09.120 --> 00:42:12.479
+I tried to do is like, let's try to make sure I do the important
+
+00:42:12.480 --> 00:42:15.199
+things. Cause if I do those, my life would probably move a lot
+
+00:42:15.200 --> 00:42:19.319
+quicker. If I get, if I choose a couple items that I really
+
+00:42:19.320 --> 00:42:22.239
+want and am able to consistently do them, I think my life
+
+00:42:22.240 --> 00:42:26.319
+would bastically start improving. Not necessarily if I can
+
+00:42:26.320 --> 00:42:28.879
+play the game of optimizing every hour.
+
+00:42:28.880 --> 00:42:36.879
+Maybe that could be, and it's a place to start rather, and I
+
+00:42:36.880 --> 00:42:39.079
+think it'd be the most effective place to start. And if I got
+
+00:42:39.080 --> 00:42:42.719
+better at using it all the time, perhaps I'd be playing
+
+00:42:42.720 --> 00:42:46.999
+optimizing every hour game. But this is the game I think
+
+00:42:47.000 --> 00:42:52.719
+would be best bang for buck for me to optimize now. What
+
+00:42:52.720 --> 00:42:56.039
+you're trying to optimize for is accomplishing these core
+
+00:42:56.040 --> 00:43:03.559
+tasks, getting them done as quickly as possible, or as
+
+00:43:03.560 --> 00:43:10.559
+effectively as possible, and as effectively as you need, or
+
+00:43:10.560 --> 00:43:15.359
+whatever your goal is. But yeah, focusing on that rather
+
+00:43:15.360 --> 00:43:19.679
+than the scheduling, I think. Plus, a core task could be, I
+
+00:43:19.680 --> 00:43:26.119
+don't know, catch up on all my house chores, or let, or do a
+
+00:43:26.120 --> 00:43:28.879
+specific one if it's really big or like, I don't know, it's
+
+00:43:28.880 --> 00:43:32.159
+whatever you want it to be. It's like, you can make them
+
+00:43:32.160 --> 00:43:37.559
+bigger or smaller depending on, on how you word them and
+
+00:43:37.560 --> 00:43:40.919
+everything. Cause like, if you say cap, capture all of your
+
+00:43:40.920 --> 00:43:44.879
+house chores up for like one week and you haven't done
+
+00:43:44.880 --> 00:43:47.279
+anything, that's probably a little too ambitious.
+
+00:43:47.280 --> 00:43:56.439
+That's right. Yeah, well, a lot of. Yeah.
+
+00:43:56.440 --> 00:44:03.039
+I spend, I don't know, at least 15 minutes, half an hour at the
+
+00:44:03.040 --> 00:44:07.119
+beginning of the day, sort of my my planning and sort of my
+
+00:44:07.120 --> 00:44:12.359
+initial writing session is involves a bit of planning and
+
+00:44:12.360 --> 00:44:20.399
+there's always. A lot more time. So generally, depending on
+
+00:44:20.400 --> 00:44:21.279
+the nature of your work,
+
+00:44:21.280 --> 00:44:28.119
+it can take up to 15% of your time. It can take quite a bit of
+
+00:44:28.120 --> 00:44:33.919
+time. And I think people don't really acknowledge that as
+
+00:44:33.920 --> 00:44:39.039
+part of your work is planning. And it can take a significant
+
+00:44:39.040 --> 00:44:39.839
+amount of time.
+
+00:44:39.840 --> 00:44:44.799
+Yeah, that's what I was meaning though is like the very first
+
+00:44:44.800 --> 00:44:48.119
+thing I think people generally always try to do with the
+
+00:44:48.120 --> 00:44:51.279
+scanners like look at how productive I can be let's schedule
+
+00:44:51.280 --> 00:44:55.319
+every single minute up and it's like You're not gonna want to
+
+00:44:55.320 --> 00:45:00.519
+do that for very long and it's not gonna work out And what you
+
+00:45:00.520 --> 00:45:06.359
+were saying about The pomodoro technique one of the core
+
+00:45:06.360 --> 00:45:11.919
+Let's see, one of the benefits could be described of another
+
+00:45:11.920 --> 00:45:16.879
+benefit I've seen of like multiple habits books is if you
+
+00:45:16.880 --> 00:45:19.599
+start multiple small habits where you try to do them
+
+00:45:19.600 --> 00:45:23.319
+consistently, you give yourself an opening to where if you
+
+00:45:23.320 --> 00:45:28.279
+get into the flow state, you can do a lot more of it. Like, I
+
+00:45:28.280 --> 00:45:31.759
+don't know, let's say you got a habit of, I don't know, just
+
+00:45:31.760 --> 00:45:36.519
+write a journal entry. You're a journal entry of like at
+
+00:45:36.520 --> 00:45:39.279
+least two lines. I don't know that could very easily turn to
+
+00:45:39.280 --> 00:45:42.759
+like three paragraphs and if you have like a whole bunch of
+
+00:45:42.760 --> 00:45:46.279
+Like the pomodoro technique it could be like stubs to allow
+
+00:45:46.280 --> 00:45:47.639
+you to do more stuff
+
+00:45:47.640 --> 00:45:54.319
+Where are they in spur to allow inspiration to allow you to
+
+00:45:54.320 --> 00:45:57.239
+generate inspiration and then capture it when it strikes if
+
+00:45:57.240 --> 00:45:58.759
+the mood fancies you
+
+00:45:58.760 --> 00:46:08.319
+Yeah, so that's kind of an issue with the Pomodoro
+
+00:46:08.320 --> 00:46:13.839
+technique. So, one idea is that you just, if you really have
+
+00:46:13.840 --> 00:46:19.359
+to break out, because the idea is too big to put on the back
+
+00:46:19.360 --> 00:46:24.359
+burner and hold in place, then you do have to break out of the
+
+00:46:24.360 --> 00:46:30.039
+Pomodoro and go, you know, jot down a quick note or three
+
+00:46:30.040 --> 00:46:30.719
+paragraphs.
+
+00:46:30.720 --> 00:46:36.839
+but like how much... You don't get to count that as a
+
+00:46:36.840 --> 00:46:40.679
+Pomodoro. You have to like reset your count because you've
+
+00:46:40.680 --> 00:46:48.759
+broken it. I mean, according to that method, it's
+
+00:46:48.760 --> 00:46:52.879
+kind of rigid. It's a different algorithm optimizing for
+
+00:46:52.880 --> 00:46:55.479
+different things. And this may just be like a by-product,
+
+00:46:55.480 --> 00:47:00.759
+but this could be very easily like a core advantage that may
+
+00:47:00.760 --> 00:47:05.599
+or may not be the core reason that you were using it but didn't
+
+00:47:05.600 --> 00:47:08.719
+realize it, and may not be something that it's optimizing
+
+00:47:08.720 --> 00:47:17.399
+for. So
+
+00:47:17.400 --> 00:47:22.159
+are you developing a Emacs package then with your template?
+
+00:47:22.160 --> 00:47:30.319
+No. As I said,
+
+00:47:30.320 --> 00:47:36.319
+My next steps where I think would make it work a lot better is
+
+00:47:36.320 --> 00:47:39.999
+if I figured out some way of automatically filling out the
+
+00:47:40.000 --> 00:47:45.439
+dates or maybe automatically adding the file per week into
+
+00:47:45.440 --> 00:47:51.999
+and out of Org Agenda. That would be my next steps. I think if I
+
+00:47:52.000 --> 00:47:55.719
+did that, it would have a much greater chance of becoming
+
+00:47:55.720 --> 00:48:01.879
+part of my workflow at all times. Yeah, I bet you could do it
+
+00:48:01.880 --> 00:48:08.439
+pretty Something I got to work with the help of copilot. I'm
+
+00:48:08.440 --> 00:48:14.959
+not a wizard yet at Emacs Lisp, but I find that copilot is
+
+00:48:14.960 --> 00:48:26.439
+quite helpful.
+
+00:48:26.440 --> 00:48:32.799
+Yeah, their AIs are definitely interesting.
+
+NOTE Do you use a lot of TeX inside Org Mode?
+
+00:48:32.800 --> 00:48:38.279
+So. do you ever use any, uh, a lot of TeX inside of org mode?
+
+00:48:38.280 --> 00:48:49.639
+No, mostly because I know that like I could try to learn it,
+
+00:48:49.640 --> 00:48:57.639
+but I just don't have a need for it. So yeah. And then also like
+
+00:48:57.640 --> 00:49:05.279
+I remember learning, when I learned HTML, I like writing
+
+00:49:05.280 --> 00:49:08.519
+HTML more than like, for instance, Word, because it was a lot
+
+00:49:08.520 --> 00:49:14.959
+more transparent, like a plain text document is, and kind of
+
+00:49:14.960 --> 00:49:20.159
+wrote the ordered list, unordered list, in such a way that it
+
+00:49:20.160 --> 00:49:25.599
+kind of looked similar to the page. But I find that I like Org
+
+00:49:25.600 --> 00:49:26.439
+Mode more than,
+
+00:49:26.440 --> 00:49:35.479
+HTML because, well, it's optimized for, like, my writing
+
+00:49:35.480 --> 00:49:38.479
+and consumption and overall use case rather than, like,
+
+00:49:38.480 --> 00:49:43.359
+optimizing it for somebody else to view, which I generally
+
+00:49:43.360 --> 00:49:45.039
+don't have as much.
+
+00:49:45.040 --> 00:49:52.799
+But, so, like, I don't know. Org Mode is what I'm going to end
+
+00:49:52.800 --> 00:49:57.879
+up using the most, so. I just want to use LaTeX enough.
+
+00:49:57.880 --> 00:50:00.999
+Although I'd be interested in learning LaTeX snippets
+
+00:50:01.000 --> 00:50:06.519
+inside of Org Mode for like the math stuff, but then again, I
+
+00:50:06.520 --> 00:50:13.479
+just never have to type it. So my attitude towards Org Mode
+
+00:50:13.480 --> 00:50:18.199
+changed radically over the summer. I was avoiding it
+
+00:50:18.200 --> 00:50:25.439
+somewhat before and then when I realized I can keep all the
+
+00:50:25.440 --> 00:50:33.279
+great aspects of LaTeX and still use all the great features
+
+00:50:33.280 --> 00:50:39.959
+of Org Mode. So I view now, I think of Org Mode as a wrapper
+
+00:50:39.960 --> 00:50:44.559
+around LaTeX. I know it's not really that, but by thinking
+
+00:50:44.560 --> 00:50:49.159
+about it that way, uh, it's much more palatable to me to, uh,
+
+00:50:49.160 --> 00:50:54.679
+uh, just go, uh, commit to doing as much as possible in org
+
+00:50:54.680 --> 00:50:58.559
+mode. So I've been, that's what I've been doing. Um, this
+
+00:50:58.560 --> 00:51:01.839
+fall is just, uh, every document I started as an org file.
+
+00:51:01.840 --> 00:51:09.959
+I imagine I would like it if I knew it, it's just because I,
+
+00:51:09.960 --> 00:51:13.319
+because I imagine it would feel to me like HTML, or it's just
+
+00:51:13.320 --> 00:51:18.519
+like, Yeah, I can write it, I can format it the way I want to.
+
+00:51:18.520 --> 00:51:24.439
+This is just guesses from my experience with HTML. I can read
+
+00:51:24.440 --> 00:51:27.679
+the source code of it and kind of get an idea of how it will look
+
+00:51:27.680 --> 00:51:30.919
+like, but I just...
+
+00:51:30.920 --> 00:51:36.799
+It's like if you're gonna use the Linux terminal, but you're
+
+00:51:36.800 --> 00:51:41.639
+gonna use it for an hour a week every... Yeah, an hour a week.
+
+00:51:41.640 --> 00:51:45.199
+It's just like, it's just not enough time to dedicate to
+
+00:51:45.200 --> 00:51:48.279
+learn it for to start paying off. That's right. And you can
+
+00:51:48.280 --> 00:51:52.559
+always export your org file to an HTML file.
+
+00:51:52.560 --> 00:51:56.079
+Yeah.
+
+00:51:56.080 --> 00:52:06.039
+But the org file is what I stare at 95% of the time or more. I
+
+00:52:06.040 --> 00:52:10.519
+only use a PDF. So I export to PDF generally. And when I export
+
+00:52:10.520 --> 00:52:16.239
+to HTML, it's very cool. I like looking at the document in the
+
+00:52:16.240 --> 00:52:20.879
+web browser. I like navigating it. But I generally will
+
+00:52:20.880 --> 00:52:24.879
+export it to PDF so I can print it out when I'm traveling to
+
+00:52:24.880 --> 00:52:30.439
+carry out editing. But that's just a small, tiny fraction of
+
+00:52:30.440 --> 00:52:34.039
+the time that I'm actually working with the document. So
+
+00:52:34.040 --> 00:52:38.119
+most of the time it's in org mode. You know, maybe it doesn't
+
+00:52:38.120 --> 00:52:44.199
+look as pretty as in, you know, uh, HTML, but it's, uh, it's so
+
+00:52:44.200 --> 00:52:48.679
+such a pleasure to work in because of the way you can reorder
+
+NOTE Org Mode versus Markdown
+
+00:52:48.680 --> 00:52:55.119
+lists, you know, create headlines. So what about org mode
+
+00:52:55.120 --> 00:52:57.719
+versus Markdown? Cause I know when, cause when I looked at
+
+00:52:57.720 --> 00:53:00.559
+org mode versus Markdown, I was like, yeah, more stuff
+
+00:53:00.560 --> 00:53:05.039
+supports Markdown, but. Org mode has more stuff built into
+
+00:53:05.040 --> 00:53:10.519
+it, like the calendar and agenda stuff. And it's obvious
+
+00:53:10.520 --> 00:53:14.559
+what this is supposed to be in org mode. And Emacs has got the
+
+00:53:14.560 --> 00:53:18.919
+best client. I use Emacs. And I think it's got a better syntax
+
+00:53:18.920 --> 00:53:23.319
+than Markdown. You've got stuff like Obsidian and Notes.
+
+00:53:23.320 --> 00:53:30.959
+And what about the Markdown? So Markdown, I use it a lot on
+
+00:53:30.960 --> 00:53:35.479
+GitHub repositories for the readme files. Sometimes I'll
+
+00:53:35.480 --> 00:53:38.959
+do them in org, but generally just go with the GitHub
+
+00:53:38.960 --> 00:53:44.159
+Markdown. But tables are still kind of a pain in Markdown,
+
+00:53:44.160 --> 00:53:48.719
+whereas tables are such a pleasure to build in org mode,
+
+00:53:48.720 --> 00:53:52.959
+because you have that dynamic adjusting of the column width
+
+00:53:52.960 --> 00:53:59.239
+as you make entries that become wider. And it's so easy to add
+
+00:53:59.240 --> 00:54:04.159
+columns. And it's so hard to add columns. It's much harder in
+
+00:54:04.160 --> 00:54:12.479
+Markdown and in LaTeX. It's more of a pain to add new columns.
+
+00:54:12.480 --> 00:54:16.919
+So the table aspect, that, to me, was one of the killer
+
+00:54:16.920 --> 00:54:20.439
+features. And then the other killer feature, of course, is
+
+00:54:20.440 --> 00:54:24.159
+the literate programming or interactive programming. So
+
+00:54:24.160 --> 00:54:26.559
+interactive computing that you can do where you have a code
+
+00:54:26.560 --> 00:54:30.639
+block and then you can execute it and have the output show up
+
+00:54:30.640 --> 00:54:35.159
+right below the code block. And
+
+00:54:35.160 --> 00:54:40.839
+org modes support for that kind of interactive computing is
+
+00:54:40.840 --> 00:54:46.039
+I'm not aware of anything more sophisticated, because you
+
+00:54:46.040 --> 00:54:50.799
+could have parallel sessions. You could have four Python
+
+00:54:50.800 --> 00:54:55.039
+sessions going, each of them labeled differently. And
+
+00:54:55.040 --> 00:54:57.519
+they're all walled off from each other. They don't see each
+
+00:54:57.520 --> 00:55:07.079
+other. Or you can have different programming languages. So
+
+00:55:07.080 --> 00:55:11.039
+you can do polyglottic
+
+00:55:11.040 --> 00:55:14.359
+programming where you have... Maybe Python's generating a
+
+00:55:14.360 --> 00:55:18.239
+table, and then that table gets, you decide you want to plot
+
+00:55:18.240 --> 00:55:24.199
+it using R, or you want to use ggplot2 and R to plot it, so that
+
+00:55:24.200 --> 00:55:29.719
+table gets fed into R in the next code block down, and then
+
+00:55:29.720 --> 00:55:33.559
+below it, you get a graph made in R, or you can make it in new
+
+00:55:33.560 --> 00:55:39.559
+plot, or you could, or some other, or you could move it into a
+
+00:55:39.560 --> 00:55:47.399
+LaTeX code block, plot the data in with Tikz,
+
+00:55:47.400 --> 00:55:52.719
+or you could move it into Clojure and use one of the
+
+00:55:52.720 --> 00:55:56.399
+Clojure plotting programs. Just kind of limitless what you
+
+00:55:56.400 --> 00:56:00.119
+can do in terms of recombining the best of different
+
+00:56:00.120 --> 00:56:01.599
+programming languages.
+
+00:56:01.600 --> 00:56:09.239
+Yeah, let's see. The literate DevOps are really good talks
+
+00:56:09.240 --> 00:56:13.359
+and subjects to get into this type of stuff. And they give a
+
+00:56:13.360 --> 00:56:17.119
+very good example of some tips on how to do this. You start
+
+00:56:17.120 --> 00:56:20.359
+writing in the previous or past tenses, though. You got the
+
+00:56:20.360 --> 00:56:23.719
+answer already, and then your notes are already formatted
+
+00:56:23.720 --> 00:56:28.559
+out as you're doing it for after the fact. And like, one thing
+
+NOTE Raku
+
+00:56:28.560 --> 00:56:32.679
+I like doing a lot is using the Raku language as a calculator,
+
+00:56:32.680 --> 00:56:37.239
+because I can just type in math as normal and it all works.
+
+00:56:37.240 --> 00:56:44.919
+I've tried that. Yeah, you can just say like, I don't know, 25
+
+00:56:44.920 --> 00:56:49.559
+times four with, and you can put like parentheses in it. I'm
+
+00:56:49.560 --> 00:56:55.039
+not exactly, I haven't used it very heavily. Oh, it also
+
+00:56:55.040 --> 00:57:01.839
+supports Unicode. So if you wanted to have
+
+00:57:01.840 --> 00:57:07.319
+the not equals sign, the Unicode not equals sign, it will
+
+00:57:07.320 --> 00:57:12.919
+actually do that. Cool. Or like the division sign. I don't
+
+00:57:12.920 --> 00:57:22.759
+know how it will do it. Yeah. But yeah. And then using that in,
+
+00:57:22.760 --> 00:57:28.239
+I also wrote a shell script where it would just help me do a
+
+00:57:28.240 --> 00:57:31.879
+calculation. I was trying to do a business calculation
+
+00:57:31.880 --> 00:57:35.359
+where I was, and I'd have variable names and I ended up
+
+00:57:35.360 --> 00:57:39.319
+writing the, in the parentheses I'd have enters, returns,
+
+00:57:39.320 --> 00:57:42.319
+and then just a variable name with like a dollar sign, kind of
+
+00:57:42.320 --> 00:57:45.799
+like how you'd have in the shell. And I outputted every
+
+00:57:45.800 --> 00:57:47.479
+single line that I had in the enter.
+
+00:57:47.480 --> 00:57:54.479
+six or 10 variables in this paragraph, the paragraph
+
+00:57:54.480 --> 00:57:57.759
+spanned, I don't know, like four lines or something like
+
+00:57:57.760 --> 00:58:01.039
+that. Maybe, yeah, something, I think it was along those
+
+00:58:01.040 --> 00:58:04.599
+lines. And I was just thinking of like what this would be in
+
+00:58:04.600 --> 00:58:07.879
+something else, just like, it was a lot nicer. Yeah, I had
+
+00:58:07.880 --> 00:58:10.879
+like equations for the variable, like in like one line, but
+
+00:58:10.880 --> 00:58:13.839
+when I wrote that, what my output should be is like, like I
+
+00:58:13.840 --> 00:58:16.359
+wasn't putting all of these like, you know, string join,
+
+00:58:16.360 --> 00:58:21.159
+string join, string join, It looked relatively close to
+
+00:58:21.160 --> 00:58:25.239
+what my terminal output would be, and then a later iteration
+
+00:58:25.240 --> 00:58:29.039
+I found on this was, let's write what I'm going to put into the
+
+00:58:29.040 --> 00:58:36.119
+command line, made a couple changeable variables in it, and
+
+00:58:36.120 --> 00:58:40.039
+then I can see my results, and that ended up being very nice.
+
+00:58:40.040 --> 00:58:44.199
+Ended up being nicer than the shells. Yeah, ended up
+
+00:58:44.200 --> 00:58:45.959
+enhancing that shell script that I wrote.
+
+00:58:45.960 --> 00:58:50.919
+That's a Raku calculator.
+
+00:58:50.920 --> 00:58:57.759
+Uh, it's the Raku programming language, which I was just
+
+00:58:57.760 --> 00:59:02.479
+using it, which I was just using as, which I'll just use as
+
+00:59:02.480 --> 00:59:06.079
+just straight up that calculator. Cause I'll do like,
+
+00:59:06.080 --> 00:59:11.999
+because it supports math well enough that I, like I, yeah,
+
+00:59:12.000 --> 00:59:17.239
+you can put like 25 divided by four and it doesn't start
+
+00:59:17.240 --> 00:59:24.439
+doing, what's the word, modular fractal, the double math,
+
+00:59:24.440 --> 00:59:28.079
+like it,
+
+00:59:28.080 --> 00:59:28.639
+if it's,
+
+00:59:28.640 --> 00:59:34.439
+the double math where it's like negative .2 versus like
+
+00:59:34.440 --> 00:59:40.399
+minus one, or sometimes it'll do optimized computer math
+
+00:59:40.400 --> 00:59:43.999
+where it doesn't give you the right answer, why people will
+
+00:59:44.000 --> 00:59:44.639
+like Mathematica.
+
+00:59:44.640 --> 00:59:56.439
+So, how do you, do you access it through, in org mode then?
+
+00:59:56.440 --> 01:00:05.199
+I'll do it in that. Sometimes I just fire up a Raku shell, but
+
+01:00:05.200 --> 01:00:09.159
+one of the biggest things I'll fire up a Raku shell for is like
+
+01:00:09.160 --> 01:00:17.399
+just, um, what's oh just recently I was just like doing it for
+
+01:00:17.400 --> 01:00:20.399
+some math and like how many people how much money will I have
+
+01:00:20.400 --> 01:00:24.559
+to spend on Christmas oh I've got I'm gonna buy this gift it's
+
+01:00:24.560 --> 01:00:33.799
+gonna cost this much and then I've got so let's I think 15
+
+01:00:33.800 --> 01:00:37.959
+times four because it's no 60 divided by four because it was a
+
+01:00:37.960 --> 01:00:42.919
+four pack And then times, and then I put it in parentheses,
+
+01:00:42.920 --> 01:00:47.519
+oh, four plus like two plus two, because like of the
+
+01:00:47.520 --> 01:00:49.119
+families, each of the units, and I just started doing it that
+
+01:00:49.120 --> 01:00:53.479
+way. And I put them all in a parentheses. And then at the end of
+
+01:00:53.480 --> 01:00:55.959
+this spit out the numbers, like, so I could just use the
+
+01:00:55.960 --> 01:00:58.279
+parentheses without thinking about, you know, like, oh,
+
+01:00:58.280 --> 01:01:02.679
+I'm actually in a programming language. No, I just kind of
+
+01:01:02.680 --> 01:01:07.279
+wrote it like I was in algebra, algebra, not in,
+
+01:01:07.280 --> 01:01:11.359
+not finding some special program, not finding a
+
+01:01:11.360 --> 01:01:14.999
+calculator, because it's easy for me to file up a terminal.
+
+01:01:15.000 --> 01:01:20.439
+Then I open that up, and it all just works. Plus, I also got a
+
+01:01:20.440 --> 01:01:22.639
+full programming language behind it if I ever need it.
+
+01:01:22.640 --> 01:01:33.679
+I wasn't aware that it utilizes standard math notation
+
+01:01:33.680 --> 01:01:37.279
+rather than the Polish math notation that we use in ELISP.
+
+01:01:37.280 --> 01:01:42.839
+Um, that's interesting because it's, it's in the list
+
+01:01:42.840 --> 01:01:45.279
+family of programming languages.
+
+01:01:45.280 --> 01:01:54.399
+Yeah. It's like, Hey, I can use, I can actually use my math
+
+01:01:54.400 --> 01:01:57.879
+knowledge. I can use the order of operations.
+
+01:01:57.880 --> 01:02:00.879
+Yep.
+
+01:02:00.880 --> 01:02:07.999
+I just wish that when I was in high school, they started
+
+01:02:08.000 --> 01:02:10.239
+telling me how to practically use this rather than me
+
+01:02:10.240 --> 01:02:14.119
+discover it years later when I'm out of it. Yeah.
+
+01:02:14.120 --> 01:02:27.399
+Well, I probably better move along to attend the other
+
+01:02:27.400 --> 01:02:32.839
+talks. All right. So it's been great talking to you, Plasma
+
+01:02:32.840 --> 01:02:35.159
+Strike. Yep, you too.
diff --git a/2024/captions/emacsconf-2024-project--managing-writing-project-metadata-with-orgmode--blaine-mooers--main--chapters.vtt b/2024/captions/emacsconf-2024-project--managing-writing-project-metadata-with-orgmode--blaine-mooers--main--chapters.vtt
new file mode 100644
index 00000000..9c239169
--- /dev/null
+++ b/2024/captions/emacsconf-2024-project--managing-writing-project-metadata-with-orgmode--blaine-mooers--main--chapters.vtt
@@ -0,0 +1,59 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:02:20.079
+Introduction
+
+00:02:20.080 --> 00:04:05.479
+Starting a new writing project
+
+00:04:05.480 --> 00:04:36.959
+The writing log
+
+00:04:36.960 --> 00:05:25.309
+Starting the research paper
+
+00:05:25.310 --> 00:06:11.439
+Outline
+
+00:06:11.440 --> 00:07:17.457
+Another kind of writing log - accountability
+
+00:07:17.458 --> 00:07:46.479
+Reducing switching costs
+
+00:07:46.480 --> 00:09:31.519
+Motivation
+
+00:09:31.520 --> 00:10:17.294
+Overview of the writing log
+
+00:10:17.295 --> 00:10:42.667
+LaTeX preamble in opened drawer
+
+00:10:42.668 --> 00:12:21.399
+Informative header
+
+00:12:21.400 --> 00:13:28.079
+Four workflows
+
+00:13:28.080 --> 00:14:56.959
+Project initiation workflow
+
+00:14:56.960 --> 00:17:05.750
+Daily workflow
+
+00:17:05.751 --> 00:17:48.884
+Metadata and metacognition
+
+00:17:48.885 --> 00:18:56.959
+Periodic assessment workflow
+
+00:18:56.960 --> 00:19:49.639
+Project closeout workflow
+
+00:19:49.640 --> 00:20:34.519
+Conclusions
+
+00:20:34.520 --> 00:21:37.720
+Acknowledgements
diff --git a/2024/captions/emacsconf-2024-project--managing-writing-project-metadata-with-orgmode--blaine-mooers--main.vtt b/2024/captions/emacsconf-2024-project--managing-writing-project-metadata-with-orgmode--blaine-mooers--main.vtt
new file mode 100644
index 00000000..d728c78e
--- /dev/null
+++ b/2024/captions/emacsconf-2024-project--managing-writing-project-metadata-with-orgmode--blaine-mooers--main.vtt
@@ -0,0 +1,894 @@
+WEBVTT captioned by sachac
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:09.999
+Good morning. I'm Blaine Mooers. I'm an associate
+
+00:00:10.000 --> 00:00:12.399
+professor of biochemistry and physiology at the
+
+00:00:12.400 --> 00:00:15.079
+University of Oklahoma Health Sciences in Oklahoma City.
+
+00:00:15.080 --> 00:00:21.639
+I'm going to be talking about the utilization of Org mode to
+
+00:00:21.640 --> 00:00:26.799
+write a specific kind of log file for thinking about writing
+
+00:00:26.800 --> 00:00:31.599
+projects, in particular research articles. I have stored a
+
+00:00:31.600 --> 00:00:35.919
+template for this file on GitHub. You can find it at Mooers
+
+00:00:35.920 --> 00:00:40.759
+Lab. If you go to the landing page and scroll down to
+
+00:00:40.760 --> 00:00:47.279
+Emacs-related, you'll find a link to it.
+
+00:00:47.280 --> 00:00:50.679
+I am a structural biologist. I utilize X-ray
+
+00:00:50.680 --> 00:00:53.359
+crystallography to determine the structures of proteins
+
+00:00:53.360 --> 00:00:58.919
+and nucleic acids that are important in human health. Our
+
+00:00:58.920 --> 00:01:01.879
+workflow is shown across the top. We start out with a
+
+00:01:01.880 --> 00:01:04.959
+purified material that we crystallize as shown by that
+
+00:01:04.960 --> 00:01:09.599
+elongated rod-shaped crystal on the left. We will mount
+
+00:01:09.600 --> 00:01:14.959
+that in a cold stream and collect diffraction data with
+
+00:01:14.960 --> 00:01:20.399
+X-rays in the instrument to the right. That instrument will
+
+00:01:20.400 --> 00:01:23.559
+generate an image like the one to the right where you see a
+
+00:01:23.560 --> 00:01:26.319
+bunch of spots. That's a diffraction pattern from the
+
+00:01:26.320 --> 00:01:29.799
+crystal. After rotating the crystal for one degree, we'll
+
+00:01:29.800 --> 00:01:33.079
+rotate the crystal 180 degrees to get a full data set that
+
+00:01:33.080 --> 00:01:37.359
+we'll process with a computer. This will lead to the
+
+00:01:37.360 --> 00:01:43.719
+chicken-wire map of electron density shown further to the
+
+00:01:43.720 --> 00:01:49.999
+right. Then on the far right, we have compared
+
+00:01:50.000 --> 00:01:54.799
+electrostructures of two drug molecules from two
+
+00:01:54.800 --> 00:01:59.399
+different structures, overlapped after superimposing
+
+00:01:59.400 --> 00:02:02.919
+a wild type protein and a mutant protein. We're trying to
+
+00:02:02.920 --> 00:02:05.959
+analyze how the mutant was preventing one of the drugs from
+
+00:02:05.960 --> 00:02:12.199
+binding. These kind of analyses we can develop that are
+
+00:02:12.200 --> 00:02:16.519
+drugs. In this case, the drugs are being used to treat lung
+
+00:02:16.520 --> 00:02:20.079
+cancer.
+
+NOTE Starting a new writing project
+
+00:02:20.080 --> 00:02:24.919
+When I start a new writing project, I will assign it a number.
+
+00:02:24.920 --> 00:02:29.639
+In this case, I'm developing a review article about the
+
+00:02:29.640 --> 00:02:32.479
+detection of crystals in images collected with
+
+00:02:32.480 --> 00:02:33.861
+microscopes like the image in the upper left.
+
+00:02:33.862 --> 00:02:42.639
+The article is about the utilization of AI to help with that
+
+00:02:42.640 --> 00:02:49.039
+detection of crystals. I start the name of the folder with
+
+00:02:49.040 --> 00:02:55.079
+this index number, and I store the manuscript folders in the
+
+00:02:55.080 --> 00:02:59.159
+top level of my home directory to ease navigation.
+
+00:02:59.160 --> 00:03:03.839
+Whenever I pop open a terminal window, I just enter 0573, hit
+
+00:03:03.840 --> 00:03:07.279
+TAB to autocomplete the name of the folder, and I'll be right
+
+00:03:07.280 --> 00:03:11.599
+in the appropriate folder. I also use that index number to
+
+00:03:11.600 --> 00:03:14.879
+label the names of the files. I start every project with
+
+00:03:14.880 --> 00:03:19.519
+three files: a manuscript, the log file that I'll be talking
+
+00:03:19.520 --> 00:03:22.759
+about today, and an annotated bibliography, which is kind
+
+00:03:22.760 --> 00:03:25.999
+of like one on steroids. Annotated bibliography for the
+
+00:03:26.000 --> 00:03:30.759
+21st century, not the 20th century annotated bibliography
+
+00:03:30.760 --> 00:03:37.239
+you worked on as an undergraduate.
+
+00:03:37.240 --> 00:03:40.279
+I have developed templates not only for Org Mode, but also
+
+00:03:40.280 --> 00:03:45.359
+for other markup languages, like R Markdown and LaTeX. I
+
+00:03:45.360 --> 00:03:49.399
+actually developed this
+
+00:03:49.400 --> 00:03:54.839
+log file template over a dozen years ago in LaTeX. I also
+
+00:03:54.840 --> 00:03:58.159
+have developed it for Typst. Typst is independent of LaTeX.
+
+00:03:58.160 --> 00:04:04.079
+It's inspired by LaTeX, but it's written in Rust, and
+
+00:04:04.080 --> 00:04:05.479
+it's extremely fast.
+
+NOTE The writing log
+
+00:04:05.480 --> 00:04:11.799
+My writing process involves having the writing log at the
+
+00:04:11.800 --> 00:04:14.479
+center of the process. That's where I began the writing
+
+00:04:14.480 --> 00:04:19.679
+project. On the right, I have the manuscript and all its
+
+00:04:19.680 --> 00:04:25.839
+components highlighted in yellow. On the right,
+
+00:04:25.840 --> 00:04:29.839
+hopefully I said on the right, I have the manuscript with all
+
+00:04:29.840 --> 00:04:33.199
+its components highlighted in yellow. On the left, I have
+
+00:04:33.200 --> 00:04:36.959
+the annotated bibliography.
+
+NOTE Starting the research paper
+
+00:04:36.960 --> 00:04:42.199
+When I start a research paper, I will do this after I have
+
+00:04:42.200 --> 00:04:49.639
+built up a strong idea from various sources, and then I'll
+
+00:04:49.640 --> 00:04:54.919
+sit down and go through a series of steps outlined in the
+
+00:04:54.920 --> 00:04:59.839
+writing log to develop that central hypothesis into
+
+00:04:59.840 --> 00:05:03.839
+several paragraphs that are used in the introduction of the
+
+00:05:03.840 --> 00:05:08.159
+manuscript. The rest of the manuscript is built around that
+
+00:05:08.160 --> 00:05:11.599
+central hypothesis, so the results section will include
+
+00:05:11.600 --> 00:05:15.799
+experiments that address the central hypothesis, and it
+
+00:05:15.800 --> 00:05:19.479
+will exclude experiments that have nothing to do with it.
+
+00:05:19.480 --> 00:05:22.719
+Likewise, the discussion points address the central
+
+00:05:22.720 --> 00:05:25.309
+hypothesis.
+
+NOTE Outline
+
+00:05:25.310 --> 00:05:27.919
+When I'm done developing that introduction
+
+00:05:27.920 --> 00:05:33.439
+in, say, three or four hours, I'll have an outline in hand. At
+
+00:05:33.440 --> 00:05:38.199
+least for the results and discussion section, the outline
+
+00:05:38.200 --> 00:05:44.199
+will be detailed down to at least a sub-heading level.
+
+00:05:44.200 --> 00:05:47.239
+I'll move those components over to the manuscript on the
+
+00:05:47.240 --> 00:05:53.079
+right. As work is done to address that central
+
+00:05:53.080 --> 00:05:58.119
+hypothesis, the manuscript will be updated. Also as
+
+00:05:58.120 --> 00:06:01.359
+exploration of the literature continues, new ideas will
+
+00:06:01.360 --> 00:06:11.439
+flow in to the manuscript through the log file.
+
+NOTE Another kind of writing log - accountability
+
+00:06:11.440 --> 00:06:13.519
+You've probably heard of another kind of writing log, which
+
+00:06:13.520 --> 00:06:16.719
+is more of an accountability tool, a tool you use to hold
+
+00:06:16.720 --> 00:06:20.599
+yourself accountable in terms of your commitment to work on
+
+00:06:20.600 --> 00:06:24.716
+your writing projects.
+
+00:06:24.717 --> 00:06:28.999
+So, this idea of carrying out this
+
+00:06:29.000 --> 00:06:32.716
+documentation is supported by research done by
+
+00:06:32.717 --> 00:06:35.838
+Robert Boice. He found that those academics
+
+00:06:35.839 --> 00:06:39.100
+who record their writing
+
+00:06:39.101 --> 00:06:42.002
+are four times more productive than those that do not.
+
+00:06:42.003 --> 00:06:44.119
+Those that actually share their writing with
+
+00:06:44.120 --> 00:06:47.719
+colleagues are nine times more productive. This is sort of a
+
+00:06:47.720 --> 00:06:55.479
+case in point. This is a snapshot of a Google sheet of such a
+
+00:06:55.480 --> 00:07:03.279
+writing log that I was sharing as part of a Google workbook.
+
+00:07:03.280 --> 00:07:06.959
+I was sharing it with three other colleagues. I had the
+
+00:07:06.960 --> 00:07:14.319
+possibility of them taking a peek at my Google sheet, and that
+
+00:07:14.320 --> 00:07:17.457
+possibility I found to be highly motivating.
+
+NOTE Reducing switching costs
+
+00:07:17.458 --> 00:07:22.599
+As you can see, on July 24th, 2023, I worked on five different writing
+
+00:07:22.600 --> 00:07:25.959
+projects. This would not have been possible if it had not
+
+00:07:25.960 --> 00:07:29.399
+been for having five separate writing logs where I could
+
+00:07:29.400 --> 00:07:32.759
+figure out where I had started and where I would report the
+
+00:07:32.760 --> 00:07:36.959
+day's progress before maybe taking a break and then
+
+00:07:36.960 --> 00:07:41.199
+switching to another writing project. The writing log
+
+00:07:41.200 --> 00:07:46.479
+helps reduce switching costs between projects.
+
+NOTE Motivation
+
+00:07:46.480 --> 00:07:57.959
+My motivation for developing this project-specific log
+
+00:07:57.960 --> 00:08:02.959
+that I'm presenting here is to support clearer thinking
+
+00:08:02.960 --> 00:08:06.879
+about the science that I'm trying to do, hopefully leading
+
+00:08:06.880 --> 00:08:10.399
+to better science, as well as accelerating the completion
+
+00:08:10.400 --> 00:08:13.439
+of the writing project. The secondary purpose is to enable
+
+00:08:13.440 --> 00:08:17.719
+working on multiple writing projects in parallel. This is
+
+00:08:17.720 --> 00:08:21.799
+important to be able to harness your subconscious. If you
+
+00:08:21.800 --> 00:08:25.919
+work on project A for a few hours in the morning, say early
+
+00:08:25.920 --> 00:08:28.210
+morning, then late morning you work on project B.
+
+00:08:28.211 --> 00:08:33.860
+While you're working on project B,
+
+00:08:33.861 --> 00:08:39.141
+your subconscious is busy working away on project A.
+
+00:08:39.142 --> 00:08:43.479
+As a result, perhaps the following morning,
+
+00:08:43.480 --> 00:08:46.279
+when you wake up or while you're taking a shower or
+
+00:08:46.280 --> 00:08:51.999
+commuting, new ideas will emerge for projects A and B as a
+
+00:08:52.000 --> 00:08:55.239
+result of these background jobs that you have launched. If
+
+00:08:55.240 --> 00:08:58.799
+you don't work on project A, then you're not going to get the
+
+00:08:58.800 --> 00:09:04.319
+benefit the following morning. The side effects of using
+
+00:09:04.320 --> 00:09:07.439
+this writing log are that it reduces the fear of forgetting
+
+00:09:07.440 --> 00:09:10.199
+and also reduces the fear of losing momentum. These are two
+
+00:09:10.200 --> 00:09:14.999
+barriers to attempting to carry out work on multiple
+
+00:09:15.000 --> 00:09:19.239
+writing projects in a given day. This problem of dealing
+
+00:09:19.240 --> 00:09:22.719
+with multiple writing projects is one that is not discussed
+
+00:09:22.720 --> 00:09:26.039
+in books about writing. It's apparently a very difficult
+
+00:09:26.040 --> 00:09:29.759
+problem. I think my writing log is a successful solution to
+
+00:09:29.760 --> 00:09:31.519
+that problem.
+
+NOTE Overview of the writing log
+
+00:09:31.520 --> 00:09:39.919
+This is an overview of the writing log in Org mode. It has
+
+00:09:39.920 --> 00:09:42.959
+various components. I don't have time to go through all of
+
+00:09:42.960 --> 00:09:48.679
+them in detail, but you can see its structure. We get this
+
+00:09:48.680 --> 00:09:54.319
+summary view when you open up the file. You have this in the
+
+00:09:54.320 --> 00:10:04.119
+header for a startup command overview. Then I just click
+
+00:10:04.120 --> 00:10:08.079
+on the heading and hit TAB to see the contents below. So
+
+00:10:08.080 --> 00:10:11.439
+normally, I'm just going to go straight to the daily log.
+
+00:10:11.440 --> 00:10:17.294
+In this case, it starts on line 944.
+
+NOTE LaTeX preamble in opened drawer
+
+00:10:17.295 --> 00:10:19.255
+I don't have to scroll all the way down to it,
+
+00:10:19.256 --> 00:10:21.239
+because thanks to the support
+
+00:10:21.240 --> 00:10:27.319
+for folding of these sections in Org mode, if I open up the
+
+00:10:27.320 --> 00:10:31.319
+drawer labeled :PREAMBLE:, you can see that I have imported a
+
+00:10:31.320 --> 00:10:38.879
+number of LaTeX packages to enhance the format of the PDF
+
+00:10:38.880 --> 00:10:42.667
+file that is upon export.
+
+NOTE Informative header
+
+00:10:42.668 --> 00:10:44.319
+I have commands that are listed
+
+00:10:44.320 --> 00:10:48.999
+below at the bottom for providing a fancy header. This
+
+00:10:49.000 --> 00:10:54.519
+header has the current date as well as a running title and the
+
+00:10:54.520 --> 00:10:58.199
+current page number and total number of pages. You can see
+
+00:10:58.200 --> 00:11:04.199
+in the center the header at the start of page 2. You can see the
+
+00:11:04.200 --> 00:11:09.399
+bottom of page 1 where the page number is at the bottom of the
+
+00:11:09.400 --> 00:11:17.719
+page. These headers are very useful if you happen to print
+
+00:11:17.720 --> 00:11:22.879
+out several log files and their corresponding manuscripts
+
+00:11:22.880 --> 00:11:25.359
+and take them with you to work on them while traveling.
+
+00:11:25.360 --> 00:11:29.439
+Invariably, the pages will get intermingled, and you'll have
+
+00:11:29.440 --> 00:11:33.679
+to sort them out when you return home. These headers ease
+
+00:11:33.680 --> 00:11:39.799
+that problem. You can see that the table of contents that begin
+
+00:11:39.800 --> 00:11:44.759
+the writing log is hyperlinked to various sections. In
+
+00:11:44.760 --> 00:11:48.519
+addition to the table of contents, the log file, of course,
+
+00:11:48.520 --> 00:11:51.559
+will support various graphical objects like images,
+
+00:11:51.560 --> 00:11:56.039
+tables, equations, code listings. I also have added
+
+00:11:56.040 --> 00:12:00.279
+LaTeX support for an index, a list of acronyms, glossary,
+
+00:12:00.280 --> 00:12:04.999
+mathematical notation, and literature cited. It takes no
+
+00:12:05.000 --> 00:12:10.039
+effort to add these in, so why not have them available? These
+
+00:12:10.040 --> 00:12:12.919
+features are also available in the annotated bibliography
+
+00:12:12.920 --> 00:12:16.359
+template, which helps support making that annotated
+
+00:12:16.360 --> 00:12:21.399
+bibliography far more relevant and interesting.
+
+NOTE Four workflows
+
+00:12:21.400 --> 00:12:28.079
+This shows a list of four workflows that I'm going to
+
+00:12:28.080 --> 00:12:32.599
+discuss, since I don't have time to go through each
+
+00:12:32.600 --> 00:12:36.279
+of the items. Obviously, project initiation
+
+00:12:36.280 --> 00:12:39.719
+occurs on day one. If I have a three- or four-hour block of time,
+
+00:12:39.720 --> 00:12:45.759
+that's sufficient to finish project initiation. Then
+
+00:12:45.760 --> 00:12:49.359
+the daily workflow is obviously what occurs every day to
+
+00:12:49.360 --> 00:12:54.239
+move the project forward. The periodic assessments are
+
+00:12:54.240 --> 00:12:57.079
+done on a monthly or weekly basis, generally on the weekly
+
+00:12:57.080 --> 00:13:02.559
+basis as the submission deadline approaches. Then
+
+00:13:02.560 --> 00:13:05.639
+after you have received the galley proofs and sent them
+
+00:13:05.640 --> 00:13:09.839
+back, there are a few chores that need to be done in terms of
+
+00:13:09.840 --> 00:13:13.959
+project closeout. This is an example of a protocol
+
+00:13:13.960 --> 00:13:18.519
+that could be followed to do that, and an example of the kinds
+
+00:13:18.520 --> 00:13:21.799
+of more or less appendix material that could be included in
+
+00:13:21.800 --> 00:13:28.079
+the writing log to help get these things done.
+
+NOTE Project initiation workflow
+
+00:13:28.080 --> 00:13:31.679
+This shows a project initiation section of the workflow.
+
+00:13:31.680 --> 00:13:39.119
+I go through a series of sections that include advice
+
+00:13:39.120 --> 00:13:45.719
+about what I need to do to complete each section. The
+
+00:13:45.720 --> 00:13:50.759
+rationale section asks me like, why are you doing this? Why
+
+00:13:50.760 --> 00:13:54.319
+should you do this? Why not somebody else? Those sort of
+
+00:13:54.320 --> 00:14:01.287
+fundamental questions. Then I have
+
+00:14:01.288 --> 00:14:05.329
+a drawer labeled guidance that I have,
+
+00:14:05.330 --> 00:14:07.190
+and that headline immediately above,
+
+00:14:07.191 --> 00:14:11.839
+I have this :noexport: keyword so that guidance is not
+
+00:14:11.840 --> 00:14:17.039
+written out upon export to the PDF unless you want it. If you
+
+00:14:17.040 --> 00:14:20.439
+want it, you have to remove the :noexport: tag. Then I have the
+
+00:14:20.440 --> 00:14:25.199
+response to these questions--in this case, a list of
+
+00:14:25.200 --> 00:14:29.199
+journals that I'm targeting for submission of this review
+
+00:14:29.200 --> 00:14:32.959
+article. I have a plan B journal picked out in case the
+
+00:14:32.960 --> 00:14:43.399
+editors decide to reject it. Having a plan B journal
+
+00:14:43.400 --> 00:14:47.999
+picked out is a decision you can make at the time of
+
+00:14:48.000 --> 00:14:55.959
+submission, so that you're prepared to move quickly if the
+
+00:14:55.960 --> 00:14:56.959
+article is rejected.
+
+NOTE Daily workflow
+
+00:14:56.960 --> 00:15:04.639
+This shows the daily workflow section. Each entry has a
+
+00:15:04.640 --> 00:15:09.439
+date. I sometimes annotate the dated entries with a small
+
+00:15:09.440 --> 00:15:14.479
+phrase to highlight certain events. Within a given entry,
+
+00:15:14.480 --> 00:15:17.319
+I'll have a list of accomplishments. That's sort of the bare
+
+00:15:17.320 --> 00:15:20.719
+minimum of what I include. This just demonstrates how
+
+00:15:20.720 --> 00:15:25.639
+relatively brief these entries are. Just whatever
+
+00:15:25.640 --> 00:15:30.599
+distinct accomplishments were made are listed.
+
+00:15:30.600 --> 00:15:37.239
+Sometimes I'll include the goals for that day.
+
+00:15:37.240 --> 00:15:40.599
+I'll always include the correspondence related to the
+
+00:15:40.600 --> 00:15:44.439
+project. I'll copy and paste an email into a quote
+
+00:15:44.440 --> 00:15:49.719
+environment from LaTeX.
+
+00:15:49.720 --> 00:15:54.319
+I have a snippet template for auto-generating these
+
+00:15:54.320 --> 00:15:59.919
+entries. It will insert the date, for example, in the
+
+00:15:59.920 --> 00:16:04.239
+subheading. Then below that, I'll have the next action,
+
+00:16:04.240 --> 00:16:06.919
+following David Allen's Getting Things Done approach
+
+00:16:06.920 --> 00:16:08.550
+where you identify the next thing that needs to be done.
+
+00:16:08.551 --> 00:16:14.759
+That may have come from a to-do list that's indicated below that.
+
+00:16:14.760 --> 00:16:19.039
+Beyond that, there's sections for some writing
+
+00:16:19.040 --> 00:16:23.919
+accountability, and then a reminder to go about updating
+
+00:16:23.920 --> 00:16:28.919
+your Zettelkasten and Org-roam if you have come across any
+
+00:16:28.920 --> 00:16:32.359
+nuggets of knowledge you want to add to your Org-roam. Then
+
+00:16:32.360 --> 00:16:38.999
+below that, there's another section for the storage of
+
+00:16:39.000 --> 00:16:42.919
+additions to be made to the manuscript. Maybe they're not
+
+00:16:42.920 --> 00:16:47.599
+ready to go yet, so this provides a spot for them to be
+
+00:16:47.600 --> 00:16:51.599
+incubated, a sandbox, if you will, where you have room to
+
+00:16:51.600 --> 00:16:53.239
+develop them further before they're ready to be
+
+00:16:53.240 --> 00:16:58.399
+transferred over to the main manuscript. I also have a
+
+00:16:58.400 --> 00:17:04.239
+section there too for the incubation of new ideas for new
+
+00:17:04.240 --> 00:17:05.750
+projects.
+
+NOTE Metadata and metacognition
+
+00:17:05.751 --> 00:17:09.639
+So this kind of metadata and metacognition about
+
+00:17:09.640 --> 00:17:13.759
+the project are often stored in commented out regions or in
+
+00:17:13.760 --> 00:17:18.039
+comments, like MS Word documents. These are often stripped
+
+00:17:18.040 --> 00:17:21.839
+out in the rush to submit the manuscript, and they're quite
+
+00:17:21.840 --> 00:17:26.479
+often lost. Yet they can be invaluable, not only for the
+
+00:17:26.480 --> 00:17:30.239
+preparation of future manuscripts, but they can be very
+
+00:17:30.240 --> 00:17:38.279
+invaluable for responding to critiques by reviewers. This
+
+00:17:38.280 --> 00:17:42.839
+writing log provides ample room for the safe storage of such
+
+00:17:42.840 --> 00:17:48.884
+information, such knowledge.
+
+NOTE Periodic assessment workflow
+
+00:17:48.885 --> 00:17:53.666
+Then periodically, every several months or weeks,
+
+00:17:53.667 --> 00:17:55.159
+we'll carry out an assessment of
+
+00:17:55.160 --> 00:18:02.119
+the project. We go through a checklist for the completion of
+
+00:18:02.120 --> 00:18:06.319
+the manuscript. We also have a timeline with milestones
+
+00:18:06.320 --> 00:18:07.439
+identified.
+
+00:18:07.440 --> 00:18:13.759
+Of course, Org has these wonderful tables that are very
+
+00:18:13.760 --> 00:18:18.879
+dynamic. If you need a wider column to accommodate a new
+
+00:18:18.880 --> 00:18:23.359
+entry, it self-adjusts. These self-adjusting tables
+
+00:18:23.360 --> 00:18:29.639
+are one reason why I was attracted to Org mode, because coming
+
+00:18:29.640 --> 00:18:33.039
+from LaTex, where trying to make changes to
+
+00:18:33.040 --> 00:18:36.999
+tables is quite difficult. Below that, there's a
+
+00:18:37.000 --> 00:18:39.639
+section to make assessments. There are four questions that
+
+00:18:39.640 --> 00:18:43.839
+I address about the status of the project. One really good
+
+00:18:43.840 --> 00:18:46.559
+question is, why can't you submit this project today?
+
+00:18:46.560 --> 00:18:49.350
+What's holding it back?
+
+00:18:49.351 --> 00:18:55.214
+Other such existential questions
+
+00:18:55.215 --> 00:18:56.959
+are important to ask from time to time.
+
+NOTE Project closeout workflow
+
+00:18:56.960 --> 00:19:03.633
+Then finally, the project closeout workflow.
+
+00:19:03.634 --> 00:19:06.477
+So this is in the form of a checklist.
+
+00:19:06.478 --> 00:19:09.079
+This checklist in the main template
+
+00:19:09.080 --> 00:19:13.479
+is already included, but you could include it from an
+
+00:19:13.480 --> 00:19:19.959
+external file. Of course, that checklist will be only in
+
+00:19:19.960 --> 00:19:22.799
+the PDF when it's included in this fashion. It won't be in the
+
+00:19:22.800 --> 00:19:27.599
+Org file, but you can view that checklist by clicking on its
+
+00:19:27.600 --> 00:19:32.719
+file path. It serves as a link that will open up in an Org
+
+00:19:32.720 --> 00:19:40.119
+buffer. The advantage of taking a modular approach to this
+
+00:19:40.120 --> 00:19:42.999
+sort of appendix material is that you can update your
+
+00:19:43.000 --> 00:19:46.399
+protocols and the updated protocols will be available to
+
+00:19:46.400 --> 00:19:49.639
+all log files across all projects.
+
+NOTE Conclusions
+
+00:19:49.640 --> 00:19:56.319
+In conclusion, this project-specific log file helps
+
+00:19:56.320 --> 00:20:02.759
+narrow the focus on one project. It provides space to harbor
+
+00:20:02.760 --> 00:20:08.679
+the thinking about that project, and it helps support the
+
+00:20:08.680 --> 00:20:13.999
+project initiation and sustain its momentum and
+
+00:20:14.000 --> 00:20:21.799
+facilitate its completion. The side effects of using this
+
+00:20:21.800 --> 00:20:27.399
+log file for one project is that it dampens the fear of
+
+00:20:27.400 --> 00:20:31.439
+forgetting, the fear of losing momentum, which inhibits us
+
+00:20:31.440 --> 00:20:34.519
+working on more than one project in a given day.
+
+NOTE Acknowledgements
+
+00:20:34.520 --> 00:20:42.559
+I would like to thank my friends at the Oklahoma Data Science
+
+00:20:42.560 --> 00:20:47.799
+Workshop. We hold this workshop every third Friday at noon
+
+00:20:47.800 --> 00:20:53.759
+central time by Zoom. It's open to participation by people
+
+00:20:53.760 --> 00:20:56.879
+from all around the world. Send me an email if you are
+
+00:20:56.880 --> 00:21:01.519
+interested in the applications of computing to scientific
+
+00:21:01.520 --> 00:21:06.799
+research. I participate occasionally in these Emacs
+
+00:21:06.800 --> 00:21:11.359
+meetups, and I have shared this writing blog with members of
+
+00:21:11.360 --> 00:21:18.719
+the UK Research Software Engineer group through the Emacs
+
+00:21:18.720 --> 00:21:24.279
+Research Slack channel. My efforts are supported by
+
+00:21:24.280 --> 00:21:28.799
+funding from these grants. I'll be happy to take any
+
+00:21:28.800 --> 00:21:37.720
+questions.
diff --git a/2024/captions/emacsconf-2024-regex--emacs-regex-compilation-and-future-directions-for-expressive-pattern-matching--danny-mcclanahan--main.vtt b/2024/captions/emacsconf-2024-regex--emacs-regex-compilation-and-future-directions-for-expressive-pattern-matching--danny-mcclanahan--main.vtt
new file mode 100644
index 00000000..bad03237
--- /dev/null
+++ b/2024/captions/emacsconf-2024-regex--emacs-regex-compilation-and-future-directions-for-expressive-pattern-matching--danny-mcclanahan--main.vtt
@@ -0,0 +1,1198 @@
+WEBVTT captioned by sachac
+
+00:00:00.000 --> 00:00:13.359
+Hello, I'm Danny McClanahan. This is EmacsConf 2024. And
+
+00:00:13.360 --> 00:00:17.159
+this presentation is ostensibly about Emacs Regex
+
+00:00:17.160 --> 00:00:22.639
+compilation. But it'll lead a lot more in future
+
+00:00:22.640 --> 00:00:30.879
+directions. Thanks for coming on this journey with me.
+
+00:00:30.880 --> 00:00:36.719
+This presentation is 50 slides, 50 footnotes, and that's
+
+00:00:36.720 --> 00:00:40.679
+intended for it to be a resource later on for your perusal. We
+
+00:00:40.680 --> 00:00:44.199
+are unfortunately not going to be able to go into all of it,
+
+00:00:44.200 --> 00:00:49.439
+but I will try to be within 20 minutes so we can make it
+
+00:00:49.440 --> 00:00:56.199
+throughout Q&A. This is the structure of the talk.
+
+00:00:56.200 --> 00:01:03.519
+But enough about me. Who are you? And why are you here?
+
+00:01:03.520 --> 00:01:09.479
+I'm Danny McClanahan.
+
+00:01:09.480 --> 00:01:13.439
+My experience is a lot in build tools, especially in the
+
+00:01:13.440 --> 00:01:19.399
+package managers. That started because I realized I was
+
+00:01:19.400 --> 00:01:23.319
+wasting a lot of time. Then I didn't like that. I
+
+00:01:23.320 --> 00:01:29.439
+started wasting a lot of time, trying to avoid wasting time.
+
+00:01:29.440 --> 00:01:35.479
+Then I ended up... going so far around that I ended up
+
+00:01:35.480 --> 00:01:40.319
+stopping other people from wasting their own time, in this
+
+00:01:40.320 --> 00:01:44.359
+case, regarding failing builds. But this is a kind of
+
+00:01:44.360 --> 00:01:47.479
+pattern that you'll see. I'm talking a lot about patterns in
+
+00:01:47.480 --> 00:01:52.399
+this presentation. Parsing in text is another one of
+
+00:01:52.400 --> 00:01:57.479
+those tendencies that I have. Why am I here? I've got a lot
+
+00:01:57.480 --> 00:02:00.639
+of feelings about text. For the next 20 minutes, I'm
+
+00:02:00.640 --> 00:02:06.079
+making it your problem.
+
+00:02:06.080 --> 00:02:09.639
+First off, a huge shout out to Emacs Devel and the Emacs
+
+00:02:09.640 --> 00:02:12.919
+community in general. I spent a lot of time learning about
+
+00:02:12.920 --> 00:02:15.559
+what I'm about to talk about. I was definitely super
+
+00:02:15.560 --> 00:02:19.439
+confused at first. Then when I became less confused and I
+
+00:02:19.440 --> 00:02:23.919
+decided I was going to look at the regular expressions of the
+
+00:02:23.920 --> 00:02:28.039
+Regex engine, I was like, oh, it's old C code. It's
+
+00:02:28.040 --> 00:02:33.559
+Emacs. We can just use modern techniques. Turns out that's
+
+00:02:33.560 --> 00:02:37.839
+wrong for kind of two reasons. One, because using modern
+
+00:02:37.840 --> 00:02:41.479
+techniques or other engines don't necessarily do what
+
+00:02:41.480 --> 00:02:44.799
+Emacs regex engine currently does. Then secondarily,
+
+00:02:44.800 --> 00:02:48.719
+that's not actually as interesting as the other kind of
+
+00:02:48.720 --> 00:02:52.359
+larger goals that emacs-devel discussed. Thank you, Eli
+
+00:02:52.360 --> 00:02:56.279
+Zaretskii, so, so much, especially Pip Cet and everyone else
+
+00:02:56.280 --> 00:02:59.319
+as well--I believe--Pip Cet, I hope I'm pronouncing that
+
+00:02:59.320 --> 00:03:01.799
+correctly. Thank you so much. I'll be shouting you out
+
+00:03:01.800 --> 00:03:04.319
+later as well. Then these larger goals ended up
+
+00:03:04.320 --> 00:03:07.199
+overlapping a lot with my own research interests. And
+
+00:03:07.200 --> 00:03:09.879
+that's very exciting. I'm hoping it's exciting for you
+
+00:03:09.880 --> 00:03:14.079
+too. What is a regular expression? And when and how does
+
+00:03:14.080 --> 00:03:16.559
+implementation match formal theory? So what does formal
+
+00:03:16.560 --> 00:03:24.079
+theory mean? And we'll talk about that.
+
+00:03:24.080 --> 00:03:27.519
+What is a regular expression? So I might ask you this
+
+00:03:27.520 --> 00:03:30.799
+question, and you might give an answer. Then I might ask
+
+00:03:30.800 --> 00:03:33.519
+someone else, and they might have an answer. Then I might
+
+00:03:33.520 --> 00:03:38.039
+ask myself, and I might try to think of an answer. Our
+
+00:03:38.040 --> 00:03:41.799
+answers would, you know, see, the thing is, they'd all be
+
+00:03:41.800 --> 00:03:45.359
+correct, but they'd probably be slightly different, and
+
+00:03:45.360 --> 00:03:50.319
+they'd be different in kind of important ways. I'm
+
+00:03:50.320 --> 00:03:55.039
+using formal theory to kind of describe what unifies these
+
+00:03:55.040 --> 00:04:00.119
+interpretations and what causes this sort of divergence,
+
+00:04:00.120 --> 00:04:05.439
+both over time and then across code bases. I'm kind of
+
+00:04:05.440 --> 00:04:09.319
+putting a flag in the ground here and saying formal theory is
+
+00:04:09.320 --> 00:04:12.999
+actually a really, really negative influence, I think, but
+
+00:04:13.000 --> 00:04:15.999
+it can be better. That's what I'm going to talk about in
+
+00:04:16.000 --> 00:04:19.519
+this talk, in this presentation. We might ask, how did
+
+00:04:19.520 --> 00:04:26.679
+this happen? and we might try to find a start state. We
+
+00:04:26.680 --> 00:04:30.519
+might put that place at the theories of formal languages
+
+00:04:30.520 --> 00:04:34.679
+that kind of arose, especially post Turing and post
+
+00:04:34.680 --> 00:04:37.519
+Chomsky. Especially there was this really, really
+
+00:04:37.520 --> 00:04:40.119
+interesting and powerful relationship with formal
+
+00:04:40.120 --> 00:04:43.959
+languages between representation and computation. And
+
+00:04:43.960 --> 00:04:48.599
+then on top of that, we have regex as this really powerful
+
+00:04:48.600 --> 00:04:52.159
+union of theory and practice And then, like I mentioned,
+
+00:04:52.160 --> 00:04:55.799
+this is kind of divergence that kind of occurs. This
+
+00:04:55.800 --> 00:04:58.079
+divergence happens for a good reason. This happens because
+
+00:04:58.080 --> 00:05:01.999
+people were adding implementations and people adding
+
+00:05:02.000 --> 00:05:04.639
+features to implementations. While the people adding
+
+00:05:04.640 --> 00:05:06.679
+these features were often academics, they were
+
+00:05:06.680 --> 00:05:09.199
+industries, people that were hobbyists, they were
+
+00:05:09.200 --> 00:05:11.999
+interested in building practical tools. This is a good
+
+00:05:12.000 --> 00:05:14.879
+thing. This is still a good thing, even though it moves a
+
+00:05:14.880 --> 00:05:18.199
+little bit away from formal theory. But we start seeing some
+
+00:05:18.200 --> 00:05:22.639
+cracks developing, and we'll go into that in a second. We're
+
+00:05:22.640 --> 00:05:27.519
+just going to kind of electric slide into the 1980s here, and
+
+00:05:27.520 --> 00:05:31.879
+we're going to be confronted with two occurrences very
+
+00:05:31.880 --> 00:05:35.639
+similarly. We might call it simultaneous discovery. In
+
+00:05:35.640 --> 00:05:38.559
+1983, you have Michael Jackson demonstrating the
+
+00:05:38.560 --> 00:05:41.999
+moonwalk. Three years later, we have backtracking
+
+00:05:42.000 --> 00:05:44.999
+developed to stimulate EGREP-style regular expressions.
+
+00:05:45.000 --> 00:05:48.599
+These would both be incredibly influential in their own
+
+00:05:48.600 --> 00:05:54.039
+kind of branching paths. Here's where the gloves come
+
+00:05:54.040 --> 00:06:00.759
+off. Formal theory, I claim, remains largely concerned
+
+00:06:00.760 --> 00:06:03.359
+with incremental improvements to artificial benchmarks,
+
+00:06:03.360 --> 00:06:07.279
+and much less with expanding models to cover actual user
+
+00:06:07.280 --> 00:06:11.799
+needs. This isn't just about, oh, if you listened to
+
+00:06:11.800 --> 00:06:15.999
+users, that you'd be a nicer person, you'd be a better
+
+00:06:16.000 --> 00:06:19.359
+engineer. What I'm actually saying is that they're missing
+
+00:06:19.360 --> 00:06:23.919
+out. When you don't listen to applications, you miss out on a
+
+00:06:23.920 --> 00:06:26.639
+lot of fantastic opportunities for novel theory. So
+
+00:06:26.640 --> 00:06:30.839
+this is, again, my complaint with formal theory as it
+
+00:06:30.840 --> 00:06:34.599
+stands. But we're gonna do better. Before we get better,
+
+00:06:34.600 --> 00:06:36.959
+we're gonna get, a little bit worse for a bit. We're going to
+
+00:06:36.960 --> 00:06:40.359
+actually get a little bit worse is better. What I mean by
+
+00:06:40.360 --> 00:06:43.239
+that is, by the 1990s, we start looking into these
+
+00:06:43.240 --> 00:06:46.479
+non-backtracking engines. This is a bit of a reaction to
+
+00:06:46.480 --> 00:06:50.399
+backtracking. The current ones include RE2,
+
+00:06:50.400 --> 00:06:53.919
+hyperscan, and the rust regex library. These are all
+
+00:06:53.920 --> 00:06:56.439
+great. I'll talk about them later as well. They make use
+
+00:06:56.440 --> 00:06:58.719
+of these. They kind of call back to the earlier formal
+
+00:06:58.720 --> 00:07:01.479
+theory. They have linear runtimes for well-specified
+
+00:07:01.480 --> 00:07:02.519
+search tasks.
+
+00:07:02.520 --> 00:07:08.079
+What happens if that doesn't fit your needs? We're going to
+
+00:07:08.080 --> 00:07:11.479
+talk about that. We're going to table that for a second,
+
+00:07:11.480 --> 00:07:15.319
+and we're going to focus more on Emacs, the subject of this
+
+00:07:15.320 --> 00:07:19.359
+conference. What are regex used for? And in this
+
+00:07:19.360 --> 00:07:22.439
+particular case, they're used for lots of things, with
+
+00:07:22.440 --> 00:07:25.199
+practically, and I think they should be. But more
+
+00:07:25.200 --> 00:07:29.559
+specifically, how do Emacs users use them? And I'm going to
+
+00:07:29.560 --> 00:07:32.679
+focus in on this text as input and output. I'll be kind of
+
+00:07:32.680 --> 00:07:38.959
+elaborating on this analogy as we continue. Why is text
+
+00:07:38.960 --> 00:07:43.399
+powerful? Text as I/O. The reason text programming
+
+00:07:43.400 --> 00:07:45.759
+languages and not just programming languages, but
+
+00:07:45.760 --> 00:07:49.159
+languages themselves, the reason why they're successful
+
+00:07:49.160 --> 00:07:52.279
+and why they propagate, I claim, is because text is both
+
+00:07:52.280 --> 00:07:56.439
+input readable and output writable. What this means
+
+00:07:56.440 --> 00:08:01.199
+is that if you receive something in text, you can read it, And
+
+00:08:01.200 --> 00:08:04.239
+then you can also write it, you can modify it, and you can
+
+00:08:04.240 --> 00:08:06.959
+produce a new version of it. You're on a kind of level
+
+00:08:06.960 --> 00:08:10.959
+playing field. That's not always the case, though. You
+
+00:08:10.960 --> 00:08:15.959
+recall that I've worked a lot with build systems and package
+
+00:08:15.960 --> 00:08:20.999
+managers. There's a discussion that goes by the name of
+
+00:08:21.000 --> 00:08:25.319
+software supply chain security. I think it's a massive
+
+00:08:25.320 --> 00:08:29.079
+joke. The reason why is because people largely raise it
+
+00:08:29.080 --> 00:08:34.279
+to explain why their for-profit company with their
+
+00:08:34.280 --> 00:08:38.079
+for-profit product is going to solve the problem for you, as
+
+00:08:38.080 --> 00:08:41.959
+opposed to the commons of open source. If you are unable to
+
+00:08:41.960 --> 00:08:44.999
+modify or deploy your code without employing an opaque
+
+00:08:45.000 --> 00:08:48.599
+external system, I think, then you have a hidden
+
+00:08:48.600 --> 00:08:53.879
+dependency. you don't remove a dependency, you just, by,
+
+00:08:53.880 --> 00:08:59.239
+for example, paying into a for-profit product or using a
+
+00:08:59.240 --> 00:09:01.519
+closed-off supply chain, you end up just having a hidden
+
+00:09:01.520 --> 00:09:04.719
+dependency, you end up just displacing that. This can
+
+00:09:04.720 --> 00:09:07.639
+actually exert arbitrary control over your programming
+
+00:09:07.640 --> 00:09:11.279
+output and potentially even your thoughts. This is really
+
+00:09:11.280 --> 00:09:15.839
+important. I'm going to dive in a little bit deeper and I'm
+
+00:09:15.840 --> 00:09:18.999
+going to overload the term locality here. I'm going to
+
+00:09:19.000 --> 00:09:22.239
+say, if you cannot reproduce a system locally, it becomes an
+
+00:09:22.240 --> 00:09:24.999
+opaque external system. I'm going to give examples
+
+00:09:25.000 --> 00:09:27.479
+here, and these are going to be a bit of a hot take. First
+
+00:09:27.480 --> 00:09:30.519
+off, GUI IDEs. I think we might, well, some of us might agree
+
+00:09:30.520 --> 00:09:34.519
+with that here. I say development environments that only
+
+00:09:34.520 --> 00:09:38.119
+allow you to use a graphical interface, do not expose
+
+00:09:38.120 --> 00:09:42.799
+interaction with text, are explicitly trying to kind of
+
+00:09:42.800 --> 00:09:46.239
+place you on a separate kind of plane where you're not an
+
+00:09:46.240 --> 00:09:50.439
+equal contributor to the people who make the development
+
+00:09:50.440 --> 00:09:53.079
+environment, make the development kind of frameworks
+
+00:09:53.080 --> 00:09:57.399
+here. We'll go one further. Cloud services are precisely,
+
+00:09:57.400 --> 00:10:00.039
+you know, they're useful for things that, you know, that
+
+00:10:00.040 --> 00:10:04.399
+require large domain computation, but, you know, Twitter,
+
+00:10:04.400 --> 00:10:08.679
+for example, didn't actually ever use any cloud services,
+
+00:10:08.680 --> 00:10:12.199
+external ones, because it was really important for them to
+
+00:10:12.200 --> 00:10:14.999
+actually own their own hardware, their own computation,
+
+00:10:15.000 --> 00:10:20.199
+their own thinking. Cloud services are a way to ensure
+
+00:10:20.200 --> 00:10:24.919
+that you're unable to reproduce a system without paying an
+
+00:10:24.920 --> 00:10:28.039
+amount per month, an amount per day, an amount per second, an
+
+00:10:28.040 --> 00:10:32.439
+amount per cycle to an external entity. I'm just going to
+
+00:10:32.440 --> 00:10:35.559
+conclude this with, I'd say, the argumentum ad absurdum,
+
+00:10:35.560 --> 00:10:39.239
+here, where large language models are all of these at once.
+
+00:10:39.240 --> 00:10:42.879
+They are a cloud service, specifically, and this is what
+
+00:10:42.880 --> 00:10:48.439
+makes them very evil, to make it so that, similar to GUI IDEs,
+
+00:10:48.440 --> 00:10:52.919
+so that text itself loses that ability to be both readable
+
+00:10:52.920 --> 00:10:56.199
+and writable. Instead, text is both unreadable, because
+
+00:10:56.200 --> 00:10:59.519
+it's produced by a machine, and then also unwritable,
+
+00:10:59.520 --> 00:11:02.999
+because you're subservient and subjugated to the machine,
+
+00:11:03.000 --> 00:11:05.359
+to the large language model to produce the code in the first
+
+00:11:05.360 --> 00:11:08.919
+place. You lose this input, output, readable, writable
+
+00:11:08.920 --> 00:11:13.359
+behavior that I claim text has specifically. To
+
+00:11:13.360 --> 00:11:19.439
+underline this, what is text? Text is local. Finally,
+
+00:11:19.440 --> 00:11:23.639
+we're at the subject of this conference. Emacs, I have
+
+00:11:23.640 --> 00:11:27.479
+double hearts with text. I start off the slide saying Emacs
+
+00:11:27.480 --> 00:11:31.519
+is a text editor. I think that's a good start. Which
+
+00:11:31.520 --> 00:11:34.319
+implements much of its own logic and user interface via
+
+00:11:34.320 --> 00:11:38.399
+text. What this means is that, you know, I say without
+
+00:11:38.400 --> 00:11:42.639
+trying, Emacs tries very hard, but without trying so hard,
+
+00:11:42.640 --> 00:11:47.639
+Emacs, is imbued with all of the capabilities that text has
+
+00:11:47.640 --> 00:11:51.319
+specifically. When you use text like Emacs does, and
+
+00:11:51.320 --> 00:11:55.519
+particularly you then start offering mechanisms to query,
+
+00:11:55.520 --> 00:11:59.999
+to transform, and to generally metaprogram text itself,
+
+00:12:00.000 --> 00:12:03.319
+you don't just have the ability to edit code in new ways. And
+
+00:12:03.320 --> 00:12:06.999
+this is something that I think is often lost, maybe not by
+
+00:12:07.000 --> 00:12:11.239
+participants of this conference, you particularly start
+
+00:12:11.240 --> 00:12:14.319
+being able to not only just edit code differently, but to
+
+00:12:14.320 --> 00:12:16.599
+change the way that you think about code and actually to
+
+00:12:16.600 --> 00:12:20.239
+expand your range of thought, the range of actions that you
+
+00:12:20.240 --> 00:12:22.719
+can perform. You can actually start then editing at the
+
+00:12:22.720 --> 00:12:25.799
+speed of thought. This is where especially Regex kind of
+
+00:12:25.800 --> 00:12:30.319
+comes into play. Finally, we get to the subject of the
+
+00:12:30.320 --> 00:12:33.599
+title of this talk. I'm about to disappoint a lot of
+
+00:12:33.600 --> 00:12:38.759
+people. I claim for good reason. Unfortunately, it's a
+
+00:12:38.760 --> 00:12:41.599
+very brief walkthrough, but I'm going to go over what the
+
+00:12:41.600 --> 00:12:43.799
+current Emacs Redix engine is. This is going to give us
+
+00:12:43.800 --> 00:12:48.119
+enough context for the next section on future directions.
+
+00:12:48.120 --> 00:12:51.799
+Quickly, it's a backtracking engine over a multi-byte
+
+00:12:51.800 --> 00:12:53.919
+code point. I'll define what that means. It's in
+
+00:12:53.920 --> 00:12:58.439
+regex-emacs.c. It's invoked in two ways, which you'll see
+
+00:12:58.440 --> 00:13:01.759
+is actually the same way, over a single contiguous string
+
+00:13:01.760 --> 00:13:05.359
+input. This is a Lisp string that you pass in. or over the
+
+00:13:05.360 --> 00:13:07.039
+two halves of the gap buffer. This is when you match
+
+00:13:07.040 --> 00:13:11.879
+against a buffer text. We'll go into that a little bit
+
+00:13:11.880 --> 00:13:13.919
+more, but this is one of the really actually interesting and
+
+00:13:13.920 --> 00:13:17.839
+specific things about Emacs Regex Engine as it stands. So
+
+00:13:17.840 --> 00:13:21.559
+very, very quickly, this is the data layout. This is just, if
+
+00:13:21.560 --> 00:13:24.879
+you're interested, this is where the code lies. So
+
+00:13:24.880 --> 00:13:30.159
+regex-emacs.h has re-pattern buffer, which is a struct
+
+00:13:30.160 --> 00:13:34.239
+Actually, you know, I love, by the way, I love the Emacs C
+
+00:13:34.240 --> 00:13:37.359
+source code. It's so nice to read. It made all this so, so
+
+00:13:37.360 --> 00:13:41.119
+easy. I really appreciated it. In this particular case,
+
+00:13:41.120 --> 00:13:44.039
+I'm just going to focus on re-pattern buffer actually has
+
+00:13:44.040 --> 00:13:47.999
+the compiler. It's a C struct. It has every single thing
+
+00:13:48.000 --> 00:13:52.559
+that is needed to execute the regular expression against a
+
+00:13:52.560 --> 00:13:56.319
+string input or against a buffer input. This buffer,
+
+00:13:56.320 --> 00:13:59.839
+It's not an Emacs buffer. It refers to just the instruction
+
+00:13:59.840 --> 00:14:04.039
+table and the match loop. Again, this is very, very
+
+00:14:04.040 --> 00:14:07.839
+brief, but I want to specifically focus on the first part. So
+
+00:14:07.840 --> 00:14:11.879
+this is this inner matching loop, and there's a prologue,
+
+00:14:11.880 --> 00:14:15.679
+and then there's a loop body, and there's an epilogue. And
+
+00:14:15.680 --> 00:14:18.279
+the prologue is the really, really interesting part. I say
+
+00:14:18.280 --> 00:14:22.839
+extract current and next char. What Emacs does here, it
+
+00:14:22.840 --> 00:14:27.159
+doesn't just reach for the next byte. It actually will
+
+00:14:27.160 --> 00:14:31.879
+perform lazily in some sense, this variable integer size
+
+00:14:31.880 --> 00:14:36.039
+VAR decoding for multi-byte, and it'll actually then
+
+00:14:36.040 --> 00:14:43.959
+decode the next one to four bytes. Up to 32 bits at once, and
+
+00:14:43.960 --> 00:14:46.799
+then it'll actually go into the loop. We'll talk about the
+
+00:14:46.800 --> 00:14:52.519
+implications of that later. Next, in the body of the loop, we
+
+00:14:52.520 --> 00:14:54.239
+read the instruction from the instruction pointer, which
+
+00:14:54.240 --> 00:14:57.319
+is, again, in that buffer field. Then we have this big
+
+00:14:57.320 --> 00:14:59.479
+switch statement, which is actually, love a big switch
+
+00:14:59.480 --> 00:15:02.079
+statement, super easy to read, super easy to understand
+
+00:15:02.080 --> 00:15:05.399
+kind of what's occurring. Then that's the loop body. And
+
+00:15:05.400 --> 00:15:08.279
+then at the end of it, we either increment the instruction
+
+00:15:08.280 --> 00:15:11.119
+pointer if it was matching a single character or something
+
+00:15:11.120 --> 00:15:14.839
+along those lines, or if it was a jump, we don't do that. A
+
+00:15:14.840 --> 00:15:18.199
+jump, however, it's not referring to a jump in the sense of a
+
+00:15:18.200 --> 00:15:22.519
+go-to, but a jump that's elsewhere within that table, that
+
+00:15:22.520 --> 00:15:25.839
+buffer field. If you've included a capture, we write
+
+00:15:25.840 --> 00:15:29.479
+that end position there. Of course, well, as you may
+
+00:15:29.480 --> 00:15:34.439
+recall, the zeroth capture is, of course, the entire match
+
+00:15:34.440 --> 00:15:36.559
+string. If the capture is zero, then we know we've
+
+00:15:36.560 --> 00:15:39.839
+actually completed that match. That's really great.
+
+00:15:39.840 --> 00:15:43.599
+I would love to receive Q&A about this as well. I've spent a
+
+00:15:43.600 --> 00:15:46.719
+lot of time kind of learning and understanding it. But it's
+
+00:15:46.720 --> 00:15:49.879
+really interesting that this can be described in a single
+
+00:15:49.880 --> 00:15:52.159
+slide because it's really simple. That simplicity is
+
+00:15:52.160 --> 00:15:54.639
+actually a really powerful thing. I'll mention that in
+
+00:15:54.640 --> 00:15:58.759
+the next section. I say, is that all? And I apologize for
+
+00:15:58.760 --> 00:16:02.239
+not doing so. But please, please ask questions in Q&A or
+
+00:16:02.240 --> 00:16:04.999
+message me about this, because I think it's really, really,
+
+00:16:05.000 --> 00:16:07.079
+again, interesting. Again, I find the code relatively
+
+00:16:07.080 --> 00:16:11.999
+easy to read. Now, here's, I think this is actually the
+
+00:16:12.000 --> 00:16:15.519
+point of the talk. The rest of it was, you know, I think just me
+
+00:16:15.520 --> 00:16:18.839
+posturing. This is the really, really interesting part.
+
+00:16:18.840 --> 00:16:22.039
+This is the ways that we can improve, well, not just we can
+
+00:16:22.040 --> 00:16:25.839
+improve stuff in Emacs, but why those are the right things to
+
+00:16:25.840 --> 00:16:30.279
+improve. Then also how that can be a model for even things
+
+00:16:30.280 --> 00:16:35.079
+outside of Emacs. This is gonna be a lot of text. I'm not
+
+00:16:35.080 --> 00:16:38.879
+gonna go through all of it. This is the one thing that I tried.
+
+00:16:38.880 --> 00:16:42.239
+This is the thing that I thought would be a slam dunk, easy
+
+00:16:42.240 --> 00:16:47.439
+solution. My initial thought process was, well, We tried
+
+00:16:47.440 --> 00:16:52.919
+very hard to do an LRU cache here. It works. It's actually
+
+00:16:52.920 --> 00:16:57.399
+very effective. However, though, we don't actually give
+
+00:16:57.400 --> 00:17:00.479
+the user, the list programmer, the ability to then say, I
+
+00:17:00.480 --> 00:17:03.079
+know that this regex is something that is going to be used
+
+00:17:03.080 --> 00:17:06.399
+again. I made an artificial benchmark. I made an
+
+00:17:06.400 --> 00:17:10.039
+artificial benchmark because I wanted to show there is one
+
+00:17:10.040 --> 00:17:13.639
+very specific case that it does solve, but it's the same
+
+00:17:13.640 --> 00:17:16.919
+issue with the artificial benchmarks. mentioned earlier.
+
+00:17:16.920 --> 00:17:21.559
+It's very specifically crafted in order to show that this
+
+00:17:21.560 --> 00:17:25.319
+particular solution would produce some speedup. What
+
+00:17:25.320 --> 00:17:29.599
+this means is it just creates more than 20 regexps in a row. It
+
+00:17:29.600 --> 00:17:31.959
+compiles them. Then, of course, because we just don't
+
+00:17:31.960 --> 00:17:35.159
+pay the compile costs, because we don't go through that
+
+00:17:35.160 --> 00:17:39.079
+cache eviction process, it ends up being faster. But this
+
+00:17:39.080 --> 00:17:42.079
+isn't really mean very much, particularly the goal here,
+
+00:17:42.080 --> 00:17:45.559
+you know, the goal would have been to show that the compile
+
+00:17:45.560 --> 00:17:48.359
+cache is actually causing the performance issue in
+
+00:17:48.360 --> 00:17:51.359
+comparison to pre-compiling it. That's not something
+
+00:17:51.360 --> 00:17:56.039
+I've been able to show. Match over bytes, not cars. So
+
+00:17:56.040 --> 00:17:59.079
+this is when I said at the beginning, oh, I came in and I think,
+
+00:17:59.080 --> 00:18:02.079
+oh, we can just use modern regex engine techniques. This is
+
+00:18:02.080 --> 00:18:05.239
+really what I meant. In particular, I mentioned in this
+
+00:18:05.240 --> 00:18:09.279
+match loop here that there's this, prolog that does this
+
+00:18:09.280 --> 00:18:13.359
+varring decoding. What this means is that every single
+
+00:18:13.360 --> 00:18:18.519
+iteration of that loop is going to be interspersed with this
+
+00:18:18.520 --> 00:18:21.919
+not being able to read a fixed number of bytes, but a variable
+
+00:18:21.920 --> 00:18:24.359
+number of bytes just depending upon the Unicode character
+
+00:18:24.360 --> 00:18:27.039
+or the Unicode code point or the multibyte code point. So
+
+00:18:27.040 --> 00:18:29.799
+this ends up, again, being relatively difficult to
+
+00:18:29.800 --> 00:18:32.919
+optimize because processors operate over bytes and not
+
+00:18:32.920 --> 00:18:38.479
+over code points. Yes, we might consider a multi-byte CPU at
+
+00:18:38.480 --> 00:18:41.039
+some point. But this is a really, really simple thing. It's
+
+00:18:41.040 --> 00:18:44.999
+just generating automata that operate over bytes as
+
+00:18:45.000 --> 00:18:48.839
+opposed to code points. This kind of goes into the much more
+
+00:18:48.840 --> 00:18:51.839
+abstract one. There's a lot of text here, and we're not
+
+00:18:51.840 --> 00:18:56.159
+going to go into it. But the really, really important point
+
+00:18:56.160 --> 00:18:57.999
+that I'm specifically mentioning here is this explicit
+
+00:18:58.000 --> 00:19:02.079
+control over linguistic complexity. That's the
+
+00:19:02.080 --> 00:19:06.159
+abstract kind of point. I want to introduce the inputs and
+
+00:19:06.160 --> 00:19:11.279
+the outputs. Basically, when you perform a search, or a
+
+00:19:11.280 --> 00:19:14.799
+match, or a parse, those are different tasks. They'll
+
+00:19:14.800 --> 00:19:17.799
+have different expected inputs and different desired
+
+00:19:17.800 --> 00:19:21.559
+outputs. Right now, Emacs, the API for the regular
+
+00:19:21.560 --> 00:19:24.919
+expression engine and for matching, It doesn't allow
+
+00:19:24.920 --> 00:19:27.959
+specialization on this. Or rather, if we do specialize on
+
+00:19:27.960 --> 00:19:30.999
+particular inputs, if we have a heuristic to check if a regex
+
+00:19:31.000 --> 00:19:33.519
+is actually a literal string, that's not something that the
+
+00:19:33.520 --> 00:19:36.959
+user actually has control over. For example, you can make
+
+00:19:36.960 --> 00:19:38.999
+a mistake escaping something, and then you don't have a
+
+00:19:39.000 --> 00:19:42.039
+literal, and then you accidentally have behavior that you
+
+00:19:42.040 --> 00:19:44.279
+totally didn't expect. Not just correctness issues, but
+
+00:19:44.280 --> 00:19:48.599
+also performance issues. I really like this one. I like
+
+00:19:48.600 --> 00:19:52.239
+this a lot, because I didn't think of it at all. I think it's
+
+00:19:52.240 --> 00:19:58.119
+better than in all of my ideas. This was proposed, at least
+
+00:19:58.120 --> 00:20:01.839
+to me, by Pip Cet, and I really hope that I'm pronouncing your
+
+00:20:01.840 --> 00:20:04.479
+name correctly. I'm sorry I didn't ask you beforehand,
+
+00:20:04.480 --> 00:20:08.399
+emacs-devel. In particular, this was after a couple of
+
+00:20:08.400 --> 00:20:11.999
+responses where I was trying to say, oh, I want to give the
+
+00:20:12.000 --> 00:20:15.879
+list programmer, way back in here, I want to give the list
+
+00:20:15.880 --> 00:20:20.559
+programmer the ability to control compilation in some
+
+00:20:20.560 --> 00:20:25.759
+sense. you know, he mentioned, I think he is correct, you
+
+00:20:25.760 --> 00:20:28.439
+know, there's no real introspection. That happens
+
+00:20:28.440 --> 00:20:33.119
+because it's written in C. I was thinking, oh, if I turn
+
+00:20:33.120 --> 00:20:35.639
+this into a list object that gives the list programmer the
+
+00:20:35.640 --> 00:20:40.039
+power and the ability to do more with that, but it doesn't
+
+00:20:40.040 --> 00:20:42.839
+actually because it's still in C. At first, I was
+
+00:20:42.840 --> 00:20:46.679
+thinking, oh, we can make the C part more flexible. But
+
+00:20:46.680 --> 00:20:50.039
+actually, especially if we want to do almost any of the
+
+00:20:50.040 --> 00:20:52.719
+things we previously mentioned, I think basically that
+
+00:20:52.720 --> 00:20:56.599
+this is... I think that if I'm not going to do it, somebody
+
+00:20:56.600 --> 00:20:58.879
+else really should do it, and I think we should maybe even do
+
+00:20:58.880 --> 00:21:01.519
+it together, because I think this is really, I think, how we
+
+00:21:01.520 --> 00:21:04.079
+can start experimenting, and not just experimenting, but
+
+00:21:04.080 --> 00:21:07.039
+because, as mentioned here, we have libgccjit, we have the
+
+00:21:07.040 --> 00:21:09.519
+native compiler, we have the ability to opt, like,
+
+00:21:09.520 --> 00:21:12.639
+specifically to generate specific code for this, so why not
+
+00:21:12.640 --> 00:21:15.919
+implement the or a Redix engine itself in list, And this
+
+00:21:15.920 --> 00:21:18.359
+gives us the ability to introspect it. That's one of the
+
+00:21:18.360 --> 00:21:20.759
+things I mentioned at the beginning. But it actually gives
+
+00:21:20.760 --> 00:21:23.879
+us the ability to then actually look at all the previous
+
+00:21:23.880 --> 00:21:28.159
+implementations, to explicitly compile beforehand, to
+
+00:21:28.160 --> 00:21:32.519
+match against bytes, to specialize and dispatch based upon
+
+00:21:32.520 --> 00:21:36.799
+input and output. This is something that, you know, it's
+
+00:21:36.800 --> 00:21:37.999
+super simple.
+
+00:21:38.000 --> 00:21:40.799
+It's really smart. I'm really, really glad that Pip
+
+00:21:40.800 --> 00:21:44.839
+mentioned this because it is, I think, the right way to solve
+
+00:21:44.840 --> 00:21:49.879
+the rest of it. We're at the final section. I talked a
+
+00:21:49.880 --> 00:21:52.679
+lot about, you know, kind of abstract, you know, thoughts.
+
+00:21:52.680 --> 00:21:55.679
+I talked a little about, you know, specific solutions.
+
+00:21:55.680 --> 00:21:59.999
+But I especially talked about, you know, what is Regex and
+
+00:22:00.000 --> 00:22:02.959
+Emacs? And I don't know if I had a lot of specific examples of
+
+00:22:02.960 --> 00:22:06.079
+it. I'm going to just describe kind of my, I guess,
+
+00:22:06.080 --> 00:22:09.799
+motivation, my impetus. Then I think something that's
+
+00:22:09.800 --> 00:22:12.639
+really something to chew on for the future. Do I have any
+
+00:22:12.640 --> 00:22:15.799
+concrete examples? Yes. Well, you can decide if they're
+
+00:22:15.800 --> 00:22:22.799
+concrete. Or am I just posturing? Also, yes. helm, rg. Helm,
+
+00:22:22.800 --> 00:22:27.679
+Erg, it's literally just M-x grep, it uses ripgrep, which
+
+00:22:27.680 --> 00:22:31.999
+is written by the same author of the Rust regex [??]. It
+
+00:22:32.000 --> 00:22:36.199
+happens to be very, very fast. In particular, I use this tool
+
+00:22:36.200 --> 00:22:39.319
+with ripgrep on the Twitter monorepo, and I was able to
+
+00:22:39.320 --> 00:22:42.559
+search very, very large amounts of code that was on my local
+
+00:22:42.560 --> 00:22:46.399
+machine using regular expressions. I think this is one
+
+00:22:46.400 --> 00:22:49.199
+thing that I think is really, really important, because
+
+00:22:49.200 --> 00:22:52.919
+when you want to scale, People say the word scaling and they
+
+00:22:52.920 --> 00:22:56.719
+assume there's a specific kind of answer for that. I've
+
+00:22:56.720 --> 00:23:01.679
+just found that text is not only flexible, it's actually
+
+00:23:01.680 --> 00:23:04.359
+something that can be more performant than the alternative
+
+00:23:04.360 --> 00:23:07.399
+and not only more performant, but more productive. It's
+
+00:23:07.400 --> 00:23:10.359
+again, it's just M-x grep using ripgrep. There's a tool
+
+00:23:10.360 --> 00:23:12.719
+deadgrep by Wilfred Hughes, which is also fantastic. I
+
+00:23:12.720 --> 00:23:15.759
+think it's actually better than this, but this one's mine so
+
+00:23:15.760 --> 00:23:19.199
+I can mess around with it. But this tool is kind of why,
+
+00:23:19.200 --> 00:23:21.799
+especially I started looking into Emacs and looking into
+
+00:23:21.800 --> 00:23:24.919
+changing the way that, or at least diving into how the
+
+00:23:24.920 --> 00:23:27.559
+regular expression matching actually kind of works, both
+
+00:23:27.560 --> 00:23:30.359
+in Emacs and then in ripgrep. We'll go to the next one.
+
+00:23:30.360 --> 00:23:34.119
+This is something that does exist and continues to exist.
+
+00:23:34.120 --> 00:23:36.799
+This is something that doesn't quite exist yet. I'm
+
+00:23:36.800 --> 00:23:41.359
+calling it telepathy grams. It's, you know, it's the name,
+
+00:23:41.360 --> 00:23:44.719
+and it's very, you know, it doesn't work, but it's a code
+
+00:23:44.720 --> 00:23:47.919
+search tool that, in this case, precompiles the database to
+
+00:23:47.920 --> 00:23:51.879
+execute NFAs against. I was thinking, how can I beat And
+
+00:23:51.880 --> 00:23:55.039
+the first thing I thought is, well, as I have worked on build
+
+00:23:55.040 --> 00:23:57.759
+tools, especially in monorepos, one of the things that the
+
+00:23:57.760 --> 00:24:00.799
+pants build tool from Twitter does is it uses a file watcher
+
+00:24:00.800 --> 00:24:04.239
+to ensure that instead of having to constantly read in the
+
+00:24:04.240 --> 00:24:10.079
+entire contents of a file, which may be very, very large, it
+
+00:24:10.080 --> 00:24:13.679
+only does so when the file has been changed. Finally, I
+
+00:24:13.680 --> 00:24:16.919
+want to conclude on this note, which is just that the stuff I
+
+00:24:16.920 --> 00:24:20.839
+didn't learn from emacs devel, I learned from Paul
+
+00:24:20.840 --> 00:24:25.319
+Wankadia, Jr., who is the RE2 maintainer, and he taught me
+
+00:24:25.320 --> 00:24:32.399
+quite a lot from 2023 to 2024. I'm thankful for the time
+
+00:24:32.400 --> 00:24:37.959
+that I learned from you, so thank you, Paul. With that, we're
+
+00:24:37.960 --> 00:24:42.759
+at point-max. Call me, beat me, if you want to reach me and or
+
+00:24:42.760 --> 00:24:45.839
+hire me. These are places that you can reach me at. There are
+
+00:24:45.840 --> 00:24:49.719
+probably others. Feel free to suggest other ways to contact
+
+00:24:49.720 --> 00:24:53.199
+me. But for now, this is the end. Thank you so much for your
+
+00:24:53.200 --> 00:24:56.080
+time. I really appreciate it.
diff --git a/2024/captions/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--answers.vtt b/2024/captions/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--answers.vtt
new file mode 100644
index 00000000..1b881325
--- /dev/null
+++ b/2024/captions/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--answers.vtt
@@ -0,0 +1,926 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:06.519
+Okay, so I'm going to look at some of the questions showing up
+
+00:00:06.520 --> 00:00:08.499
+in the etherpad we got here.
+
+NOTE Q: Have you considered using CRDTs to share buffers between threads and merge any concurrent edits automatically?
+
+00:00:08.500 --> 00:00:09.439
+It says, have you considered
+
+00:00:09.440 --> 00:00:12.799
+using a CRDT to share buffers between threads and merge any
+
+00:00:12.800 --> 00:00:16.039
+concurrent edits automatically? So I have looked at that.
+
+00:00:16.040 --> 00:00:20.559
+And the problem with CRDTs is that even though they give you a
+
+00:00:20.560 --> 00:00:22.839
+mathematically correct answer when you're trying to merge
+
+00:00:22.840 --> 00:00:26.479
+two conflicts, it's not always a useful answer. Like, it's
+
+00:00:26.480 --> 00:00:29.199
+not coherent. If you have two things trying to edit the same
+
+00:00:29.200 --> 00:00:31.359
+thing, there's no good way to resolve that. And so they
+
+00:00:31.360 --> 00:00:33.559
+really work well when you have two people working live, both
+
+00:00:33.560 --> 00:00:35.639
+editing the same document, because they can fix any
+
+00:00:35.640 --> 00:00:37.199
+particular issues like that, like you would with Google
+
+00:00:37.200 --> 00:00:39.919
+Docs. But you have different packages that aren't aware of
+
+00:00:39.920 --> 00:00:42.159
+each other, and you're going to run into problems. And so
+
+00:00:42.160 --> 00:00:44.999
+this is something, if you read from the Xi editor, which was
+
+00:00:45.000 --> 00:00:48.039
+one of the first ones to use CRDTs, in the retrospective, he
+
+00:00:48.040 --> 00:00:52.359
+talks about how they had this problem, where the CRDTs They
+
+00:00:52.360 --> 00:00:53.999
+give you an answer, but it's not always an answer that's
+
+00:00:54.000 --> 00:00:59.079
+useful. And so I feel like locks at least are going to make it.
+
+00:00:59.080 --> 00:01:00.439
+It's not going to be as efficient if you have a whole bunch of
+
+00:01:00.440 --> 00:01:02.319
+packages, but I don't imagine there's going to be a ton of
+
+00:01:02.320 --> 00:01:04.799
+those. It can actually, I think it'll be more useful in
+
+00:01:04.800 --> 00:01:05.873
+practice.
+
+NOTE Q: Why hosted on GitHub? GitHub is nonfree. Is it possible to report bugs/send patches without using GitHub?
+
+00:01:05.874 --> 00:01:11.239
+I host on GitHub because that's what I know.
+
+00:01:11.240 --> 00:01:13.239
+If there's a way to host it on somewhere else, I'd be
+
+00:01:13.240 --> 00:01:15.439
+interested in doing that. If you're interested in setting
+
+00:01:15.440 --> 00:01:17.799
+patches without using GitHub, you could always send an
+
+00:01:17.800 --> 00:01:22.959
+email. I'm more than happy to accept email patches.
+
+NOTE Q: Do you think it's possible to achieve 100% compatibility with current Emacs code?
+
+00:01:22.960 --> 00:01:24.959
+Do you think it's possible to achieve with the current Emacs
+
+00:01:24.960 --> 00:01:29.719
+code? I do. I think, I think you can do that. Um, like I said,
+
+00:01:29.720 --> 00:01:33.279
+there's a couple things inside there that are intentional
+
+00:01:33.280 --> 00:01:37.919
+breaks with existing Emacs code. And some of those being
+
+00:01:37.920 --> 00:01:43.159
+like functions are immutable. As well as having data shared
+
+00:01:43.160 --> 00:01:44.759
+switch between different threads, which means there's
+
+00:01:44.760 --> 00:01:46.599
+going to be some copying going on. So there's going to be
+
+00:01:46.600 --> 00:01:48.399
+subtle things that are going to be different. And we've
+
+00:01:48.400 --> 00:01:50.359
+really got to think about those intentionally, but I'm
+
+00:01:50.360 --> 00:01:54.519
+really going for bug compatibility with GNU Emacs so that
+
+00:01:54.520 --> 00:01:57.159
+you can take an existing Elisp package and just run it and it
+
+00:01:57.160 --> 00:01:59.879
+just works, 'cause I think that's one of the big strengths of
+
+00:01:59.880 --> 00:02:03.399
+the Emacs ecosystem is the millions of lines of Elisp that
+
+00:02:03.400 --> 00:02:07.479
+people have written.
+
+00:02:07.480 --> 00:02:11.912
+Um, So I'm not, okay...
+
+NOTE Q: so you're re-implementing elisp in rust? have you considered using a more modern lisp, such as scheme? [11:03]
+
+00:02:11.913 --> 00:02:14.279
+So since you're re-implementing Elisp and
+
+00:02:14.280 --> 00:02:17.039
+Rust, have you considered using more modern Lisp such as
+
+00:02:17.040 --> 00:02:20.919
+Scheme? So I'm not re-implementing Elisp and Rust. I'm
+
+00:02:20.920 --> 00:02:25.439
+re-implementing the C in Rust. In fact, I would like to make
+
+00:02:25.440 --> 00:02:30.479
+more of the core that's written in C in Elisp instead of C or
+
+00:02:30.480 --> 00:02:33.839
+Rust, because then it's actually introspectible. There's
+
+00:02:33.840 --> 00:02:38.719
+a talk by Tom Tromney that he gave a while ago about Emacs
+
+00:02:38.720 --> 00:02:42.239
+should be Emacs Lisp. I kind of like that philosophy,
+
+00:02:42.240 --> 00:02:44.799
+that as much of it as should be Elisp as possible, and we
+
+00:02:44.800 --> 00:02:48.079
+should only have C or Rust or some systems level language for
+
+00:02:48.080 --> 00:02:52.319
+really low-level stuff. Using a more modern LISP such as
+
+00:02:52.320 --> 00:02:54.839
+Scheme. I know there's, I mean, there's two talks, I think,
+
+00:02:54.840 --> 00:02:58.239
+in this conference about using Scheme inside Emacs. And I
+
+00:02:58.240 --> 00:03:00.719
+looked at this at one point about what if you wrote it inside
+
+00:03:00.720 --> 00:03:03.919
+Common LISP, because that's also has some really low level
+
+00:03:03.920 --> 00:03:05.879
+details. And then you could go from Elisp down to Common
+
+00:03:05.880 --> 00:03:09.199
+Lisp. But the problem is, is under the hood, you still need a
+
+00:03:09.200 --> 00:03:12.559
+systems language. You can't, you still need either C or Rust
+
+00:03:12.560 --> 00:03:15.639
+or something underneath the Common Lisp to implement the
+
+00:03:15.640 --> 00:03:17.799
+primitives. And so it's not going to give you just two
+
+00:03:17.800 --> 00:03:19.719
+languages, you know, you'll have three. You'll have the
+
+00:03:19.720 --> 00:03:24.919
+elisp, common lisp, and C under the hood. And so in this case
+
+00:03:24.920 --> 00:03:29.559
+we just have the two. We have the Elisp and the rest.
+
+00:03:29.560 --> 00:03:42.999
+All right that's all the questions I see there. Let
+
+00:03:43.000 --> 00:03:54.079
+me go look at... Okay,
+
+00:03:54.080 --> 00:04:01.399
+so I see into the chat.
+
+NOTE Q: Do you have specific features from the Rust compiler that are missing (or are nightly-only) that you would take advantage of?
+
+00:04:01.400 --> 00:04:03.839
+Does it features from the Rust compiler that are missing
+
+00:04:03.840 --> 00:04:06.239
+that way you would take advantage of? Oh, that is a great
+
+00:04:06.240 --> 00:04:10.679
+question. Um, there's a handful of them. Uh, I should've
+
+00:04:10.680 --> 00:04:13.599
+written down a list of these. One of them is Polonius, which
+
+00:04:13.600 --> 00:04:17.959
+is the new borrow checker because we're trying to be used
+
+00:04:17.960 --> 00:04:21.759
+lifetime to track our objects. We often run into situations
+
+00:04:21.760 --> 00:04:24.239
+where we've kind of got a hack around things because the
+
+00:04:24.240 --> 00:04:26.199
+limitations with the borrow checker. And so I have a whole
+
+00:04:26.200 --> 00:04:29.559
+bunch of like notes inside there about where. A better
+
+00:04:29.560 --> 00:04:34.959
+Polonius would help inside there and help ease some of the
+
+00:04:34.960 --> 00:04:40.599
+issues. Another thing is enum variances types, because
+
+00:04:40.600 --> 00:04:42.999
+right now we have an object which is defined as a big enum that
+
+00:04:43.000 --> 00:04:46.079
+had all the possible objects, but if we want to have a subset
+
+00:04:46.080 --> 00:04:47.479
+of those objects or just pass in one of those objects, we've
+
+00:04:47.480 --> 00:04:50.079
+got to define a new struct. And so we have a whole bunch of
+
+00:04:50.080 --> 00:04:52.839
+boilerplate code to define that all out. And if we had
+
+00:04:52.840 --> 00:04:56.719
+variances types, that would make the code a lot easier.
+
+00:04:56.720 --> 00:05:00.079
+Another one is the allocator API. Right now we're kind of
+
+00:05:00.080 --> 00:05:02.479
+working around it, but ultimately we're going to need our
+
+00:05:02.480 --> 00:05:07.719
+own allocator. And the allocator API is still nightly only.
+
+00:05:07.720 --> 00:05:10.919
+So there's a couple more. I'll look at that more, but that's a
+
+00:05:10.920 --> 00:05:24.279
+great question.
+
+00:05:24.280 --> 00:05:26.879
+Let's see.
+
+NOTE Q: Can remacs be reused?
+
+00:05:26.880 --> 00:05:30.799
+Okay. I see a question you might not have noticed just asking
+
+00:05:30.800 --> 00:05:37.159
+about reuse of Remacs. Oh, yes, so I have reused some of Remacs
+
+00:05:37.160 --> 00:05:40.159
+code, and some taken, like I mentioned, taken some of their
+
+00:05:40.160 --> 00:05:45.319
+ideas, but ultimately we're using a different model
+
+00:05:45.320 --> 00:05:49.439
+because under the hood in Remacs, everything is just defined
+
+00:05:49.440 --> 00:05:53.799
+as an opaque external type that's defined inside Emacs and
+
+00:05:53.800 --> 00:05:56.159
+so it just pulls those in interacts with those and passes
+
+00:05:56.160 --> 00:05:58.879
+them back into C. We're trying to see what we can do if we
+
+00:05:58.880 --> 00:06:02.279
+say okay we're not going to take the same... So they're bound to
+
+00:06:02.280 --> 00:06:06.839
+the implementation details of Emacs, and we don't want to do
+
+00:06:06.840 --> 00:06:09.559
+that. We've re-implemented all the core types
+
+00:06:09.560 --> 00:06:12.559
+ourselves. So that means that we can't just take the
+
+00:06:12.560 --> 00:06:16.559
+Remacs code one for one and use it in our project, but we can
+
+00:06:16.560 --> 00:06:18.799
+take a lot of their ideas. I've spent some time reading
+
+00:06:18.800 --> 00:06:20.439
+through their documentation, different things about how
+
+00:06:20.440 --> 00:06:23.856
+they approached strings and GC
+
+00:06:23.857 --> 00:06:24.759
+and different stuff like that.
+
+00:06:24.760 --> 00:07:23.599
+Looks like all the questions.
+
+NOTE Q: What are you thoughts on the GUI layer. Any plans on how to reimplement it?
+
+00:07:23.600 --> 00:07:26.199
+Okay, so another question. What are your thoughts on the GUI
+
+00:07:26.200 --> 00:07:30.959
+layer? Any plans on how to reimplement it? This is something
+
+00:07:30.960 --> 00:07:34.079
+I've thought a lot about, but I still don't have a solid plan
+
+00:07:34.080 --> 00:07:37.253
+for. I'm not really a GUI person. I mostly work with
+
+00:07:37.254 --> 00:07:42.719
+low-level. And so my two thoughts is you can go the GTK route.
+
+00:07:42.720 --> 00:07:45.519
+There's Rust bindings for that. That's well understood.
+
+00:07:45.520 --> 00:07:48.319
+It's got a good support. But there's also some interesting
+
+00:07:48.320 --> 00:07:53.919
+projects to try and do GUI in Rust, native Rust, and have it
+
+00:07:53.920 --> 00:07:57.399
+use Rust idioms and stuff like that. And so those are things
+
+00:07:57.400 --> 00:08:01.439
+like Druid and there's eGUI and a bunch of those that are that
+
+00:08:01.440 --> 00:08:05.359
+way. And I've never used one of them, but I'd be interested to
+
+00:08:05.360 --> 00:08:08.879
+try that out first and see how well does this work and how well
+
+00:08:08.880 --> 00:08:21.239
+supported is this doing a Rust-first GUI.
+
+NOTE Q: If money could fix the problem, how much would it cost to ship this with feature parity before 2026?
+
+00:08:21.240 --> 00:08:23.639
+If money could fix the problem, how much would it cost to ship
+
+00:08:23.640 --> 00:08:28.399
+this with feature parity before 2026? Ooh, in a year. Uh,
+
+00:08:28.400 --> 00:08:32.079
+that's a good question. Even if we had the money, it would
+
+00:08:32.080 --> 00:08:36.639
+take more than just me, even if I was working on it full time.
+
+00:08:36.640 --> 00:08:40.630
+Um, I don't know. That's a good question.
+
+00:08:40.631 --> 00:08:41.769
+I would think it would take a team
+
+00:08:41.770 --> 00:08:45.239
+of at least a handful of people to get this
+
+00:08:45.240 --> 00:08:48.559
+shipping within one year. Because there's still a lot of
+
+00:08:48.560 --> 00:08:50.759
+work to do. And even once you have everything implemented,
+
+00:08:50.760 --> 00:08:55.119
+there's a lot of bug finding and smoothing it out so that it
+
+00:08:55.120 --> 00:08:57.519
+runs as well as Emacs, which has been, you know, battle
+
+00:08:57.520 --> 00:08:58.359
+tested for a long time.
+
+00:08:58.360 --> 00:09:06.599
+Um, okay, so this might be a good moment for me to break in and
+
+00:09:06.600 --> 00:09:09.039
+just say that we've got about 10 minutes left before we
+
+00:09:09.040 --> 00:09:12.519
+resume new talks on on both tracks. Of course, we're happy to
+
+00:09:12.520 --> 00:09:18.119
+keep this. This chat open and keep the recording going here,
+
+00:09:18.120 --> 00:09:21.599
+which will share after the conference as long as as long as
+
+00:09:21.600 --> 00:09:28.349
+there's discussion here. Thank you.
+
+NOTE GObject implementation
+
+00:09:28.350 --> 00:09:29.119
+GTK project has
+
+00:09:29.120 --> 00:09:31.079
+automatic binding with a framework called GObject
+
+00:09:31.080 --> 00:09:33.599
+introspection, which is what I'm using for gypsum project.
+
+00:09:33.600 --> 00:09:35.959
+Probably Rust has a G object implementation, which you can
+
+00:09:35.960 --> 00:09:39.119
+use. Yeah, I know it has some GTK bindings. Um, I'm not sure if
+
+00:09:39.120 --> 00:09:41.954
+it's specifically GObject, but that's a good path
+
+00:09:41.955 --> 00:09:44.335
+because I feel like the problem
+
+00:09:44.336 --> 00:09:46.759
+with the Rust GUIs is that they're all
+
+00:09:46.760 --> 00:09:50.359
+very new. And so, you know, everything works in a demo, but
+
+00:09:50.360 --> 00:09:52.319
+you need something that can work across all different
+
+00:09:52.320 --> 00:09:54.319
+devices and all different platforms and have really good
+
+00:09:54.320 --> 00:09:56.599
+support and good accessibility and stuff like that.
+
+NOTE Q: elisp is implemented in c, so if you're not implementing elisp in rust, are you using/keeping the c implementation of elisp?
+
+00:09:56.600 --> 00:10:03.399
+All right, Elisp is implemented in C. So if you're not
+
+00:10:03.400 --> 00:10:07.359
+implementing Elisp in Rust, we're keeping the C
+
+00:10:07.360 --> 00:10:13.639
+implementation of Elisp. So let me see if I can do a better job
+
+00:10:13.640 --> 00:10:18.439
+of explaining this. So inside Emacs, you have about a
+
+00:10:18.440 --> 00:10:21.519
+million lines of Elisp. And underneath that, you have the C,
+
+00:10:21.520 --> 00:10:24.079
+which is the primitives everything's implemented yet. And
+
+00:10:24.080 --> 00:10:27.079
+so we're keeping all of the Elisp, and we're just taking that
+
+00:10:27.080 --> 00:10:30.559
+C layer and replacing it with Rust. And so when you call a
+
+00:10:30.560 --> 00:10:33.079
+built-in function, it's calling into a Rust function
+
+00:10:33.080 --> 00:10:40.079
+instead of a C function under the hood. So all the Elisp stays
+
+00:10:40.080 --> 00:10:42.679
+Elisp, but the C becomes Rust.
+
+NOTE Clarifying rewriting Elisp in Rust
+
+00:10:42.680 --> 00:10:54.599
+So looking at the IRC chat, it feels to me like maybe there's a
+
+00:10:54.600 --> 00:10:59.159
+little bit of confusion around what do we mean when we say
+
+00:10:59.160 --> 00:11:04.839
+rewriting Elisp in Rust, right? I think there are some
+
+00:11:04.840 --> 00:11:07.399
+people that are like, A, we're reinventing ELISP, and
+
+00:11:07.400 --> 00:11:09.679
+there's other people that are like, no, we're trying to be
+
+00:11:09.680 --> 00:11:12.879
+byte-for-byte compatible with Rust.
+
+00:11:12.880 --> 00:11:17.500
+So some people are questioning your no answer on that.
+
+00:11:17.501 --> 00:11:20.000
+Aren't you really, maybe, is what I'm reading in there.
+
+00:11:20.001 --> 00:11:21.769
+Do you want to respond to that?
+
+00:11:21.770 --> 00:11:26.119
+Yeah, I'm trying to think about how I can make this
+
+00:11:26.120 --> 00:11:29.559
+clearer. So the Elisp stays Elisp. We're not changing the
+
+00:11:29.560 --> 00:11:33.239
+Elisp at all, or at least very minimally. We want to be able to
+
+00:11:33.240 --> 00:11:36.519
+take, like I said, bug compatible. So whatever works inside
+
+00:11:36.520 --> 00:11:39.999
+existing Emacs, you can take all the Lisp and you can run it in
+
+00:11:40.000 --> 00:11:43.599
+Rune and it works the same. So the Elisp stays the same. It's
+
+00:11:43.600 --> 00:11:47.119
+just the under the hood core that is getting replaced. And
+
+00:11:47.120 --> 00:11:49.199
+this in turn adds some new features such as
+
+00:11:49.200 --> 00:11:52.799
+multi-threading. So it's not exactly compatible, but
+
+00:11:52.800 --> 00:11:55.559
+you should be able to use your existing code and the Elisp will
+
+00:11:55.560 --> 00:12:00.639
+stay Elisp. So the idea is that anything that I've written as
+
+00:12:00.640 --> 00:12:04.559
+an Emacs user, my config, my custom packages, whatever it
+
+00:12:04.560 --> 00:12:08.999
+may be, that's all going to be valid code. If you take, you
+
+00:12:09.000 --> 00:12:13.163
+know, the Elisp implementation as being the C code
+
+00:12:13.164 --> 00:12:15.745
+and the parts of Elisp written in Elisp
+
+00:12:15.746 --> 00:12:18.448
+that represent opportunity space
+
+00:12:18.449 --> 00:12:20.799
+thinking about Rust as an implementation language...
+
+00:12:20.800 --> 00:12:24.479
+Okay fine. You know, you can make a semantic argument, okay
+
+00:12:24.480 --> 00:12:25.995
+we're re-implementing, we're creating
+
+00:12:25.996 --> 00:12:29.018
+an alternate implementation of Elisp
+
+00:12:29.019 --> 00:12:31.639
+but what Elisp is isn't the problem
+
+00:12:31.640 --> 00:12:35.039
+space here. That's a fixed, a given, if you will.
+
+00:12:35.040 --> 00:12:36.065
+Is that all right?
+
+00:12:36.066 --> 00:12:39.199
+That's a good way of saying it. Okay. Yeah, what you
+
+00:12:39.200 --> 00:12:42.559
+said makes sense. I was kind of responding to some comments,
+
+00:12:42.560 --> 00:12:44.959
+like I'm not sure it connected for everybody. Makes a lot of
+
+00:12:44.960 --> 00:12:47.399
+sense. Yeah, I wasn't sure how much I needed to expand on that
+
+00:12:47.400 --> 00:12:51.119
+and explain that, but I appreciate you jumping in.
+
+00:12:51.120 --> 00:12:57.907
+Um, okay. So if I were just going to, but...
+
+NOTE Q: Will your Rust implementation also be able to run Emacs bytecode? Or are you implementing it at the Lisp level?
+
+00:12:57.908 --> 00:13:02.239
+Will your Rust implementation also be able to run Emacs bytecode or the
+
+00:13:02.240 --> 00:13:04.359
+implemented at the Lisp level? So I already have a bytecode
+
+00:13:04.360 --> 00:13:06.759
+interpreter inside there that runs the existing Elisp
+
+00:13:06.760 --> 00:13:09.519
+bytecode. And so that was one of the first things I did was
+
+00:13:09.520 --> 00:13:11.679
+bootstrap the interpreter and then bootstrap the bytecode
+
+00:13:11.680 --> 00:13:14.999
+engine. And so we compile, we use the... because the bytecode
+
+00:13:15.000 --> 00:13:19.079
+compiler is written in Emacs Lisp. So you bootstrap that
+
+00:13:19.080 --> 00:13:22.919
+and it gives you the Emacs bytecode. I have a bytecode
+
+00:13:22.920 --> 00:13:26.039
+engine that runs the bytecode. So that's already done. And
+
+00:13:26.040 --> 00:13:28.239
+you can potentially, on top of that, do something like the
+
+00:13:28.240 --> 00:13:31.999
+data compilation or a JIT. But we have both an
+
+00:13:32.000 --> 00:13:47.019
+interpreter and a bytecode compiler.
+
+00:13:47.020 --> 00:13:50.799
+And I'll just break in one more time to say with about five
+
+00:13:50.800 --> 00:13:56.319
+minutes left in our live time with this Q&A session, which
+
+00:13:56.320 --> 00:13:58.439
+we're happy to keep going as long as there are questions.
+
+00:13:58.440 --> 00:14:03.959
+Coming up in five minutes, we'll have a talk on color on the
+
+00:14:03.960 --> 00:14:09.639
+gen track. And then right here, we'll have the p-search
+
+00:14:09.640 --> 00:14:09.959
+talk.
+
+00:14:09.960 --> 00:14:20.099
+Thank you.
+
+NOTE Q: Is it possible to bootstrap with just the bytecode interpreter?
+
+00:14:20.100 --> 00:14:22.559
+Is it possible to bootstrap with just the bytecode
+
+00:14:22.560 --> 00:14:25.759
+interpreter? So I'll have to put in a link to one of my blog
+
+00:14:25.760 --> 00:14:28.519
+posts. So that was my original idea was to say, I don't want to
+
+00:14:28.520 --> 00:14:31.559
+have an interpreter, a bytecode interpreter and a native
+
+00:14:31.560 --> 00:14:33.180
+compiler. I want to just have just one.
+
+00:14:33.181 --> 00:14:36.741
+So I'm only going to have the bytecode.
+
+00:14:36.742 --> 00:14:37.708
+And so that's what I did initially.
+
+00:14:37.709 --> 00:14:42.079
+The problem with that is, is that a bunch of the early bootstrap
+
+00:14:42.080 --> 00:14:45.117
+Emacs code is written with the assumption
+
+00:14:45.118 --> 00:14:47.278
+that it's going to be interpreted.
+
+00:14:47.279 --> 00:14:49.019
+This is especially true with macros,
+
+00:14:49.020 --> 00:14:50.821
+where you'll have a function defined,
+
+00:14:50.822 --> 00:14:52.642
+you'll evaluate part of the function.
+
+00:14:52.643 --> 00:14:55.599
+The other half of the function has macros in it
+
+00:14:55.600 --> 00:14:59.719
+that are not defined yet, but it doesn't matter because they
+
+00:14:59.720 --> 00:15:02.399
+don't get used. But with the bytecode interpreter, it
+
+00:15:02.400 --> 00:15:04.639
+expands all macros when it gets the function definition.
+
+00:15:04.640 --> 00:15:08.799
+And so those weren't macros when the function was expanded,
+
+00:15:08.800 --> 00:15:12.359
+and therefore they got instantiated as functions, but
+
+00:15:12.360 --> 00:15:15.759
+they're not functions, they're macros. And so I initially
+
+00:15:15.760 --> 00:15:18.999
+spent a bunch of time trying to work around this, trying to
+
+00:15:19.000 --> 00:15:21.599
+move code around, work stuff around, refactor the code to
+
+00:15:21.600 --> 00:15:24.759
+try and get it to work with only bytecode interpreter. And
+
+00:15:24.760 --> 00:15:27.039
+eventually I just gave up. I said, you know what, I'm just
+
+00:15:27.040 --> 00:15:30.039
+going to write an actual interpreter to handle this because
+
+00:15:30.040 --> 00:15:33.799
+trying to handle all these lazy macros is too much work. And
+
+00:15:33.800 --> 00:15:35.759
+everything in the bootstrap is built with the assumption
+
+00:15:35.760 --> 00:15:37.799
+that you have lazy macro expansion.
+
+00:15:37.800 --> 00:15:45.159
+I'm guessing the Emacs bytecode interpreter isn't
+
+00:15:45.160 --> 00:15:45.959
+complete.
+
+00:15:45.960 --> 00:15:52.279
+So it's mostly complete. There's a handful of opcodes that
+
+00:15:52.280 --> 00:15:55.239
+aren't implemented that are pretty easy to add that I
+
+00:15:55.240 --> 00:15:57.879
+haven't run into. And there's some of them that are
+
+00:15:57.880 --> 00:16:00.119
+deprecated that aren't implemented, but it's essentially
+
+00:16:00.120 --> 00:16:00.479
+complete.
+
+00:16:00.480 --> 00:16:11.999
+We also provide a bytecode JIT compilation via libgcc the
+
+00:16:12.000 --> 00:16:17.344
+way Emacs currently does it. Eventually I would like to...
+
+00:16:17.345 --> 00:16:22.919
+I'm more inclined to have a proper runtime JIT than an
+
+00:16:22.920 --> 00:16:27.399
+ahead-of-time compiler like libgcc, like the current
+
+00:16:27.400 --> 00:16:29.919
+Emacs native compilation, because it allows you to take
+
+00:16:29.920 --> 00:16:34.559
+type information and actually apply that to the code, which
+
+00:16:34.560 --> 00:17:03.959
+can let you do more aggressive optimizations to it.
+
+NOTE What would it take to bootstrap Guile in Rune?
+
+00:17:03.960 --> 00:17:06.319
+He said, we may either get a new Emacs with an ancient C core
+
+00:17:06.320 --> 00:17:09.039
+with a modern Lisp, or an Emacs with modern core, but stuck
+
+00:17:09.040 --> 00:17:11.879
+with ancient Elisp. So there was another project I was
+
+00:17:11.880 --> 00:17:16.639
+talking to, one of the Guile implementations, about how we
+
+00:17:16.640 --> 00:17:19.119
+could potentially, he was like, what would it take to
+
+00:17:19.120 --> 00:17:24.479
+bootstrap Guile in Rune, where you have both, you could have
+
+00:17:24.480 --> 00:17:27.399
+Elisp and Guile running inside this project. And so we've
+
+00:17:27.400 --> 00:17:28.999
+started that discussion, which I think would be, which
+
+00:17:29.000 --> 00:17:33.999
+would be interesting. But it's tricky too, because
+
+00:17:34.000 --> 00:17:36.199
+fundamentally Elisp and Guile are two different
+
+00:17:36.200 --> 00:17:38.119
+languages. They have different semantics. They have
+
+00:17:38.120 --> 00:17:39.879
+different ways of handling things. You've really got to
+
+00:17:39.880 --> 00:17:42.479
+consider both of those when you're trying to make them work
+
+00:17:42.480 --> 00:17:42.799
+together.
+
+00:17:42.800 --> 00:17:57.319
+How would you do the native module system? What would be
+
+00:17:57.320 --> 00:17:59.799
+different? We can do the same thing. We have an FFI. So I
+
+00:17:59.800 --> 00:18:03.839
+haven't looked into it a ton, but I feel like it could be
+
+00:18:03.840 --> 00:18:06.359
+similar. And I'm actually interested, there's a couple
+
+00:18:06.360 --> 00:18:12.759
+projects on GitHub right now to have an FFI written in Elisp.
+
+00:18:12.760 --> 00:18:17.239
+So you don't even need to create a separate C or Rust module,
+
+00:18:17.240 --> 00:18:21.679
+because you can actually write native modules in Rust or C.
+
+00:18:21.680 --> 00:18:25.559
+And so you can just have direct bindings to a C FFI written in
+
+00:18:25.560 --> 00:18:27.799
+Elisp. You don't need any C code inside there. And I think
+
+00:18:27.800 --> 00:18:33.699
+that would be an interesting approach to look at as well.
+
+00:18:33.700 --> 00:18:35.839
+Oh, Ramin. Yeah, that's right. We were talking about that,
+
+00:18:35.840 --> 00:18:41.539
+about bootstrapping Scheme.
+
+00:18:41.540 --> 00:18:45.519
+And at this point, we have broken away from, uh, from this
+
+00:18:45.520 --> 00:18:47.399
+talk, but we're continuing to record and this will all be
+
+00:18:47.400 --> 00:18:50.439
+published. I'd say, go ahead and keep going as long as you'd
+
+00:18:50.440 --> 00:18:54.959
+like in here. And, um, thanks once again for the awesome
+
+00:18:54.960 --> 00:18:58.639
+discussion. Thank you so much. So I'll just pay attention to
+
+00:18:58.640 --> 00:19:02.919
+the ether pad and the chat and see.
+
+00:19:02.920 --> 00:19:05.919
+That sounds good. I'll keep an eye on IRC. And if there are
+
+00:19:05.920 --> 00:19:08.559
+more questions here, I'll bounce people toward the ether
+
+00:19:08.560 --> 00:19:12.760
+pad or this, uh, chat room. All right, thank you.
diff --git a/2024/captions/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--main--chapters.vtt b/2024/captions/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--main--chapters.vtt
new file mode 100644
index 00000000..ef14c4ae
--- /dev/null
+++ b/2024/captions/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--main--chapters.vtt
@@ -0,0 +1,92 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:17.081
+Rune
+
+00:00:17.082 --> 00:00:57.167
+The Emacs core
+
+00:00:57.168 --> 00:01:55.864
+Why create this?
+
+00:01:55.865 --> 00:03:01.314
+How does this compare to other projects?
+
+00:03:01.315 --> 00:03:32.440
+Multi-threading
+
+00:03:32.441 --> 00:03:47.647
+Multi-threading elisp
+
+00:03:47.648 --> 00:04:32.637
+No-GIL method
+
+00:04:32.638 --> 00:04:51.251
+Actors
+
+00:04:51.252 --> 00:05:34.679
+Multi-threading elisp (functions)
+
+00:05:34.680 --> 00:05:57.089
+Caveats
+
+00:05:57.090 --> 00:06:38.248
+Multi-threading elisp (data)
+
+00:06:38.249 --> 00:06:57.883
+Copy values to other threads on demands
+
+00:06:57.884 --> 00:08:11.902
+Multi-threading elisp (buffers)
+
+00:08:11.903 --> 00:08:46.918
+Would this actually be useful?
+
+00:08:46.919 --> 00:09:16.536
+Precise garbage collection
+
+00:09:16.537 --> 00:10:38.712
+How Emacs used to deal with roots
+
+00:10:38.713 --> 00:11:00.156
+Conservative stack scanning
+
+00:11:00.157 --> 00:12:38.828
+Movable objects
+
+00:12:38.829 --> 00:14:13.226
+How Rust makes precise GC easy
+
+00:14:13.227 --> 00:15:14.559
+Other Rust niceties: proc macro
+
+00:15:14.560 --> 00:16:01.040
+sum types
+
+00:16:01.041 --> 00:16:16.051
+Regex
+
+00:16:16.052 --> 00:16:27.209
+Parsers
+
+00:16:27.210 --> 00:16:58.918
+Other changes: GUI first, terminal second
+
+00:16:58.919 --> 00:17:16.304
+Off-screen cursor
+
+00:17:16.305 --> 00:17:24.439
+Image flow
+
+00:17:24.440 --> 00:18:36.344
+Testing
+
+00:18:36.345 --> 00:19:07.246
+Status
+
+00:19:07.247 --> 00:19:22.738
+Next directions
+
+00:19:22.739 --> 00:20:06.000
+How to get involved
diff --git a/2024/captions/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--main.vtt b/2024/captions/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--main.vtt
new file mode 100644
index 00000000..05826fb8
--- /dev/null
+++ b/2024/captions/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--main.vtt
@@ -0,0 +1,1351 @@
+WEBVTT captioned by sachac, checked by bhavin
+
+NOTE Rune
+
+00:00:00.000 --> 00:00:05.119
+Hello, EmacsConf. My name is Troy Hinckley, and this is my
+
+00:00:05.120 --> 00:00:08.759
+talk on Rune, a Rust implementation in Emacs. We strive to be
+
+00:00:08.760 --> 00:00:11.839
+bug compatible with Emacs, so you can use the same Elisp.
+
+00:00:11.840 --> 00:00:14.879
+It's still a fairly early stage experimental project, and
+
+00:00:14.880 --> 00:00:17.081
+we have some basic things implemented.
+
+NOTE The Emacs core
+
+00:00:17.082 --> 00:00:19.946
+Before I get started, I want to talk a bit more
+
+00:00:19.947 --> 00:00:21.847
+about what the core is.
+
+00:00:21.848 --> 00:00:24.559
+So the Emacs core, it includes the runtime, the interpreter,
+
+00:00:24.560 --> 00:00:26.439
+garbage collector, everything used to run the code.
+
+00:00:26.440 --> 00:00:29.799
+It includes the GUI. It includes all the data structures.
+
+00:00:29.800 --> 00:00:31.919
+If you look underneath all the Elisp data structures,
+
+00:00:31.920 --> 00:00:33.599
+there's C code underneath there,
+
+00:00:33.600 --> 00:00:35.559
+as well as the auxiliary functions
+
+00:00:35.560 --> 00:00:39.239
+of which there's about 1500. In making this talk, I don't
+
+00:00:39.240 --> 00:00:40.919
+want to give the impression that I'm saying the core is
+
+00:00:40.920 --> 00:00:42.879
+outdated or that needs to be replaced or that it can't be
+
+00:00:42.880 --> 00:00:45.519
+evolved on its own, because clearly it has continued to
+
+00:00:45.520 --> 00:00:48.319
+evolve. If we look in just the last few years, we can see that
+
+00:00:48.320 --> 00:00:50.439
+we've added native compilation, we've added tree-sitter
+
+00:00:50.440 --> 00:00:52.759
+support, we've added color emoji, and there's work right
+
+00:00:52.760 --> 00:00:57.167
+now to add a new garbage collector to Emacs as well.
+
+NOTE Why create this?
+
+00:00:57.168 --> 00:01:01.071
+Why create this project? Emacs has a long history.
+
+00:01:01.072 --> 00:01:04.535
+It has a lot of users. It needs to support a big community.
+
+00:01:04.536 --> 00:01:06.837
+Because of that, it has to be very conservative
+
+00:01:06.838 --> 00:01:10.321
+about what things it can allow into the project.
+
+00:01:10.322 --> 00:01:11.639
+Forks like this create an
+
+00:01:11.640 --> 00:01:15.586
+opportunity to experiment and try new approaches.
+
+00:01:15.587 --> 00:01:18.799
+This is particularly a good use case for Rust because the C core,
+
+00:01:18.800 --> 00:01:20.849
+it's pretty well tested. It's been around for a long time.
+
+00:01:20.850 --> 00:01:22.959
+A lot of the bugs have been ironed out, but when you're doing a
+
+00:01:22.960 --> 00:01:26.439
+new greenfield project, it's very easy to introduce new
+
+00:01:26.440 --> 00:01:28.774
+undefined behavior and memory unsafety
+
+00:01:28.775 --> 00:01:32.376
+and stuff like that. Rust protects us from most of that,
+
+00:01:32.377 --> 00:01:34.937
+but it also gives us the ability to be fast
+
+00:01:34.938 --> 00:01:37.883
+and has a strong ecosystem behind it.
+
+00:01:37.884 --> 00:01:40.399
+Rust is also really good at multi-threading.
+
+00:01:40.400 --> 00:01:43.399
+Their phrase in the community is fearless concurrency.
+
+00:01:43.400 --> 00:01:45.559
+They should be able to write concurrent programs without
+
+00:01:45.560 --> 00:01:49.319
+having to worry about data races. It's also really high
+
+00:01:49.320 --> 00:01:51.839
+performance. It has a really good regex engine. It's known
+
+00:01:51.840 --> 00:01:55.864
+for its non-copy I/O as well.
+
+NOTE How does this compare to other projects?
+
+00:01:55.865 --> 00:01:57.479
+How does this compare to other
+
+00:01:57.480 --> 00:01:59.919
+Rust and Emacs projects, whether there's been a couple? The
+
+00:01:59.920 --> 00:02:02.799
+first is Remacs. This project was the first. It took an
+
+00:02:02.800 --> 00:02:05.519
+outside-in approach. Basically you could take a C
+
+00:02:05.520 --> 00:02:09.319
+function and replace it with a Rust function and build it
+
+00:02:09.320 --> 00:02:11.799
+together as one executable. This is pretty easy to do
+
+00:02:11.800 --> 00:02:14.639
+because they could both talk over the C ABI. You could
+
+00:02:14.640 --> 00:02:16.479
+swap out functions once at a time. They made really good
+
+00:02:16.480 --> 00:02:20.279
+progress at first, but eventually they ran into the problem
+
+00:02:20.280 --> 00:02:23.079
+that as you get down to the really core parts of it, you can't
+
+00:02:23.080 --> 00:02:25.919
+just replace one function at a time anymore, because some of
+
+00:02:25.920 --> 00:02:28.159
+that functionality is connected to other things. Like for
+
+00:02:28.160 --> 00:02:30.359
+example, you can't replace the garbage collector without
+
+00:02:30.360 --> 00:02:32.759
+replacing the entire garbage collection system. So the
+
+00:02:32.760 --> 00:02:36.279
+progress really kind of slowed down. Another issue with it
+
+00:02:36.280 --> 00:02:38.839
+was, is that they were doing a one-to-one rewrite, so they
+
+00:02:38.840 --> 00:02:41.079
+weren't adding any new features or functionality, just
+
+00:02:41.080 --> 00:02:43.879
+taking the same code and replacing it in Rust, which doesn't
+
+00:02:43.880 --> 00:02:46.801
+add any advantages in and of itself.
+
+00:02:46.802 --> 00:02:50.399
+This spawned Emacs-NG, which was kind of the spiritual successor to
+
+00:02:50.400 --> 00:02:52.746
+Remacs, where they decided to add new functionality,
+
+00:02:52.747 --> 00:02:55.808
+the biggest one being a JavaScript runtime,
+
+00:02:55.809 --> 00:02:58.230
+as well as some new renderers to Emacs.
+
+00:02:58.231 --> 00:03:01.314
+This is no longer actively developed though.
+
+NOTE Multi-threading
+
+00:03:01.315 --> 00:03:04.079
+In this project, one of the big focuses we have is
+
+00:03:04.080 --> 00:03:07.559
+on multi-threading. The C core itself is, everything is
+
+00:03:07.560 --> 00:03:09.959
+designed around being single-threaded, all the data
+
+00:03:09.960 --> 00:03:13.039
+structures and everything like that. Rust has a great
+
+00:03:13.040 --> 00:03:15.719
+concurrency story. In Rust, everything is intended to be
+
+00:03:15.720 --> 00:03:18.199
+multi-threaded. That doesn't mean that everything has to
+
+00:03:18.200 --> 00:03:20.719
+run on multiple threads, but you can't write something that
+
+00:03:20.720 --> 00:03:22.719
+is limited to only running in a single-threaded
+
+00:03:22.720 --> 00:03:25.799
+environment. So this makes it really easy to use all the
+
+00:03:25.800 --> 00:03:28.039
+existing packages and build something that is
+
+00:03:28.040 --> 00:03:30.480
+concurrency safe. which is what we've done here,
+
+00:03:30.481 --> 00:03:32.440
+and that was relatively easy to do.
+
+NOTE Multi-threading elisp
+
+00:03:32.441 --> 00:03:34.781
+But adding it to Elisp is the hard part,
+
+00:03:34.782 --> 00:03:36.502
+because we've got to come up with a good model
+
+00:03:36.503 --> 00:03:39.624
+for Lisp, and Elisp is just a giant ball
+
+00:03:39.625 --> 00:03:41.479
+of mutable state. We need to find some
+
+00:03:41.480 --> 00:03:44.566
+way to tame that so we can make workable concurrency
+
+00:03:44.567 --> 00:03:47.647
+out of it. There's really two ways you can do this.
+
+NOTE No-GIL method
+
+00:03:47.648 --> 00:03:49.268
+One is what I call the no-GIL method.
+
+00:03:49.269 --> 00:03:51.399
+This is what Python is doing, where
+
+00:03:51.400 --> 00:03:53.919
+you take all of your data structures, you make them
+
+00:03:53.920 --> 00:03:56.439
+concurrency safe, and then you just leave it up to the
+
+00:03:56.440 --> 00:03:58.119
+programmer to decide what they're going to do with it.
+
+00:03:58.120 --> 00:04:00.467
+They've got to build safe abstractions on top of that.
+
+00:04:00.468 --> 00:04:03.086
+One of the big downsides with this is that
+
+00:04:03.087 --> 00:04:05.247
+it comes with a pretty high cost.
+
+00:04:05.248 --> 00:04:07.799
+The last benchmarks I've seen is that by making
+
+00:04:07.800 --> 00:04:10.879
+everything concurrency safe in Python, single-threaded
+
+00:04:10.880 --> 00:04:15.799
+code is about 20% slower in some benchmarks.
+
+00:04:15.800 --> 00:04:19.079
+Since most code is single-threaded, this has a big
+
+00:04:19.080 --> 00:04:21.039
+performance impact for most code that isn't taking
+
+00:04:21.040 --> 00:04:23.719
+advantage of the multi-threading. The other thing is this
+
+00:04:23.720 --> 00:04:26.279
+introduces a lot of nasty concurrency bugs because you can
+
+00:04:26.280 --> 00:04:29.039
+have anything mutating any part of the data from any thread,
+
+00:04:29.040 --> 00:04:32.637
+even if you can't have memory unsafety per se.
+
+NOTE Actors
+
+00:04:32.638 --> 00:04:34.738
+The other option is actors,
+
+00:04:34.739 --> 00:04:36.639
+which are a really known way to approach this,
+
+00:04:36.640 --> 00:04:39.079
+where you trade some of that flexibility that you get
+
+00:04:39.080 --> 00:04:43.719
+with fully concurrent for more control and. Code and
+
+00:04:43.720 --> 00:04:45.839
+functions are shared between all the different threads,
+
+00:04:45.840 --> 00:04:50.599
+but data has to be passed along channels between different
+
+00:04:50.600 --> 00:04:51.251
+actors.
+
+NOTE Multi-threading elisp (functions)
+
+00:04:51.252 --> 00:04:52.919
+We want the functions to be shared, and this
+
+00:04:52.920 --> 00:04:55.159
+should be pretty easy because we don't mutate functions
+
+00:04:55.160 --> 00:05:00.119
+like we do data, except when we do. In Lisp, functions are
+
+00:05:00.120 --> 00:05:03.239
+just lists like anything else. So you can mutate them
+
+00:05:03.240 --> 00:05:06.279
+just like lists. Even if you're not talking about
+
+00:05:06.280 --> 00:05:09.159
+interpreted code, like if you have a native compiled
+
+00:05:09.160 --> 00:05:11.959
+function, you can still mutate the constants inside the
+
+00:05:11.960 --> 00:05:14.839
+function. For example, here we have a function returns a
+
+00:05:14.840 --> 00:05:17.679
+string. We take that string out, we mutate that string, and
+
+00:05:17.680 --> 00:05:23.079
+now the function returns a different string. In Rune, we
+
+00:05:23.080 --> 00:05:24.999
+enforce that all functions, their constants are
+
+00:05:25.000 --> 00:05:27.199
+immutable. You can't mutate the insides of a function. You
+
+00:05:27.200 --> 00:05:29.239
+can still swap out functions and redefine them, but you
+
+00:05:29.240 --> 00:05:32.239
+can't mutate the inside of a function. This enables them
+
+00:05:32.240 --> 00:05:34.679
+to be safely shared across threads.
+
+NOTE Caveats
+
+00:05:34.680 --> 00:05:36.400
+However, there are some caveats to this.
+
+00:05:36.401 --> 00:05:38.159
+For example, some functions actually do
+
+00:05:38.160 --> 00:05:41.439
+need to mutate their own data. The example that we run into is
+
+00:05:41.440 --> 00:05:44.839
+cl-generic. It uses a method cache. So it has to be able to
+
+00:05:44.840 --> 00:05:47.639
+update that cache. In this case, we just made a special
+
+00:05:47.640 --> 00:05:50.799
+case for this particular situation, but we don't know what
+
+00:05:50.800 --> 00:05:53.159
+more of these we're gonna run into the future where this is
+
+00:05:53.160 --> 00:05:57.089
+needed behavior to be able to mutate a function.
+
+NOTE Multi-threading elisp (data)
+
+00:05:57.090 --> 00:05:59.810
+Okay, so functions are pretty easy.
+
+00:05:59.811 --> 00:06:00.919
+They just can be shared between
+
+00:06:00.920 --> 00:06:05.159
+threads, but data can't be immutable, at least not into the
+
+00:06:05.160 --> 00:06:08.759
+model that Emacs currently has. We have two different
+
+00:06:08.760 --> 00:06:12.039
+ways to handle this. One is we require whenever you're
+
+00:06:12.040 --> 00:06:14.399
+calling some other code in a different thread, you have to
+
+00:06:14.400 --> 00:06:17.039
+send all the variables that it's going to need over to that
+
+00:06:17.040 --> 00:06:19.159
+thread. This is how you traditionally do inside actors.
+
+00:06:19.160 --> 00:06:21.919
+Any data that needs to go to a different actor needs to be sent
+
+00:06:21.920 --> 00:06:25.519
+over a channel. It's relatively easy implementation, but
+
+00:06:25.520 --> 00:06:28.159
+this is difficult in the Emacs case because everything is
+
+00:06:28.160 --> 00:06:30.799
+going to be accessing different variables. That means
+
+00:06:30.800 --> 00:06:33.119
+when you call something, you have to know ahead of time, all
+
+00:06:33.120 --> 00:06:34.879
+the different variables that are gonna be accessed inside
+
+00:06:34.880 --> 00:06:38.248
+that other thread and put those in when you call it.
+
+NOTE Copy values to other threads on demands
+
+00:06:38.249 --> 00:06:40.959
+The other option we're using is we're copying values to the
+
+00:06:40.960 --> 00:06:43.439
+other threads on demand. If you're running a thread, it
+
+00:06:43.440 --> 00:06:45.759
+tries to look up a variable. It doesn't have any value for
+
+00:06:45.760 --> 00:06:48.759
+that variable. It will go back and ask the main thread and it
+
+00:06:48.760 --> 00:06:50.959
+will copy that value into that thread and it can continue
+
+00:06:50.960 --> 00:06:53.399
+execution. This is nice because you can just launch some
+
+00:06:53.400 --> 00:06:55.639
+code and it'll take care of handling all the data transfer
+
+00:06:55.640 --> 00:06:57.883
+for you.
+
+NOTE Multi-threading elisp (buffers)
+
+00:06:57.884 --> 00:07:00.359
+But we don't want to be copying around is buffers,
+
+00:07:00.360 --> 00:07:04.199
+because they can be really large. In this case, we have a
+
+00:07:04.200 --> 00:07:07.599
+mutex. Each thread could only have one current buffer that
+
+00:07:07.600 --> 00:07:12.279
+it has an exclusive lock to. This comes with some
+
+00:07:12.280 --> 00:07:16.079
+trade-offs, big one being that if the user tries to access
+
+00:07:16.080 --> 00:07:18.359
+some buffer, they want to type something, and a background
+
+00:07:18.360 --> 00:07:20.239
+thread is holding onto that buffer, what do we do in that
+
+00:07:20.240 --> 00:07:24.959
+situation? And we still need to hold an exclusive lock, even
+
+00:07:24.960 --> 00:07:26.359
+if we're only going to read a buffer. If you have multiple
+
+00:07:26.360 --> 00:07:29.159
+readers, they each still need to take turns because we can't
+
+00:07:29.160 --> 00:07:30.999
+determine if at some point a thread is going to try and mutate
+
+00:07:31.000 --> 00:07:33.879
+the buffer. It has to be an exclusive lock. The other issue
+
+00:07:33.880 --> 00:07:37.799
+is buffer-locals. This is less of a implementation issue
+
+00:07:37.800 --> 00:07:40.519
+as much as it is a technical issue. Because you think about
+
+00:07:40.520 --> 00:07:42.759
+when we switch to a buffer, it has some buffer-local data and
+
+00:07:42.760 --> 00:07:45.399
+we have some thread-local data. As we go through, we're
+
+00:07:45.400 --> 00:07:47.599
+mutating everything. Those can get intertwined and
+
+00:07:47.600 --> 00:07:49.719
+pointing to each other. Then we switch away from that
+
+00:07:49.720 --> 00:07:51.679
+buffer. We need some quick way to be able to separate those
+
+00:07:51.680 --> 00:07:54.279
+out. The buffer-locals can go with the buffer-locals and
+
+00:07:54.280 --> 00:07:56.439
+the thread data can stay with thread data and make copies of
+
+00:07:56.440 --> 00:07:58.719
+anything that was pointing to the other side. But we don't
+
+00:07:58.720 --> 00:08:02.839
+have a good method to determine how to separate those two,
+
+00:08:02.840 --> 00:08:05.359
+like what data belongs to this and what data belongs to this,
+
+00:08:05.360 --> 00:08:08.199
+so that we can do that quickly. We haven't found a good
+
+00:08:08.200 --> 00:08:09.599
+solution to that yet, but it's something we're still
+
+00:08:09.600 --> 00:08:11.902
+working on.
+
+NOTE Would this actually be useful?
+
+00:08:11.903 --> 00:08:13.079
+The question is, would this actually be
+
+00:08:13.080 --> 00:08:15.959
+useful for doing real work inside Emacs? I would say,
+
+00:08:15.960 --> 00:08:17.959
+yes, there's a lot of things you can do with this. You could
+
+00:08:17.960 --> 00:08:20.239
+handle process output in the background. You can do syntax
+
+00:08:20.240 --> 00:08:23.479
+highlighting. You can do buffer search in parallel. You can
+
+00:08:23.480 --> 00:08:26.679
+do LSP. You can do fetching your mail in the background. You
+
+00:08:26.680 --> 00:08:29.639
+can have a window manager that doesn't block your window
+
+00:08:29.640 --> 00:08:32.319
+manager when Emacs is blocked. You could do
+
+00:08:32.320 --> 00:08:34.479
+something like a file system watcher that keeps up on files
+
+00:08:34.480 --> 00:08:37.559
+without blocking Emacs. This wouldn't be so great for
+
+00:08:37.560 --> 00:08:39.159
+building concurrent data structures or operating on
+
+00:08:39.160 --> 00:08:42.199
+shared data or building your own abstractions, because of the
+
+00:08:42.200 --> 00:08:46.039
+trade-offs that we've made here. Okay. That's talking
+
+00:08:46.040 --> 00:08:46.918
+about multi-threading.
+
+NOTE Precise garbage collection
+
+00:08:46.919 --> 00:08:47.599
+The other thing we're going to talk
+
+00:08:47.600 --> 00:08:51.319
+about is precise garbage collection. In Rune, we have a
+
+00:08:51.320 --> 00:08:54.439
+safe, precise garbage collection because of the Rust type
+
+00:08:54.440 --> 00:08:58.119
+system. Let's look at what the problem is with garbage
+
+00:08:58.120 --> 00:09:00.479
+collection in the first place. Really, the tricky part
+
+00:09:00.480 --> 00:09:03.719
+about garbage collection is rooting. How do we find out what
+
+00:09:03.720 --> 00:09:06.159
+the roots are? These are all the values that are on the
+
+00:09:06.160 --> 00:09:08.679
+stack or inside the registers. In this example here, we
+
+00:09:08.680 --> 00:09:11.919
+allocate an object. We call garbage_collect, that object's
+
+00:09:11.920 --> 00:09:13.536
+collected, and then we try and return it.
+
+00:09:13.537 --> 00:09:16.536
+It's no longer valid.
+
+NOTE How Emacs used to deal with roots
+
+00:09:16.537 --> 00:09:19.039
+Let's look at how Emacs used to deal with this
+
+00:09:19.040 --> 00:09:22.559
+problem way back in the day. There was a system called gcpro
+
+00:09:22.560 --> 00:09:26.319
+or GC Protect, which is basically designed that every time a
+
+00:09:26.320 --> 00:09:28.919
+value needed to survive past a garbage collection point,
+
+00:09:28.920 --> 00:09:32.359
+you had to try and protect it. In order to do this, you had
+
+00:09:32.360 --> 00:09:35.439
+to declare a struct, you had to put a macro around it to root
+
+00:09:35.440 --> 00:09:37.999
+the object, and then you had to unroot it when you were done--
+
+00:09:38.000 --> 00:09:41.559
+past the garbage collection. Now the value is safe. You
+
+00:09:41.560 --> 00:09:44.039
+can see down here, I pulled these eight rules out from a
+
+00:09:44.040 --> 00:09:46.919
+really old version of the Emacs manual about all the things
+
+00:09:46.920 --> 00:09:49.279
+you had to keep track of when you were trying to use this
+
+00:09:49.280 --> 00:09:52.319
+system. All right, so there was a special handling for
+
+00:09:52.320 --> 00:09:54.639
+nested GC protects. You had to make sure the memory was
+
+00:09:54.640 --> 00:09:58.239
+initialized. You had to make sure that traps couldn't occur
+
+00:09:58.240 --> 00:10:00.839
+between allocating and when GC protect would happen. It
+
+00:10:00.840 --> 00:10:03.319
+can be tricky because you don't always know when a function
+
+00:10:03.320 --> 00:10:06.879
+that's getting called could potentially call garbage
+
+00:10:06.880 --> 00:10:10.719
+collection. So if you got something wrong, you also
+
+00:10:10.720 --> 00:10:12.719
+might not catch it for a long time because garbage
+
+00:10:12.720 --> 00:10:15.719
+collection may only get called one out of 99 times. The other
+
+00:10:15.720 --> 00:10:18.999
+99 times is just fine. That one time it happens and you
+
+00:10:19.000 --> 00:10:22.559
+can't reproduce the issue. When you do get this wrong and
+
+00:10:22.560 --> 00:10:24.439
+some, something doesn't get rooted and it gets
+
+00:10:24.440 --> 00:10:26.319
+overwritten, it generally doesn't show up right where the
+
+00:10:26.320 --> 00:10:28.799
+problem is. It gets showed up way later when you actually try
+
+00:10:28.800 --> 00:10:31.479
+and access the value and the value is invalid. You've got
+
+00:10:31.480 --> 00:10:33.639
+to track it back to where that thing did not get properly
+
+00:10:33.640 --> 00:10:37.359
+rooted. It's a huge source of bugs and very hard to
+
+00:10:37.360 --> 00:10:38.712
+maintain.
+
+NOTE Conservative stack scanning
+
+00:10:38.713 --> 00:10:40.119
+Emacs decided to go with a different path,
+
+00:10:40.120 --> 00:10:42.399
+which we call conservative stack scanning. Basically,
+
+00:10:42.400 --> 00:10:45.239
+the garbage collector just looks at the stack and all the
+
+00:10:45.240 --> 00:10:47.959
+registers and any data inside there that looks like it could
+
+00:10:47.960 --> 00:10:52.279
+be a pointer, it treats it as a pointer. This is nice because
+
+00:10:52.280 --> 00:10:54.711
+you get really easy root tracking,
+
+00:10:54.712 --> 00:10:56.113
+but it also comes with some trade-offs,
+
+00:10:56.114 --> 00:11:00.156
+mostly that your objects are no longer movable.
+
+NOTE Movable objects
+
+00:11:00.157 --> 00:11:03.079
+Why would we want movable objects in Emacs?
+
+00:11:03.080 --> 00:11:05.839
+There's a couple of different reasons. One is compaction.
+
+00:11:05.840 --> 00:11:08.199
+You can take all your heap, you can pack that on down because
+
+00:11:08.200 --> 00:11:11.239
+you can coalesce all your objects together. Another is that
+
+00:11:11.240 --> 00:11:13.239
+it's easy to implement generational garbage collection.
+
+00:11:13.240 --> 00:11:16.039
+You can just copy everything out of your minor heap into your
+
+00:11:16.040 --> 00:11:21.839
+older heap. Really, Emacs is kind of uniquely ideal for
+
+00:11:21.840 --> 00:11:24.279
+generational collection, because the typical way we
+
+00:11:24.280 --> 00:11:27.799
+interact with Emacs is as a series of commands. You execute
+
+00:11:27.800 --> 00:11:29.959
+some command, you'd execute the next command, you execute
+
+00:11:29.960 --> 00:11:33.199
+a command. It could be happening every key press, it could be
+
+00:11:33.200 --> 00:11:36.759
+happening with M-x. However long that command is, that is
+
+00:11:36.760 --> 00:11:40.959
+the ideal length for the minor collection generation, the
+
+00:11:40.960 --> 00:11:43.399
+first generation. Because once you're done with that
+
+00:11:43.400 --> 00:11:45.879
+generation, anything that's still existing is going to be
+
+00:11:45.880 --> 00:11:49.079
+around for a very long time. So that works out really well
+
+00:11:49.080 --> 00:11:52.279
+for Emacs. We want to make this a generational collector.
+
+00:11:52.280 --> 00:11:56.199
+The other thing is with object layout. We use a lot of lists
+
+00:11:56.200 --> 00:12:00.559
+inside Emacs Lisp. Every time you go to the cdr, you've
+
+00:12:00.560 --> 00:12:03.039
+got to be chasing a pointer around the heap and following
+
+00:12:03.040 --> 00:12:05.439
+that. That can potentially result in cache misses and
+
+00:12:05.440 --> 00:12:08.239
+all sorts of other things like that. So it can take a long
+
+00:12:08.240 --> 00:12:12.159
+time. It can be quite slow. But if you have the ability to move
+
+00:12:12.160 --> 00:12:16.559
+objects, you can just relocate an entire list and lay it out
+
+00:12:16.560 --> 00:12:19.168
+in an array right next to each other inside memory.
+
+00:12:19.169 --> 00:12:22.479
+So iterating over it is just as fast as iterating over an array.
+
+00:12:22.480 --> 00:12:25.421
+But you can only do that if you have movable objects.
+
+00:12:25.422 --> 00:12:28.399
+I'll point out here too, that with conservative stack scanning,
+
+00:12:28.400 --> 00:12:31.599
+it's not that all objects are immovable. It's only ones that
+
+00:12:31.600 --> 00:12:35.519
+are pointed to from the stack or from the registers that have
+
+00:12:35.520 --> 00:12:38.828
+to become immovable.
+
+NOTE How Rust makes precise GC easy
+
+00:12:38.829 --> 00:12:41.039
+Let's look at how Rust makes precise
+
+00:12:41.040 --> 00:12:44.439
+garbage collection easy. Here I have some Rust code to
+
+00:12:44.440 --> 00:12:47.279
+show kind of how the lifetime system works and what we call
+
+00:12:47.280 --> 00:12:49.879
+XOR mutability, where we can only have one mutable
+
+00:12:49.880 --> 00:12:52.879
+reference or multiple immutable references to the same
+
+00:12:52.880 --> 00:12:56.199
+thing. Here we declare a vector, we take a reference to the
+
+00:12:56.200 --> 00:12:59.199
+first element of the vector, and then we mutate the vector.
+
+00:12:59.200 --> 00:13:02.239
+Now this could potentially resize the vector and move it to a
+
+00:13:02.240 --> 00:13:04.919
+different location in memory, so that reference is no
+
+00:13:04.920 --> 00:13:07.759
+longer valid. The nice thing is, Rust catches this for
+
+00:13:07.760 --> 00:13:10.479
+us. It says, hey, this is no longer valid. This reference
+
+00:13:10.480 --> 00:13:14.519
+can't survive past when you mutated it. Okay? That's
+
+00:13:14.520 --> 00:13:17.559
+exactly what we want for a garbage collector. You can see
+
+00:13:17.560 --> 00:13:19.879
+here, we take this in a garbage collection context, we
+
+00:13:19.880 --> 00:13:23.359
+create a new context object, we add an object, we call
+
+00:13:23.360 --> 00:13:26.759
+garbage_collect, then we try and access that object. It's no
+
+00:13:26.760 --> 00:13:29.199
+longer accessible, and Rust will prevent us from trying to
+
+00:13:29.200 --> 00:13:34.839
+access that variable. So, how do we solve this? We have a
+
+00:13:34.840 --> 00:13:39.759
+root macro. We declared this root macro, it lets us take the
+
+00:13:39.760 --> 00:13:41.759
+object and let it live past garbage collection, and
+
+00:13:41.760 --> 00:13:45.319
+everything works out. The nice thing is, this root macro
+
+00:13:45.320 --> 00:13:47.799
+will get dropped when it's out of scope, so we don't have to
+
+00:13:47.800 --> 00:13:51.519
+worry about the un-gc-protect step of this. Statically,
+
+00:13:51.520 --> 00:13:55.799
+Rust will verify and tell us any object that needs to be
+
+00:13:55.800 --> 00:13:58.279
+rooted. If we try and access it, it'll tell us it's invalid.
+
+00:13:58.280 --> 00:14:00.999
+We have this root macro and then we can access it. So in
+
+00:14:01.000 --> 00:14:03.759
+that way, we have safe, precise garbage collection without
+
+00:14:03.760 --> 00:14:07.479
+any chance of introducing undefined behavior, which is
+
+00:14:07.480 --> 00:14:09.999
+really, really powerful. It's really easy because the
+
+00:14:10.000 --> 00:14:13.226
+type system will catch it all for us.
+
+NOTE Other Rust niceties: proc macro
+
+00:14:13.227 --> 00:14:15.147
+There's some other Rust niceties I want to kind of
+
+00:14:15.148 --> 00:14:16.799
+talk through that are useful, but
+
+00:14:16.800 --> 00:14:21.079
+are not, you know, star features. One is proc macros. You
+
+00:14:21.080 --> 00:14:23.679
+can see up on the top, you can see how you declare a function
+
+00:14:23.680 --> 00:14:27.359
+inside the C core. All right. You have to use the macro. You
+
+00:14:27.360 --> 00:14:29.141
+have to put the list type, the function type,
+
+00:14:29.142 --> 00:14:30.963
+the struct type, the different types of arguments
+
+00:14:30.964 --> 00:14:33.225
+or different number of arguments, the doc string,
+
+00:14:33.226 --> 00:14:36.023
+and then you can put your argument listing down inside there.
+
+00:14:36.024 --> 00:14:37.984
+On the Rust side, we just write this like we would
+
+00:14:37.985 --> 00:14:40.044
+any other Rust function. And then we put
+
+00:14:40.045 --> 00:14:41.285
+the defun proc macro on there
+
+00:14:41.286 --> 00:14:44.186
+and it takes care of everything for us behind the scenes.
+
+00:14:44.187 --> 00:14:46.407
+A couple of cool additional things we can do with this
+
+00:14:46.408 --> 00:14:48.727
+is that we don't have to make everything just an object.
+
+00:14:48.728 --> 00:14:49.759
+We can actually make things
+
+00:14:49.760 --> 00:14:54.239
+more specific types. Here we have symbols. As well as
+
+00:14:54.240 --> 00:14:56.279
+you can see subfeature, it's an optional parameter, and we
+
+00:14:56.280 --> 00:15:00.919
+just make it an option inside Rust and it automatically make
+
+00:15:00.920 --> 00:15:03.599
+it an optional inside Elisp.
+
+00:15:03.600 --> 00:15:05.181
+This makes them really easy to write.
+
+00:15:05.182 --> 00:15:06.439
+I can't take credit for this is because this is
+
+00:15:06.440 --> 00:15:09.119
+something that I saw inside Remacs and I stole from them, but
+
+00:15:09.120 --> 00:15:11.439
+it makes the functions really easy to call from each other
+
+00:15:11.440 --> 00:15:14.559
+and really easy to write as well.
+
+NOTE sum types
+
+00:15:14.560 --> 00:15:18.523
+Another thing that's really nice is sum types.
+
+00:15:18.524 --> 00:15:21.039
+In the C core, if I wanted to get a
+
+00:15:21.040 --> 00:15:23.759
+string out of an object, I would first need to check that it's
+
+00:15:23.760 --> 00:15:28.319
+a string and then dereference it as a string. But if it's not a
+
+00:15:28.320 --> 00:15:30.679
+string, I may introduce undefined behavior. So in
+
+00:15:30.680 --> 00:15:32.799
+complicated code, I have to make sure that I have always
+
+00:15:32.800 --> 00:15:34.959
+checked what type it is before I try and dereference that
+
+00:15:34.960 --> 00:15:37.879
+type. We don't have to worry about any of that inside Rust
+
+00:15:37.880 --> 00:15:41.319
+because we can untag a value and we can use their some types,
+
+00:15:41.320 --> 00:15:44.399
+basically create an enum and we can match on what the
+
+00:15:44.400 --> 00:15:47.639
+different values can be. Then we only get out the types
+
+00:15:47.640 --> 00:15:50.359
+that are viable or are actually there. So we never
+
+00:15:50.360 --> 00:15:52.159
+accidentally get something out of an object that we didn't
+
+00:15:52.160 --> 00:15:54.239
+mean to, or dereference it as something that doesn't
+
+00:15:54.240 --> 00:15:56.879
+really exist. We can just match on it and we can get out the
+
+00:15:56.880 --> 00:16:01.040
+values that we need, which is really, really powerful.
+
+NOTE Regex
+
+00:16:01.041 --> 00:16:03.639
+So there's some other Rust niceties as well working with here.
+
+00:16:03.640 --> 00:16:07.799
+One is the regex engine inside Rust is really fast, high
+
+00:16:07.800 --> 00:16:10.959
+performance. We are using that for the Elixir regex
+
+00:16:10.960 --> 00:16:14.879
+engine to give it high performance and worst-case
+
+00:16:14.880 --> 00:16:16.051
+guarantees.
+
+NOTE Parsers
+
+00:16:16.052 --> 00:16:18.599
+The other is that Rust has a lot of really good
+
+00:16:18.600 --> 00:16:21.559
+parsers for things like JSON that are no copy parsers that
+
+00:16:21.560 --> 00:16:24.719
+are high performance. We can use those inside Rune as
+
+00:16:24.720 --> 00:16:27.209
+well.
+
+NOTE Other changes: GUI first, terminal second
+
+00:16:27.210 --> 00:16:29.439
+There's a handful of other changes we're working on
+
+00:16:29.440 --> 00:16:33.119
+that are not Rust-specific, but we'd like to see. The first is
+
+00:16:33.120 --> 00:16:36.759
+being GUI first, terminal second. This means two things.
+
+00:16:36.760 --> 00:16:40.039
+First is that we have all of our key bindings. Right now
+
+00:16:40.040 --> 00:16:43.279
+inside Emacs, C-i and TAB are bound to the same key
+
+00:16:43.280 --> 00:16:45.039
+binding by default, because that's how it works inside the
+
+00:16:45.040 --> 00:16:48.119
+terminal. In the GUI, you shouldn't have that limitation.
+
+00:16:48.120 --> 00:16:52.559
+The second is that the GUI should not block when Lisp is
+
+00:16:52.560 --> 00:16:55.199
+blocked. It should be independent of that. Your GUI can
+
+00:16:55.200 --> 00:16:58.918
+still continue to operate when Lisp is running.
+
+NOTE Off-screen cursor
+
+00:16:58.919 --> 00:17:01.279
+The other is the ability to have an off-screen cursor
+
+00:17:01.280 --> 00:17:02.699
+so that you can be typing on something,
+
+00:17:02.700 --> 00:17:04.319
+you can scroll up and down and the point
+
+00:17:04.320 --> 00:17:06.719
+doesn't have to follow you where you lose your place where
+
+00:17:06.720 --> 00:17:09.399
+you were before. You don't have to intentionally set a mark.
+
+00:17:09.400 --> 00:17:11.199
+You can just scroll and then start typing and it'll go back up
+
+00:17:11.200 --> 00:17:13.879
+to where it was before, like it works in most applications.
+
+00:17:13.880 --> 00:17:16.304
+And this can be optional.
+
+NOTE Image flow
+
+00:17:16.305 --> 00:17:18.079
+The other is image flow. We want it
+
+00:17:18.080 --> 00:17:20.879
+so that you can easily flow images and you can have large
+
+00:17:20.880 --> 00:17:23.159
+images and scroll past them without jumping and you can flow
+
+00:17:23.160 --> 00:17:24.439
+text around images.
+
+NOTE Testing
+
+00:17:24.440 --> 00:17:29.799
+How are we testing this project? Because there's a lot of
+
+00:17:29.800 --> 00:17:33.159
+things that you could get wrong here. One thing we're doing
+
+00:17:33.160 --> 00:17:38.039
+is we're using ERT. Emacs ships with over 7,000 built-in
+
+00:17:38.040 --> 00:17:42.879
+tests--Elisp tests. We are using this test suite to test
+
+00:17:42.880 --> 00:17:45.079
+our project as well. We can kind of use this as a dashboard
+
+00:17:45.080 --> 00:17:47.679
+of saying how close are we to getting to parity with GNU
+
+00:17:47.680 --> 00:17:52.319
+Emacs. The other thing that we have is a tool called elprop,
+
+00:17:52.320 --> 00:17:55.279
+which is an external utility that basically tests for
+
+00:17:55.280 --> 00:17:58.719
+correctness. Because really, the correctness of Rune is
+
+00:17:58.720 --> 00:18:00.999
+whatever Emacs does, because there's no official spec on
+
+00:18:01.000 --> 00:18:04.079
+how things should behave. To do this, we can go look at
+
+00:18:04.080 --> 00:18:07.159
+the Rust function signature. We know what the arguments
+
+00:18:07.160 --> 00:18:09.319
+are, we know how many they are, and we know what types they
+
+00:18:09.320 --> 00:18:11.679
+should be. Given that information, we can generate a
+
+00:18:11.680 --> 00:18:15.279
+whole bunch of random functions feeding those types in. And
+
+00:18:15.280 --> 00:18:18.959
+then we send a copy over to Emacs, we send a copy over to Rune.
+
+00:18:18.960 --> 00:18:21.679
+They each evaluate it and they return the result and we make
+
+00:18:21.680 --> 00:18:23.519
+sure the results are the same. Then you do that for
+
+00:18:23.520 --> 00:18:26.199
+thousands of different implementations of the function.
+
+00:18:26.200 --> 00:18:29.039
+And it helps us find corner cases really easy without having
+
+00:18:29.040 --> 00:18:31.639
+to handwrite a whole bunch of different cases to test things
+
+00:18:31.640 --> 00:18:36.344
+and say, where are these two functions different?
+
+NOTE Status
+
+00:18:36.345 --> 00:18:39.359
+So the current status: we already have a multi-threaded Elixir
+
+00:18:39.360 --> 00:18:42.999
+interpreter and bytecode engine inside there. There's no
+
+00:18:43.000 --> 00:18:45.679
+actual text editor in there yet, but the primitives are
+
+00:18:45.680 --> 00:18:48.679
+there. Like you can insert text, move point around,
+
+00:18:48.680 --> 00:18:52.039
+delete text, do different things like that. But we don't
+
+00:18:52.040 --> 00:18:53.679
+have a GUI hooked up to different key bindings to actually
+
+00:18:53.680 --> 00:18:58.159
+type on. There's just a REPL to operate in. We have about
+
+00:18:58.160 --> 00:19:01.279
+250 of the 1500 built-in functions already implemented
+
+00:19:01.280 --> 00:19:04.119
+inside there. There's a lot of low-hanging fruit inside this
+
+00:19:04.120 --> 00:19:07.246
+area to still be implemented.
+
+NOTE Next directions
+
+00:19:07.247 --> 00:19:07.719
+The next directions we're
+
+00:19:07.720 --> 00:19:11.959
+working on is we're optimizing the GC. We want to make it
+
+00:19:11.960 --> 00:19:13.839
+generational. Like I said, right now, it's just a simple
+
+00:19:13.840 --> 00:19:17.359
+semi-spaced copying GC. We want to add a proper GUI. We need
+
+00:19:17.360 --> 00:19:19.599
+to implement text properties, overlays, process and job
+
+00:19:19.600 --> 00:19:22.738
+control, all that goodness right there.
+
+NOTE How to get involved
+
+00:19:22.739 --> 00:19:25.378
+How can you get involved? This is hosted on GitHub.
+
+00:19:25.379 --> 00:19:26.424
+You can come on over.
+
+00:19:26.425 --> 00:19:28.639
+If you have any ideas about how to implement something or
+
+00:19:28.640 --> 00:19:30.639
+something you'd like to see done, go ahead and just open an
+
+00:19:30.640 --> 00:19:32.799
+issue so we can have a discussion about it. We've had lots of
+
+00:19:32.800 --> 00:19:34.599
+interesting discussions with different people coming in
+
+00:19:34.600 --> 00:19:37.639
+to the GitHub repo. If you're interested in contributing,
+
+00:19:37.640 --> 00:19:40.439
+the easiest way is probably to run elprop, pick some
+
+00:19:40.440 --> 00:19:43.279
+function, run elprop on it. I promise it won't take long to
+
+00:19:43.280 --> 00:19:45.639
+find some issues, some discrepancy between Emacs and Rune,
+
+00:19:45.640 --> 00:19:48.959
+and that lets you dive into the Rust code and figure out, and
+
+00:19:48.960 --> 00:19:50.879
+the C code, and figure out what the difference is between the
+
+00:19:50.880 --> 00:19:53.119
+two. or come along and help implement your favorite
+
+00:19:53.120 --> 00:19:55.679
+functionality. This has been a really interesting project
+
+00:19:55.680 --> 00:19:58.359
+so far, and we've had a handful of different contributors on
+
+00:19:58.360 --> 00:20:01.799
+it who just kind of want to learn Rust or get more into
+
+00:20:01.800 --> 00:20:06.000
+systems-level programming. Thank you.
diff --git a/2024/captions/emacsconf-2024-sat-open--saturday-opening-remarks--main--chapters.vtt b/2024/captions/emacsconf-2024-sat-open--saturday-opening-remarks--main--chapters.vtt
new file mode 100644
index 00000000..b75132d7
--- /dev/null
+++ b/2024/captions/emacsconf-2024-sat-open--saturday-opening-remarks--main--chapters.vtt
@@ -0,0 +1,35 @@
+WEBVTT
+
+
+00:00:00.007 --> 00:00:06.125
+General and Development tracks
+
+00:00:06.126 --> 00:00:59.965
+Watching and participating
+
+00:00:59.966 --> 00:02:30.001
+Questions and answers
+
+00:02:30.002 --> 00:03:02.056
+Etherpad
+
+00:03:02.057 --> 00:03:46.229
+Internet Relay Chat
+
+00:03:46.230 --> 00:04:07.334
+Open captions
+
+00:04:07.335 --> 00:04:18.928
+Status
+
+00:04:18.929 --> 00:04:26.423
+Conduct
+
+00:04:26.424 --> 00:04:37.332
+Recordings
+
+00:04:37.333 --> 00:04:42.248
+emacsconf-discuss updates
+
+00:04:42.249 --> 00:04:59.991
+Let's go!
diff --git a/2024/captions/emacsconf-2024-sat-open--saturday-opening-remarks--main.vtt b/2024/captions/emacsconf-2024-sat-open--saturday-opening-remarks--main.vtt
new file mode 100644
index 00000000..b7e47d82
--- /dev/null
+++ b/2024/captions/emacsconf-2024-sat-open--saturday-opening-remarks--main.vtt
@@ -0,0 +1,367 @@
+WEBVTT
+
+00:00.007 --> 00:03.484
+Welcome to EmacsConf 2024, where we have fun
+
+00:03.485 --> 00:06.125
+exploring how much we can do with a text editor.
+
+00:06.126 --> 00:08.161
+It's hard to give a general overview
+
+00:08.162 --> 00:10.039
+of all the cool talks today and tomorrow,
+
+00:10.040 --> 00:11.237
+so you can flip through the talks
+
+00:11.238 --> 00:12.902
+and see what sparks your interests.
+
+00:12.903 --> 00:15.334
+Don't feel limited to one track or another.
+
+00:15.335 --> 00:18.492
+The best parts of EmacsConf are the conversations.
+
+00:18.493 --> 00:21.290
+The wiki has a page on how to watch and participate,
+
+00:21.291 --> 00:23.688
+and I'll give you a quick overview as well.
+
+00:23.689 --> 00:26.886
+You can watch both streams at live.emacsconf.org
+
+00:26.887 --> 00:29.364
+using free and open source software.
+
+00:29.365 --> 00:31.442
+Using a streaming media player like mpv
+
+00:31.443 --> 00:34.640
+seems to be the best way to watch in terms of performance
+
+00:34.641 --> 00:36.359
+but there are also web-based players
+
+00:36.360 --> 00:37.917
+just in case that's all you've got.
+
+00:37.918 --> 00:39.915
+The schedule shows the General track on top
+
+00:39.916 --> 00:41.533
+and the Development track on the bottom,
+
+00:41.534 --> 00:43.631
+so you can see what else is going on.
+
+00:43.632 --> 00:45.168
+As you're watching the talks,
+
+00:45.169 --> 00:47.488
+you can refer to the schedule in another window.
+
+00:47.489 --> 00:50.406
+Hover over the boxes to see the times and titles,
+
+00:50.407 --> 00:52.044
+and click on the boxes in the schedule
+
+00:52.045 --> 00:54.643
+to jump to the talk's page for more details.
+
+00:54.644 --> 00:57.821
+You can also get the schedule as an iCalendar file
+
+00:57.822 --> 00:59.965
+or as an Org file in different time zones.
+
+00:59.966 --> 01:01.438
+Many talks will be followed by
+
+01:01.439 --> 01:04.076
+live Q&A web conferences with the speaker,
+
+01:04.077 --> 01:06.583
+which will be done in BigBlueButton or BBB.
+
+01:06.584 --> 01:09.333
+These are indicated with a solid border on the schedule
+
+01:09.334 --> 01:12.482
+and by Q&A: BBB on the schedule page.
+
+01:12.483 --> 01:14.410
+You can join the web conference room
+
+01:14.411 --> 01:15.989
+by clicking on the BBB link
+
+01:15.990 --> 01:18.747
+on the schedule page or the talk's webpage.
+
+01:18.748 --> 01:21.846
+Then you can ask your questions yourself when the Q&A starts.
+
+01:21.847 --> 01:24.824
+To improve performance, please keep your webcam off
+
+01:24.825 --> 01:27.043
+and stay muted until it's your turn to talk.
+
+01:27.044 --> 01:28.261
+If you don't like Javascript,
+
+01:28.262 --> 01:30.259
+you can still ask questions via IRC
+
+01:30.260 --> 01:32.434
+and the hosts can read them out for you.
+
+01:32.435 --> 01:34.192
+We're probably going to automatically switch
+
+01:34.193 --> 01:36.190
+between talks and Q&A sessions,
+
+01:36.191 --> 01:38.868
+so the transitions on the stream might be a little sudden.
+
+01:38.869 --> 01:40.387
+People in the BigBlueButton room
+
+01:40.388 --> 01:42.025
+can continue the conversation
+
+01:42.026 --> 01:44.463
+even after the talk moves off-stream.
+
+01:44.464 --> 01:46.181
+and you can also reach out to the speakers
+
+01:46.182 --> 01:48.724
+using the contact information on the talk page.
+
+01:48.725 --> 01:52.222
+Other talks will have Q&A via Etherpad or IRC,
+
+01:52.223 --> 01:54.180
+depending on what the speakers prefer.
+
+01:54.181 --> 01:56.738
+This is indicated in the schedule with a dashed border
+
+01:56.739 --> 01:58.264
+and on the schedule page as well.
+
+01:58.265 --> 01:59.603
+As an experiment,
+
+01:59.604 --> 02:02.002
+the Q&A for the mcclim talk this afternoon
+
+02:02.003 --> 02:03.881
+will also be in LambdaMOO.
+
+02:03.882 --> 02:05.040
+If you'd like to try it out,
+
+02:05.041 --> 02:07.039
+see the mcclim talk page for instructions
+
+02:07.040 --> 02:08.759
+so you can join the discussion there.
+
+02:08.760 --> 02:11.557
+The schedule pages and track pages have quick shortcuts
+
+02:11.558 --> 02:14.675
+so that you can find out more about talks, open the Etherpads,
+
+02:14.676 --> 02:16.402
+and join the Q&A sessions.
+
+02:16.403 --> 02:18.192
+The watch page has more tips
+
+02:18.193 --> 02:19.731
+on how to make the most of Q&A.
+
+02:19.732 --> 02:22.609
+If you can, please add notes and ask questions
+
+02:22.610 --> 02:25.087
+in the Etherpad for the talk. That makes it easier
+
+02:25.088 --> 02:26.725
+for everyone to share their notes,
+
+02:26.726 --> 02:29.603
+and speakers and hosts can read the questions from there.
+
+02:29.604 --> 02:31.841
+We'll copy the notes to the talk pages afterwards.
+
+02:31.842 --> 02:33.719
+We have one pad for each talk,
+
+02:33.720 --> 02:36.197
+so you can follow the links to get to the next one
+
+02:36.198 --> 02:39.115
+or go back to the schedule and get the link from there.
+
+02:39.116 --> 02:40.633
+If you have general feedback about
+
+02:40.634 --> 02:42.791
+the conference itself, please put it in
+
+02:42.792 --> 02:47.389
+pad.emacsconf.org/2024 , which is linked on each pad.
+
+02:47.390 --> 02:49.547
+You can also use this as a general community message board
+
+02:49.548 --> 02:51.786
+for things like Help Wanted.
+
+02:51.787 --> 02:54.864
+Internet Relay Chat or IRC can be another great way
+
+02:54.865 --> 02:56.982
+to be part of lots of conversations.
+
+02:56.983 --> 03:01.180
+You can use chat.emacsconf.org to join the IRC channels
+
+03:01.181 --> 03:02.712
+through your web browser.
+
+03:02.713 --> 03:04.657
+The tabs on the left can help you
+
+03:04.658 --> 03:06.775
+switch between the different channels.
+
+03:06.776 --> 03:09.453
+There's #emacsconf-gen for the General track
+
+03:09.454 --> 03:12.171
+and #emacsconf-dev for the Development track.
+
+03:12.172 --> 03:16.089
+If you need to reach us, you can join #emacsconf-org
+
+03:16.090 --> 03:21.248
+or e-mail emacsconf-org-private@gnu.org.
+
+03:21.249 --> 03:25.205
+You can use #emacsconf for hallway conversations.
+
+03:25.206 --> 03:27.283
+Of course, you can join any of these channels
+
+03:27.284 --> 03:29.182
+with your favourite IRC client
+
+03:29.183 --> 03:32.080
+by connecting to irc.libera.chat
+
+03:32.081 --> 03:35.959
+port 6697 using TLS.
+
+03:35.960 --> 03:38.597
+Once again, we're going to be streaming with open captions
+
+03:38.598 --> 03:41.355
+for most of the talks this year, thanks to our speakers and
+
+03:41.356 --> 03:44.793
+captioning volunteers. The captioned talks are indicated
+
+03:44.794 --> 03:47.231
+on the schedule, and with any luck, we'll be posting
+
+03:47.232 --> 03:50.709
+transcripts on talk pages shortly after the talks start.
+
+03:50.710 --> 03:52.307
+If you need additional accommodations,
+
+03:52.308 --> 03:54.566
+please let us know in #emacsconf-org
+
+03:54.567 --> 03:57.064
+and we'll see if we can make things happen.
+
+03:57.065 --> 04:00.942
+If something goes down, we'll update status.emacsconf.org.
+
+04:00.943 --> 04:02.700
+If it doesn't look like we've noticed yet,
+
+04:02.701 --> 04:06.099
+please let us know in the #emacsconf-org IRC channel,
+
+04:06.100 --> 04:08.658
+where we will be quietly panicking.
+
+04:08.659 --> 04:11.216
+In all of these conversations, please keep in mind
+
+04:11.217 --> 04:13.534
+our guidelines for conduct. You can find them on the wiki.
+
+04:13.535 --> 04:16.153
+They basically boil down to: please be nice.
+
+04:16.154 --> 04:18.430
+If all goes well, the prerecorded talks and transcripts
+
+04:18.431 --> 04:20.348
+should be available from the talk pages
+
+04:20.349 --> 04:21.906
+shortly after they start playing,
+
+04:21.907 --> 04:24.304
+and we'll post the recordings of live talks
+
+04:24.305 --> 04:27.062
+and Q&A sessions within the next month or so.
+
+04:27.063 --> 04:29.300
+If you'd like to get an update, you can subscribe to
+
+04:29.301 --> 04:31.978
+the emacsconf-discuss mailing list.
+
+04:31.979 --> 04:33.056
+All right, let's get going.
+
+04:33.057 --> 04:34.974
+Leo is hosting the general track,
+
+04:34.975 --> 04:36.772
+and Corwin is hosting the development track.
+
+04:36.773 --> 04:39.850
+The other volunteers and I will run around mostly backstage,
+
+04:39.851 --> 04:41.888
+and you'll probably meet us in the closing remarks.
+
+04:41.889 --> 04:43.326
+That's also where we get to thank
+
+04:43.327 --> 04:45.124
+all the people and organizations
+
+04:45.125 --> 04:46.322
+who make EmacsConf possible.
+
+04:46.323 --> 04:49.721
+Thanks for coming to EmacsConf 2024.
diff --git a/2024/captions/emacsconf-2024-secrets--committing-secrets-with-git-using-sopsmode--jonathan-otsuka--main--chapters.vtt b/2024/captions/emacsconf-2024-secrets--committing-secrets-with-git-using-sopsmode--jonathan-otsuka--main--chapters.vtt
new file mode 100644
index 00000000..01d22a35
--- /dev/null
+++ b/2024/captions/emacsconf-2024-secrets--committing-secrets-with-git-using-sopsmode--jonathan-otsuka--main--chapters.vtt
@@ -0,0 +1,26 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:03:23.309
+Introduction
+
+00:03:23.310 --> 00:07:39.187
+Q&A technical issues
+
+00:07:39.188 --> 00:08:08.531
+Q: Can you describe some potential interactive uses for this within Emacs?
+
+00:08:08.532 --> 00:09:12.066
+Q: Is this saved in the repo or file as \"run sops here\" or is the encrypted blob in the git repo?
+
+00:09:12.067 --> 00:10:23.629
+Q: How do you decide whether to use SOPS or other solutions such as pass-cli?
+
+00:10:23.630 --> 00:11:11.982
+Q: One limitation with guix (similar package manager to nix) is there is no great way of storing secrets in the store, would SOPS be useful for this?
+
+00:11:11.983 --> 00:11:49.438
+Q: Wacky question: what happens in sops-mode if you encrypt the already encrypted file as if it was plaintext?
+
+00:11:49.439 --> 00:14:57.085
+Q: can you describe some potential interactive uses for this within Emacs
diff --git a/2024/captions/emacsconf-2024-secrets--committing-secrets-with-git-using-sopsmode--jonathan-otsuka--main.vtt b/2024/captions/emacsconf-2024-secrets--committing-secrets-with-git-using-sopsmode--jonathan-otsuka--main.vtt
new file mode 100644
index 00000000..fd90802a
--- /dev/null
+++ b/2024/captions/emacsconf-2024-secrets--committing-secrets-with-git-using-sopsmode--jonathan-otsuka--main.vtt
@@ -0,0 +1,725 @@
+WEBVTT
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:01.349
+Yeah, my talk is committing
+
+00:00:01.350 --> 00:00:10.189
+secrets with Git via SOPS mode. So what is SOPS? SOPS
+
+00:00:10.190 --> 00:00:15.069
+came originally from Mozilla, and their acronym was Secret
+
+00:00:15.070 --> 00:00:19.669
+Operations, so S-O-P-S. It's a utility that allows you to
+
+00:00:19.670 --> 00:00:24.269
+encrypt pretty much any file you want and then have the
+
+00:00:24.270 --> 00:00:27.869
+ability to commit it or just share it with somebody that has
+
+00:00:27.870 --> 00:00:32.709
+the ability to decrypt it. I've mostly used it with AWS KMS,
+
+00:00:32.710 --> 00:00:36.829
+but there's a number of encryptions, ways you can encrypt
+
+00:00:36.830 --> 00:00:41.909
+it. Um, so yeah, that's what SOPS mode is. Most of the
+
+00:00:41.910 --> 00:00:45.709
+time I've used it is with application or deployment
+
+00:00:45.710 --> 00:00:48.269
+secrets--decrypt them on the fly during a
+
+00:00:48.270 --> 00:00:52.109
+pipeline run and then use them. We've also
+
+00:00:52.110 --> 00:00:56.549
+been using it for kind of a self-service for engineers
+
+00:00:56.550 --> 00:00:59.629
+to be able to say, if there's an API token that they
+
+00:00:59.630 --> 00:01:03.429
+need either in the container or that gets put
+
+00:01:03.430 --> 00:01:09.109
+somewhere else, that's another way to use SOPS.
+
+00:01:09.110 --> 00:01:13.949
+Just sharing secrets. The tooling, there's
+
+00:01:13.950 --> 00:01:16.814
+quite a bit of tooling for Terraform.
+
+00:01:16.815 --> 00:01:19.090
+You can just decrypt it and then use it
+
+00:01:19.091 --> 00:01:21.309
+however you want. Ansible, it's another
+
+00:01:21.310 --> 00:01:23.648
+place, and then Kubernetes...
+
+00:01:23.649 --> 00:01:26.124
+There'll be links at the very end.
+
+00:01:26.125 --> 00:01:28.982
+There's actually a Nix SOPS too.
+
+00:01:28.983 --> 00:01:30.237
+I think there's a link in the end.
+
+00:01:30.238 --> 00:01:32.830
+So yeah, I'll just show a quick demo.
+
+00:01:32.831 --> 00:01:35.286
+I'll actually show it in Emacs too,
+
+00:01:35.287 --> 00:01:36.983
+but this is the idea.
+
+00:01:36.984 --> 00:01:39.450
+I'm just going to create a file
+
+00:01:39.451 --> 00:01:42.051
+and then I'm going to encrypt it with age.
+
+00:01:42.052 --> 00:01:46.874
+Then we should see the encrypted file
+
+00:01:46.875 --> 00:01:53.189
+be output here. The idea is you can decrypt it
+
+00:01:53.190 --> 00:01:59.349
+there. So my talk was... the reason how my
+
+00:01:59.350 --> 00:02:04.429
+talk came about was there was no mode like this yet.
+
+00:02:04.430 --> 00:02:08.829
+So I didn't want to have to...
+
+00:02:08.830 --> 00:02:10.269
+What you can do is you can pass
+
+00:02:10.270 --> 00:02:13.029
+in the editor variable, set your Emacs,
+
+00:02:13.030 --> 00:02:16.441
+then call the command, but that opens
+
+00:02:16.442 --> 00:02:20.589
+a whole new window. I wanted to live in my
+
+00:02:20.590 --> 00:02:22.994
+current Emacs. So this is that
+
+00:02:22.995 --> 00:02:25.555
+same encrypted file that we just created.
+
+00:02:25.556 --> 00:02:28.566
+I'm going to quickly do C-c C-d.
+
+00:02:28.567 --> 00:02:32.309
+So now we're in the SOPS decrypted mode of the
+
+00:02:32.310 --> 00:02:38.057
+file. I can save this, or make changes and save it.
+
+00:02:38.058 --> 00:02:39.963
+And then it resaves it.
+
+00:02:39.964 --> 00:02:42.918
+I'll just show you that decrypting it
+
+00:02:42.919 --> 00:02:44.629
+shows what we changed.
+
+00:02:44.630 --> 00:02:52.831
+I think that's most of my talk.
+
+00:02:52.832 --> 00:02:55.882
+There's future stuff that I would like to do
+
+00:02:55.883 --> 00:03:00.447
+with this. There's no way to create SOPS files
+
+00:03:00.448 --> 00:03:03.191
+from scratch. And then just putting more
+
+00:03:03.192 --> 00:03:06.069
+documentation around the other ways you can
+
+00:03:06.070 --> 00:03:14.029
+set up your editor to decrypt. But yeah,
+
+00:03:14.030 --> 00:03:19.109
+here's all the links. I haven't uploaded
+
+00:03:19.110 --> 00:03:23.309
+this yet, but yeah, that is my talk.
+
+NOTE Q&A technical issues
+
+00:03:23.310 --> 00:03:27.770
+[Leo] Okay. Thank you, Jonathan.
+
+00:03:27.771 --> 00:03:32.692
+Let me just make sure. So everything you've mentioned
+
+00:03:32.693 --> 00:03:34.887
+about putting stuff available to everyone,
+
+00:03:34.888 --> 00:03:36.469
+we'll make sure that everything
+
+00:03:36.470 --> 00:03:38.513
+ends up on the pad and on the website,
+
+00:03:38.514 --> 00:03:40.850
+so don't worry. Let me see if we can get up
+
+00:03:40.851 --> 00:03:41.753
+the pad for you.
+
+00:03:41.754 --> 00:03:43.284
+Do you have any preference with regards
+
+00:03:43.285 --> 00:03:45.467
+to the questions? Do you want to read them yourself
+
+00:03:45.468 --> 00:03:50.121
+or do you want one of us to read them for you?
+
+00:03:50.122 --> 00:03:53.389
+[Jonathan]: I'm okay with talking first,
+
+00:03:53.390 --> 00:03:57.461
+saying it out loud if there are some.
+
+00:03:57.462 --> 00:04:00.749
+[Leo]: Sure. Let me just find you the pads.
+
+00:04:00.750 --> 00:04:02.757
+Where is it? There you go.
+
+00:04:02.758 --> 00:04:05.409
+Do you have access to the pad on your end?
+
+00:04:05.410 --> 00:04:06.153
+Yep.
+
+00:04:06.154 --> 00:04:09.549
+Okay. Well, if you, since you're already showing
+
+00:04:09.550 --> 00:04:12.389
+your screen, if you can maybe switch the window to the one
+
+00:04:12.390 --> 00:04:13.435
+that is hosting the pad
+
+00:04:13.436 --> 00:04:15.814
+and feel free to start answering questions.
+
+00:04:15.815 --> 00:04:16.262
+Yep.
+
+00:04:16.263 --> 00:04:20.109
+It didn't look like we have any yet, but...
+
+00:04:20.110 --> 00:04:21.942
+Well, there's still coming, don't worry.
+
+00:04:21.943 --> 00:04:29.149
+We're just waiting for people to catch up.
+
+00:04:29.150 --> 00:04:31.533
+I probably need to make it bigger.
+
+00:04:31.534 --> 00:04:34.460
+Is it big enough or do I need to make it bigger?
+
+00:04:34.461 --> 00:04:40.247
+Right now, it's just a black screen on my end, so...
+
+00:04:40.248 --> 00:04:45.269
+Oh, wow. Weird. I can see it on mine, weirdly.
+
+00:04:45.270 --> 00:04:47.536
+Maybe it's just me. Let me check here.
+
+00:04:47.537 --> 00:04:48.989
+No, it seems to be just a
+
+00:04:48.990 --> 00:04:50.069
+black square, even on the stream.
+
+00:04:50.070 --> 00:05:00.927
+Try it again. That change at all? No, it's still black.
+
+00:05:00.928 --> 00:05:02.743
+Can you maybe start switching window
+
+00:05:02.744 --> 00:05:04.069
+and coming back to the one?
+
+00:05:04.070 --> 00:05:08.869
+Otherwise, I'll just stream it on my end.
+
+00:05:08.870 --> 00:05:13.629
+Yeah. All right, I'll do it. I'll take presenter in just a
+
+00:05:13.630 --> 00:05:22.229
+second. Yeah, sorry about that. Thank you.
+
+00:05:22.230 --> 00:05:27.069
+If I can take presenter, and I will share the screen.
+
+00:05:27.070 --> 00:05:36.749
+Sorry, I'm just trying to find a chat. There we go.
+
+00:05:36.750 --> 00:05:39.509
+Normally, I'm not supposed to be on the dev track, which is
+
+00:05:39.510 --> 00:05:42.309
+why I'm confusing all my windows. Give me just a second.
+
+00:05:42.310 --> 00:05:53.709
+Shell, casual. So we are on the dev track, and it is this
+
+00:05:53.710 --> 00:05:54.189
+one.
+
+00:05:54.190 --> 00:06:08.229
+There we go. No, that's not a guide, damn it. Secrets.
+
+00:06:08.230 --> 00:06:10.109
+And...
+
+00:06:10.110 --> 00:06:15.509
+There we go, finally.
+
+00:06:15.510 --> 00:06:19.109
+Ah. Probably just for the delay, do some jazz hands in the
+
+00:06:19.110 --> 00:06:20.889
+background as we did in the start.
+
+00:06:20.890 --> 00:06:23.600
+It feels like Yordle[??] Castle this year,
+
+00:06:23.601 --> 00:06:25.462
+where nothing works properly.
+
+00:06:25.463 --> 00:06:26.269
+That's right.
+
+00:06:26.270 --> 00:06:39.149
+All right. There we go. It's loading up. Obviously.
+
+00:06:39.150 --> 00:06:44.189
+There we go.
+
+00:06:44.190 --> 00:06:49.189
+All right. You should be able to see my screen now. Yep. All
+
+00:06:49.190 --> 00:06:53.789
+right. So, well, we've gone so far. Oh, it did stop. Damn it.
+
+00:06:53.790 --> 00:07:02.989
+Sorry, now it's BBB not behaving properly. That's right.
+
+00:07:02.990 --> 00:07:10.309
+Okay, let me just join, leave and join again. Okay. I just did
+
+00:07:10.310 --> 00:07:11.909
+exactly that for what it's worth.
+
+00:07:11.910 --> 00:07:26.189
+Nothing. All right.
+
+00:07:26.190 --> 00:07:29.029
+All right, I seem to be back. Let me show. And there we go.
+
+00:07:29.030 --> 00:07:36.909
+All right, everything is working. I'm not touching
+
+00:07:36.910 --> 00:07:39.187
+anything. So. Cool.
+
+NOTE Q: Can you describe some potential interactive uses for this within Emacs?
+
+00:07:39.188 --> 00:07:43.629
+Yeah, I'll just start with the top. Can
+
+00:07:43.630 --> 00:07:47.349
+you describe some potential interactive uses for this with
+
+00:07:47.350 --> 00:07:52.789
+an Emacs? Um, I'm, I'm not actually sure what this means.
+
+00:07:52.790 --> 00:08:01.029
+Could we, could you add some more context maybe? Or, um,
+
+00:08:01.030 --> 00:08:03.549
+I think we'll maybe come back to that one. I'm not sure what,
+
+00:08:03.550 --> 00:08:08.531
+uh, potential interactive uses mean, but.
+
+NOTE Q: Is this saved in the repo or file as \"run sops here\" or is the encrypted blob in the git repo?
+
+00:08:08.532 --> 00:08:10.429
+Yep. Uh, is this
+
+00:08:10.430 --> 00:08:18.749
+saved in the repo or file as run SOPs here? Oh, encrypted.
+
+00:08:18.750 --> 00:08:24.829
+They're saved as just text files so that you can do
+
+00:08:24.830 --> 00:08:28.103
+SOPs and encrypt like a binary. I think in the end,
+
+00:08:28.104 --> 00:08:30.819
+no matter what, they become just a text file,
+
+00:08:30.820 --> 00:08:34.520
+and then it does the encoding and decoding on the fly
+
+00:08:34.521 --> 00:08:36.753
+when you encrypt or decrypt. So no matter
+
+00:08:36.754 --> 00:08:41.984
+what it's going to be, I think it might just be
+
+00:08:41.985 --> 00:08:44.989
+a JSON in the end. Uh, so yeah.
+
+00:08:44.990 --> 00:08:56.309
+I'll try to, well, I can type out that answer, but all
+
+00:08:56.310 --> 00:08:56.855
+right.
+
+00:08:56.856 --> 00:08:59.429
+Don't worry about typing it out.
+
+00:08:59.430 --> 00:09:00.989
+We are gathering the
+
+00:09:00.990 --> 00:09:04.069
+recordings at the end, you know, even answers that are not
+
+00:09:04.070 --> 00:09:05.782
+provided, we'll type them out eventually.
+
+00:09:05.783 --> 00:09:09.029
+So don't stress too much about the actual answers being written.
+
+00:09:09.030 --> 00:09:12.066
+Okay. All right. So I'll go to the third one.
+
+NOTE Q: How do you decide whether to use SOPS or other solutions such as pass-cli?
+
+00:09:12.067 --> 00:09:13.189
+How do you decide
+
+00:09:13.190 --> 00:09:18.949
+whether to use SOPS or other solutions such as pass-cli?
+
+00:09:18.950 --> 00:09:24.469
+The biggest use case that I've been using it recently is,
+
+00:09:24.470 --> 00:09:29.109
+Bitbucket has a way to... In a repository,
+
+00:09:29.110 --> 00:09:35.829
+you can store non-secrets and secrets. So
+
+00:09:35.830 --> 00:09:39.549
+we're trying to move the secrets into the repository
+
+00:09:39.550 --> 00:09:43.109
+and then allow the engineers to have
+
+00:09:43.110 --> 00:09:48.789
+access to that.
+
+00:09:48.790 --> 00:09:52.389
+Bitbucket variables is a black box. Since the devs can
+
+00:09:52.390 --> 00:09:56.841
+access it, it's manual work for everybody
+
+00:09:56.842 --> 00:10:00.869
+that has to deal with it. Since we're moving
+
+00:10:00.870 --> 00:10:04.339
+SOPS-encrypted files into the repo,
+
+00:10:04.340 --> 00:10:06.830
+now there's that trackability
+
+00:10:06.831 --> 00:10:10.942
+from who made the change and what it changed from,
+
+00:10:10.943 --> 00:10:16.589
+what did it go to, and just things like that.
+
+00:10:16.590 --> 00:10:23.629
+You can use it anytime you'd want to commit them.
+
+NOTE Q: One limitation with guix (similar package manager to nix) is there is no great way of storing secrets in the store, would SOPS be useful for this?
+
+00:10:23.630 --> 00:10:32.029
+One limitation with GUIX is there's no great way to store
+
+00:10:32.030 --> 00:10:36.869
+secrets in the store. Yeah, I think, sorry... Let me. One
+
+00:10:36.870 --> 00:10:40.189
+limitation of GUIX is there's no way to store secrets in the
+
+00:10:40.190 --> 00:10:42.108
+store. Would SOPS be useful for this?
+
+00:10:42.109 --> 00:10:44.829
+I think so, but I don't know how
+
+00:10:44.830 --> 00:10:48.869
+that package manager works, if it's just like
+
+00:10:48.870 --> 00:10:52.989
+some sort of "you decrypt and then you run the package
+
+00:10:52.990 --> 00:10:56.109
+manager," then yeah, that's a lot of our workflows.
+
+00:10:56.110 --> 00:10:58.989
+If we're doing a deployment and the container
+
+00:10:58.990 --> 00:11:01.629
+needs it, we'll decrypt, put that in
+
+00:11:01.630 --> 00:11:03.829
+whatever place, or source it if it's an
+
+00:11:03.830 --> 00:11:06.629
+environment file for the container, and then
+
+00:11:06.630 --> 00:11:11.982
+pass it in. I think it'd be a great choice there.
+
+NOTE Q: Wacky question: what happens in sops-mode if you encrypt the already encrypted file as if it was plaintext?
+
+00:11:11.983 --> 00:11:17.069
+A wacky question. What happens in sops mode if you
+
+00:11:17.070 --> 00:11:21.709
+encrypt an already encrypted file as if it was plain text?
+
+00:11:21.710 --> 00:11:24.949
+You know, I might have actually accidentally did that
+
+00:11:24.950 --> 00:11:29.709
+today. I didn't actually see the resulting file. But that's
+
+00:11:29.710 --> 00:11:31.709
+a great question.
+
+00:11:31.710 --> 00:11:38.189
+Well, it's technically still binary, isn't it, at the end?
+
+00:11:38.190 --> 00:11:40.389
+You've got binary stuff that is being encrypted
+
+00:11:40.390 --> 00:11:42.949
+again. It's just double encryption.
+
+00:11:42.950 --> 00:11:44.842
+I'm pretty sure it works.
+
+00:11:44.843 --> 00:11:48.869
+Yeah, probably. I'm going to go back up to the
+
+00:11:48.870 --> 00:11:49.438
+top one.
+
+NOTE Q: can you describe some potential interactive uses for this within Emacs
+
+00:11:49.439 --> 00:11:52.469
+Can you describe some potential interactive uses
+
+00:11:52.470 --> 00:11:57.349
+for this within Emacs? Is there some other activity that
+
+00:11:57.350 --> 00:12:01.909
+would enable or it would be enabled with SOPS decryption
+
+00:12:01.910 --> 00:12:12.529
+first, like an IT configuration task.
+
+00:12:12.530 --> 00:12:18.509
+So in the README right now,
+
+00:12:18.510 --> 00:12:22.629
+there is a block and it's called SOPS setup
+
+00:12:22.630 --> 00:12:27.687
+environment. I think it's a hook. Don't quote me.
+
+00:12:27.688 --> 00:12:29.596
+I haven't touched it in a while.
+
+00:12:29.597 --> 00:12:32.051
+I think that hook runs prior to
+
+00:12:32.052 --> 00:12:35.349
+doing any sort of decryption or encryption.
+
+00:12:35.350 --> 00:12:40.654
+So there's an example in the README for ways
+
+00:12:40.655 --> 00:12:44.669
+that you can set up your SOPS mode for AWS.
+
+00:12:44.670 --> 00:12:51.136
+You can set the profile. It was actually
+
+00:12:51.137 --> 00:12:58.829
+a pretty fun thing to add because with that bit of code,
+
+00:12:58.830 --> 00:13:01.199
+I can pretty much go to any one of our repos
+
+00:13:01.200 --> 00:13:04.085
+and decrypt and encrypt on the fly and
+
+00:13:04.086 --> 00:13:06.749
+not have to do much fanfare of like,
+
+00:13:06.750 --> 00:13:09.269
+well, what account or what profile
+
+00:13:09.270 --> 00:13:12.324
+do I need to switch to? I haven't looked at
+
+00:13:12.325 --> 00:13:15.309
+GCP yet or Azure, and that's kind of one of
+
+00:13:15.310 --> 00:13:19.079
+my future things. I need to maybe look into those
+
+00:13:19.080 --> 00:13:21.055
+to see what they look like
+
+00:13:21.056 --> 00:13:23.909
+and give example configs to help users.
+
+00:13:23.910 --> 00:13:28.993
+Hopefully that answered your question.
+
+00:13:28.994 --> 00:13:30.949
+I think so.
+
+00:13:30.950 --> 00:13:34.849
+Continuing the theme of this, both of you being cursed,
+
+00:13:34.850 --> 00:13:36.947
+my X11 decided to crash.
+
+00:13:36.948 --> 00:13:40.201
+Nothing is going well with this one.
+
+00:13:40.202 --> 00:13:44.509
+Have you answered all the questions? I think so.
+
+00:13:44.510 --> 00:13:46.438
+Well, do you have anything else to add, perhaps?
+
+00:13:46.439 --> 00:13:48.327
+Maybe something that wasn't enough
+
+00:13:48.328 --> 00:13:50.109
+to fit in your live presentation?
+
+00:13:50.110 --> 00:13:56.669
+No, I'm excited to see the other talks and I hope everybody
+
+00:13:56.670 --> 00:13:57.811
+has fun too.
+
+00:13:57.812 --> 00:14:03.303
+Yeah, if you have any other questions, just email me.
+
+00:14:03.304 --> 00:14:05.210
+That's all.
+
+00:14:05.211 --> 00:14:07.594
+I got nothing.
+
+00:14:07.595 --> 00:14:08.222
+Okay, cool.
+
+00:14:08.223 --> 00:14:10.469
+[Leo]: Well, thank you so much, Jonathan, for your
+
+00:14:10.470 --> 00:14:12.789
+presentation. It was, sorry for all the technical
+
+00:14:12.790 --> 00:14:14.162
+problems, we tried our best,
+
+00:14:14.163 --> 00:14:15.532
+but I think we still managed to have
+
+00:14:15.533 --> 00:14:17.309
+a live presentation, and we managed to have some
+
+00:14:17.310 --> 00:14:20.137
+questions from the crowd. So, as far as I'm concerned,
+
+00:14:20.138 --> 00:14:21.837
+I think we did a good job.
+
+00:14:21.838 --> 00:14:24.894
+[Jonathan]: Yeah, you stomped it in this whole dev track,
+
+00:14:24.895 --> 00:14:28.349
+I just have to say. It's been a privilege to jump in
+
+00:14:28.350 --> 00:14:31.069
+with it here and there and to just listen to the great
+
+00:14:31.070 --> 00:14:33.180
+conversations.
+
+00:14:33.181 --> 00:14:38.949
+[Leo]: I think next up we have Emacs and McCLIM,
+
+00:14:38.950 --> 00:14:41.904
+which is going to be a similar format to this talk.
+
+00:14:41.905 --> 00:14:44.709
+We'll probably jump right into that in just about two minutes.
+
+00:14:44.710 --> 00:14:47.821
+We'll give you another countdown here. One second.
+
+00:14:47.822 --> 00:14:49.916
+Well, we arranged that and meanwhile,
+
+00:14:49.917 --> 00:14:51.349
+I just want to take my own
+
+00:14:51.350 --> 00:14:55.309
+little humble opportunity to thank you Jonathan, and I
+
+00:14:55.310 --> 00:14:57.085
+guess everybody else.
diff --git a/2024/captions/emacsconf-2024-sharing--so-you-want-to-be-an-emacsfluencer--gopar--main--chapters.vtt b/2024/captions/emacsconf-2024-sharing--so-you-want-to-be-an-emacsfluencer--gopar--main--chapters.vtt
new file mode 100644
index 00000000..b1e3121d
--- /dev/null
+++ b/2024/captions/emacsconf-2024-sharing--so-you-want-to-be-an-emacsfluencer--gopar--main--chapters.vtt
@@ -0,0 +1,59 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:12.433
+Introduction
+
+00:00:12.466 --> 00:00:36.300
+Knowledge grows when it is shared
+
+00:00:36.333 --> 00:01:07.200
+When's the last time you shared something?
+
+00:01:07.200 --> 00:02:41.533
+Sharing Emacs
+
+00:02:41.566 --> 00:03:06.733
+My background
+
+00:03:06.766 --> 00:03:44.066
+Why you should make Emacs videos (or other formats)
+
+00:03:44.100 --> 00:05:22.933
+Beginners
+
+00:05:22.966 --> 00:05:56.100
+Intermediate
+
+00:05:56.133 --> 00:06:22.833
+Advanced
+
+00:06:22.866 --> 00:07:28.433
+Impostor syndrome
+
+00:07:28.466 --> 00:08:46.400
+Process for recording
+
+00:08:46.400 --> 00:09:36.666
+Details: recording
+
+00:09:36.700 --> 00:13:33.439
+Tips: Recording
+
+00:13:33.440 --> 00:14:38.319
+Details: Editing
+
+00:14:38.320 --> 00:15:44.000
+Tips: Editing
+
+00:15:44.000 --> 00:16:06.819
+Details: Uploading
+
+00:16:06.820 --> 00:18:06.133
+Tips: Uploading
+
+00:18:06.166 --> 00:19:04.900
+Your secret sauce
+
+00:19:04.933 --> 00:21:40.266
+Cons of YouTube
diff --git a/2024/captions/emacsconf-2024-sharing--so-you-want-to-be-an-emacsfluencer--gopar--main.vtt b/2024/captions/emacsconf-2024-sharing--so-you-want-to-be-an-emacsfluencer--gopar--main.vtt
new file mode 100644
index 00000000..23e0a699
--- /dev/null
+++ b/2024/captions/emacsconf-2024-sharing--so-you-want-to-be-an-emacsfluencer--gopar--main.vtt
@@ -0,0 +1,1653 @@
+WEBVTT captioned by anush and sachac
+
+NOTE Introduction
+
+00:00.000 --> 00:01.233
+Hey, I'm Gopar
+
+00:01.266 --> 00:00:03.244
+and today I'm going to talk about
+
+00:00:03.245 --> 00:00:04.700
+being an Emacs influencer
+
+00:04.733 --> 00:07.066
+and try to convince you to be one too.
+
+00:07.100 --> 00:08.466
+Hopefully that goes well.
+
+00:08.500 --> 00:12.433
+If not, we'll see at the end of the talk.
+
+NOTE Knowledge grows when it is shared
+
+00:12.466 --> 00:14.833
+But first, I want to share something,
+
+00:14.866 --> 00:17.500
+and that is: that knowledge grows when it is shared.
+
+00:17.533 --> 00:19.500
+This is usually how I end my videos.
+
+00:19.533 --> 00:21.233
+Some of you may be familiar with this.
+
+00:21.266 --> 00:25.466
+I say this quote because I believe there is truth to it.
+
+00:25.500 --> 00:27.833
+The more you share something, the more you reinforce it,
+
+00:27.866 --> 00:30.466
+and the more the knowledge grows, not just for you,
+
+00:30.500 --> 00:33.466
+but for everybody else around it with who you share it with.
+
+00:33.500 --> 00:34.400
+With that being said,
+
+00:34.400 --> 00:36.300
+there's only one question I want to ask you.
+
+NOTE When's the last time you shared something?
+
+00:36.333 --> 00:39.300
+That is: what is the last time you shared something?
+
+00:39.333 --> 00:41.333
+Now, the sharing of knowledge
+
+00:41.366 --> 00:43.000
+doesn't just have to be about Emacs.
+
+00:43.000 --> 00:45.633
+It can just be about other things that you learn in life.
+
+00:45.666 --> 00:47.200
+There's plenty of things
+
+00:47.200 --> 00:50.833
+that I share with people that I've learned in life,
+
+00:50.866 --> 00:53.500
+and I hope that they learn from what I'm saying as well.
+
+00:53.533 --> 00:54.866
+Learn from the mistakes in others
+
+00:54.900 --> 00:56.100
+type of deal, things like that.
+
+00:56.133 --> 00:58.333
+But anyway, since this is EmacsConf,
+
+00:58.366 --> 01:01.066
+we're gonna keep it to Emacs-related,
+
+01:01.100 --> 01:02.633
+so we're going to find ways
+
+01:02.666 --> 01:04.700
+on how to share all that Emacs knowledge
+
+01:04.733 --> 01:07.200
+that is locked up inside you guys' brain.
+
+NOTE Sharing Emacs
+
+01:07.200 --> 01:09.266
+So sharing Emacs, how can we do that?
+
+01:09.300 --> 01:10.800
+Well, there's a few ways.
+
+01:10.800 --> 01:13.666
+We can do meetups and conferences, aka EmacsConf,
+
+01:13.700 --> 01:16.033
+like we're doing now. So hopefully one of you guys
+
+01:16.066 --> 01:18.300
+might be incentivized to share the knowledge
+
+01:18.333 --> 01:20.700
+that you have in the next upcoming year,
+
+01:20.733 --> 01:23.466
+or the future ones, or be a repeated presenter.
+
+01:23.500 --> 00:01:25.960
+The list goes on and on.
+
+00:01:25.961 --> 01:30.233
+Blog posts. So, one of the easier entries to [??]
+
+01:30.266 --> 01:31.200
+because it is writing
+
+01:31.200 --> 01:32.666
+and you don't have to do video,
+
+01:32.700 --> 01:34.900
+not like the other formats that I'm about to present.
+
+01:34.933 --> 01:37.400
+Tweeting is also an easier format as well
+
+01:37.400 --> 01:40.000
+because it's even smaller than a blog post, more condensed,
+
+01:40.000 --> 01:43.433
+and you can use hashtags. When I was learning,
+
+01:43.466 --> 01:46.000
+when I was reading the Org Mode manual,
+
+01:46.000 --> 01:49.733
+I would use the hashtag #OrgTip on on Twitter.
+
+01:49.766 --> 01:52.666
+Even if you search right now,
+
+01:52.700 --> 01:53.933
+I believe you'll find some of my tweets.
+
+01:53.966 --> 01:55.866
+But yeah, that's one way
+
+01:55.900 --> 01:57.633
+that you can go about it: simple tweets
+
+01:57.666 --> 02:00.100
+that you find, little things, little nuggets of gold
+
+02:00.133 --> 02:02.500
+as I would say. Of course, there's podcasts,
+
+02:02.533 --> 00:02:03.855
+which I'm pretty sure
+
+00:02:03.856 --> 00:02:06.200
+the Emacs community would love to have,
+
+02:06.200 --> 02:08.500
+so if anybody wants to pick up a podcast
+
+02:08.533 --> 02:12.133
+go right ahead. Twitch live streaming,
+
+02:12.166 --> 02:13.900
+which is... Twitch is a platform
+
+02:13.933 --> 02:15.233
+in which you can do live streaming
+
+02:15.266 --> 02:16.900
+for those who are not familiar.
+
+02:16.933 --> 02:19.500
+And people, I've seen people use the Emacs tag in there
+
+02:19.533 --> 02:21.833
+and, you know, just pop up, say hello,
+
+02:21.866 --> 02:23.133
+ask questions, things like that.
+
+02:23.166 --> 02:24.700
+You can be working on the configuration
+
+02:24.733 --> 02:26.033
+or just reading Emacs source code,
+
+02:26.066 --> 02:28.233
+you know, fun stuff like that.
+
+02:28.266 --> 02:29.700
+Videos, which is what I do,
+
+02:29.733 --> 02:31.833
+which I will touch on in a second.
+
+02:31.866 --> 02:33.800
+There's probably more formats
+
+02:33.800 --> 02:35.000
+that I'm not thinking at the moment
+
+02:35.000 --> 02:36.866
+and that you guys can probably fill in the gaps.
+
+02:36.900 --> 02:38.633
+But yeah, these are just some of the ways
+
+02:38.666 --> 02:41.533
+that we can share Emacs. So how do we get started?
+
+NOTE My background
+
+02:41.566 --> 02:42.700
+Well, before we get started,
+
+02:42.733 --> 02:44.633
+I want to talk about my credentials, right?
+
+02:44.666 --> 02:45.700
+I mean, who is this guy
+
+02:45.733 --> 02:47.633
+that you're just listening in this little square
+
+02:47.666 --> 02:49.800
+talking about creating videos?
+
+02:49.800 --> 02:52.633
+Well, I run a channel called goparism on YouTube.
+
+02:52.666 --> 02:55.333
+It has around 2700 subscribers at the moment.
+
+02:55.366 --> 02:57.500
+I kind of know a little bit of the flow.
+
+02:57.533 --> 03:00.333
+I'm not an expert, but I've done enough videos
+
+03:00.366 --> 03:03.300
+that I kind of understand the flow of all of
+
+03:03.333 --> 03:06.733
+at least the simple way of doing it, which I want to share.
+
+NOTE Why you should make Emacs videos (or other formats)
+
+03:06.766 --> 03:08.733
+So right now you're probably thinking,
+
+03:08.766 --> 03:11.000
+OK, I get that you want to sell us
+
+03:11.000 --> 03:12.900
+on the whole video making formats
+
+03:12.933 --> 03:15.433
+or you know sharing just Emacs in general,
+
+03:15.466 --> 03:19.533
+but I'm a beginner, I'm an intermediate, I'm advanced,
+
+03:19.566 --> 03:21.633
+I don't know if I can provide input.
+
+03:21.666 --> 03:23.700
+Each of those, I want to tackle each of those,
+
+03:23.733 --> 03:26.200
+and say that yeah, each of you have input.
+
+03:26.200 --> 03:28.000
+You know, for a beginner it might be say,
+
+03:28.000 --> 03:29.500
+oh, an intermediate and an advanced person
+
+03:29.533 --> 03:30.933
+already has information.
+
+03:30.966 --> 03:32.933
+Intermediate might say, oh, I'm not at that level yet.
+
+03:32.966 --> 03:35.700
+An advanced person might say, oh, I have nothing to say.
+
+03:35.733 --> 03:38.100
+You know, I don't... What I know,
+
+03:38.133 --> 03:39.033
+everybody else knows.
+
+03:39.066 --> 03:43.200
+So I want to, you know, dispel all that and just tell you that,
+
+03:43.200 --> 03:44.066
+hey, it doesn't matter.
+
+NOTE Beginners
+
+03:44.100 --> 03:48.300
+So for beginners, you guys are in a beautiful place,
+
+03:48.333 --> 03:51.333
+which is that you have a clean slate.
+
+03:51.366 --> 03:55.233
+So the way I imagine is that every Emacs user
+
+03:55.266 --> 03:58.300
+is presented[??] upon themselves,
+
+03:58.333 --> 04:00.133
+you know, kind of like this world.
+
+04:00.166 --> 04:02.066
+And in this world, you can either build a road
+
+04:02.100 --> 04:06.266
+that goes to the mountains, the city, or to the beach.
+
+04:06.300 --> 04:08.666
+Some of us have decided which way we want to go.
+
+04:08.700 --> 04:09.733
+Some of us might be building
+
+04:09.766 --> 04:13.333
+the road to the city, to the beach, for example.
+
+04:13.366 --> 04:16.400
+If someone starts a road to the city,
+
+04:16.400 --> 04:19.533
+they are probably stuck in their ways, right?
+
+04:19.566 --> 04:21.933
+And then what leads them to the goal to the city,
+
+04:21.966 --> 04:24.400
+they're not going to make a detour towards the mountain
+
+04:24.400 --> 04:26.300
+or towards the beach to get to the city.
+
+04:26.333 --> 04:27.833
+They just want the straightest path.
+
+04:27.866 --> 04:32.200
+And when you are used to doing things a certain way,
+
+04:32.200 --> 04:33.533
+you're going to have a ton of vision.
+
+04:33.566 --> 04:35.433
+So as a beginner, you don't have any of that
+
+04:35.466 --> 04:36.933
+because you're just starting brand new.
+
+04:36.966 --> 04:40.700
+Everything is, you know, a world of possibilities.
+
+04:40.733 --> 04:43.066
+So I would say that this is a very big advantage.
+
+04:43.100 --> 04:46.400
+The second one is that people enjoy the journey, right?
+
+04:46.400 --> 04:49.033
+People want to see someone grow from this spot
+
+04:49.066 --> 04:51.300
+to the next level, etc, etc.
+
+04:51.333 --> 04:53.466
+This is one of the reasons why we watch movies,
+
+04:53.500 --> 04:54.866
+TV shows, anime, right?
+
+04:54.900 --> 04:57.400
+Because there's a character that needs a problem
+
+04:57.400 --> 04:59.900
+and they're working their way up to solve that problem.
+
+04:59.933 --> 05:01.633
+If we just get to see the ending
+
+05:01.666 --> 05:03.000
+of where they solve the problem,
+
+05:03.000 --> 05:04.300
+we don't really feel anything
+
+05:04.333 --> 05:05.733
+because we weren't part of that journey.
+
+05:05.766 --> 05:08.866
+I would say that starting from scratch
+
+05:08.900 --> 05:10.800
+is a pretty good place to be.
+
+05:10.800 --> 05:12.700
+Of course, if you're going
+
+05:12.733 --> 05:14.300
+to be writing or making videos
+
+05:14.333 --> 05:16.500
+or anything related to Emacs, you kind of have to force...
+
+05:16.533 --> 05:19.500
+If you want to teach people, you kind of have to learn it.
+
+05:19.533 --> 05:20.800
+You're kind of forced to learn,
+
+05:20.800 --> 05:22.933
+which is always encouraged.
+
+NOTE Intermediate
+
+05:22.966 --> 05:25.900
+For intermediates now, you might be saying,
+
+05:25.933 --> 05:28.400
+hey, I'm a little past intermediate.
+
+05:28.400 --> 05:30.033
+I'm sorry, past beginner,
+
+05:30.066 --> 05:32.133
+but I don't feel confident enough to share.
+
+05:32.166 --> 05:34.666
+Well, let's say that you're wrong. Once you're intermediate,
+
+05:34.700 --> 05:37.300
+you're probably fiddling with your Emacs config,
+
+05:37.333 --> 05:39.266
+maybe doing something with Org Mode,
+
+05:39.300 --> 05:40.500
+like a lot of people are doing it,
+
+05:40.533 --> 05:43.500
+and you can document, talk about the things that you do,
+
+05:43.533 --> 05:46.466
+and also those functions that you write in Elisp
+
+05:46.500 --> 05:49.000
+to just improve quality of life, things like that.
+
+05:49.000 --> 05:51.100
+There's a whole list of things that you can do.
+
+05:51.133 --> 05:54.233
+These are just two things out of a plethora.
+
+05:54.266 --> 05:56.100
+of items that you can talk about.
+
+NOTE Advanced
+
+05:56.133 --> 05:59.833
+For my advanced folks, you guys are in a position
+
+05:59.866 --> 06:02.900
+where you guys know more about the Emacs internals.
+
+06:02.933 --> 06:05.100
+You might have read the source code.
+
+06:05.133 --> 06:08.133
+You might know a Emacs manual section pretty well
+
+06:08.166 --> 06:09.833
+that you can talk about.
+
+06:09.866 --> 06:11.866
+Usually when you're at the advanced
+
+06:11.900 --> 06:12.600
+or intermediate level,
+
+06:12.600 --> 06:15.466
+you start, or at least some people start writing packages.
+
+06:15.500 --> 06:17.400
+You can talk about the best practices
+
+06:17.400 --> 06:20.133
+for creating packages, the troubles that you face, you know,
+
+06:20.166 --> 06:22.833
+the things that you learn, things like that.
+
+NOTE Impostor syndrome
+
+06:22.866 --> 06:25.133
+Now that I've given a little bit of examples
+
+06:25.166 --> 06:27.400
+for each of these tiers, there's probably still
+
+06:27.400 --> 06:30.400
+something going on in each of you guys' mind,
+
+06:30.400 --> 06:32.400
+which is something all of us get to face,
+
+06:32.400 --> 06:37.033
+and that is impostor syndrome. Now, with impostor syndrome,
+
+06:37.066 --> 06:40.100
+the sad reality is that we all have it at some point,
+
+06:40.133 --> 06:41.000
+we're going to, you know,
+
+06:41.000 --> 06:43.266
+at the beginner, intermediate, or even advanced stage,
+
+06:43.300 --> 06:43.833
+it doesn't matter,
+
+06:43.866 --> 06:46.800
+there's always that little voice of imposter syndrome saying,
+
+06:46.800 --> 06:49.333
+hey, "You're probably not good enough" or not...
+
+06:49.366 --> 06:50.933
+but questioning if you're good enough
+
+06:50.966 --> 06:53.800
+or if you deserve to be at this level and things like that.
+
+06:53.800 --> 06:56.266
+I believe it's very common with software engineers.
+
+06:56.300 --> 06:59.233
+The other sad thing is that it will never go away
+
+06:59.266 --> 07:02.200
+But the way I see it with impostor syndrome
+
+07:02.200 --> 07:03.433
+is that we embrace it.
+
+07:03.466 --> 07:04.833
+If we are getting an impostor syndrome,
+
+07:04.866 --> 07:07.500
+it's because we're pushing ourself to a next level
+
+07:07.533 --> 07:12.000
+that we haven't been able to to overcome or to progress in.
+
+07:12.000 --> 07:14.733
+If you're pushing yourself, you will get impostor syndrome.
+
+07:14.766 --> 07:16.900
+Like, hey, am I good enough to lead this project?
+
+07:16.933 --> 07:19.500
+To finish this? To optimize this part
+
+07:19.533 --> 07:21.900
+or whatever? I feel it's a good way.
+
+07:21.933 --> 07:24.466
+Impostor syndrome, yeah, it feels horrible,
+
+07:24.500 --> 07:26.033
+but I believe that if you have it,
+
+07:26.066 --> 07:28.433
+it's because you're doing something right.
+
+NOTE Process for recording
+
+07:28.466 --> 07:29.533
+Okay, now that we've gotten
+
+07:29.566 --> 07:32.833
+that out of the way, what's the process for recording?
+
+07:32.866 --> 07:34.800
+Well, it's actually a lot simpler than you think.
+
+07:34.800 --> 07:36.866
+There's three steps, and one of them
+
+07:36.900 --> 07:37.866
+you might not even have to do,
+
+07:37.900 --> 07:39.866
+depending on how you want to go about it.
+
+07:39.900 --> 07:40.733
+The first one is that you have
+
+07:40.766 --> 07:42.933
+to record your voice and screen,
+
+07:42.966 --> 07:45.200
+because if you do want to make video,
+
+07:45.200 --> 07:46.300
+people have to see what you're doing
+
+07:46.333 --> 07:48.100
+and they have to hear what you're talking,
+
+07:48.133 --> 07:50.900
+otherwise it's going to be not as engaging.
+
+07:50.933 --> 07:52.800
+Of course, you can make the face optional
+
+07:52.800 --> 07:54.066
+when recording videos.
+
+07:54.100 --> 07:56.033
+If you watch some of my videos, sometimes
+
+07:56.066 --> 07:57.600
+I show my face, sometimes I don't.
+
+07:57.600 --> 08:02.300
+It just really depends on the mood of what I'm doing
+
+08:02.333 --> 08:05.433
+when I'm recording the video. But yeah, completely up to you.
+
+08:05.466 --> 08:08.333
+After recording, you can edit if desired.
+
+08:08.366 --> 08:10.600
+I remember when I first started making the videos,
+
+08:10.600 --> 08:13.100
+I was not editing them at all.
+
+08:13.133 --> 08:15.433
+I was just one shot and upload.
+
+08:15.466 --> 08:16.866
+That can either be good or bad
+
+08:16.900 --> 08:19.233
+depending on how you view it,
+
+08:19.266 --> 08:22.500
+but it is what it is. Nowadays I do some light editing,
+
+08:22.533 --> 08:26.066
+mainly just to remove the silences
+
+08:26.100 --> 08:29.633
+or when I'm going through debugging something.
+
+08:29.666 --> 08:32.900
+Third one is to upload it,
+
+08:32.933 --> 08:34.100
+which might be the easiest section,
+
+08:34.133 --> 08:35.666
+depending on your goals.
+
+08:35.700 --> 08:38.100
+At minimum, you would put title, description,
+
+08:38.133 --> 08:39.133
+and a little bit more.
+
+08:39.166 --> 08:42.466
+You'll get why I see it can be as easy
+
+08:42.500 --> 08:44.233
+or as complicated as you want,
+
+08:44.266 --> 08:46.400
+which I'll go over later at the end.
+
+NOTE Details: recording
+
+08:46.400 --> 08:50.100
+Let's go over details for recording.
+
+08:50.133 --> 08:53.833
+For recording, thankfully, all OSes,
+
+08:53.866 --> 08:56.466
+or at least the major OSes, have free recording software,
+
+08:56.500 --> 08:59.066
+or you can go a little fancy and get paid [software],
+
+08:59.100 --> 09:01.400
+which usually, you know, depending on your viewpoint,
+
+09:01.400 --> 09:03.266
+might make things easier or not.
+
+09:03.300 --> 09:05.400
+Personally, I use, I'm on Mac,
+
+09:05.400 --> 09:07.000
+so I use the built-in screen recording,
+
+09:07.000 --> 09:08.800
+which, if you do Command-Shift-5,
+
+09:08.800 --> 09:13.066
+it will pop up a little dialog, and if you did it just now,
+
+09:13.100 --> 09:14.400
+you can press the Escape key
+
+09:14.400 --> 09:16.933
+to get rid of it, and life goes on.
+
+09:16.966 --> 09:20.600
+Also for all major 3 OSes, OBS
+
+09:20.600 --> 09:22.600
+is a pretty popular choice not just for streaming,
+
+09:22.600 --> 09:23.866
+but for recording as well.
+
+09:23.900 --> 09:25.633
+That's something you might want to look at.
+
+09:25.666 --> 09:29.700
+If you do decide to record videos.
+
+09:29.733 --> 09:32.066
+All up to you. These are just things
+
+09:32.100 --> 09:35.300
+that I've come along or encountered along the way.
+
+09:35.333 --> 09:36.666
+When it comes to recording,
+
+NOTE Tips: Recording
+
+09:36.700 --> 09:38.933
+I do have some tips that might help you out.
+
+09:38.966 --> 09:40.833
+At least, if I could go back in time,
+
+09:40.866 --> 09:43.333
+this is what I would tell myself: that
+
+09:43.366 --> 09:44.700
+audio quality matter matters.
+
+09:44.733 --> 09:46.700
+If possible, get an external mic.
+
+09:46.733 --> 09:48.300
+That is not always feasible,
+
+09:48.333 --> 09:50.033
+because extra mic costs money,
+
+09:50.066 --> 09:51.066
+and when you're starting out with YouTube,
+
+09:51.100 --> 09:54.000
+you are not going to make a penny.
+
+09:54.000 --> 09:57.533
+YouTube has very high restrictions
+
+09:57.566 --> 10:01.033
+or bars that you need to pass
+
+10:01.066 --> 10:03.866
+before you start getting any revenue. For example,
+
+10:03.900 --> 10:06.633
+my channel, I still haven't met those bars,
+
+10:06.666 --> 10:08.433
+so i'm still not generating any revenue.
+
+10:08.466 --> 10:11.100
+Anything that I buy is just out of pocket.
+
+10:11.133 --> 10:13.700
+Since I work from home, I already had a mic
+
+10:13.733 --> 10:15.533
+and things like that set up.
+
+10:15.566 --> 10:17.333
+I just use that for recording videos.
+
+10:17.366 --> 10:20.266
+But if you have... You can use
+
+10:20.300 --> 10:23.333
+the built-in mic in your laptop if you have one.
+
+10:23.366 --> 10:25.233
+I would strongly suggest if you do that,
+
+10:25.266 --> 10:28.233
+try to minimize the noise. Go into a quiet room
+
+10:28.266 --> 10:30.700
+and make sure there's no washing machine
+
+10:30.733 --> 10:32.700
+or anything going off right now,
+
+10:32.733 --> 10:35.266
+because people do not... They can handle,
+
+10:35.300 --> 10:36.866
+you know, not the greatest quality of video.
+
+10:36.900 --> 10:38.400
+But when it comes to audio, picky
+
+10:38.400 --> 10:40.733
+people are a lot more pickier when it comes to that.
+
+10:40.766 --> 10:43.100
+Next is don't start with recording the face.
+
+10:43.133 --> 10:44.700
+Voice and screen are just fine.
+
+10:44.733 --> 10:49.000
+Personally, I feel when I started recording my face,
+
+10:49.000 --> 10:51.133
+it made it harder in a sense,
+
+10:51.166 --> 10:53.666
+because now I was just not only concentrating
+
+10:53.700 --> 10:55.433
+on what I was showing, how it was sounding,
+
+10:55.466 --> 10:58.000
+but how I look, if I was making any faces like that.
+
+10:58.000 --> 11:01.233
+It's just one less thing to have on your brain
+
+11:01.266 --> 11:02.133
+when you're recording.
+
+11:02.166 --> 11:05.133
+Another thing is that when I started recording,
+
+11:05.166 --> 11:08.266
+I was very passionate or excited about doing this.
+
+11:08.300 --> 11:10.866
+What I would do is--I took that to the advantage--
+
+11:10.900 --> 11:13.700
+is that I just recorded a lot of videos
+
+11:13.733 --> 11:16.333
+in one go or in sessions.
+
+11:16.366 --> 11:18.300
+As soon as I recorded, start the next one,
+
+11:18.333 --> 11:20.866
+next one, et cetera. I strongly believe that helped
+
+11:20.900 --> 11:22.100
+because later down the road,
+
+11:22.133 --> 11:24.833
+once I got busy with work or life or whatever,
+
+11:24.866 --> 11:26.866
+I didn't really have to worry about making time.
+
+11:26.900 --> 11:28.433
+I already had a batch ready to go
+
+11:28.466 --> 11:31.500
+that I can just slowly pull out and edit and upload.
+
+11:31.533 --> 11:35.033
+That's something helpful whenever you know work is slow
+
+11:35.066 --> 11:37.333
+or your vacations or things like that, you want to record,
+
+11:37.366 --> 11:39.266
+just go for it.
+
+11:39.300 --> 11:43.066
+Another one is when you are editing, you can use pauses
+
+11:43.100 --> 11:45.666
+so that it's easier to edit
+
+11:45.700 --> 00:11:48.159
+because what happens to... At least this
+
+00:11:48.160 --> 00:11:48.880
+is what happened to me
+
+00:11:48.881 --> 11:49.700
+when I was beginning,
+
+11:49.733 --> 11:53.000
+I would say, oh I can mumble fumble,
+
+11:53.000 --> 00:11:54.500
+you know, do a lot of verbal fillers,
+
+00:11:54.501 --> 00:11:55.833
+and I can just edit it,
+
+11:55.866 --> 11:57.233
+but if you don't do any pauses
+
+11:57.266 --> 00:12:01.560
+it's hard to fix the mistakes,
+
+00:12:01.561 --> 12:03.400
+the things that you don't want people seeing
+
+12:03.400 --> 00:12:05.839
+because then it doesn't blend well
+
+00:12:05.840 --> 12:08.300
+if you do editing. If you do any editing,
+
+12:08.333 --> 12:09.500
+you know what I'm talking about,
+
+12:09.533 --> 12:12.033
+because then there's chops of audio
+
+12:12.066 --> 00:12:13.840
+from the previous clip.
+
+00:12:13.841 --> 12:17.266
+Trying to edit... There's ways to mitigate that,
+
+12:17.300 --> 12:19.500
+but my editing skills are very minimal.
+
+12:19.533 --> 12:21.833
+It's just what I need to know to get things done.
+
+12:21.866 --> 12:25.066
+Just using pauses helps out a lot.
+
+12:25.100 --> 12:26.066
+Another thing is that
+
+12:26.100 --> 12:30.133
+some people want to record in like super-high quality,
+
+12:30.166 --> 12:32.633
+you know, get the highest quality possible for the video.
+
+12:32.666 --> 12:34.900
+I would say instead of focusing on the video recording,
+
+12:34.933 --> 12:36.900
+focus on the audio, like I mentioned,
+
+12:36.933 --> 00:12:37.819
+because at the end of the day,
+
+00:12:37.820 --> 12:41.033
+we're in Emacs and we're only sharing text.
+
+12:41.066 --> 12:43.833
+You know, there's only so much definition
+
+12:43.866 --> 12:44.700
+that you can show on text.
+
+12:44.733 --> 12:48.400
+If anything, just increase the font. Simple as that.
+
+12:48.400 --> 12:50.666
+My personal favorite,
+
+12:50.700 --> 12:53.233
+or at least the one that I still encounter even now,
+
+12:53.266 --> 12:56.733
+is that when I'm recording, my voice still feels dry.
+
+12:56.766 --> 12:59.533
+Right when I'm about to record,
+
+12:59.566 --> 13:01.800
+all of a sudden, I get dry. I need to drink water.
+
+13:01.800 --> 13:03.900
+It feels uncomfortable. I get nervous
+
+13:03.933 --> 13:06.000
+because it's something new. I'm staring at myself.
+
+13:06.000 --> 00:13:08.599
+It's like, oh man, all the... I mentioned just extra things
+
+00:13:08.600 --> 00:13:10.119
+that I need to worry about.
+
+00:13:10.120 --> 13:13.466
+But all of this goes less with practice.
+
+13:13.500 --> 13:15.300
+The more you do it, the more comfortable you are.
+
+13:15.333 --> 13:17.066
+It's just like everything else.
+
+13:17.100 --> 13:18.400
+When you start learning guitar,
+
+13:18.400 --> 13:21.600
+your fingers are very hard. When you start learning piano,
+
+13:21.600 --> 13:24.866
+the independence of fingers don't want to work.
+
+13:24.900 --> 13:25.866
+When you're learning drums,
+
+13:25.900 --> 13:27.466
+each limb needs to be independent.
+
+13:27.500 --> 13:29.266
+It's very hard. You have to start very slow.
+
+13:29.300 --> 13:31.033
+Everything in life, you know, practice
+
+13:31.066 --> 00:13:33.439
+and it will get better. All right now .
+
+NOTE Details: Editing
+
+00:13:33.440 --> 00:13:34.852
+Editing, well, like I mentioned,
+
+00:13:34.853 --> 00:13:36.939
+this is not always going to be necessary,
+
+00:13:36.940 --> 00:13:37.894
+depending on your style.
+
+00:13:37.895 --> 00:13:41.100
+There's some Youtube Emacs creators
+
+13:41.133 --> 00:13:43.959
+that simply record everything in one go.
+
+00:13:43.960 --> 13:46.533
+They might get up, get a coffee or something,
+
+13:46.566 --> 13:48.100
+and they'll just leave that in the clip,
+
+13:48.133 --> 13:49.400
+which is totally fine.
+
+13:49.400 --> 13:51.933
+No shame. It's the way they they want to do the video.
+
+13:51.966 --> 13:54.666
+Sometimes they just don't have any time
+
+13:54.700 --> 00:13:56.925
+to edit the videos themselves
+
+00:13:56.926 --> 00:13:57.900
+or pay someone else to do it.
+
+13:57.933 --> 00:14:00.466
+What's the best next thing? just leave it as is,
+
+00:14:00.467 --> 00:14:04.300
+upload, and that's fine. That completely works.
+
+14:04.333 --> 14:07.466
+I will say that if you do end up editing
+
+14:07.500 --> 14:09.666
+or deciding to edit, and you want software
+
+14:09.700 --> 14:11.266
+I would say check out DaVinci Resolve.
+
+14:11.300 --> 14:14.666
+It's free. It's available on the three major OSes.
+
+14:14.700 --> 14:19.000
+Honestly, DaVinci Resolve by itself
+
+14:19.000 --> 14:20.833
+has a plethora of features.
+
+14:20.866 --> 14:27.233
+I personally, I only use like 5% max of the features.
+
+14:27.266 --> 14:29.433
+It's professional,
+
+14:29.466 --> 14:33.000
+it's like professional studio all the way, things like that.
+
+14:33.000 --> 14:35.466
+But yeah, I would say DaVinci Resolve
+
+14:35.500 --> 00:14:38.319
+is a pretty solid choice.
+
+NOTE Tips: Editing
+
+00:14:38.320 --> 14:40.933
+Okay, what about the tips for editing?
+
+14:40.966 --> 14:42.833
+Well, most of them are pretty straightforward.
+
+14:42.866 --> 00:14:46.039
+Just learn enough to get going, like in all things.
+
+00:14:46.040 --> 14:48.266
+Like if you have a band practice
+
+14:48.300 --> 14:50.333
+and you're rehearsing a song,
+
+14:50.366 --> 14:52.100
+you just need to know the chords,
+
+14:52.133 --> 14:53.233
+you don't need to know improvise,
+
+14:53.266 --> 14:55.733
+just enough to get you through this gig
+
+14:55.766 --> 14:57.933
+that you're playing. That's pretty much it.
+
+14:57.966 --> 14:59.900
+Of course, learn the keyboard shortcuts.
+
+14:59.933 --> 15:02.266
+We all come from Emacs, so we all know how valuable,
+
+15:02.300 --> 15:05.133
+how much we treasure shortcuts to avoid the mouse.
+
+15:05.166 --> 15:06.833
+unfortunately since you're editing,
+
+15:06.866 --> 15:08.433
+you will still have to use the mouse,
+
+15:08.466 --> 15:10.666
+but the more keyboard shortcuts you use,
+
+15:10.700 --> 15:13.633
+the less the mouse is used. So there's that.
+
+15:13.666 --> 15:17.100
+One thing is that--I didn't know you can actually do this
+
+15:17.133 --> 15:18.900
+until I started editing--
+
+15:18.933 --> 15:22.733
+is that you can play the speed of the video in 2x.
+
+15:22.766 --> 15:24.900
+For me this is great because
+
+15:24.933 --> 15:28.200
+since I'm mainly just listening for pauses in my video,
+
+15:28.200 --> 15:29.900
+I just wait until there's silence.
+
+15:29.933 --> 15:31.233
+Oh, that's the part I need to trim,
+
+15:31.266 --> 15:35.233
+or that's the part I need to remove. Simple as that.
+
+15:35.266 --> 15:37.800
+Also batch edit, the same thing
+
+15:37.800 --> 15:41.500
+as I said about recording videos, just do it in batch.
+
+15:41.533 --> 15:44.000
+You can also just batch edit as well.
+
+NOTE Details: Uploading
+
+15:44.000 --> 15:48.033
+Uploading, the final step. YouTube,
+
+15:48.066 --> 15:49.600
+if you do end up using YouTube
+
+15:49.600 --> 15:52.466
+which is the most popular choice for uploading videos,
+
+15:52.500 --> 00:15:55.119
+is that the uploading process
+
+00:15:55.120 --> 15:56.000
+is pretty straightforward.
+
+15:56.000 --> 15:58.433
+I imagine this is the same for every other platform
+
+15:58.466 --> 16:01.000
+that you choose. It's pretty straightforward,
+
+16:01.000 --> 00:16:04.119
+but it can be a little complicated
+
+00:16:04.120 --> 00:16:06.819
+depending on what you want to do.
+
+NOTE Tips: Uploading
+
+00:16:06.820 --> 16:09.066
+What are my tips for uploading?
+
+16:09.100 --> 16:10.866
+Well, first of all, at minimum,
+
+16:10.900 --> 16:13.266
+you need to have a descriptive title
+
+16:13.300 --> 16:16.100
+and a description of what you talk about in the video,
+
+16:16.133 --> 16:20.733
+just to help out with SEO and things like that
+
+16:20.766 --> 16:24.433
+when people are searching for Emacs on YouTube.
+
+16:24.466 --> 00:16:25.479
+Also, if possible, use a thumbnail.
+
+00:16:25.480 --> 16:29.466
+There's a whole community about Emacs creators
+
+16:29.500 --> 16:32.100
+discussing best practices to get the highest engagement,
+
+16:32.133 --> 16:34.733
+how to get people watching your videos, things like that,
+
+16:34.766 --> 00:16:35.579
+and one of the things
+
+00:16:35.580 --> 16:39.133
+is they highly recommend a thumbnail.
+
+16:39.166 --> 16:42.666
+If you mainly watch, or if you watch any Emacs content,
+
+16:42.700 --> 16:45.000
+a lot of us do not use thumbnails,
+
+16:45.000 --> 16:46.333
+and that's perfectly fine.
+
+16:46.366 --> 16:48.633
+I think the Emacs community is pretty used
+
+16:48.666 --> 16:51.133
+to just watching videos with just a thumbnail,
+
+16:51.166 --> 16:52.933
+it's just a screenshot of the video,
+
+16:52.966 --> 00:16:55.019
+and we just go there for the content, right?
+
+00:16:55.020 --> 16:57.900
+We're not really going there for anything else,
+
+16:57.933 --> 00:17:01.899
+for the knowledge that the person is spreading.
+
+00:17:01.900 --> 17:04.433
+I say that it can be as simple or as complex,
+
+17:04.466 --> 00:17:07.219
+because if your goal is to potentially
+
+00:17:07.220 --> 17:08.633
+earn revenue down the line,
+
+17:08.666 --> 17:11.933
+you will want to spend some time configuring
+
+17:11.966 --> 00:17:17.459
+some of the settings for uploading, like the tags,
+
+00:17:17.460 --> 17:18.733
+I forget what they're called, but they're
+
+17:18.766 --> 00:17:20.875
+a little embedded so that people can watch
+
+00:17:20.876 --> 00:17:22.233
+other videos and things like that.
+
+17:22.266 --> 17:25.500
+So there's a plethora of options, an abundance of options.
+
+17:25.533 --> 17:27.300
+Honestly, there's too many,
+
+17:27.333 --> 17:31.300
+but it all depends if you potentially want
+
+17:31.333 --> 17:33.066
+to make some type of income in the future
+
+17:33.100 --> 17:35.033
+with Emacs, making videos on Emacs.
+
+17:35.066 --> 17:37.700
+And yeah, that's just something
+
+17:37.733 --> 17:39.666
+that you will have to discover
+
+17:39.700 --> 17:42.633
+and read and learn more about what the Emacs community,
+
+17:42.666 --> 00:17:45.133
+Emacs creator community suggest,
+
+00:17:45.134 --> 00:17:47.200
+and best practices and things like that.
+
+17:47.200 --> 17:48.933
+But if anybody ever wants to talk about it,
+
+17:48.966 --> 17:50.266
+feel free to reach out to me.
+
+17:50.300 --> 00:17:54.579
+I would love to talk about things
+
+00:17:54.580 --> 00:17:55.740
+about YouTube and all this,
+
+00:17:55.741 --> 00:17:58.440
+because I find it interesting. Potentially, hopefully,
+
+00:17:58.441 --> 00:18:01.259
+one day, I'll be able to make some revenue.
+
+00:18:01.260 --> 18:03.066
+Hopefully, maybe some of you guys
+
+18:03.100 --> 18:04.266
+might knock it out of the park
+
+18:04.300 --> 18:06.133
+with what I'm going to talk about next.
+
+NOTE Your secret sauce
+
+18:06.166 --> 18:10.866
+That is your secret sauce. This is your ultimate weapon
+
+18:10.900 --> 18:13.466
+as to get viewers, to get subscribers, you know,
+
+18:13.500 --> 18:14.733
+to get anybody that wants
+
+18:14.766 --> 18:17.266
+to watch your... to reach a higher audience.
+
+18:17.300 --> 18:20.200
+That can be your humor. You might be naturally funny.
+
+18:20.200 --> 18:21.500
+You can make comments.
+
+18:21.533 --> 18:24.700
+You have a natural skill on the way you talk,
+
+18:24.733 --> 18:26.300
+on the way you articulate things,
+
+18:26.333 --> 18:29.300
+so you might be able to get people drawn to that,
+
+18:29.333 --> 18:32.733
+or you might be someone who just does animations
+
+18:32.766 --> 18:35.700
+for your videos, which does highly well as well.
+
+18:35.733 --> 18:38.633
+or you can do a mix of all these.
+
+18:38.666 --> 18:40.500
+You can just insert your superpower
+
+18:40.533 --> 18:42.700
+whatever you want. You can go ahead
+
+18:42.733 --> 18:45.266
+and use that to your advantage
+
+18:45.300 --> 18:47.100
+to grow user base, a viewer base.
+
+18:47.133 --> 18:50.000
+Hopefully, if all things align,
+
+18:50.000 --> 18:52.600
+you'll be able to get paid
+
+18:52.600 --> 18:56.200
+to also create Emacs videos soon, spread the knowledge,
+
+18:56.200 --> 18:58.800
+which would be pretty cool--become an Emacs influencer,
+
+18:58.800 --> 19:00.200
+which is the goal, right? Okay.
+
+19:00.200 --> 19:03.800
+I believe I painted this in a pretty good light,
+
+19:03.800 --> 19:04.900
+at least personal opinion.
+
+NOTE Cons of YouTube
+
+19:04.933 --> 19:07.900
+But like everything, every good also has a bad.
+
+19:07.933 --> 19:09.666
+Nothing is always perfect.
+
+19:09.700 --> 19:11.633
+That's also the same for Youtube.
+
+19:11.666 --> 19:14.466
+What are the bads of Youtube?
+
+19:14.500 --> 19:18.266
+Well, it's not going to be an overnight success.
+
+19:18.300 --> 19:21.533
+That is very very rare. You're not going to create a video
+
+19:21.566 --> 19:24.900
+and then all of a sudden get like a hundred thousand views.
+
+19:24.933 --> 19:27.200
+I believe by from what I've seen in the community
+
+19:27.200 --> 19:29.033
+if a video gets over 10k
+
+19:29.066 --> 19:33.100
+that it means that it did really well in the Emacs community.
+
+19:33.133 --> 19:38.300
+I think on average is under 3k for a video within...
+
+19:38.333 --> 19:40.466
+This is within the time span of
+
+19:40.500 --> 19:43.333
+I'd say like two weeks or so or a month, around there.
+
+19:43.366 --> 19:46.066
+So it varies. All these metrics you'll learn
+
+19:46.100 --> 19:48.466
+if you really actually want to be able
+
+19:48.500 --> 19:50.066
+to create something in the Emacs...
+
+19:50.100 --> 19:53.266
+But like I said, it does take work and it does take time.
+
+19:53.300 --> 19:56.733
+Another thing is that negative feedback people are very quick
+
+19:56.766 --> 20:00.533
+as we all have been accustomed to that.
+
+20:00.566 --> 20:04.300
+People are do not shy from being very negative.
+
+20:04.333 --> 20:07.833
+It is so easy to just say negative and mean things online
+
+20:07.866 --> 20:09.900
+because there's no repercussions.
+
+20:09.933 --> 20:12.666
+I don't understand why people do that, but it is what it is.
+
+20:12.700 --> 20:17.500
+But most of these comments are from the younger population.
+
+20:17.533 --> 20:20.700
+You know, just ignore them.
+
+20:20.733 --> 20:22.866
+Most of the time, they're just ignorant.
+
+20:22.900 --> 20:24.066
+They don't know what they're saying.
+
+20:24.100 --> 20:27.800
+It will help you get them, you know, grow some thick skin.
+
+20:27.800 --> 20:30.133
+If you already have thick skin, then you don't.
+
+20:30.166 --> 20:31.833
+This is not going to be a problem.
+
+20:31.866 --> 20:35.233
+But most of the negative comments that I've receive our
+
+20:35.266 --> 20:38.066
+or childish, I would say,
+
+20:38.100 --> 20:42.700
+that it's not really based on anything that has substance.
+
+20:42.733 --> 20:44.400
+Yeah, just ignore it. It's fine.
+
+20:44.400 --> 20:46.066
+It's not going to affect your day.
+
+20:46.100 --> 20:47.100
+"Don't let it affect your day"
+
+20:47.133 --> 20:48.866
+is the most important thing.
+
+20:48.900 --> 20:51.466
+Third, like I was mentioning, revenue is very hard
+
+20:51.500 --> 20:54.700
+to get monetized on by YouTube standards.
+
+20:54.733 --> 20:58.600
+That will definitely take some time and dedication.
+
+20:58.600 --> 21:01.300
+But if you really want it, you will work for it.
+
+21:01.333 --> 21:03.266
+Hopefully all of us,
+
+21:03.300 --> 21:05.866
+the people that are constantly creating content
+
+21:05.900 --> 21:09.233
+via these platforms are able to get compensated
+
+21:09.266 --> 21:10.400
+in some way or another,
+
+21:10.400 --> 21:13.000
+because we do share it because we love it,
+
+21:13.000 --> 21:15.833
+but also it would be nice to get some compensation.
+
+21:15.866 --> 21:17.933
+I'm not speaking for everybody. I'm speaking personally
+
+21:17.966 --> 21:22.133
+because time is a valuable asset.
+
+21:22.166 --> 21:23.866
+You can choose what you want to spend it
+
+21:23.900 --> 21:25.866
+and right now I'm having fun making videos.
+
+21:25.900 --> 21:29.733
+That's what I'm deciding to spend it.
+
+21:29.766 --> 21:31.866
+But yeah now, with all this that I've said,
+
+21:31.900 --> 21:36.033
+there's only one question that I want to ask all of you,
+
+21:36.066 --> 21:40.266
+and that is: what are you going to share?
diff --git a/2024/captions/emacsconf-2024-shell--emacs-as-a-shell--christopher-howard--main--chapters.vtt b/2024/captions/emacsconf-2024-shell--emacs-as-a-shell--christopher-howard--main--chapters.vtt
new file mode 100644
index 00000000..2f81b8be
--- /dev/null
+++ b/2024/captions/emacsconf-2024-shell--emacs-as-a-shell--christopher-howard--main--chapters.vtt
@@ -0,0 +1,44 @@
+WEBVTT
+
+
+00:00:02.940 --> 00:00:37.880
+Introduction
+
+00:00:37.881 --> 00:01:38.559
+What do I mean by shell?
+
+00:01:38.560 --> 00:04:50.159
+What I do not mean
+
+00:04:50.160 --> 00:09:26.911
+What is a shell?
+
+00:09:26.912 --> 00:11:57.299
+Launching external processes
+
+00:11:57.300 --> 00:14:33.413
+Environment variables
+
+00:14:54.400 --> 00:16:02.546
+Processes
+
+00:17:00.180 --> 00:20:07.719
+Redirecting and pipelining input and output
+
+00:20:09.440 --> 00:21:01.999
+Scripts
+
+00:21:11.780 --> 00:23:30.079
+File system management
+
+00:23:43.560 --> 00:24:23.639
+Networking
+
+00:24:30.120 --> 00:34:21.127
+A brief tour of Eshell
+
+00:34:21.128 --> 00:36:36.979
+Login shell
+
+00:36:36.980 --> 00:37:13.000
+Resources
diff --git a/2024/captions/emacsconf-2024-shell--emacs-as-a-shell--christopher-howard--main.vtt b/2024/captions/emacsconf-2024-shell--emacs-as-a-shell--christopher-howard--main.vtt
new file mode 100644
index 00000000..7f16a859
--- /dev/null
+++ b/2024/captions/emacsconf-2024-shell--emacs-as-a-shell--christopher-howard--main.vtt
@@ -0,0 +1,1142 @@
+WEBVTT captioned by mark
+
+NOTE Introduction
+
+00:00:02.940 --> 00:00:08.719
+Welcome to Emacs as a Shell, a talk by Christopher Howard for
+
+00:00:08.720 --> 00:00:13.799
+Emacs Conference 2024.
+
+00:00:13.800 --> 00:00:18.399
+In this talk, I would like to explore, or advocate for, a
+
+00:00:18.400 --> 00:00:21.919
+particular perspective. I want to encourage people to
+
+00:00:21.920 --> 00:00:26.479
+think of Emacs not as simply an editor or a development
+
+00:00:26.480 --> 00:00:31.119
+environment, but rather as a shell, or at least something
+
+00:00:31.120 --> 00:00:33.919
+that allows us to do most of the things that we might
+
+00:00:33.920 --> 00:00:37.880
+otherwise want to do from a shell.
+
+NOTE What do I mean by shell?
+
+00:00:37.881 --> 00:00:40.839
+What do I mean by shell? By
+
+00:00:40.840 --> 00:00:45.439
+shell, I mean basically an interface that allows us to
+
+00:00:45.440 --> 00:00:50.679
+interact with the rest of our system by entering commands.
+
+00:00:50.680 --> 00:00:55.039
+That definition is, perhaps, a little too broad, and so I
+
+00:00:55.040 --> 00:00:58.439
+will try to narrow it down with a list of features that,
+
+00:00:58.440 --> 00:01:03.279
+historically, we have come to expect from a shell. The Bash
+
+00:01:03.280 --> 00:01:07.719
+shell is one very portable and well-known shell, and for
+
+00:01:07.720 --> 00:01:13.599
+many of us it is maybe the prototypical example. But in the
+
+00:01:13.600 --> 00:01:16.879
+past there have been many other shells, and there are other
+
+00:01:16.880 --> 00:01:21.119
+shells available today. If we are willing to be flexible in
+
+00:01:21.120 --> 00:01:25.559
+our thinking, we can think of Emacs as being a shell, or at
+
+00:01:25.560 --> 00:01:28.879
+least providing most of the functionality that we expect
+
+00:01:28.880 --> 00:01:38.559
+from a shell.
+
+NOTE What I do not mean
+
+00:01:38.560 --> 00:01:42.759
+Before further expanding on this idea, I must emphasize
+
+00:01:42.760 --> 00:01:47.159
+what I do not mean. First of all, I am not talking about
+
+00:01:47.160 --> 00:01:51.439
+running Bash, or some other external shell, from within
+
+00:01:51.440 --> 00:01:56.439
+Emacs, although this is certainly possible. I am arguing,
+
+00:01:56.440 --> 00:02:02.439
+rather, for using Emacs as a shell, instead of other shells.
+
+00:02:02.440 --> 00:02:06.239
+Second, I do not mean running a terminal emulator from
+
+00:02:06.240 --> 00:02:11.399
+within Emacs. Emacs has a built-in terminal emulator, but
+
+00:02:11.400 --> 00:02:15.839
+this is not what I mean. A terminal emulator is essentially a
+
+00:02:15.840 --> 00:02:20.039
+program designed to control the cursor and text appearance
+
+00:02:20.040 --> 00:02:23.999
+in response to various control codes in order to mimic a
+
+00:02:24.000 --> 00:02:28.439
+terminal display device. There are certainly legitimate
+
+00:02:28.440 --> 00:02:32.559
+reasons to do this. Nevertheless, in general, it does not
+
+00:02:32.560 --> 00:02:36.519
+make much sense to run a terminal emulator within Emacs,
+
+00:02:36.520 --> 00:02:39.719
+because Emacs has its own commands for controlling the
+
+00:02:39.720 --> 00:02:45.039
+cursor and text appearance. Also, due to the way Emacs was
+
+00:02:45.040 --> 00:02:48.919
+designed historically, Emacs itself believes that it is
+
+00:02:48.920 --> 00:02:53.119
+running on a terminal. So you end up with layers upon layers
+
+00:02:53.120 --> 00:02:58.199
+of terminal emulation. Anyhow, at the end of the day, Emacs
+
+00:02:58.200 --> 00:03:01.839
+will not perform as well as a dedicated terminal emulator
+
+00:03:01.840 --> 00:03:08.079
+program. I also think that, as we try to force ANSI terminal
+
+00:03:08.080 --> 00:03:12.359
+emulation into our Emacs workflow, this ultimately will be
+
+00:03:12.360 --> 00:03:15.879
+a hindrance to us in taking advantage of the natural and
+
+00:03:15.880 --> 00:03:19.319
+pleasant interfaces that are already available to us
+
+00:03:19.320 --> 00:03:24.999
+within Emacs. In brief, if your goal is simply to figure out
+
+00:03:25.000 --> 00:03:28.499
+how to be able to do all your normal Bash command line
+
+00:03:28.500 --> 00:03:32.359
+wizardry from within an Emacs window instead of a GNOME
+
+00:03:32.360 --> 00:03:36.479
+console window, you are headed down a different set of train
+
+00:03:36.480 --> 00:03:43.199
+tracks than I am. Also, something which I fear may confuse
+
+00:03:43.200 --> 00:03:47.919
+the issue for some viewers is the fact that Emacs ships with
+
+00:03:47.920 --> 00:03:52.839
+its own unique built-in shell, called the Emacs shell, or
+
+00:03:52.840 --> 00:03:59.079
+Eshell.
+
+00:03:59.080 --> 00:04:02.959
+Eshell aims to be a legitimate shell, and provides a very
+
+00:04:02.960 --> 00:04:07.599
+similar experience to other shells like Bash, while being
+
+00:04:07.600 --> 00:04:11.119
+well integrated into the Emacs interface, and without
+
+00:04:11.120 --> 00:04:15.639
+giving up the power of the Emacs Lisp engine. Eshell will be
+
+00:04:15.640 --> 00:04:19.139
+mentioned multiple times in this talk. The entire talk
+
+00:04:19.140 --> 00:04:24.179
+could, in fact, be about Eshell, except that I want the talk
+
+00:04:24.180 --> 00:04:28.319
+to cover all aspects of Emacs shell-like functionality
+
+00:04:28.320 --> 00:04:32.079
+through its other tools, such as interactive commands and
+
+00:04:32.080 --> 00:04:37.079
+special modes. So, hopefully we can keep distinct in our
+
+00:04:37.080 --> 00:04:43.279
+mind the ideas of Emacs as a shell versus the Emacs shell,
+
+00:04:43.880 --> 00:04:50.159
+though the latter is an important part of the former.
+
+NOTE What is a shell?
+
+00:04:50.160 --> 00:04:55.399
+Let's get back to the fundamental idea of what is a shell. In
+
+00:04:55.400 --> 00:04:59.159
+the broadest definition, a shell is an interface which
+
+00:04:59.160 --> 00:05:02.279
+allows you to interact with your operating system through
+
+00:05:02.280 --> 00:05:06.840
+commands. However, from a historical perspective, there
+
+00:05:06.841 --> 00:05:10.699
+are a few basic capabilities which we expect to be part of
+
+00:05:10.700 --> 00:05:17.880
+every shell.
+
+00:05:17.881 --> 00:05:21.420
+First of all, the shell provides a means of launching
+
+00:05:21.421 --> 00:05:26.440
+external programs. Some internal or built-in commands
+
+00:05:26.441 --> 00:05:31.679
+might also be made available. Second, the shell provides a
+
+00:05:31.680 --> 00:05:36.820
+means of managing environment variables. In the past,
+
+00:05:36.821 --> 00:05:40.580
+environment variables often played a critical role as a
+
+00:05:40.581 --> 00:05:45.360
+means of passing in options, file names, device names, and
+
+00:05:45.361 --> 00:05:50.119
+suchlike to external programs. This is not quite as common
+
+00:05:50.120 --> 00:05:54.080
+today, but the environment still plays a critical role in
+
+00:05:54.081 --> 00:05:57.619
+managing things such as the path to executables and
+
+00:05:57.620 --> 00:06:03.080
+libraries, as well as various other user, desktop, and
+
+00:06:03.081 --> 00:06:08.280
+system settings. The shell modifies the environment and
+
+00:06:08.281 --> 00:06:11.620
+passes it on to external programs.
+
+00:06:13.540 --> 00:06:17.580
+Historically, job control was expected to be either a
+
+00:06:17.581 --> 00:06:21.560
+function of the shell, or easily accessible from it.
+
+00:06:21.561 --> 00:06:24.019
+Usually today, our personal computing is not
+
+00:06:24.020 --> 00:06:29.280
+batch-oriented. But typically, shells can run multiple
+
+00:06:29.281 --> 00:06:34.599
+processes simultaneously, as well as provide means to
+
+00:06:34.600 --> 00:06:38.780
+suspend and terminate processes, which are useful
+
+00:06:38.781 --> 00:06:44.880
+features. Shells should be able to redirect and pipeline
+
+00:06:44.881 --> 00:06:49.100
+process input and output. This allows the user to connect
+
+00:06:49.101 --> 00:06:53.880
+process input and output with files, devices, or other
+
+00:06:53.881 --> 00:06:58.813
+processes. Finally, shells are expected to have some
+
+00:06:58.814 --> 00:07:02.380
+limited scripting capability, such as the
+
+00:07:02.381 --> 00:07:06.613
+POSIX-compliant set of program statements and
+
+00:07:06.614 --> 00:07:08.880
+conditionals that Bash provides.
+
+00:07:11.100 --> 00:07:15.113
+As command-line wizards, there are a number of tasks we
+
+00:07:15.114 --> 00:07:18.280
+expect to be able to do quickly and easily from our shell,
+
+00:07:18.660 --> 00:07:21.646
+even though these tasks are not the domain of the shell
+
+00:07:21.647 --> 00:07:27.880
+itself. A common task is file management and navigation. We
+
+00:07:27.881 --> 00:07:31.113
+quickly navigate and manipulate the file system with
+
+00:07:31.114 --> 00:07:34.813
+standard utilities that do things like change the current
+
+00:07:34.814 --> 00:07:39.380
+working directory, rename files, move files, and delete
+
+00:07:39.381 --> 00:07:44.146
+files. We usually expect to have access to some additional
+
+00:07:44.147 --> 00:07:48.380
+process management utilities. These allow us to do things
+
+00:07:48.381 --> 00:07:51.780
+such as find out the status of all processes running on the
+
+00:07:51.781 --> 00:07:57.980
+system, and send signals to processes. Finally, we expect
+
+00:07:57.981 --> 00:08:02.113
+to have access to some basic networking utilities. For
+
+00:08:02.114 --> 00:08:05.413
+example, we should be able to run commands that set up
+
+00:08:05.414 --> 00:08:09.513
+network interfaces, ping computers, and download files.
+
+00:08:09.514 --> 00:08:16.080
+With a little reflection, we can see that Emacs can provide
+
+00:08:16.081 --> 00:08:20.146
+all or nearly all of the functionality we have described so
+
+00:08:20.147 --> 00:08:24.046
+far. And the functionality can be called conveniently
+
+00:08:24.047 --> 00:08:26.746
+through one of several methods.
+
+00:08:33.520 --> 00:08:43.846
+Either a normal interactive call, like M-x something, or a
+
+00:08:43.847 --> 00:08:46.013
+call to an elisp function,
+
+00:08:53.620 --> 00:09:01.180
+or through Eshell commands, or through some special buffer
+
+00:09:01.181 --> 00:09:06.946
+mode, such as the directory editor, which provides its own
+
+00:09:06.947 --> 00:09:09.413
+interface to some functionality.
+
+00:09:09.414 --> 00:09:17.413
+It may be going too far to say that Emacs is a full replacement
+
+00:09:17.414 --> 00:09:21.713
+for shells like Bash. Nevertheless, we can see that Emacs
+
+00:09:21.714 --> 00:09:25.680
+can do most of the things that we might otherwise do with our
+
+00:09:25.681 --> 00:09:26.911
+shell.
+
+NOTE Launching external processes
+
+00:09:26.912 --> 00:09:32.513
+Let us give some examples. First, can Emacs launch
+
+00:09:32.514 --> 00:09:36.680
+external commands? Of course. Now, there are something
+
+00:09:36.681 --> 00:09:40.446
+like a half-dozen different ways to do that within Emacs, and
+
+00:09:40.447 --> 00:09:46.713
+some are more convenient than others. From any Elisp
+
+00:09:46.714 --> 00:09:50.780
+program, we can call functions like make-process and
+
+00:09:50.781 --> 00:09:53.913
+call-process to launch external processes.
+
+00:10:12.460 --> 00:10:16.846
+These, however, generally are not convenient for quick,
+
+00:10:16.847 --> 00:10:22.380
+one-off commands. Another option would be to run Eshell,
+
+00:10:22.381 --> 00:10:26.580
+which would allow us to call the external program from a
+
+00:10:26.581 --> 00:10:28.946
+familiar command line prompt.
+
+00:10:34.160 --> 00:10:38.880
+If we do not actually want to drop into Eshell just to run one
+
+00:10:38.881 --> 00:10:42.213
+command, we also have the interactive command,
+
+00:10:42.214 --> 00:10:44.613
+eshell-command,
+
+00:10:52.420 --> 00:10:56.746
+which would allow us to call the external program from a
+
+00:10:56.747 --> 00:10:59.180
+familiar command line prompt.
+
+00:11:09.940 --> 00:11:12.080
+If we do not actually want to drop an
+
+00:11:12.081 --> 00:11:15.699
+Eshell just to run one command, as I just mentioned, we also
+
+00:11:15.700 --> 00:11:19.799
+have the interactive command eshell-command, which allows
+
+00:11:19.800 --> 00:11:23.399
+us to enter in a one-off command and run that immediately.
+
+00:11:25.420 --> 00:11:28.799
+And finally, there is also an interactive command called
+
+00:11:28.800 --> 00:11:30.499
+simply shell-command.
+
+00:11:34.600 --> 00:11:39.099
+Shell command is like Eshell command, but instead passes
+
+00:11:39.100 --> 00:11:42.899
+the command off to our system shell, for example, bash.
+
+00:11:43.940 --> 00:11:48.599
+This is cheating, of course, but it might be useful or convenient
+
+00:11:48.600 --> 00:11:57.299
+in some scenarios.
+
+NOTE Environment variables
+
+00:11:57.300 --> 00:12:01.899
+Regarding environment variables, Emacs can read and
+
+00:12:01.900 --> 00:12:05.399
+manipulate the environment variables, which in turn get
+
+00:12:05.400 --> 00:12:09.659
+passed on to processes which it launches. The
+
+00:12:09.660 --> 00:12:12.899
+general-purpose interactive commands for this are
+
+00:12:12.900 --> 00:12:18.499
+getenv and setenv. These commands
+
+00:12:18.500 --> 00:12:21.799
+deal with the one environment that is available throughout
+
+00:12:21.800 --> 00:12:25.699
+all parts of your running Emacs session. In other words,
+
+00:12:25.700 --> 00:12:28.999
+these functions deal with a global environment, which is
+
+00:12:29.000 --> 00:12:32.099
+the same wherever you are running getenv or
+
+00:12:32.100 --> 00:12:34.399
+setenv.
+
+00:13:00.340 --> 00:13:04.259
+An important exception is that every instance of Eshell
+
+00:13:04.260 --> 00:13:07.599
+maintains a distinct environment that will not be affected
+
+00:13:07.600 --> 00:13:13.980
+by setenv calls run in other buffers. Also, Eshell
+
+00:13:13.981 --> 00:13:16.446
+has some additional syntax for dealing with its
+
+00:13:16.447 --> 00:13:20.780
+environment, including the set and export syntax.
+
+00:13:38.647 --> 00:13:47.113
+Regarding job control and process management, Emacs does
+
+00:13:47.114 --> 00:13:50.880
+not provide job control in the way that Bash users are used
+
+00:13:50.881 --> 00:13:57.080
+to. We can, however, launch asynchronous processes, and do
+
+00:13:57.081 --> 00:14:01.580
+various things to them. From Eshell, or an eshell-command
+
+00:14:01.581 --> 00:14:07.180
+call, we can append the ampersand symbol to the command, and
+
+00:14:07.181 --> 00:14:11.013
+this will cause the process to run asynchronously in a
+
+00:14:11.014 --> 00:14:13.313
+dedicated buffer.
+
+00:14:20.881 --> 00:14:25.280
+Now, if the command is launched from Eshell, it will not
+
+00:14:25.281 --> 00:14:31.180
+actually run in a separate buffer, but the output will go to
+
+00:14:31.181 --> 00:14:33.413
+the Eshell buffer.
+
+NOTE Processes
+
+00:14:54.400 --> 00:14:59.580
+We can run the interactive command list-processes to see
+
+00:14:59.581 --> 00:15:02.846
+all the processes running for our current Emacs session.
+
+00:15:11.747 --> 00:15:17.646
+In Eshell, we can run the command "jobs" to get the same list.
+
+00:15:17.647 --> 00:15:22.813
+This will show the process name, process buffer name,
+
+00:15:22.814 --> 00:15:28.613
+process ID, and some other information. We can select the
+
+00:15:28.614 --> 00:15:32.880
+process buffer in the process list to bring up that process
+
+00:15:32.881 --> 00:15:36.213
+buffer.
+
+00:15:42.414 --> 00:15:47.046
+We can also use the interactive command signal-process to
+
+00:15:47.047 --> 00:15:52.980
+send any signal to a process, including "stop" to suspend the
+
+00:15:52.981 --> 00:15:58.380
+process, "continue" to resume the process, and "interrupt" or
+
+00:15:58.381 --> 00:16:02.546
+kill to terminate the process.
+
+NOTE Redirecting and pipelining input and output
+
+00:17:00.180 --> 00:17:04.813
+Regarding redirecting and pipelining input and output,
+
+00:17:04.814 --> 00:17:11.613
+Eshell does support redirection similar to Bash, so you can
+
+00:17:11.614 --> 00:17:17.046
+overwrite and append to files and some other objects. Input
+
+00:17:17.047 --> 00:17:22.380
+redirection is not yet implemented, but it is on the Eshell
+
+00:17:22.381 --> 00:17:29.213
+to-do list. Eshell also has pipes. The default pipe, which
+
+00:17:29.214 --> 00:17:33.220
+uses the familiar vertical bar symbol, pipes the data
+
+00:17:33.221 --> 00:17:36.980
+between the commands using an intermediate Emacs buffer.
+
+00:17:36.981 --> 00:17:41.200
+This, while usually quite practical, is less efficient
+
+00:17:41.201 --> 00:17:46.319
+than the system pipe. Therefore, Eshell also makes
+
+00:17:46.320 --> 00:17:50.146
+available a star-modified version, which uses the system
+
+00:17:50.147 --> 00:17:52.546
+pipe through a call to your system shell.
+
+00:17:56.881 --> 00:17:59.413
+So we can do things like
+
+00:18:02.340 --> 00:18:05.860
+direct output to a file.
+
+00:18:15.100 --> 00:18:20.240
+We're unfortunately not able to do input redirection, but
+
+00:18:20.241 --> 00:18:22.540
+we can use pipes.
+
+00:18:41.760 --> 00:18:45.639
+Elisp can manipulate and tie together processes in various
+
+00:18:45.640 --> 00:18:50.999
+ways, such as process filters and pipe processes, but I
+
+00:18:51.000 --> 00:18:56.559
+won't attempt to cover that. I feel like you should mention
+
+00:18:56.560 --> 00:19:02.119
+again that we have two kinds of pipes here available. So this
+
+00:19:02.120 --> 00:19:09.239
+pipe, the standard one, will pipe the data through Emacs
+
+00:19:09.240 --> 00:19:16.759
+buffers. That's very practical in most cases, but it is less
+
+00:19:16.760 --> 00:19:22.919
+efficient than piping through the system pipe. So Eshell
+
+00:19:22.920 --> 00:19:28.119
+makes available another symbol for that, star, vertical
+
+00:19:28.120 --> 00:19:38.339
+bar, that allows you to explicitly use the system pipe.
+
+00:19:38.340 --> 00:19:43.599
+Regarding scripting: Of course, using Emacs makes
+
+00:19:43.600 --> 00:19:47.959
+available all the power of the Elisp API and third-party
+
+00:19:47.960 --> 00:19:54.719
+packages, so we have that out of the gate. Eshell also has
+
+00:19:54.720 --> 00:19:59.639
+control flow statements, like an "if" construct and a "for"
+
+00:19:59.640 --> 00:20:06.519
+construct. See the Eshell info manual, section 3.7, for
+
+00:20:06.520 --> 00:20:07.719
+more details.
+
+NOTE Scripts
+
+00:20:09.440 --> 00:20:13.839
+And if you wish to write a script entirely in Eshell syntax,
+
+00:20:13.840 --> 00:20:18.559
+and store it in a separate file, this is possible with recent
+
+00:20:18.560 --> 00:20:20.159
+versions of Emacs.
+
+00:20:31.840 --> 00:20:34.679
+Here's an example of a brief script that I wrote.
+
+00:20:37.560 --> 00:20:42.679
+Unfortunately, an eshell mode for proper syntax
+
+00:20:42.680 --> 00:20:46.279
+highlighting is not yet available, but hopefully that will
+
+00:20:46.280 --> 00:20:51.279
+be forthcoming. Note that Eshell syntax allows elisp
+
+00:20:51.280 --> 00:20:55.079
+forms to be interspersed with regular command form for
+
+00:20:55.080 --> 00:20:58.759
+additional scripting power. We will discuss this a little
+
+00:20:58.760 --> 00:21:01.999
+more later.
+
+NOTE File system management
+
+00:21:11.780 --> 00:21:16.759
+Regarding file system management. In Emacs, many of the
+
+00:21:16.760 --> 00:21:20.239
+common file system operations are available as
+
+00:21:20.240 --> 00:21:26.759
+interactive commands. For example, M-x cd, to change your
+
+00:21:26.760 --> 00:21:32.839
+buffer's current working directory, and other M-x commands
+
+00:21:32.840 --> 00:21:37.439
+such as make-directory
+
+00:21:40.780 --> 00:21:42.679
+chmod,
+
+00:21:43.260 --> 00:21:51.159
+and delete-file. Of course, you can also drop into Eshell,
+
+00:21:53.840 --> 00:22:00.639
+or use M-x eshell-command to run the usual external commands
+
+00:22:00.640 --> 00:22:07.039
+for file system manipulation. Also, a file manager is built
+
+00:22:07.040 --> 00:22:14.279
+into Emacs, which can be run by calling M-x dired.
+
+00:22:19.640 --> 00:22:24.559
+The directory editor is powerful, but it is a bit strange to
+
+00:22:24.560 --> 00:22:28.679
+folks expecting something like Midnight Commander or the
+
+00:22:28.680 --> 00:22:35.639
+GNOME file manager. It gives us a number of helpful features
+
+00:22:35.640 --> 00:22:43.639
+like the ability to mark files, and to run elisp functions on
+
+00:22:44.700 --> 00:22:48.439
+them, and some other interesting ways to manipulate and
+
+00:22:48.440 --> 00:22:54.079
+rename the files. However, third-party Emacs extensions
+
+00:22:54.080 --> 00:22:58.479
+such as Midnight Commander Mode and Sunrise Commander are
+
+00:22:58.480 --> 00:23:03.879
+available to provide a Midnight Commander experience, for those who
+
+00:23:03.880 --> 00:23:10.319
+prefer that sort of file management.
+
+00:23:10.320 --> 00:23:14.879
+Emacs also has the nifty TRAMP functionality built in,
+
+00:23:14.880 --> 00:23:19.159
+which allows you, most of the time, to easily edit files on
+
+00:23:19.160 --> 00:23:22.719
+other computers, as well as manipulate the file system.
+
+00:23:23.180 --> 00:23:27.839
+This transparently works through SSH and some other
+
+00:23:27.840 --> 00:23:30.079
+protocols that you can specify.
+
+NOTE Networking
+
+00:23:43.560 --> 00:23:48.159
+Regarding networking features, I don't have a lot of
+
+00:23:48.160 --> 00:23:51.639
+interesting things to say about this at the present, so I'll
+
+00:23:51.640 --> 00:23:54.919
+skip through this quickly. But if you do a little research,
+
+00:23:54.920 --> 00:23:58.799
+you will see that Emacs has a lot of functionality relating
+
+00:23:58.800 --> 00:24:02.359
+to making network connections, interacting with the web,
+
+00:24:02.780 --> 00:24:07.859
+and such like, both built-in and in available packages, as
+
+00:24:07.860 --> 00:24:14.399
+well as modes for doing things like Web browsing and Gemini
+
+00:24:14.400 --> 00:24:20.599
+browsing. And of course, you can run the usual standard
+
+00:24:20.600 --> 00:24:23.639
+networking commands for your system through Eshell.
+
+NOTE A brief tour of Eshell
+
+00:24:30.120 --> 00:24:33.759
+So having put forward the main arguments for this talk, I
+
+00:24:33.760 --> 00:24:38.199
+would like to take some time now to give a brief tour of a few of
+
+00:24:38.200 --> 00:24:43.799
+the features of Eshell, the Emacs shell. It bears
+
+00:24:43.800 --> 00:24:46.999
+emphasizing that Eshell is not a drop-in replacement for
+
+00:24:47.000 --> 00:24:51.879
+Bash, or even a Bash clone, though I believe the developers
+
+00:24:51.880 --> 00:24:56.839
+are trying to make much of the syntax very similar. Also,
+
+00:24:56.840 --> 00:25:00.479
+Eshell is not a terminal emulator, and it will not display
+
+00:25:00.480 --> 00:25:04.679
+correctly applications which use advanced ANSI control
+
+00:25:04.680 --> 00:25:10.119
+codes. However, Eshell can be configured to be aware of such
+
+00:25:10.120 --> 00:25:13.300
+applications, and to run them automatically within the
+
+00:25:13.301 --> 00:25:19.940
+Emacs terminal emulator when launched. See section 5.1 of
+
+00:25:19.941 --> 00:25:24.100
+the Eshell manual titled Visual Commands.
+
+00:25:32.540 --> 00:25:36.759
+Though Eshell is not Bash, it has multiple features,
+
+00:25:36.760 --> 00:25:40.679
+pertaining mainly to its by-design Emacs integration,
+
+00:25:40.680 --> 00:25:44.639
+which may make it more appealing to use than Bash or another
+
+00:25:44.640 --> 00:25:45.359
+shell.
+
+00:25:48.160 --> 00:25:52.039
+For one, Eshell allows entering commands on the command
+
+00:25:52.040 --> 00:25:55.960
+line that are space and new line separated, without
+
+00:25:55.961 --> 00:26:01.280
+parentheses. Of course, all the other shells do this. But
+
+00:26:01.281 --> 00:26:06.280
+within Eshell, it is possible to enter internal Emacs
+
+00:26:06.281 --> 00:26:11.060
+functions, as well as external commands.
+
+00:26:13.240 --> 00:26:45.739
+This allows us to do things like this.
+
+00:26:45.740 --> 00:26:49.759
+As far as I understand, it is possible to enter any Emacs
+
+00:26:49.760 --> 00:26:53.959
+function on the Eshell command line. However, some special
+
+00:26:53.960 --> 00:26:58.399
+syntax may be required if you are trying to pass in something
+
+00:26:58.400 --> 00:27:00.799
+that is not a string or a number.
+
+00:27:04.380 --> 00:27:07.919
+As you might have noticed in the last example, Eshell makes
+
+00:27:07.920 --> 00:27:12.919
+it possible to use an Emacs buffer as a sink for output. It
+
+00:27:12.920 --> 00:27:18.039
+also allows using a buffer as a source of input, though this
+
+00:27:18.040 --> 00:27:21.839
+is slightly more complicated, since the buffer must be
+
+00:27:21.840 --> 00:27:27.199
+converted to a string first. I have distilled this down into
+
+00:27:27.200 --> 00:27:30.279
+my own function, named with the "at" symbol.
+
+00:27:36.640 --> 00:27:40.319
+And I will provide the brief snippet of code for this later.
+
+00:27:54.640 --> 00:28:02.499
+So to give an example, here's our messages buffer.
+
+00:28:02.500 --> 00:28:05.399
+And from Eshell, we can do something like this.
+
+00:28:29.780 --> 00:28:34.439
+Let's say here we wanted to grab our messages buffer to see
+
+00:28:34.440 --> 00:28:38.079
+everything that we had been loading during the startup
+
+00:28:38.080 --> 00:28:38.959
+process.
+
+00:28:48.060 --> 00:28:51.879
+So you can see how that could be very handy in a number of
+
+00:28:51.880 --> 00:28:52.959
+scenarios.
+
+00:28:55.060 --> 00:29:00.239
+I wanted to briefly mention that we have a helpful function
+
+00:29:00.240 --> 00:29:03.439
+here called eshell-insert-buffer-name,
+
+00:29:11.120 --> 00:29:15.359
+which allows us to insert a buffer name into the current
+
+00:29:15.360 --> 00:29:18.439
+buffer at point using completion,
+
+00:29:24.680 --> 00:29:32.879
+which can save you a lot of typing.
+
+00:29:32.880 --> 00:29:34.799
+Another nice feature of Eshell
+
+00:29:37.220 --> 00:29:41.199
+is that it allows integrating ELisp into the command line
+
+00:29:41.200 --> 00:29:48.879
+call. Let's give another example. Say we wanted to echo the
+
+00:29:48.880 --> 00:29:53.919
+date to an event file or an event log.
+
+00:29:56.720 --> 00:30:01.639
+I should probably take a moment to explain this asterisk
+
+00:30:01.640 --> 00:30:06.999
+that I'm occasionally using. So since Emacs, or excuse me,
+
+00:30:07.000 --> 00:30:11.719
+since Eshell can use internal or external Emacs, excuse me,
+
+00:30:11.720 --> 00:30:16.999
+internal Emacs commands or external commands, it may
+
+00:30:17.000 --> 00:30:21.679
+sometimes be necessary to clarify which one you want to use,
+
+00:30:22.380 --> 00:30:27.079
+since the names may overlap. Since my Eshell is configured
+
+00:30:27.080 --> 00:30:32.319
+by default to prefer the internal Emacs functions, then
+
+00:30:32.320 --> 00:30:37.799
+sometimes I have to use the asterisk to specify that I want
+
+00:30:37.800 --> 00:30:39.079
+the external version.
+
+00:30:42.680 --> 00:31:02.639
+Here I can insert a bit of Elisp,
+
+00:31:03.180 --> 00:31:06.119
+and then redirect the output to the event log.
+
+00:31:18.720 --> 00:31:22.639
+Last, I want to mention that there are some optional Eshell
+
+00:31:22.640 --> 00:31:27.159
+modules in Emacs, not turned on by default, which provide
+
+00:31:27.160 --> 00:31:29.039
+additional nifty features.
+
+00:31:40.540 --> 00:31:45.639
+On my system, I have most of the optional modules turned on.
+
+00:31:58.320 --> 00:32:03.199
+An interesting module is eshell-smart, which does various
+
+00:32:03.200 --> 00:32:07.319
+things with cursor positioning and scrolling, so as to make
+
+00:32:07.320 --> 00:32:10.399
+editing commands and reviewing output easier.
+
+00:32:18.340 --> 00:32:23.619
+Let's say I was to change directory to my boot directory
+
+00:32:30.880 --> 00:32:35.039
+and use a command which involves lots of output.
+
+00:32:39.900 --> 00:32:44.359
+You'll notice right away that the cursor positioning is set
+
+00:32:44.360 --> 00:32:48.719
+such that I'm immediately able to view the top of the output.
+
+00:32:48.720 --> 00:32:52.879
+Also, I'm able to use the space bar to page through the
+
+00:32:52.880 --> 00:32:56.079
+output.
+
+00:32:56.080 --> 00:33:01.919
+So this is an opinionated feature, which assumes that
+
+00:33:01.920 --> 00:33:05.399
+you're likely going to want to review the output
+
+00:33:05.400 --> 00:33:10.559
+immediately, or that you often will. Of course, you can
+
+00:33:10.560 --> 00:33:17.599
+always jump to the end.
+
+00:33:19.980 --> 00:33:23.919
+Also, after a command is entered, the cursor is immediately
+
+00:33:23.920 --> 00:33:28.279
+repositioned to make it easy to edit the command.
+
+00:33:53.020 --> 00:33:56.519
+And also, if I don't want to edit the command, and I do not want
+
+00:33:56.520 --> 00:33:59.679
+to review the output, I can simply start typing another
+
+00:33:59.680 --> 00:34:00.359
+command.
+
+00:34:11.260 --> 00:34:15.519
+So that covers the brief tour of Eshell features.
+
+00:34:17.760 --> 00:34:21.127
+And that basically ends my talk.
+
+NOTE Login shell
+
+00:34:21.128 --> 00:34:22.380
+However, a handful of
+
+00:34:22.381 --> 00:34:28.719
+viewers might be wondering, is it possible to set Emacs to be
+
+00:34:28.720 --> 00:34:37.639
+my login shell to completely replace bash in your login
+
+00:34:37.640 --> 00:34:43.719
+experience? The answer is yes, but in practice there are
+
+00:34:43.720 --> 00:34:47.399
+various difficulties involved which might make it not
+
+00:34:47.400 --> 00:34:48.359
+worth the trouble.
+
+00:35:00.440 --> 00:35:03.479
+Before doing this, you'll have to answer a few initial
+
+00:35:03.480 --> 00:35:09.519
+questions. Do you want to make a new Emacs instance every
+
+00:35:09.520 --> 00:35:13.759
+time you log in, or do you want it to connect to an Emacs
+
+00:35:13.760 --> 00:35:20.599
+server? Which is popular among Emacs users, to reuse the
+
+00:35:20.600 --> 00:35:26.599
+session, or to connect to the existing session. Also, do you
+
+00:35:26.600 --> 00:35:30.639
+want a different result, whether in graphical or a terminal
+
+00:35:30.640 --> 00:35:34.679
+environment? And are you okay with your initialization
+
+00:35:34.680 --> 00:35:39.559
+file being run every time you log in, including every new tab
+
+00:35:39.560 --> 00:35:44.520
+you open in a terminal emulator? If we assume that you are
+
+00:35:44.521 --> 00:35:50.339
+using a system with /etc/passwd user management, you get
+
+00:35:50.340 --> 00:35:53.999
+one field to specify the name of the shell program that you
+
+00:35:54.000 --> 00:35:58.479
+want to use, and no arguments are allowed. So maybe you can
+
+00:35:58.480 --> 00:36:02.679
+see how this might be challenging, depending on your
+
+00:36:02.680 --> 00:36:06.879
+answers to the previous questions. You can work around
+
+00:36:06.880 --> 00:36:10.479
+these issues in various ways, like modifying the
+
+00:36:10.480 --> 00:36:15.439
+authentication system, or by specifying a script for your
+
+00:36:15.440 --> 00:36:21.799
+login shell. But if your normal workflow is to simply log in
+
+00:36:21.800 --> 00:36:25.679
+and start Emacs and run that Emacs session until your next
+
+00:36:25.680 --> 00:36:36.979
+reboot, then it probably isn't worth the bother.
+
+NOTE Resources
+
+00:36:36.980 --> 00:36:41.999
+So thank you for listening to my talk, Emacs as a Shell, by
+
+00:36:42.000 --> 00:36:46.319
+Christopher Howard for Emacs Conference 2024.
+
+00:36:46.860 --> 00:36:51.519
+At the bottom of this page, you can see a link to the
+
+00:36:51.520 --> 00:36:56.919
+repository containing the brief amount of code that was
+
+00:36:56.920 --> 00:37:03.679
+featured here in this video, as well as a link to my personal
+
+00:37:03.680 --> 00:37:10.279
+Gemini gemlog, as well as to a Web portal version of that.
+
+00:37:10.280 --> 00:37:13.000
+Thank you.
diff --git a/2024/captions/emacsconf-2024-students--an-example-of-a-cohesive-student-workflow-in-emacs--daniel-pinkston--answers.vtt b/2024/captions/emacsconf-2024-students--an-example-of-a-cohesive-student-workflow-in-emacs--daniel-pinkston--answers.vtt
new file mode 100644
index 00000000..2ea0a13c
--- /dev/null
+++ b/2024/captions/emacsconf-2024-students--an-example-of-a-cohesive-student-workflow-in-emacs--daniel-pinkston--answers.vtt
@@ -0,0 +1,846 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:11.119
+And I believe we are live. Hi, Daniel, how are you doing? I'm
+
+00:00:11.120 --> 00:00:17.199
+doing great. It's cold outside, but it's nice in here, yeah.
+
+00:00:17.200 --> 00:00:21.439
+I can assure you it's very cold in my own place as well. We do
+
+00:00:21.440 --> 00:00:24.679
+EmacsConf always in December and that's always when it's
+
+00:00:24.680 --> 00:00:27.479
+particularly cold where I live and I assume where you live as
+
+00:00:27.480 --> 00:00:31.039
+well. So, don't worry, we'll try to keep you warm with
+
+00:00:31.040 --> 00:00:35.039
+interesting questions. But first, thank you for taking the
+
+00:00:35.040 --> 00:00:38.359
+time out of your busy high school life to make a presentation
+
+NOTE Q: Do you have any thoughts about the process of recording something for a conference?
+
+00:00:38.360 --> 00:00:41.439
+about Emacs. Do you have any thoughts about the process of
+
+00:00:41.440 --> 00:00:44.399
+recording something for a conference? Because I assume
+
+00:00:44.400 --> 00:00:47.279
+it's one of the first ones you're ever doing.
+
+00:00:47.280 --> 00:00:55.879
+I think it was not as difficult as I thought it would be. I just
+
+00:00:55.880 --> 00:01:04.479
+recorded in my basement and prepared some notes
+
+00:01:04.480 --> 00:01:08.639
+beforehand. I think it was definitely helpful to have Emacs
+
+00:01:08.640 --> 00:01:11.959
+as a tool for that, because I made my presentation with
+
+00:01:11.960 --> 00:01:18.559
+Beamer. Right. I mean, it's amazing to see so many of the
+
+00:01:18.560 --> 00:01:22.519
+tools because, you know, you've shown Emacs, but you've
+
+00:01:22.520 --> 00:01:27.399
+shown Beamer. You've shown tools that are about twice as old
+
+00:01:27.400 --> 00:01:30.239
+as you are yourself, which is amazing when you think about
+
+00:01:30.240 --> 00:01:33.199
+it. But I think many people in the audience can actually
+
+00:01:33.200 --> 00:01:36.479
+relate to your discovery of those tools because we were
+
+00:01:36.480 --> 00:01:40.679
+pretty much, I mean a lot of us were your age when we started
+
+00:01:40.680 --> 00:01:43.999
+playing with those tools so it's like there's a little bit of
+
+00:01:44.000 --> 00:01:45.759
+nostalgia that we feel looking at your presentation
+
+00:01:45.760 --> 00:01:48.719
+because we are, we can see the excitement behind everything
+
+00:01:48.720 --> 00:01:51.919
+you've touched and that's great for us because it brings us
+
+00:01:51.920 --> 00:01:55.919
+back maybe 10 or 20 years in the past and for others perhaps 30
+
+00:01:55.920 --> 00:02:01.079
+or 40 years so that's kind of amazing.
+
+00:02:01.080 --> 00:02:05.039
+How about we start taking some questions? So, just for
+
+00:02:05.040 --> 00:02:09.199
+timekeeping, we have until 20 of the current hours, which is
+
+00:02:09.200 --> 00:02:12.079
+8 minutes and 30 seconds to cover as many questions as
+
+00:02:12.080 --> 00:02:16.599
+possible. Now, if we might take the first one. So, Corwin,
+
+00:02:16.600 --> 00:02:20.359
+can you scroll down to the questions? Yes. I'll be reading
+
+00:02:20.360 --> 00:02:22.319
+you the questions just to make it a little easier for you,
+
+00:02:22.320 --> 00:02:23.791
+Daniel, to answer them.
+
+NOTE Q: I use org-roam for notes and find it very useful - have you considered it?
+
+00:02:23.792 --> 00:02:25.999
+I use Org-roam for notes and find it
+
+00:02:26.000 --> 00:02:30.639
+very useful. Have you considered it? Uh, yeah, that's
+
+00:02:30.640 --> 00:02:35.519
+actually where I started out for taking notes. Um, that,
+
+00:02:35.520 --> 00:02:38.719
+that I moved to Denote because I didn't use all of its
+
+00:02:38.720 --> 00:02:44.319
+features, um, for, Org Roam, I meant.
+
+00:02:44.320 --> 00:02:46.999
+Uh, I also didn't, didn't really like the dependency on an
+
+00:02:47.000 --> 00:02:51.919
+external database. Uh, it just like took a while for, um,
+
+00:02:51.920 --> 00:02:56.879
+stuff to index if I moved it between like, uh, using sync
+
+00:02:56.880 --> 00:03:03.679
+thing. laptop and my desktop. Yeah. Yeah, it's definitely
+
+00:03:03.680 --> 00:03:08.119
+something, I mean, I co-maintain Org Roam, so I'm fully aware
+
+00:03:08.120 --> 00:03:12.159
+of this problem with it. And yeah, SyncThing is not great to
+
+00:03:12.160 --> 00:03:16.639
+sync a database, a SQLite database that we use. And, I mean,
+
+00:03:16.640 --> 00:03:19.399
+whichever solution you use, whatever works for you is good.
+
+00:03:19.400 --> 00:03:21.919
+Orgrim was kind of thought in terms of scalability for
+
+00:03:21.920 --> 00:03:26.199
+people who had, you know, thousands of notes with thousands
+
+00:03:26.200 --> 00:03:28.919
+of links inside of them. so perhaps it's not adapted to your
+
+00:03:28.920 --> 00:03:31.039
+note-taking style right now, but perhaps it's something to
+
+00:03:31.040 --> 00:03:34.599
+keep in mind, you know, it's many tools and you use them when
+
+00:03:34.600 --> 00:03:39.599
+you need to. Colin, if we can switch the questions, I'm
+
+00:03:39.600 --> 00:03:40.879
+switching to the second one.
+
+NOTE Q: Do you use the Getting Things Done methodology as part of your Org workflow?
+
+00:03:40.880 --> 00:03:42.159
+Do you use the Getting Things
+
+00:03:42.160 --> 00:03:46.639
+Done methodology as part of your Org workflow? So there's an
+
+00:03:46.640 --> 00:03:50.039
+interesting thing about that. I started with Org first and
+
+00:03:50.040 --> 00:03:54.959
+then I heard about Getting Things Done, so I didn't exactly
+
+00:03:54.960 --> 00:04:01.679
+design my workflow with that in mind, but I sort of
+
+00:04:01.680 --> 00:04:06.439
+reinvented it, I would say, not really, but I do a lot of
+
+00:04:06.440 --> 00:04:09.439
+the similar things, but I don't have the different TODO
+
+00:04:09.440 --> 00:04:11.319
+states like...
+
+00:04:11.320 --> 00:04:17.279
+I don't know an example because I didn't really look into it
+
+00:04:17.280 --> 00:04:22.719
+that much, but it would be like NEXT isn't the next thing
+
+00:04:22.720 --> 00:04:28.879
+you're going to do. But I don't think I...
+
+00:04:28.880 --> 00:04:35.239
+where I just write what I need to do and then schedule it and
+
+00:04:35.240 --> 00:04:40.999
+then look at my agenda for the next thing. Yeah, I mean, part
+
+00:04:41.000 --> 00:04:45.959
+of the beauty of using Emacs, Org Mode or using a methodology
+
+00:04:45.960 --> 00:04:49.719
+like Getting Things Done is that I think you need to find room
+
+00:04:49.720 --> 00:04:53.519
+in the method or the tool for you to organically do what you
+
+00:04:53.520 --> 00:04:57.279
+want. And it's okay to not do everything in a Getting Things
+
+00:04:57.280 --> 00:05:00.599
+Done methodology. I know a lot of people take issue
+
+00:05:00.600 --> 00:05:04.719
+with the tickler file, where you're supposed to put stuff to
+
+00:05:04.720 --> 00:05:07.319
+review in the future. For instance, if you don't want
+
+00:05:07.320 --> 00:05:10.439
+to work on this particular topic right now in your life, you
+
+00:05:10.440 --> 00:05:14.679
+decide, oh, I'd like to revisit this topic maybe in six
+
+00:05:14.680 --> 00:05:17.399
+months. And then you have this tickler file, which has
+
+00:05:17.400 --> 00:05:21.799
+entries and folders for each month of the year. And when six
+
+00:05:21.800 --> 00:05:24.039
+months comes and you find yourself at the beginning of the
+
+00:05:24.040 --> 00:05:27.319
+next month, you open the file and you see, oh there's the task
+
+00:05:27.320 --> 00:05:30.319
+I left off for later. A lot of people don't like to do it this
+
+00:05:30.320 --> 00:05:34.279
+way, some people really like it, but part of the beauty of
+
+00:05:34.280 --> 00:05:38.119
+having tools which are very modular like Emacs and Org Mode
+
+00:05:38.120 --> 00:05:41.479
+allows you to have, well, you just adjust the method for
+
+00:05:41.480 --> 00:05:44.439
+something that works. And there's something to be garnered
+
+00:05:44.440 --> 00:05:48.759
+as well for applying these lessons to how you organize your
+
+00:05:48.760 --> 00:05:51.559
+life, not merely in front of a computer, but also how you
+
+00:05:51.560 --> 00:05:54.519
+manage your tasks elsewhere at school, iSchool or
+
+00:05:54.520 --> 00:05:58.519
+elsewhere.
+
+NOTE Q: org-fc and org-drill are emacs org mode centric flash card solutions, have you looked into them?
+
+00:05:58.520 --> 00:06:02.799
+All right, moving to the next question. Org-fc and org-drill
+
+00:06:02.800 --> 00:06:06.319
+are Emacs Org Mode-centric flashcard solutions. Have you
+
+00:06:06.320 --> 00:06:11.599
+looked into them? I think I looked into Org-Drill, but I
+
+00:06:11.600 --> 00:06:17.359
+wanted to use Anki because of... I wanted to use it on my
+
+00:06:17.360 --> 00:06:21.439
+phone, but then I realized I had to pay for the app, and then I
+
+00:06:21.440 --> 00:06:24.119
+didn't want to use it on my phone anymore.
+
+00:06:24.120 --> 00:06:31.799
+but it's just something that I used before without work mode
+
+00:06:31.800 --> 00:06:35.239
+for a little bit. And then I liked it,
+
+00:06:35.240 --> 00:06:42.919
+but yeah, it works pretty well with Org mode. So I didn't
+
+00:06:42.920 --> 00:06:47.799
+find a reason to switch to one of those because like I might be
+
+00:06:47.800 --> 00:06:53.559
+not at a computer one day and have to learn something. Yeah,
+
+00:06:53.560 --> 00:06:56.399
+that's something that you call premature optimization.
+
+00:06:56.400 --> 00:06:59.479
+And if you continue as a software engineer at university,
+
+00:06:59.480 --> 00:07:02.679
+you'll get to hear plenty of this. But yes, Anki is also a tool
+
+00:07:02.680 --> 00:07:06.399
+that I've used a whole lot in my learning journeys, be it
+
+00:07:06.400 --> 00:07:09.719
+about languages, be it about literature, be it about
+
+00:07:09.720 --> 00:07:15.519
+whatever really, and it's a very good tool and I recommend
+
+00:07:15.520 --> 00:07:17.799
+people to look into it, especially since they've released a
+
+00:07:17.800 --> 00:07:20.839
+new algorithm to manage learning a little differently than
+
+00:07:20.840 --> 00:07:23.719
+the old one. If you're familiar with SuperMemo, I really
+
+00:07:23.720 --> 00:07:25.992
+invite you to look into the advancement
+
+00:07:25.993 --> 00:07:27.505
+in Anki in recent years.
+
+NOTE Q: What do other students think about your approach - and what are they doing instead (if anything)? And your teachers - what do they think?
+
+00:07:27.506 --> 00:07:31.399
+Moving to another question, what do other students
+
+00:07:31.400 --> 00:07:33.919
+think about your approach and what are they doing instead,
+
+00:07:33.920 --> 00:07:39.359
+if anything? And your teachers, what do they think? So for
+
+00:07:39.360 --> 00:07:43.199
+other students they usually are just confused about what's
+
+00:07:43.200 --> 00:07:51.879
+going on when I show my computer because they know that I use
+
+00:07:51.880 --> 00:07:56.759
+Linux but they don't know what it is so they're just assuming
+
+00:07:56.760 --> 00:08:03.839
+everything on my computer is I'm either hacking or like
+
+00:08:03.840 --> 00:08:05.999
+doing some Linux thing and
+
+00:08:06.000 --> 00:08:09.919
+I don't really bother to explain it to them so that's kind
+
+00:08:09.920 --> 00:08:17.079
+But for I love it. See my see my prior videos. That's that's
+
+00:08:17.080 --> 00:08:19.559
+wonderful. Pardon me. Pardon me for breaking in, Daniel.
+
+00:08:19.560 --> 00:08:22.239
+But I just since I have, I want to say wonderful
+
+00:08:22.240 --> 00:08:28.559
+presentation. I love your spirit, your tone and great
+
+00:08:28.560 --> 00:08:29.319
+thought there.
+
+00:08:29.320 --> 00:08:31.399
+For my teachers, I think...
+
+00:08:31.400 --> 00:08:38.799
+because if I write an essay or something, I usually paste it
+
+00:08:38.800 --> 00:08:46.879
+in Google Docs. But recently, I got more confident, which is
+
+00:08:46.880 --> 00:08:53.879
+export to LaTeX, and I did that for my physics labs. My
+
+00:08:53.880 --> 00:08:56.439
+teacher was pretty satisfied with the results for the math
+
+00:08:56.440 --> 00:09:03.119
+formatting. So I think they don't really have a problem with
+
+00:09:03.120 --> 00:09:06.959
+it, where it's actually more convenient, maybe.
+
+00:09:06.960 --> 00:09:13.039
+That's really great to hear and if you continue at
+
+00:09:13.040 --> 00:09:16.519
+university, which I'm almost sure that you will, your
+
+00:09:16.520 --> 00:09:19.279
+professors, you'll be pretty much using the same tools as
+
+00:09:19.280 --> 00:09:23.359
+they are, so you'll find yourself in a like-minded crowd of
+
+00:09:23.360 --> 00:09:28.519
+people once you get to university. We are a little short on
+
+00:09:28.520 --> 00:09:30.719
+time because we need to move to the next talk in about one
+
+00:09:30.720 --> 00:09:35.999
+minute. There are still some questions and Daniel, I would
+
+00:09:36.000 --> 00:09:40.399
+invite you to stay and maybe answer them in a room so that we
+
+00:09:40.400 --> 00:09:43.399
+can gather as many of your answers as possible. But before we
+
+00:09:43.400 --> 00:09:45.239
+leave, I just want to give you the opportunity, if you have
+
+00:09:45.240 --> 00:09:46.919
+any last words, to share them with the crowd.
+
+00:09:46.920 --> 00:09:53.479
+Well, for the students who may be watching this, I hope that
+
+00:09:53.480 --> 00:09:57.319
+you give Emacs a try. And good luck if you decide to use
+
+00:09:57.320 --> 00:10:01.519
+something else because it's probably won't be as great.
+
+00:10:01.520 --> 00:10:07.399
+It's very good to be so young and to already be convinced that
+
+00:10:07.400 --> 00:10:09.879
+Emacs is the best thing. For some of us, it took us many
+
+00:10:09.880 --> 00:10:12.839
+decades to reach this conclusion, and I'm so happy
+
+00:10:12.840 --> 00:10:15.095
+to see young people. I used to be a teacher,
+
+00:10:15.096 --> 00:10:17.016
+by the way, so I used to teach people your age,
+
+00:10:17.017 --> 00:10:19.799
+but I'm so happy to see people your age
+
+00:10:19.800 --> 00:10:23.359
+interested in Emacs because it makes me hopeful that in the
+
+00:10:23.360 --> 00:10:26.799
+future we'll have people carrying the flame and standing on
+
+00:10:26.800 --> 00:10:30.039
+the shoulders of current people. So thank you so much,
+
+00:10:30.040 --> 00:10:32.917
+Daniel. We'll be seeing you soon. We wish you good luck with
+
+00:10:32.917 --> 00:10:35.999
+your studies. And for EmacsConf, we'll be moving to the next
+
+00:10:36.000 --> 00:10:39.624
+talk in five seconds. See you soon. And I want to reassure
+
+00:10:39.625 --> 00:10:44.332
+you, we'll post all the Q&A info when we do post this video.
+
+00:10:44.333 --> 00:10:47.839
+Yes. So Daniel, as I said,
+
+00:10:47.840 --> 00:10:49.239
+if you want to stick around a little more with
+
+00:10:49.240 --> 00:10:51.839
+Corwin to answer the questions, that's all fine.
+
+00:10:51.840 --> 00:10:53.599
+I'll be moving to the next room to get ready for the next
+
+00:10:53.600 --> 00:10:59.159
+talks. So thank you, Daniel. And I'll see you later.
+
+00:10:59.160 --> 00:11:06.199
+All right, the cops are gone. Wait, no, I'm just kidding. No,
+
+00:11:06.200 --> 00:11:10.042
+but if you'd like to walk through a few more of these
+
+00:11:10.043 --> 00:11:11.960
+questions, I'd be happy to record that. You're not
+
+00:11:12.000 --> 00:11:14.559
+obligated to do that. You could also, the pad's there. You
+
+00:11:14.560 --> 00:11:16.999
+could just type out your answers or whatever you prefer to
+
+00:11:17.000 --> 00:11:24.559
+do. I guess I can answer them still. Cool.
+
+00:11:24.560 --> 00:11:25.359
+So we're here.
+
+NOTE Q: What was your biggest source of frustration/friction/confusion when getting started with Emacs?
+
+00:11:25.360 --> 00:11:27.759
+What was your biggest source of frustration, friction,
+
+00:11:27.760 --> 00:11:32.319
+confusion when getting started?
+
+00:11:32.320 --> 00:11:38.239
+I honestly don't really remember. It
+
+00:11:38.240 --> 00:11:45.279
+somehow just clicked one day and I figured it out.
+
+00:11:45.280 --> 00:11:48.123
+All right, it takes us pretty naturally to the next one.
+
+NOTE Q: How did you come across Emacs? What got you into it?
+
+00:11:48.124 --> 00:11:54.079
+How did you come across Emacs? What got you into it? I could ask
+
+00:11:54.080 --> 00:11:58.280
+this question quite
+
+00:11:58.320 --> 00:12:05.479
+similar to how I stumbled into Linux, where I was... I heard
+
+00:12:05.480 --> 00:12:09.519
+of it before, but I saw screenshots of it
+
+00:12:09.520 --> 00:12:11.247
+or something on Reddit, and I was like, oh,
+
+00:12:11.248 --> 00:12:14.648
+that looks pretty cool, maybe I'll look into that.
+
+00:12:14.649 --> 00:12:16.599
+And then on YouTube, I would see videos
+
+00:12:16.600 --> 00:12:21.199
+about Doom Emacs, and then the Doomcasts video,
+
+00:12:21.200 --> 00:12:37.239
+I think that's what really got me into it.
+
+00:12:37.240 --> 00:12:42.279
+Okay, I did my best to capture that. So what's the situation
+
+00:12:42.280 --> 00:12:46.439
+with respect to the mobile use, if that's applicable? And
+
+00:12:46.440 --> 00:12:47.639
+Orgzly is,
+
+00:12:47.640 --> 00:12:52.359
+sorry, was it not Doomcast? Is it System Crafters?
+
+00:12:52.360 --> 00:12:58.199
+Sorry if I botched the note. Oh yeah, System Crafters was
+
+00:12:58.200 --> 00:13:01.679
+also one of the things I used for getting into Emacs from
+
+00:13:01.680 --> 00:13:08.079
+scratch. I'm sorry if my dog is barking.
+
+00:13:08.080 --> 00:13:16.799
+the, I'm not sure how to pronounce his name, but Protesilaos,
+
+00:13:16.800 --> 00:13:20.399
+I think that's how you say it. I always say Prot just to get me
+
+00:13:20.400 --> 00:13:23.039
+out of that problem for what it's worth. I'm not sure that I
+
+00:13:23.040 --> 00:13:26.719
+can say it properly either. Yeah, his videos were really
+
+00:13:26.720 --> 00:13:30.479
+great for getting started with each, each individual
+
+00:13:30.480 --> 00:13:31.240
+component of
+
+00:13:31.292 --> 00:13:34.124
+something like there's entire videos just
+
+00:13:34.125 --> 00:13:40.249
+about completion and about a tool called Embark. And like, I
+
+00:13:40.250 --> 00:13:41.318
+would just watch those videos
+
+00:13:41.319 --> 00:13:42.999
+while I was doing the dishes or something.
+
+00:13:43.000 --> 00:13:53.679
+and I would learn a lot from that.
+
+NOTE Q: What the situation with respect to "mobile" use (if ever that's applicable)? (yes, Orgzly...using that?)
+
+00:13:53.680 --> 00:13:59.120
+Awesome. I love it. What about the mobile...
+
+00:13:59.121 --> 00:14:04.960
+sorry, did I get that question out there already? Oh, no.
+
+00:14:04.961 --> 00:14:07.917
+I don't use Emacs or any Org Mode things on my
+
+00:14:07.918 --> 00:14:19.963
+phone. I have an iPhone, unfortunately.
+
+00:14:19.964 --> 00:14:24.120
+But for org files, I couldn't really get it to sync over
+
+00:14:24.121 --> 00:14:26.800
+without using a paid app.
+
+00:14:26.801 --> 00:14:28.040
+And I didn't really look into it
+
+00:14:28.041 --> 00:14:30.140
+that much because I have a computer with me
+
+00:14:30.141 --> 00:14:36.000
+almost all the time.
+
+00:14:36.001 --> 00:14:39.520
+Usually I carry around a notebook. And if I really need to
+
+00:14:39.521 --> 00:14:41.940
+know something or remember it for later,
+
+00:14:41.941 --> 00:14:52.660
+I just write it down.
+
+00:14:52.661 --> 00:15:01.759
+I've seen people get started with e-ink tablets, and they
+
+00:15:01.760 --> 00:15:07.959
+sync it with SyncThing because it's Android, but I don't use
+
+00:15:07.960 --> 00:15:21.919
+that, so I can't really attest to how good it is.
+
+NOTE Q: Has using emacs led to expanded interest in programming/computer science?
+
+00:15:21.920 --> 00:15:25.559
+So has using Emacs led you to an expanded interest in
+
+00:15:25.560 --> 00:15:28.519
+programming and computer science? Sorry if
+
+00:15:28.520 --> 00:15:31.781
+I could have got that out of the presentation.
+
+00:15:31.782 --> 00:15:33.999
+I think Emacs is what got me
+
+00:15:34.000 --> 00:15:37.840
+started with Lisp specifically.
+
+00:15:37.900 --> 00:15:40.380
+Otherwise, I probably would have not really looked into it
+
+00:15:40.381 --> 00:15:44.920
+that much, other than like maybe dabbling in Scheme
+
+00:15:44.921 --> 00:15:50.180
+from the Structures and Interpretations of Computer
+
+00:15:50.181 --> 00:15:53.680
+Programs book. But I probably wouldn't have seen that if I
+
+00:15:53.681 --> 00:16:06.120
+hadn't discovered Emacs either so.
+
+00:16:06.121 --> 00:16:08.792
+I was already into programming
+
+00:16:08.793 --> 00:16:14.958
+before Emacs, and I had used VS Code for a little bit and then
+
+00:16:14.959 --> 00:16:22.917
+Vim. But I think I've done most of my programming
+
+00:16:22.918 --> 00:16:26.667
+inside of Emacs, in terms of lines of code written,
+
+00:16:26.668 --> 00:16:40.671
+projects made...
+
+NOTE Q: How does interaction with others work in technical terms?
+
+00:16:40.672 --> 00:16:44.519
+So maybe we'd jump from there, right, to, you mentioned
+
+00:16:44.520 --> 00:16:48.359
+exporting notes, essays, and so on, handing them on to other
+
+00:16:48.360 --> 00:16:53.319
+people. How does interaction with others work in technical
+
+00:16:53.320 --> 00:16:57.759
+terms? We mostly find workflows centered around like
+
+00:16:57.760 --> 00:17:00.479
+Microsoft products, and that makes sense to me. I have a day
+
+00:17:00.480 --> 00:17:03.719
+job where I have to work with a bunch of Microsoft products,
+
+00:17:03.720 --> 00:17:08.399
+and I know the workflows for that. So how do you manage your
+
+00:17:08.400 --> 00:17:14.519
+kind of Emacs-y you know, workflows, um, you know, in terms of
+
+00:17:14.520 --> 00:17:19.119
+sharing with people. Yeah. So for sharing with like my
+
+00:17:19.120 --> 00:17:22.719
+teachers or something, I would, we use like Google at our
+
+00:17:22.720 --> 00:17:25.759
+school. So for, I'm very fortunate that I don't have to deal
+
+00:17:25.760 --> 00:17:29.639
+with Microsoft other than with a very niche situations in
+
+00:17:29.640 --> 00:17:32.599
+which I can just use LibreOffice and then convert to Doc X or
+
+00:17:32.600 --> 00:17:35.719
+something. I heard that chef. That's, that's how all my
+
+00:17:35.720 --> 00:17:39.679
+vendors, uh, my vendors all roll their eyes when they were,
+
+00:17:39.680 --> 00:17:42.885
+oh, you're a Microsoft shop. Yep. Heard.
+
+00:17:42.886 --> 00:17:45.947
+Then they're all Google shops too, in education.
+
+00:17:45.948 --> 00:17:51.958
+Great point. For Google, I just... If my teachers wanted
+
+00:17:51.959 --> 00:17:53.125
+a Google Doc or something,
+
+00:17:53.126 --> 00:17:54.299
+I usually just copy paste
+
+00:17:54.300 --> 00:17:55.679
+whatever I wrote in Emacs
+
+00:17:55.680 --> 00:17:59.333
+and then still keep it, anyway, as a side thing
+
+00:17:59.334 --> 00:18:00.667
+because I don't really trust the cloud
+
+00:18:00.668 --> 00:18:02.875
+that much in terms of using
+
+00:18:02.876 --> 00:18:10.667
+it for later if I wanted to look at it. But for that, I don't
+
+00:18:10.668 --> 00:18:14.339
+really have too much problems. Hopefully, I will find a way
+
+00:18:14.340 --> 00:18:21.439
+to figure it out when I get into university.
+
+00:18:21.440 --> 00:18:26.679
+Awesome. Okay, well, I know we did it once already, but since
+
+00:18:26.680 --> 00:18:30.479
+this will be the end of the video, let me just open the floor
+
+00:18:30.480 --> 00:18:33.439
+one more time for parting thoughts.
+
+00:18:33.440 --> 00:18:41.719
+I'm not sure that I have any. I mean, you said it pretty well,
+
+00:18:41.720 --> 00:18:46.639
+right? I hope my peers see this. I hope they realize other
+
+00:18:46.640 --> 00:18:49.879
+tools are kind of inferior from a gets things done
+
+00:18:49.880 --> 00:18:54.639
+standpoint. Saw your talk. Heard that message in this Q&A.
+
+00:18:54.640 --> 00:18:58.159
+I think you did a great job. You don't have to say more, but
+
+00:18:58.160 --> 00:19:02.835
+just offering you the chance. Thank you.
+
+00:19:02.836 --> 00:19:03.916
+Well, thank you, Daniel,
+
+00:19:03.917 --> 00:19:07.439
+and thanks to everybody watching this video
+
+00:19:07.440 --> 00:19:09.838
+during the conference or after it,
+
+00:19:09.839 --> 00:19:12.159
+and appreciate and look forward
+
+00:19:12.160 --> 00:19:18.880
+to your talks in the future, Daniel. Thank you.
diff --git a/2024/captions/emacsconf-2024-students--an-example-of-a-cohesive-student-workflow-in-emacs--daniel-pinkston--main.vtt b/2024/captions/emacsconf-2024-students--an-example-of-a-cohesive-student-workflow-in-emacs--daniel-pinkston--main.vtt
new file mode 100644
index 00000000..9990c2e7
--- /dev/null
+++ b/2024/captions/emacsconf-2024-students--an-example-of-a-cohesive-student-workflow-in-emacs--daniel-pinkston--main.vtt
@@ -0,0 +1,472 @@
+WEBVTT captioned by sachac
+
+00:00:00.000 --> 00:00:04.639
+Hello, my name is Daniel Pinkston. I'm in my last year of high
+
+00:00:04.640 --> 00:00:07.519
+school, about to go to university. About two and a half years
+
+00:00:07.520 --> 00:00:10.759
+ago, I discovered Emacs. My life has now been separated into
+
+00:00:10.760 --> 00:00:14.199
+two chapters: before and after Emacs. How could this tool be
+
+00:00:14.200 --> 00:00:18.399
+so impactful? Well, you'll just have to see. I made this talk
+
+00:00:18.400 --> 00:00:20.679
+for people who ask questions like this, but don't know where
+
+00:00:20.680 --> 00:00:24.559
+to start. When I started using Emacs for school, it took me a
+
+00:00:24.560 --> 00:00:27.959
+long time to find what I liked. There wasn't many examples of
+
+00:00:27.960 --> 00:00:31.119
+a full process for an organization. This talk was made to
+
+00:00:31.120 --> 00:00:34.359
+guide students like me, those who wanted more from their
+
+00:00:34.360 --> 00:00:37.599
+software workflow that they can learn and adapt from. My
+
+00:00:37.600 --> 00:00:39.959
+main idea was essentially explained by Zaiste in his
+
+00:00:39.960 --> 00:00:43.679
+EmacsConf presentation in 2019. He said something to the
+
+00:00:43.680 --> 00:00:46.399
+effect of, one of the great parts about Doom Emacs as a
+
+00:00:46.400 --> 00:00:48.599
+starting point is that it shows beginners how different
+
+00:00:48.600 --> 00:00:51.399
+packages mesh with each other. He says that people often
+
+00:00:51.400 --> 00:00:53.639
+have trouble seeing how to develop workflows using the
+
+00:00:53.640 --> 00:00:57.159
+thousands of packages Emacs has. In this talk, I introduce
+
+00:00:57.160 --> 00:00:59.519
+some Emacs tools and how they work together to improve a
+
+00:00:59.520 --> 00:01:04.159
+student's academic workflow. Let us commence. If you are
+
+00:01:04.160 --> 00:01:07.199
+watching this talk and have never heard of Emacs, it's a
+
+00:01:07.200 --> 00:01:10.479
+customizable text editor. When you become more
+
+00:01:10.480 --> 00:01:13.559
+experienced, it becomes your entire operating system. You
+
+00:01:13.560 --> 00:01:17.119
+just live inside of Emacs. It's also free as in free pencils
+
+00:01:17.120 --> 00:01:19.919
+and open source, which means that you don't have to pay to
+
+00:01:19.920 --> 00:01:23.599
+download Emacs and its source code. Emacs doesn't charge
+
+00:01:23.600 --> 00:01:25.879
+you a monthly subscription, nor does it steal all of your
+
+00:01:25.880 --> 00:01:31.119
+information. Yeah, I know, it's pretty crazy. In this talk,
+
+00:01:31.120 --> 00:01:33.559
+I introduce some Emacs tools and how they work together to
+
+00:01:33.560 --> 00:01:36.879
+improve a student's academic workflow. Earlier I read this
+
+00:01:36.880 --> 00:01:40.879
+post on this website that said, I can only imagine the great
+
+00:01:40.880 --> 00:01:43.719
+things you'd be able to learn and retain in your brain thanks
+
+00:01:43.720 --> 00:01:47.759
+to the great Emacs ecosystem. You've made the best choice,
+
+00:01:47.760 --> 00:01:51.439
+with far-going implications. I promise you not once, not
+
+00:01:51.440 --> 00:01:54.039
+even subtly, have I ever regretted having invested in
+
+00:01:54.040 --> 00:01:57.399
+learning Emacs. It's the best gift anyone can present to
+
+00:01:57.400 --> 00:02:00.399
+themself. You will forever feel indebted to your younger
+
+00:02:00.400 --> 00:02:03.839
+self for this gift. I guarantee that. I think that this is a
+
+00:02:03.840 --> 00:02:07.199
+real testament to the true power of Emacs. There's simply no
+
+00:02:07.200 --> 00:02:09.839
+other software like it. It's a complete and fitting
+
+00:02:09.840 --> 00:02:12.759
+solution for those who are willing to master it. Hopefully
+
+00:02:12.760 --> 00:02:16.199
+by now you're invested in learning Emacs. But before we jump
+
+00:02:16.200 --> 00:02:18.919
+into the technicalities of everything, we should outline
+
+00:02:18.920 --> 00:02:22.039
+the main things that you need it to do as a student. The best
+
+00:02:22.040 --> 00:02:24.279
+students have their system figured out so that it can do
+
+00:02:24.280 --> 00:02:27.239
+these things quickly and efficiently. They should have no
+
+00:02:27.240 --> 00:02:29.839
+problem quickly organizing what they need to do along with
+
+00:02:29.840 --> 00:02:32.999
+capturing information from their classes. But you may be
+
+00:02:33.000 --> 00:02:36.959
+wondering, how does Emacs do all that? Well, it does it with
+
+00:02:36.960 --> 00:02:41.679
+Org Mode. It was built to be an outliner for note-taking and
+
+00:02:41.680 --> 00:02:45.239
+list management, exactly what a student needs. One of the
+
+00:02:45.240 --> 00:02:47.959
+key features is that it's plain text, which means that you
+
+00:02:47.960 --> 00:02:50.079
+can migrate it between computers, and it's not a
+
+00:02:50.080 --> 00:02:52.919
+proprietary format. For those of you who have heard of
+
+00:02:52.920 --> 00:02:55.799
+Markdown, Org is similar in that it's a markup language.
+
+00:02:55.800 --> 00:02:59.079
+However, it's a bit older, and it goes way beyond Markdown's
+
+00:02:59.080 --> 00:03:01.479
+simple text formatting, with its scheduling, task
+
+00:03:01.480 --> 00:03:04.159
+management, and organization features, all captured
+
+00:03:04.160 --> 00:03:07.159
+within plain text simplicity. This slide shows off one of my
+
+00:03:07.160 --> 00:03:10.159
+notes from a heavily customized Emacs window. Yours
+
+00:03:10.160 --> 00:03:12.439
+probably won't look like this from the start, but you can
+
+00:03:12.440 --> 00:03:17.199
+personalize its appearance with custom themes.
+
+00:03:17.200 --> 00:03:19.999
+It's finally time to get into the technicalities. What you
+
+00:03:20.000 --> 00:03:22.639
+need to do with your notes in Org Mode is create, search, and
+
+00:03:22.640 --> 00:03:25.559
+possibly publish them. I prefer Denote for creating my
+
+00:03:25.560 --> 00:03:29.319
+notes, but there are many Emacs packages for that. Denote is
+
+00:03:29.320 --> 00:03:32.279
+just lightweight and gets the job done. I used to use Org
+
+00:03:32.280 --> 00:03:35.799
+Roam, but I didn't need or use all of its features. I also use
+
+00:03:35.800 --> 00:03:38.359
+Anki, a free and open source flashcard program, but of
+
+00:03:38.360 --> 00:03:41.319
+course, I make all my flashcards in Org Mode. For searching,
+
+00:03:41.320 --> 00:03:43.559
+I often use find and grep, which are both standard
+
+00:03:43.560 --> 00:03:46.799
+utilities on Linux. Other operating systems probably have
+
+00:03:46.800 --> 00:03:50.519
+a tool to replicate this functionality. The final item is
+
+00:03:50.520 --> 00:03:52.959
+exporting. There are many scenarios in which I want to
+
+00:03:52.960 --> 00:03:56.239
+publish my notes to share them with teachers or peers. One of
+
+00:03:56.240 --> 00:03:58.479
+my favorite features of Org Mode is the exportability of the
+
+00:03:58.480 --> 00:04:01.719
+notes you make. This presentation was actually made in Org
+
+00:04:01.720 --> 00:04:04.559
+Mode, and so are all of my lab reports and essays for school. I
+
+00:04:04.560 --> 00:04:10.039
+also write my webpage articles in Org Mode, which a program
+
+00:04:10.040 --> 00:04:15.359
+called Hugo converts into static HTML. So far, you haven't
+
+00:04:15.360 --> 00:04:18.039
+actually seen what it's like to use these tools. Here's a
+
+00:04:18.040 --> 00:04:21.279
+quick demo of how I track what I need to do. First, I always
+
+00:04:21.280 --> 00:04:24.799
+open up my todo.org file in my denote directory. For school
+
+00:04:24.800 --> 00:04:26.839
+assignments, I have a heading under Inbox where I have
+
+00:04:26.840 --> 00:04:29.919
+entries for each class I'm enrolled in. Each class's
+
+00:04:29.920 --> 00:04:32.839
+heading has a tag on it, which the assignment inherits as a
+
+00:04:32.840 --> 00:04:36.999
+subheading. Here's an example assignment. I have a test in
+
+00:04:37.000 --> 00:04:39.599
+physics next next Wednesday and the deadline to finish
+
+00:04:39.600 --> 00:04:42.359
+studying for it is the day that I'm taking it. When I plan my
+
+00:04:42.360 --> 00:04:45.399
+studying, I run the keybind for org-schedule to schedule the
+
+00:04:45.400 --> 00:04:48.839
+day on which I will study it. I can also mark it as the highest
+
+00:04:48.840 --> 00:04:52.399
+priority, making it the most important thing to do. I can
+
+00:04:52.400 --> 00:04:56.439
+also open up my agenda to see my tasks. I've cleaned it up as to
+
+00:04:56.440 --> 00:04:59.679
+not reveal any of my nefarious plans. This agenda is
+
+00:04:59.680 --> 00:05:03.239
+customized, but there are many tutorials on how to do this.
+
+00:05:03.240 --> 00:05:05.599
+My agenda has been the most transforming part of my student
+
+00:05:05.600 --> 00:05:08.239
+experience, and I've gotten a lot better at managing what I
+
+00:05:08.240 --> 00:05:13.119
+need to do. Next, I'll show you what I like to do to take notes.
+
+00:05:13.120 --> 00:05:15.999
+The main entry point for a new note is always starting with
+
+00:05:16.000 --> 00:05:19.679
+M-x denote. You fill out a couple of customizable prompts
+
+00:05:19.680 --> 00:05:23.119
+that will ask for values of the note. I'll start by making a
+
+00:05:23.120 --> 00:05:26.359
+new note, which we'll call test note. Then we'll give it a key
+
+00:05:26.360 --> 00:05:29.359
+for what category it's under. For this, I usually put the
+
+00:05:29.360 --> 00:05:32.319
+subject of the class that I'm doing this note for, be it
+
+00:05:32.320 --> 00:05:35.559
+programming, English, history, or science. Try to keep
+
+00:05:35.560 --> 00:05:39.159
+them short. And then Shazam, we have ourselves a brand new
+
+00:05:39.160 --> 00:05:42.399
+note which we can start typing away in. The cool thing about
+
+00:05:42.400 --> 00:05:45.199
+the note is you don't have to manually name your note files.
+
+00:05:45.200 --> 00:05:49.479
+It uses a standard convention using the time, the title, and
+
+00:05:49.480 --> 00:05:53.199
+the keywords of the note to make it unique. You can even make a
+
+00:05:53.200 --> 00:05:56.599
+meta note, a note about notes, to show a list of notes under a
+
+00:05:56.600 --> 00:06:01.319
+certain keyword. The final step in creation is flashcards.
+
+00:06:01.320 --> 00:06:04.639
+There is a great package called Anki Editor that makes Emacs
+
+00:06:04.640 --> 00:06:08.159
+able to push cards into Anki. There isn't much to
+
+00:06:08.160 --> 00:06:11.159
+overcomplicate here, it's just content on front and back,
+
+00:06:11.160 --> 00:06:14.599
+sometimes with images and complete the phrase. You can also
+
+00:06:14.600 --> 00:06:17.319
+set up LaTeX math formatting, but I don't really use it that
+
+00:06:17.320 --> 00:06:20.599
+much. If you're living in Emacs all the time, you may want
+
+00:06:20.600 --> 00:06:24.559
+some creature comforts. These are some of my favorite. Org
+
+00:06:24.560 --> 00:06:26.959
+Download is a package that allows you to paste images from
+
+00:06:26.960 --> 00:06:28.239
+your clipboard into an org file.
+
+00:06:28.240 --> 00:06:37.319
+Logos is a text narrowing tool that helps you restrict what
+
+00:06:37.320 --> 00:06:40.479
+text you can see and focus on what you're writing. It extends
+
+00:06:40.480 --> 00:06:43.159
+Emacs default narrowing, also adding functionality for
+
+00:06:43.160 --> 00:06:45.399
+quickly switching to headings for a presentation look. It
+
+00:06:45.400 --> 00:06:48.239
+can remove your mode line and center your text for better
+
+00:06:48.240 --> 00:06:53.239
+focus. org-fragtog allows you to move between previews of
+
+00:06:53.240 --> 00:06:55.639
+your LaTeX formulas and the unrendered syntax.
+
+00:06:55.640 --> 00:07:00.679
+pdf-view-mode is a fully fledged PDF reader, complete with
+
+00:07:00.680 --> 00:07:03.439
+annotations and org syntax, highlighting, and clickable
+
+00:07:03.440 --> 00:07:03.919
+links.
+
+00:07:03.920 --> 00:07:09.719
+Something you may want to consider is digital versus
+
+00:07:09.720 --> 00:07:12.199
+handwritten notes. There have been several talks in the
+
+00:07:12.200 --> 00:07:14.799
+past about how to integrate handwritten notes into Emacs,
+
+00:07:14.800 --> 00:07:20.239
+such as retyping them or scanning them in with an OCR tool. I
+
+00:07:20.240 --> 00:07:21.959
+don't think that type notes are the only way that you should
+
+00:07:21.960 --> 00:07:25.159
+take notes, but if you do try writing, at least get some nice
+
+00:07:25.160 --> 00:07:29.079
+stationery. I've seen people ask online to YouTubers and
+
+00:07:29.080 --> 00:07:32.479
+Twitch streamers asking, what is your keyboard? What is
+
+00:07:32.480 --> 00:07:35.519
+your window manager? I understand that they're curious,
+
+00:07:35.520 --> 00:07:37.919
+but cosplaying as a productive person by using the same
+
+00:07:37.920 --> 00:07:41.159
+tools won't accomplish anything. Emacs will not make you a
+
+00:07:41.160 --> 00:07:44.439
+productive person. It can be a significant time investment
+
+00:07:44.440 --> 00:07:47.879
+because of how customizable it is. However, I believe it
+
+00:07:47.880 --> 00:07:50.399
+will make it easier for you to be productive, as it certainly
+
+00:07:50.400 --> 00:07:53.519
+has for me. This was just an example workflow to show
+
+00:07:53.520 --> 00:07:56.119
+prospective students how they can use Emacs for their
+
+00:07:56.120 --> 00:07:56.559
+needs.
+
+00:07:56.560 --> 00:08:01.999
+Even if you don't end up using Emacs in the end, you can still
+
+00:08:02.000 --> 00:08:04.719
+apply most of its ideas to other software. It just won't be as
+
+00:08:04.720 --> 00:08:10.199
+customizable and extensible as Emacs is. Thank you for
+
+00:08:10.200 --> 00:08:12.519
+listening to my talk. It's been a great pleasure to finally
+
+00:08:12.520 --> 00:08:15.359
+take part in this conference in some capacity, and I'm glad I
+
+00:08:15.360 --> 00:08:18.399
+was given a chance. To all the students who may try Emacs in
+
+00:08:18.400 --> 00:08:21.199
+the future, good luck because there might not be any going
+
+00:08:21.200 --> 00:08:24.239
+back. If you have any questions, feel free to shoot me an
+
+00:08:24.240 --> 00:08:26.800
+email. Thank you for your time.
diff --git a/2024/captions/emacsconf-2024-sun-close--sunday-closing-remarks--main.vtt b/2024/captions/emacsconf-2024-sun-close--sunday-closing-remarks--main.vtt
new file mode 100644
index 00000000..f43e8590
--- /dev/null
+++ b/2024/captions/emacsconf-2024-sun-close--sunday-closing-remarks--main.vtt
@@ -0,0 +1,118 @@
+WEBVTT
+
+00:00.007 --> 00:03.045
+Hi again everyone, this is Leo, and I'm very sorry that I
+
+00:03.046 --> 00:06.284
+couldn't stick around to the very end of EmacsConf 2024.
+
+00:06.285 --> 00:09.843
+This is a recording, and hopefully this is playing as my
+
+00:09.844 --> 00:13.962
+co-organizers are closing EmacsConf 2024. There's just
+
+00:13.963 --> 00:17.761
+one last thing that I wanted to invite people to do, because
+
+00:17.762 --> 00:20.880
+for me, it was an honor to host the general track of EmacsConf
+
+00:20.881 --> 00:24.119
+this year again. It's my fifth time. But if you are
+
+00:24.120 --> 00:28.638
+interested in hosting, like me, or maybe transcribing
+
+00:28.639 --> 00:32.397
+pre-recordings, you know, captioning them, we do have
+
+00:32.398 --> 00:35.036
+plenty of roles open for people who want to contribute to
+
+00:35.037 --> 00:37.715
+EmacsConf. We do have a page on the website which is
+
+00:37.716 --> 00:40.794
+https://emacsconf.org/volunteer .
+
+00:40.795 --> 00:43.153
+You will find all the information about the roles that
+
+00:43.154 --> 00:45.460
+you can take. Just listing them very quickly.
+
+00:45.461 --> 00:47.152
+We've got captioners, as I mentioned.
+
+00:47.153 --> 00:49.230
+We've got hosts. We have
+
+00:49.231 --> 00:52.229
+Internet Relay Chat monitors, so IRC people to
+
+00:52.230 --> 00:00:53.800
+make sure that everyone is being nice
+
+00:00:53.801 --> 00:00:55.668
+in the chat and perhaps pasting
+
+00:55.669 --> 00:58.747
+questions from IRC to the pad. Speaking of the pad, we have
+
+00:58.748 --> 01:02.386
+pad scribes to make sure that all the questions and answers
+
+01:02.387 --> 01:05.105
+are documented in the pad. That makes our job much easier for
+
+01:05.106 --> 01:07.664
+the publishing process. When it comes to the publishing
+
+01:07.665 --> 01:09.663
+process, we've got everything that has to do with the
+
+01:09.664 --> 01:13.622
+pre-recordings, so people to process the audio of
+
+01:13.623 --> 01:18.101
+pre-recordings, re-encoding. We do have a lot of scripts
+
+01:18.102 --> 01:20.660
+that Sacha and myself have been writing to make our job much
+
+01:20.661 --> 01:24.459
+easier, but we are always in need of a pair of eyes to improve
+
+01:24.460 --> 01:28.138
+the process. Lastly, if you happen to have experience in
+
+01:28.139 --> 01:31.817
+infrastructure and video, we do need sysadmins to maintain
+
+01:31.818 --> 01:34.216
+the platform that we use for streaming, because again,
+
+01:34.217 --> 01:37.455
+everything we do is depending on remote machines, both for
+
+01:37.456 --> 01:42.334
+the streaming, the re-encoding, the transcription. If
+
+01:42.335 --> 01:45.013
+you have any interest in helping us with this, please send us
+
+01:45.014 --> 01:48.772
+an email. And all the information is on the website. All that
+
+01:48.773 --> 01:52.171
+remains for me is to say thank you so much for coming to
+
+01:52.172 --> 01:54.650
+EmacsConf, thanks to all the speakers for the wonderful
+
+01:54.651 --> 00:01:57.792
+talks, and I will most likely see you next year.
+
+00:01:57.793 --> 00:01:59.209
+Have fun, everyone!
diff --git a/2024/captions/emacsconf-2024-sun-open--sunday-opening-remarks--main.vtt b/2024/captions/emacsconf-2024-sun-open--sunday-opening-remarks--main.vtt
new file mode 100644
index 00000000..adff10e7
--- /dev/null
+++ b/2024/captions/emacsconf-2024-sun-open--sunday-opening-remarks--main.vtt
@@ -0,0 +1,361 @@
+WEBVTT
+
+00:00.007 --> 00:03.445
+Welcome to the second day of EmacsConf 2024.
+
+00:03.446 --> 00:05.164
+Today we have one track of talks,
+
+00:05.165 --> 00:06.483
+so you don't have to worry about
+
+00:06.484 --> 00:07.922
+missing out on anything.
+
+00:07.923 --> 00:11.201
+The best parts of EmacsConf are the conversations.
+
+00:11.202 --> 00:14.000
+The wiki has a page on how to watch and participate,
+
+00:14.001 --> 00:15.799
+and I'll give you a quick overview as well.
+
+00:15.800 --> 00:18.678
+You can watch the stream at live.emacsconf.org
+
+00:18.679 --> 00:20.917
+using free and open source software.
+
+00:20.918 --> 00:23.316
+Using a streaming media player like mpv
+
+00:23.317 --> 00:26.195
+seems to be the best way to watch in terms of performance
+
+00:26.196 --> 00:28.034
+but there are also web-based players
+
+00:28.035 --> 00:29.273
+just in case that's all you've got.
+
+00:29.274 --> 00:30.672
+As you're watching the talks,
+
+00:30.673 --> 00:32.951
+you can refer to the schedule in another window.
+
+00:32.952 --> 00:35.750
+Hover over the boxes to see the times and titles,
+
+00:35.751 --> 00:37.389
+and click on the boxes in the schedule
+
+00:37.390 --> 00:39.948
+to jump to the talk's page for more details.
+
+00:39.949 --> 00:42.147
+You can also get the schedule as an iCalendar file
+
+00:42.148 --> 00:44.226
+or as an Org file in different time zones.
+
+00:44.227 --> 00:45.705
+Many talks will be followed by
+
+00:45.706 --> 00:47.624
+live Q&A web conferences with the speaker,
+
+00:47.625 --> 00:50.543
+which will be done in BigBlueButton or BBB.
+
+00:50.544 --> 00:52.902
+These are indicated with a solid border on the schedule
+
+00:52.903 --> 00:55.501
+and by Q&A: BBB on the schedule page.
+
+00:55.502 --> 00:57.580
+You can join the web conference room
+
+00:57.581 --> 00:59.259
+by clicking on the BBB link
+
+00:59.260 --> 01:01.658
+on the schedule page or the talk's webpage.
+
+01:01.659 --> 01:04.937
+Then you can ask your questions yourself when the Q&A starts.
+
+01:04.938 --> 01:07.336
+To improve performance, please keep your webcam off
+
+01:07.337 --> 01:09.735
+and stay muted until it's your turn to talk.
+
+01:09.736 --> 01:11.214
+If you don't like Javascript,
+
+01:11.215 --> 01:13.373
+you can still ask questions via IRC
+
+01:13.374 --> 01:15.012
+and the hosts can read them out for you.
+
+01:15.013 --> 01:16.731
+We're probably going to automatically switch
+
+01:16.732 --> 01:18.930
+between talks and Q&A sessions,
+
+01:18.931 --> 01:21.529
+so the transitions on the stream might be a little sudden.
+
+01:21.530 --> 01:23.408
+People in the BigBlueButton room
+
+01:23.409 --> 01:25.047
+can continue the conversation
+
+01:25.048 --> 01:27.646
+even after the talk moves off-stream,
+
+01:27.647 --> 01:29.565
+and you can also reach out to the speakers
+
+01:29.566 --> 01:32.564
+using the contact information on the talk page.
+
+01:32.565 --> 01:35.243
+Other talks will have Q&A via Etherpad or IRC,
+
+01:35.244 --> 01:37.282
+depending on what the speakers prefer.
+
+01:37.283 --> 01:39.761
+This is indicated in the schedule with a dashed border
+
+01:39.762 --> 01:41.200
+and on the schedule page as well.
+
+01:41.201 --> 01:43.679
+Please ask your questions in the recommended places
+
+01:43.680 --> 01:45.718
+so that the speakers can easily see them.
+
+01:45.719 --> 01:47.476
+Again, if you ask your questions in IRC,
+
+01:47.477 --> 01:49.636
+we'll try to copy them to the right places.
+
+01:49.637 --> 01:50.995
+We're going to start Sunday morning
+
+01:50.996 --> 01:53.154
+with more IRC/Etherpad Q&A
+
+01:53.155 --> 01:54.073
+to try to get around
+
+01:54.074 --> 01:55.392
+some of the bandwidth issues
+
+01:55.393 --> 01:56.431
+that we noticed last year.
+
+01:56.432 --> 01:59.110
+The schedule pages and track pages have quick shortcuts
+
+01:59.111 --> 02:02.189
+so that you can find out more about talks, open the Etherpads,
+
+02:02.190 --> 02:03.916
+and join the Q&A sessions.
+
+02:03.917 --> 02:05.707
+The watch page has more tips
+
+02:05.708 --> 02:07.666
+on how to make the most of Q&A.
+
+02:07.667 --> 02:10.265
+If you can, please add notes and ask questions
+
+02:10.266 --> 02:12.424
+in the Etherpad for the talk. That makes it easier
+
+02:12.425 --> 02:13.863
+for everyone to share their notes,
+
+02:13.864 --> 02:16.542
+and speakers and hosts can read the questions from there.
+
+02:16.543 --> 02:19.141
+We'll copy the notes to the talk pages afterwards.
+
+02:19.142 --> 02:20.540
+We have one pad for each talk,
+
+02:20.541 --> 02:22.579
+so you can follow the links to get to the next one
+
+02:22.580 --> 02:25.178
+or go back to the schedule and get the link from there.
+
+02:25.179 --> 02:26.817
+If you have general feedback about
+
+02:26.818 --> 02:29.056
+the conference itself, please put it in
+
+02:29.057 --> 02:34.135
+pad.emacsconf.org/2024 , which is linked on each pad.
+
+02:34.136 --> 02:37.134
+You can also use this as a general community message board
+
+02:37.135 --> 02:38.893
+for things like Help Wanted.
+
+02:38.894 --> 02:40.172
+Or you can put it in IRC
+
+02:40.173 --> 02:41.531
+and we'll find it there too.
+
+02:41.532 --> 02:44.210
+Internet Relay Chat or IRC can be another great way
+
+02:44.211 --> 02:46.329
+to be part of lots of conversations.
+
+02:46.330 --> 02:49.768
+You can use chat.emacsconf.org to join the IRC channels
+
+02:49.769 --> 02:51.212
+through your web browser.
+
+02:51.213 --> 02:53.046
+The tabs on the left can help you
+
+02:53.047 --> 02:54.725
+switch between the different channels.
+
+02:54.726 --> 02:56.284
+Most discussions will be in
+
+02:56.285 --> 02:58.563
+#emacsconf-gen for the General track.
+
+02:58.564 --> 03:03.002
+If you need to reach us, you can join #emacsconf-org
+
+03:03.003 --> 03:07.241
+or e-mail emacsconf-org-private@gnu.org.
+
+03:07.242 --> 03:10.240
+You can use #emacsconf for hallway conversations.
+
+03:10.241 --> 03:12.519
+Of course, you can join any of these channels
+
+03:12.520 --> 03:14.718
+with your favourite IRC client.
+
+03:14.719 --> 03:17.197
+You can connect to irc.libera.chat
+
+03:17.198 --> 03:19.836
+port 6697 with TLS.
+
+03:19.837 --> 03:23.075
+Once again, we're going to be streaming with open captions
+
+03:23.076 --> 03:25.834
+for most of the talks this year, thanks to our speakers and
+
+03:25.835 --> 03:28.873
+captioning volunteers. The captioned talks are indicated
+
+03:28.874 --> 03:31.592
+on the schedule, and with any luck, we'll be posting
+
+03:31.593 --> 03:34.951
+transcripts on talk pages shortly after the talks start.
+
+03:34.952 --> 03:36.710
+If you need additional accommodations,
+
+03:36.711 --> 03:38.909
+please let us know in #emacsconf-org
+
+03:38.910 --> 03:40.428
+and we'll see if we can make things happen.
+
+03:40.429 --> 03:44.627
+If something goes down, we'll update status.emacsconf.org.
+
+03:44.628 --> 03:46.506
+If it doesn't look like we've noticed yet,
+
+03:46.507 --> 03:49.745
+please let us know in the #emacsconf-org IRC channel,
+
+03:49.746 --> 03:51.424
+where we will be quietly panicking.
+
+03:51.425 --> 03:54.503
+In all of these conversations, please keep in mind
+
+03:54.504 --> 03:57.382
+our guidelines for conduct. You can find them on the wiki,
+
+03:57.383 --> 03:59.661
+They basically boil down to: please be nice.
+
+03:59.662 --> 04:02.900
+If all goes well, the prerecorded talks and transcripts
+
+04:02.901 --> 04:04.179
+should be available from the talk pages
+
+04:04.180 --> 04:05.698
+shortly after they start playing,
+
+04:05.699 --> 04:08.017
+and we'll post the recordings of live talks
+
+04:08.018 --> 04:10.176
+and Q&A sessions within the next month or so.
+
+04:10.177 --> 04:13.175
+If you'd like to get an update, you can subscribe to
+
+04:13.176 --> 04:15.134
+the emacsconf-discuss mailing list.
+
+04:15.135 --> 04:16.653
+All right, let's get going.
+
+04:16.654 --> 04:19.572
+Leo Vivier is hosting the general track again today.
+
+04:19.573 --> 04:23.131
+The other volunteers and I will run around mostly backstage,
+
+04:23.132 --> 04:25.210
+and you'll probably meet us in the closing remarks.
+
+04:25.211 --> 04:28.689
+That's also where we get to thank
+
+04:28.690 --> 04:30.648
+all the people and organizations
+
+04:30.649 --> 04:32.927
+who make EmacsConf even possible.
+
+04:32.928 --> 04:36.647
+Thanks for coming to EmacsConf 2024.
diff --git a/2024/captions/emacsconf-2024-theme--my-journey-of-finding-and-creating-the-perfect-emacs-theme--metrowind--answers.vtt b/2024/captions/emacsconf-2024-theme--my-journey-of-finding-and-creating-the-perfect-emacs-theme--metrowind--answers.vtt
new file mode 100644
index 00000000..bb183779
--- /dev/null
+++ b/2024/captions/emacsconf-2024-theme--my-journey-of-finding-and-creating-the-perfect-emacs-theme--metrowind--answers.vtt
@@ -0,0 +1,405 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:09.279
+So just to be clear, right now we are currently streaming. So
+
+00:00:09.280 --> 00:00:12.679
+if you want to answer with your voice, you can as well. Oh, I'm
+
+00:00:12.680 --> 00:00:17.999
+sorry. Okay. Yeah. So I've got a question. I think there was a
+
+00:00:18.000 --> 00:00:20.279
+little bit of a misunderstanding with whether we were doing
+
+00:00:20.280 --> 00:00:25.079
+a Q&A on BBB or if we were doing it on Etherpad. So it's really
+
+00:00:25.080 --> 00:00:28.479
+up to you. Right now we've set up everything. So if you want to
+
+00:00:28.480 --> 00:00:32.119
+start answering questions with your voice, we might as
+
+00:00:32.120 --> 00:00:33.864
+well. So OK, so I can just do it live.
+
+NOTE Q: When you choose colors based on the same lightness, does it not hurt readability since the eye sees lightness most?
+
+00:00:33.865 --> 00:00:38.239
+So one question is, so I
+
+00:00:38.240 --> 00:00:41.839
+assume this is a question on the lab space, where all the
+
+00:00:41.840 --> 00:00:46.959
+colors are the same lightness. Does it hurt readability? So
+
+00:00:46.960 --> 00:00:53.679
+far, I find it to be OK. For the lab theme, I picked the colors
+
+00:00:53.680 --> 00:01:00.999
+manually. So like I could just fix a angle essentially so
+
+00:01:01.000 --> 00:01:11.759
+that no colors are similar, so I have good readability. But
+
+00:01:11.760 --> 00:01:18.959
+for a random theme in Monte Carlo, it's hard because like
+
+00:01:18.960 --> 00:01:24.639
+it's just random. But yeah, that's a really good point. And
+
+00:01:24.640 --> 00:01:28.959
+also that's one of the motivations I did the nothing, you
+
+00:01:28.960 --> 00:01:33.999
+know, the great scale theme to explore just using
+
+00:01:34.000 --> 00:01:39.759
+lightness. Yeah.
+
+00:01:39.760 --> 00:01:48.199
+So looking at other questions.
+
+00:01:48.200 --> 00:01:52.279
+Okay, great. Do you want to take the next question. So, okay.
+
+NOTE Q: For monte-carlo, are all the "random" colors picked using a colorwheel/hue rotation?
+
+00:01:52.280 --> 00:01:56.959
+Okay, let's go to the third first. Let's finish. Yes, for
+
+00:01:56.960 --> 00:01:59.999
+Monte Carlo are all the random colors that using a color
+
+00:02:00.000 --> 00:02:06.479
+wheel here. Yes. Well, so basically, what this theme does is
+
+00:02:06.480 --> 00:02:14.159
+it. It picks a saturation and lightness for me first. These
+
+00:02:14.160 --> 00:02:19.759
+are also random, but they are picked with some kind of range.
+
+00:02:19.760 --> 00:02:26.559
+And that's a parameter that I can play with, you know, the
+
+00:02:26.560 --> 00:02:28.959
+range of lightness and separation.
+
+00:02:28.960 --> 00:02:33.479
+Once those are fixed, the colors are picked by angles in the
+
+00:02:33.480 --> 00:02:38.399
+color wheel, or heel rotation, as you would put it. So yes,
+
+00:02:38.400 --> 00:02:43.719
+that's roughly the process.
+
+NOTE Q: One area I see emacs able to do themes that is "underused?" is changing the font
+
+00:02:43.720 --> 00:02:47.239
+OK, great. I think the second question is still in the
+
+00:02:47.240 --> 00:02:51.679
+process. Oh, well, maybe you could start fielding it. I
+
+00:02:51.680 --> 00:02:55.319
+think you've got already something to work on. I see one area
+
+00:02:55.320 --> 00:03:01.199
+I see Emacs able to do. under use is changing the font, font
+
+00:03:01.200 --> 00:03:09.759
+size, font type, model space based on various faces. Yeah,
+
+00:03:09.760 --> 00:03:13.439
+so to paraphrase the question, one thing that Emacs is
+
+00:03:13.440 --> 00:03:17.399
+definitely not doing a whole lot of right now is changing the
+
+00:03:17.400 --> 00:03:21.079
+font that is being used, be it the font size, the font family.
+
+00:03:21.080 --> 00:03:25.039
+Sometimes you see themes, especially old mode themes,
+
+00:03:25.040 --> 00:03:29.199
+fontify differently the headers of the documents versus
+
+00:03:29.200 --> 00:03:31.879
+the content, and usually you do have a little bit of a
+
+00:03:31.880 --> 00:03:34.719
+contrast that is being introduced. But is it something that
+
+00:03:34.720 --> 00:03:38.959
+you find value in, this type of contrast based on font? And to
+
+00:03:38.960 --> 00:03:45.159
+me, it's my personal preference to just use one font. I don't
+
+00:03:45.160 --> 00:03:51.479
+even change the font size a lot in org mode. It's just
+
+00:03:51.480 --> 00:03:55.319
+personal preference.
+
+00:03:55.320 --> 00:03:58.999
+I've seen scenes where once I applied, I opened the org doc
+
+00:03:59.000 --> 00:04:04.639
+and suddenly all the titles are like Serif or some fancy
+
+00:04:04.640 --> 00:04:12.759
+fonts. That works. And to me, again, it's a personal
+
+00:04:12.760 --> 00:04:16.919
+preference that I don't really like that, but I know a lot of
+
+00:04:16.920 --> 00:04:21.799
+people like that. So it's up to you, I guess. Yeah, I mean,
+
+00:04:21.800 --> 00:04:25.839
+this, as we've seen in your talk and as well as the previous
+
+00:04:25.840 --> 00:04:29.279
+one we had this morning, you know, themes are very personal
+
+00:04:29.280 --> 00:04:33.079
+and at the end, whatever you need to, you know, some people
+
+00:04:33.080 --> 00:04:35.799
+are going to need more contrast than others, some people are
+
+00:04:35.800 --> 00:04:37.999
+going to need a little more variety in the fonts that they
+
+00:04:38.000 --> 00:04:41.359
+use. Ultimately, it's up to you really what you want to use.
+
+00:04:41.360 --> 00:04:45.199
+The end point, the angle that one should be aiming for is to
+
+00:04:45.200 --> 00:04:49.039
+feel comfortable in what they're editing. And whether this
+
+00:04:49.040 --> 00:04:52.799
+comfort translates into a very barebone color theme like
+
+00:04:52.800 --> 00:04:56.319
+the one we saw this morning with very slight colors but still
+
+00:04:56.320 --> 00:04:59.079
+which has a lot of personality or perhaps something closer
+
+00:04:59.080 --> 00:05:04.279
+to yours which tends to use equal luminance or lightness for
+
+00:05:04.280 --> 00:05:07.879
+the different entries. Well, everyone needs to tune in and
+
+00:05:07.880 --> 00:05:13.959
+find whatever works best for them, I think. Yep. And also, I
+
+00:05:13.960 --> 00:05:18.479
+want to note, I actually have a personal rule. It's also in
+
+00:05:18.480 --> 00:05:24.479
+all my themes. It's that comments have to be italic. I just
+
+00:05:24.480 --> 00:05:31.999
+like the look of italic comments. So, I actually... So, if
+
+00:05:32.000 --> 00:05:37.799
+you... In one of the section in the video, I mentioned I have
+
+00:05:37.800 --> 00:05:41.959
+hooks. Maybe I didn't mention, but I have hooks when using
+
+00:05:41.960 --> 00:05:47.359
+the picking the random theme setup. One of the purpose of
+
+00:05:47.360 --> 00:05:52.359
+that hook is I can add italic to all the themes on the comment
+
+00:05:52.360 --> 00:05:58.999
+face. Which I don't think it works actually right now, but
+
+00:05:59.000 --> 00:06:02.679
+that's the intention. Yeah, but I think it answers the
+
+00:06:02.680 --> 00:06:05.879
+question we started on originally. Because changing the
+
+00:06:05.880 --> 00:06:11.559
+font, I mean, using the italic variant of the font, it's
+
+00:06:11.560 --> 00:06:14.119
+literally a different font. And so, being able to have this
+
+00:06:14.120 --> 00:06:17.479
+type of contrast is actually important for you. So, it's
+
+00:06:17.480 --> 00:06:20.839
+nice that you managed to find this particular bit of
+
+00:06:20.840 --> 00:06:25.519
+knowledge through experimentation. And also I want to add
+
+00:06:25.520 --> 00:06:30.719
+that if you pick a monospace font like I do, usually there's
+
+00:06:30.720 --> 00:06:37.439
+not a lot of... Creativity? No, that's not the word. It's a
+
+00:06:37.440 --> 00:06:45.639
+lot of personality in the regular font part. But people do
+
+00:06:45.640 --> 00:06:51.799
+put a lot of different things in the italic. So yeah, if you
+
+00:06:51.800 --> 00:06:55.999
+can find a way to utilize the italic face, you could see some
+
+00:06:56.000 --> 00:07:01.239
+interesting results. Yeah, definitely. Again, I think
+
+00:07:01.240 --> 00:07:03.719
+it's important to consider all the things you can play with
+
+00:07:03.720 --> 00:07:06.519
+in terms of contrast. Because at the end of the day, you know,
+
+00:07:06.520 --> 00:07:08.839
+some people are going to be more receptive to a change of font
+
+00:07:08.840 --> 00:07:11.639
+than change of color. You know, just considering the amount
+
+00:07:11.640 --> 00:07:14.439
+of people who are colorblind and who are using software like
+
+00:07:14.440 --> 00:07:19.279
+this. You know, sometimes your vision optimizes for
+
+00:07:19.280 --> 00:07:22.039
+particular kind of changes and some people are going to be
+
+00:07:22.040 --> 00:07:26.279
+more sensitive to a slanted eye than they would be to an eye
+
+00:07:26.280 --> 00:07:31.479
+that is red or an eye that is blue. So, But it's not for
+
+00:07:31.480 --> 00:07:31.999
+everyone.
+
+00:07:32.000 --> 00:07:37.519
+So I'm looking at the time and we have about eight minutes
+
+00:07:37.520 --> 00:07:38.839
+until we go into the next talk.
+
+00:07:38.840 --> 00:07:44.519
+To be frank, I don't think I've got any more questions on my
+
+00:07:44.520 --> 00:07:46.879
+end. I'm not sure if we've got any people on BBB who has joined
+
+00:07:46.880 --> 00:07:49.119
+us and would like to ask a question. Let me check on IRC
+
+00:07:49.120 --> 00:07:53.799
+quickly if we've got any questions coming our way. I don't
+
+00:07:53.800 --> 00:07:57.199
+see any. Do you see any on your end?
+
+00:07:57.200 --> 00:08:06.479
+Not really. Well, then I suggest we just leave it at that and
+
+00:08:06.480 --> 00:08:08.679
+enjoy a little break before the next chat. So, thank you so
+
+00:08:08.680 --> 00:08:11.559
+much Metrowind for coming to EmacsConf and talking about
+
+00:08:11.560 --> 00:08:14.399
+colors because, as you saw, many people are interested
+
+00:08:14.400 --> 00:08:17.199
+about them, so much that another person decided to have a
+
+00:08:17.200 --> 00:08:20.639
+chat about theme. We didn't plan for this, but it's nice to
+
+00:08:20.640 --> 00:08:23.959
+see. And, well, perhaps you could collaborate in the future
+
+00:08:23.960 --> 00:08:26.919
+and both find the mutual confidence that you need to push
+
+00:08:26.920 --> 00:08:29.799
+your stuff to Melpa. Because I did hear that you weren't
+
+00:08:29.800 --> 00:08:33.119
+feeling too confident about your random color theme
+
+00:08:33.120 --> 00:08:37.439
+package. But, you know, you've done the first step, which is
+
+00:08:37.440 --> 00:08:40.559
+talking about it and sharing it with all of us. And perhaps
+
+00:08:40.560 --> 00:08:42.759
+the next step is to actually clean up the code to your
+
+00:08:42.760 --> 00:08:47.959
+satisfaction and publish it eventually. Oh, I can see
+
+00:08:47.960 --> 00:08:53.460
+another question. Should we go to that? Sure.
+
+NOTE Q: Have you ever kept any of the random themes that were thrown up?
+
+00:08:53.461 --> 00:08:54.079
+Have you ever
+
+00:08:54.080 --> 00:08:59.719
+kept any of the random themes that were thrown up? So I assume
+
+00:08:59.720 --> 00:09:05.119
+this is for the Monte Carlo setup. The answer is no. The
+
+00:09:05.120 --> 00:09:09.999
+reason is, like I mentioned, I'm using the randomly picking
+
+00:09:10.000 --> 00:09:15.079
+a theme setup right now. And Monte Carlo is one of them. Now,
+
+00:09:15.080 --> 00:09:18.639
+when Emacs picks Monte Carlo by chance, I wouldn't know
+
+00:09:18.640 --> 00:09:23.239
+about it. So I wouldn't know this is my random theme. That's
+
+00:09:23.240 --> 00:09:28.839
+the reason I never kept any, like, good color schemes
+
+00:09:28.840 --> 00:09:34.959
+generated. So, no. Right, okay. Well, considering we don't
+
+00:09:34.960 --> 00:09:37.359
+have any further questions, what I suggest now is that we'll
+
+00:09:37.360 --> 00:09:40.239
+leave it at that. So, again, Metrowind, thank you so much.
+
+00:09:40.240 --> 00:09:43.079
+Thank you. And hopefully we'll hear more of your themes in
+
+00:09:43.080 --> 00:09:51.120
+the future. Cool. Thanks. All right. Bye bye. Bye bye.
diff --git a/2024/captions/emacsconf-2024-theme--my-journey-of-finding-and-creating-the-perfect-emacs-theme--metrowind--main--chapters.vtt b/2024/captions/emacsconf-2024-theme--my-journey-of-finding-and-creating-the-perfect-emacs-theme--metrowind--main--chapters.vtt
new file mode 100644
index 00000000..51441945
--- /dev/null
+++ b/2024/captions/emacsconf-2024-theme--my-journey-of-finding-and-creating-the-perfect-emacs-theme--metrowind--main--chapters.vtt
@@ -0,0 +1,29 @@
+WEBVTT
+
+
+00:00:02.140 --> 00:00:47.560
+Introduction
+
+00:00:48.820 --> 00:01:14.470
+Deviant
+
+00:01:15.640 --> 00:02:50.320
+FlucUI
+
+00:02:51.910 --> 00:05:23.440
+Lab
+
+00:05:25.090 --> 00:06:13.930
+NotInk: grayscale
+
+00:06:13.930 --> 00:06:48.580
+Random theme
+
+00:06:50.020 --> 00:07:18.370
+Monte Carlo
+
+00:07:19.780 --> 00:08:10.870
+How to pick a random color palette
+
+00:08:12.070 --> 00:11:23.540
+XYZ
diff --git a/2024/captions/emacsconf-2024-theme--my-journey-of-finding-and-creating-the-perfect-emacs-theme--metrowind--main.vtt b/2024/captions/emacsconf-2024-theme--my-journey-of-finding-and-creating-the-perfect-emacs-theme--metrowind--main.vtt
new file mode 100644
index 00000000..3f132c9a
--- /dev/null
+++ b/2024/captions/emacsconf-2024-theme--my-journey-of-finding-and-creating-the-perfect-emacs-theme--metrowind--main.vtt
@@ -0,0 +1,619 @@
+WEBVTT captioned by MetroWind
+
+NOTE Introduction
+
+00:02.140 --> 00:05.440
+Hi my name is MetroWind.
+
+00:05.440 --> 00:12.910
+In this talk I will take you through my journey into Emacs themes.
+
+00:12.970 --> 00:15.730
+I am a long-time Emacs user. I started using
+
+00:15.760 --> 00:17.770
+Emacs since version 21.
+
+00:19.090 --> 00:22.960
+The goal of this talk is to inspire more people into making themes.
+
+00:24.070 --> 00:26.350
+Maybe you are already making themes.
+
+00:26.350 --> 00:29.410
+In that case I hope you could find some tips and tricks
+
+00:30.550 --> 00:33.670
+you know in this one
+
+00:33.670 --> 00:36.070
+I will basically go through all the themes
+
+00:36.130 --> 00:36.910
+that I created.
+
+00:37.960 --> 00:40.000
+But I think the most important thing
+
+00:40.000 --> 00:42.910
+here is to understand why some of
+
+00:42.910 --> 00:44.620
+the some of the colors are picked,
+
+00:44.860 --> 00:47.560
+and the motivations behind them.
+
+NOTE Deviant
+
+00:48.820 --> 00:50.800
+So the first theme I created is
+
+00:50.800 --> 00:54.190
+called Deviant. It looks like this.
+
+00:55.810 --> 00:57.730
+The inspiration for this one is a
+
+00:57.730 --> 01:00.820
+website called DeviantArt. Basically I just
+
+01:00.850 --> 01:03.580
+use their color palette, you know, from their design.
+
+01:04.810 --> 01:10.750
+It was a like a community for indie artists.
+
+01:10.750 --> 01:12.820
+I was really into that, you know,
+
+01:12.820 --> 01:14.470
+back in the day so that’s that.
+
+NOTE FlucUI
+
+01:15.640 --> 01:19.090
+Otherwise, nothing special. The next theme
+
+01:19.120 --> 01:21.220
+I created was called FlucUI
+
+01:24.820 --> 01:25.630
+It’s in MELPA.
+
+01:26.530 --> 01:27.640
+And let me just show you.
+
+01:35.260 --> 01:37.600
+So yeah that's how it looks like.
+
+01:42.280 --> 01:45.250
+So... but where where did the colors
+
+01:45.250 --> 01:49.060
+come from, right? To understand that,
+
+01:50.290 --> 01:55.270
+I'll need to take you back in time, you know, to where iOS 7
+
+01:55.330 --> 01:58.000
+was released by Apple. That was a
+
+01:58.000 --> 02:01.900
+big deal, because that popularized the idea
+
+02:01.930 --> 02:05.290
+of flat UI color designs; sorry, flat UI
+
+02:05.290 --> 02:10.360
+designs. And after that, everybody followed suit,
+
+02:10.360 --> 02:14.440
+and changed their design, you know
+
+02:14.440 --> 02:22.420
+of all of their websites and applications to use some sort of flat UI design concepts.
+
+02:23.470 --> 02:27.550
+And about the same time, there came a website called flatuicolors.com.
+
+02:28.720 --> 02:30.820
+It hosted one color palette,
+
+02:32.110 --> 02:34.030
+and that was really good!
+
+02:35.110 --> 02:39.490
+So I picked that as the basis of my theme.
+
+02:40.900 --> 02:43.959
+And initially I named it FlatUI,
+
+02:43.959 --> 02:46.717
+But that name was taken in MELPA
+
+02:46.717 --> 02:50.320
+So i just rename it to something random, FlucUI.
+
+NOTE Lab
+
+02:51.910 --> 02:55.060
+The next one is called lab.
+
+02:57.310 --> 03:00.340
+To understand why I needed to create the theme,
+
+03:03.850 --> 03:08.620
+it's because I thought some of the colors in FlucUI
+
+03:10.780 --> 03:15.250
+was standing out too much, like the green here.
+
+03:18.010 --> 03:18.640
+This one.
+
+03:20.170 --> 03:22.090
+I thought this was too bright.
+
+03:22.780 --> 03:26.050
+Just a little bit.
+
+03:27.100 --> 03:30.100
+So I thought I needed way to pick
+
+03:30.100 --> 03:32.890
+some colors that are about the same
+
+03:32.890 --> 03:35.350
+lightness essentially. So how would I do that?
+
+03:35.350 --> 03:42.370
+The answer is to go into a color space called LAB.
+
+03:42.880 --> 03:45.130
+Now normally you'd do color work in RGB,
+
+03:46.420 --> 03:49.300
+which is red, green, and blue.
+
+03:49.660 --> 03:52.420
+It doesn't tell you a lot about lightness.
+
+03:53.830 --> 03:56.440
+If you do a pure blue,
+
+03:56.440 --> 03:58.600
+it actually looks a lot darker than a
+
+03:58.600 --> 04:01.510
+pure red or pure green. So that
+
+04:01.631 --> 04:04.990
+that doesn't work. But in LAB,
+
+04:04.990 --> 04:07.120
+thing are different, because one of the channel
+
+04:07.360 --> 04:10.810
+is L which is lightness. The other
+
+04:10.810 --> 04:13.600
+two channels are a and b, which are just
+
+04:13.750 --> 04:17.140
+for colors. This is great because
+
+04:17.140 --> 04:19.630
+I could just fix L meaning
+
+04:19.630 --> 04:21.790
+I fixed the lightness, and then I can
+
+04:21.790 --> 04:25.300
+vary a and b however I want.
+
+04:25.300 --> 04:27.850
+The color will stay roughly in the same
+
+04:27.850 --> 04:30.310
+lightness, which is exactly what I wanted.
+
+04:31.780 --> 04:34.210
+So for that I created a
+
+04:34.210 --> 04:38.230
+Mac app, where I could just
+
+04:38.230 --> 04:40.330
+fix lightness like I said, and then
+
+04:40.330 --> 04:42.550
+I could click on this colorful thing,
+
+04:42.670 --> 04:45.010
+to pick a color. The app will
+
+04:45.010 --> 04:47.950
+pick another five according to some pattern.
+
+04:48.430 --> 04:50.140
+And then I could just like hard-code
+
+04:50.140 --> 04:51.640
+these colors in Emacs.
+
+04:52.930 --> 04:54.160
+Let me show you.
+
+04:56.230 --> 04:58.000
+apply theme... lab...
+
+04:59.590 --> 05:02.110
+Yeah not very different from FlucUI colors,
+
+05:02.140 --> 05:04.300
+which was intentional.
+
+05:05.350 --> 05:08.200
+The idea here again is
+
+05:08.380 --> 05:10.660
+all the colors will be in about
+
+05:10.660 --> 05:13.570
+the same lightness, which I guess it was.
+
+05:14.230 --> 05:18.250
+So yeah... So this one was
+
+05:18.280 --> 05:20.830
+a success. I use it for a
+
+05:20.830 --> 05:23.440
+really long time. And then I got bored...
+
+NOTE NotInk: grayscale
+
+05:25.090 --> 05:28.150
+So I needed something interesting.
+
+05:28.150 --> 05:31.900
+The idea at the time was then to create a theme
+
+05:33.460 --> 05:36.310
+that doesn't have any colors essentially.
+
+05:36.310 --> 05:41.740
+A grayscale theme. So I called
+
+05:41.740 --> 05:44.830
+it NotInk. It is also in Melpa
+
+05:46.060 --> 05:46.960
+It looks like this.
+
+05:49.210 --> 05:50.650
+Yeah like I said, everything is grey.
+
+05:51.310 --> 05:53.530
+There's no color. But to my
+
+05:53.530 --> 05:56.500
+surprise, this is actually very useable.
+
+05:56.500 --> 05:59.500
+I didn't have any problem in readability;
+
+05:59.500 --> 06:02.170
+I didn't have any problem distinguishing, you know,
+
+06:02.170 --> 06:05.857
+different elements in the code. So a
+
+06:05.857 --> 06:09.460
+big surprise. And also a big success actually.
+
+06:10.720 --> 06:13.930
+And then I got bored.
+
+NOTE Random theme
+
+06:13.930 --> 06:16.360
+I just decided to install a whole bunch
+
+06:16.360 --> 06:17.710
+of themes from MELPA,
+
+06:18.310 --> 06:20.650
+and every time I start Emacs I
+
+06:20.650 --> 06:21.760
+just pick a random theme.
+
+06:23.200 --> 06:25.660
+There are some caveats to that,
+
+06:25.660 --> 06:27.280
+which I don't want to get into.
+
+06:28.660 --> 06:31.210
+But let me just show you.
+
+06:31.210 --> 06:33.130
+apply-random-theme, so it picked one for
+
+06:33.130 --> 06:37.030
+me. And then it picked another... another...
+
+06:37.060 --> 06:37.600
+So yeah.
+
+06:39.490 --> 06:42.340
+It's an interesting setup. I'm still using
+
+06:42.340 --> 06:45.010
+this setup today. Actually a good one
+
+06:46.150 --> 06:48.580
+Walls of text...
+
+NOTE Monte Carlo
+
+06:50.020 --> 06:52.240
+Now the final theme I want to look into,
+
+06:53.380 --> 06:55.750
+which is the latest, is called Monte Carlo.
+
+06:56.650 --> 06:59.110
+...which you know, idea here is to
+
+06:59.110 --> 07:01.947
+bring the idea of picking a random
+
+07:01.990 --> 07:05.620
+theme to the next level.
+
+07:05.620 --> 07:08.440
+So this is just one theme that generates
+
+07:08.470 --> 07:11.530
+a random color palette for me everytime.
+
+07:12.880 --> 07:15.400
+Not in MELPA, because I'm not ...
+
+07:15.419 --> 07:18.370
+I'm not completely satisfied with it.
+
+NOTE How to pick a random color palette
+
+07:19.780 --> 07:22.510
+But anyway... How do I... How do I pick
+
+07:22.540 --> 07:23.830
+a random color palette right?
+
+07:25.030 --> 07:29.680
+The answer is again to look at a different color space.
+
+07:29.680 --> 07:32.890
+This time it's called HLC, which is hue,
+
+07:32.950 --> 07:36.370
+lightness, and chroma. So hue is just
+
+07:36.670 --> 07:40.270
+colors, red, green, blue, or yellow, whatever.
+
+07:40.810 --> 07:44.200
+Lightness is lightness. Chroma is saturation,
+
+07:45.160 --> 07:47.800
+essentially. This is great because I could
+
+07:48.160 --> 07:52.150
+fix both lightness and saturation, and only
+
+07:52.150 --> 07:55.180
+vary in hue to pick my colors.
+
+07:57.580 --> 08:00.190
+Now the problem is
+
+08:01.660 --> 08:03.220
+once I have the color palette in
+
+08:03.250 --> 08:06.105
+HLC, how would I convert it to
+
+08:06.105 --> 08:09.250
+sRGB, because Emacs only knows
+
+08:09.250 --> 08:10.870
+about colors in sRGB.
+
+NOTE XYZ
+
+08:12.070 --> 08:14.230
+The answer here is to go through
+
+08:14.230 --> 08:16.450
+another color space called XYZ.
+
+08:17.950 --> 08:21.340
+This is an extremely important color space,
+
+08:21.670 --> 08:25.870
+because basically all other color spaces are
+
+08:25.870 --> 08:27.790
+defined on top of XYZ.
+
+08:28.930 --> 08:31.180
+So you would have like transformations
+
+08:31.180 --> 08:34.450
+from XYZ to all other
+
+08:34.480 --> 08:37.570
+color spaces. Now if you invert this
+
+08:37.750 --> 08:41.440
+these transformations, you could go from,
+
+08:41.440 --> 08:43.870
+for example, HLC back into XYZ
+
+08:43.900 --> 08:46.960
+and then go to another color
+
+08:46.960 --> 08:48.910
+space of your choosing, right.
+
+08:49.750 --> 08:51.400
+So this is how to convert colors
+
+08:51.430 --> 08:54.970
+between color spaces. In this case,
+
+08:55.270 --> 08:57.850
+I have to convert colors from HLC
+
+08:57.850 --> 08:59.920
+to LAB, and from LAB to XYZ,
+
+08:59.920 --> 09:02.530
+and from XYZ to sRGB.
+
+09:02.530 --> 09:05.710
+So this time the conversions are
+
+09:05.710 --> 09:08.200
+all done in Emacs Lisp, and I
+
+09:08.200 --> 09:13.270
+have the code in here in this URL.
+
+09:13.270 --> 09:14.830
+You could take a look, or you
+
+09:14.830 --> 09:17.350
+could actually just use maybe some package
+
+09:18.310 --> 09:19.390
+to convert colors.
+
+09:20.470 --> 09:23.740
+Anyway let me show you how
+
+09:23.740 --> 09:26.560
+this works. So in this case I
+
+09:26.590 --> 09:29.200
+could apply theme, Monte Carlo.
+
+09:30.670 --> 09:33.760
+So this is now a random theme.
+
+09:33.790 --> 09:36.730
+Actually, well, a theme with random colors,
+
+09:37.150 --> 09:39.580
+because I could apply the same theme,
+
+09:40.960 --> 09:41.920
+and it will look different.
+
+09:45.250 --> 09:45.790
+Every time.
+
+09:48.640 --> 09:52.060
+I could also look at the colors it picked.
+
+09:53.750 --> 09:55.100
+as a list of colors.
+
+09:57.740 --> 10:00.260
+I could also look at this like
+
+10:00.260 --> 10:04.370
+fancy chart of colors. This is
+
+10:04.370 --> 10:06.920
+too small. So let me show you this.
+
+10:06.920 --> 10:10.400
+So basically the same thing.
+
+10:10.400 --> 10:15.650
+This is actually a cross-section in HLC space,
+
+10:16.310 --> 10:18.650
+and the colors it picked are these like
+
+10:18.650 --> 10:19.520
+white circles.
+
+10:20.660 --> 10:23.060
+So that's that.
+
+10:24.740 --> 10:26.150
+But like I said, I'm not
+
+10:26.150 --> 10:30.170
+fully satisfied, because most of time the
+
+10:30.170 --> 10:32.540
+colors are pretty boring from it.
+
+10:33.770 --> 10:36.320
+I could think of some
+
+10:36.320 --> 10:38.570
+ways to improve this. For example I
+
+10:38.570 --> 10:43.485
+could choose different patterns for the color
+
+10:43.490 --> 10:47.540
+samples. but I don't know of any
+
+10:47.900 --> 10:49.880
+good patterns. So I need to try
+
+10:49.880 --> 10:52.130
+things out. And then another way is
+
+10:52.130 --> 10:59.960
+probably to use different color spaces like the HSL, or HSV.
+
+10:59.960 --> 11:01.100
+Again I need to try this out.
+
+11:02.240 --> 11:04.880
+So yeah there are room for improvements.
+
+11:05.120 --> 11:07.220
+If you... If you have and idea,
+
+11:07.520 --> 11:09.860
+you know, let me know, and we
+
+11:09.860 --> 11:10.580
+can try it out.
+
+11:11.960 --> 11:13.610
+So that's the end of my talk.
+
+11:13.880 --> 11:17.390
+Hopefully you have some new ideas.
+
+11:17.450 --> 11:20.240
+Thanks for listening in, and yeah.
+
+11:20.240 --> 11:22.400
+Go create more themes because we can't have enough.
+
+11:22.400 --> 11:23.540
+Thanks!
diff --git a/2024/captions/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--answers.vtt b/2024/captions/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--answers.vtt
new file mode 100644
index 00000000..e8cb84c4
--- /dev/null
+++ b/2024/captions/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--answers.vtt
@@ -0,0 +1,1032 @@
+WEBVTT chapters by sachac
+
+00:00:00.000 --> 00:00:07.559
+Hopefully the internet goes well. It's a nice Monday
+
+00:00:07.560 --> 00:00:31.999
+morning here in Tokyo.
+
+00:00:32.000 --> 00:00:37.879
+Are we connected all right?
+
+00:00:37.880 --> 00:00:40.879
+Okay, I seem to be struggling still with my audio. One second...
+
+00:00:40.880 --> 00:00:44.519
+calling. Yeah, you were muted for a moment there. Okay,
+
+00:00:44.520 --> 00:00:49.959
+there we are. Okay. All right. Sorry about that. I got a mute
+
+00:00:49.960 --> 00:00:55.119
+out my, my back office chatter. That's kind of distracting
+
+00:00:55.120 --> 00:00:58.079
+me a little bit. All right. Sorry. I may have lost the plot a
+
+00:00:58.080 --> 00:01:04.919
+little bit. I think I did. However, find the 1st question.
+
+00:01:04.920 --> 00:01:09.919
+I got pretty distracted by conversation backstage. Yeah,
+
+NOTE Q: When I tried comparing transducers.el to cl-lib and dash (benchmark-compiled), I got the following results
+
+00:01:09.920 --> 00:01:15.879
+no problem. So the first question here, someone's asking,
+
+00:01:15.880 --> 00:01:22.279
+when they first tried comparing transducers.el, the cl-lib
+
+00:01:22.280 --> 00:01:27.959
+and Dash bookmark compiled, and they give some detailed
+
+00:01:27.960 --> 00:01:32.479
+results we're sharing on the stream. Um, they expected
+
+00:01:32.480 --> 00:01:36.679
+transducers to be slower than CL loop, but faster than CL lib
+
+00:01:36.680 --> 00:01:41.119
+or dash. However, this isn't the case, any idea why. And so
+
+00:01:41.120 --> 00:01:43.639
+I'll, I'll come back into their data to show there's they're
+
+00:01:43.640 --> 00:01:48.279
+showing, um, you know, there's not a lot of detail on the, on
+
+00:01:48.280 --> 00:01:52.199
+the, on the use case here. We could certainly click through
+
+00:01:52.200 --> 00:02:02.559
+it, do it.
+
+00:02:02.560 --> 00:02:06.999
+Oh, I should've waited to zoom until I find my spot here.
+
+00:02:07.000 --> 00:02:13.639
+There we are.
+
+00:02:13.640 --> 00:02:18.599
+All right, so there's our example.
+
+00:02:18.600 --> 00:02:23.759
+Looks like we are doing a simple map and a sum.
+
+00:02:23.760 --> 00:02:29.239
+Mm-hmm. Yeah, that's right. Yeah, question about
+
+00:02:29.240 --> 00:02:36.279
+performance. So a case like this, a simple, I just want to rip
+
+00:02:36.280 --> 00:02:40.279
+through a collection of numbers and sum them all. That's a
+
+00:02:40.280 --> 00:02:44.679
+case where basically loop is always going to win because
+
+00:02:44.680 --> 00:02:51.319
+loop is optimized. This is true in both Emacs Lisp and in
+
+00:02:51.320 --> 00:02:56.039
+Common Lisp. For a case like this where you're not really
+
+00:02:56.040 --> 00:03:02.399
+doing two nested of chained calls, like you don't have many
+
+00:03:02.400 --> 00:03:05.839
+sort of what I was compositional steps. If you're just
+
+00:03:05.840 --> 00:03:09.999
+ripping through a collection of numbers, loop is always
+
+00:03:10.000 --> 00:03:15.559
+going to win. Transducers kind of shines when you have to do
+
+00:03:15.560 --> 00:03:19.639
+things that loop can't in terms of expressing yourself. So
+
+00:03:19.640 --> 00:03:22.559
+there are lots of different transducers that you can chain
+
+00:03:22.560 --> 00:03:27.079
+together. And in that case, you're kind of prioritizing
+
+00:03:27.080 --> 00:03:33.039
+developer time and developer happiness because you're
+
+00:03:33.040 --> 00:03:36.399
+able to yourself more clearly, whereas sometimes those
+
+00:03:36.400 --> 00:03:40.679
+kind of algorithms can get very hairy if you're just using
+
+00:03:40.680 --> 00:03:45.399
+loop. Now that sounds like I'm moving the goalposts, and
+
+00:03:45.400 --> 00:03:48.639
+there's really no excuse for these things not being as
+
+00:03:48.640 --> 00:03:54.559
+performant as possible. In this specific case, my guess is
+
+00:03:54.560 --> 00:03:57.759
+that the transducers is slower because it has to do a whole
+
+00:03:57.760 --> 00:04:03.239
+bunch of like inner function calls in order to actually do
+
+00:04:03.240 --> 00:04:09.239
+the adding and the collecting. So there's a lot of stuff that
+
+00:04:09.240 --> 00:04:12.119
+just the raw loop doesn't have to do, which transducers
+
+00:04:12.120 --> 00:04:20.439
+does. And so in this case, that's why it would be slower.
+
+00:04:20.440 --> 00:04:29.079
+All right, makes sense.
+
+00:04:29.080 --> 00:04:36.239
+Um... I cannot comment against Dash. And also a reminder
+
+00:04:36.240 --> 00:04:40.159
+that transducers both in CL and in Emacs Lisp here doesn't
+
+00:04:40.160 --> 00:04:44.919
+attempt to do any, you know, fun, you know, inner rewriting
+
+00:04:44.920 --> 00:04:48.239
+or, you know, what's called an Haskell fusion. Like if you
+
+00:04:48.240 --> 00:04:51.359
+have two different map steps, like in a row, it's not gonna
+
+00:04:51.360 --> 00:04:55.159
+see that and somehow fuse them internally. It's a fairly, in
+
+00:04:55.160 --> 00:04:59.679
+that sense, the implementation is just as is.
+
+00:04:59.680 --> 00:05:04.159
+to make it you know as raw fast as possible. The idea being
+
+00:05:04.160 --> 00:05:12.839
+that ergonomics is more important up front. Yeah, that's
+
+00:05:12.840 --> 00:05:17.519
+kind of a whole fascinating sub-panel, right? My theme this
+
+00:05:17.520 --> 00:05:19.799
+conference has been, oh, all these different things we
+
+00:05:19.800 --> 00:05:24.039
+should try to get sub-panels going for and use that. Maybe
+
+00:05:24.040 --> 00:05:29.039
+fill in the dev track or even have a third track or whatever.
+
+00:05:29.040 --> 00:05:31.519
+I'm not that concerned about the logistics of squeezing
+
+00:05:31.520 --> 00:05:38.519
+into the schedule so much. But anyway, interesting, I mean,
+
+00:05:38.520 --> 00:05:40.839
+to say.
+
+NOTE Q: Do you know of any theoretical texts on transducers?
+
+00:05:40.840 --> 00:05:47.799
+Did we already speak to theoretical texts? No, right? No,
+
+00:05:47.800 --> 00:05:53.399
+let's continue. Okay, so another question from the group.
+
+00:05:53.400 --> 00:05:58.879
+Do you know of any theoretical texts on transducers? My
+
+00:05:58.880 --> 00:06:01.959
+readme, particularly of the Common Lisp implementation,
+
+00:06:01.960 --> 00:06:06.159
+is the theoretical text on transducers. Rich Hickey has
+
+00:06:06.160 --> 00:06:10.439
+some YouTube videos which also come close. I mean, he
+
+00:06:10.440 --> 00:06:14.799
+invented the things. But in terms of having a full
+
+00:06:14.800 --> 00:06:21.559
+explanation of everything, it's my readme and it's also
+
+00:06:21.560 --> 00:06:23.319
+the...
+
+00:06:23.320 --> 00:06:28.559
+The info manual of Guile Scheme, their documentation on
+
+00:06:28.560 --> 00:06:34.199
+Surfy 171 is what I used to learn transducers and to
+
+00:06:34.200 --> 00:06:38.399
+re-implement them in other LISPs. So if you just want like a
+
+00:06:38.400 --> 00:06:41.639
+document explaining them, MyReadMe is actually the
+
+00:06:41.640 --> 00:06:46.959
+clearest that I've found. Awesome. Okay, next question.
+
+00:06:46.960 --> 00:06:50.119
+And I'm sorry, you gave a name, you referred to somebody's
+
+00:06:50.120 --> 00:06:55.439
+videos. Rich Hickey, the inventor of Clojure. Rich Hickey,
+
+00:06:55.440 --> 00:07:00.399
+thank you. Hope I got the spelling right, and maybe somebody
+
+00:07:00.400 --> 00:07:04.719
+can catch that and fix it. If not, I'll reach on. Thank you.
+
+NOTE Q: Did you think about [compiler features, macros] viz your cl, fennel, elisp, porting of your transducers?
+
+00:07:04.720 --> 00:07:08.239
+Reach on to the next question. Waters (Lazy Series in
+
+00:07:08.240 --> 00:07:12.799
+Lisp, late 70s) said this should have been done as an
+
+00:07:12.800 --> 00:07:16.799
+additional compiler feature in compilers, but if not, must
+
+00:07:16.800 --> 00:07:21.439
+be a macro package. Do you think about that vis your CL,
+
+00:07:21.440 --> 00:07:27.519
+Fennel, Elisp, porting of transducers? I think that
+
+00:07:27.520 --> 00:07:28.519
+there's definitely
+
+00:07:28.520 --> 00:07:36.519
+some Galaxy Brain Lisp author out there is probably smart
+
+00:07:36.520 --> 00:07:40.599
+enough to turn a bunch of this stuff into macros. I believe
+
+00:07:40.600 --> 00:07:47.119
+that's how the common Lisp library series works. It sees
+
+00:07:47.120 --> 00:07:52.079
+that you were calling map or whatever, and it actually knows
+
+00:07:52.080 --> 00:07:56.639
+that that's a special macro key. in order to be fast. I did not
+
+00:07:56.640 --> 00:08:01.839
+do that. The implementation as I have it is very simple and
+
+00:08:01.840 --> 00:08:05.759
+simplicity shouldn't be underestimated.
+
+00:08:05.760 --> 00:08:13.559
+I love it. What a nice succinct answer. Even I can manage to
+
+00:08:13.560 --> 00:08:16.578
+type that out as I scroll us to the next question.
+
+NOTE Q: Does t-buffer-read provide a lazy stream that's linewise, or charwise, or do something else entirely?
+
+00:08:16.579 --> 00:08:24.079
+So, does t-buffer-read provide a lazy stream
+
+00:08:24.080 --> 00:08:28.359
+that's line-wise or character-wise or do something else
+
+00:08:28.360 --> 00:08:29.018
+entirely?
+
+00:08:29.019 --> 00:08:31.587
+Okay, there are two functions. I showed
+
+00:08:31.588 --> 00:08:35.073
+t-buffer-read. There's also one called t-file-read,
+
+00:08:35.074 --> 00:08:38.682
+which does that. You actually have the buffer open,
+
+00:08:38.683 --> 00:08:40.239
+it's much more clever.
+
+00:08:40.240 --> 00:08:45.999
+t-buffer-read, I believe, is simpler. As long as you have an
+
+00:08:46.000 --> 00:08:52.079
+Emacs list, what is called the current buffer active. I'm
+
+00:08:52.080 --> 00:08:56.679
+fairly sure you're able to just call next-line on it. I don't
+
+00:08:56.680 --> 00:08:59.479
+believe that I'm doing anything fancy there, looking for
+
+00:08:59.480 --> 00:09:03.999
+line ends. I believe I'm just grabbing the next line and then
+
+00:09:04.000 --> 00:09:09.423
+processing that line-wise. Very good.
+
+NOTE Q: Can the Elisp library be combined with the stream.el API or seq in general?
+
+00:09:09.424 --> 00:09:17.303
+Can the Elisp library be combined with the stream.el API
+
+00:09:17.304 --> 00:09:22.830
+or seq in general? I would say that these libraries
+
+00:09:22.831 --> 00:09:27.596
+are completely orthogonal. You saw that everything
+
+00:09:27.597 --> 00:09:29.279
+was prefixed by t-.
+
+00:09:29.280 --> 00:09:36.879
+Basically, transducer is its own zone. However, one thing
+
+00:09:36.880 --> 00:09:40.239
+that I do in the common lisp, which is theoretically
+
+00:09:40.240 --> 00:09:44.359
+possible for the Emacs Lisp as well, is kind of like little
+
+00:09:44.360 --> 00:09:48.919
+shim libraries. So I provide, at least for Common Lisp, for a
+
+00:09:48.920 --> 00:09:51.799
+number of, you know, popular sort of third-party
+
+00:09:51.800 --> 00:09:55.239
+collection types, I provide an ability to use them as
+
+00:09:55.240 --> 00:09:59.559
+sources. Maybe that's what you mean. Like
+
+00:09:59.560 --> 00:10:04.439
+the built-in containers for Emacs Lisp are already
+
+00:10:04.440 --> 00:10:06.519
+supported. So, you know, a vector hash table and so on.
+
+00:10:06.520 --> 00:10:13.719
+make sense so i think what i heard there is yeah go ahead
+
+00:10:13.720 --> 00:10:17.879
+please sorry in terms of mixing like you know like for
+
+00:10:17.880 --> 00:10:22.599
+instance you know like seq-map used in transducers
+
+00:10:22.600 --> 00:10:28.119
+we'll put it that way
+
+00:10:28.120 --> 00:10:31.879
+i was just gonna say i think it um it it sounds like you're
+
+00:10:31.880 --> 00:10:37.199
+saying Yeah, probably they are actually. We don't know yet
+
+00:10:37.200 --> 00:10:41.239
+about any places where they don't play nicely together. So
+
+00:10:41.240 --> 00:10:45.399
+quite possibly so. We can use sequence and transducers
+
+00:10:45.400 --> 00:10:49.959
+together, for example. As a source potentially, yeah. It's
+
+00:10:49.960 --> 00:10:54.159
+very easy because that just uses defgeneric. As long as you
+
+00:10:54.160 --> 00:10:57.719
+have a new, like if you have a new collection type, as long as
+
+00:10:57.720 --> 00:11:01.519
+you implement a def method for it somewhere, it'll just
+
+00:11:01.520 --> 00:11:12.159
+magically work with this library. That's the magic of...
+
+00:11:12.160 --> 00:11:18.439
+Yeah, as an Emacs user enjoying, you know, sort of the
+
+00:11:18.440 --> 00:11:21.959
+renaissance of new features it's had, or sorry, Emacs ERC
+
+00:11:21.960 --> 00:11:27.799
+user for chat. I've seen a lot of awesome stuff get done in the
+
+00:11:27.800 --> 00:11:32.119
+last couple of years with generic set. JP never was working
+
+00:11:32.120 --> 00:11:36.679
+on that. And like, that's just making me my eyes pop and go,
+
+00:11:36.680 --> 00:11:39.279
+wow, that does make a whole lot of things simpler, doesn't
+
+00:11:39.280 --> 00:11:44.279
+it? I think we're a lot of us running into generics and how
+
+00:11:44.280 --> 00:11:47.542
+that solves problems in Emacs.
+
+NOTE Q: How does one debug a t-comp expression? Can you single step and see intermediate results of the different statements you declare?
+
+00:11:47.543 --> 00:11:50.279
+How does one debug a t-comp
+
+00:11:50.280 --> 00:11:55.119
+expression? Can you talk in terms of single step,
+
+00:11:55.120 --> 00:11:58.479
+step-by-step, intermediate results of the different
+
+00:11:58.480 --> 00:12:08.759
+statements you declare? Yes. So in Common Lisp, this is
+
+00:12:08.760 --> 00:12:12.919
+and sly stickers and things like that. In Emacs Lisp, it's a
+
+00:12:12.920 --> 00:12:19.559
+little bit, shall we say, more difficult. For step
+
+00:12:19.560 --> 00:12:20.479
+debugging,
+
+00:12:20.480 --> 00:12:25.679
+so what comp does is comp internally, it should be a macro,
+
+00:12:25.680 --> 00:12:28.839
+but currently it's not, although there's work to improve
+
+00:12:28.840 --> 00:12:33.559
+that. It's doing an internal reduce and it's turning into
+
+00:12:33.560 --> 00:12:37.479
+one giant kind of composed lambda inside. So I don't know if
+
+00:12:37.480 --> 00:12:42.999
+step debugging would work there. However, we do have one
+
+00:12:43.000 --> 00:12:47.439
+function called log, which lets you inspect intermediate
+
+00:12:47.440 --> 00:12:50.759
+results. So you could technically use that to inject
+
+00:12:50.760 --> 00:12:54.279
+yourself somewhere into the transduction chain and, you
+
+00:12:54.280 --> 00:12:57.239
+know, halt or, you know, inspect the current value, et
+
+00:12:57.240 --> 00:13:01.119
+cetera. So you get a bunch of questions lined up. I think
+
+00:13:01.120 --> 00:13:04.199
+we're coming up, uh, within our last five minutes, uh,
+
+00:13:04.200 --> 00:13:07.919
+before some declared, uh, reset time that we have
+
+00:13:07.920 --> 00:13:11.919
+internally to just roll our closing credits, so to speak.
+
+00:13:11.920 --> 00:13:14.839
+Um, not that I would want to cut the question and answer
+
+00:13:14.840 --> 00:13:18.399
+short, but I might have to step away personally. But, um, as
+
+00:13:18.400 --> 00:13:21.519
+we discussed before, you can just kind of run the QA, however
+
+00:13:21.520 --> 00:13:24.879
+you want here. Um, or, or take questions offline if you'd
+
+00:13:24.880 --> 00:13:27.999
+like to answer them off the pad. And I just want to say one more
+
+00:13:28.000 --> 00:13:30.959
+time. Kitt said it managed later. Thanks again for your talk
+
+00:13:30.960 --> 00:13:35.759
+for dedicating the time to this live QA. And I think we can see
+
+00:13:35.760 --> 00:13:40.279
+by the many questions that are here. So I'll try to kind of
+
+00:13:40.280 --> 00:13:42.959
+flip us through as many of them as I can with our last couple of
+
+00:13:42.960 --> 00:13:48.399
+minutes, if that sounds good. Alternately, this might be a
+
+00:13:48.400 --> 00:13:52.079
+good time if you have kind of wrap it up, final thoughts, as
+
+00:13:52.080 --> 00:13:58.399
+Leo Sopanda saying. By all means, have at. Sure, thanks a
+
+00:13:58.400 --> 00:14:01.639
+lot. I'd say that if you are still curious, check out the
+
+00:14:01.640 --> 00:14:05.159
+read-me's because those have a lot of information,
+
+00:14:05.160 --> 00:14:09.519
+including a full description of the API and everything
+
+00:14:09.520 --> 00:14:10.719
+that's available.
+
+00:14:10.720 --> 00:14:16.599
+Otherwise, just give them a shot. Using these things is the
+
+00:14:16.600 --> 00:14:21.639
+best way to learn them, of course. I use them everywhere,
+
+00:14:21.640 --> 00:14:24.719
+basically, all across my Emacs list and all across my common
+
+00:14:24.720 --> 00:14:29.839
+list now. They get a lot of mileage. All right. You're
+
+00:14:29.840 --> 00:14:33.639
+speaking our language now. As Emacs users, all our ears poke
+
+00:14:33.640 --> 00:14:36.039
+up when you say, I'm getting a lot of mileage. I'm using it
+
+00:14:36.040 --> 00:14:39.879
+across everything. Every Emacs user has a story that
+
+00:14:39.880 --> 00:14:42.494
+harmonizes with that, I think.
+
+NOTE Q: Is there a path for transducers to enable elisp processing of otherwise overly large datasets as if just normal Emacs \"buffers\" (i.e. just pulling one thing at a time so essentially stream-like under the hood but buffer-like in interface), with none of the usual perf issues with a traditional buffer structure?
+
+00:14:42.495 --> 00:14:44.519
+So our next question, is
+
+00:14:44.520 --> 00:14:48.599
+there a path for transducers to enable Elisp processing or
+
+00:14:48.600 --> 00:14:53.999
+otherwise overly large data sets as if just normal Emacs
+
+00:14:54.000 --> 00:14:56.959
+buffers, i.e. just pulling one thing at a time. So
+
+00:14:56.960 --> 00:15:00.719
+essentially stream like under the hood, but buffer like an
+
+00:15:00.720 --> 00:15:03.519
+interface. I think that makes sense to me. with none of the
+
+00:15:03.520 --> 00:15:07.799
+usual performance issues, like as if, you know, the history
+
+00:15:07.800 --> 00:15:11.399
+with long files is what that brings to mind, I guess. Yes, so
+
+00:15:11.400 --> 00:15:15.799
+as you saw before, the withBufferRead sort of stream
+
+00:15:15.800 --> 00:15:19.879
+function does have to have the actual buffer in memory, and
+
+00:15:19.880 --> 00:15:22.679
+then you can go really fast. But there's another one with
+
+00:15:22.680 --> 00:15:26.839
+file read. Now, again, I haven't tried to optimize that yet.
+
+00:15:26.840 --> 00:15:30.119
+But in theory, it is able to read right from the underlying
+
+00:15:30.120 --> 00:15:32.839
+file without having to open it as a buffer first.
+
+00:15:32.840 --> 00:15:39.199
+Awesome. Ari, the performance issues mentioned, and that
+
+00:15:39.200 --> 00:15:43.479
+popped up recently in the list and forums, to what extent
+
+00:15:43.480 --> 00:15:46.959
+does tail call optimization and other mechanisms like
+
+00:15:46.960 --> 00:15:50.159
+inlining, garbage collection friendliness, and so on,
+
+00:15:50.160 --> 00:15:55.159
+could these alleviate issues, enable their use at little to
+
+00:15:55.160 --> 00:15:58.439
+no extra costs? I feel like we're leading the witness here,
+
+00:15:58.440 --> 00:16:01.279
+but I'm sure you see where we're going. Yeah, no problem. So
+
+00:16:01.280 --> 00:16:03.799
+in terms of tail optimization, that's already happening
+
+00:16:03.800 --> 00:16:09.199
+because the internal loop mechanism is using CL labels. And
+
+00:16:09.200 --> 00:16:12.199
+in Emacs Lisp, CL labels is just a macro that is like
+
+00:16:12.200 --> 00:16:16.079
+extremely tail recursive. So that's very, very fast. It's
+
+00:16:16.080 --> 00:16:19.039
+not tail recursive, but it's using like goto. So it's
+
+00:16:19.040 --> 00:16:22.519
+extremely, extremely fast, like the raw looping of it. So,
+
+00:16:22.520 --> 00:16:24.359
+okay, well then where does the slowness come from? It's
+
+00:16:24.360 --> 00:16:26.439
+probably coming from those lambdas and it's probably
+
+00:16:26.440 --> 00:16:32.399
+coming from, uh, like extra consing, extra allocation
+
+00:16:32.400 --> 00:16:35.999
+somewhere, which is, um, sort of what you were, what you're
+
+00:16:36.000 --> 00:16:38.519
+referring to with the GC friendliness. So perhaps there's
+
+00:16:38.520 --> 00:16:45.199
+some, um, um, yeah, some, like some fusion that I can do to
+
+00:16:45.200 --> 00:16:51.199
+speed it up. Yeah, that just sounds fascinating endlessly.
+
+NOTE Q: Is there an option to read a csv/json and produce an alist or plist instead of a hash table for an entry?
+
+00:16:51.200 --> 00:16:55.559
+Are there options to like read from a CSV, JSON, produce an
+
+00:16:55.560 --> 00:17:01.679
+alist or plist instead of hash table? Absolutely.
+
+00:17:01.680 --> 00:17:06.239
+Yes, I need to double check that, but we can read both CSV and
+
+00:17:06.240 --> 00:17:10.359
+JSON, and you should be able to just turn on the plist option.
+
+00:17:10.360 --> 00:17:14.159
+I will double check, but there's fairly free conversion
+
+00:17:14.160 --> 00:17:18.039
+between those three types because hash table is not always
+
+00:17:18.040 --> 00:17:22.039
+what you want. And actually, I suspect that slowness that we
+
+00:17:22.040 --> 00:17:24.559
+saw in the demo before was because it was allocating hash
+
+00:17:24.560 --> 00:17:29.239
+tables for every, like, all of the 50,000 lines. And had it
+
+00:17:29.240 --> 00:17:32.599
+been a plist, it would have been faster. Interesting, so
+
+00:17:32.600 --> 00:17:35.399
+maybe there's opportunities even if you end up with hash
+
+00:17:35.400 --> 00:17:38.799
+lists, but then they're shared strategically and you pay
+
+00:17:38.800 --> 00:17:42.039
+the cost of a little extra layer in there that buckets them
+
+00:17:42.040 --> 00:17:46.439
+together the way that we might group files by the first four
+
+00:17:46.440 --> 00:17:50.519
+characters in the file name once we've got a million files.
+
+NOTE Q: Is the common lisp version ready for 'production' use? Is it complete enough and the API stable enough?
+
+00:17:50.520 --> 00:17:54.479
+Anyway, is the Common Lisp version ready for production
+
+00:17:54.480 --> 00:17:59.959
+use? Do you want to comment on API stability? I use it all the
+
+00:17:59.960 --> 00:18:04.159
+time. I'm writing a game in Common Lisp right now, and I'm
+
+00:18:04.160 --> 00:18:08.559
+using transducers everywhere in there, and it doesn't even
+
+00:18:08.560 --> 00:18:11.119
+make a dent in the frame rate, and I'm using them
+
+00:18:11.120 --> 00:18:15.359
+extensively. Okay, well, I'll just read from chat. Thanks
+
+00:18:15.360 --> 00:18:17.476
+so much for the answers.
+
+NOTE Q: Do we need a pre-written \"t-\" version for every already existing reducing function like + or is there a function to construct them from already defined reducer 2-arg functions?
+
+00:18:17.477 --> 00:18:20.439
+Do we need a pre-written or t-minus
+
+00:18:20.440 --> 00:18:24.959
+version for every already existing reducing function,
+
+00:18:24.960 --> 00:18:30.239
+plus, as an example? Or is there a function that constructs,
+
+00:18:30.240 --> 00:18:33.559
+in my, I'm going to add the word, auto-visualifies them
+
+00:18:33.560 --> 00:18:37.319
+already, auto-defines or something, or just generically
+
+00:18:37.320 --> 00:18:42.239
+wraps function calls some way? already defined. This is
+
+00:18:42.240 --> 00:18:49.399
+basically fold. Some built-in functions like plus already
+
+00:18:49.400 --> 00:18:52.599
+function like reducers. It's a coincidence that they do
+
+00:18:52.600 --> 00:18:56.799
+that. But there's an example in the README. Max is one that
+
+00:18:56.800 --> 00:19:00.559
+does not act like that. For instance, maybe I could screen
+
+00:19:00.560 --> 00:19:06.479
+share later, but if you just type in plus one, If you call plus
+
+00:19:06.480 --> 00:19:10.519
+one in Emacs or Common Lisp, you get back one. It actually
+
+00:19:10.520 --> 00:19:15.119
+only needs one argument. If you only type plus, it actually
+
+00:19:15.120 --> 00:19:20.839
+gives you zero. Plus and multiple satisfy the API of
+
+00:19:20.840 --> 00:19:24.759
+reducers. But if you have one that doesn't, like the max
+
+00:19:24.760 --> 00:19:28.759
+function, and similarly, just type in plus as a function
+
+00:19:28.760 --> 00:19:32.359
+call, just plus with nothing else, and you'll see. No, as a
+
+00:19:32.360 --> 00:19:37.199
+function. zero will come out. This basically means it
+
+00:19:37.200 --> 00:19:43.159
+satisfies the reducer API. But a function like max does not.
+
+00:19:43.160 --> 00:19:48.399
+If you just type in max and then one, it won't work. Pardon me,
+
+00:19:48.400 --> 00:19:54.239
+it did. But if you type in max with nothing else, it wouldn't
+
+00:19:54.240 --> 00:19:55.239
+work.
+
+00:19:55.240 --> 00:19:58.599
+Hence, we have to wrap it in something like fold. I would say
+
+00:19:58.600 --> 00:20:01.919
+go look at the fold function. Right, which that I won't do.
+
+00:20:01.920 --> 00:20:04.839
+I'm not that well enough prepped. Darn it. Leo would have
+
+00:20:04.840 --> 00:20:08.399
+been here, but oh, well, you got me. Yeah, no problem. But
+
+00:20:08.400 --> 00:20:16.879
+fold is sort of the ultimate reducer function. Great. So is
+
+00:20:16.880 --> 00:20:26.319
+there, where was I? Here we go. We're way past this, right? So
+
+NOTE Q: Is the compelling argument for transducers is that it's a better abstraction?
+
+00:20:26.320 --> 00:20:34.279
+is the compiling argument for transducers that it's a
+
+00:20:34.280 --> 00:20:38.879
+better abstraction? It seems like there are concerns,
+
+00:20:38.880 --> 00:20:42.399
+objections, while problematically valid focused on
+
+00:20:42.400 --> 00:20:45.679
+implementation. Can this abstraction allow for advances
+
+00:20:45.680 --> 00:20:50.559
+in implementation? Yes, what I've basically done is mostly
+
+00:20:50.560 --> 00:20:55.999
+followed the pattern of usage that exists in Clojure and in
+
+00:20:56.000 --> 00:21:01.159
+Scheme's SERP 171. In theory, the service level API is the
+
+00:21:01.160 --> 00:21:04.999
+same no matter where you're using this, and that's the idea.
+
+00:21:05.000 --> 00:21:08.039
+If you learn them in one list, you should be able to use them
+
+00:21:08.040 --> 00:21:12.879
+everywhere. Then what it's actually doing under the hood is
+
+00:21:12.880 --> 00:21:18.359
+free for us to change around. My implementations are mostly
+
+00:21:18.360 --> 00:21:23.679
+based on the scheme with a few alterations here and there.
+
+00:21:23.680 --> 00:21:27.079
+And in the Common Lisp case, like adding some Common Lisp
+
+00:21:27.080 --> 00:21:27.959
+isms
+
+00:21:27.960 --> 00:21:34.759
+to improve usage like UX a little bit. But overall, we are
+
+00:21:34.760 --> 00:21:38.959
+free to do whatever we want internally to speed up
+
+00:21:38.960 --> 00:21:42.439
+performance. I just haven't done that work. Awesome.
+
+00:21:42.440 --> 00:21:47.239
+Awesome. So here's where I have to, where we're getting the
+
+00:21:47.240 --> 00:21:50.079
+hook. We've just been pulled off the stream. The viewers
+
+00:21:50.080 --> 00:21:54.079
+just saw the crawl by as it sent us over to the other pad where I
+
+00:21:54.080 --> 00:21:57.919
+get to jump on and get involved with that now. But I can't
+
+00:21:57.920 --> 00:22:00.359
+thank you enough, Colin. Would you like me to stop the
+
+00:22:00.360 --> 00:22:03.799
+recording here? Any other comments you'd like to make? Uh,
+
+00:22:03.800 --> 00:22:06.439
+yeah, sure. Like, I mean, I'll stick around for any more live
+
+00:22:06.440 --> 00:22:10.639
+questions. I'm looking at both IRC and, and, um, uh, big blue
+
+00:22:10.640 --> 00:22:13.239
+button here. So if people have more questions, I'll hang
+
+00:22:13.240 --> 00:22:15.959
+around for a bit. I'm going to leave the channel open. I see
+
+00:22:15.960 --> 00:22:17.839
+you do have a few people in here, so I'm just going to go ahead
+
+00:22:17.840 --> 00:22:20.839
+and leave the recording. We can always trim it. Um, trim it
+
+00:22:20.840 --> 00:22:24.279
+up. If you, uh, let us know, Hey, the last 10 minutes weren't
+
+00:22:24.280 --> 00:22:26.999
+anything, you know, or whatever. No, no pressure, no
+
+00:22:27.000 --> 00:22:29.839
+worries, no mistakes. Thank you. Really appreciate you.
+
+00:22:29.840 --> 00:22:31.959
+Yep. Thanks a lot.
+
+NOTE Q: Question about how the transducers video was made? Did you use Reveal.js? Do you have a pointer to the html hosted presentation? How did you generate the content for Reveal?
+
+00:22:31.960 --> 00:22:48.399
+OK, does anyone else have some questions? I see Mohsen in the
+
+00:22:48.400 --> 00:22:52.839
+BigBlueButton chat is asking how I made the video. So the
+
+00:22:52.840 --> 00:22:59.079
+presentation itself was done with RevealJS from Org Mode.
+
+00:22:59.080 --> 00:23:03.639
+So as you saw, I had a raw Org Mode buffer, which was
+
+00:23:03.640 --> 00:23:09.319
+which was the presentation itself, which I then just
+
+00:23:09.320 --> 00:23:11.759
+exported with a few certain settings, a few
+
+00:23:11.760 --> 00:23:15.919
+customizations. And then for screen recording, I used OBS,
+
+00:23:15.920 --> 00:23:19.719
+which worked flawlessly on Arch Linux. I used Sway,
+
+00:23:19.720 --> 00:23:23.159
+Wayland, and all of that. So all of that just worked, which
+
+00:23:23.160 --> 00:23:27.999
+was very impressive. Where do the HTML host the
+
+00:23:28.000 --> 00:23:51.959
+presentation? I don't have that presentation hosted
+
+00:23:51.960 --> 00:23:52.599
+anywhere.
+
+00:23:52.600 --> 00:23:59.119
+I'll look at the.
+
+00:23:59.120 --> 00:24:00.079
+I don't see that.
+
+00:24:00.080 --> 00:24:08.159
+Here it is. So we've got the file here as well.
+
+00:24:08.160 --> 00:24:10.999
+Looks like that's it for questions, basically.
+
+00:24:11.000 --> 00:24:14.919
+Yep, and it looks like everyone's moved on for now. Let's
+
+00:24:14.920 --> 00:24:20.159
+see. I mean, it would be so this is answering lounge 81 on IRC.
+
+NOTE Q: From your investigations and tests so far, do you think there would be the necessity of transducers to eventually go down into the C level code for things like using them to solve "infinitely-big" buffer-like interfaces and such?
+
+00:24:20.160 --> 00:24:24.599
+Yeah, like, if we really wanted to go that hardcore, maybe
+
+00:24:24.600 --> 00:24:29.439
+there's some like C level stuff that we could
+
+00:24:29.440 --> 00:24:36.119
+you know, significant demand for such a thing. You know, so
+
+00:24:36.120 --> 00:24:39.239
+far there hasn't been such demand, but maybe there will be in
+
+00:24:39.240 --> 00:24:42.519
+the future. Yeah, perhaps there's some custom stuff we
+
+00:24:42.520 --> 00:24:43.039
+could do.
+
+00:24:43.040 --> 00:24:48.599
+And otherwise, magic one.
+
+00:24:48.600 --> 00:25:00.599
+Well, it looks like some people are quite happy with this.
+
+00:25:00.600 --> 00:25:14.959
+All right. That's about what I've seen. So why don't we end it
+
+00:25:14.960 --> 00:25:19.839
+here? I think I can control the recording from my end. If I
+
+00:25:19.840 --> 00:25:23.800
+pause it, will that work? All right. Thank you, everyone.
diff --git a/2024/captions/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--main--chapters.vtt b/2024/captions/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--main--chapters.vtt
new file mode 100644
index 00000000..cf0a6206
--- /dev/null
+++ b/2024/captions/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--main--chapters.vtt
@@ -0,0 +1,38 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:41.519
+Intro
+
+00:00:41.520 --> 00:03:27.589
+What are transducers?
+
+00:03:27.590 --> 00:05:47.279
+Common issues
+
+00:05:47.280 --> 00:07:35.279
+Transducers
+
+00:07:35.280 --> 00:09:52.624
+Using transducers
+
+00:09:52.625 --> 00:11:49.332
+A more involved example with comp
+
+00:11:49.333 --> 00:14:29.468
+In Emacs
+
+00:14:29.469 --> 00:14:58.039
+Hash tables
+
+00:14:58.040 --> 00:15:55.799
+Clarity
+
+00:15:55.800 --> 00:19:57.679
+How do transducers work?
+
+00:20:00.520 --> 00:26:03.239
+Transducers in the wild - CSV
+
+00:26:03.240 --> 00:26:51.240
+Issues and next steps
diff --git a/2024/captions/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--main.vtt b/2024/captions/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--main.vtt
new file mode 100644
index 00000000..b0083b86
--- /dev/null
+++ b/2024/captions/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--main.vtt
@@ -0,0 +1,1141 @@
+WEBVTT captioned by sachac
+
+NOTE Intro
+
+00:00:00.000 --> 00:00:10.799
+Hi everyone, this is EmacsConf 2024. I'm Colin, and today
+
+00:00:10.800 --> 00:00:17.319
+I'll be talking about transducers.
+
+00:00:17.320 --> 00:00:21.879
+After introducing them, I'll share a bit of history about
+
+00:00:21.880 --> 00:00:25.359
+transducers and the problems that they solve, some basics
+
+00:00:25.360 --> 00:00:28.879
+about how we can use them, how they work, like how they're
+
+00:00:28.880 --> 00:00:32.399
+implemented, some demonstrations of how we can actually
+
+00:00:32.400 --> 00:00:36.959
+use them in the wild, and then some other discussions about
+
+00:00:36.960 --> 00:00:41.519
+issues that they have.
+
+NOTE What are transducers?
+
+00:00:41.520 --> 00:00:46.399
+Okay, let's get right in. What are transducers?
+
+00:00:46.400 --> 00:00:49.679
+Transducers are a way to do streaming iteration with a
+
+00:00:49.680 --> 00:00:55.679
+modern API.
+
+00:00:55.680 --> 00:01:00.359
+Who are transducers for, and thereby, who is
+
+00:01:00.360 --> 00:01:05.599
+this talk for? Well, it's for people who want to do streamed
+
+00:01:05.600 --> 00:01:10.519
+data processing in Emacs. It's for people who perhaps
+
+00:01:10.520 --> 00:01:14.199
+aren't satisfied with the existing APIs, for example, the
+
+00:01:14.200 --> 00:01:19.359
+seq API, or some other common libraries that provide
+
+00:01:19.360 --> 00:01:23.719
+similar functionality. Maybe you're not a fan of the loop
+
+00:01:23.720 --> 00:01:29.079
+macro. Some people find it difficult to understand. Or
+
+00:01:29.080 --> 00:01:32.719
+maybe you've done a bunch of Clojure before, and you'd like
+
+00:01:32.720 --> 00:01:36.879
+more aspects of Clojure in your Emacs Lisp. Or maybe you're
+
+00:01:36.880 --> 00:01:40.239
+just interested in transducers in general, because the
+
+00:01:40.240 --> 00:01:48.839
+pattern has now been ported to multiple different Lisps.
+
+00:01:48.840 --> 00:01:55.039
+So I'm Colin. I'm fosskers on everything online, and I do
+
+00:01:55.040 --> 00:01:58.519
+mainly back-end programming work and a lot of open source
+
+00:01:58.520 --> 00:02:05.159
+software. I wrote Haskell for a long time, both as a hobbyist
+
+00:02:05.160 --> 00:02:09.079
+and professionally. Since the COVID years, I've been
+
+00:02:09.080 --> 00:02:13.439
+writing Rust, both open source and professionally. But now
+
+00:02:13.440 --> 00:02:19.719
+I find that in my spare time, I'm mostly writing Common Lisp.
+
+00:02:19.720 --> 00:02:22.719
+Some things I learned from my years of Haskell was that a lot
+
+00:02:22.720 --> 00:02:27.519
+of programming is just altering the shape of data. You know,
+
+00:02:27.520 --> 00:02:31.359
+sometimes we work through our algorithm line by line. We're
+
+00:02:31.360 --> 00:02:36.239
+trying to just tell the computer exactly what to do. But if we
+
+00:02:36.240 --> 00:02:39.639
+step back, a lot of the time we're just getting in data of some
+
+00:02:39.640 --> 00:02:44.119
+shape, changing it, and then passing it along. A lot of
+
+00:02:44.120 --> 00:02:49.279
+these patterns are common, identified
+
+00:02:49.280 --> 00:02:53.639
+decades ago. For instance, we have some collection, and we
+
+00:02:53.640 --> 00:02:56.999
+want to transform every element of that collection and then
+
+00:02:57.000 --> 00:03:01.199
+pass it on. Or maybe we're trying to filter out bad elements
+
+00:03:01.200 --> 00:03:04.799
+in that collection. Or maybe we're looking for a specific
+
+00:03:04.800 --> 00:03:07.759
+element in that collection. Yes, you could write all that
+
+00:03:07.760 --> 00:03:11.839
+with for loops, but these kind of common patterns were
+
+00:03:11.840 --> 00:03:18.559
+identified and given names decades ago. So why not use them?
+
+00:03:18.560 --> 00:03:21.879
+They say that there are two major problems in computer
+
+00:03:21.880 --> 00:03:25.759
+science, one being cache validation and the other being
+
+00:03:25.760 --> 00:03:27.589
+naming things.
+
+NOTE Common issues
+
+00:03:27.590 --> 00:03:29.799
+I've identified five other problems that
+
+00:03:29.800 --> 00:03:33.199
+come up when we're trying to deal with collections of data,
+
+00:03:33.200 --> 00:03:40.599
+or big streams of data. One is that if we were trying to
+
+00:03:40.600 --> 00:03:45.279
+load a file all into memory all at once and process the whole
+
+00:03:45.280 --> 00:03:48.279
+thing, sometimes we can have memory problems. You've
+
+00:03:48.280 --> 00:03:54.999
+probably seen out-of-memory errors or such things.
+
+00:03:55.000 --> 00:03:58.199
+A second issue that comes up is that if we were looking at a
+
+00:03:58.200 --> 00:04:01.799
+giant for loop, in particular a nested for loop or such
+
+00:04:01.800 --> 00:04:06.079
+things, it can be hard to tell just by looking at the code what
+
+00:04:06.080 --> 00:04:11.039
+it's trying to do, what it intends. If we don't go character
+
+00:04:11.040 --> 00:04:16.439
+by character or line by line, it can be hard to understand it.
+
+00:04:16.440 --> 00:04:20.039
+Furthermore, and this is particularly an issue with Emacs
+
+00:04:20.040 --> 00:04:26.399
+Lisp, is that if one call, for instance, to seq-map, then
+
+00:04:26.400 --> 00:04:29.319
+piped into seq-filter, for instance, will have an
+
+00:04:29.320 --> 00:04:33.599
+intermediate allocation, the map will take the source
+
+00:04:33.600 --> 00:04:37.639
+container, allocate a new one, and then the filter will
+
+00:04:37.640 --> 00:04:40.319
+operate over the second one. This is wasteful.
+
+00:04:40.320 --> 00:04:48.879
+Furthermore, it can often be difficult to abort a stream.
+
+00:04:48.880 --> 00:04:53.199
+For instance, if we were filtering through our collection,
+
+00:04:53.200 --> 00:04:57.319
+but we knew we only wanted to go halfway, for instance, for
+
+00:04:57.320 --> 00:05:01.759
+some reason, we have no way to stop it halfway through. We
+
+00:05:01.760 --> 00:05:05.479
+just have to process the whole thing, even if we know we don't
+
+00:05:05.480 --> 00:05:11.919
+need to. Another issue is that for languages that have
+
+00:05:11.920 --> 00:05:18.039
+traits, or in Haskell they're called type classes, if you
+
+00:05:18.040 --> 00:05:22.399
+are defining what it means to map over something, you often
+
+00:05:22.400 --> 00:05:27.039
+have to redefine that for every kind of container or thing
+
+00:05:27.040 --> 00:05:31.239
+that you're iterating over. Wouldn't it be nice if we could
+
+00:05:31.240 --> 00:05:34.719
+define things like map just once and then reuse them
+
+00:05:34.720 --> 00:05:39.839
+everywhere? Now, transducers solve all five of these,
+
+00:05:39.840 --> 00:05:44.039
+without the addition of new language features, and with
+
+00:05:44.040 --> 00:05:47.279
+little more than plain old function composition.
+
+NOTE Transducers
+
+00:05:47.280 --> 00:05:53.119
+If this is your first time hearing of transducers, yeah,
+
+00:05:53.120 --> 00:05:57.439
+no problem. They were originally invented in Clojure by
+
+00:05:57.440 --> 00:06:01.039
+Rich Hickey, and this is a quote from him. He thinks
+
+00:06:01.040 --> 00:06:05.439
+transducers are a fundamental primitive that decouple
+
+00:06:05.440 --> 00:06:10.079
+critical logic from list or sequence processing, and if he
+
+00:06:10.080 --> 00:06:13.999
+had to do Clojure all over, he'd put them at the bottom, at the
+
+00:06:14.000 --> 00:06:19.279
+very bottom of all the fundamental primitives. Now, that's
+
+00:06:19.280 --> 00:06:24.599
+Rich speaking quite highly of them. And I think he has a point
+
+00:06:24.600 --> 00:06:25.159
+here.
+
+00:06:25.160 --> 00:06:32.399
+They were invented originally in Clojure. In more
+
+00:06:32.400 --> 00:06:34.772
+recent years, they were brought over to Scheme
+
+00:06:34.773 --> 00:06:38.774
+via SRFI 171. That's where I found them
+
+00:06:38.775 --> 00:06:41.521
+when I was learning the Guile language.
+
+00:06:41.522 --> 00:06:43.919
+In the process of submitting a patch, I realized
+
+00:06:43.920 --> 00:06:48.199
+that there were other things to be improved. So I ported the
+
+00:06:48.200 --> 00:06:51.399
+pattern to Common Lisp, then Fennel, and then more
+
+00:06:51.400 --> 00:06:56.639
+recently, Emacs Lisp. The Common Lisp and Emacs Lisp APIs
+
+00:06:56.640 --> 00:07:01.199
+are identical. And the Fennel one is not identical, but
+
+00:07:01.200 --> 00:07:05.799
+fairly similar. Overall, everywhere you find
+
+00:07:05.800 --> 00:07:10.279
+transducers, they should basically be fairly uniform.
+
+00:07:10.280 --> 00:07:15.759
+When I originally made the Common Lisp variant first, I
+
+00:07:15.760 --> 00:07:18.799
+sampled the APIs from a number of different languages and
+
+00:07:18.800 --> 00:07:23.439
+came up with what I believed to be a representative sample of
+
+00:07:23.440 --> 00:07:27.959
+what most people would want out of such a library. I gave
+
+00:07:27.960 --> 00:07:32.439
+functions their common modern names. For instance, map
+
+00:07:32.440 --> 00:07:35.279
+is map and filter is filter and so on.
+
+NOTE Using transducers
+
+00:07:35.280 --> 00:07:42.599
+What does the usage of transducers look like? Well,
+
+00:07:42.600 --> 00:07:48.959
+these examples will all be the Emacs Lisp variant, but the
+
+00:07:48.960 --> 00:07:52.359
+Common Lisp will look basically exactly the same, minus
+
+00:07:52.360 --> 00:07:54.079
+this little t- prefix.
+
+00:07:54.080 --> 00:08:00.919
+Running transducers requires three things. It requires a
+
+00:08:00.920 --> 00:08:06.439
+source. This could be an obvious thing like a list or a
+
+00:08:06.440 --> 00:08:11.479
+vector, but it could be other things like a file, or in Emacs
+
+00:08:11.480 --> 00:08:16.348
+list in particular, a buffer.
+
+00:08:16.349 --> 00:08:20.112
+A reducer is a function. It's something like
+
+00:08:20.113 --> 00:08:22.639
+the + operator or the * operator,
+
+00:08:22.640 --> 00:08:26.785
+or certain constructors of various containers.
+
+00:08:26.786 --> 00:08:32.125
+It takes values and collates them into some final version.
+
+00:08:32.126 --> 00:08:33.946
+Now, finally, we have what we're calling here
+
+00:08:33.947 --> 00:08:37.567
+a transducer chain. This could be one transducer function
+
+00:08:37.568 --> 00:08:43.479
+or it could be multiple composed together. These are the
+
+00:08:43.480 --> 00:08:47.079
+functions that actually take data and transform them
+
+00:08:47.080 --> 00:08:55.279
+somehow. For instance, this. We have a list of three
+
+00:08:55.280 --> 00:09:04.199
+elements. We want to reduce it into a vector. How we are
+
+00:09:04.200 --> 00:09:07.519
+going to transform the elements along the way: we are doing
+
+00:09:07.520 --> 00:09:13.359
+plus one to each of them. If this syntax is new to you, just
+
+00:09:13.360 --> 00:09:18.039
+know that this #' just means that this thing that
+
+00:09:18.040 --> 00:09:22.079
+comes after it is the name of the function. In Common Lisp and
+
+00:09:22.080 --> 00:09:26.079
+Emacs Lisp, this is necessary, but for Clojure and Scheme,
+
+00:09:26.080 --> 00:09:32.719
+it is not. So we can see here that just this example is not much
+
+00:09:32.720 --> 00:09:36.119
+different than any other normal map call you might see made,
+
+00:09:36.120 --> 00:09:40.239
+but if nothing else, it's a handy way to convert a list to a
+
+00:09:40.240 --> 00:09:44.999
+vector or anything else. There are many, many reducers
+
+00:09:45.000 --> 00:09:48.239
+available and many different forms that we can
+
+00:09:48.240 --> 00:09:52.624
+collate the final value into.
+
+NOTE A more involved example with comp
+
+00:09:52.625 --> 00:09:55.086
+Let's see a more involved example.
+
+00:09:55.087 --> 00:09:58.049
+Okay, now we've got some more meat here.
+
+00:09:58.050 --> 00:10:01.772
+Here we can see usage of the comp function
+
+00:10:01.773 --> 00:10:05.255
+and a custom source, ints.
+
+00:10:05.256 --> 00:10:11.079
+Ints is an infinite generator of integer values. That's not
+
+00:10:11.080 --> 00:10:14.783
+like a list or a file. It will generate infinitely.
+
+00:10:14.784 --> 00:10:19.439
+Comp is letting us compose multiple transducer functions
+
+00:10:19.440 --> 00:10:23.759
+together. Notice that this is the opposite order of what
+
+00:10:23.760 --> 00:10:28.079
+we'd usually be used to from a function like comp. The order
+
+00:10:28.080 --> 00:10:32.679
+here is top to bottom, basically, so that the map goes first,
+
+00:10:32.680 --> 00:10:37.839
+then the filter, and then the take. So effectively is what
+
+00:10:37.840 --> 00:10:40.919
+we're doing is taking all the integers that exist,
+
+00:10:40.920 --> 00:10:45.399
+positive, adding one to them, filtering out only the even
+
+00:10:45.400 --> 00:10:50.039
+ones, but then just taking 10. Cons here is a function that
+
+00:10:50.040 --> 00:10:57.039
+just produces the ending result as a list. So what happens
+
+00:10:57.040 --> 00:11:00.479
+here specifically is how we are avoiding intermediate
+
+00:11:00.480 --> 00:11:04.238
+allocations. First, the number 0 will come through.
+
+00:11:04.239 --> 00:11:07.879
+It will be pulled out of this source internally by transduce.
+
+00:11:07.880 --> 00:11:10.919
+It will make its way into the map. The map will add it. Then it
+
+00:11:10.920 --> 00:11:15.799
+will immediately go into this filter step. So it's not like
+
+00:11:15.800 --> 00:11:19.119
+all the maps occur, and then all the filters occur. We do
+
+00:11:19.120 --> 00:11:24.039
+everything for each element. So the 0 comes in, now it's 1.
+
+00:11:24.040 --> 00:11:27.559
+The filter would occur. Well, it's going to fail that
+
+00:11:27.560 --> 00:11:31.119
+because it's not even, so it will just bail there. Now we'll
+
+00:11:31.120 --> 00:11:35.239
+go to the next one. Now 1 will come, it will become 2, then
+
+00:11:35.240 --> 00:11:39.119
+it will be saved by this evenp call, and then the take will
+
+00:11:39.120 --> 00:11:42.599
+capture it, because we only want 10 values here. You can
+
+00:11:42.600 --> 00:11:45.239
+see 2, 4, 6, 8, and so on is the result that we
+
+00:11:45.240 --> 00:11:49.332
+expect. So let's play around a little bit.
+
+NOTE In Emacs
+
+00:11:49.333 --> 00:11:53.336
+Let's jump into Emacs and see what we can do.
+
+00:11:53.337 --> 00:11:58.500
+Alright, you should see my Emacs screen here.
+
+00:11:58.501 --> 00:12:04.359
+These are the actual notes for the actual
+
+00:12:04.360 --> 00:12:08.959
+presentation done in Org Mode. I'll boost that up in size for
+
+00:12:08.960 --> 00:12:12.639
+a little bit. That should be more than big enough for you.
+
+00:12:12.640 --> 00:12:17.719
+Just by changing the reducer, we can change the result.
+
+00:12:17.720 --> 00:12:21.079
+Okay, now it's a vector. Well, what else can we do to it? Well,
+
+00:12:21.080 --> 00:12:25.959
+let's just add up the results. Maybe we just want to count the
+
+00:12:25.960 --> 00:12:30.919
+results. Oh, indeed, there were 10. What if we want to find
+
+00:12:30.920 --> 00:12:36.959
+the average of the results? What if we want to find the median
+
+00:12:36.960 --> 00:12:40.959
+of the results? And so on. Here's some more interesting
+
+00:12:40.960 --> 00:12:45.839
+things that we could do. We could add different steps. So
+
+00:12:45.840 --> 00:12:51.239
+here we have all the integers. Let's add, hmm, okay, we'll
+
+00:12:51.240 --> 00:12:57.399
+keep that. We're going to add t-enumerate. What enumerate does
+
+00:12:57.400 --> 00:13:00.879
+is for each item that comes through, it is
+
+00:13:00.880 --> 00:13:06.039
+going to add a sort of index to it and make it a pair. In this
+
+00:13:06.040 --> 00:13:08.719
+case, it's going to be equal to what came in here. Well, we can
+
+00:13:08.720 --> 00:13:12.399
+change it. If we start this at 1, now it will be different.
+
+00:13:12.400 --> 00:13:15.519
+1 will be paired with 0, and then 2 would be paired
+
+00:13:15.520 --> 00:13:19.559
+with 1, and so on. We'll accept that the even call will change
+
+00:13:19.560 --> 00:13:24.039
+that a little bit. Why we're doing this is because we want
+
+00:13:24.040 --> 00:13:27.279
+to form a hash table. Let's move that down to 3, maybe
+
+00:13:27.280 --> 00:13:31.439
+we'll get a better result. What do we see? Okay, here now the
+
+00:13:31.440 --> 00:13:37.359
+result is a hash table. What are its values? Well, 0 seems
+
+00:13:37.360 --> 00:13:40.479
+to have... The key of 0 seems to be paired with 2, the key of
+
+00:13:40.480 --> 00:13:42.909
+1 seems to be paired with 4,
+
+00:13:42.910 --> 00:13:47.411
+and 2 seems to be paired with 6.
+
+00:13:47.412 --> 00:13:51.293
+Maybe let's jazz that up even a little bit more.
+
+00:13:51.294 --> 00:13:52.973
+We're going to start from a string
+
+00:13:52.974 --> 00:13:57.943
+and we'll call it hello.
+
+00:13:57.944 --> 00:13:59.564
+That's not going to work anymore
+
+00:13:59.565 --> 00:14:02.585
+and neither is that, but what we could do is
+
+00:14:02.586 --> 00:14:05.498
+we could say t-map #'string.
+
+00:14:05.499 --> 00:14:08.627
+I believe we'll do that.
+
+00:14:08.628 --> 00:14:08.959
+Let's see if that works. It did. So that's
+
+00:14:08.960 --> 00:14:13.589
+going to convert a character into a string.
+
+00:14:13.590 --> 00:14:14.679
+Let's just go two
+
+00:14:14.680 --> 00:14:18.399
+just to make it a little easier. Now you can see that we've
+
+00:14:18.400 --> 00:14:21.919
+constructed a hash table here. The key of 0 is mapped to the
+
+00:14:21.920 --> 00:14:27.079
+string of h and 1 is mapped to e. Now, I really like having
+
+00:14:27.080 --> 00:14:29.468
+this reducer in particular.
+
+NOTE Hash tables
+
+00:14:29.469 --> 00:14:30.639
+Know that hash tables are
+
+00:14:30.640 --> 00:14:34.199
+also legal sources. I find that both in Emacs Lisp and in
+
+00:14:34.200 --> 00:14:37.119
+Common Lisp, dealing with hash tables--like creating them
+
+00:14:37.120 --> 00:14:41.599
+and altering them--can be a bit of a pain. Having them
+
+00:14:41.600 --> 00:14:45.679
+immediately available like this with transducers is very
+
+00:14:45.680 --> 00:14:49.079
+handy, I find. We can work with something that wasn't a hash
+
+00:14:49.080 --> 00:14:53.279
+table. We can construct it in a way that makes it amenable to
+
+00:14:53.280 --> 00:14:56.199
+that, and then reduce it down into a hash table, and here you
+
+00:14:56.200 --> 00:14:58.039
+go. Very handy.
+
+NOTE Clarity
+
+00:14:58.040 --> 00:15:06.399
+One last point is that you can see very clearly what
+
+00:15:06.400 --> 00:15:10.479
+this is attempting to do, as opposed to, say, a for loop. It's
+
+00:15:10.480 --> 00:15:12.719
+very clear what that step is doing, and then you can see what
+
+00:15:12.720 --> 00:15:15.119
+that is doing, and you know that the result is going to be two.
+
+00:15:15.120 --> 00:15:18.559
+Each line is kind of its own declarative step, and it should
+
+00:15:18.560 --> 00:15:22.159
+be clear, just by staring at this, basically what you're
+
+00:15:22.160 --> 00:15:25.399
+going to get out. This is one main difference from other
+
+00:15:25.400 --> 00:15:29.599
+languages that have things--say, for instance, Rust's
+
+00:15:29.600 --> 00:15:35.439
+iterator API--is the difference between the transducers
+
+00:15:35.440 --> 00:15:41.639
+and the reducers. If we go up here, for example, the
+
+00:15:41.640 --> 00:15:44.679
+difference between the transducers and the reducers and
+
+00:15:44.680 --> 00:15:48.119
+the sources is not explicitly laid out, whereas with
+
+00:15:48.120 --> 00:15:53.119
+transducers, it is. You have to be aware of how these things
+
+00:15:53.120 --> 00:15:55.799
+are different. I think that that helps clarity.
+
+NOTE How do transducers work?
+
+00:15:55.800 --> 00:16:01.999
+Moving on. How do transducers work? Well,
+
+00:16:02.000 --> 00:16:09.857
+we want to go see the README.
+
+00:16:09.858 --> 00:16:11.399
+So, what we're going to do is
+
+00:16:11.400 --> 00:16:19.102
+we're going to go to here.
+
+00:16:19.103 --> 00:16:21.959
+You should still be able to see this.
+
+00:16:21.960 --> 00:16:28.583
+This is the CL example, actually.
+
+00:16:28.584 --> 00:16:32.279
+Let's go to transducers.el.
+
+00:16:32.280 --> 00:16:37.744
+Their APIs and READMEs are the same,
+
+00:16:37.745 --> 00:16:39.919
+but just for the sake of it, we will go see
+
+00:16:39.920 --> 00:16:45.726
+how this looks on the Emacs side,
+
+00:16:45.727 --> 00:16:48.046
+just so that nothing is a surprise.
+
+00:16:48.047 --> 00:16:50.239
+But recall that the APIs are essentially the same
+
+00:16:50.240 --> 00:16:53.679
+between the two. If you go to this section, writing your
+
+00:16:53.680 --> 00:16:56.839
+own primitives, you can read about how transducers are
+
+00:16:56.840 --> 00:17:00.999
+actually formed, whether or not you want to write them
+
+00:17:01.000 --> 00:17:06.799
+yourself or not. We can see here t-map. We accept the
+
+00:17:06.800 --> 00:17:10.239
+function that you want to operate with. Then you've got
+
+00:17:10.240 --> 00:17:13.319
+this extra little lambda here that's coming in, and it's
+
+00:17:13.320 --> 00:17:17.079
+receiving a thing that is named reducer. Now, while here
+
+00:17:17.080 --> 00:17:20.439
+we're calling it reducer, it's actually the chain of all the
+
+00:17:20.440 --> 00:17:25.159
+composed functions together. It's all those main
+
+00:17:25.160 --> 00:17:28.479
+transducer steps. Finally, it's the reducer all
+
+00:17:28.480 --> 00:17:31.879
+composed together with normal function composition.
+
+00:17:31.880 --> 00:17:35.877
+That will matter very soon. Now here's the actual meat.
+
+00:17:35.878 --> 00:17:40.519
+We can see the accumulative result that's coming in with the
+
+00:17:40.520 --> 00:17:45.739
+current element. Now we need to operate on this.
+
+00:17:45.740 --> 00:17:47.840
+Were it normally mapped, we would see us
+
+00:17:47.841 --> 00:17:49.919
+applying the F to the input.
+
+00:17:49.920 --> 00:17:53.519
+But here, you can see us applying the F to the input and then
+
+00:17:53.520 --> 00:17:58.679
+continuing on. So us calling the rest of the composed chain
+
+00:17:58.680 --> 00:18:03.159
+here is the effect of, in the previous slide, moving to the
+
+00:18:03.160 --> 00:18:07.156
+next step. We could ignore this line for now.
+
+00:18:07.157 --> 00:18:13.819
+If you're curious, please read the README in detail.
+
+00:18:13.820 --> 00:18:15.579
+Now, what about reducers?
+
+00:18:15.580 --> 00:18:18.879
+What do those look like? Well, let's just scroll
+
+00:18:18.880 --> 00:18:22.439
+down here. Recall that a reducer is a function that's
+
+00:18:22.440 --> 00:18:26.959
+consuming a stream, right? Zoom that up for you a little bit.
+
+00:18:26.960 --> 00:18:33.919
+Now, in the case of count, recall that this is how it's
+
+00:18:33.920 --> 00:18:37.679
+working, how we saw a moment ago. So clearly this list of five
+
+00:18:37.680 --> 00:18:42.199
+elements only has five things in it. Well, a reducer by
+
+00:18:42.200 --> 00:18:47.599
+structure is a function of two, one, or zero arguments. So we
+
+00:18:47.600 --> 00:18:50.639
+can see here in the case of two, this is the normal iterative
+
+00:18:50.640 --> 00:18:54.519
+case. We don't care about the input for count, we just care
+
+00:18:54.520 --> 00:18:58.559
+about the current accumulated count that we're doing, and
+
+00:18:58.560 --> 00:19:02.879
+we add one to it, and that's it. This then goes back to
+
+00:19:02.880 --> 00:19:06.359
+the loop and the whole process starts again with the next
+
+00:19:06.360 --> 00:19:10.879
+element. In this kind of done case, this is used internal to
+
+00:19:10.880 --> 00:19:16.879
+that sort of the supervising function transduce. It's just
+
+00:19:16.880 --> 00:19:19.639
+confirming the final result. Sometimes some
+
+00:19:19.640 --> 00:19:21.839
+post-processing is necessary here, but in the case of
+
+00:19:21.840 --> 00:19:26.039
+count, as it is so simple, that is not necessary. And now
+
+00:19:26.040 --> 00:19:29.359
+here's the base case. This is also used within that
+
+00:19:29.360 --> 00:19:34.319
+supervising transduce function at the very top. Well, if
+
+00:19:34.320 --> 00:19:36.679
+you're counting, you have to start from somewhere, right?
+
+00:19:36.680 --> 00:19:37.349
+In this case, well, what you're starting with is zero.
+
+00:19:37.350 --> 00:19:40.251
+In the case of cons, you'd be starting with an empty list.
+
+00:19:40.252 --> 00:19:44.434
+In the case of vector, you'd be starting
+
+00:19:44.435 --> 00:19:53.999
+with an empty vector and so on.
+
+00:19:54.000 --> 00:19:56.799
+Once again, if you are more curious, please take a look at
+
+00:19:56.800 --> 00:19:57.679
+the README.
+
+NOTE Transducers in the wild - CSV
+
+00:20:00.520 --> 00:20:06.039
+Okay, transducers in the wild. Well, let's go take a look at
+
+00:20:06.040 --> 00:20:07.639
+processing some CSV data.
+
+00:20:07.640 --> 00:20:21.319
+We're going to open up a new Emacs Lisp bracket here. So I have
+
+00:20:21.320 --> 00:20:28.839
+a file. And in this file, let's just go look at C-x b right
+
+00:20:28.840 --> 00:20:34.839
+there, you will see that we've got some bank transaction
+
+00:20:34.840 --> 00:20:37.879
+information. It's got these transactions from a whole
+
+00:20:37.880 --> 00:20:40.199
+bunch of different people into different accounts,
+
+00:20:40.200 --> 00:20:43.879
+whether it's money coming in, money going out, and then a
+
+00:20:43.880 --> 00:20:47.839
+basic description. How's your Latin? But for this little
+
+00:20:47.840 --> 00:20:53.679
+test, what we want to do is we want to find Bob's final bank
+
+00:20:53.680 --> 00:20:59.679
+balance. Let's get on to it. First of all, let's
+
+00:20:59.680 --> 00:21:04.444
+just confirm, let's do some basic stuff.
+
+00:21:04.445 --> 00:21:10.844
+with-current-buffer, find-file-noselect.
+
+00:21:10.845 --> 00:21:15.542
+What's the name of that file?
+
+00:21:15.543 --> 00:21:17.439
+This is pre-organized, so you
+
+00:21:17.440 --> 00:21:20.879
+will just see it right here.
+
+00:21:20.880 --> 00:21:26.999
+t-transduce and t-comp. We don't know what we're going to comp
+
+00:21:27.000 --> 00:21:33.039
+yet. Actually, I'll just pass to show you. And then we will
+
+00:21:33.040 --> 00:21:36.999
+see, let's just do a little t-count just to confirm. What's
+
+00:21:37.000 --> 00:21:45.112
+our source? Well, our source is a buffer, t-buffer-read.
+
+00:21:45.113 --> 00:21:50.153
+And note that because we're using with-current-buffer,
+
+00:21:50.154 --> 00:21:55.079
+if we go like this, if we go current-buffer, this will just work. So
+
+00:21:55.080 --> 00:21:59.919
+now let's... Well, that was odd. I should have done it like
+
+00:21:59.920 --> 00:22:02.159
+that. There we go. So now we should make that a little smaller
+
+00:22:02.160 --> 00:22:04.799
+so you can see what it is. Now if we hit RET, we should get the
+
+00:22:04.800 --> 00:22:09.559
+right result. Okay, so there are 50,001 lines in this file,
+
+00:22:09.560 --> 00:22:13.516
+but the one extra one is the name of the headers, right?
+
+00:22:13.517 --> 00:22:18.079
+We want to process this file in more detail. So how can we do
+
+00:22:18.080 --> 00:22:22.079
+that? Well, let's start by just automatically
+
+00:22:22.080 --> 00:22:28.799
+interpreting the results as CSV. If we do that, okay, well
+
+00:22:28.800 --> 00:22:31.559
+now we only have 50,000 entries as we expected, right?
+
+00:22:31.560 --> 00:22:36.759
+Because it's going to pull out the header line. If we now say
+
+00:22:36.760 --> 00:22:42.679
+we want to just filter out, you know, We only want Bob, right?
+
+00:22:42.680 --> 00:22:53.679
+So if... gethash, it was in the row of name. Each line here is
+
+00:22:53.680 --> 00:22:57.079
+made into, at least by default, is made into a hash map. So if
+
+00:22:57.080 --> 00:23:02.759
+we go like this, we should see that. Okay, so 12,000 of these
+
+00:23:02.760 --> 00:23:05.639
+lines or thereabout belong to Bob.
+
+00:23:05.640 --> 00:23:13.839
+Let's just move that over a little bit. Actually, I suppose we don't even
+
+00:23:13.840 --> 00:23:17.799
+need that anymore. I'll just keep that full size for you.
+
+00:23:17.800 --> 00:23:24.399
+Okay, so all right, there's about 12,000 results for Bob of
+
+00:23:24.400 --> 00:23:32.479
+the 50,000. What's next? Well, we want to confirm,
+
+00:23:32.480 --> 00:23:40.039
+we want to pull out everything,
+
+00:23:40.040 --> 00:23:43.079
+all of the in and the out entries.
+
+00:23:43.080 --> 00:23:56.279
+Thank you. So, string to number, because we know that
+
+00:23:56.280 --> 00:24:01.239
+everything came in as strings. Unfortunately, the from-csv
+
+00:24:01.240 --> 00:24:03.799
+doesn't try to be smart at all, it's just pulling everything
+
+00:24:03.800 --> 00:24:09.479
+in as string values. If you want actual things to be
+
+00:24:09.480 --> 00:24:13.399
+numbers or whatever, that is up to you to do the parsing
+
+00:24:13.400 --> 00:24:20.679
+yourself. Okay, so we have those two values now. We know
+
+00:24:20.680 --> 00:24:23.879
+that we saw from the data just a moment ago that you're only
+
+00:24:23.880 --> 00:24:26.999
+going to have a value in one column or the other. It's either
+
+00:24:27.000 --> 00:24:29.119
+going to be 0 in the empty one, or you're going to have some
+
+00:24:29.120 --> 00:24:32.159
+number in the other. So we know that we can just naively add
+
+00:24:32.160 --> 00:24:35.479
+them. If it was in, it would always be positive. So we'll just
+
+00:24:35.480 --> 00:24:41.519
+add that. But in the negative case, we want to just make it
+
+00:24:41.520 --> 00:24:45.279
+negative really briefly before we add them all together.
+
+00:24:45.280 --> 00:24:50.519
+let's now just prove to ourselves that we are sane here. What
+
+00:24:50.520 --> 00:24:52.479
+we're going to do is we're going to quickly go say take
+
+00:24:52.480 --> 00:24:57.039
+5 just to convince ourselves, and we'll go cons, and let's
+
+00:24:57.040 --> 00:24:59.839
+see if we get kind of results that make sense. Okay, these
+
+00:24:59.840 --> 00:25:02.799
+sort of make sense. It looks like you know Bob's got some big
+
+00:25:02.800 --> 00:25:07.679
+expenses here. If we take say 15, does it look any better?
+
+00:25:07.680 --> 00:25:10.319
+Okay, looks like he had a payday. All right, good job Bob.
+
+00:25:10.320 --> 00:25:15.439
+Let's get back in there. Now we only really care about
+
+00:25:15.440 --> 00:25:20.119
+adding the final result, right? So there we go. Add that all
+
+00:25:20.120 --> 00:25:24.559
+together and we'll see what we get in a moment. Okay, wow,
+
+00:25:24.560 --> 00:25:27.519
+Bob's rich. Okay, so it looks like in his 12,000
+
+00:25:27.520 --> 00:25:32.279
+transaction, Bob has an overall net worth of $8.5 million.
+
+00:25:32.280 --> 00:25:34.439
+Looking pretty good.
+
+00:25:34.440 --> 00:25:38.999
+So here's an example of how you can, particularly in Emacs
+
+00:25:39.000 --> 00:25:42.959
+Lisp, how you can very easily just get a file, consider it the
+
+00:25:42.960 --> 00:25:45.879
+current buffer, and then just do whatever you want to it.
+
+00:25:45.880 --> 00:25:50.359
+Note that there is sort of first-class support for both CSV
+
+00:25:50.360 --> 00:25:54.359
+and JSON, and then you have, and both of those bring in their
+
+00:25:54.360 --> 00:25:57.719
+values as hash maps, and then you're just free to do whatever
+
+00:25:57.720 --> 00:26:00.439
+you want and process them, potentially both writing them
+
+00:26:00.440 --> 00:26:03.239
+back out as CSV or JSON once again.
+
+NOTE Issues and next steps
+
+00:26:03.240 --> 00:26:10.719
+Some issues with transducers that can come up is
+
+00:26:10.720 --> 00:26:14.919
+that one, a zip operator is missing, but I'm working on it.
+
+00:26:14.920 --> 00:26:19.399
+Two is that performance, particularly in Emacs Lisp, isn't
+
+00:26:19.400 --> 00:26:24.119
+that great. It could be due to the sort of nested lambda calls
+
+00:26:24.120 --> 00:26:27.759
+that have to occur internally, but the common Lisp
+
+00:26:27.760 --> 00:26:32.239
+implementation is quite good. and there's yet no support
+
+00:26:32.240 --> 00:26:35.399
+for parallelism. You can imagine that a lot of those steps
+
+00:26:35.400 --> 00:26:38.559
+you could potentially perform in parallel depending on the
+
+00:26:38.560 --> 00:26:44.399
+platform, but research has not yet gotten that far. Okay,
+
+00:26:44.400 --> 00:26:47.639
+that's all. Thank you very much. If you have any questions,
+
+00:26:47.640 --> 00:26:51.240
+please contact me.
diff --git a/2024/captions/emacsconf-2024-water--watering-my-digital-plant-with-emacs-timers--christopher-howard--main--chapters.vtt b/2024/captions/emacsconf-2024-water--watering-my-digital-plant-with-emacs-timers--christopher-howard--main--chapters.vtt
new file mode 100644
index 00000000..cb5646ed
--- /dev/null
+++ b/2024/captions/emacsconf-2024-water--watering-my-digital-plant-with-emacs-timers--christopher-howard--main--chapters.vtt
@@ -0,0 +1,26 @@
+WEBVTT
+
+
+00:00:02.679 --> 00:00:25.676
+Introduction
+
+00:00:28.823 --> 00:00:47.234
+What is Astrobotany?
+
+00:00:48.914 --> 00:01:22.096
+What is Gemini?
+
+00:01:25.337 --> 00:03:34.999
+How do you play Astrobotany?
+
+00:03:37.000 --> 00:06:35.750
+Timers
+
+00:06:37.792 --> 00:09:03.843
+The code
+
+00:09:05.724 --> 00:13:02.246
+Managing the plant
+
+00:13:09.560 --> 00:13:47.471
+Conclusion
diff --git a/2024/captions/emacsconf-2024-water--watering-my-digital-plant-with-emacs-timers--christopher-howard--main.vtt b/2024/captions/emacsconf-2024-water--watering-my-digital-plant-with-emacs-timers--christopher-howard--main.vtt
new file mode 100644
index 00000000..2293a61e
--- /dev/null
+++ b/2024/captions/emacsconf-2024-water--watering-my-digital-plant-with-emacs-timers--christopher-howard--main.vtt
@@ -0,0 +1,662 @@
+WEBVTT captioned by sachac
+
+NOTE Introduction
+
+00:00:02.679 --> 00:00:06.782
+Welcome to Watering My Digital Plant with Emacs Timers,
+
+00:00:07.503 --> 00:00:11.384
+a talk by Christopher Howard for Emacs Conference 2024.
+
+00:00:11.385 --> 00:00:16.989
+The goal of this talk is to give
+
+00:00:17.010 --> 00:00:19.431
+a brief introduction to Emacs timers
+
+00:00:20.892 --> 00:00:23.334
+using the illustration of how I created
+
+00:00:23.394 --> 00:00:25.676
+a bot for the Astrobotany service.
+
+NOTE What is Astrobotany?
+
+00:00:28.823 --> 00:00:30.004
+What is Astrobotany?
+
+00:00:30.924 --> 00:00:32.384
+Let me jump to the home page.
+
+00:00:38.649 --> 00:00:42.411
+Astrobotany is a botany game or a simulation
+
+00:00:42.611 --> 00:00:45.072
+that is played using the Gemini protocol
+
+00:00:45.893 --> 00:00:47.234
+and gemtext documents.
+
+NOTE What is Gemini?
+
+00:00:48.914 --> 00:00:49.615
+What is Gemini?
+
+00:00:50.700 --> 00:00:53.563
+The Gemini protocol is a small web protocol,
+
+00:00:54.263 --> 00:00:57.246
+similar to the HyperText Transfer Protocol,
+
+00:00:58.047 --> 00:01:00.109
+but with differing goals of simplicity,
+
+00:01:00.789 --> 00:01:03.712
+non-extensibility, and protecting privacy.
+
+00:01:05.453 --> 00:01:09.057
+Gemtext is a simple hyperlinking document format,
+
+00:01:09.557 --> 00:01:14.242
+the analog of the HyperText Markup Language, or HTML.
+
+00:01:16.095 --> 00:01:17.075
+Much more could be said
+
+00:01:17.135 --> 00:01:18.516
+about the design and goals
+
+00:01:18.576 --> 00:01:19.756
+of the Gemini project,
+
+00:01:20.236 --> 00:01:22.096
+but that is not the focus of this talk.
+
+NOTE How do you play Astrobotany?
+
+00:01:25.337 --> 00:01:27.057
+And how do you play Astrobotany?
+
+00:01:28.418 --> 00:01:30.518
+First, you need to get a Gemini client
+
+00:01:31.138 --> 00:01:32.838
+or what you might call a browser.
+
+00:01:34.079 --> 00:01:35.599
+Many clients are available,
+
+00:01:36.259 --> 00:01:39.860
+but I am using Elpher, a Gemini client for Emacs.
+
+00:01:41.340 --> 00:01:43.161
+Once you have your client running,
+
+00:01:43.801 --> 00:01:46.361
+navigate to the home page for Astrobotany,
+
+00:01:46.782 --> 00:01:48.842
+which is shown in this window.
+
+00:01:50.783 --> 00:01:53.023
+You'll see the URL for the home page
+
+00:01:53.103 --> 00:01:54.704
+displayed at the top of the window.
+
+00:01:57.865 --> 00:01:59.625
+On your first visit to Astrobotany,
+
+00:02:00.406 --> 00:02:02.586
+you will need to create a client certificate,
+
+00:02:03.426 --> 00:02:05.507
+which will be used instead of a password.
+
+00:02:06.067 --> 00:02:07.548
+Your Gemini client will help you
+
+00:02:07.588 --> 00:02:08.768
+to create the certificate.
+
+00:02:12.102 --> 00:02:16.306
+Then you will go to the Visit Your Plant page
+
+00:02:22.472 --> 00:02:24.553
+in order to view your plant,
+
+00:02:28.297 --> 00:02:32.781
+to water it, and to collect things from it,
+
+00:02:33.141 --> 00:02:37.928
+including money. So here you see
+
+00:02:37.968 --> 00:02:39.429
+the plant that I'm currently growing
+
+00:02:40.229 --> 00:02:41.910
+in glorious ASCII graphics.
+
+00:02:43.070 --> 00:02:46.691
+There's also a color version available from this page.
+
+00:02:56.895 --> 00:02:57.935
+Back at the home page,
+
+00:02:59.536 --> 00:03:00.836
+you can do other things
+
+00:03:02.537 --> 00:03:05.358
+like go to the item shop,
+
+00:03:07.165 --> 00:03:10.247
+to buy items like badges, fertilizer,
+
+00:03:11.607 --> 00:03:13.348
+or post on the message board.
+
+00:03:15.849 --> 00:03:18.991
+In Astrobotany, gardener bots are fully legal.
+
+00:03:20.852 --> 00:03:23.153
+And to do an action on your plant,
+
+00:03:23.693 --> 00:03:24.814
+like watering the plant,
+
+00:03:25.454 --> 00:03:26.915
+all your bot needs to do is
+
+00:03:27.035 --> 00:03:30.917
+to access the appropriate Gemini URL or page
+
+00:03:31.537 --> 00:03:33.998
+while presenting the appropriate certificate
+
+00:03:34.419 --> 00:03:34.999
+for your plant.
+
+NOTE Timers
+
+00:03:37.000 --> 00:03:39.862
+And this brings us to Emacs timers.
+
+00:03:42.904 --> 00:03:45.906
+So the main function of interest to us
+
+00:03:46.626 --> 00:03:49.288
+is the run-at-time function.
+
+00:04:00.714 --> 00:04:03.235
+Here is the help documentation,
+
+00:04:03.395 --> 00:04:07.036
+which is available in any recent Emacs installation.
+
+00:04:10.157 --> 00:04:13.277
+As you see, the purpose of the function
+
+00:04:13.498 --> 00:04:16.718
+is to perform an action at a specific time
+
+00:04:20.920 --> 00:04:25.801
+to repeat it after a specific number of seconds.
+
+00:04:29.770 --> 00:04:32.573
+And so basically, all you have to do is
+
+00:04:32.673 --> 00:04:35.795
+pass in a function to run-at-time,
+
+00:04:36.436 --> 00:04:39.058
+telling Emacs how soon you want to run the function,
+
+00:04:39.999 --> 00:04:41.541
+and then how often you want to run the
+
+00:04:41.581 --> 00:04:42.461
+function after that.
+
+00:04:44.403 --> 00:04:46.605
+The function has a variety of options for
+
+00:04:46.645 --> 00:04:48.887
+specifying the time parameter,
+
+00:04:49.347 --> 00:04:52.030
+that is, how soon you want the function to run.
+
+00:04:55.307 --> 00:04:57.428
+For our application, in which we'll be
+
+00:04:57.508 --> 00:04:58.409
+running our functions
+
+00:04:58.649 --> 00:05:01.030
+once or twice a day at specific times,
+
+00:05:03.152 --> 00:05:04.513
+it is most useful to
+
+00:05:04.553 --> 00:05:06.954
+specify the number of seconds until the event.
+
+00:05:08.515 --> 00:05:09.876
+This does, however, require
+
+00:05:10.436 --> 00:05:11.977
+calculating the number of seconds
+
+00:05:12.097 --> 00:05:15.399
+until a specific time of day. I will
+
+00:05:15.419 --> 00:05:16.800
+provide code for this shortly.
+
+00:05:18.860 --> 00:05:20.803
+The run-at-time function does allow you to
+
+00:05:20.864 --> 00:05:23.308
+specify the time parameter as a string,
+
+00:05:24.029 --> 00:05:25.672
+representing the hours and minutes.
+
+00:05:26.413 --> 00:05:32.149
+For example, 05:40.
+
+00:05:32.150 --> 00:05:34.051
+However, there is an oddity in the
+
+00:05:34.091 --> 00:05:35.392
+design of run-at-time,
+
+00:05:36.372 --> 00:05:41.395
+such that if the specified time of day has
+
+00:05:41.455 --> 00:05:42.216
+already passed,
+
+00:05:43.196 --> 00:05:44.877
+then the timer will run immediately,
+
+00:05:45.578 --> 00:05:46.638
+rather than in the future,
+
+00:05:46.958 --> 00:05:47.839
+as you might expect.
+
+00:05:49.280 --> 00:05:51.441
+This can be problematic, for example,
+
+00:05:51.661 --> 00:05:54.663
+if run-at-time is being called from your init file,
+
+00:05:55.583 --> 00:05:57.624
+since the timer will run immediately
+
+00:05:58.245 --> 00:06:00.426
+every time you restart Emacs for any reason.
+
+00:06:02.526 --> 00:06:04.691
+I noticed recently that run-at-time
+
+00:06:04.791 --> 00:06:07.217
+also allows you to pass in a value
+
+00:06:07.317 --> 00:06:17.657
+from encode-time, which maybe does what we want,
+
+00:06:18.378 --> 00:06:20.760
+but I never bothered with testing that.
+
+00:06:21.340 --> 00:06:23.041
+Actually, I have a vague memory of
+
+00:06:23.181 --> 00:06:25.743
+once looking into it and it didn't seem to do what I
+
+00:06:25.783 --> 00:06:29.286
+wanted, but honestly I can't clearly remember,
+
+00:06:29.946 --> 00:06:31.667
+so you may want to look into that yourself.
+
+00:06:32.728 --> 00:06:34.209
+What I ended up using was just
+
+00:06:34.309 --> 00:06:35.750
+passing in a number of seconds.
+
+NOTE The code
+
+00:06:37.792 --> 00:06:39.413
+So now we'll move over to the code.
+
+00:06:46.764 --> 00:06:49.426
+So I'll skip down here first
+
+00:06:49.966 --> 00:06:52.447
+to the code that I wrote for calculating the number of
+
+00:06:52.527 --> 00:06:52.887
+seconds.
+
+00:06:54.408 --> 00:06:57.790
+It's a function that calculates the number of seconds
+
+00:06:58.050 --> 00:07:01.012
+until a particular time of day in the future.
+
+00:07:04.214 --> 00:07:09.277
+You can see that you pass in the hour as a number from
+
+00:07:09.278 --> 00:07:19.137
+0 to 23 and the minutes as a number from 0 to 59. And
+
+00:07:20.078 --> 00:07:22.539
+here's the code, which will also be available later.
+
+00:07:25.700 --> 00:07:29.202
+I wrote another function, secs-until-weekly,
+
+00:07:29.522 --> 00:07:32.464
+which we do not need for this talk,
+
+00:07:32.604 --> 00:07:34.685
+but which is useful if you're running
+
+00:07:34.745 --> 00:07:36.746
+events which need to happen once per week.
+
+00:07:39.264 --> 00:07:44.025
+This function also requires a target hour
+
+00:07:44.085 --> 00:07:48.926
+and a target minute, but also requires passing in a
+
+00:07:48.966 --> 00:08:00.548
+target day. And while we're on the subject of timers
+
+00:08:00.568 --> 00:08:02.588
+specifically, I should mention that
+
+00:08:02.648 --> 00:08:05.929
+Emacs has a very useful function called list-timers.
+
+00:08:07.577 --> 00:08:09.959
+So if I call the interactive function list-timers,
+
+00:08:11.560 --> 00:08:14.542
+it will give me a list of all the timers
+
+00:08:14.842 --> 00:08:15.542
+currently running.
+
+00:08:16.723 --> 00:08:19.625
+This page shows not only which timers exist,
+
+00:08:20.186 --> 00:08:22.807
+but also how long it will be until they run again,
+
+00:08:23.848 --> 00:08:26.750
+along with the periodic repeat value that you
+
+00:08:26.770 --> 00:08:27.390
+specified.
+
+00:08:29.992 --> 00:08:33.034
+Furthermore, any timer can be canceled by moving point
+
+00:08:33.514 --> 00:08:38.515
+over the timer and running timer-list-cancel,
+
+00:08:38.696 --> 00:08:42.556
+which on my system is bound to the letter c by default.
+
+00:08:43.537 --> 00:08:45.417
+This is very helpful while you are developing
+
+00:08:45.497 --> 00:08:46.537
+some timer function.
+
+00:08:48.438 --> 00:08:52.158
+So I could cancel the timer that I already have running
+
+00:08:53.779 --> 00:08:55.059
+for shaking the plant,
+
+00:08:57.420 --> 00:08:59.360
+as well as the one for watering the plant.
+
+00:09:02.842 --> 00:09:03.843
+and back to the code.
+
+NOTE Managing the plant
+
+00:09:05.724 --> 00:09:08.566
+So now we'll talk about the actual code for
+
+00:09:08.646 --> 00:09:09.567
+managing the plant.
+
+00:09:14.210 --> 00:09:16.031
+So you see I have a variable set up here
+
+00:09:16.471 --> 00:09:19.353
+that specifies where the certificate file,
+
+00:09:20.994 --> 00:09:23.836
+the public certificate file, as well as
+
+00:09:23.936 --> 00:09:26.458
+the secret key file is located.
+
+00:09:27.918 --> 00:09:29.459
+This is where it is in my system.
+
+00:09:30.119 --> 00:09:33.181
+Of course, depending on your specific Gemini client,
+
+00:09:33.481 --> 00:09:36.722
+it may be in a different space and will likely have a
+
+00:09:36.762 --> 00:09:37.303
+different name.
+
+00:09:41.045 --> 00:09:43.486
+And here is the code for watering the plant,
+
+00:09:44.526 --> 00:09:45.967
+which I can call interactively.
+
+00:09:49.412 --> 00:09:52.334
+And the core of it here is that it uses the
+
+00:09:52.834 --> 00:09:57.937
+gmni utility, a command line utility to
+
+00:10:00.998 --> 00:10:06.982
+call a particular URL while also loading up
+
+00:10:07.702 --> 00:10:10.564
+or presenting the required certificate.
+
+00:10:12.505 --> 00:10:16.447
+So in this case, you can see it is the URL that is
+
+00:10:16.567 --> 00:10:18.088
+required for watering the plant.
+
+00:10:19.827 --> 00:10:24.952
+This idea is very simple and the gmni client
+
+00:10:26.353 --> 00:10:30.097
+or gmni command line program
+
+00:10:30.758 --> 00:10:31.999
+makes this very simple to do.
+
+00:10:34.554 --> 00:10:36.535
+Here's another function for shaking the plant.
+
+00:10:37.696 --> 00:10:40.758
+Again it is almost identical except that we
+
+00:10:40.958 --> 00:10:43.300
+use a different URL,
+
+00:10:44.180 --> 00:10:46.982
+one for shaking the plant instead of watering it.
+
+00:10:47.562 --> 00:10:49.183
+And again we want to shake the plant
+
+00:10:50.044 --> 00:10:51.745
+in order to get money to fall off of it.
+
+00:10:55.847 --> 00:10:59.290
+You need to water your plant at least once per day or
+
+00:11:00.791 --> 00:11:01.251
+it'll die.
+
+00:11:02.930 --> 00:11:09.953
+I usually water mine twice and just in case something
+
+00:11:10.013 --> 00:11:13.314
+happens where Emacs was turned off because of
+
+00:11:13.414 --> 00:11:15.035
+power outage or something like that
+
+00:11:15.595 --> 00:11:17.196
+that I'm more likely to get it watered,
+
+00:11:19.036 --> 00:11:21.957
+and I shake it once per day because there isn't
+
+00:11:23.398 --> 00:11:25.339
+any purpose to shaking it more than that.
+
+00:11:25.619 --> 00:11:27.240
+If you try to shake it more than that,
+
+00:11:27.420 --> 00:11:29.560
+then money no more money will fall off,
+
+00:11:30.321 --> 00:11:30.821
+or not much.
+
+00:11:37.242 --> 00:11:39.526
+So you see down here, I have the code that
+
+00:11:39.627 --> 00:11:41.209
+actually calls run-at-time.
+
+00:11:42.560 --> 00:11:45.141
+I left here commented my original forms of this
+
+00:11:45.661 --> 00:11:50.024
+which used the just specify directly the time of day.
+
+00:11:50.644 --> 00:11:52.225
+As I mentioned the problem with that
+
+00:11:53.505 --> 00:11:54.466
+was that it would...
+
+00:11:54.786 --> 00:11:57.187
+these functions would also get called
+
+00:11:59.208 --> 00:12:02.649
+whenever I restarted Emacs for any
+
+00:12:02.709 --> 00:12:04.250
+reason and that was kind of annoying.
+
+00:12:05.011 --> 00:12:07.352
+So instead we have here the functions down here
+
+00:12:07.452 --> 00:12:09.533
+which uses secs-until-daily
+
+00:12:10.913 --> 00:12:11.754
+to water the plant
+
+00:12:12.294 --> 00:12:14.756
+and then secs-until-daily to shake the plant.
+
+00:12:16.057 --> 00:12:20.821
+You see, I've specified the plant to get watered
+
+00:12:21.181 --> 00:12:26.025
+at 4 in the morning and then the function is run again
+
+00:12:26.125 --> 00:12:31.269
+after that, every 43,200 seconds, which translates to
+
+00:12:31.389 --> 00:12:32.270
+every 12 hours,
+
+00:12:33.711 --> 00:12:36.353
+and then I shake the plants, shake the plant
+
+00:12:38.760 --> 00:12:43.341
+every morning at 4.15 a.m. and once every [24] hours.
+
+00:12:45.742 --> 00:12:46.802
+With a little bit more
+
+00:12:46.902 --> 00:12:49.483
+sophistication, a little bit more work on the code,
+
+00:12:50.143 --> 00:12:53.964
+I could actually have multiple plants be watering and
+
+00:12:54.264 --> 00:12:57.985
+shaking multiple plants with multiple certificates,
+
+00:12:58.105 --> 00:12:59.885
+but I never got around to that.
+
+00:13:00.946 --> 00:13:02.246
+Didn't seem worth the bother to me.
+
+NOTE Conclusion
+
+00:13:09.560 --> 00:13:12.964
+So thank you for watching my video,
+
+00:13:13.825 --> 00:13:16.227
+Watering My Digital Plant with Emacs Timers.
+
+00:13:16.628 --> 00:13:18.189
+You'll see at the bottom of this page
+
+00:13:19.491 --> 00:13:21.613
+links to the code for this talk
+
+00:13:22.354 --> 00:13:24.096
+as well as other things that I mentioned
+
+00:13:24.677 --> 00:13:27.819
+like the source code for the
+
+00:13:27.979 --> 00:13:30.100
+Elpher Gemini client,
+
+00:13:30.801 --> 00:13:33.282
+the URL for the Astrobotany capsule,
+
+00:13:34.203 --> 00:13:36.865
+as well as a link to more information about
+
+00:13:36.925 --> 00:13:41.407
+Project Gemini and my own personal Gemini capsule
+
+00:13:42.808 --> 00:13:45.129
+that's being run off my own server at home.
+
+00:13:46.790 --> 00:13:47.471
+Thank you very much.
diff --git a/2024/captions/emacsconf-2024-writing--emacs-writing-studio--peter-prevos--main--chapters.vtt b/2024/captions/emacsconf-2024-writing--emacs-writing-studio--peter-prevos--main--chapters.vtt
new file mode 100644
index 00000000..d14cc21e
--- /dev/null
+++ b/2024/captions/emacsconf-2024-writing--emacs-writing-studio--peter-prevos--main--chapters.vtt
@@ -0,0 +1,35 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:57.648
+Introduction
+
+00:00:57.649 --> 00:02:02.451
+Why?
+
+00:02:02.452 --> 00:02:50.071
+EWS configuration
+
+00:02:50.072 --> 00:03:21.953
+How did I develop EWS?
+
+00:03:21.954 --> 00:04:29.319
+Overall workflow
+
+00:04:29.320 --> 00:05:54.760
+Inspiration
+
+00:05:54.761 --> 00:07:39.112
+Ideation
+
+00:07:39.113 --> 00:08:54.580
+denote-explore
+
+00:08:54.581 --> 00:10:05.919
+Writing with Org
+
+00:10:05.920 --> 00:12:18.719
+The project file
+
+00:12:18.720 --> 00:13:30.720
+Conclusions
diff --git a/2024/captions/emacsconf-2024-writing--emacs-writing-studio--peter-prevos--main.vtt b/2024/captions/emacsconf-2024-writing--emacs-writing-studio--peter-prevos--main.vtt
new file mode 100644
index 00000000..15312686
--- /dev/null
+++ b/2024/captions/emacsconf-2024-writing--emacs-writing-studio--peter-prevos--main.vtt
@@ -0,0 +1,677 @@
+WEBVTT captioned by sachac
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:02.799
+Hi, I'm Peter Prevos, and I'll be talking about Emacs
+
+00:00:02.800 --> 00:00:06.039
+Writing Studio. I'm a water engineer, a social scientist,
+
+00:00:06.040 --> 00:00:08.759
+and I dabble in theatrical magic. For each of those
+
+00:00:08.760 --> 00:00:11.399
+endeavors, I do a lot of writing. I take notes, I write
+
+00:00:11.400 --> 00:00:14.559
+reports, articles, books, and websites. I use Emacs for all
+
+00:00:14.560 --> 00:00:18.719
+my research, my writing, and my publishing. Emacs Writing
+
+00:00:18.720 --> 00:00:20.999
+Studio is an opinionated starter kit for authors who write
+
+00:00:21.000 --> 00:00:23.999
+for humans, not for programmers who write for computers.
+
+00:00:24.000 --> 00:00:26.879
+It consists of a configuration, some bespoke
+
+00:00:26.880 --> 00:00:31.119
+functions, but are not yet a package, a website, and a book.
+
+00:00:31.120 --> 00:00:36.279
+The book is completely written with EWS itself. The target
+
+00:00:36.280 --> 00:00:39.039
+audience are authors who are frustrated with using
+
+00:00:39.040 --> 00:00:41.239
+commercial software and hopping from application to
+
+00:00:41.240 --> 00:00:45.879
+application to achieve an objective. These are people
+
+00:00:45.880 --> 00:00:49.986
+without any Emacs experience or coding skills.
+
+00:00:49.987 --> 00:00:53.307
+The objective is to teach these people how to use Emacs,
+
+00:00:53.308 --> 00:00:57.648
+not how to configure Emacs to manage a complete writing project.
+
+NOTE Why?
+
+00:00:57.649 --> 00:01:00.479
+So why did I write a book about Emacs when the documentation is
+
+00:01:00.480 --> 00:01:04.719
+already so extensive? Most Emacs documentation focuses on
+
+00:01:04.720 --> 00:01:08.839
+configuration, burying potential new users with choices.
+
+00:01:08.840 --> 00:01:13.039
+It forces people to work on Emacs instead of with Emacs,
+
+00:01:13.040 --> 00:01:18.039
+and it quickly can become a productivity sink. Emacs is the
+
+00:01:18.040 --> 00:01:21.399
+ultimate free software platform, but with this freedom
+
+00:01:21.400 --> 00:01:25.879
+also comes a price. Barry Schwartz wrote about the
+
+00:01:25.880 --> 00:01:29.239
+paradox of choice, which is about the dramatic explosion in
+
+00:01:29.240 --> 00:01:32.119
+choices in the modern world. Just think about the amount of
+
+00:01:32.120 --> 00:01:34.599
+effort it can take to decide what cereal to buy in a
+
+00:01:34.600 --> 00:01:37.559
+supermarket that you haven't been before. So many
+
+00:01:37.560 --> 00:01:40.559
+different choices. Paradoxically, that's become a
+
+00:01:40.560 --> 00:01:44.239
+problem instead of a solution. Emacs can perhaps suffer
+
+00:01:44.240 --> 00:01:49.559
+from the same issue. Another objective, using a COVID-19
+
+00:01:49.560 --> 00:01:54.039
+trope: EWS is about flattening the curve--that is, the
+
+00:01:54.040 --> 00:01:56.727
+learning curve--by making these choices
+
+00:01:56.728 --> 00:02:02.451
+for the new Emacs user and avoiding the paradox.
+
+NOTE EWS configuration
+
+00:02:02.452 --> 00:02:05.593
+What about this EWS configuration?
+
+00:02:05.594 --> 00:02:07.839
+I decided to stay as close as humanly
+
+00:02:07.840 --> 00:02:11.039
+bearable to vanilla Emacs. I say that tongue-in-cheek,
+
+00:02:11.040 --> 00:02:16.026
+but also with some realism, centered around Org mode
+
+00:02:16.027 --> 00:02:18.279
+and Denote for note tagging, and citar for accessing
+
+00:02:18.280 --> 00:02:21.319
+bibliographies, and other convenience packages such as
+
+00:02:21.320 --> 00:02:24.959
+vertico for minibuffer completion. There's a
+
+00:02:24.960 --> 00:02:27.999
+dictionary, a thesaurus, and some other packages that are of
+
+00:02:28.000 --> 00:02:32.559
+interest to authors. EWS uses the standard keyboard
+
+00:02:32.560 --> 00:02:37.359
+shortcuts. Writing is much more about thinking than about
+
+00:02:37.360 --> 00:02:40.439
+maximizing the amount of words per minute. Just think
+
+00:02:40.440 --> 00:02:43.639
+about that the most used function for authors is
+
+00:02:43.640 --> 00:02:46.919
+self-insert. There's no need to use fancy keyboard
+
+00:02:46.920 --> 00:02:50.071
+shortcut systems when you write prose.
+
+NOTE How did I develop EWS?
+
+00:02:50.072 --> 00:02:54.534
+How did I go about developing Emacs? I declared Emacs bankruptcy,
+
+00:02:54.535 --> 00:02:57.096
+like we all have every now and then.
+
+00:02:57.097 --> 00:02:58.479
+I decided to write this book with
+
+00:02:58.480 --> 00:03:02.119
+vanilla Emacs and only configure the system as was
+
+00:03:02.120 --> 00:03:04.919
+required. The first thing I did, I hooked visual-line-mode
+
+00:03:04.920 --> 00:03:08.999
+to text-mode and off I went. The configuration grew as the
+
+00:03:09.000 --> 00:03:13.119
+need arose. I was actually surprised with how far you can
+
+00:03:13.120 --> 00:03:17.759
+get with just using Vanilla Emacs. I also developed two
+
+00:03:17.760 --> 00:03:21.953
+packages to enhance how I can use Denote.
+
+NOTE Overall workflow
+
+00:03:21.954 --> 00:03:25.375
+Well, let's get to a demo.
+
+00:03:25.376 --> 00:03:30.157
+EWS is based on a typical research and writing workflow.
+
+00:03:30.158 --> 00:03:32.759
+First step is you need to get some inspiration.
+
+00:03:32.760 --> 00:03:35.479
+Usually we do that by reading, by watching, by
+
+00:03:35.480 --> 00:03:39.319
+listening. Then the next step is ideation. You develop your
+
+00:03:39.320 --> 00:03:42.679
+ideas, summarize ideas from other people, write down your
+
+00:03:42.680 --> 00:03:46.439
+own ideas. For that, you need a note-taking system. EWS
+
+00:03:46.440 --> 00:03:50.279
+also talks about managing bibliographies. The third step
+
+00:03:50.280 --> 00:03:53.439
+is production. This is the actual writing process where, in
+
+00:03:53.440 --> 00:03:57.479
+this case, the EWS book. Once that is finished, we
+
+00:03:57.480 --> 00:04:00.639
+convert this Org mode file into something that can be
+
+00:04:00.640 --> 00:04:04.119
+published. That might be an e-book in an EPUB format, or a
+
+00:04:04.120 --> 00:04:08.759
+PDF for the interior of a a paperback book or perhaps as an
+
+00:04:08.760 --> 00:04:12.159
+e-book as well. There's also configuration in Emacs to
+
+00:04:12.160 --> 00:04:16.759
+produce MS Word documents if you need to collaborate with
+
+00:04:16.760 --> 00:04:22.359
+other people. Let's jump in to Emacs and walk through this
+
+00:04:22.360 --> 00:04:25.399
+workflow, give you a very quick demonstration of what's in
+
+00:04:25.400 --> 00:04:29.319
+the box.
+
+NOTE Inspiration
+
+00:04:29.320 --> 00:04:32.879
+So the first step in the EWS workflow is inspiration. We all
+
+00:04:32.880 --> 00:04:35.319
+stand on the shoulders of each other. Some giants; most of
+
+00:04:35.320 --> 00:04:38.079
+them are normal people. We get inspiration by reading,
+
+00:04:38.080 --> 00:04:40.799
+listening, and watching, and Emacs can help you access
+
+00:04:40.800 --> 00:04:44.279
+text, sound, and video. It depends on external software.
+
+00:04:44.280 --> 00:04:47.639
+Emacs acts as a beautiful interface, and EWS helps you
+
+00:04:47.640 --> 00:04:50.919
+with the configuration. But we also need a tool to manage our
+
+00:04:50.920 --> 00:04:53.631
+electronic library, and BibTeX
+
+00:04:53.632 --> 00:04:56.054
+and citar package by Bruce D'Arcus
+
+00:04:56.055 --> 00:04:58.119
+provides a perfect interface to manage this
+
+00:04:58.120 --> 00:05:02.959
+literature. If I open my bibliography here, you see that
+
+00:05:02.960 --> 00:05:06.959
+I've got 1864 references in my BibTeX files. There's a
+
+00:05:06.960 --> 00:05:11.999
+whole bunch of stuff about, I guess, the weird things that I
+
+00:05:12.000 --> 00:05:14.479
+read. Let's look for Emacs, right, because that's a joint
+
+00:05:14.480 --> 00:05:18.679
+interest that we have. Let's open here this paper by
+
+00:05:18.680 --> 00:05:23.799
+Marcus Birkenkrahe, who did some research using Emacs to teach
+
+00:05:23.800 --> 00:05:26.679
+data science. Data science is my day job, so that had my
+
+00:05:26.680 --> 00:05:29.759
+interest. We have here a Denote file, which I'll talk
+
+00:05:29.760 --> 00:05:33.399
+about in a second. There's a library file, which is a PDF, but
+
+00:05:33.400 --> 00:05:35.599
+it could be a whole collection of different files in
+
+00:05:35.600 --> 00:05:39.119
+different formats, even video or sound. We can create a new
+
+00:05:39.120 --> 00:05:42.279
+Denote file, or there's a link to the document object
+
+00:05:42.280 --> 00:05:46.959
+identifier. Let's go to the PDF. Here we can now do our
+
+00:05:46.960 --> 00:05:50.479
+reading. We can get our inspiration by what Marcus has
+
+00:05:50.480 --> 00:05:52.679
+written here about teaching data science with literary
+
+00:05:52.680 --> 00:05:54.760
+programming tools.
+
+NOTE Ideation
+
+00:05:54.761 --> 00:05:57.599
+Next step is ideation. Taking notes is
+
+00:05:57.600 --> 00:06:00.999
+the core of all creativity. When I read that paper, I might
+
+00:06:01.000 --> 00:06:05.079
+want to copy some ideas, I might get some of my own ideas, and I
+
+00:06:05.080 --> 00:06:07.679
+need to write that down. I basically write everything in a
+
+00:06:07.680 --> 00:06:10.919
+paper notebook, but then I transfer the things that are
+
+00:06:10.920 --> 00:06:14.079
+worth keeping to the Denote note-taking system. Now, there
+
+00:06:14.080 --> 00:06:17.519
+are many systems that exist out there that promise you
+
+00:06:17.520 --> 00:06:20.639
+note-taking heaven when you just follow a certain process.
+
+00:06:20.640 --> 00:06:24.919
+My advice: don't worry about Zettelkasten, PARA, or
+
+00:06:24.920 --> 00:06:28.479
+whatever is out there. Just write your notes and worry about
+
+00:06:28.480 --> 00:06:31.479
+structure and all that later. Even Niklas Luhmann, the
+
+00:06:31.480 --> 00:06:34.639
+inventor of Zettelkasten, called his system a septic tank
+
+00:06:34.640 --> 00:06:38.319
+of ideas. I call my collection of notes a primordial soup
+
+00:06:38.320 --> 00:06:43.439
+from which my books emerge. Now, Denote by Prot Stavrou is a
+
+00:06:43.440 --> 00:06:45.919
+flexible note-taking system that can implement any of the
+
+00:06:45.920 --> 00:06:49.119
+popular methods. I transferred thousands of files to
+
+00:06:49.120 --> 00:06:54.319
+this format, so all my information is at my fingertips. We
+
+00:06:54.320 --> 00:06:59.759
+can jump to the Denote directory. In my case, that's
+
+00:06:59.760 --> 00:07:04.279
+~/documents/notes. We see here the marvel that is Denote,
+
+00:07:04.280 --> 00:07:09.759
+which is its ingenious file naming convention that has a
+
+00:07:09.760 --> 00:07:15.279
+timestamp, a title, and some (what do we call them) tags or
+
+00:07:15.280 --> 00:07:18.559
+categories, whatever you please. This is a very quick way
+
+00:07:18.560 --> 00:07:28.763
+to find things. Then there is an ews-dired-narrow function.
+
+00:07:28.764 --> 00:07:30.799
+For example, I can find anything,
+
+00:07:30.800 --> 00:07:34.679
+_ews means anything that has the EWS tag, and
+
+00:07:34.680 --> 00:07:39.112
+there we go, it's narrowed down in my EWS notes.
+
+NOTE denote-explore
+
+00:07:39.113 --> 00:07:45.040
+Now, this is all very well, but I also decided to
+
+00:07:45.041 --> 00:07:47.102
+write a package called denote-explore,
+
+00:07:47.103 --> 00:07:54.071
+which helps us sort of explore these collections of notes.
+
+00:07:54.072 --> 00:07:55.519
+One of the fancy things we can do is
+
+00:07:55.520 --> 00:07:56.519
+do some visualization.
+
+00:07:56.520 --> 00:08:02.159
+Let's go to the network function and create a community of
+
+00:08:02.160 --> 00:08:05.359
+notes. A community is a collection of notes that match a
+
+00:08:05.360 --> 00:08:10.039
+regular expression, _ews. All the notes here
+
+00:08:10.040 --> 00:08:15.599
+that are on this list, the ones with the EWS tag. In a second,
+
+00:08:15.600 --> 00:08:22.159
+my browser pops up. I shall move that to my other window in a
+
+00:08:22.160 --> 00:08:28.599
+second. There we go. denote-explore creates a SVG file and
+
+00:08:28.600 --> 00:08:33.213
+it creates an arrow between all the nodes that are linked.
+
+00:08:33.214 --> 00:08:36.199
+It puts a title up there when the node has more than two links
+
+00:08:36.200 --> 00:08:39.599
+going in or out. We can also click on the note to read it in
+
+00:08:39.600 --> 00:08:43.679
+the browser, if you choose. If you set up Firefox properly,
+
+00:08:43.680 --> 00:08:49.639
+I'm sure it can also go into Emacs. This is the note tagging
+
+00:08:49.640 --> 00:08:54.580
+that's available within EWS.
+
+NOTE Writing with Org
+
+00:08:54.581 --> 00:08:57.021
+Now, we've taken all these notes. Now we need to
+
+00:08:57.022 --> 00:09:00.518
+start writing stuff. Org mode, for me,
+
+00:09:00.519 --> 00:09:03.559
+is the ideal tool. Org mode is what you see is what you
+
+00:09:03.560 --> 00:09:06.919
+mean. The text and the syntax instruct the computer on how to
+
+00:09:06.920 --> 00:09:10.479
+produce the final result. This means that one file can
+
+00:09:10.480 --> 00:09:12.879
+become many different formats, an e-book, a printed book,
+
+00:09:12.880 --> 00:09:16.759
+or a website. It doesn't matter. Now, a lot of people talk
+
+00:09:16.760 --> 00:09:18.959
+about what you see, what you get, and that we should have a
+
+00:09:18.960 --> 00:09:21.079
+what you see, what you get mode in Emacs. I think that's
+
+00:09:21.080 --> 00:09:24.799
+irrelevant, because showing the final result while you're
+
+00:09:24.800 --> 00:09:28.639
+writing is actually a distraction. Traditional writing,
+
+00:09:28.640 --> 00:09:31.359
+producing the content, and designing the layout and
+
+00:09:31.360 --> 00:09:34.119
+typesetting are separate processes done by different
+
+00:09:34.120 --> 00:09:38.079
+professionals. In Emacs Writing Studio, the writing is
+
+00:09:38.080 --> 00:09:40.359
+still done by a human. There are no provisions for large
+
+00:09:40.360 --> 00:09:45.039
+language models in EWS. But layout and typesetting is done
+
+00:09:45.040 --> 00:09:49.599
+by external software, be it CSS, LaTeX, or XML, all mediated
+
+00:09:49.600 --> 00:09:50.359
+by Org mode.
+
+00:09:50.360 --> 00:09:57.399
+EWS also has some other tools for case conversion,
+
+00:09:57.400 --> 00:09:59.799
+thesaurus, a dictionary that I haven't got time to show,
+
+00:09:59.800 --> 00:10:02.909
+but what I will show you is how the book functions,
+
+00:10:02.910 --> 00:10:05.919
+and then how we create these publications.
+
+NOTE The project file
+
+00:10:05.920 --> 00:10:11.639
+Okay. Let's go to my project file.
+
+00:10:11.640 --> 00:10:17.058
+So these are the EWS chapters,
+
+00:10:17.059 --> 00:10:20.200
+and each chapter is an Org mode file.
+
+00:10:20.201 --> 00:10:25.079
+Let's go into the main document, which is set up with
+
+00:10:25.080 --> 00:10:30.359
+olivetti-mode just to make it easier to read. What we see
+
+00:10:30.360 --> 00:10:34.839
+here is all the fluff from Org mode. These are all the
+
+00:10:34.840 --> 00:10:37.719
+various bits of metadata that I used to create the final
+
+00:10:37.720 --> 00:10:43.439
+result. Then for each chapter, I have an inclusion.
+
+00:10:43.440 --> 00:10:46.721
+This references another file. I've got some properties.
+
+00:10:46.722 --> 00:10:49.839
+In this case, the forward is unnumbered. There's some notes.
+
+00:10:49.840 --> 00:10:53.599
+In this case, Prot actually wrote this for me. Then we
+
+00:10:53.600 --> 00:10:59.039
+can jump into that text. Then what we see at the bottom
+
+00:10:59.040 --> 00:11:02.919
+here is some inclusions for HTML. This is the EPUB version,
+
+00:11:02.920 --> 00:11:07.159
+but it's different in LaTeX. Again, the same file can
+
+00:11:07.160 --> 00:11:09.479
+serve different purposes.
+
+00:11:09.480 --> 00:11:14.719
+So now let's, as the final part of this demonstration,
+
+00:11:14.720 --> 00:11:17.759
+actually create the book, because the book's freely
+
+00:11:17.760 --> 00:11:23.159
+available. You can download the source files from GitHub,
+
+00:11:23.160 --> 00:11:29.839
+and you can roll your own. Let's open the dispatcher.
+
+00:11:29.840 --> 00:11:33.468
+We'll export the LaTeX and we want to open the file.
+
+00:11:33.469 --> 00:11:37.349
+Now this takes a minute because there's a lot happening within
+
+00:11:37.350 --> 00:11:42.199
+all this code, so I'll shorten this video. I'll be silent now.
+
+00:11:42.200 --> 00:11:49.959
+There we are. This is the Emacs Writing Studio PDF version,
+
+00:11:49.960 --> 00:11:53.439
+which will eventually become the interior for the
+
+00:11:53.440 --> 00:11:55.159
+paperback version.
+
+00:11:55.160 --> 00:12:02.399
+So the EWS book is available in all major e-book shops.
+
+00:12:02.400 --> 00:12:05.319
+I'm also working on a paperback, which I hope to finish when
+
+00:12:05.320 --> 00:12:09.279
+Emacs 30 comes out. But the Org Mode files that I use to
+
+00:12:09.280 --> 00:12:11.039
+produce the book, they're available in the GitHub
+
+00:12:11.040 --> 00:12:13.999
+repository, so you can also roll your own, because the EWS
+
+00:12:14.000 --> 00:12:18.719
+configuration is the one that I use to produce the book.
+
+NOTE Conclusions
+
+00:12:18.720 --> 00:12:22.799
+Now, some conclusions from this journey is that the best way to
+
+00:12:22.800 --> 00:12:26.239
+learn is to teach. That was my personal objective. I
+
+00:12:26.240 --> 00:12:28.599
+learned a lot from systematically working out how to
+
+00:12:28.600 --> 00:12:33.559
+implement the EWS workflow. One of the surprising things
+
+00:12:33.560 --> 00:12:35.759
+that I learned is to have reliance on external software
+
+00:12:35.760 --> 00:12:39.359
+throughout the writing process. I spent a lot of time in
+
+00:12:39.360 --> 00:12:42.159
+the book about explaining these connections that Emacs is
+
+00:12:42.160 --> 00:12:46.399
+not just a text processor, it is also an interface with other
+
+00:12:46.400 --> 00:12:49.599
+software. Now, future developments, as I mentioned,
+
+00:12:49.600 --> 00:12:52.119
+there'll be a paperback version of the book when Emacs 30
+
+00:12:52.120 --> 00:12:55.959
+comes out, and I might reconfigure things a little bit. I'm
+
+00:12:55.960 --> 00:12:58.719
+only planning to update the configuration when packages
+
+00:12:58.720 --> 00:13:04.639
+break or with another major Emacs release, because I want to
+
+00:13:04.640 --> 00:13:08.079
+work with Emacs, not work on Emacs. A big thank you to
+
+00:13:08.080 --> 00:13:11.199
+Prot Stavrou, who helped me with Denote packages, and he
+
+00:13:11.200 --> 00:13:14.999
+also wrote the forward to the book. There's also several
+
+00:13:15.000 --> 00:13:18.119
+test readers that I met through Mastodon that helped me out
+
+00:13:18.120 --> 00:13:20.719
+quite a bit. Of course, all the Emacs and package
+
+00:13:20.720 --> 00:13:25.519
+developers without which none of this would exist. Thank
+
+00:13:25.520 --> 00:13:27.559
+you all for your attention, and I look forward to your
+
+00:13:27.560 --> 00:13:30.720
+questions and suggestions.