summaryrefslogtreecommitdiffstats
path: root/2025/captions
diff options
context:
space:
mode:
Diffstat (limited to '2025/captions')
-rw-r--r--2025/captions/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--answers.vtt1021
-rw-r--r--2025/captions/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--main--chapters.vtt77
-rw-r--r--2025/captions/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--main.vtt2058
-rw-r--r--2025/captions/emacsconf-2025-bookclub-tapas--bookclub-tapas--maddie-sullivan--answers.vtt2107
-rw-r--r--2025/captions/emacsconf-2025-bookclub-tapas--bookclub-tapas--maddie-sullivan--main--chapters.vtt68
-rw-r--r--2025/captions/emacsconf-2025-bookclub-tapas--bookclub-tapas--maddie-sullivan--main.vtt2400
-rw-r--r--2025/captions/emacsconf-2025-calc--basic-calc-functionality-for-engineering-or-electronics--christopher-howard--main--chapters.vtt41
-rw-r--r--2025/captions/emacsconf-2025-calc--basic-calc-functionality-for-engineering-or-electronics--christopher-howard--main.vtt888
-rw-r--r--2025/captions/emacsconf-2025-commonlisp--common-lisp-images-communicating-likeahuman-through-shared-emacs-slime-and-eev--screwlisp--answers.vtt1051
-rw-r--r--2025/captions/emacsconf-2025-commonlisp--common-lisp-images-communicating-likeahuman-through-shared-emacs-slime-and-eev--screwlisp--main.vtt1260
-rw-r--r--2025/captions/emacsconf-2025-completion--corfuyasnippet-easier-than-i-thought--pedro-a-aranda-gutirrez--main.vtt1426
-rw-r--r--2025/captions/emacsconf-2025-gardening--gardening-in-emacs-a-windows-users-tale-of-tending-tweaking-and-triumph--marco-bresciani--main--chapters.vtt32
-rw-r--r--2025/captions/emacsconf-2025-gardening--gardening-in-emacs-a-windows-users-tale-of-tending-tweaking-and-triumph--marco-bresciani--main.vtt1110
-rw-r--r--2025/captions/emacsconf-2025-gmail--orggmail-a-deep-integration-of-gmail-into-your-org-mode--bala-ramadurai--answers.vtt448
-rw-r--r--2025/captions/emacsconf-2025-gmail--orggmail-a-deep-integration-of-gmail-into-your-org-mode--bala-ramadurai--main--chapters.vtt77
-rw-r--r--2025/captions/emacsconf-2025-gmail--orggmail-a-deep-integration-of-gmail-into-your-org-mode--bala-ramadurai--main.vtt1764
-rw-r--r--2025/captions/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--answers.vtt973
-rw-r--r--2025/captions/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--main--chapters.vtt50
-rw-r--r--2025/captions/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--main.vtt1332
-rw-r--r--2025/captions/emacsconf-2025-graphics--modern-emacselisp-hardwaresoftware-accelerated-graphics--emanuel-berg--main.vtt75
-rw-r--r--2025/captions/emacsconf-2025-greader--gnu-emacs-greader-gnam-reader-mode-is-the-best-emacs-mode-in-existence--yuval-langer--main.vtt223
-rw-r--r--2025/captions/emacsconf-2025-hyperboleqa--questions-and-answers-to-help-you-fly-with-hyperbole--bob-weiner--main.vtt2203
-rw-r--r--2025/captions/emacsconf-2025-juicemacs--juicemacs-exploring-speculative-jit-compilation-for-elisp-in-java--kana--main.vtt1238
-rw-r--r--2025/captions/emacsconf-2025-latex--latex-export-in-orgmode-the-overhaul--pedro-a-aranda-gutirrez--main.vtt1402
-rw-r--r--2025/captions/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--answers.vtt1591
-rw-r--r--2025/captions/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--main.vtt1069
-rw-r--r--2025/captions/emacsconf-2025-modern--some-problems-of-modernizing-emacs--eduardo-ochs--main.vtt727
-rw-r--r--2025/captions/emacsconf-2025-open-mic--open-session--participants--main.vtt3058
-rw-r--r--2025/captions/emacsconf-2025-org-babel--making-orgbabel-reactive--abhinav-tushar--main--chapters.vtt26
-rw-r--r--2025/captions/emacsconf-2025-org-babel--making-orgbabel-reactive--abhinav-tushar--main.vtt614
-rw-r--r--2025/captions/emacsconf-2025-private-ai--emacs-and-private-ai-a-great-match--aaron-grothe--main.vtt2602
-rw-r--r--2025/captions/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--answers.vtt859
-rw-r--r--2025/captions/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--main.vtt731
-rw-r--r--2025/captions/emacsconf-2025-reader--an-introduction-to-the-emacs-reader--divy--answers.vtt1081
-rw-r--r--2025/captions/emacsconf-2025-reader--an-introduction-to-the-emacs-reader--divy--main--chapters.vtt47
-rw-r--r--2025/captions/emacsconf-2025-reader--an-introduction-to-the-emacs-reader--divy--main.vtt2431
-rw-r--r--2025/captions/emacsconf-2025-reference--emacs-as-a-fullyfledged-reference-manager--vidianos-giannitsis--answers.vtt1015
-rw-r--r--2025/captions/emacsconf-2025-reference--emacs-as-a-fullyfledged-reference-manager--vidianos-giannitsis--main--chapters.vtt32
-rw-r--r--2025/captions/emacsconf-2025-reference--emacs-as-a-fullyfledged-reference-manager--vidianos-giannitsis--main.vtt1035
-rw-r--r--2025/captions/emacsconf-2025-sat-open--saturday-opening-remarks--main--chapters.vtt41
-rw-r--r--2025/captions/emacsconf-2025-sat-open--saturday-opening-remarks--main.vtt376
-rw-r--r--2025/captions/emacsconf-2025-schemacs--one-year-progress-update-schemacs-formerly-gypsum--ramin-honary--answers.vtt1531
-rw-r--r--2025/captions/emacsconf-2025-schemacs--one-year-progress-update-schemacs-formerly-gypsum--ramin-honary--main--chapters.vtt29
-rw-r--r--2025/captions/emacsconf-2025-schemacs--one-year-progress-update-schemacs-formerly-gypsum--ramin-honary--main.vtt1183
-rw-r--r--2025/captions/emacsconf-2025-sun-close--sunday-closing-remarks--main.vtt676
-rw-r--r--2025/captions/emacsconf-2025-sun-open--sunday-opening-remarks--main--chapters.vtt41
-rw-r--r--2025/captions/emacsconf-2025-sun-open--sunday-opening-remarks--main.vtt376
-rw-r--r--2025/captions/emacsconf-2025-swanky--swanky-python-interactive-development-for-python--scott-zimmermann--main.vtt1108
-rw-r--r--2025/captions/emacsconf-2025-weights--weightlifting-tracking-with-emacs-on-android--zachary-romero--main.vtt1672
-rw-r--r--2025/captions/emacsconf-2025-zettelkasten--zettelkasten-for-regular-emacs-hackers--christian-tietze--answers.vtt3977
-rw-r--r--2025/captions/emacsconf-2025-zettelkasten--zettelkasten-for-regular-emacs-hackers--christian-tietze--main--chapters.vtt47
-rw-r--r--2025/captions/emacsconf-2025-zettelkasten--zettelkasten-for-regular-emacs-hackers--christian-tietze--main.vtt1492
52 files changed, 52791 insertions, 0 deletions
diff --git a/2025/captions/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--answers.vtt b/2025/captions/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--answers.vtt
new file mode 100644
index 00000000..0afe639f
--- /dev/null
+++ b/2025/captions/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--answers.vtt
@@ -0,0 +1,1021 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:05.199
+Greetings. Salaam again. I'm delighted to be here
+
+00:00:05.200 --> 00:00:11.199
+and happy to answer your questions.
+
+00:00:11.200 --> 00:00:12.839
+I'm not seeing anything yet,
+
+00:00:12.840 --> 00:00:17.679
+but let me take advantage of this time
+
+00:00:17.680 --> 00:00:20.079
+to speak about one question
+
+00:00:17.800 --> 00:00:43.439
+If you can bring up the pad so that you can look at it.
+
+00:00:20.080 --> 00:00:22.879
+that I saw coming in earlier on the pad,
+
+00:00:22.880 --> 00:00:25.039
+which was all the outputs
+
+00:00:25.040 --> 00:00:29.399
+and the inputs that you mentioned, where are they?
+
+00:00:29.400 --> 00:00:35.439
+So they are on GitHub, and this is in one of my slides.
+
+00:00:35.440 --> 00:00:43.359
+I mentioned the URL for it. I'll show you that as well.
+
+00:00:43.360 --> 00:00:50.391
+So the URL for it is github.com bxplpc18068,
+
+00:00:43.440 --> 00:01:00.119
+Okay. Hang on a second. I will.
+
+00:00:50.392 --> 00:00:58.679
+which is the handle for this talk.
+
+00:00:58.680 --> 00:01:06.039
+In there, you have all the PDFs and the HTMLs,
+
+00:01:00.120 --> 00:01:07.879
+And then people can join here as well.
+
+00:01:06.040 --> 00:01:12.119
+a citation, a bib input, and also the sources.
+
+00:01:12.120 --> 00:01:19.439
+So if you were to go to the PDF, you will see
+
+00:01:19.440 --> 00:01:24.319
+Um, both the article presentation and the,
+
+00:01:24.320 --> 00:01:27.279
+let's take a quick look at the.
+
+00:01:27.280 --> 00:01:34.159
+Which is what you have seen. So.
+
+00:01:34.160 --> 00:01:40.279
+And as far as the sources are, there are two primary files.
+
+00:01:37.000 --> 00:01:45.999
+I think we're now in a live Q&A session for Blee-LCNT,
+
+00:01:40.280 --> 00:01:47.199
+This presentation, left to right,
+
+00:01:46.000 --> 00:01:54.959
+and people can join us here in the Big Blue Button room,
+
+00:01:47.200 --> 00:01:50.919
+is the one that includes all the LaTeX packages.
+
+00:01:50.920 --> 00:01:52.641
+We might as well take a quick look.
+
+00:01:52.642 --> 00:01:57.600
+So what's in there is primarily the use packages.
+
+00:01:57.601 --> 00:02:06.999
+And then it dispatches to body press art.
+
+00:02:07.000 --> 00:02:11.519
+And this is where the code is.
+
+00:02:11.520 --> 00:02:14.559
+And I walked through this briefly.
+
+00:02:14.560 --> 00:02:26.839
+So, notice here again that this is a mixture of LaTeX and Org.
+
+00:02:26.840 --> 00:02:31.039
+Each of the presentation slides are here.
+
+00:02:31.040 --> 00:02:34.519
+For example, my introduction
+
+00:02:34.520 --> 00:02:37.239
+is just a video that gets included.
+
+00:02:37.240 --> 00:02:41.119
+And then the notes that I use, the voiceover,
+
+00:02:41.120 --> 00:02:47.319
+is also included in the LaTeX file.
+
+00:02:47.320 --> 00:02:50.079
+Let me... It'll probably be easy
+
+00:02:50.080 --> 00:02:52.399
+to take those voiceover notes
+
+00:02:52.400 --> 00:02:54.959
+and then align them with a tool like NES.
+
+00:02:54.960 --> 00:02:58.399
+to make subtitles for your videos.
+
+00:02:58.400 --> 00:03:01.199
+Exactly, and that is what I do.
+
+00:03:01.200 --> 00:03:08.519
+So there is a way to gather them all as P-notes.
+
+00:03:08.520 --> 00:03:13.839
+And so all the P-notes get together in a single file,
+
+00:03:13.840 --> 00:03:20.599
+and then you feed that to Aeneas, and it will align them.
+
+00:03:20.600 --> 00:03:23.319
+And then there is the work of using your subed
+
+00:03:23.320 --> 00:03:30.279
+to just get the right sort of line length on them.
+
+00:03:30.280 --> 00:03:33.039
+But you did all of that for me this year, Sacha.
+
+00:03:33.040 --> 00:03:34.519
+Thank you very much.
+
+00:03:34.520 --> 00:03:37.559
+It was just a matter of not having time.
+
+00:03:37.560 --> 00:03:43.559
+Otherwise, I plan to do it myself. It's all right.
+
+00:03:43.560 --> 00:03:46.639
+It was very easy since he provided the full narration.
+
+00:03:46.640 --> 00:03:50.399
+I still need to tweak it sometimes,
+
+00:03:50.400 --> 00:03:52.919
+so I often use the waveforms in subed
+
+00:03:52.920 --> 00:03:58.559
+to find the right starting time and ending time for things.
+
+00:03:58.560 --> 00:04:01.519
+But it is so nice to have a presentation
+
+00:04:01.520 --> 00:04:03.879
+where you can experience it in different forms,
+
+00:04:03.880 --> 00:04:10.159
+as an article, as a video, as a post with links and everything.
+
+00:04:10.160 --> 00:04:11.479
+Very handy.
+
+00:04:11.480 --> 00:04:20.919
+Right, and in case a teacher uses this for class lectures,
+
+00:04:20.920 --> 00:04:26.079
+then the student profits from all sorts.
+
+00:04:26.080 --> 00:04:28.999
+The article presentation format is very useful
+
+00:04:29.000 --> 00:04:33.239
+for a student to add their own notes to it and the rest.
+
+00:04:33.240 --> 00:04:37.519
+Exactly as you said, having multiple forms is great.
+
+00:04:37.520 --> 00:04:40.479
+Video has its place, reveal has its place,
+
+00:04:40.480 --> 00:04:44.039
+PDF has its place, article has its place.
+
+00:04:44.040 --> 00:04:48.399
+All of them work together.
+
+00:04:48.400 --> 00:04:50.479
+I've been having a hard time figuring out
+
+00:04:50.480 --> 00:04:54.719
+how to make the reveal.js version of a presentation
+
+00:04:54.720 --> 00:04:56.999
+more easily distributable, though.
+
+00:04:57.000 --> 00:04:58.839
+This is something we've had a hard time
+
+00:04:58.840 --> 00:05:00.199
+with in the past, too.
+
+00:05:00.200 --> 00:05:02.759
+You have these lovely EmacsConf presentations
+
+00:05:02.760 --> 00:05:04.839
+that could be reveal presentations,
+
+00:05:04.840 --> 00:05:07.759
+but hosting them doesn't quite fit
+
+00:05:07.760 --> 00:05:13.639
+in the usual assumptions people have. Exactly, exactly.
+
+00:05:13.640 --> 00:05:16.559
+So if we were to have a reveal server,
+
+00:05:16.560 --> 00:05:20.479
+then we could upload our reveal inputs to it.
+
+00:05:20.480 --> 00:05:24.999
+But you're right, we should look
+
+00:05:25.000 --> 00:05:26.679
+for some sort of a packaging
+
+00:05:26.680 --> 00:05:34.079
+that is more plug and distribute. Yeah, so I'd be all game
+
+00:05:34.080 --> 00:05:36.919
+if we wanted to do it for next year,
+
+00:05:36.920 --> 00:05:42.039
+I'd be happy to provide all the reveal outputs.
+
+00:05:42.040 --> 00:05:45.919
+In fact, they are here, let me touch on that quickly.
+
+00:05:45.920 --> 00:05:53.639
+Good point you brought up. So, this is the. Reveal output.
+
+00:05:53.640 --> 00:05:57.519
+So all of these, you see the images and the audio
+
+00:05:57.520 --> 00:06:02.359
+in my own environment are SIM links to where I keep them.
+
+00:06:02.360 --> 00:06:06.239
+So those need to come in,
+
+00:06:06.240 --> 00:06:10.599
+but the reveal output really comes right here.
+
+00:06:10.600 --> 00:06:13.679
+And this is how it looks.
+
+00:06:13.680 --> 00:06:15.679
+If that's a link you can add to the pad,
+
+00:06:15.680 --> 00:06:19.799
+then I can add you to the top page afterwards.
+
+00:06:19.800 --> 00:06:21.839
+I think as a, as a speaker,
+
+00:06:21.840 --> 00:06:24.119
+I tend to just self host the thing.
+
+00:06:24.120 --> 00:06:28.319
+And that way also, if I find a bug, which often happens,
+
+00:06:28.320 --> 00:06:30.679
+I can go and quietly update it.
+
+00:06:30.680 --> 00:06:36.439
+Exactly. Exactly. Sure. Sure. Yeah.
+
+00:06:36.440 --> 00:06:44.239
+This right now, what we are looking at is from GitHub.
+
+00:06:44.240 --> 00:06:48.599
+And the audio and the images, of course, are large,
+
+00:06:48.600 --> 00:06:55.759
+and I did not upload them. But I can send them, sure.
+
+00:06:55.760 --> 00:07:01.999
+So, a few other things maybe I can elaborate on.
+
+00:07:02.000 --> 00:07:08.639
+This is the kombut strapping page for BISOS, also on there.
+
+00:07:08.640 --> 00:07:11.079
+And if somebody wanted to actually
+
+00:07:11.080 --> 00:07:12.919
+dig deeper and go through this,
+
+00:07:12.920 --> 00:07:18.959
+a good starting point would be my GitHub page.
+
+00:07:18.960 --> 00:07:24.639
+But my GitHub page is not done and organized the usual way.
+
+00:07:24.640 --> 00:07:26.999
+So I only have three repositories
+
+00:07:27.000 --> 00:07:30.359
+and the repositories basically say,
+
+00:07:30.360 --> 00:07:32.266
+here is where you need to go.
+
+00:07:32.267 --> 00:07:39.159
+So all of my work is organized as organizations.
+
+00:07:39.160 --> 00:07:48.039
+So, for example, for Emacs, if you were to go to BXBli,
+
+00:07:48.040 --> 00:07:56.359
+you will see all the relevant repos for that purpose.
+
+00:07:56.360 --> 00:07:58.975
+So, for example, if you wanted to
+
+00:07:58.976 --> 00:08:03.319
+come and take a look at mail template,
+
+00:08:03.320 --> 00:08:08.719
+templating, distribution, and tracking,
+
+00:08:08.720 --> 00:08:16.239
+you would get a Emacs package ready to go over here.
+
+00:08:16.240 --> 00:08:23.479
+But again, all of this is through the use of GitHub organizations.
+
+00:08:23.480 --> 00:08:26.399
+So my repos are by subject
+
+00:08:26.400 --> 00:08:33.239
+and the by source itself has 69 repositories
+
+00:08:33.240 --> 00:08:38.719
+where different sections of it are packaged as PIP packages.
+
+00:08:38.720 --> 00:08:42.359
+So, for example, for LCNT, we can go there.
+
+00:08:42.360 --> 00:08:46.439
+So, these are the packages that let you,
+
+00:08:46.440 --> 00:08:53.159
+let me go there, that let you dissect.
+
+00:08:53.160 --> 00:08:55.199
+Sorry, you have your slides shared at the moment,
+
+00:08:55.200 --> 00:08:59.599
+so I don't know if you're in a different tab.
+
+00:08:59.600 --> 00:09:03.079
+Oh, am I in a different tab?
+
+00:09:03.080 --> 00:09:06.399
+I thought that that would follow me.
+
+00:09:06.400 --> 00:09:16.119
+Yes, I am in a different tab. Let me see.
+
+00:09:16.120 --> 00:09:19.879
+This is the one that you are seeing,
+
+00:09:19.880 --> 00:09:28.839
+so let me go over here. Perfect. Now you're seeing it.
+
+00:09:28.840 --> 00:09:31.279
+So literally on the same page. Awesome. Right.
+
+00:09:31.280 --> 00:09:33.679
+So you were not actually seeing what I was saying.
+
+00:09:33.680 --> 00:09:36.159
+So, so what I was saying that is that
+
+00:09:36.160 --> 00:09:42.159
+if you go to my primary website, GitHub page,
+
+00:09:42.160 --> 00:09:45.439
+you will see that there are only three repos there.
+
+00:09:45.440 --> 00:09:49.759
+And those repos just give information
+
+00:09:49.760 --> 00:09:52.959
+about where the real repos are.
+
+00:09:52.960 --> 00:09:57.399
+And the real repos are organized in various organizations.
+
+00:09:57.400 --> 00:10:06.719
+So, for example, for Emacs packages, I use the bxblee
+
+00:10:06.720 --> 00:10:11.999
+And in there, there are 40 repositories.
+
+00:10:12.000 --> 00:10:15.399
+And as an example, you can choose, for example,
+
+00:10:15.400 --> 00:10:26.519
+AI plus is just a few additional libraries for menus, for AIDERMAX.
+
+00:10:26.520 --> 00:10:31.719
+And the rest of BLEE is done that way as well.
+
+00:10:31.720 --> 00:10:36.919
+So if you were to let me also show
+
+00:10:36.920 --> 00:10:43.759
+more relevant stuff to the content generation.
+
+00:10:43.760 --> 00:10:48.839
+And everything related to BySauce in Python is in BySauce pip.
+
+00:10:48.840 --> 00:10:52.879
+These are packages that are ready
+
+00:10:52.880 --> 00:10:57.959
+to be exported to pypi and
+
+00:10:57.960 --> 00:11:02.749
+For example, for LCNT, if you go here,
+
+00:11:02.750 --> 00:11:04.558
+let's go to the bin directory.
+
+00:11:04.559 --> 00:11:15.808
+These are the utilities that dissect the PDF output of Beamer
+
+00:11:15.809 --> 00:11:23.839
+converted to images so that you can insert them in Reveal.
+
+00:11:23.840 --> 00:11:29.159
+And then again, if you were to just wanted to dig deeper
+
+00:11:29.160 --> 00:11:34.759
+in any of these as components,
+
+00:11:34.760 --> 00:11:40.559
+you would simply start from this top level page
+
+00:11:40.560 --> 00:11:44.719
+and explore the organizations.
+
+00:11:44.720 --> 00:11:48.719
+So in total, maybe there is 300 repos,
+
+00:11:48.720 --> 00:11:54.279
+but they are organized by subject matter
+
+00:11:54.280 --> 00:12:03.399
+within GitHub organizations.
+
+00:12:03.400 --> 00:12:10.799
+Yeah. Additional general comment.
+
+00:12:10.800 --> 00:12:13.039
+If you were to look at my presentation,
+
+00:12:13.040 --> 00:12:17.519
+I'd say I touched on five different topics.
+
+00:12:17.520 --> 00:12:24.039
+So, one topic was this content generation in general.
+
+00:12:24.040 --> 00:12:35.279
+The second one was this challenge of DIY model and recipes
+
+00:12:35.280 --> 00:12:38.319
+versus building something large
+
+00:12:38.320 --> 00:12:40.919
+and including everything in it.
+
+00:12:40.920 --> 00:12:43.519
+And that is, that has been the motivation
+
+00:12:43.520 --> 00:12:46.919
+for BySauce and BLE.
+
+00:12:46.920 --> 00:12:50.279
+And I'm interested in getting feedback on it.
+
+00:12:50.280 --> 00:12:54.519
+In general, the open source culture
+
+00:12:54.520 --> 00:13:00.719
+has been focusing on components
+
+00:13:00.720 --> 00:13:03.439
+and large American corporations
+
+00:13:03.440 --> 00:13:07.719
+have focused in integration of these components.
+
+00:13:07.720 --> 00:13:11.679
+So my short message here is that
+
+00:13:11.680 --> 00:13:17.959
+we should start thinking as providing solutions
+
+00:13:17.960 --> 00:13:23.519
+as opposed to minor pieces and packages
+
+00:13:23.520 --> 00:13:30.599
+and put them all together and claim them as our own digital ecosystem.
+
+00:13:30.600 --> 00:13:38.319
+And this is the concept behind ByStar, BySource and BLEE.
+
+00:13:38.320 --> 00:13:40.999
+The third point I was making throughout
+
+00:13:41.000 --> 00:13:45.479
+is this concept of dynamic blocks everywhere,
+
+00:13:45.480 --> 00:13:51.599
+and Comiga, which is the inverse of Babel.
+
+00:13:51.600 --> 00:13:57.479
+And I'd also be interested in feedback on those.
+
+00:13:57.480 --> 00:14:03.239
+I think the d-blocks-everywhere concept,
+
+00:14:03.240 --> 00:14:13.079
+I can very quickly show that.
+
+00:14:13.080 --> 00:14:18.039
+it would be in the LaTeX file, as an example.
+
+00:14:18.040 --> 00:14:23.319
+I didn't really do a good job in digging deeper into that.
+
+00:14:23.320 --> 00:14:25.479
+So if you go to the sources
+
+00:14:25.480 --> 00:14:31.319
+and you look at any of the slides,
+
+00:14:31.320 --> 00:14:39.719
+All the slides are in here inside of a dynamic block.
+
+00:14:39.720 --> 00:14:41.919
+This is an org D block,
+
+00:14:41.920 --> 00:14:46.919
+but you would invoke it in LaTeX mode.
+
+00:14:46.920 --> 00:14:51.199
+And then from this begin to this end,
+
+00:14:51.200 --> 00:14:54.559
+everything is auto-generated
+
+00:14:54.560 --> 00:15:00.039
+through the Elisp function, body MM video.
+
+00:15:00.040 --> 00:15:06.879
+And the parameters that it takes are the video pass.
+
+00:15:06.880 --> 00:15:12.239
+So all of this code is repeated all over the place.
+
+00:15:12.240 --> 00:15:15.799
+And all you need in it is the video pass.
+
+00:15:15.800 --> 00:15:21.959
+So it's very easy to think of this as a macro capability,
+
+00:15:21.960 --> 00:15:25.079
+except that the macro is visible.
+
+00:15:25.080 --> 00:15:29.479
+And it has one additional benefit
+
+00:15:29.480 --> 00:15:34.799
+on top of general macro capabilities,
+
+00:15:34.800 --> 00:15:36.759
+and that is that it's open.
+
+00:15:36.760 --> 00:15:41.679
+In this particular case, it closes,
+
+00:15:41.680 --> 00:15:46.439
+but let me show you another one where it is open.
+
+00:15:46.440 --> 00:15:54.879
+So if you look at, this is latex section, this one is good.
+
+00:15:54.880 --> 00:16:00.439
+This is a derived image. And by saying that it's open
+
+00:16:00.440 --> 00:16:06.679
+is that you see my begin verbatim and my begin frame.
+
+00:16:06.680 --> 00:16:11.439
+They end and there is no closing for them.
+
+00:16:11.440 --> 00:16:14.999
+So the extra text that is outside
+
+00:16:15.000 --> 00:16:21.319
+of the D block and closes it is down here.
+
+00:16:21.320 --> 00:16:24.959
+And none of the existing macro capabilities
+
+00:16:24.960 --> 00:16:30.799
+gives you this feature. This even comes handy in Lisp.
+
+00:16:30.800 --> 00:16:40.039
+So that is a proposal saying
+
+00:16:40.040 --> 00:16:47.719
+that let's make D blocks, dynamic blocks,
+
+00:16:47.720 --> 00:16:52.959
+generalized to all of Emacs, as opposed to just org mode.
+
+00:16:52.960 --> 00:16:54.759
+And that's relatively simple.
+
+00:16:54.760 --> 00:17:01.359
+And the Emacs source team could easily decide
+
+00:17:01.360 --> 00:17:02.959
+that this is worthwhile doing.
+
+00:17:02.960 --> 00:17:07.759
+And then, of course, I've gone
+
+00:17:07.760 --> 00:17:09.959
+over it through the presentation.
+
+00:17:09.960 --> 00:17:20.399
+So, I see 1 question coming in. What changes have you seen?
+
+00:17:20.400 --> 00:17:24.719
+the culture while developing all these things
+
+00:17:24.720 --> 00:17:28.639
+like liver halal system and now BLCNT.
+
+00:17:28.640 --> 00:17:40.079
+Well, it's a work in progress, I would say.
+
+00:17:40.080 --> 00:17:43.039
+We learn from one another.
+
+00:17:43.040 --> 00:17:47.719
+And what I'm doing may be considered
+
+00:17:47.720 --> 00:17:52.199
+just a stepwise increment,
+
+00:17:52.200 --> 00:18:01.799
+but the cultural input is that we really should start
+
+00:18:01.800 --> 00:18:09.399
+thinking about providing solutions as opposed to packages.
+
+00:18:09.400 --> 00:18:19.319
+The FOSS culture is really limited in its scope to packages
+
+00:18:19.320 --> 00:18:24.799
+or even if when you think something very large like Debian,
+
+00:18:24.800 --> 00:18:28.159
+which is a collection of packages.
+
+00:18:28.160 --> 00:18:31.479
+And it is still choice oriented,
+
+00:18:31.480 --> 00:18:55.399
+as opposed to solution oriented.
+
+00:18:55.400 --> 00:19:03.599
+Yeah. Are there any additional topics or questions?
+
+00:19:03.600 --> 00:19:11.159
+Otherwise, I'll just add a few additional concepts.
+
+00:19:11.160 --> 00:19:18.079
+So the two other points made throughout the presentations
+
+00:19:18.080 --> 00:19:28.759
+are that this statement about clear invalidity
+
+00:19:28.760 --> 00:19:30.719
+of the Western IPO regime.
+
+00:19:30.720 --> 00:19:34.399
+So throughout the first movement,
+
+00:19:34.400 --> 00:19:42.719
+we have been focusing on providing alternative licenses
+
+00:19:42.720 --> 00:19:49.319
+which coexist with the IPR system.
+
+00:19:49.320 --> 00:19:52.199
+And that is the practical thing to do.
+
+00:19:52.200 --> 00:19:55.879
+We are doing a jujitsu on IPR.
+
+00:19:55.880 --> 00:20:00.919
+We are saying that this is our license to it.
+
+00:20:00.920 --> 00:20:07.399
+But conceptually, there has been little discussion
+
+00:20:07.400 --> 00:20:14.319
+and also positioning on this basic question
+
+00:20:14.320 --> 00:20:17.479
+as to whether or not copyright
+
+00:20:17.480 --> 00:20:21.119
+and patents are valid or invalid.
+
+00:20:21.120 --> 00:20:26.639
+And what I am saying is that it is clear that they are invalid,
+
+00:20:26.640 --> 00:20:30.439
+particularly once you start looking at them
+
+00:20:30.440 --> 00:20:33.759
+with the lens of polyexistentials.
+
+00:20:33.760 --> 00:20:39.239
+And that the false movement
+
+00:20:39.240 --> 00:20:42.199
+really needs to combine these two,
+
+00:20:42.200 --> 00:20:47.359
+this notion of free software and open source licenses,
+
+00:20:47.360 --> 00:20:51.679
+and combined with the belief system
+
+00:20:51.680 --> 00:20:55.839
+that we are completely and utterly against
+
+00:20:55.840 --> 00:21:00.679
+the validity of the Western intellectual property rights regime.
+
+00:21:00.680 --> 00:21:05.399
+And I use the Western and the American occasionally,
+
+00:21:05.400 --> 00:21:12.479
+and the reason behind that is that in fact it is, they are Western.
+
+00:21:12.480 --> 00:21:16.479
+If you go to any other language, if you go to Farsi,
+
+00:21:16.480 --> 00:21:19.079
+if you go to Arabic, if you go to Chinese,
+
+00:21:19.080 --> 00:21:24.159
+if you go to Japanese, which are non-Western cultures,
+
+00:21:24.160 --> 00:21:28.639
+the concept of intellectual property,
+
+00:21:28.640 --> 00:21:33.159
+the words, the vocabulary of those
+
+00:21:33.160 --> 00:21:36.639
+combination of intellectual and property,
+
+00:21:36.640 --> 00:21:40.559
+did not exist anywhere in those cultures.
+
+00:21:40.560 --> 00:21:44.559
+It's only in the past, maybe 60, 70 years
+
+00:21:44.560 --> 00:21:52.279
+that they have been translated from the Western world and brought into it.
+
+00:21:52.280 --> 00:21:54.639
+So there is an inherent root
+
+00:21:54.640 --> 00:21:58.959
+into the intellectual property rights system,
+
+00:21:58.960 --> 00:22:02.679
+which goes to the Western culture.
+
+00:22:02.680 --> 00:22:08.439
+The second point that I have brought into
+
+00:22:08.440 --> 00:22:10.999
+this presentation and the previous ones
+
+00:22:11.000 --> 00:22:16.239
+is this question of, if we go with free software,
+
+00:22:16.240 --> 00:22:18.119
+if we go with open software,
+
+00:22:18.120 --> 00:22:22.159
+are we really creating the right labels?
+
+00:22:22.160 --> 00:22:25.679
+And my point is that no, neither of them,
+
+00:22:25.680 --> 00:22:29.479
+neither free software, nor open source
+
+00:22:29.480 --> 00:22:33.159
+are capturing really the essence
+
+00:22:33.160 --> 00:22:36.399
+of what we are trying to do.
+
+00:22:36.400 --> 00:22:41.439
+And I claim that that is in fact ethics and morality.
+
+00:22:41.440 --> 00:22:48.879
+And it is societal belief that if we reject
+
+00:22:48.880 --> 00:22:51.879
+intellectual property rights regime,
+
+00:22:51.880 --> 00:22:53.279
+what do we replace it with?
+
+00:22:53.280 --> 00:22:58.799
+And in my thinking is that a software developer
+
+00:22:58.800 --> 00:23:00.919
+does not get to choose
+
+00:23:00.920 --> 00:23:04.919
+what license goes with his or her software,
+
+00:23:04.920 --> 00:23:09.319
+and that the equivalent of a federal GPL
+
+00:23:09.320 --> 00:23:13.839
+is the default correct license
+
+00:23:13.840 --> 00:23:16.319
+to use for all of your software
+
+00:23:16.320 --> 00:23:21.039
+because it is the one that reflects the belief system
+
+00:23:21.040 --> 00:23:24.719
+that all software should be ethical software.
+
+00:23:24.720 --> 00:23:43.559
+Yeah, I'm looking at the Etherpad again and
+
+00:23:43.560 --> 00:23:48.679
+The question is about IP and AI.
+
+00:23:48.680 --> 00:23:54.359
+So yeah, over the past two years,
+
+00:23:54.360 --> 00:23:56.599
+something huge has happened.
+
+00:23:56.600 --> 00:24:04.919
+And what I am seeing in there as a solution
+
+00:24:04.920 --> 00:24:12.319
+is essentially comes down to a talk
+
+00:24:12.320 --> 00:24:16.839
+that was given maybe two years ago by someone at EmacsConf,
+
+00:24:16.840 --> 00:24:22.359
+and its label was attribution-based economics.
+
+00:24:22.360 --> 00:24:28.319
+In my thinking, intellectual property
+
+00:24:28.320 --> 00:24:29.839
+as a whole is invalid.
+
+00:24:29.840 --> 00:24:36.119
+But that means that through something like a federal GPL,
+
+00:24:36.120 --> 00:24:41.719
+you focus on attribution basing, proper attribution basing.
+
+00:24:41.720 --> 00:24:43.839
+If somebody has done some work,
+
+00:24:43.840 --> 00:24:48.599
+it should be clear, no matter what, that that work is his.
+
+00:24:48.600 --> 00:24:54.879
+And that we already, even prior to AI, we were seeing this.
+
+00:24:54.880 --> 00:24:59.399
+We were seeing large GitHub repos with hundreds of authors.
+
+00:24:59.400 --> 00:25:09.879
+And it was utterly unclear as to who would own this whole thing.
+
+00:25:09.880 --> 00:25:14.119
+And any piece of it is not of significance.
+
+00:25:14.120 --> 00:25:16.879
+What is of significance is the whole thing.
+
+00:25:16.880 --> 00:25:25.039
+So moving towards that attribution based economics is key.
+
+00:25:25.040 --> 00:25:27.599
+And then once we do that,
+
+00:25:27.600 --> 00:25:31.919
+and then we accept AI as a reality.
+
+00:25:31.920 --> 00:25:38.199
+AI should still take very seriously
+
+00:25:38.200 --> 00:25:43.999
+and conform to attribution-based economics.
+
+00:25:44.000 --> 00:25:47.879
+In other words, what is generated by the machine
+
+00:25:47.880 --> 00:25:51.279
+should not be claimed to be no one's
+
+00:25:51.280 --> 00:25:54.239
+or the machine owners, the AI owners.
+
+00:25:54.240 --> 00:25:56.879
+It should still clearly be attributed
+
+00:25:56.880 --> 00:26:03.039
+to the people who contributed in its creation.
+
+00:26:03.040 --> 00:26:06.959
+This all becomes very muddy, very clear,
+
+00:26:06.960 --> 00:26:11.919
+and I don't have a simple or clear answer to it.
+
+00:26:11.920 --> 00:26:16.079
+But the perimeters of the solution lie in
+
+00:26:16.080 --> 00:26:21.479
+rejection of intellectual property,
+
+00:26:21.480 --> 00:26:25.039
+replacement of the intellectual property
+
+00:26:25.040 --> 00:26:27.399
+with attribution-based economics,
+
+00:26:27.400 --> 00:26:31.199
+and restrictions on AI use
+
+00:26:31.200 --> 00:26:38.199
+of not properly attributed content.
+
+00:26:38.200 --> 00:26:50.239
+Yeah, I'd say that would be, it's a complicated topic
+
+00:26:50.240 --> 00:26:56.119
+and I would simply say I haven't figured it out at all.
+
+00:26:56.120 --> 00:27:03.759
+I just have a perimeter set of concepts
+
+00:27:03.760 --> 00:27:06.479
+that can be used to drive it.
+
+00:27:06.480 --> 00:27:20.679
+Are there any other questions? If there aren't any,
+
+00:27:20.680 --> 00:27:23.159
+I thank everybody again,
+
+00:27:23.160 --> 00:27:27.799
+and particularly the EmacsConf organizers and Sacha.
+
+00:27:27.800 --> 00:27:32.639
+And I look forward to continuing all of this next year.
+
+00:27:32.640 --> 00:27:39.079
+Unless there is any objection,
+
+00:27:39.080 --> 00:27:45.360
+I'll leave the session and close it. Thank you.
diff --git a/2025/captions/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--main--chapters.vtt b/2025/captions/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--main--chapters.vtt
new file mode 100644
index 00000000..a32fdf09
--- /dev/null
+++ b/2025/captions/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--main--chapters.vtt
@@ -0,0 +1,77 @@
+WEBVTT
+
+
+00:00:05.760 --> 00:01:20.079
+Introduction
+
+00:01:20.080 --> 00:02:10.319
+Scope: A complete multi-media content processing framework
+
+00:02:10.320 --> 00:03:02.419
+Prior art and similar art
+
+00:03:02.420 --> 00:03:57.159
+LaTeX-Beamer + Reveal.js with Blee and BISOS
+
+00:03:57.160 --> 00:05:12.519
+Blee-LCNT novel concepts
+
+00:05:12.520 --> 00:06:32.559
+Part of a bigger picture - part of a series
+
+00:06:32.560 --> 00:12:52.639
+Nature of polyexistentials
+
+00:12:52.640 --> 00:14:23.119
+Content processing - a ByStar/BISOS/Blee Capability Bundle (BCB)
+
+00:14:23.120 --> 00:14:31.279
+ByStar containment hierarchy and ByStar capability bundles
+
+00:14:31.280 --> 00:15:21.999
+Aggregated conviviality of ByStar capabilities
+
+00:15:22.000 --> 00:15:47.867
+Parts list: integrated components
+
+00:15:47.868 --> 00:18:45.719
+Resulting contents - output forms and formats
+
+00:18:45.720 --> 00:20:31.979
+reveal.js
+
+00:20:31.980 --> 00:21:33.479
+Generating the video
+
+00:21:33.480 --> 00:22:39.179
+A unified single input -- a sequencef of frames
+
+00:22:39.180 --> 00:23:16.199
+Abstractions to keep in mind
+
+00:23:16.200 --> 00:24:24.359
+Frame control types
+
+00:24:24.360 --> 00:26:25.199
+How outputs are generate from the inputs
+
+00:26:25.200 --> 00:27:46.479
+Context for unified source walkthrough
+
+00:27:46.480 --> 00:29:24.079
+One slide
+
+00:29:24.080 --> 00:31:05.799
+Dynamic blocks
+
+00:31:05.800 --> 00:33:42.279
+Internationalization - a non-Americanist perspective
+
+00:33:42.280 --> 00:35:07.719
+Autonomous self-publication and federated re-publications
+
+00:35:07.720 --> 00:36:02.559
+Ingredients of BISOS platforms and their progression
+
+00:36:02.560 --> 00:36:41.640
+Moving forward
diff --git a/2025/captions/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--main.vtt b/2025/captions/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--main.vtt
new file mode 100644
index 00000000..90f7b470
--- /dev/null
+++ b/2025/captions/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--main.vtt
@@ -0,0 +1,2058 @@
+WEBVTT captioned by mohsen
+
+NOTE Introduction
+
+00:00:05.760 --> 00:00:08.159
+Greetings. Salaam.
+
+00:00:08.160 --> 00:00:10.159
+This is Mohsen Banan.
+
+00:00:10.160 --> 00:00:12.839
+I am a software and internet engineer.
+
+00:00:12.840 --> 00:00:14.679
+The title of this presentation
+
+00:00:14.680 --> 00:00:18.839
+is "Blee-LCNT: An Emacs Centered
+
+00:00:18.840 --> 00:00:23.659
+Content Production and Self-Publication Framework".
+
+00:00:23.660 --> 00:00:25.559
+Blee stands for
+
+00:00:25.560 --> 00:00:29.279
+ByStar Libre-Halaal Emacs Environment.
+
+00:00:29.280 --> 00:00:31.799
+In last year's EmacsConf,
+
+00:00:31.800 --> 00:00:36.079
+I introduced Blee, BISOS and ByStar
+
+00:00:36.080 --> 00:00:39.439
+as concepts and as foundations.
+
+00:00:39.440 --> 00:00:41.079
+This year I want to focus
+
+00:00:41.080 --> 00:00:43.879
+on one concrete capability.
+
+00:00:43.880 --> 00:00:47.959
+Content Production and Self-Publication
+
+00:00:47.960 --> 00:00:54.119
+is a foundational Blee and BISOS Capability Bundle.
+
+00:00:54.120 --> 00:00:55.759
+Both this presentation
+
+00:00:55.760 --> 00:00:59.079
+and the Nature of Polyexistentials book
+
+00:00:59.080 --> 00:01:02.879
+were developed with Blee-LCNT.
+
+00:01:02.880 --> 00:01:06.759
+In this presentation I want to look at Emacs
+
+00:01:06.760 --> 00:01:08.519
+as a central ingredient
+
+00:01:08.520 --> 00:01:10.959
+for a usage environment
+
+00:01:10.960 --> 00:01:14.919
+that we can use to orchestrate production of
+
+00:01:14.920 --> 00:01:20.079
+quite fancy multi-media presentations.
+
+NOTE Scope: A complete multi-media content processing framework
+
+00:01:20.080 --> 00:01:23.079
+Let's consider two different scopes.
+
+00:01:23.080 --> 00:01:27.919
+First, the scope of Blee-LCNT Capabilities Bundle,
+
+00:01:27.920 --> 00:01:29.919
+which is that of a complete
+
+00:01:29.920 --> 00:01:32.599
+multi-media content authorship,
+
+00:01:32.600 --> 00:01:34.799
+generation, publication
+
+00:01:34.800 --> 00:01:37.639
+and distribution framework.
+
+00:01:37.640 --> 00:01:40.999
+That complete scope is presented in this slide
+
+00:01:41.000 --> 00:01:44.239
+and it spans both black ink
+
+00:01:44.240 --> 00:01:46.639
+and violet ink.
+
+00:01:46.640 --> 00:01:49.799
+Second, the scope of this presentation,
+
+00:01:49.800 --> 00:01:52.119
+which is more limited.
+
+00:01:52.120 --> 00:01:54.919
+In this presentation I confine myself
+
+00:01:54.920 --> 00:01:58.519
+to the bullets is violet ink.
+
+00:01:58.520 --> 00:02:01.159
+Here, I focus on presentation
+
+00:02:01.160 --> 00:02:03.599
+and video as content types
+
+00:02:03.600 --> 00:02:05.999
+and their authorship and generation
+
+00:02:06.000 --> 00:02:10.319
+and their federated re-publication.
+
+NOTE Prior art and similar art
+
+00:02:10.320 --> 00:02:12.559
+This is a common topic.
+
+00:02:12.560 --> 00:02:14.839
+It makes good sense for us to start with
+
+00:02:14.840 --> 00:02:19.079
+a review of prior art and similar art.
+
+00:02:19.080 --> 00:02:21.959
+I went through the past EmacsConf talks
+
+00:02:21.960 --> 00:02:23.919
+and found a good number of them
+
+00:02:23.920 --> 00:02:25.999
+that also deal with the topic
+
+00:02:26.000 --> 00:02:28.839
+of content generation.
+
+00:02:28.840 --> 00:02:30.319
+A few of these are included
+
+00:02:30.320 --> 00:02:33.359
+in black ink in this slide.
+
+00:02:33.360 --> 00:02:35.599
+Many of these have chosen the Babel,
+
+00:02:35.600 --> 00:02:40.719
+in other words Org-Mode+LaTeX as primary input.
+
+00:02:40.720 --> 00:02:43.599
+I prefer the inverse of that.
+
+00:02:43.600 --> 00:02:45.839
+I also looked for past talks
+
+00:02:45.840 --> 00:02:49.999
+which have used Reveal.js and LaTeX-Beamer.
+
+00:02:50.000 --> 00:02:53.399
+For example, Sacha's use of Reveal.js
+
+00:02:53.400 --> 00:02:56.959
+is shown in violet inK.
+
+00:02:56.960 --> 00:03:02.419
+And Ihor's use of Beamer is in teal ink.
+
+NOTE LaTeX-Beamer + Reveal.js with Blee and BISOS
+
+00:03:02.420 --> 00:03:05.399
+This presentation is about a combination
+
+00:03:05.400 --> 00:03:08.639
+of Reveal.js and LaTeX-Beamer.
+
+00:03:08.640 --> 00:03:10.599
+For those who may not be familiar
+
+00:03:10.600 --> 00:03:12.619
+with Beamer and Reveal,
+
+00:03:12.620 --> 00:03:14.799
+here is a quick intro.
+
+00:03:14.800 --> 00:03:19.039
+Among academics, LaTeX-Beamer is the go-to tool
+
+00:03:19.040 --> 00:03:22.159
+for producing presentations.
+
+00:03:22.160 --> 00:03:24.239
+Reveal.js is recognized
+
+00:03:24.240 --> 00:03:25.919
+as the best of breed
+
+00:03:25.920 --> 00:03:29.919
+for dispensing HTML slide decks.
+
+00:03:29.920 --> 00:03:32.439
+For many, Reveal and Beamer
+
+00:03:32.440 --> 00:03:35.959
+live in different universes.
+
+00:03:35.960 --> 00:03:38.679
+Beamer is pdf oriented
+
+00:03:38.680 --> 00:03:42.019
+and Reveal is html oriented.
+
+00:03:42.020 --> 00:03:44.519
+Combining two powerful tools
+
+00:03:44.520 --> 00:03:48.359
+makes for an even more powerful tool.
+
+00:03:48.360 --> 00:03:51.879
+This Blee-LCNT Presentations combines
+
+00:03:51.880 --> 00:03:57.159
+the best of LaTeX-Beamer with Reveal.js.
+
+NOTE Blee-LCNT novel concepts
+
+00:03:57.160 --> 00:04:00.679
+Beamer primarily functions as producer
+
+00:04:00.680 --> 00:04:03.099
+and Reveal functions as dispenser
+
+00:04:03.100 --> 00:04:05.579
+and multi-media enhancer.
+
+00:04:05.580 --> 00:04:08.299
+Here is how the combination works.
+
+00:04:08.300 --> 00:04:10.439
+LaTeX Beamer pdf result
+
+00:04:10.440 --> 00:04:13.839
+is dissected into named frame images
+
+00:04:13.840 --> 00:04:18.799
+which can then be inserted in Reveal.js.
+
+00:04:18.800 --> 00:04:21.239
+LaTeX Beamer frames can also be
+
+00:04:21.240 --> 00:04:24.799
+translated into html with HeVeA
+
+00:04:24.800 --> 00:04:28.999
+which can also be inserted in Reveal.js.
+
+00:04:29.000 --> 00:04:31.119
+Voice-overs for Beamer frames
+
+00:04:31.120 --> 00:04:34.039
+can be correlated to frame names
+
+00:04:34.040 --> 00:04:37.119
+and applied to image or html frames.
+
+00:04:37.120 --> 00:04:42.079
+Screen captures and image narrations as videos
+
+00:04:42.080 --> 00:04:44.359
+can be directly dispensed
+
+00:04:44.360 --> 00:04:46.379
+through Reveal.
+
+00:04:46.380 --> 00:04:49.439
+There are various additional novel concepts
+
+00:04:49.440 --> 00:04:50.599
+with regard to the way
+
+00:04:50.600 --> 00:04:54.559
+that we have integrated all of this together.
+
+00:04:54.560 --> 00:04:57.599
+Instead of Org-Mode+LaTeX,
+
+00:04:57.600 --> 00:05:00.999
+we do LaTeX+Org-Mode.
+
+00:05:01.000 --> 00:05:03.999
+Instead of Babel, we do COMEEGA,
+
+00:05:04.000 --> 00:05:05.999
+instead of the Literate model
+
+00:05:06.000 --> 00:05:08.839
+we introduce the Surrounded model.
+
+00:05:08.840 --> 00:05:10.839
+You shall see various examples
+
+00:05:10.840 --> 00:05:12.519
+of these shortly.
+
+NOTE Part of a bigger picture - part of a series
+
+00:05:12.520 --> 00:05:15.639
+All of this is part of a bigger picture.
+
+00:05:15.640 --> 00:05:17.619
+A much bigger picture.
+
+00:05:17.620 --> 00:05:23.599
+My talks at EmacsConf 2021, 2022
+
+00:05:23.600 --> 00:05:26.519
+and 2024 are related.
+
+00:05:26.520 --> 00:05:31.399
+This 2025 talk builds on those.
+
+00:05:31.400 --> 00:05:34.719
+Last year's talk "About Blee:
+
+00:05:34.720 --> 00:05:36.839
+enveloping our own autonomy
+
+00:05:36.840 --> 00:05:38.999
+directed digital ecosystem
+
+00:05:39.000 --> 00:05:42.199
+with Emacs" in particular,
+
+00:05:42.200 --> 00:05:44.979
+lays the foundations for this talk.
+
+00:05:44.980 --> 00:05:47.119
+If you have not seen that,
+
+00:05:47.120 --> 00:05:51.159
+it would make good sense to review it.
+
+00:05:51.160 --> 00:05:54.279
+In my previous talks I have been criticized
+
+00:05:54.280 --> 00:05:58.359
+of having a "prophetic" style.
+
+00:05:58.360 --> 00:06:02.059
+The scope of ByStar is lofty and immense.
+
+00:06:02.060 --> 00:06:04.879
+In many ways it is unbelievable.
+
+00:06:04.880 --> 00:06:09.139
+And EmacsConf talks are meant to be short.
+
+00:06:09.140 --> 00:06:11.839
+So, as a result, sometimes
+
+00:06:11.840 --> 00:06:13.959
+I end up being cryptic.
+
+00:06:13.960 --> 00:06:17.499
+Having accepted the "prophetic" criticism
+
+00:06:17.500 --> 00:06:19.399
+as legitimate,
+
+00:06:19.400 --> 00:06:23.599
+I now need to put a book on the table.
+
+00:06:23.600 --> 00:06:26.839
+With that book in place, moving forward,
+
+00:06:26.840 --> 00:06:29.339
+when needing to be cryptic,
+
+00:06:29.340 --> 00:06:32.559
+I shall cite Chapter and Verse.
+
+NOTE Nature of polyexistentials
+
+00:06:32.560 --> 00:06:34.879
+I am delighted to announce
+
+00:06:34.880 --> 00:06:37.559
+the availability of my recent book,
+
+00:06:37.560 --> 00:06:40.199
+"Nature of Polyexistentials".
+
+00:06:40.200 --> 00:06:42.959
+The full title of my book is:
+
+00:06:42.960 --> 00:06:45.039
+Nature Of Polyexistentials---
+
+00:06:45.040 --> 00:06:48.239
+Basis For Abolishment Of The Western
+
+00:06:48.240 --> 00:06:51.219
+Intellectual Property Rights Regime---
+
+00:06:51.220 --> 00:06:53.899
+And Introduction Of The Libre-Halaal
+
+00:06:53.900 --> 00:06:56.999
+ByStar Digital Ecosystem.
+
+00:06:57.000 --> 00:06:59.199
+Knowledge, know-how, uses of know-how,
+
+00:06:59.200 --> 00:07:02.879
+ideas, formulas, software and information
+
+00:07:02.880 --> 00:07:05.519
+are inherently non-scarce.
+
+00:07:05.520 --> 00:07:08.439
+They are *polyexistentials*.
+
+00:07:08.440 --> 00:07:10.239
+Unlike monoexistentials
+
+00:07:10.240 --> 00:07:12.259
+which exist in singular,
+
+00:07:12.260 --> 00:07:17.539
+polyexistentials naturally exist in multiples.
+
+00:07:17.540 --> 00:07:19.559
+What is abundant in nature
+
+00:07:19.560 --> 00:07:22.599
+is being made artificially scarce
+
+00:07:22.600 --> 00:07:25.399
+through man-made ownership rules
+
+00:07:25.400 --> 00:07:28.599
+called copyright and patents.
+
+00:07:28.600 --> 00:07:31.239
+These mistaken ownership rules,
+
+00:07:31.240 --> 00:07:34.959
+the so called Western IPR regime,
+
+00:07:34.960 --> 00:07:37.319
+has immense ramifications
+
+00:07:37.320 --> 00:07:38.839
+on the shape and the direction
+
+00:07:38.840 --> 00:07:42.619
+of the American Digital Ecosystem.
+
+00:07:42.620 --> 00:07:45.119
+It would be an understatement to say
+
+00:07:45.120 --> 00:07:47.779
+that the American Digital Ecosystem
+
+00:07:47.780 --> 00:07:50.599
+has put humanity in danger.
+
+00:07:50.600 --> 00:07:53.099
+Two parts of the book, in particular
+
+00:07:53.100 --> 00:07:55.679
+are of immediate relevance.
+
+00:07:55.680 --> 00:07:58.219
+Part III, the ethics layer,
+
+00:07:58.220 --> 00:08:01.119
+focuses on contours of cures.
+
+00:08:01.120 --> 00:08:02.839
+Having dismissed the Western
+
+00:08:02.840 --> 00:08:06.119
+intellectual property rights (IPR) regime
+
+00:08:06.120 --> 00:08:11.739
+as an erroneous governance model for polyexistentials,
+
+00:08:11.740 --> 00:08:14.319
+I propose the Libre-Halaal model
+
+00:08:14.320 --> 00:08:17.199
+of governance of polyexistentials
+
+00:08:17.200 --> 00:08:22.779
+towards facilitating conviviality of tools.
+
+00:08:22.780 --> 00:08:25.359
+Part IV, the engineering layer,
+
+00:08:25.360 --> 00:08:29.599
+introduces the Libre-Halaal ByStar Digital Ecosystem.
+
+00:08:29.600 --> 00:08:32.399
+as an ethical alternative
+
+00:08:32.400 --> 00:08:34.239
+to the prevailing proprietary
+
+00:08:34.240 --> 00:08:37.499
+American digital ecosystem.
+
+00:08:37.500 --> 00:08:40.479
+The book also provides additional details
+
+00:08:40.480 --> 00:08:42.919
+about the content generation
+
+00:08:42.920 --> 00:08:44.919
+and publication facilities
+
+00:08:44.920 --> 00:08:46.839
+that I am presenting here.
+
+00:08:46.840 --> 00:08:50.079
+And the book itself, as content,
+
+00:08:50.080 --> 00:08:53.439
+was generated and published
+
+00:08:53.440 --> 00:08:55.319
+using the facilities
+
+00:08:55.320 --> 00:08:57.239
+that I am presenting here.
+
+00:08:57.240 --> 00:08:59.199
+You can think of this book
+
+00:08:59.200 --> 00:09:01.159
+as being in two volumes.
+
+00:09:01.160 --> 00:09:05.919
+Our focus are Blee and BISOS in Volume II.
+
+00:09:05.920 --> 00:09:10.239
+Volume I deals with the general concept
+
+00:09:10.240 --> 00:09:13.879
+of polyexistence and invalidity
+
+00:09:13.880 --> 00:09:18.679
+of IPR and our terminoloy of Libre-Halaal---
+
+00:09:18.680 --> 00:09:23.519
+instead of the common but ill directed vocabulary
+
+00:09:23.520 --> 00:09:28.239
+of Free Software and Open-Source and FOSS.
+
+00:09:28.240 --> 00:09:31.239
+In Chapter 11, I introduce
+
+00:09:31.240 --> 00:09:34.759
+the very sensitive and potent vocabulary
+
+00:09:34.760 --> 00:09:37.719
+of Halaal and Libre-Halaal.
+
+00:09:37.720 --> 00:09:39.079
+The contents of this book
+
+00:09:39.080 --> 00:09:41.659
+belong to all of humanity
+
+00:09:41.660 --> 00:09:45.519
+and verbatim copying of it is unrestricted.
+
+00:09:45.520 --> 00:09:49.479
+If you want to read it, this book is yours.
+
+00:09:49.480 --> 00:09:51.839
+The "Nature of Polyexistentials" book
+
+00:09:51.840 --> 00:09:56.659
+is available both online and in print.
+
+00:09:56.660 --> 00:09:59.439
+This book is available as two editions.
+
+00:09:59.440 --> 00:10:03.819
+The US Edition and the International edition.
+
+00:10:03.820 --> 00:10:05.959
+The US Edition is written
+
+00:10:05.960 --> 00:10:10.079
+with a slightly milder Western unfriendly tone,
+
+00:10:10.080 --> 00:10:12.399
+while the International Edition
+
+00:10:12.400 --> 00:10:17.619
+includes additional original content in Farsi.
+
+00:10:17.620 --> 00:10:20.399
+I consider the International Edition
+
+00:10:20.400 --> 00:10:22.979
+to be the authoritative version.
+
+00:10:22.980 --> 00:10:25.319
+However, many readers in
+
+00:10:25.320 --> 00:10:27.319
+the US and Western countries
+
+00:10:27.320 --> 00:10:31.199
+may prefer the US Edition.
+
+00:10:31.200 --> 00:10:33.999
+I maintain separate Git repositories
+
+00:10:34.000 --> 00:10:36.039
+for each edition on GitHub:
+
+00:10:36.040 --> 00:10:42.839
+US Edition is at bxplpc/120033
+
+00:10:42.840 --> 00:10:51.419
+and International Edition: bxplpc/120074
+
+00:10:51.420 --> 00:10:53.679
+Cloning these repositories
+
+00:10:53.680 --> 00:10:56.399
+will give you access to the book
+
+00:10:56.400 --> 00:11:00.039
+in PDF format (suitable for both
+
+00:11:00.040 --> 00:11:04.039
+A4 and US Letter printing)
+
+00:11:04.040 --> 00:11:06.379
+and in EPUB format.
+
+00:11:06.380 --> 00:11:08.559
+Alternatively, the content
+
+00:11:08.560 --> 00:11:12.039
+can be downloaded directly from your browser
+
+00:11:12.040 --> 00:11:17.259
+without needing to clone the repositories.
+
+00:11:17.260 --> 00:11:19.079
+To ensure broader online
+
+00:11:19.080 --> 00:11:21.899
+availability and stability,
+
+00:11:21.900 --> 00:11:26.159
+I have also published the book on Zenodo,
+
+00:11:26.160 --> 00:11:31.779
+complete with a DOI (Digital Object Identifier).
+
+00:11:31.780 --> 00:11:34.439
+You can download both the A4
+
+00:11:34.440 --> 00:11:39.639
+and 8.5 x 11 PDFs from there as well.
+
+00:11:39.640 --> 00:11:44.119
+The book is also available in print on Amazon
+
+00:11:44.120 --> 00:11:46.239
+and at most major bookstores
+
+00:11:46.240 --> 00:11:49.379
+in the US and Western regions.
+
+00:11:49.380 --> 00:11:51.519
+The ISBNs for both editions
+
+00:11:51.520 --> 00:11:54.139
+are included in this slide.
+
+00:11:54.140 --> 00:11:56.319
+Additionally, I have published
+
+00:11:56.320 --> 00:12:00.719
+this book in Iran through Jangal Publishers.
+
+00:12:00.720 --> 00:12:03.079
+I did not write this book for profit.
+
+00:12:03.080 --> 00:12:05.359
+My aim is to share my thoughts
+
+00:12:05.360 --> 00:12:10.599
+and encourage readers to engage with my views and ideas.
+
+00:12:10.600 --> 00:12:12.499
+Your feedback is welcome,
+
+00:12:12.500 --> 00:12:14.119
+and I am genuinely interested
+
+00:12:14.120 --> 00:12:17.199
+in hearing your perspectives.
+
+00:12:17.200 --> 00:12:20.879
+In Western markets, I have priced the print edition
+
+00:12:20.880 --> 00:12:24.339
+somewhat above production costs.
+
+00:12:24.340 --> 00:12:26.639
+If you find value in the book
+
+00:12:26.640 --> 00:12:28.599
+and the ByStar project,
+
+00:12:28.600 --> 00:12:32.759
+purchasing a copy will help support my work.
+
+00:12:32.760 --> 00:12:37.459
+Thanks in advance for your support.
+
+00:12:37.460 --> 00:12:39.479
+And here are the same links
+
+00:12:39.480 --> 00:12:42.179
+as a native Reveal slide.
+
+00:12:42.180 --> 00:12:43.839
+If instead of a video,
+
+00:12:43.840 --> 00:12:47.759
+you are viewing this presentation as a Reveal web page,
+
+00:12:47.760 --> 00:12:52.639
+you can just click on the pointers and URLs.
+
+NOTE Content processing - a ByStar/BISOS/Blee Capability Bundle (BCB)
+
+00:12:52.640 --> 00:12:55.079
+Instead of the traditional model
+
+00:12:55.080 --> 00:12:59.559
+of giving you recipes in a DIY context
+
+00:12:59.560 --> 00:13:01.479
+towards the goal of creating
+
+00:13:01.480 --> 00:13:04.559
+content processing capabilities
+
+00:13:04.560 --> 00:13:07.659
+on top of what you may already have,
+
+00:13:07.660 --> 00:13:09.959
+I am doing the opposite.
+
+00:13:09.960 --> 00:13:15.159
+I am saying: take this whole BISOS and Blee thing,
+
+00:13:15.160 --> 00:13:17.559
+and in there you will also have
+
+00:13:17.560 --> 00:13:20.239
+the content processing capabilities
+
+00:13:20.240 --> 00:13:22.579
+that I am speaking of here.
+
+00:13:22.580 --> 00:13:24.919
+So, at the top level we have
+
+00:13:24.920 --> 00:13:27.519
+our own autonomy and privacy
+
+00:13:27.520 --> 00:13:30.199
+directed digital ecosystem,
+
+00:13:30.200 --> 00:13:32.839
+which in contrast to the center oriented
+
+00:13:32.840 --> 00:13:35.659
+American digital ecosystem,
+
+00:13:35.660 --> 00:13:38.479
+is edge oriented.
+
+00:13:38.480 --> 00:13:40.919
+We call it: "The Libre-Halaal
+
+00:13:40.920 --> 00:13:43.919
+ByStar Digital Ecosystem".
+
+00:13:43.920 --> 00:13:45.799
+All the systems in ByStar,
+
+00:13:45.800 --> 00:13:50.699
+run BISOS (By* Internet Services OS),
+
+00:13:50.700 --> 00:13:53.759
+which is a layer on top of Debian.
+
+00:13:53.760 --> 00:13:58.199
+The usage environment of ByStar and BISOS is Blee
+
+00:13:58.200 --> 00:14:01.579
+which is a layer on top of Emacs.
+
+00:14:01.580 --> 00:14:04.919
+With those in place, we then create
+
+00:14:04.920 --> 00:14:10.139
+a capability bundle called Blee-LCNT.
+
+00:14:10.140 --> 00:14:13.039
+So, when you buy into Blee and BISOS,
+
+00:14:13.040 --> 00:14:15.199
+you will naturally also get
+
+00:14:15.200 --> 00:14:18.719
+these content processing capabilities---
+
+00:14:18.720 --> 00:14:23.119
+without a need for any recipies or DIY effort.
+
+NOTE ByStar containment hierarchy and ByStar capability bundles
+
+00:14:23.120 --> 00:14:24.879
+If you were to look at the model
+
+00:14:24.880 --> 00:14:29.119
+that I introduced as containment hierarchies,
+
+00:14:29.120 --> 00:14:31.279
+it would look like this.
+
+NOTE Aggregated conviviality of ByStar capabilities
+
+00:14:31.280 --> 00:14:33.779
+We love Emacs and we love Unix
+
+00:14:33.780 --> 00:14:36.759
+because their design is convivial.
+
+00:14:36.760 --> 00:14:39.199
+By convivial, I am referring
+
+00:14:39.200 --> 00:14:40.759
+to Ivan Illich's concept
+
+00:14:40.760 --> 00:14:45.319
+and terminology of "Tools for Conviviality".
+
+00:14:45.320 --> 00:14:48.679
+It was first published in 1973.
+
+00:14:48.680 --> 00:14:50.959
+It's a must read.
+
+00:14:50.960 --> 00:14:52.639
+A goal of the design
+
+00:14:52.640 --> 00:14:54.799
+of the ByStar Digital Ecosystem
+
+00:14:54.800 --> 00:14:57.479
+is to enlarge the aggregated
+
+00:14:57.480 --> 00:15:01.719
+conviviality of its capabilities.
+
+00:15:01.720 --> 00:15:04.719
+What distinguishes Blee-LCNT
+
+00:15:04.720 --> 00:15:08.959
+from other content processing tools and frameworks,
+
+00:15:08.960 --> 00:15:12.439
+is our emphasis on enhancing
+
+00:15:12.440 --> 00:15:15.659
+the aggregated conviviality.
+
+00:15:15.660 --> 00:15:19.259
+These tools let you express yourself.
+
+00:15:19.260 --> 00:15:21.999
+They let you be in charge.
+
+NOTE Parts list: integrated components
+
+00:15:22.000 --> 00:15:24.499
+Here is our parts list.
+
+00:15:24.500 --> 00:15:25.839
+These are the components
+
+00:15:25.840 --> 00:15:27.959
+that we have chosen to bring together
+
+00:15:27.960 --> 00:15:32.779
+towards our goal of creating convivial tools.
+
+00:15:32.780 --> 00:15:36.039
+In this slide, we are using black ink
+
+00:15:36.040 --> 00:15:38.519
+to denote exisiting tools
+
+00:15:38.520 --> 00:15:41.339
+and we use violet ink
+
+00:15:41.340 --> 00:15:44.419
+to denote pieces that we have developed
+
+00:15:44.420 --> 00:15:47.100
+towards cohesive integration.
+
+00:15:46.560 --> 00:15:47.867
+[This] video,
+
+NOTE Resulting contents - output forms and formats
+
+00:15:47.868 --> 00:15:51.479
+the video is just one of the outputs.
+
+00:15:51.480 --> 00:15:54.499
+There are other outputs as well.
+
+00:15:54.500 --> 00:15:56.359
+In this figure, the outputs
+
+00:15:56.360 --> 00:15:58.859
+are shown in the top layer.
+
+00:15:58.860 --> 00:16:02.279
+Using this video as an example,
+
+00:16:02.280 --> 00:16:05.599
+this presentation's output also include
+
+00:16:05.600 --> 00:16:07.599
+the "Presentation Form"
+
+00:16:07.600 --> 00:16:10.999
+and the "Article-Presentation Form".
+
+00:16:11.000 --> 00:16:13.719
+Let's look at these more closely.
+
+00:16:13.720 --> 00:16:17.259
+For Presentations, there are 3 different forms.
+
+00:16:17.260 --> 00:16:19.559
+The Video Form, the Presentation From
+
+00:16:19.560 --> 00:16:22.819
+and the Article-Presentation Form.
+
+00:16:22.820 --> 00:16:27.439
+The Presentation Form produces both a pdf output
+
+00:16:27.440 --> 00:16:29.079
+and Reveal output.
+
+00:16:29.080 --> 00:16:32.879
+Next we will walkthrough some of the benefits
+
+00:16:32.880 --> 00:16:35.519
+that availability of these forms
+
+00:16:35.520 --> 00:16:38.099
+and formats provide.
+
+00:16:38.100 --> 00:16:41.959
+The video presentation that you are watching
+
+00:16:41.960 --> 00:16:44.599
+is just one of the outputs
+
+00:16:44.600 --> 00:16:48.479
+of the Blee-LCNT machinery.
+
+00:16:48.480 --> 00:16:52.679
+There are two PDF format outputs
+
+00:16:52.680 --> 00:16:56.439
+and two HTML outputs
+
+00:16:56.440 --> 00:16:58.859
+that are also quite useful.
+
+00:16:58.860 --> 00:17:02.119
+The primary output of Beamer
+
+00:17:02.120 --> 00:17:04.239
+is a set of slides
+
+00:17:04.240 --> 00:17:10.439
+that people use to give their talks with.
+
+00:17:10.440 --> 00:17:12.479
+Typically that's done live.
+
+00:17:12.480 --> 00:17:19.179
+In my case I dissect the images of each frame
+
+00:17:19.180 --> 00:17:21.639
+and do a voiceover on it
+
+00:17:21.640 --> 00:17:28.839
+and then dispense it through reveal.
+
+00:17:28.840 --> 00:17:33.379
+In a second, you will see that as well.
+
+00:17:33.380 --> 00:17:36.959
+This PDF output is very useful.
+
+00:17:36.960 --> 00:17:39.279
+You get the table of contents, of course,
+
+00:17:39.280 --> 00:17:42.207
+and in addition to that,
+
+00:17:42.208 --> 00:17:46.319
+Beamer generates navigations for you
+
+00:17:46.320 --> 00:17:49.599
+where on any part you get
+
+00:17:49.600 --> 00:17:51.839
+a small table of content as well.
+
+00:17:51.840 --> 00:17:57.119
+This is heavily used amongst academics,
+
+00:17:57.120 --> 00:18:00.959
+and it's a good output on its own,
+
+00:18:00.960 --> 00:18:03.319
+and I'm augmenting it
+
+00:18:03.320 --> 00:18:05.399
+in a variety of ways.
+
+00:18:05.400 --> 00:18:09.719
+In addition to the presentation PDF format,
+
+00:18:09.720 --> 00:18:15.359
+there is also an article-presentation PDF format
+
+00:18:15.360 --> 00:18:18.799
+which gives you the same content,
+
+00:18:18.800 --> 00:18:25.159
+but it gives it to you in a textual form
+
+00:18:25.160 --> 00:18:30.939
+with the table of content and the rest.
+
+00:18:30.940 --> 00:18:34.759
+This is a good form to use
+
+00:18:34.760 --> 00:18:39.919
+when you are giving, for example, class lectures,
+
+00:18:39.920 --> 00:18:45.719
+and the students often prefer this format.
+
+NOTE reveal.js
+
+00:18:45.720 --> 00:18:51.839
+Now for the HTML format output, the most relevant,
+
+00:18:51.840 --> 00:18:55.599
+of course, is the reveal itself.
+
+00:18:55.600 --> 00:19:05.679
+If you have not used reveal before,
+
+00:19:05.680 --> 00:19:10.559
+in my view, it's a HTML slide dispenser.
+
+00:19:10.560 --> 00:19:15.479
+I don't look at it as a presentation framework.
+
+00:19:15.480 --> 00:19:22.599
+I use, as you are seeing, we use Beamer to feed into it
+
+00:19:22.600 --> 00:19:25.759
+and we use it to dispense the information.
+
+00:19:25.760 --> 00:19:33.439
+It has all the typical navigation
+
+00:19:33.440 --> 00:19:39.959
+capabilities that you would expect,
+
+00:19:39.960 --> 00:19:44.319
+and most of what I have as slides are images,
+
+00:19:44.320 --> 00:19:48.239
+but occasionally, particularly when there is a need
+
+00:19:48.240 --> 00:19:52.999
+to provide pointers, HTML pointers,
+
+00:19:53.000 --> 00:20:01.439
+I then also include a textual output.
+
+00:20:01.440 --> 00:20:05.559
+This is also produced
+
+00:20:05.560 --> 00:20:09.839
+from the Beamer LaTeX source,
+
+00:20:09.840 --> 00:20:14.959
+but it's HTML through textual HTML,
+
+00:20:14.960 --> 00:20:19.019
+through HeVeA, not the image.
+
+00:20:19.020 --> 00:20:22.499
+You can... you get a table of contents.
+
+00:20:22.500 --> 00:20:24.574
+You can navigate
+
+00:20:24.575 --> 00:20:28.079
+and there are a whole lot of other features
+
+00:20:28.080 --> 00:20:31.979
+that reveal also provides.
+
+NOTE Generating the video
+
+00:20:31.980 --> 00:20:35.879
+So to generate the video,
+
+00:20:35.880 --> 00:20:40.980
+what I do is I come to
+
+00:20:40.981 --> 00:20:49.459
+the very beginning of the presentation.
+
+00:20:49.460 --> 00:20:51.519
+I turn on the screen capture recorder,
+
+00:20:51.520 --> 00:20:54.159
+and then I start playing
+
+00:20:54.160 --> 00:20:58.239
+the voiceover for each slide
+
+00:20:58.240 --> 00:21:02.519
+and at the very end, you get a video,
+
+00:21:02.520 --> 00:21:08.759
+but what you just did is you dispensed every frame,
+
+00:21:08.760 --> 00:21:11.279
+one at a time, through reveal.
+
+00:21:11.280 --> 00:21:15.319
+In addition to this HTML form,
+
+00:21:15.320 --> 00:21:22.239
+you also get an article presentation form of it,
+
+00:21:22.240 --> 00:21:24.159
+with a full table of contents
+
+00:21:24.160 --> 00:21:27.759
+and the videos are there, and the notes are there,
+
+00:21:27.760 --> 00:21:33.479
+and this is also quite useful.
+
+NOTE A unified single input -- a sequencef of frames
+
+00:21:33.480 --> 00:21:36.519
+Now, let's look at the one single input file
+
+00:21:36.520 --> 00:21:38.879
+that produced all of the outputs
+
+00:21:38.880 --> 00:21:39.879
+that we just saw.
+
+00:21:39.880 --> 00:21:43.079
+I have put both the input file
+
+00:21:43.080 --> 00:21:45.119
+and some of the output files
+
+00:21:45.120 --> 00:21:48.299
+for this presentation on Github.
+
+00:21:48.300 --> 00:21:49.839
+Here are some links
+
+00:21:49.840 --> 00:21:51.679
+to these repos and files.
+
+00:21:51.680 --> 00:21:54.679
+And here are the same links
+
+00:21:54.680 --> 00:21:57.119
+as a native Reveal slide.
+
+00:21:57.120 --> 00:21:59.879
+This figure gives us an overview
+
+00:21:59.880 --> 00:22:02.759
+of how one set of inputs
+
+00:22:02.760 --> 00:22:04.959
+encapsulted in a single file
+
+00:22:04.960 --> 00:22:08.759
+can produce all of the outputs that we saw.
+
+00:22:08.760 --> 00:22:11.439
+The main TeX file shown at the bottom
+
+00:22:11.440 --> 00:22:15.659
+is processed by both XeLaTeX and by HeVeA.
+
+00:22:15.660 --> 00:22:18.279
+That main TeX file, in addition
+
+00:22:18.280 --> 00:22:19.679
+to LaTeX syntax,
+
+00:22:19.680 --> 00:22:22.999
+also include org-mode constructs
+
+00:22:23.000 --> 00:22:27.039
+that facilitate addition of audio and video files.
+
+00:22:27.040 --> 00:22:34.879
+Later, I'll walkthrough the bodyPresArtEnFa.tex file
+
+00:22:34.880 --> 00:22:39.179
+that generated this very presentation with you.
+
+NOTE Abstractions to keep in mind
+
+00:22:39.180 --> 00:22:42.679
+When you construct that primary TeX file,
+
+00:22:42.680 --> 00:22:44.679
+there are several abstractions
+
+00:22:44.680 --> 00:22:46.899
+that you need to keep in mind.
+
+00:22:46.900 --> 00:22:49.119
+Is my presentation going to go
+
+00:22:49.120 --> 00:22:52.739
+from Left-To-Right or from Right-To-Left?
+
+00:22:52.740 --> 00:22:57.039
+Perso-Arabic presentations go from Right-To-Left.
+
+00:22:57.040 --> 00:22:59.679
+Another consideration is the types
+
+00:22:59.680 --> 00:23:03.119
+of forms of results that you want.
+
+00:23:03.120 --> 00:23:05.019
+Just the presentation
+
+00:23:05.020 --> 00:23:08.999
+or Article-Presentation as well?
+
+00:23:09.000 --> 00:23:10.879
+With those choices in place
+
+00:23:10.880 --> 00:23:13.399
+you can produce condition based text
+
+00:23:13.400 --> 00:23:16.199
+for each of your desired outputs.
+
+NOTE Frame control types
+
+00:23:16.200 --> 00:23:18.919
+Think of this video presentation
+
+00:23:18.920 --> 00:23:20.879
+as a sequence of frames.
+
+00:23:20.880 --> 00:23:26.119
+Each frame is controlled by an org-mode dynamic block.
+
+00:23:26.120 --> 00:23:29.039
+This table lists available dblocks
+
+00:23:29.040 --> 00:23:31.559
+from which you can choose.
+
+00:23:31.560 --> 00:23:34.039
+For example, this particular frame
+
+00:23:34.040 --> 00:23:34.839
+that we are watching
+
+00:23:34.840 --> 00:23:41.979
+is controlled by b:lcnt:pres:frame/derivedImage.
+
+00:23:41.980 --> 00:23:44.639
+Beamer creates a pdf file
+
+00:23:44.640 --> 00:23:47.879
+that includes the image of this slide.
+
+00:23:47.880 --> 00:23:51.459
+That image is then injected into Reveal.
+
+00:23:51.460 --> 00:23:55.359
+And in the end, a video of that image is produced
+
+00:23:55.360 --> 00:23:57.239
+with the narrations
+
+00:23:57.240 --> 00:23:59.259
+that I am uttering right now.
+
+00:23:59.260 --> 00:24:02.199
+All of this has similarly been applied
+
+00:24:02.200 --> 00:24:03.599
+to each and every frame
+
+00:24:03.600 --> 00:24:05.919
+that you have been watching.
+
+00:24:05.920 --> 00:24:08.399
+Similar to Frame Controls,
+
+00:24:08.400 --> 00:24:10.719
+there are org-mode dynamic blocks
+
+00:24:10.720 --> 00:24:13.519
+for "Frame Body Types".
+
+00:24:13.520 --> 00:24:15.839
+You can easily insert an image
+
+00:24:15.840 --> 00:24:19.639
+which is typically created by OpenOffice Draw
+
+00:24:19.640 --> 00:24:21.619
+into a frame.
+
+00:24:21.620 --> 00:24:24.359
+Same with say a screen capture video.
+
+NOTE How outputs are generate from the inputs
+
+00:24:24.360 --> 00:24:29.319
+Now that we have looked at the "Outputs" and the "Inputs",
+
+00:24:29.320 --> 00:24:31.679
+let's look at how the Outputs
+
+00:24:31.680 --> 00:24:35.919
+are generated from the Inputs.
+
+00:24:35.920 --> 00:24:39.399
+Let's bootstrap Raw-BISOS and Raw-Blee.
+
+00:24:39.400 --> 00:24:41.719
+Starting from scratch,
+
+00:24:41.720 --> 00:24:45.799
+get yourself a fresh copy of Debian 12.
+
+00:24:45.800 --> 00:24:52.719
+Then go to https://github.com/bxGenesis/start .
+
+00:24:52.720 --> 00:24:55.079
+The README.org file
+
+00:24:55.080 --> 00:24:57.119
+of that github repo
+
+00:24:57.120 --> 00:24:58.639
+is same as Chapter 18,
+
+00:24:58.640 --> 00:25:01.959
+"Engineering Adoption of BISOS and ByStar" of the book.
+
+00:25:01.960 --> 00:25:05.359
+We will next run "raw-bisos.sh",
+
+00:25:05.360 --> 00:25:09.959
+but prior to that, let's take a quick look.
+
+00:25:09.960 --> 00:25:14.759
+This bootstrap scripts will do a lot as root
+
+00:25:14.760 --> 00:25:16.479
+on your Fresh-Debian.
+
+00:25:16.480 --> 00:25:18.599
+It is best to first try it
+
+00:25:18.600 --> 00:25:21.179
+on a disposable VM.
+
+00:25:21.180 --> 00:25:27.159
+raw-bisos.sh adds the current debian user to sudoers.
+
+00:25:27.160 --> 00:25:30.399
+Then it installs pipx.
+
+00:25:30.400 --> 00:25:34.199
+And then with pipx it installs
+
+00:25:34.200 --> 00:25:37.999
+from PyPI bisos.provision.
+
+00:25:38.000 --> 00:25:43.279
+bisos.provision includes additional bash scripts
+
+00:25:43.280 --> 00:25:45.359
+that are then executed.
+
+00:25:45.360 --> 00:25:48.159
+Full installation involves
+
+00:25:48.160 --> 00:25:51.039
+setting up various accounts, groups,
+
+00:25:51.040 --> 00:25:53.279
+various directory hierarchies,
+
+00:25:53.280 --> 00:25:55.439
+lots of apt packages
+
+00:25:55.440 --> 00:25:57.979
+and lots of python packages
+
+00:25:57.980 --> 00:26:01.499
+from the bisos namespace.
+
+00:26:01.500 --> 00:26:03.879
+If you are ready, copy and paste
+
+00:26:03.880 --> 00:26:06.599
+this line and run it.
+
+00:26:06.600 --> 00:26:08.039
+You will be prompted
+
+00:26:08.040 --> 00:26:09.619
+for the root password.
+
+00:26:09.620 --> 00:26:11.279
+Then be patient.
+
+00:26:11.280 --> 00:26:12.559
+Full installation
+
+00:26:12.560 --> 00:26:14.519
+can take 15 minutes or so.
+
+00:26:14.520 --> 00:26:17.079
+The logs of this script
+
+00:26:17.080 --> 00:26:18.519
+are also captured
+
+00:26:18.520 --> 00:26:25.199
+in ~/raw-bisos-${dateTag}-log.org
+
+NOTE Context for unified source walkthrough
+
+00:26:25.200 --> 00:26:28.959
+Now that we have Raw-BISOS and Raw-Blee installed,
+
+00:26:28.960 --> 00:26:31.039
+we are ready to walk through
+
+00:26:31.040 --> 00:26:32.319
+the unified source
+
+00:26:32.320 --> 00:26:34.439
+of the very presentation
+
+00:26:34.440 --> 00:26:36.259
+that you are watching.
+
+00:26:36.260 --> 00:26:40.959
+The "bodyPresArtEnFa.tex" file
+
+00:26:40.960 --> 00:26:42.439
+that we will visit
+
+00:26:42.440 --> 00:26:45.059
+is in COMEEGA-LaTeX syntax
+
+00:26:45.060 --> 00:26:47.699
+with lots of org-mode dblocks
+
+00:26:47.700 --> 00:26:50.479
+which generate Beamer-LaTeX frames
+
+00:26:50.480 --> 00:26:54.139
+and conditioned LaTeX bodies.
+
+00:26:54.140 --> 00:26:55.599
+After the walkthrough,
+
+00:26:55.600 --> 00:27:00.359
+I'll describe dblocks and COMEEGA in more detail.
+
+00:27:00.360 --> 00:27:02.239
+At the tail end of the walkthrough,
+
+00:27:02.240 --> 00:27:05.319
+we will also go through the generation process
+
+00:27:05.320 --> 00:27:10.859
+which runs XeLaTeX and HeVeA and a lot more.
+
+00:27:10.860 --> 00:27:13.619
+Let's look at our input file.
+
+00:27:13.620 --> 00:27:17.019
+It's a LaTeX file in LaTeX mode,
+
+00:27:17.020 --> 00:27:24.279
+and it has org syntax org-mode included in it,
+
+00:27:24.280 --> 00:27:29.559
+and I can toggle between LaTeX and org-mode.
+
+00:27:29.560 --> 00:27:33.599
+So, now I'm gonna be in org-mode,
+
+00:27:33.600 --> 00:27:37.839
+and org-mode gives me everything
+
+00:27:37.840 --> 00:27:39.399
+that org has to offer,
+
+00:27:39.400 --> 00:27:46.479
+including a very convenient navigation framework.
+
+NOTE One slide
+
+00:27:46.480 --> 00:27:54.279
+Let's take one slide and take a look at how it was done.
+
+00:27:54.280 --> 00:27:58.679
+So I would come to this scope slide
+
+00:27:58.680 --> 00:28:03.999
+and while I am there, I'm going to click on N.
+
+00:28:04.000 --> 00:28:09.759
+N takes me to the native LaTeX form back,
+
+00:28:09.760 --> 00:28:16.359
+so that I'll be looking at it not in org, but in LaTeX.
+
+00:28:16.360 --> 00:28:22.906
+So we're back in LaTeX, and as you can see
+
+00:28:22.907 --> 00:28:25.999
+it uses a dynamic block
+
+00:28:26.000 --> 00:28:30.799
+starting with the comments and the BEGIN,
+
+00:28:30.800 --> 00:28:34.839
+and it uses a dynamic block
+
+00:28:34.840 --> 00:28:38.079
+named a framedDrive image,
+
+00:28:38.080 --> 00:28:45.399
+which means the content of this frame
+
+00:28:45.400 --> 00:28:50.439
+will be dispensed as an image, not as text,
+
+00:28:50.440 --> 00:28:56.899
+and it also automatically creates for me
+
+00:28:56.900 --> 00:29:00.439
+a name, a label, that can be used
+
+00:29:00.440 --> 00:29:05.119
+for voiceover augmentation.
+
+00:29:05.120 --> 00:29:08.119
+So a file in the audio directory
+
+00:29:08.120 --> 00:29:13.039
+called ScopeOfBleeLcnt.mp3
+
+00:29:13.040 --> 00:29:19.319
+is this audio that will come on top of this slide
+
+00:29:19.320 --> 00:29:24.079
+and then the rest is the LaTeX itself.
+
+NOTE Dynamic blocks
+
+00:29:24.080 --> 00:29:29.679
+The concept of "Org Dynamic Blocks"
+
+00:29:29.680 --> 00:29:31.519
+is very powerful.
+
+00:29:31.520 --> 00:29:33.599
+I think of them as universal
+
+00:29:33.600 --> 00:29:35.179
+visible macros.
+
+00:29:35.180 --> 00:29:41.359
+But, why should they be primarily used in just Org-Mode?
+
+00:29:41.360 --> 00:29:43.639
+I say, let's generalize them
+
+00:29:43.640 --> 00:29:46.059
+to "Emacs Dynamic Blocks".
+
+00:29:46.060 --> 00:29:49.959
+Have defaults for org-dblock-start-re
+
+00:29:49.960 --> 00:29:52.159
+in every relevant mode
+
+00:29:52.160 --> 00:29:55.099
+and use them everywhere.
+
+00:29:55.100 --> 00:29:56.319
+Blee does that.
+
+00:29:56.320 --> 00:30:01.719
+In COMEEGA-LaTeX, Dynamic Blocks create Frame Controls
+
+00:30:01.720 --> 00:30:05.519
+and insert Image and Video contents.
+
+00:30:05.520 --> 00:30:07.519
+Much of Blee and BISOS
+
+00:30:07.520 --> 00:30:09.959
+are implemented in COMEEGA.
+
+00:30:09.960 --> 00:30:13.599
+Almost all of our Elisp, Python, Bash
+
+00:30:13.600 --> 00:30:17.199
+and LaTeX work uses COMEEGA.
+
+00:30:17.200 --> 00:30:19.299
+COMEEGA stands for Collaborative
+
+00:30:19.300 --> 00:30:21.679
+Org-Mode
+
+00:30:21.680 --> 00:30:24.759
+Enhanced Emacs Generalized Authorship.
+
+00:30:24.760 --> 00:30:27.879
+It is the inverse of org-babel.
+
+00:30:27.880 --> 00:30:29.999
+COMEEGA adds org-mode
+
+00:30:30.000 --> 00:30:33.099
+to your programming mode.
+
+00:30:33.100 --> 00:30:35.079
+Full and proper use of COMEEGA,
+
+00:30:35.080 --> 00:30:38.299
+requires Polymode.
+
+00:30:38.300 --> 00:30:41.359
+Let's call that Poly-COMEEGA.
+
+00:30:41.360 --> 00:30:43.319
+But Emacs's Polymode
+
+00:30:43.320 --> 00:30:45.679
+is work-in-progress,
+
+00:30:45.680 --> 00:30:49.199
+particularly now with the new tree-sitter.
+
+00:30:49.200 --> 00:30:53.199
+So, in the interim, my usage of COMEEGA
+
+00:30:53.200 --> 00:30:55.919
+has been in the form of Toggle-COMEEGA.
+
+00:30:55.920 --> 00:30:59.479
+Where I manually switch between
+
+00:30:59.480 --> 00:31:02.359
+the programming-mode and org-mode.
+
+00:31:02.360 --> 00:31:04.199
+For me this has proved to be
+
+00:31:04.200 --> 00:31:05.799
+a fine interim solution.
+
+NOTE Internationalization - a non-Americanist perspective
+
+00:31:05.800 --> 00:31:09.679
+Naturally, content processing
+
+00:31:09.680 --> 00:31:11.239
+should be multi-lingual
+
+00:31:11.240 --> 00:31:14.159
+and internationalized.
+
+00:31:14.160 --> 00:31:15.839
+Let's look at that dimension.
+
+00:31:15.840 --> 00:31:21.019
+I am Iranian and much of what I write is in Farsi.
+
+00:31:21.020 --> 00:31:23.519
+Getting Perso-Arabic text right
+
+00:31:23.520 --> 00:31:25.519
+is often a challenge,
+
+00:31:25.520 --> 00:31:30.059
+as it involves Bi-Directional text (BIDI)
+
+00:31:30.060 --> 00:31:32.999
+and shaping of characters.
+
+00:31:33.000 --> 00:31:36.039
+In the context of our content generation
+
+00:31:36.040 --> 00:31:39.819
+these need to span all relevant tools,
+
+00:31:39.820 --> 00:31:41.759
+not just emacs.
+
+00:31:41.760 --> 00:31:43.759
+For emacs, I have created
+
+00:31:43.760 --> 00:31:46.239
+my own input method
+
+00:31:46.240 --> 00:31:49.419
+called farsi-transliterate-banan.
+
+00:31:49.420 --> 00:31:54.139
+My EmacsConf 2021 talk was about that.
+
+00:31:54.140 --> 00:31:57.199
+Now let's look at some examples
+
+00:31:57.200 --> 00:32:01.699
+and spice it up a bit with semantics.
+
+00:32:01.700 --> 00:32:05.279
+As an example of proper BIDI text,
+
+00:32:05.280 --> 00:32:07.899
+here is the orignal Farsi text
+
+00:32:07.900 --> 00:32:10.359
+along with English translation
+
+00:32:10.360 --> 00:32:12.519
+of Imam Khomeini's text
+
+00:32:12.520 --> 00:32:15.479
+with respect to invalidity
+
+00:32:15.480 --> 00:32:20.399
+of Western Intellectual Proprty Rights regime.
+
+00:32:20.400 --> 00:32:23.039
+And as another example
+
+00:32:23.040 --> 00:32:24.479
+of proper BIDI text,
+
+00:32:24.480 --> 00:32:29.919
+here is Ayatollah Mothari's take on Western IPR
+
+00:32:29.920 --> 00:32:35.159
+not being private property. Note that these predate
+
+00:32:35.160 --> 00:32:36.919
+by more than half a century
+
+00:32:36.920 --> 00:32:43.239
+Jack Dorsey and Elon Musk's tweets of April 11, 2025
+
+00:32:43.240 --> 00:32:47.199
+saying "Delete all IP law".
+
+00:32:47.200 --> 00:32:49.159
+This topic is too important
+
+00:32:49.160 --> 00:32:50.399
+and too sensitive
+
+00:32:50.400 --> 00:32:53.639
+to be left to American billionaires
+
+00:32:53.640 --> 00:32:55.639
+and their tweets.
+
+00:32:55.640 --> 00:32:58.199
+Let me again refer you to the logic
+
+00:32:58.200 --> 00:33:00.599
+of polyexistentials in my book.
+
+00:33:00.600 --> 00:33:06.359
+Chapter 14 of the book is dedicated to
+
+00:33:06.360 --> 00:33:08.579
+Ethics and ownership in Religions.
+
+00:33:08.580 --> 00:33:10.919
+With respect to my preference
+
+00:33:10.920 --> 00:33:12.719
+for Ethics over Freedom,
+
+00:33:12.720 --> 00:33:16.519
+let me refer you to Section 12.4
+
+00:33:16.520 --> 00:33:19.079
+"A Cynical Perspective
+
+00:33:19.080 --> 00:33:22.859
+on Freedom Orientation of Americans"
+
+00:33:22.860 --> 00:33:25.999
+in which I describe where the FOSS labels
+
+00:33:26.000 --> 00:33:29.039
+and the likes of Stallman, Raymond,
+
+00:33:29.040 --> 00:33:31.599
+Moglen and Lessig have gone wrong.
+
+00:33:31.600 --> 00:33:34.239
+If you are one of their followers,
+
+00:33:34.240 --> 00:33:36.599
+perhaps Chapter 12 is for you.
+
+00:33:36.600 --> 00:33:42.279
+My emphasis thus far has been on content generation.
+
+NOTE Autonomous self-publication and federated re-publications
+
+00:33:42.280 --> 00:33:44.999
+Let's very briefly also look at
+
+00:33:45.000 --> 00:33:47.159
+Autonomous Self-Publication
+
+00:33:47.160 --> 00:33:52.279
+and Federated Re-Publications of our content.
+
+00:33:52.280 --> 00:33:55.759
+From the very beginning the Debian folks
+
+00:33:55.760 --> 00:33:59.039
+understood the importance of "Universality"
+
+00:33:59.040 --> 00:34:03.359
+and coined the "Universal Debian" label.
+
+00:34:03.360 --> 00:34:05.919
+This means that we can base
+
+00:34:05.920 --> 00:34:08.619
+our entire digital ecosystem
+
+00:34:08.620 --> 00:34:13.499
+on just the Libre-Halaal Debian distro.
+
+00:34:13.500 --> 00:34:17.299
+And that is what we have done with ByStar.
+
+00:34:17.300 --> 00:34:20.039
+In ByStar, everything is based on
+
+00:34:20.040 --> 00:34:24.119
+just the Universal Debian everywhere.
+
+00:34:24.120 --> 00:34:26.999
+This has made our Usage Environment
+
+00:34:27.000 --> 00:34:31.319
+totally harmonious with our Service Environment
+
+00:34:31.320 --> 00:34:38.059
+allowing for very powerful software-service continuums.
+
+00:34:38.060 --> 00:34:41.479
+Of course, all of this is immediately applicable
+
+00:34:41.480 --> 00:34:46.019
+to our ByStar Content Bundle as well.
+
+00:34:46.020 --> 00:34:50.519
+Some have asked, why don't you also include Ubuntu?
+
+00:34:50.520 --> 00:34:53.679
+I think the opposite makes more sense.
+
+00:34:53.680 --> 00:34:56.699
+Ubuntu should converge with Debian.
+
+00:34:56.700 --> 00:34:59.639
+I tried to explain this to Mark Shuttleworth
+
+00:34:59.640 --> 00:35:02.479
+in an email a while back.
+
+00:35:02.480 --> 00:35:04.119
+I have included that email
+
+00:35:04.120 --> 00:35:07.719
+in Section 12.1.5.
+
+NOTE Ingredients of BISOS platforms and their progression
+
+00:35:07.720 --> 00:35:10.439
+In this presentation, we have stopped
+
+00:35:10.440 --> 00:35:13.159
+at the "Raw-BISOS" stage.
+
+00:35:13.160 --> 00:35:15.759
+We can further evolve Raw-BISOS
+
+00:35:15.760 --> 00:35:17.959
+and make it be "Sited"
+
+00:35:17.960 --> 00:35:22.239
+and provide autonomous publication services.
+
+00:35:22.240 --> 00:35:25.679
+But here by going through EmacsConf and youtube
+
+00:35:25.680 --> 00:35:30.959
+we are using the "Federated Re-Publications" model.
+
+00:35:30.960 --> 00:35:32.479
+Something this large,
+
+00:35:32.480 --> 00:35:35.479
+should be well documented.
+
+00:35:35.480 --> 00:35:37.079
+In Emacs, the way that
+
+00:35:37.080 --> 00:35:39.319
+we have been dealing with documentation
+
+00:35:39.320 --> 00:35:43.439
+and information retrieval is archaic.
+
+00:35:43.440 --> 00:35:46.079
+Man-pages, TeXInfo, Helpful-Mode
+
+00:35:46.080 --> 00:35:51.599
+and convention based Doc-Strings are old and limited.
+
+00:35:51.600 --> 00:35:55.279
+In BISOS and Blee, we use Blee-Panels
+
+00:35:55.280 --> 00:35:57.739
+for all kinds of documentation.
+
+00:35:57.740 --> 00:36:02.559
+Let me show you some examples.
+
+NOTE Moving forward
+
+00:36:02.560 --> 00:36:05.199
+So, what next?
+
+00:36:05.200 --> 00:36:10.599
+If Blee, BISOS, ByStar, Libre-Halaal, Polyexistentials
+
+00:36:10.600 --> 00:36:14.159
+and these Content Processing capabilities
+
+00:36:14.160 --> 00:36:16.639
+have piqued your interest,
+
+00:36:16.640 --> 00:36:19.379
+please feel welcome to contact me.
+
+00:36:19.380 --> 00:36:22.239
+These Emacs Conferences have proven
+
+00:36:22.240 --> 00:36:25.379
+to be very useful and productive.
+
+00:36:25.380 --> 00:36:27.199
+I look forward to your thoughts,
+
+00:36:27.200 --> 00:36:29.599
+feedback and questions.
+
+00:36:29.600 --> 00:36:35.359
+I want to thank all the EmacsConf 2025 Organizers
+
+00:36:35.360 --> 00:36:37.199
+for their great work,
+
+00:36:37.200 --> 00:36:41.640
+and Sacha in particular.
diff --git a/2025/captions/emacsconf-2025-bookclub-tapas--bookclub-tapas--maddie-sullivan--answers.vtt b/2025/captions/emacsconf-2025-bookclub-tapas--bookclub-tapas--maddie-sullivan--answers.vtt
new file mode 100644
index 00000000..feeab999
--- /dev/null
+++ b/2025/captions/emacsconf-2025-bookclub-tapas--bookclub-tapas--maddie-sullivan--answers.vtt
@@ -0,0 +1,2107 @@
+WEBVTT
+
+00:00.000 --> 00:07.879
+All right, take it away. Okay, am I, are we live?
+
+00:07.880 --> 00:12.759
+Yes, we're live. Oh man, holy moly.
+
+00:12.760 --> 00:19.359
+Oh, that's surreal. Hi everyone. Oh man.
+
+00:19.360 --> 00:26.319
+Ah, so excited to be here. So good to see all of you. Okay.
+
+00:26.320 --> 00:29.479
+So, should we just go ahead and get right into it?
+
+00:29.480 --> 00:38.479
+Yeah, let me, let me see here. So I have.
+
+00:38.480 --> 00:41.559
+Yeah, I see, I see some, I see some questions coming in.
+
+00:41.560 --> 00:47.079
+Perfect. I am going to show my share my screen real quick.
+
+00:47.080 --> 00:54.399
+We have currently currently we have
+
+00:54.400 --> 00:59.079
+a sort of a dross thing going.
+
+00:59.080 --> 01:04.519
+And so I just wanted to, while we're waiting
+
+01:04.520 --> 01:05.559
+for some more stuff to come in,
+
+01:05.560 --> 01:11.919
+I just wanted to sort of idle on this buffer here.
+
+01:11.920 --> 01:13.559
+If you increase your font size slightly,
+
+01:13.560 --> 01:15.959
+that might be even nicer.
+
+01:15.960 --> 01:38.159
+Yes, absolutely, gladly. Whoa, okay. There we go.
+
+01:38.160 --> 01:41.559
+All right, the first question
+
+01:41.560 --> 01:45.839
+was looking for examples of files in book club style.
+
+01:45.840 --> 01:48.799
+The person says, that seems to be related
+
+01:48.800 --> 01:49.679
+to what I've been doing,
+
+01:49.680 --> 01:54.239
+but coming from different influences. Yes, yes.
+
+01:54.240 --> 02:03.559
+So I included a, included a,
+
+02:03.560 --> 02:07.879
+Let me see, I'm just looking at the IRC here
+
+02:07.880 --> 02:16.719
+and smiling at all the people. So, yes, I provided a link.
+
+02:16.720 --> 02:19.039
+So I think that an excellent.
+
+02:19.040 --> 02:24.159
+So I have gone ahead and provided
+
+02:24.160 --> 02:26.959
+the get the link to the repo
+
+02:26.960 --> 02:30.479
+and I'm going to go ahead and post that again.
+
+02:30.480 --> 02:34.039
+So this should serve as a full example
+
+02:34.040 --> 02:39.519
+of what a just sort of standard book club file looks like.
+
+02:39.520 --> 02:41.559
+And if anyone has like specific questions
+
+02:41.560 --> 02:42.839
+about anything in particular,
+
+02:42.840 --> 02:47.799
+they would love to see my sort of like walkthrough
+
+02:47.800 --> 02:52.239
+and narrate like specifically, you know, any place in this file
+
+02:52.240 --> 02:55.319
+that they would like to see me sort of like go over live,
+
+02:55.320 --> 02:58.719
+I would be super happy to do that.
+
+02:58.720 --> 03:03.439
+So I have the whole, you know, more or less complete
+
+03:03.440 --> 03:10.799
+book club file for Squint pulled up here.
+
+03:10.800 --> 03:14.599
+Yeah, I have my vision laid out,
+
+03:14.600 --> 03:18.639
+which has my initial sort of goal.
+
+03:18.640 --> 03:22.879
+you know, the background and the vision sort of combined
+
+03:22.880 --> 03:28.559
+to lay out what my general sort of goal is.
+
+03:28.560 --> 03:31.319
+I just realized, let me kill my stream there.
+
+03:31.320 --> 03:39.079
+There we go. All right. There's another question.
+
+03:39.080 --> 03:41.439
+The product of a tapa like squint.org
+
+03:41.440 --> 03:44.359
+would be pure gold for an agent like Cloud Code.
+
+03:44.360 --> 03:47.519
+Have you experimented with providing an agent with a final output
+
+03:47.520 --> 03:50.919
+and letting it chew through to-dos?
+
+03:50.920 --> 03:53.319
+That would be a really excellent question.
+
+03:53.320 --> 03:54.919
+I actually just kind of recently
+
+03:54.920 --> 03:58.159
+got into Clawed in particular.
+
+03:58.160 --> 04:01.679
+I played quite a bit with GPT and
+
+04:01.680 --> 04:07.239
+and a lot of 8 billion parameter local models.
+
+04:07.240 --> 04:09.879
+And I was never super impressed.
+
+04:09.880 --> 04:12.999
+It always felt like I was just sort of wrangling
+
+04:13.000 --> 04:14.639
+to get it on the same page,
+
+04:14.640 --> 04:16.799
+whether as a result of sycophantism
+
+04:16.800 --> 04:19.399
+or really just not having enough parameters
+
+04:19.400 --> 04:21.919
+in order to understand the context of what's going on.
+
+04:21.920 --> 04:25.759
+Cloud has completely changed my perception
+
+04:25.760 --> 04:27.359
+of what an LLM can do or not.
+
+04:27.360 --> 04:31.119
+It makes autonomy not seem like a total fever train.
+
+04:31.120 --> 04:36.439
+I have definitely been curious about
+
+04:36.440 --> 04:39.639
+how an LLM would react to book club files.
+
+04:39.640 --> 04:41.719
+I think that, yeah, especially like,
+
+04:41.720 --> 04:43.799
+I've been daydreaming a little bit about,
+
+04:43.800 --> 04:49.919
+you know, having it generate scratch artifacts
+
+04:49.920 --> 04:54.799
+or suggesting, you know, changes to the format.
+
+04:54.800 --> 04:58.959
+It's like, yeah, the fact that
+
+04:58.960 --> 05:01.959
+this is all like, you know, like super,
+
+05:01.960 --> 05:05.239
+The goal and the hope for all of this
+
+05:05.240 --> 05:08.359
+is that we're being verbose about our thinking anyway.
+
+05:08.360 --> 05:12.199
+This is sort of how, by default,
+
+05:12.200 --> 05:14.159
+deep reasoning kind of works.
+
+05:14.160 --> 05:15.799
+I actually think that I totally agree.
+
+05:15.800 --> 05:17.559
+It would be a great fit.
+
+05:17.560 --> 05:19.599
+I have yet to personally do it,
+
+05:19.600 --> 05:21.279
+because I've always been just
+
+05:21.280 --> 05:23.319
+a little bit wary about, like, you know...
+
+05:23.320 --> 05:24.999
+Well, if I'm writing a program,
+
+05:25.000 --> 05:26.879
+I want to write it, you know?
+
+05:26.880 --> 05:29.239
+People often talk about, like, you know,
+
+05:29.240 --> 05:31.919
+oh, I just want to hand off
+
+05:31.920 --> 05:34.159
+the boring parts to Claude.
+
+05:34.160 --> 05:36.519
+But the thing is, if I'm writing an e-list,
+
+05:36.520 --> 05:39.479
+I find the whole thing to be kind of fun.
+
+05:39.480 --> 05:46.079
+be super, um, it would be super interested in, you know,
+
+05:46.080 --> 05:48.159
+just sort of as a point of exercise,
+
+05:48.160 --> 05:49.479
+like seeing what it's capable of.
+
+05:49.480 --> 05:51.479
+Because I think, I really do think
+
+05:51.480 --> 05:54.119
+that this would be kind of an ideal environment.
+
+05:54.120 --> 05:55.879
+It is kind of close to, you know,
+
+05:55.880 --> 05:59.039
+native-ish, how LLMs think.
+
+05:59.040 --> 06:01.399
+There's also, like, you know, of course,
+
+06:01.400 --> 06:03.479
+the, um, the privacy angle.
+
+06:03.480 --> 06:05.119
+I don't necessarily want to provide
+
+06:05.120 --> 06:09.319
+a whole bunch of code verbatim that I intend to GPL3.
+
+06:09.320 --> 06:15.719
+But I believe that Claude kind of has a better policy
+
+06:15.720 --> 06:20.639
+in terms of what does and does not become training data.
+
+06:20.640 --> 06:22.439
+I'll have to look into Claude in particular
+
+06:22.440 --> 06:24.599
+because I feel like that would be my target for it.
+
+06:24.600 --> 06:29.679
+But yeah, I think that's definitely onto something.
+
+06:29.680 --> 06:31.439
+I've definitely thought about this.
+
+06:31.440 --> 06:33.759
+I've definitely been really curious about this.
+
+06:33.760 --> 06:40.279
+Next question, do you think every Tapa
+
+06:40.280 --> 06:42.479
+should have its own book club file as well?
+
+06:42.480 --> 06:45.559
+Or would you rather keep just one book club file
+
+06:45.560 --> 06:46.559
+in the top of the project?
+
+06:46.560 --> 06:51.559
+So I think that I definitely would advise
+
+06:51.560 --> 06:54.879
+that each Tapa have its own book club file.
+
+06:54.880 --> 06:59.479
+The reason being is because I find that for me personally,
+
+06:59.480 --> 07:00.799
+the way that my brain kind of works
+
+07:00.800 --> 07:06.239
+is that out of sight, out of mind is very literal for me.
+
+07:06.240 --> 07:13.519
+I find that I find that. What am I thinking of?
+
+07:13.520 --> 07:19.959
+Sorry, I just saw that I got an email
+
+07:19.960 --> 07:22.799
+and I'm like, yeah, okay, cool.
+
+07:22.800 --> 07:27.319
+Case in point, right? We are at case in point, you know,
+
+07:27.320 --> 07:30.519
+out of sight, out of mind. Yes, no, absolutely.
+
+07:30.520 --> 07:35.799
+Yeah, no, exactly. I, um, I'm definitely quite ADHD
+
+07:35.800 --> 07:36.879
+and it works for my advantage
+
+07:36.880 --> 07:38.959
+because it provides all sorts of versatility.
+
+07:38.960 --> 07:42.439
+This is another great advantage of book club.
+
+07:42.440 --> 07:46.399
+If you have an ADHD mind like I do where, you know,
+
+07:46.400 --> 07:48.319
+You love jumping around and working on
+
+07:48.320 --> 07:51.519
+all sorts of different pieces simultaneously.
+
+07:51.520 --> 07:52.999
+You don't like sitting down
+
+07:53.000 --> 07:54.519
+and doing the same thing all day
+
+07:54.520 --> 07:57.239
+unless it really latches onto you.
+
+07:57.240 --> 07:59.759
+You know, you can pivot and you don't do anything.
+
+07:59.760 --> 08:02.559
+It really rewards the fact that you can pivot.
+
+08:02.560 --> 08:06.039
+So I find that to be really excellent.
+
+08:06.040 --> 08:08.359
+But to go back to the original a question,
+
+08:08.360 --> 08:11.519
+I would definitely recommend,
+
+08:11.520 --> 08:13.759
+at least in my circumstance,
+
+08:13.760 --> 08:15.679
+I find it to be incredibly useful
+
+08:15.680 --> 08:19.199
+to have each tapa be its own book club file
+
+08:19.200 --> 08:21.839
+rather than to have a unified file
+
+08:21.840 --> 08:26.599
+that holds all of your tapas. You can definitely do this,
+
+08:26.600 --> 08:28.959
+especially if you're using org
+
+08:28.960 --> 08:31.279
+to organize it hierarchically.
+
+08:31.280 --> 08:33.759
+It's just sort of a matter of preference
+
+08:33.760 --> 08:34.719
+and style at that point.
+
+08:34.720 --> 08:39.319
+So long as you're making a clear distinction between your tapas,
+
+08:39.320 --> 08:40.359
+that's the main thing
+
+08:40.360 --> 08:42.399
+that I would recommend no matter what,
+
+08:42.400 --> 08:44.919
+because the whole hope that I have is that
+
+08:44.920 --> 08:47.879
+you have a sort of separation of focus
+
+08:47.880 --> 08:49.599
+between the different you know,
+
+08:49.600 --> 08:54.719
+the different focuses of your different tapas,
+
+08:54.720 --> 08:57.959
+they really should ideally feel like different programs
+
+08:57.960 --> 09:00.119
+so that you're not, you know,
+
+09:00.120 --> 09:02.079
+getting over yourself, getting ahead of yourself.
+
+09:02.080 --> 09:05.079
+I think that, you know, on that basis,
+
+09:05.080 --> 09:07.479
+I would probably default to recommending
+
+09:07.480 --> 09:12.919
+that tapas have their own separate book club files,
+
+09:12.920 --> 09:15.679
+because ideally they should kind of be different
+
+09:15.680 --> 09:19.239
+sort of independent but related thoughts.
+
+09:19.240 --> 09:21.719
+But at the same time, I mean, like, you know,
+
+09:21.720 --> 09:23.559
+this is coming from someone
+
+09:23.560 --> 09:26.679
+who like has a billion small, like, you know,
+
+09:26.680 --> 09:28.679
+I had one giant org file for a long time
+
+09:28.680 --> 09:31.759
+and then realized that really didn't work for me.
+
+09:31.760 --> 09:34.239
+So now I have a billion tiny ones.
+
+09:34.240 --> 09:38.439
+So depending upon how you feel about, you know,
+
+09:38.440 --> 09:40.759
+should I have one really big org file
+
+09:40.760 --> 09:42.479
+or a bunch of really little org files?
+
+09:42.480 --> 09:44.639
+I feel like that more or less gives your answer.
+
+09:44.640 --> 09:48.359
+I think it's whatever works best for you.
+
+09:48.360 --> 09:51.439
+I know that far and away what works best for me
+
+09:51.440 --> 09:55.239
+is having separate files. No matter what, you should have
+
+09:55.240 --> 09:57.999
+separation of concept though.
+
+09:58.000 --> 10:00.639
+But however you do that is, you know,
+
+10:00.640 --> 10:01.919
+is best your judgment call.
+
+10:01.920 --> 10:11.399
+Next question, how do you build habits
+
+10:11.400 --> 10:13.119
+when it comes to documentation?
+
+10:13.120 --> 10:16.039
+I tend to produce lots of documentation in one go,
+
+10:16.040 --> 10:19.319
+then effectively forget to do it for long periods of time
+
+10:19.320 --> 10:20.599
+and end up playing catch up,
+
+10:20.600 --> 10:22.479
+which results in a loss of precision,
+
+10:22.480 --> 10:24.319
+as you alluded to in your talk.
+
+10:24.320 --> 10:26.519
+In a work setting, when something goes on fire
+
+10:26.520 --> 10:28.919
+or priorities change, it can be hard to keep discipline.
+
+10:28.920 --> 10:32.559
+Would love your thoughts. Thanks. Yes, absolutely.
+
+10:32.560 --> 10:35.719
+So what I tend to do is I don't
+
+10:35.720 --> 10:39.239
+So really, so far, what I've been doing
+
+10:39.240 --> 10:42.159
+is that I haven't been making a conscious priority
+
+10:42.160 --> 10:45.359
+of writing documentation at all.
+
+10:45.360 --> 10:48.039
+And if that sounds contradictory
+
+10:48.040 --> 10:51.759
+to the talk, that is correct.
+
+10:51.760 --> 10:54.999
+What I mean by this is that I go about
+
+10:55.000 --> 11:00.039
+is that when I'm writing code,
+
+11:00.040 --> 11:03.959
+when I'm writing, you know, drafts of my functions,
+
+11:03.960 --> 11:05.439
+the way that I tend to approach this,
+
+11:05.440 --> 11:07.279
+the way that I really emphasize the approach for it,
+
+11:07.280 --> 11:12.999
+is that I want to focus first and foremost
+
+11:13.000 --> 11:15.559
+on sort of like just writing down
+
+11:15.560 --> 11:17.519
+what my internal monologue is
+
+11:17.520 --> 11:23.519
+for what I'm doing for that pass working on the file.
+
+11:23.520 --> 11:25.919
+So my document takes ultimate
+
+11:25.920 --> 11:29.519
+Distance of dark is ultimately a property
+
+11:29.520 --> 11:32.359
+from the fact that I am writing
+
+11:32.360 --> 11:35.119
+what I'm doing as I'm doing it.
+
+11:35.120 --> 11:37.759
+And it's more or less just I'm just
+
+11:37.760 --> 11:39.759
+mashing out the stream of consciousness
+
+11:39.760 --> 11:43.359
+of what's going on inside my head as it's happening.
+
+11:43.360 --> 11:47.679
+So if we go down and we take a look at,
+
+11:47.680 --> 11:53.319
+yeah, so let's go ahead and take a look back at the macro.
+
+11:53.320 --> 11:56.359
+Yeah, really, this is kind of cheating,
+
+11:56.360 --> 12:01.119
+because mostly I would consider this to be self-documenting,
+
+12:01.120 --> 12:07.919
+but we all kind of know that
+
+12:07.920 --> 12:11.759
+that in and of itself is a slippery slope.
+
+12:11.760 --> 12:14.799
+That's not great. Because it's like, I could believe
+
+12:14.800 --> 12:17.719
+that this would be self-documenting
+
+12:17.720 --> 12:19.959
+if this was a three-liner.
+
+12:19.960 --> 12:24.719
+It is not. which, you know, also goes to show me
+
+12:24.720 --> 12:27.759
+that this needs to be splitting into its own topos.
+
+12:27.760 --> 12:32.239
+I intend to, you know, write a Tapa that's a sort of,
+
+12:32.240 --> 12:37.079
+that's a sort of like macro builder
+
+12:37.080 --> 12:40.559
+that automatically, you know, does the gensims for you.
+
+12:40.560 --> 12:41.959
+Something along the lines of
+
+12:41.960 --> 12:46.679
+what's the common Lisp macro for that called?
+
+12:46.680 --> 12:51.879
+It's like, There's some common list faculty
+
+12:51.880 --> 12:53.919
+that does automatic Jensen binding.
+
+12:53.920 --> 12:55.479
+I can't quite remember what it's called.
+
+12:55.480 --> 13:01.559
+A prior version of this talk had my live coding that,
+
+13:01.560 --> 13:04.319
+but that ended up sort of distracting
+
+13:04.320 --> 13:07.399
+from what I kind of wanted to nail out and focus on.
+
+13:07.400 --> 13:12.279
+But really kind of what I do is that,
+
+13:12.280 --> 13:19.159
+let me see here if I can find some sort of,
+
+13:19.160 --> 13:26.159
+Yeah, so I have in my research section
+
+13:26.160 --> 13:36.039
+sort of layout like what the quirks of all this sort of are.
+
+13:36.040 --> 13:39.839
+I think my development focuses contain
+
+13:39.840 --> 13:41.479
+a little bit of what could be ultimately
+
+13:41.480 --> 13:42.959
+considered to be documentation.
+
+13:42.960 --> 13:46.999
+Yeah, as I'm looking through all of this,
+
+13:47.000 --> 13:48.279
+I'm kind of realizing that like,
+
+13:48.280 --> 13:49.319
+you know, yeah, there's stuff
+
+13:49.320 --> 13:51.319
+that I'm into documentation here,
+
+13:51.320 --> 13:53.119
+but it's all a little ad hoc.
+
+13:53.120 --> 13:55.719
+You know, I would, in part,
+
+13:55.720 --> 13:57.319
+the design of this particular tapa
+
+13:57.320 --> 13:59.639
+is arguably not currently,
+
+13:59.640 --> 14:02.319
+but is going to be simple enough such that
+
+14:02.320 --> 14:04.679
+a doc string is sufficient for documentation.
+
+14:04.680 --> 14:06.999
+That is not the case currently.
+
+14:07.000 --> 14:12.279
+All right, next question is,
+
+14:12.280 --> 14:18.559
+how do you write examples and tests?
+
+14:18.560 --> 14:24.679
+I think that you mentioned that during the talk,
+
+14:24.680 --> 14:27.359
+but I couldn't find them on a very quick look
+
+14:27.360 --> 14:35.239
+at your org file in the Squint repo.
+
+14:35.240 --> 14:40.519
+My use of the word test was a little bit creative.
+
+14:40.520 --> 14:42.759
+It's my validation of the code that I've written.
+
+14:42.760 --> 14:45.479
+I more or less tend to do a,
+
+14:45.480 --> 14:50.079
+I tend to try and write really small functions
+
+14:50.080 --> 14:52.039
+and have really aggressive validation
+
+14:52.040 --> 14:55.799
+by just making sure that, like, you know,
+
+14:55.800 --> 14:59.919
+when I chain functions in the REPL,
+
+14:59.920 --> 15:03.199
+each step of them produces results
+
+15:03.200 --> 15:07.799
+that are really quite immediately and self-verifiably seen.
+
+15:07.800 --> 15:11.719
+Now, this isn't a great excuse to not use a test suite,
+
+15:11.720 --> 15:12.879
+but it's gotten me pretty far.
+
+15:12.880 --> 15:19.199
+What I mean by tests is that in the research sections,
+
+15:19.200 --> 15:26.279
+what I've done is, so I've created a sort of tested
+
+15:26.280 --> 15:29.399
+in the sense that I have created
+
+15:29.400 --> 15:33.759
+a really highly representative case
+
+15:33.760 --> 15:38.279
+of the way that the program ultimately ought to behave.
+
+15:38.280 --> 15:43.399
+In doing so, I created a sort of embedded domain language
+
+15:43.400 --> 15:46.359
+that I have termed animal houses.
+
+15:46.360 --> 15:50.999
+And Animal Houses is a sort of markup language
+
+15:51.000 --> 15:54.879
+that has rather simple rules.
+
+15:54.880 --> 16:00.879
+This here is the entirety of the spec for Animal Houses.
+
+16:00.880 --> 16:06.559
+Grammar or anything, but like, it is more or less.
+
+16:06.560 --> 16:08.839
+Breadth of everything that needs to be known
+
+16:08.840 --> 16:10.519
+about how animal houses works.
+
+16:10.520 --> 16:14.279
+And I've created animal houses because it is an ideal
+
+16:14.280 --> 16:18.479
+and incredibly simple circumstance.
+
+16:18.480 --> 16:22.679
+For how to go about as needed tests.
+
+16:22.680 --> 16:28.119
+For how squint ultimately ought to work in practice.
+
+16:28.120 --> 16:30.239
+So when I'm doing research,
+
+16:30.240 --> 16:34.759
+what I do is I take the text of animal houses,
+
+16:34.760 --> 16:39.879
+and I will go ahead and insert it into a buffer.
+
+16:39.880 --> 16:46.599
+And I'll just create an analog buffer.
+
+16:46.600 --> 16:48.639
+I just called it a woo.
+
+16:48.640 --> 16:55.959
+And then what I'll do is in my research sections, I will write
+
+16:55.960 --> 17:01.199
+Like I'll write like step-by-step
+
+17:01.200 --> 17:07.919
+like instructions on how to go about with a REPL-driven detection
+
+17:07.920 --> 17:15.119
+using animal houses. So it does squint pass label
+
+17:15.120 --> 17:16.799
+to width restriction correctly.
+
+17:16.800 --> 17:20.479
+The tests conducted here indicate that it does not.
+
+17:20.480 --> 17:25.839
+And then I link to a development focus.
+
+17:25.840 --> 17:29.959
+that um effectively acts as my bug report
+
+17:29.960 --> 17:33.999
+or sorry my uh you know my bug for um
+
+17:34.000 --> 17:37.599
+my bug listing for this particular problem
+
+17:37.600 --> 17:38.479
+that I've identified
+
+17:38.480 --> 17:41.439
+I lay out some criteria of how to
+
+17:41.440 --> 17:44.959
+go about using the REPL to um
+
+17:44.960 --> 17:47.079
+you know I identify what I believe
+
+17:47.080 --> 17:49.479
+is sort of like the quarantined area
+
+17:49.480 --> 17:50.639
+that I found for the bug
+
+17:50.640 --> 17:56.799
+and then test is that I will go about
+
+17:56.800 --> 17:59.279
+engaging with narration
+
+17:59.280 --> 18:03.479
+the step-by-step of how I produce
+
+18:03.480 --> 18:07.039
+the circumstances around the bug
+
+18:07.040 --> 18:10.559
+until I ultimately narrow all the way in
+
+18:10.560 --> 18:14.199
+and arrive at a conclusion.
+
+18:14.200 --> 18:16.879
+Something's going on with the screen share.
+
+18:16.880 --> 18:18.799
+I can see your screen but
+
+18:18.800 --> 18:23.239
+the server cannot see your screen updating.
+
+18:23.240 --> 18:28.439
+Sorry. Oh, no. Maybe you stop switching.
+
+18:28.440 --> 18:33.399
+Yeah, and then we just redo it again. Thank you.
+
+18:33.400 --> 18:36.039
+Yes, absolutely.
+
+18:36.040 --> 18:39.039
+Thanks to someone who noticed the buffer time,
+
+18:39.040 --> 18:42.919
+the time in the load line was not updating.
+
+18:42.920 --> 18:50.079
+Okay, let's try that again. Now it's updating. Gotcha.
+
+18:50.080 --> 18:54.999
+I hope that wasn't going on for too, too long.
+
+18:55.000 --> 18:57.279
+Hopefully what I was saying
+
+18:57.280 --> 19:02.559
+wasn't completely indecipherable. Let me see here.
+
+19:02.560 --> 19:06.959
+Yeah, this is the sample text for animal houses.
+
+19:06.960 --> 19:10.839
+This is the spec, not a formal grammar,
+
+19:10.840 --> 19:12.719
+but it is more or less the whole of the spec
+
+19:12.720 --> 19:16.399
+that you need to write a parser for animal houses.
+
+19:16.400 --> 19:19.359
+Most of the tests around Squint involve
+
+19:19.360 --> 19:23.999
+writing sort of ad hoc parsers for animal houses.
+
+19:24.000 --> 19:27.199
+Just when I have it in its own buffer, you know,
+
+19:27.200 --> 19:29.719
+I find more or less it's an excellent way
+
+19:29.720 --> 19:31.199
+of going about testing
+
+19:31.200 --> 19:36.359
+in an ad hoc sort of REPL driven manner.
+
+19:36.360 --> 19:39.879
+that I just sort of write regular
+
+19:39.880 --> 19:43.799
+that pull out the pieces of the sections of buffer
+
+19:43.800 --> 19:49.439
+that represent the different fields and data types
+
+19:49.440 --> 19:51.599
+in association with the animals
+
+19:51.600 --> 19:54.879
+and the houses to which they belong.
+
+19:54.880 --> 20:00.319
+And then when I am engaging in research,
+
+20:00.320 --> 20:03.559
+Um, you know, what, what my research section is,
+
+20:03.560 --> 20:05.079
+is I'm ultimately just sort of like
+
+20:05.080 --> 20:06.399
+laying out, like, you know,
+
+20:06.400 --> 20:10.239
+I'm sort of thinking to myself, is this working right?
+
+20:10.240 --> 20:11.319
+I feel like, like, I feel like
+
+20:11.320 --> 20:14.639
+there's something here, something in this area.
+
+20:14.640 --> 20:16.919
+And I'll, you know, ask myself, well,
+
+20:16.920 --> 20:20.199
+kind of like, what is it, you know, what am I looking for?
+
+20:20.200 --> 20:22.519
+And then nail down, how am I going
+
+20:22.520 --> 20:24.439
+to go about looking for it?
+
+20:24.440 --> 20:30.559
+The process of working with the REPL
+
+20:30.560 --> 20:34.319
+to sort of pin down like what exactly is going on
+
+20:34.320 --> 20:36.119
+and come to a conclusion
+
+20:36.120 --> 20:44.519
+on completely jumping out of order.
+
+20:44.520 --> 20:47.799
+Have you experimented in like whisper.el
+
+20:47.800 --> 20:49.759
+for doing speech to text
+
+20:49.760 --> 20:51.999
+as you think out loud into your book club?
+
+20:52.000 --> 20:56.799
+Now I am. I love that idea. That is awesome.
+
+20:56.800 --> 21:00.039
+Yeah, no, I love that.
+
+21:00.040 --> 21:04.839
+Even with, I only have a CPU, no GPU on mine,
+
+21:04.840 --> 21:08.039
+it does capture things a lot faster.
+
+21:08.040 --> 21:12.199
+And because it actually saves the recording to a WAV,
+
+21:12.200 --> 21:14.239
+or I guess you can configure it,
+
+21:14.240 --> 21:16.959
+in case it doesn't recognize something well,
+
+21:16.960 --> 21:20.799
+you can go back and check it. That's nice.
+
+21:20.800 --> 21:24.319
+I like that more than a straight speech-text thing.
+
+21:24.320 --> 21:27.439
+I've been mulling over the idea
+
+21:27.440 --> 21:30.959
+of having a keystroke save into a background buffer
+
+21:30.960 --> 21:33.399
+so that even when I'm looking at something else,
+
+21:33.400 --> 21:37.919
+I can dictate into my equivalent of the book club file.
+
+21:37.920 --> 21:41.759
+Yes, yes, yes, absolutely.
+
+21:41.760 --> 21:44.719
+So you can be scrolling through documentation on, like,
+
+21:44.720 --> 21:48.079
+you can be scrolling through documentation on one screen
+
+21:48.080 --> 21:49.799
+and you can be musing to yourself about,
+
+21:49.800 --> 21:52.479
+like, you know, is this supposed to work this way?
+
+21:52.480 --> 21:57.319
+Like, you know, like, what in terms of, like,
+
+21:57.320 --> 21:59.799
+you know, like, I see this function.
+
+21:59.800 --> 22:01.279
+It sounds like it's what I'm looking for.
+
+22:01.280 --> 22:03.399
+I don't know if the types are quite right.
+
+22:03.400 --> 22:05.679
+I don't understand. It's named what I'm looking for,
+
+22:05.680 --> 22:07.319
+but I don't know what it's taking in.
+
+22:07.320 --> 22:09.439
+You can reason through all of this.
+
+22:09.440 --> 22:10.599
+You're not even writing into the buffer
+
+22:10.600 --> 22:14.119
+that you're working with. That's actually so cool.
+
+22:14.120 --> 22:17.279
+Or you can type into the org capture process
+
+22:17.280 --> 22:21.039
+so that it can pick up an annotation automatically.
+
+22:21.040 --> 22:24.719
+Sorry, annotation is the link to the thing,
+
+22:24.720 --> 22:26.159
+whatever you're looking at.
+
+22:26.160 --> 22:32.999
+Oh, that's super cool. Yes. No, I actually really love it.
+
+22:33.000 --> 22:36.119
+I haven't, you know, hooking this all up to Org Capture at all.
+
+22:36.120 --> 22:58.639
+I actually really love that idea in of itself. Yeah.
+
+22:58.640 --> 23:01.119
+Or a capture will give you a lot of capture options.
+
+23:01.120 --> 23:03.159
+Like you can capture to your currently
+
+23:03.160 --> 23:11.039
+clocked in, uh, heading. So then it just files your note
+
+23:11.040 --> 23:12.919
+in the right place automatically.
+
+23:12.920 --> 23:19.199
+Absolutely. I love that. Let me see.
+
+23:19.200 --> 23:22.279
+I'm actually like writing a note to try that out.
+
+23:22.280 --> 23:25.159
+I'm definitely going to have to do that.
+
+23:25.160 --> 23:36.039
+Like the flexibility of that in particular sounds just perfect.
+
+23:36.040 --> 23:38.239
+I'd like to finish typing noises
+
+23:38.240 --> 23:39.679
+and then we can ask the next question
+
+23:39.680 --> 23:41.239
+for which there is one.
+
+23:41.240 --> 23:45.839
+The question is, what is the largest project
+
+23:45.840 --> 23:48.479
+in terms of team size you had the chance to consult
+
+23:48.480 --> 23:51.079
+and introduce the book club tapas concept?
+
+23:51.080 --> 23:53.199
+And what has been your experiences with these setups,
+
+23:53.200 --> 23:56.279
+implying larger applications or solutions
+
+23:56.280 --> 23:57.319
+that company is working on?
+
+23:57.320 --> 24:01.959
+So yeah, probably the largest application.
+
+24:01.960 --> 24:05.879
+So I have, It's been interesting.
+
+24:05.880 --> 24:08.879
+So in regards to this, the largest,
+
+24:08.880 --> 24:10.119
+I would say two people
+
+24:10.120 --> 24:12.719
+in a couple of different circumstance.
+
+24:12.720 --> 24:20.079
+So it's the pair of us working in a startup context.
+
+24:20.080 --> 24:24.439
+And then, you know, we both have
+
+24:24.440 --> 24:25.799
+like rather technical backgrounds.
+
+24:25.800 --> 24:27.479
+We can both more or less, you know,
+
+24:27.480 --> 24:33.639
+You know, sort of reason about particularly excite,
+
+24:33.640 --> 24:37.199
+especially as we've been building up top us is that,
+
+24:37.200 --> 24:39.559
+you know, well, we're both rather technical.
+
+24:39.560 --> 24:42.679
+You know, I'm definitely software engineering sort of end.
+
+24:42.680 --> 24:47.359
+And, you know, this partner is more.
+
+24:47.360 --> 24:50.999
+I mean, he's done all sorts of different engineering,
+
+24:51.000 --> 24:54.039
+but none of it in a, like, especially software context.
+
+24:54.040 --> 24:56.559
+So like, you know, but what's been
+
+24:56.560 --> 24:58.119
+really cool about that is that
+
+24:58.120 --> 24:59.599
+especially as we've built up top us
+
+24:59.600 --> 25:00.799
+and made clear distinctions
+
+25:00.800 --> 25:02.879
+about what they ought to do, you know,
+
+25:02.880 --> 25:04.599
+he doesn't have a ton of like really,
+
+25:04.600 --> 25:10.839
+he doesn't like experience like
+
+25:10.840 --> 25:12.479
+specifically in software engineering,
+
+25:12.480 --> 25:15.559
+but because we have it all laid out
+
+25:15.560 --> 25:17.399
+in this really flexible way,
+
+25:17.400 --> 25:20.199
+he's able to pick up the ball and like,
+
+25:20.200 --> 25:21.879
+you know, like he's able to
+
+25:21.880 --> 25:23.119
+take the ball and run with it.
+
+25:23.120 --> 25:25.279
+because it's all laid out
+
+25:25.280 --> 25:26.559
+in a way that's so intuitive.
+
+25:26.560 --> 25:28.719
+Like, you know, he's able to like
+
+25:28.720 --> 25:31.199
+collaborate with me and like,
+
+25:31.200 --> 25:33.279
+you know, like, you know, run off these ideas
+
+25:33.280 --> 25:34.919
+and like really go for it.
+
+25:34.920 --> 25:37.399
+Like, you know, almost as quickly as I can,
+
+25:37.400 --> 25:39.319
+just because we've set up a structure
+
+25:39.320 --> 25:42.159
+where like all of the different pieces
+
+25:42.160 --> 25:43.719
+have these really intuitive
+
+25:43.720 --> 25:46.399
+and intrinsic and straightforward roles.
+
+25:46.400 --> 25:47.839
+And that's, that's something
+
+25:47.840 --> 25:49.044
+that's really exciting in of itself
+
+25:49.045 --> 25:50.669
+that I didn't really go over in the talk.
+
+25:50.670 --> 25:54.359
+Like a managerial perspective,
+
+25:54.360 --> 25:56.919
+this is actually a really excellent way
+
+25:56.920 --> 26:01.199
+of understanding the whole context
+
+26:01.200 --> 26:04.799
+of like what the software stack looks like.
+
+26:04.800 --> 26:06.439
+Because it's like, you know,
+
+26:06.440 --> 26:09.119
+it makes it more intuitive for developers for sure,
+
+26:09.120 --> 26:10.719
+but it makes it more intuitive for everyone.
+
+26:10.720 --> 26:12.759
+You know, it's on that basis
+
+26:12.760 --> 26:14.839
+that I can't imagine clients
+
+26:14.840 --> 26:18.239
+like just a better way at this point.
+
+26:18.240 --> 26:22.239
+Um, that was that was the other circumstance
+
+26:22.240 --> 26:25.239
+where I have been working with a partner.
+
+26:25.240 --> 26:29.399
+This has been with, um, you know, I would be, uh.
+
+26:29.400 --> 26:31.919
+You know, sort of going back and forth
+
+26:31.920 --> 26:34.199
+with someone who had hired me.
+
+26:34.200 --> 26:40.159
+Um, to, uh, like, you know, to work on contract.
+
+26:40.160 --> 26:42.839
+And I would use this to sort of go
+
+26:42.840 --> 26:45.199
+over with them about, um.
+
+26:45.200 --> 26:51.239
+Sort of get a solid idea of scope and function,
+
+26:51.240 --> 26:57.199
+do pre-planning as we're going into more specifics
+
+26:57.200 --> 27:01.359
+on what the overall look for the project
+
+27:01.360 --> 27:03.479
+and how it ought to look
+
+27:03.480 --> 27:05.679
+and how it all ought to be laid out.
+
+27:05.680 --> 27:11.519
+So there's a lot of really exciting flexibility there
+
+27:11.520 --> 27:13.199
+that I think is really cool.
+
+27:13.200 --> 27:23.679
+People will, of course, be curious
+
+27:23.680 --> 27:25.919
+about the mechanics of that collaboration.
+
+27:25.920 --> 27:28.719
+Did you get other people using Emacs in org?
+
+27:28.720 --> 27:32.359
+Were you using version control? Did you try out CRDT?
+
+27:32.360 --> 27:33.239
+How did it work?
+
+27:33.240 --> 27:39.639
+So all of this so far has been over screen share,
+
+27:39.640 --> 27:43.679
+where I would be stepping through the buffer by hand.
+
+27:43.680 --> 27:47.839
+I would love to set up some sort of an environment
+
+27:47.840 --> 27:52.359
+where I could get you know, clients and partners,
+
+27:52.360 --> 27:53.359
+like, you know, really excited
+
+27:53.360 --> 27:54.799
+about using Emacs on org.
+
+27:54.800 --> 27:58.559
+But, you know, it's, it can be a little bit to ask,
+
+27:58.560 --> 28:00.119
+I would love to see if I can, like,
+
+28:00.120 --> 28:01.879
+put together some sort of a config that,
+
+28:01.880 --> 28:04.519
+like, sands off all of this and, you know,
+
+28:04.520 --> 28:08.079
+makes this this really, you know, you know,
+
+28:08.080 --> 28:13.759
+like safety-proof sort of intuitive environment
+
+28:13.760 --> 28:16.599
+just for CRDT in particular.
+
+28:16.600 --> 28:18.879
+I love the idea of like, you know,
+
+28:18.880 --> 28:21.479
+sort of like spawning CRDT
+
+28:21.480 --> 28:24.159
+so that like, you know, the two of us can,
+
+28:24.160 --> 28:27.559
+you know, type SPAC and ideas
+
+28:27.560 --> 28:31.239
+and sort of like draft together on, you know,
+
+28:31.240 --> 28:33.559
+especially like the glue code tapa
+
+28:33.560 --> 28:35.639
+for a larger software stack.
+
+28:35.640 --> 28:38.399
+like collaborating on that over CRDT
+
+28:38.400 --> 28:43.399
+or having folks step through Tapas and,
+
+28:43.400 --> 28:45.599
+you know, unfold them and like, you know,
+
+28:45.600 --> 28:46.719
+point to a particular thing.
+
+28:46.720 --> 28:49.159
+And it's like, you know, like, what's, what's this?
+
+28:49.160 --> 28:50.119
+What's the clock here?
+
+28:50.120 --> 28:52.239
+It looks like we're spending a lot of time
+
+28:52.240 --> 28:54.519
+and I would like to get a little bit clearer
+
+28:54.520 --> 28:56.319
+of an idea of like what exactly we're doing here.
+
+28:56.320 --> 29:01.319
+back up a little bit because the stream just disconnected
+
+29:01.320 --> 29:02.759
+and reconnected from the audio.
+
+29:02.760 --> 29:06.599
+So, please repeat just the last sentence.
+
+29:06.600 --> 29:11.959
+Yeah, yeah, for sure. Yeah, so I would like, you know,
+
+29:11.960 --> 29:18.239
+I love the idea of, yeah, like, you know, collaborating on,
+
+29:18.240 --> 29:20.519
+especially like on the glue code.
+
+29:20.520 --> 29:23.839
+tapa for a particular software stack, you know,
+
+29:23.840 --> 29:26.159
+having the both of us use CRDT
+
+29:26.160 --> 29:27.719
+to type into it simultaneously,
+
+29:27.720 --> 29:30.159
+I think that would be super cool.
+
+29:30.160 --> 29:33.679
+I also really love the idea of, you know,
+
+29:33.680 --> 29:38.159
+having a client or partner, you know,
+
+29:38.160 --> 29:41.479
+thumb through individual tapas in the stack.
+
+29:41.480 --> 29:45.639
+And then like, you know, like, look at and be like,
+
+29:45.640 --> 29:47.879
+well, we seem to have time on this recently,
+
+29:47.880 --> 29:51.759
+can you give me like, some clarification on like,
+
+29:51.760 --> 29:55.519
+you know, what, what this part is and how it's, you know,
+
+29:55.520 --> 29:57.559
+what it means for the whole
+
+29:57.560 --> 30:00.799
+and sort of like what, you know, what it represents
+
+30:00.800 --> 30:02.599
+in terms of how all of this is going to come together.
+
+30:02.600 --> 30:06.439
+I think that would be super cool. I love the idea of that.
+
+30:06.440 --> 30:11.679
+I would even consider like, you know, if not Emacs proper,
+
+30:11.680 --> 30:17.119
+I would love like, you know, maybe a, a web-based org parser.
+
+30:17.120 --> 30:21.399
+for, you know, even on just a read-only version
+
+30:21.400 --> 30:25.399
+of the document where, you know, clients and partners, yeah,
+
+30:25.400 --> 30:26.879
+just sort of thumb through with it
+
+30:26.880 --> 30:28.199
+and then chat with questions.
+
+30:28.200 --> 30:34.159
+Make the, you know, screen sharing for, you know,
+
+30:34.160 --> 30:36.519
+peer programming process
+
+30:36.520 --> 30:41.599
+just a little bit cleaner, you know, more intuitive on their end.
+
+30:41.600 --> 30:50.399
+I think that'd be super cool. I love these ideas.
+
+30:50.400 --> 30:55.002
+All right, theoretically, the big blue button is open.
+
+30:55.003 --> 30:57.002
+I think we've gotten to the end
+
+30:57.003 --> 31:00.294
+of the questions on the etherpad.
+
+31:00.295 --> 31:03.085
+If anyone else would like to join or ask,
+
+31:03.086 --> 31:04.840
+I'm gonna need a couple of minutes
+
+31:04.841 --> 31:06.359
+and then I can do closing remarks
+
+31:06.360 --> 31:07.999
+whenever people are ready.
+
+31:08.000 --> 31:14.479
+So I will meet now when people figure things out.
+
+31:14.480 --> 31:22.039
+I would also be super down if, you know,
+
+31:22.040 --> 31:25.319
+anyone was curious about hearing more
+
+31:25.320 --> 31:28.999
+about some of the projects
+
+31:29.000 --> 31:30.799
+that I was kind of rambling
+
+31:30.800 --> 31:34.679
+at the close of the talk,
+
+31:34.680 --> 31:36.479
+if people wanted to, you know,
+
+31:36.480 --> 31:39.359
+hear more about, um, some of my ideas
+
+31:39.360 --> 31:42.799
+in regards to, um, uh,
+
+31:42.800 --> 31:45.719
+what am I thinking at home with the, uh,
+
+31:45.720 --> 31:49.759
+What's it called?
+
+31:49.760 --> 31:53.479
+Yeah, yeah, just sort of the, you know,
+
+31:53.480 --> 31:55.439
+some of the funding for passion projects,
+
+31:55.440 --> 31:58.319
+I would be interested in laying out some of the ideas
+
+31:58.320 --> 31:59.959
+about how that could work mechanically.
+
+31:59.960 --> 32:02.559
+And I think that that would be, you know,
+
+32:02.560 --> 32:04.719
+really cool for the whole ecosystem,
+
+32:04.720 --> 32:06.719
+because I think that there are definitely,
+
+32:06.720 --> 32:09.639
+you know, things that we could bang out, you know,
+
+32:09.640 --> 32:12.919
+for getting kind of all sorts of people on that model.
+
+32:12.920 --> 32:14.519
+I think that it would be really cool
+
+32:14.520 --> 32:18.399
+to to having a, you know, funding model
+
+32:18.400 --> 32:20.239
+for things that are really worth using.
+
+32:20.240 --> 32:26.519
+um and developing um the other thing is like
+
+32:26.520 --> 32:28.199
+you know just sort of um yeah
+
+32:28.200 --> 32:31.559
+just rattling off specifics on things
+
+32:31.560 --> 32:34.960
+that people could potentially vote for uh on that
+
+32:34.961 --> 32:53.759
+and in terms of specific might want to work on
+
+32:53.760 --> 32:56.877
+All right, there's a question from IRC.
+
+32:56.878 --> 33:01.880
+Sorry, I just got that. Did you address that one already?
+
+33:01.881 --> 33:07.127
+Let's see. Where is it?
+
+33:07.128 --> 33:12.359
+I will copy it from IRC. Thank you.
+
+33:12.360 --> 33:14.319
+Gotcha. Into the past.
+
+33:14.320 --> 33:27.759
+Perfect, perfect, perfect.
+
+33:27.760 --> 33:30.679
+Let me read the question out loud so it's in the recording.
+
+33:30.680 --> 33:33.719
+I guess a major pro is it has less friction
+
+33:33.720 --> 33:35.759
+as people can do a lot,
+
+33:35.760 --> 33:39.039
+maybe not everything in book lab tapas files
+
+33:39.040 --> 33:42.639
+versus having to log into gazillions of different systems,
+
+33:42.640 --> 33:45.199
+each one of them keeping a portion of the information.
+
+33:45.200 --> 33:47.359
+Did I get that viewing point right
+
+33:47.360 --> 33:49.479
+from your elaboration of the collaboration
+
+33:49.480 --> 33:52.159
+between you and your teammates?
+
+33:52.160 --> 33:55.439
+Yes. No, that's absolutely right.
+
+33:55.440 --> 33:57.999
+um because yeah like really
+
+33:58.000 --> 34:00.519
+my hope is that we can you know
+
+34:00.520 --> 34:03.239
+there's there's a lot of conflict into that
+
+34:03.240 --> 34:13.359
+we assume that a lot of um pieces of tooling
+
+34:13.360 --> 34:14.559
+and the separation between them
+
+34:14.560 --> 34:16.439
+is really sort of a necessary evil
+
+34:16.440 --> 34:19.239
+i think that you know having a system
+
+34:19.240 --> 34:21.519
+where really the complexity
+
+34:21.520 --> 34:25.719
+of engaging in all of the information
+
+34:25.720 --> 34:29.119
+relevant to the program.
+
+34:29.120 --> 34:30.319
+If it's in a format
+
+34:30.320 --> 34:31.799
+where you can just email it back and forth,
+
+34:31.800 --> 34:33.199
+break off pieces of it,
+
+34:33.200 --> 34:35.119
+work with those individually,
+
+34:35.120 --> 34:38.759
+I think that that's something
+
+34:38.760 --> 34:40.279
+that's incredibly rewarding.
+
+34:40.280 --> 34:42.639
+Something that just dawned on me
+
+34:42.640 --> 34:44.439
+that I wanted to mention
+
+34:44.440 --> 34:46.959
+that I've been daydreaming about
+
+34:46.960 --> 34:49.399
+is that in a circumstance
+
+34:49.400 --> 34:52.079
+where you have multiple developers,
+
+34:52.080 --> 34:53.879
+like, you know, across a larger team,
+
+34:53.880 --> 34:57.359
+working on a book club tapas driven project,
+
+34:57.360 --> 35:02.559
+what you can do is have, you know,
+
+35:02.560 --> 35:04.559
+a clear, you can lay out your goal,
+
+35:04.560 --> 35:08.439
+and then start splitting it to tapas from that point,
+
+35:08.440 --> 35:11.839
+and then assign each teammate their own tapa,
+
+35:11.840 --> 35:13.279
+which becomes their baby.
+
+35:13.280 --> 35:15.639
+And I really love the idea
+
+35:15.640 --> 35:17.479
+of people being able to, you know,
+
+35:17.480 --> 35:20.319
+have an idea of an interface
+
+35:20.320 --> 35:21.599
+about how all of these are
+
+35:21.600 --> 35:22.719
+ultimately come back together,
+
+35:22.720 --> 35:26.639
+but people have their own like agency
+
+35:26.640 --> 35:27.919
+over their own code base,
+
+35:27.920 --> 35:29.119
+despite the fact that they're
+
+35:29.120 --> 35:30.479
+working in collaboration.
+
+35:30.480 --> 35:32.719
+I think that it can be incredibly motivating
+
+35:32.720 --> 35:36.079
+for a team to, you know, have each person
+
+35:36.080 --> 35:38.039
+in charge of their own project,
+
+35:38.040 --> 35:39.839
+but of course it's all ultimately
+
+35:39.840 --> 35:41.319
+going to the same code base.
+
+35:41.320 --> 35:43.199
+So, you know, I think that,
+
+35:43.200 --> 35:45.479
+that a pursuit of beauty
+
+35:45.480 --> 35:48.519
+is this really solid motivator
+
+35:48.520 --> 35:50.839
+in terms of how people perceive
+
+35:50.840 --> 35:53.959
+the merits of their efforts
+
+35:53.960 --> 35:56.479
+and how that lights a fire under them
+
+35:56.480 --> 35:58.999
+to continue and keep going and dig deep
+
+35:59.000 --> 36:00.559
+when things get frustrating.
+
+36:00.560 --> 36:02.799
+When you have a personal stake
+
+36:02.800 --> 36:03.399
+in your project,
+
+36:03.400 --> 36:06.479
+I think that that's a really excellent time
+
+36:06.480 --> 36:08.599
+to really push and move forward on it.
+
+36:08.600 --> 36:10.559
+And people having ownership
+
+36:10.560 --> 36:12.719
+over this idea of their specific tapa
+
+36:12.720 --> 36:14.999
+could be a really cool way to do that
+
+36:15.000 --> 36:15.759
+in a team setting.
+
+36:15.760 --> 36:19.999
+But I pivoted off a little bit.
+
+36:20.000 --> 36:24.559
+So yes, but I absolutely did that.
+
+36:24.560 --> 36:28.599
+You know, that having a simplistic format
+
+36:28.600 --> 36:29.999
+for your information
+
+36:30.000 --> 36:33.319
+is a really solid way to have
+
+36:33.320 --> 36:36.319
+collaboration be frictionless.
+
+36:36.320 --> 36:38.719
+You have one source of information
+
+36:38.720 --> 36:40.799
+and you don't have to drown in your tooling.
+
+36:40.800 --> 36:51.839
+All right, I think you've addressed
+
+36:51.840 --> 36:54.919
+all the questions on the etherpad.
+
+36:54.920 --> 36:56.799
+And as you said, people can email you,
+
+36:56.800 --> 36:58.439
+even though the website looks like
+
+36:58.440 --> 37:00.479
+it's still not quite there yet,
+
+37:00.480 --> 37:03.719
+people can email you or ask questions
+
+37:03.720 --> 37:05.039
+to the etherpad afterwards.
+
+37:05.040 --> 37:07.439
+Is there anything else that
+
+37:07.440 --> 37:11.039
+you'd like to share or shall I wrap up,
+
+37:11.040 --> 37:13.279
+introduce myself doing the closing remarks
+
+37:13.280 --> 37:16.959
+and then try to do the closing remarks?
+
+37:16.960 --> 37:18.839
+Yes, so I have two last thoughts.
+
+37:18.840 --> 37:21.439
+Yes, no, I did just want to confirm
+
+37:21.440 --> 37:24.319
+that my email is completely working.
+
+37:24.320 --> 37:27.199
+If you want to keep up to date
+
+37:27.200 --> 37:29.399
+with the stuff that I'm working on,
+
+37:29.400 --> 37:35.239
+please shoot and I will, you know, at your request,
+
+37:35.240 --> 37:38.119
+I will add you to a mailing list.
+
+37:38.120 --> 37:40.479
+which will have intermittent updates.
+
+37:40.480 --> 37:42.919
+I'm not going to send you spam,
+
+37:42.920 --> 37:47.279
+but it will have updates for what I'm working on,
+
+37:47.280 --> 37:48.599
+what this all looks like,
+
+37:48.600 --> 37:52.359
+and just context for the different things
+
+37:52.360 --> 37:53.119
+that I'm working on.
+
+37:53.120 --> 37:56.999
+My website will be going up soon enough.
+
+37:57.000 --> 38:01.119
+I just got a little distracted because I'm like,
+
+38:01.120 --> 38:05.239
+oh, I'm just gonna spin up a Gux server
+
+38:05.240 --> 38:06.999
+and I'm gonna make it super cool
+
+38:07.000 --> 38:09.119
+when really I just need just
+
+38:09.120 --> 38:12.439
+Debian and Apache real quick, just something.
+
+38:12.440 --> 38:16.679
+So the website will be going up. It's just not up yet.
+
+38:16.680 --> 38:19.959
+And the very last thing is that
+
+38:19.960 --> 38:22.959
+I would really like to thank everyone
+
+38:22.960 --> 38:27.199
+that helped me to get here. I would like to thank you know,
+
+38:27.200 --> 38:32.319
+all of my, you know, I would like to thank my fiance.
+
+38:32.320 --> 38:34.519
+I would like to thank all of my friends.
+
+38:34.520 --> 38:39.359
+I would like to thank my, you know,
+
+38:39.360 --> 38:42.119
+my mentor and business partner, Sharon.
+
+38:42.120 --> 38:45.119
+I would like to thank Tracy, my therapist.
+
+38:45.120 --> 38:48.279
+I would like to thank my parents.
+
+38:48.280 --> 38:53.279
+I invited people to come watch this thing,
+
+38:53.280 --> 38:55.279
+and I would like to thank all of them.
+
+38:55.280 --> 38:57.919
+I would like to thank everyone
+
+38:57.920 --> 39:02.439
+who was planning on coming to this event anyway.
+
+39:02.440 --> 39:06.359
+The Emacs community is incredible, incredibly encouraging,
+
+39:06.360 --> 39:09.399
+incredibly kind, incredibly smart and talented.
+
+39:09.400 --> 39:13.719
+Y'all make Emacs what it is, and it is so cool.
+
+39:13.720 --> 39:15.919
+I would like to thank you, Satya.
+
+39:15.920 --> 39:19.559
+I would like to thank all of the organizers
+
+39:19.560 --> 39:20.879
+that made this possible.
+
+39:20.880 --> 39:25.719
+This thing is the coolest and it was, this was so cool.
diff --git a/2025/captions/emacsconf-2025-bookclub-tapas--bookclub-tapas--maddie-sullivan--main--chapters.vtt b/2025/captions/emacsconf-2025-bookclub-tapas--bookclub-tapas--maddie-sullivan--main--chapters.vtt
new file mode 100644
index 00000000..0975552c
--- /dev/null
+++ b/2025/captions/emacsconf-2025-bookclub-tapas--bookclub-tapas--maddie-sullivan--main--chapters.vtt
@@ -0,0 +1,68 @@
+WEBVTT
+
+
+00:00:00.620 --> 00:00:29.679
+Introduction
+
+00:00:29.680 --> 00:01:03.839
+Hi, I'm Maddie!
+
+00:01:03.840 --> 00:02:00.519
+Bookclub Tapas
+
+00:02:00.520 --> 00:02:40.299
+Bookclub
+
+00:02:40.300 --> 00:03:55.799
+Too many hats, too many roles
+
+00:03:55.800 --> 00:05:24.779
+Narrativiation
+
+00:05:24.780 --> 00:05:47.659
+My starter kit - My stock, off the shelf suggestions
+
+00:05:47.660 --> 00:05:58.979
+Now what?
+
+00:05:58.980 --> 00:06:23.459
+Our overarching goal
+
+00:06:23.460 --> 00:07:05.119
+Our development focuses
+
+00:07:05.120 --> 00:08:37.979
+The rest of the headings
+
+00:08:37.980 --> 00:10:55.479
+Conversationality
+
+00:10:55.480 --> 00:13:01.919
+Ad-hoc means lesricsf tion
+
+00:13:01.920 --> 00:14:48.439
+Gratis documentation
+
+00:14:48.440 --> 00:16:21.499
+Keeping the thread of your intention
+
+00:16:21.500 --> 00:17:25.239
+Bookclub is becoming too much
+
+00:17:25.240 --> 00:18:22.839
+Introducing Tapas
+
+00:18:22.840 --> 00:22:25.179
+What are Tapas, what are Tapas not?
+
+00:22:25.180 --> 00:25:52.339
+Tapas are maybe best illustrated by example
+
+00:25:52.340 --> 00:28:36.099
+Introducing Squint
+
+00:28:36.100 --> 00:29:08.159
+What else does Bookclub Tapas do?
+
+00:29:08.160 --> 00:31:25.800
+Let's work together
diff --git a/2025/captions/emacsconf-2025-bookclub-tapas--bookclub-tapas--maddie-sullivan--main.vtt b/2025/captions/emacsconf-2025-bookclub-tapas--bookclub-tapas--maddie-sullivan--main.vtt
new file mode 100644
index 00000000..8e06a734
--- /dev/null
+++ b/2025/captions/emacsconf-2025-bookclub-tapas--bookclub-tapas--maddie-sullivan--main.vtt
@@ -0,0 +1,2400 @@
+WEBVTT captioned by sachac
+
+NOTE Introduction
+
+00:00:00.620 --> 00:00:04.159
+Alright! Hi everyone! Happy EmacsConf!
+
+00:00:04.160 --> 00:00:07.079
+I´m so excited to be here.
+
+00:00:07.080 --> 00:00:07.959
+It's surreal to be part
+
+00:00:07.960 --> 00:00:09.439
+of the conference itself,
+
+00:00:09.440 --> 00:00:11.239
+in addition to being a viewer.
+
+00:00:11.240 --> 00:00:13.879
+EmacsConf is like Christmas to me,
+
+00:00:13.880 --> 00:00:18.159
+and I'm so excited when it comes around every year.
+
+00:00:18.160 --> 00:00:21.119
+Today, my talk is on a programming methodology
+
+00:00:21.120 --> 00:00:23.999
+that I've created, discovered, stumbled upon.
+
+00:00:24.000 --> 00:00:26.439
+I call it "Bookclub Tapas."
+
+00:00:26.440 --> 00:00:27.759
+Before we get into that,
+
+00:00:27.760 --> 00:00:29.679
+let me introduce myself.
+
+NOTE Hi, I'm Maddie!
+
+00:00:29.680 --> 00:00:32.119
+My name is Maddie Sullivan,
+
+00:00:32.120 --> 00:00:34.239
+and my pronouns are she/her.
+
+00:00:34.240 --> 00:00:36.719
+I go by the handle ElephantErgonomics,
+
+00:00:36.720 --> 00:00:41.119
+which is shortened down to ElephantErgo in the IRC.
+
+00:00:41.120 --> 00:00:43.079
+You can reach out to me after the talk
+
+00:00:43.080 --> 00:00:44.959
+for questions, comments,
+
+00:00:44.960 --> 00:00:47.759
+or just to say hello by reaching out
+
+00:00:47.760 --> 00:00:56.959
+to hello@ElephantErgonomics.com.
+
+00:00:56.960 --> 00:01:00.039
+So this software development strategy I found,
+
+00:01:00.040 --> 00:01:03.839
+it's inspired by literate programming and Agile.
+
+NOTE Bookclub Tapas
+
+00:01:03.840 --> 00:01:07.439
+So what exactly is Bookclub Tapas?
+
+00:01:07.440 --> 00:01:09.439
+Bookclub Tapas is a conversation
+
+00:01:09.440 --> 00:01:11.719
+that you have with yourself.
+
+00:01:11.720 --> 00:01:13.479
+It's a log and a ledger,
+
+00:01:13.480 --> 00:01:16.519
+of your intentions, hopes, dreams,
+
+00:01:16.520 --> 00:01:17.119
+and what you've learned
+
+00:01:17.120 --> 00:01:19.719
+over the course of development.
+
+00:01:19.720 --> 00:01:22.799
+Bookclub Tapas is an oracle
+
+00:01:22.800 --> 00:01:24.199
+you can consult
+
+00:01:24.200 --> 00:01:26.933
+about the state of, and the strategies behind,
+
+00:01:26.934 --> 00:01:29.559
+your development process.
+
+00:01:29.560 --> 00:01:33.479
+Bookclub Tapas is also a peer programming partner
+
+00:01:33.480 --> 00:01:37.119
+that helps you decide how to best put forward your efforts
+
+00:01:37.120 --> 00:01:38.439
+and how to best pull together
+
+00:01:38.440 --> 00:01:40.399
+what you're working on.
+
+00:01:40.400 --> 00:01:42.719
+Bookclub Tapas will also help you to understand
+
+00:01:42.720 --> 00:01:45.239
+how to tailor scope to your needs,
+
+00:01:45.240 --> 00:01:46.759
+and how to have the best parts
+
+00:01:46.760 --> 00:01:49.399
+of your program shine through clearly.
+
+00:01:49.400 --> 00:01:52.159
+Bookclub Tapas consists of two parts:
+
+00:01:52.160 --> 00:01:54.159
+Bookclub and Tapas,
+
+00:01:54.160 --> 00:02:00.519
+but what does that mean exactly, though?
+
+NOTE Bookclub
+
+00:02:00.520 --> 00:02:04.719
+Bookclub is a reverse literate development strategy.
+
+00:02:04.720 --> 00:02:07.479
+Bookclub is a time for you to write,
+
+00:02:07.480 --> 00:02:08.959
+and then read and reflect.
+
+00:02:08.960 --> 00:02:10.719
+It's like a Bookclub,
+
+00:02:10.720 --> 00:02:12.559
+but it's for your program.
+
+00:02:12.560 --> 00:02:15.239
+Instead of inserting narration into your code
+
+00:02:15.240 --> 00:02:17.799
+to narrativize what you are accomplishing,
+
+00:02:17.800 --> 00:02:20.759
+you are instead inserting snippets of code
+
+00:02:20.760 --> 00:02:23.799
+into your narrative to make it come alive.
+
+00:02:23.800 --> 00:02:27.999
+So, what are we narrativizing, exactly?
+
+00:02:28.000 --> 00:02:30.439
+What sort of story are we telling?
+
+00:02:30.440 --> 00:02:34.319
+Bookclub is the story of you, your program,
+
+00:02:34.320 --> 00:02:36.559
+and how your efforts are allowing your program
+
+00:02:36.560 --> 00:02:40.299
+to come into the world.
+
+NOTE Too many hats, too many roles
+
+00:02:40.300 --> 00:02:42.479
+Software developers naturally have to wear
+
+00:02:42.480 --> 00:02:43.679
+a lot of different hats,
+
+00:02:43.680 --> 00:02:46.479
+and take on a lot of different roles.
+
+00:02:46.480 --> 00:02:48.159
+We apply ourselves into a lot
+
+00:02:48.160 --> 00:02:50.079
+of different contexts.
+
+00:02:50.080 --> 00:02:53.067
+We do research, interface architecture design,
+
+00:02:53.068 --> 00:02:55.519
+mathematics, philosophy.
+
+00:02:55.520 --> 00:02:57.679
+We take in the world around us
+
+00:02:57.680 --> 00:03:00.359
+and then build abstractions to model it.
+
+00:03:00.360 --> 00:03:01.799
+We translate the abstract
+
+00:03:01.800 --> 00:03:03.079
+into the concrete,
+
+00:03:03.080 --> 00:03:04.667
+and then when we're trying to teach software
+
+00:03:04.668 --> 00:03:05.999
+how to be "smart,"
+
+00:03:06.000 --> 00:03:07.239
+we translate the concrete
+
+00:03:07.240 --> 00:03:09.639
+back into the abstract.
+
+00:03:09.640 --> 00:03:11.500
+I can't help but feel like so much of
+
+00:03:11.501 --> 00:03:13.759
+what makes software development difficult
+
+00:03:13.760 --> 00:03:14.919
+is just trying to remember
+
+00:03:14.920 --> 00:03:16.679
+and keep track of everything.
+
+00:03:16.680 --> 00:03:17.959
+We have to try and remember
+
+00:03:17.960 --> 00:03:21.259
+so many different implementation details.
+
+00:03:21.260 --> 00:03:24.159
+We have to remember how our own code works,
+
+00:03:24.160 --> 00:03:26.679
+how the API of our dependencies work,
+
+00:03:26.680 --> 00:03:29.479
+how relevant real-world constraints behave,
+
+00:03:29.480 --> 00:03:31.319
+what the standards lay out,
+
+00:03:31.320 --> 00:03:34.159
+and how our data structures are laid out.
+
+00:03:34.160 --> 00:03:35.079
+When we're debugging,
+
+00:03:35.080 --> 00:03:37.519
+we simultaneously have to remember
+
+00:03:37.520 --> 00:03:40.239
+how our program is currently behaving,
+
+00:03:40.240 --> 00:03:42.679
+as well as how the program ought to behave
+
+00:03:42.680 --> 00:03:43.719
+in order to get a chance
+
+00:03:43.720 --> 00:03:46.039
+to reconcile that gap.
+
+00:03:46.040 --> 00:03:47.999
+It's honestly all way too much.
+
+00:03:48.000 --> 00:03:50.239
+We need a ledger of what we're actually doing
+
+00:03:50.240 --> 00:03:55.799
+in order to stay sane.
+
+NOTE Narrativiation
+
+00:03:55.800 --> 00:03:57.333
+I think a really effective way to
+
+00:03:57.334 --> 00:03:59.599
+make sense of things that are complex and important
+
+00:03:59.600 --> 00:04:01.039
+is to narrativize them,
+
+00:04:01.040 --> 00:04:02.839
+to turn them into stories.
+
+00:04:02.840 --> 00:04:06.039
+This is a strategy that humans have been using for a long time.
+
+00:04:06.040 --> 00:04:08.559
+Mnemonic devices, metaphors,
+
+00:04:08.560 --> 00:04:09.759
+and drawing parallels
+
+00:04:09.760 --> 00:04:12.199
+are all different ways of doing just this.
+
+00:04:12.200 --> 00:04:14.799
+Telling stories helps us to understand
+
+00:04:14.800 --> 00:04:16.359
+things that are big and complex
+
+00:04:16.360 --> 00:04:19.119
+by grounding them in our own experience
+
+00:04:19.120 --> 00:04:23.979
+and making it fit into our scale.
+
+00:04:23.980 --> 00:04:25.799
+So because the way that everyone
+
+00:04:25.800 --> 00:04:26.919
+naturally tells stories
+
+00:04:26.920 --> 00:04:28.239
+is going to be a little different,
+
+00:04:28.240 --> 00:04:30.067
+because the details that strike us
+
+00:04:30.068 --> 00:04:32.119
+as important and worth focusing on
+
+00:04:32.120 --> 00:04:34.239
+are going to be different for different people,
+
+00:04:34.240 --> 00:04:35.639
+I'm not going to say
+
+00:04:35.640 --> 00:04:36.799
+that there are hard and fast rules
+
+00:04:36.800 --> 00:04:39.359
+about how Bookclub "should work,"
+
+00:04:39.360 --> 00:04:41.133
+because how it "should work"
+
+00:04:41.134 --> 00:04:43.919
+is however it best fits your needs.
+
+00:04:43.920 --> 00:04:45.879
+Different people and different projects
+
+00:04:45.880 --> 00:04:47.559
+have different backgrounds and mindsets.
+
+00:04:47.560 --> 00:04:49.633
+And I don't think it's my place to say
+
+00:04:49.634 --> 00:04:51.879
+what strategy is correct as a universal law.
+
+00:04:51.880 --> 00:04:54.719
+You know, because Bookclub Tapas is, after all,
+
+00:04:54.720 --> 00:04:57.099
+just something I've sort of stumbled into.
+
+00:04:57.100 --> 00:05:00.039
+Bookclub is intrinsically ad-hoc.
+
+00:05:00.040 --> 00:05:02.159
+My providing a prescription of strategy
+
+00:05:02.160 --> 00:05:04.839
+is basically going to begin and end with the idea
+
+00:05:04.840 --> 00:05:07.519
+that you write a reverse-literate document
+
+00:05:07.520 --> 00:05:08.799
+that illustrates how you've gone
+
+00:05:08.800 --> 00:05:11.919
+about writing your program.
+
+00:05:11.920 --> 00:05:14.519
+All of that being said,
+
+00:05:14.520 --> 00:05:16.319
+I'm going to talk about
+
+00:05:16.320 --> 00:05:18.439
+how I've laid out my book club files
+
+00:05:18.440 --> 00:05:20.399
+and why I think this is a solid place
+
+00:05:20.400 --> 00:05:24.779
+from which to get started.
+
+NOTE My starter kit - My stock, off the shelf suggestions
+
+00:05:24.780 --> 00:05:27.839
+So my stock off-the-shelf suggestions
+
+00:05:27.840 --> 00:05:29.079
+for just getting started
+
+00:05:29.080 --> 00:05:32.960
+is to have sections for: our overarching goal,
+
+00:05:32.961 --> 00:05:35.059
+our development goals,
+
+00:05:35.060 --> 00:05:40.699
+a place for scratch work, a test suite, research,
+
+00:05:40.700 --> 00:05:42.467
+and then finally sections for variables,
+
+00:05:42.468 --> 00:05:47.659
+functions, and macros.
+
+NOTE Now what?
+
+00:05:47.660 --> 00:05:49.999
+So we have our starter kit sections.
+
+00:05:50.000 --> 00:05:51.959
+How do we go about using them?
+
+00:05:51.960 --> 00:05:53.639
+How do we get started?
+
+00:05:53.640 --> 00:05:55.319
+Well, we write them, you know,
+
+00:05:55.320 --> 00:05:56.439
+out in our org document,
+
+00:05:56.440 --> 00:05:58.979
+but then what do we do?
+
+NOTE Our overarching goal
+
+00:05:58.980 --> 00:06:01.599
+We start by writing what we know.
+
+00:06:01.600 --> 00:06:04.219
+We have a spark, a vision.
+
+00:06:04.220 --> 00:06:05.839
+We had the beginning of an idea
+
+00:06:05.840 --> 00:06:08.079
+of what we wanted our program to do.
+
+00:06:08.080 --> 00:06:09.839
+Alternatively, maybe we had
+
+00:06:09.840 --> 00:06:10.879
+a client lay our goals out.
+
+00:06:10.880 --> 00:06:13.299
+Either way, we have some idea
+
+00:06:13.300 --> 00:06:15.439
+of how we want our program to be shaped.
+
+00:06:15.440 --> 00:06:18.339
+Let's start by writing that down.
+
+00:06:18.340 --> 00:06:19.439
+What are we trying to do?
+
+00:06:19.440 --> 00:06:23.459
+What is our goal?
+
+NOTE Our development focuses
+
+00:06:23.460 --> 00:06:26.279
+After that, we're probably wondering to ourselves,
+
+00:06:26.280 --> 00:06:27.759
+"Okay, we have our goal,
+
+00:06:27.760 --> 00:06:30.079
+but how do we get there?"
+
+00:06:30.080 --> 00:06:31.359
+That's when we start writing
+
+00:06:31.360 --> 00:06:33.359
+our development focuses.
+
+00:06:33.360 --> 00:06:35.159
+If we have bursts of intuition
+
+00:06:35.160 --> 00:06:36.919
+about what functions to write,
+
+00:06:36.920 --> 00:06:39.799
+questions that we want to answer through research,
+
+00:06:39.800 --> 00:06:43.339
+we start enumerating those every time they hit us.
+
+00:06:43.340 --> 00:06:44.559
+Our goal is to write them
+
+00:06:44.560 --> 00:06:46.199
+all down in a checklist
+
+00:06:46.200 --> 00:06:48.159
+in order to turn them from daydreams
+
+00:06:48.160 --> 00:06:50.479
+into courses of action.
+
+00:06:50.480 --> 00:06:52.439
+If we aren't having development focuses
+
+00:06:52.440 --> 00:06:54.799
+hit us right away, that's okay.
+
+00:06:54.800 --> 00:06:57.279
+If we just stare at the goal for long enough,
+
+00:06:57.280 --> 00:06:58.319
+I think it's inevitable
+
+00:06:58.320 --> 00:06:59.559
+that the muse will speak,
+
+00:06:59.560 --> 00:07:00.879
+and we'll get a clear lead
+
+00:07:00.880 --> 00:07:05.119
+on a path forward.
+
+NOTE The rest of the headings
+
+00:07:05.120 --> 00:07:07.219
+So now what?
+
+00:07:07.220 --> 00:07:09.899
+Now that we have our development focuses,
+
+00:07:09.900 --> 00:07:11.759
+we want to go ahead and create
+
+00:07:11.760 --> 00:07:13.439
+the rest of the headings for ourselves
+
+00:07:13.440 --> 00:07:15.539
+so we can act upon them.
+
+00:07:15.540 --> 00:07:17.239
+We go ahead and write the rest
+
+00:07:17.240 --> 00:07:19.419
+of the file's structure ad-hoc
+
+00:07:19.420 --> 00:07:22.339
+in a way that will serve our needs for now.
+
+00:07:22.340 --> 00:07:24.079
+If it's not fitting us well later on,
+
+00:07:24.080 --> 00:07:25.279
+we can just go ahead and change it.
+
+00:07:25.280 --> 00:07:26.239
+There's no pressure.
+
+00:07:26.240 --> 00:07:27.719
+That's the beauty of having this
+
+00:07:27.720 --> 00:07:30.099
+all be in a plain Org document.
+
+00:07:30.100 --> 00:07:32.079
+If we're doing something consistently,
+
+00:07:32.080 --> 00:07:35.059
+we probably want to have a heading for it.
+
+00:07:35.060 --> 00:07:36.439
+We'll go ahead and create homes
+
+00:07:36.440 --> 00:07:38.919
+for our variables, our functions, our macros.
+
+00:07:38.920 --> 00:07:41.479
+We'll want to create a spot for scratch work
+
+00:07:41.480 --> 00:07:43.319
+to sort of like stretch our legs
+
+00:07:43.320 --> 00:07:45.399
+and lament in a stream-of-consciousness
+
+00:07:45.400 --> 00:07:47.079
+sort of format about how
+
+00:07:47.080 --> 00:07:50.159
+a particular piece of design ought to work.
+
+00:07:50.160 --> 00:07:52.359
+Basically, any time we wear a different "hat"
+
+00:07:52.360 --> 00:07:55.079
+or we take on a different "role" as a developer,
+
+00:07:55.080 --> 00:07:58.839
+it's worth considering creating a category for it.
+
+00:07:58.840 --> 00:08:00.719
+The best way for us to figure out
+
+00:08:00.720 --> 00:08:01.839
+what headings to fill in,
+
+00:08:01.840 --> 00:08:03.359
+and how to fill them in,
+
+00:08:03.360 --> 00:08:07.919
+is to just go ahead and act upon our development goals.
+
+00:08:07.920 --> 00:08:09.959
+If we have a question we want to answer,
+
+00:08:09.960 --> 00:08:12.519
+we'll want to create a Research heading
+
+00:08:12.520 --> 00:08:14.759
+so we can go ahead and have a spot
+
+00:08:14.760 --> 00:08:17.419
+for scratch-work for reasoning things out.
+
+00:08:17.420 --> 00:08:18.919
+If we want to write the first draft
+
+00:08:18.920 --> 00:08:20.679
+of a function we want,
+
+00:08:20.680 --> 00:08:22.799
+We'll want to create a heading for functions
+
+00:08:22.800 --> 00:08:37.979
+and then a sub-heading for that function in particular.
+
+NOTE Conversationality
+
+00:08:37.980 --> 00:08:40.419
+So now that we've filled in our sections,
+
+00:08:40.420 --> 00:08:42.379
+what do we do now?
+
+00:08:42.380 --> 00:08:43.679
+Our idea for a program
+
+00:08:43.680 --> 00:08:44.879
+has been turned into a story,
+
+00:08:44.880 --> 00:08:47.619
+but what does that actually get us?
+
+00:08:47.620 --> 00:08:50.839
+To me, a lot of what's exciting about Bookclub
+
+00:08:50.840 --> 00:08:52.919
+is that novelization goes in
+
+00:08:52.920 --> 00:08:56.059
+and a peer programming partner comes out.
+
+00:08:56.060 --> 00:08:58.359
+As we loop through reviewing our document,
+
+00:08:58.360 --> 00:08:59.799
+as we scan it up and down,
+
+00:08:59.800 --> 00:09:02.000
+we're able to engage in conversationality
+
+00:09:02.001 --> 00:09:04.999
+with our past self because of how verbose
+
+00:09:05.000 --> 00:09:06.499
+we've been in our notes.
+
+00:09:06.500 --> 00:09:08.439
+We can ask our past self questions,
+
+00:09:08.440 --> 00:09:09.879
+and get back answers.
+
+00:09:09.880 --> 00:09:11.979
+We've turned our past self
+
+00:09:11.980 --> 00:09:14.579
+into a peer programming partner.
+
+00:09:14.580 --> 00:09:16.359
+If we're wondering what to do next,
+
+00:09:16.360 --> 00:09:18.319
+we can check our Development Focuses.
+
+00:09:18.320 --> 00:09:20.759
+If we're wondering how something works,
+
+00:09:20.760 --> 00:09:22.199
+we can read documentation
+
+00:09:22.200 --> 00:09:24.719
+embedded in our function drafts,
+
+00:09:24.720 --> 00:09:26.919
+or we can read the outcomes of tests
+
+00:09:26.920 --> 00:09:28.659
+that we've performed in our research.
+
+00:09:28.660 --> 00:09:33.019
+We can ask ourselves questions and get answers.
+
+00:09:33.020 --> 00:09:34.439
+Some of what's most exciting
+
+00:09:34.440 --> 00:09:35.919
+about peer programming to me
+
+00:09:35.920 --> 00:09:38.079
+is having fresh perspective
+
+00:09:38.080 --> 00:09:41.079
+and alternate context.
+
+00:09:41.080 --> 00:09:42.679
+We have a fresh set of eyes
+
+00:09:42.680 --> 00:09:44.439
+on the program that aren't our own,
+
+00:09:44.440 --> 00:09:47.479
+and with that set of eyes
+
+00:09:47.480 --> 00:09:50.199
+comes someone else to share the burden
+
+00:09:50.200 --> 00:09:52.539
+of trying to remember everything.
+
+00:09:52.540 --> 00:09:54.839
+With Bookclub, instead of having
+
+00:09:54.840 --> 00:09:57.559
+a peer programmer that exists in physical space,
+
+00:09:57.560 --> 00:10:00.719
+we have one that's, to get all sci-fi for a moment,
+
+00:10:00.720 --> 00:10:03.039
+reaching forward towards us
+
+00:10:03.040 --> 00:10:04.999
+from backward in time.
+
+00:10:05.000 --> 00:10:06.799
+We're asynchronously working
+
+00:10:06.800 --> 00:10:08.119
+with our past selves
+
+00:10:08.120 --> 00:10:10.439
+as an equal-role collaborative
+
+00:10:10.440 --> 00:10:12.879
+partner in development.
+
+00:10:12.880 --> 00:10:15.039
+We have their perspective,
+
+00:10:15.040 --> 00:10:17.799
+their fresh memories of the code as it was written,
+
+00:10:17.800 --> 00:10:20.959
+and their focus on what was worth worrying about
+
+00:10:20.960 --> 00:10:22.319
+at a different point in time.
+
+00:10:22.320 --> 00:10:24.959
+We can ask them questions and get answers.
+
+00:10:24.960 --> 00:10:26.319
+We can ask them questions like,
+
+00:10:26.320 --> 00:10:28.199
+well, "What do I do now?"
+
+00:10:28.200 --> 00:10:30.419
+"How does this data structure work?"
+
+00:10:30.420 --> 00:10:33.679
+"What types does this third-party library take?"
+
+00:10:33.680 --> 00:10:35.119
+By asking these questions,
+
+00:10:35.120 --> 00:10:36.319
+I can even stay fresh
+
+00:10:36.320 --> 00:10:37.479
+on development progress
+
+00:10:37.480 --> 00:10:40.099
+that I last touched months ago.
+
+00:10:40.100 --> 00:10:42.799
+It's really easy to duplicate work,
+
+00:10:42.800 --> 00:10:44.719
+forget how things work,
+
+00:10:44.720 --> 00:10:46.159
+lose track of priorities.
+
+00:10:46.160 --> 00:10:48.279
+Bookclub helps keep us focused,
+
+00:10:48.280 --> 00:10:49.839
+it keeps us accountable,
+
+00:10:49.840 --> 00:10:55.479
+it even keeps us company.
+
+NOTE Ad-hoc means lesricsf tion
+
+00:10:55.480 --> 00:10:58.359
+One of the most immediately useful things about Bookclub,
+
+00:10:58.360 --> 00:11:00.867
+in my opinion, is that we immediately have
+
+00:11:00.868 --> 00:11:02.359
+a list of actionable items.
+
+00:11:02.360 --> 00:11:04.319
+Every time I have a little pain point,
+
+00:11:04.320 --> 00:11:06.639
+I go ahead and write it down,
+
+00:11:06.640 --> 00:11:09.079
+and I write down all of the things
+
+00:11:09.080 --> 00:11:11.579
+that would be nice to have done someday.
+
+00:11:11.580 --> 00:11:13.199
+So you might be wondering,
+
+00:11:13.200 --> 00:11:14.679
+and it's fair to wonder this,
+
+00:11:14.680 --> 00:11:17.479
+isn't this effectively just the GitHub issue model?
+
+00:11:17.480 --> 00:11:19.279
+We're listing out bug requests,
+
+00:11:19.280 --> 00:11:21.239
+issue requests, feature requests.
+
+00:11:21.240 --> 00:11:22.519
+It's not exactly a new idea,
+
+00:11:22.520 --> 00:11:24.559
+and it's pretty intuitive.
+
+00:11:24.560 --> 00:11:26.719
+I think the important consideration here
+
+00:11:26.720 --> 00:11:29.999
+is that having really formalized apparatus
+
+00:11:30.000 --> 00:11:31.639
+for entering in our thoughts
+
+00:11:31.640 --> 00:11:34.419
+can be an unnecessary source of friction.
+
+00:11:34.420 --> 00:11:36.359
+Bug listings don't tend to be
+
+00:11:36.360 --> 00:11:37.839
+a great fit for daydreaming
+
+00:11:37.840 --> 00:11:40.939
+or verbose considerations of philosophy.
+
+00:11:40.940 --> 00:11:42.919
+Bug listings tend to be reserved
+
+00:11:42.920 --> 00:11:45.119
+for catastrophes.
+
+00:11:45.120 --> 00:11:47.279
+I feel like a lot of the tooling
+
+00:11:47.280 --> 00:11:48.199
+that we currently use
+
+00:11:48.200 --> 00:11:51.279
+really struggles with creating ergonomics
+
+00:11:51.280 --> 00:11:54.879
+that make taking frictionless notes difficult.
+
+00:11:54.880 --> 00:11:57.159
+We have systems where all the disparate
+
+00:11:57.160 --> 00:11:59.079
+parts of what we're working on
+
+00:11:59.080 --> 00:12:02.499
+feel really far away from each other.
+
+00:12:02.500 --> 00:12:04.039
+We're pushed away from engaging
+
+00:12:04.040 --> 00:12:05.959
+in conversations with ourselves
+
+00:12:05.960 --> 00:12:07.919
+as a result of how disparate
+
+00:12:07.920 --> 00:12:09.159
+all of our tooling feels,
+
+00:12:09.160 --> 00:12:10.959
+how the process of working with it
+
+00:12:10.960 --> 00:12:12.899
+is incongruent.
+
+00:12:12.900 --> 00:12:15.599
+My hope is that we can instead
+
+00:12:15.600 --> 00:12:16.999
+engage with a process
+
+00:12:17.000 --> 00:12:18.359
+that makes it really trivial
+
+00:12:18.360 --> 00:12:20.199
+to write impulsive journaling
+
+00:12:20.200 --> 00:12:21.979
+about what we're doing.
+
+00:12:21.980 --> 00:12:23.839
+So much of design is ultimately
+
+00:12:23.840 --> 00:12:25.559
+just daydreaming.
+
+00:12:25.560 --> 00:12:27.279
+Good ideas tend to strike us hard,
+
+00:12:27.280 --> 00:12:29.779
+in a momentary flash of inspiration,
+
+00:12:29.780 --> 00:12:32.599
+and then they fade just as quickly.
+
+00:12:32.600 --> 00:12:35.239
+Anyone who's had an idea all at once
+
+00:12:35.240 --> 00:12:36.579
+in the middle of the night
+
+00:12:36.580 --> 00:12:38.159
+knows that they're going to have to choose
+
+00:12:38.160 --> 00:12:40.619
+between either committing to writing it down
+
+00:12:40.620 --> 00:12:41.959
+or accept that by morning
+
+00:12:41.960 --> 00:12:44.259
+they'll have lost it.
+
+00:12:44.260 --> 00:12:45.359
+If we're not writing
+
+00:12:45.360 --> 00:12:46.759
+what strikes us as important
+
+00:12:46.760 --> 00:12:48.639
+at the same moment that it's happening,
+
+00:12:48.640 --> 00:12:50.379
+we're going to lose it.
+
+00:12:50.380 --> 00:12:52.639
+It's not realistic to expect ourselves
+
+00:12:52.640 --> 00:12:54.519
+to hold onto our ideas forever
+
+00:12:54.520 --> 00:12:56.359
+with the same precision
+
+00:12:56.360 --> 00:13:01.919
+as when we were first inspired.
+
+NOTE Gratis documentation
+
+00:13:01.920 --> 00:13:11.319
+Okay. I'm gonna call you out real quick.
+
+00:13:11.320 --> 00:13:13.759
+If I ask all of you "Who wants to read
+
+00:13:13.760 --> 00:13:15.959
+really excellent documentation?"
+
+00:13:15.960 --> 00:13:17.079
+I imagine that everyone here
+
+00:13:17.080 --> 00:13:18.379
+is raising their hand.
+
+00:13:18.380 --> 00:13:20.759
+We want code to make sense
+
+00:13:20.760 --> 00:13:21.959
+and we want to know what
+
+00:13:21.960 --> 00:13:24.239
+the original developer had in mind.
+
+00:13:24.240 --> 00:13:26.399
+Even the original developer themselves
+
+00:13:26.400 --> 00:13:28.579
+would want this just for their own sake.
+
+00:13:28.580 --> 00:13:30.999
+I know that for me, I can even feel
+
+00:13:31.000 --> 00:13:32.319
+things becoming less fresh
+
+00:13:32.320 --> 00:13:33.759
+just after a couple months away
+
+00:13:33.760 --> 00:13:35.539
+from my codebase.
+
+00:13:35.540 --> 00:13:38.619
+And that was me from a couple months ago.
+
+00:13:38.620 --> 00:13:42.359
+They're not around anymore.
+
+00:13:42.360 --> 00:13:45.359
+Now, here's the rough part.
+
+00:13:45.360 --> 00:13:48.579
+Here's what I'm really gonna call you all out.
+
+00:13:48.580 --> 00:13:51.599
+"Who wants to write really excellent documentation?"
+
+00:13:51.600 --> 00:13:53.719
+Now, I don't know what's happening on your end,
+
+00:13:53.720 --> 00:13:55.559
+but I'm imagining crickets,
+
+00:13:55.560 --> 00:13:57.039
+silence, tumbleweeds
+
+00:13:57.040 --> 00:13:59.139
+blowing through to the horizon.
+
+00:13:59.140 --> 00:14:00.999
+It's a tough ask.
+
+00:14:01.000 --> 00:14:03.559
+It's not generally all that rewarding.
+
+00:14:03.560 --> 00:14:06.299
+If you're writing docs from scratch,
+
+00:14:06.300 --> 00:14:07.999
+a lot of it involves relearning
+
+00:14:08.000 --> 00:14:10.679
+the intentions behind crusty old code.
+
+00:14:10.680 --> 00:14:13.359
+For me, it hurts to not spend that same time
+
+00:14:13.360 --> 00:14:16.119
+implementing bug fixes and new features.
+
+00:14:16.120 --> 00:14:17.599
+It just doesn't feel like
+
+00:14:17.600 --> 00:14:19.619
+a great use of my time.
+
+00:14:19.620 --> 00:14:22.279
+Even if it's strictly for my own codebase
+
+00:14:22.280 --> 00:14:25.039
+for my own use, it's hard to sit down and do it
+
+00:14:25.040 --> 00:14:28.779
+even when I know how much I would benefit from it.
+
+00:14:28.780 --> 00:14:31.359
+My thinking is that when you write rough,
+
+00:14:31.360 --> 00:14:34.039
+piecewise daydreaming as you go,
+
+00:14:34.040 --> 00:14:36.039
+it's so much easier to not only
+
+00:14:36.040 --> 00:14:38.759
+begin writing documentation early in your process,
+
+00:14:38.760 --> 00:14:42.839
+but also to stay consistent about not slouching into
+
+00:14:42.840 --> 00:14:48.439
+an accumulation of a backlog.
+
+NOTE Keeping the thread of your intention
+
+00:14:48.440 --> 00:14:51.319
+So not only does writing documentation early
+
+00:14:51.320 --> 00:14:54.599
+make us more likely to keep that habit going,
+
+00:14:54.600 --> 00:14:56.399
+but it also makes the documentation
+
+00:14:56.400 --> 00:14:59.499
+we do write way more robust.
+
+00:14:59.500 --> 00:15:01.239
+When fiction meets reality
+
+00:15:01.240 --> 00:15:04.119
+and we start writing out code
+
+00:15:04.120 --> 00:15:06.119
+that is constrained by the real world
+
+00:15:06.120 --> 00:15:08.859
+and not just our imagination,
+
+00:15:08.860 --> 00:15:11.759
+we learn that things we assumed about our design
+
+00:15:11.760 --> 00:15:14.839
+aren't going to work out in practice.
+
+00:15:14.840 --> 00:15:16.879
+Because of this, we can enter
+
+00:15:16.880 --> 00:15:18.559
+into a sort of situation
+
+00:15:18.560 --> 00:15:21.139
+akin to boiling a frog in a pot of water.
+
+00:15:21.140 --> 00:15:23.079
+Frogs don't notice that they're being boiled
+
+00:15:23.080 --> 00:15:26.919
+if the water is only heated gradually enough.
+
+00:15:26.920 --> 00:15:31.099
+We decide to adjust our design only a little bit
+
+00:15:31.100 --> 00:15:33.919
+without changing the documentation right away.
+
+00:15:33.920 --> 00:15:34.999
+Doing that once is fine,
+
+00:15:35.000 --> 00:15:36.559
+but I don't believe for a second
+
+00:15:36.560 --> 00:15:38.559
+that we're only going to do it once.
+
+00:15:38.560 --> 00:15:39.919
+We can find ourselves surprised
+
+00:15:39.920 --> 00:15:41.659
+that as time goes on,
+
+00:15:41.660 --> 00:15:43.919
+our code looks nothing like our spec,
+
+00:15:43.920 --> 00:15:45.879
+and we lose the thread of what our code
+
+00:15:45.880 --> 00:15:48.699
+was supposed to do in the first place.
+
+00:15:48.700 --> 00:15:52.979
+When we stake our intentions clearly and early,
+
+00:15:52.980 --> 00:15:54.979
+you ground yourself in them.
+
+00:15:54.980 --> 00:15:58.439
+You reduce the risk of straying from them.
+
+00:15:58.440 --> 00:15:59.879
+You have clear reference
+
+00:15:59.880 --> 00:16:01.919
+for what you want your code to do,
+
+00:16:01.920 --> 00:16:03.319
+and you reduce the risk
+
+00:16:03.320 --> 00:16:05.919
+of having its purpose shift over time.
+
+00:16:05.920 --> 00:16:07.399
+When we take turns alternating
+
+00:16:07.400 --> 00:16:09.239
+between writing code and documentation
+
+00:16:09.240 --> 00:16:11.199
+rather than acting, you know,
+
+00:16:11.200 --> 00:16:14.319
+as having it all as one step,
+
+00:16:14.320 --> 00:16:16.479
+we risk taking turns just moving
+
+00:16:16.480 --> 00:16:21.499
+our goalpost back and forth.
+
+NOTE Bookclub is becoming too much
+
+00:16:21.500 --> 00:16:24.239
+So we've seen how our Bookclub files get us
+
+00:16:24.240 --> 00:16:25.839
+all sorts of amazing features
+
+00:16:25.840 --> 00:16:27.619
+and practical benefits.
+
+00:16:27.620 --> 00:16:29.599
+But we might be starting to notice a pattern
+
+00:16:29.600 --> 00:16:31.839
+as we continue to engage in conversation
+
+00:16:31.840 --> 00:16:33.839
+and work with our document
+
+00:16:33.840 --> 00:16:35.919
+and watch it grow in size.
+
+00:16:35.920 --> 00:16:38.819
+We originally created our Bookclub file
+
+00:16:38.820 --> 00:16:40.700
+with the hope to reduce
+
+00:16:40.701 --> 00:16:42.119
+what we would need to keep track of
+
+00:16:42.120 --> 00:16:44.879
+and to reduce our level of overwhelm.
+
+00:16:44.880 --> 00:16:48.919
+We might find that as our Bookclub file grows,
+
+00:16:48.920 --> 00:16:51.159
+we're encountering more detail
+
+00:16:51.160 --> 00:16:53.319
+than we can practically parse, manage,
+
+00:16:53.320 --> 00:16:55.759
+and decipher intention from.
+
+00:16:55.760 --> 00:16:57.719
+It can be easy to enter into a situation
+
+00:16:57.720 --> 00:16:59.839
+where we're drowning in the breadth of our notes,
+
+00:16:59.840 --> 00:17:03.399
+and in doing so we've recreated the same problem
+
+00:17:03.400 --> 00:17:05.419
+we originally set out to solve.
+
+00:17:05.420 --> 00:17:08.759
+Writing out every single detail helps us a lot
+
+00:17:08.760 --> 00:17:11.079
+to make sense of things at first,
+
+00:17:11.080 --> 00:17:13.519
+but then after a while, we can encounter
+
+00:17:13.520 --> 00:17:15.879
+a signal-to-noise problem
+
+00:17:15.880 --> 00:17:19.399
+when we try to make meaning from too many details.
+
+00:17:19.400 --> 00:17:25.239
+This is where tapas come in.
+
+NOTE Introducing Tapas
+
+00:17:25.240 --> 00:17:29.199
+So tapas in Spanish cuisine are appetizers.
+
+00:17:29.200 --> 00:17:31.559
+What's notable about tapas
+
+00:17:31.560 --> 00:17:33.839
+is that you can bring a bunch of them together
+
+00:17:33.840 --> 00:17:35.299
+to make a full meal.
+
+00:17:35.300 --> 00:17:38.379
+In the context of Bookclub Tapas,
+
+00:17:38.380 --> 00:17:40.339
+they serve a similar role.
+
+00:17:40.340 --> 00:17:42.719
+The idea is that we write flavorful libraries
+
+00:17:42.720 --> 00:17:45.419
+that together form a full program.
+
+00:17:45.420 --> 00:17:47.059
+We have a full program,
+
+00:17:47.060 --> 00:17:49.839
+but it's made from discrete modules.
+
+00:17:49.840 --> 00:17:52.719
+The idea behind tapas is that instead of creating
+
+00:17:52.720 --> 00:17:55.859
+one perfect, "solves everything" codebase,
+
+00:17:55.860 --> 00:17:57.319
+we want to create a whole bunch
+
+00:17:57.320 --> 00:17:59.079
+of separate libraries
+
+00:17:59.080 --> 00:18:02.919
+that themselves nail a specific subdomain.
+
+00:18:02.920 --> 00:18:04.119
+And once these libraries
+
+00:18:04.120 --> 00:18:05.179
+are all brought together,
+
+00:18:05.180 --> 00:18:08.019
+they form the whole that we're seeking.
+
+00:18:08.020 --> 00:18:10.079
+Once our Bookclub file becomes big enough
+
+00:18:10.080 --> 00:18:12.239
+such that we feel like our scope can be split
+
+00:18:12.240 --> 00:18:14.239
+into multiple libraries,
+
+00:18:14.240 --> 00:18:16.079
+that's when we want to take the opportunity
+
+00:18:16.080 --> 00:18:22.839
+to split our program up into parts, into Tapas.
+
+NOTE What are Tapas, what are Tapas not?
+
+00:18:22.840 --> 00:18:25.159
+So, maybe one of the best ways
+
+00:18:25.160 --> 00:18:27.039
+to understand what makes a good Tapa
+
+00:18:27.040 --> 00:18:30.599
+is to first examine what does not make a good Tapa.
+
+00:18:30.600 --> 00:18:32.159
+The single most important thing
+
+00:18:32.160 --> 00:18:33.559
+to understand about Tapas
+
+00:18:33.560 --> 00:18:37.139
+is that they themselves are substantial.
+
+00:18:37.140 --> 00:18:38.879
+There's a lot of back and forth
+
+00:18:38.880 --> 00:18:40.679
+on the idea of micro-libraries,
+
+00:18:40.680 --> 00:18:42.879
+their merits, their dangers,
+
+00:18:42.880 --> 00:18:45.419
+and when and where they kind of work best.
+
+00:18:45.420 --> 00:18:46.359
+I think the distinction
+
+00:18:46.360 --> 00:18:47.599
+that I would like to draw
+
+00:18:47.600 --> 00:18:50.719
+is that I think that tapas belong in the larger end
+
+00:18:50.720 --> 00:18:53.759
+of scale and complexity for microlibraries
+
+00:18:53.760 --> 00:18:56.159
+rather than the smaller end.
+
+00:18:56.160 --> 00:18:58.079
+I think particularly small helpers
+
+00:18:58.080 --> 00:19:00.299
+like NPM's is-odd
+
+00:19:00.300 --> 00:19:01.919
+are a good example of something
+
+00:19:01.920 --> 00:19:05.479
+I think does not constitute a good Tapa.
+
+00:19:05.480 --> 00:19:08.799
+Meanwhile, I think Python's Requests library
+
+00:19:08.800 --> 00:19:11.799
+is a really good example of a Tapa.
+
+00:19:11.800 --> 00:19:15.319
+I believe Requests only does HTTP connections,
+
+00:19:15.320 --> 00:19:18.319
+but I feel like that's not so simple and straightforward
+
+00:19:18.320 --> 00:19:20.239
+that you can just go ahead and implement it
+
+00:19:20.240 --> 00:19:23.199
+on your own real quick.
+
+00:19:23.200 --> 00:19:24.639
+A real danger of creating
+
+00:19:24.640 --> 00:19:27.219
+helper libraries that are too small
+
+00:19:27.220 --> 00:19:31.159
+is that we don't remove abstraction
+
+00:19:31.160 --> 00:19:33.319
+nearly as much as we postpone it.
+
+00:19:33.320 --> 00:19:35.819
+If our libraries are small,
+
+00:19:35.820 --> 00:19:38.899
+but the glue code that binds them is large,
+
+00:19:38.900 --> 00:19:40.079
+we haven't done anything
+
+00:19:40.080 --> 00:19:41.519
+to reduce complexity
+
+00:19:41.520 --> 00:19:44.179
+or employ abstraction in a meaningful way.
+
+00:19:44.180 --> 00:19:47.479
+If all of the complexity exists in our glue code,
+
+00:19:47.480 --> 00:19:49.799
+we've simply replaced our functions
+
+00:19:49.800 --> 00:19:52.519
+with libraries of the same size and purpose.
+
+00:19:52.520 --> 00:19:54.559
+Our codebase is still monolithic
+
+00:19:54.560 --> 00:19:58.039
+instead of having meaningfully divided scope.
+
+00:19:58.040 --> 00:19:59.559
+I think that a good Tapa
+
+00:19:59.560 --> 00:20:01.479
+ought to feel like augmentations
+
+00:20:01.480 --> 00:20:03.979
+or extensions to the standard library.
+
+00:20:03.980 --> 00:20:05.199
+You know, maybe something kind of
+
+00:20:05.200 --> 00:20:08.379
+akin to Scheme's SRFI system.
+
+00:20:08.380 --> 00:20:10.599
+I think that the goal of good Tapas
+
+00:20:10.600 --> 00:20:13.919
+is not to solve a particular problem,
+
+00:20:13.920 --> 00:20:18.519
+but instead to solve a particular class of problem.
+
+00:20:18.520 --> 00:20:20.159
+The goal of a well-written Tapa
+
+00:20:20.160 --> 00:20:22.999
+is to solve needing to do hard work in general
+
+00:20:23.000 --> 00:20:25.559
+rather than solving what can only really be
+
+00:20:25.560 --> 00:20:26.679
+an individual need
+
+00:20:26.680 --> 00:20:28.439
+of an individual program.
+
+00:20:28.440 --> 00:20:30.359
+I feel like Tapas are most helpful
+
+00:20:30.360 --> 00:20:32.119
+when we instead seek to solve
+
+00:20:32.120 --> 00:20:35.319
+a larger overarching problem
+
+00:20:35.320 --> 00:20:39.439
+that intersects with the problem space of our code base.
+
+00:20:39.440 --> 00:20:42.239
+When we have a handful of Tapas
+
+00:20:42.240 --> 00:20:46.179
+that are roughly the same size and scale,
+
+00:20:46.180 --> 00:20:48.119
+the glue code that marries them
+
+00:20:48.120 --> 00:20:52.179
+is also roughly the same size and scale.
+
+00:20:52.180 --> 00:20:55.639
+As a heuristic, I try to aim for any function
+
+00:20:55.640 --> 00:20:57.839
+being approximately 3 calls in length,
+
+00:20:57.840 --> 00:21:00.839
+and then any Tapa being between 6
+
+00:21:00.840 --> 00:21:06.399
+and 12 functions in length.
+
+00:21:06.400 --> 00:21:08.039
+The number of Tapas themselves
+
+00:21:08.040 --> 00:21:09.639
+can be as many or as few as you need,
+
+00:21:09.640 --> 00:21:12.879
+but then your Tapas can split into
+
+00:21:12.880 --> 00:21:16.459
+their own separate Tapas as needed.
+
+00:21:16.460 --> 00:21:18.799
+My hope is that the collection of our Tapas,
+
+00:21:18.800 --> 00:21:20.599
+especially as we create
+
+00:21:20.600 --> 00:21:22.319
+dependency chains among them,
+
+00:21:22.320 --> 00:21:25.039
+is that each next Tapa is a trivial case
+
+00:21:25.040 --> 00:21:27.099
+of the one prerequisite to it.
+
+00:21:27.100 --> 00:21:28.879
+Every Tapa is a meaningful,
+
+00:21:28.880 --> 00:21:31.059
+human-readable abstraction
+
+00:21:31.060 --> 00:21:33.439
+that enables us to feel confident about our tooling
+
+00:21:33.440 --> 00:21:35.639
+without drowning in detail.
+
+00:21:35.640 --> 00:21:38.499
+The whole stack can be understood by humans,
+
+00:21:38.500 --> 00:21:40.159
+but we only have to focus on
+
+00:21:40.160 --> 00:21:41.879
+any one piece of it at a time,
+
+00:21:41.880 --> 00:21:47.419
+rather than focusing on the entire stack all at once.
+
+00:21:47.420 --> 00:21:48.879
+We can practically achieve
+
+00:21:48.880 --> 00:21:51.259
+a huge final product,
+
+00:21:51.260 --> 00:21:52.759
+but each individual step
+
+00:21:52.760 --> 00:21:54.279
+in working towards that goal
+
+00:21:54.280 --> 00:21:56.039
+is still at a human scale.
+
+00:21:56.040 --> 00:22:02.179
+One thing I want to make sure to point out,
+
+00:22:02.180 --> 00:22:03.279
+one thing I want to make sure
+
+00:22:03.280 --> 00:22:05.179
+to point out explicitly, real quick,
+
+00:22:05.180 --> 00:22:06.279
+is that having access
+
+00:22:06.280 --> 00:22:07.839
+to a hygienic macro system,
+
+00:22:07.840 --> 00:22:10.259
+like the ones that we have in Lisps,
+
+00:22:10.260 --> 00:22:11.999
+makes for an amazing experience
+
+00:22:12.000 --> 00:22:13.319
+for creating Tapas.
+
+00:22:13.320 --> 00:22:15.279
+The types of abstractions that we can do
+
+00:22:15.280 --> 00:22:17.039
+by modifying syntax at compile time
+
+00:22:17.040 --> 00:22:18.439
+makes for incredibly intuitive
+
+00:22:18.440 --> 00:22:25.179
+and ergonomic tooling.
+
+NOTE Tapas are maybe best illustrated by example
+
+00:22:25.180 --> 00:22:27.279
+So we've talked quite a bit about
+
+00:22:27.280 --> 00:22:28.919
+what I think makes a Tapa good,
+
+00:22:28.920 --> 00:22:30.759
+but I think maybe the best way
+
+00:22:30.760 --> 00:22:32.679
+to understand the concept
+
+00:22:32.680 --> 00:22:35.599
+is to have a look at the whole workflow in practice.
+
+00:22:35.600 --> 00:22:37.479
+I've been working on this, currently
+
+00:22:37.480 --> 00:22:40.219
+unnamed, Elisp program recently.
+
+00:22:40.220 --> 00:22:42.959
+It's a validator for the filetags lines
+
+00:22:42.960 --> 00:22:45.819
+of my Org Mode files.
+
+00:22:45.820 --> 00:22:49.299
+So I have Org Mode files
+
+00:22:49.300 --> 00:22:50.999
+under my Documents directory,
+
+00:22:51.000 --> 00:22:53.633
+organized in this hierarchical way,
+
+00:22:53.634 --> 00:22:57.039
+and the nested directories have meaningful names.
+
+00:22:57.040 --> 00:23:00.300
+I want the headers of my Org files to be tagged
+
+00:23:00.301 --> 00:23:01.800
+in accordance with the sequence
+
+00:23:01.801 --> 00:23:04.199
+of the names of the directories.
+
+00:23:04.200 --> 00:23:06.167
+I do this by having the file-tags line
+
+00:23:06.168 --> 00:23:06.999
+at the top of the file
+
+00:23:07.000 --> 00:23:09.519
+just list the path segments in order.
+
+00:23:09.520 --> 00:23:12.199
+If I have an Org file in the directory
+
+00:23:12.200 --> 00:23:16.559
+"~/Documents/foo/bar",
+
+00:23:16.560 --> 00:23:20.799
+the file-tags line has the tags "foo" and "bar".
+
+00:23:20.800 --> 00:23:23.139
+This is totally fine to do by hand,
+
+00:23:23.140 --> 00:23:24.919
+but I want a program
+
+00:23:24.920 --> 00:23:27.119
+that recursively searches through my directories
+
+00:23:27.120 --> 00:23:29.799
+to validate that the tags are correct
+
+00:23:29.800 --> 00:23:33.459
+because it's easy to drop something.
+
+00:23:33.460 --> 00:23:36.039
+This scale of problem is actually kind of perfect
+
+00:23:36.040 --> 00:23:39.959
+for demonstrating how Bookclub Tapas work in action.
+
+00:23:39.960 --> 00:23:40.759
+We have a problem
+
+00:23:40.760 --> 00:23:42.639
+that's mostly rather simple,
+
+00:23:42.640 --> 00:23:44.359
+but it has a lot of moving pieces.
+
+00:23:44.360 --> 00:23:47.799
+We want to iterate over directories recursively,
+
+00:23:47.800 --> 00:23:49.559
+we want to do string manipulation,
+
+00:23:49.560 --> 00:23:50.879
+we want to parse buffers,
+
+00:23:50.880 --> 00:23:52.899
+and we want to edit buffers.
+
+00:23:52.900 --> 00:23:55.359
+All of these tasks are simple enough on their own,
+
+00:23:55.360 --> 00:23:56.679
+but it's deceptively easy
+
+00:23:56.680 --> 00:23:58.399
+to start tripping over ourselves
+
+00:23:58.400 --> 00:23:59.959
+when we feel like it's necessary
+
+00:23:59.960 --> 00:24:03.019
+to do all of these different things in one step.
+
+00:24:03.020 --> 00:24:05.399
+So there are a ton of great string
+
+00:24:05.400 --> 00:24:06.959
+manipulation tools for Emacs,
+
+00:24:06.960 --> 00:24:08.079
+so that's checked off,
+
+00:24:08.080 --> 00:24:10.939
+that's done, taken care of.
+
+00:24:10.940 --> 00:24:12.119
+I'm still kind of daydreaming
+
+00:24:12.120 --> 00:24:14.399
+about writing a wrapper around
+
+00:24:14.400 --> 00:24:16.039
+some of the Emacs standard libraries
+
+00:24:16.040 --> 00:24:16.999
+for directory traversal,
+
+00:24:17.000 --> 00:24:20.179
+just to make it a little bit nicer to work with.
+
+00:24:20.180 --> 00:24:20.799
+But the big thing
+
+00:24:20.800 --> 00:24:22.519
+that really struck me as odd
+
+00:24:22.520 --> 00:24:25.479
+is that there doesn't seem to be a great tooling
+
+00:24:25.480 --> 00:24:28.239
+for destructuring Emacs buffers
+
+00:24:28.240 --> 00:24:29.399
+beyond just chaining together
+
+00:24:29.400 --> 00:24:31.379
+a bunch of editor commands.
+
+00:24:31.380 --> 00:24:33.959
+Emacs is so buffer-oriented,
+
+00:24:33.960 --> 00:24:36.439
+I feel like it really deserves a good library
+
+00:24:36.440 --> 00:24:38.719
+for programmatic buffer destructuring.
+
+00:24:38.720 --> 00:24:40.559
+I looked around for a bit,
+
+00:24:40.560 --> 00:24:42.799
+but I couldn't really find anything.
+
+00:24:42.800 --> 00:24:44.759
+So at the end of the day,
+
+00:24:44.760 --> 00:24:47.279
+I could definitely just grit my teeth
+
+00:24:47.280 --> 00:24:50.919
+and put my head down and just use tools
+
+00:24:50.920 --> 00:24:54.359
+that feel cumbersome to work with if I wanted to.
+
+00:24:54.360 --> 00:24:55.199
+I could write something
+
+00:24:55.200 --> 00:24:56.039
+that's "good enough"
+
+00:24:56.040 --> 00:24:57.759
+just for the purpose of my package
+
+00:24:57.760 --> 00:25:00.279
+and then hide it deep inside the code base.
+
+00:25:00.280 --> 00:25:03.819
+I could absolutely do that.
+
+00:25:03.820 --> 00:25:07.919
+But I can't help but think about how
+
+00:25:07.920 --> 00:25:11.099
+after I properly write the tooling I'm missing,
+
+00:25:11.100 --> 00:25:13.159
+I'm really going to be thanking myself
+
+00:25:13.160 --> 00:25:15.879
+in terms of reduced implementational complexity,
+
+00:25:15.880 --> 00:25:19.039
+reduced bug hunting, real reusability,
+
+00:25:19.040 --> 00:25:22.199
+and ultimately really just a deep sense of pride
+
+00:25:22.200 --> 00:25:23.719
+in knowing that I took the time
+
+00:25:23.720 --> 00:25:27.319
+to do something in a way that feels "right."
+
+00:25:27.320 --> 00:25:28.799
+This right here is the perfect time
+
+00:25:28.800 --> 00:25:30.239
+to split off Tapas.
+
+00:25:30.240 --> 00:25:32.119
+Any time that we find ourselves
+
+00:25:32.120 --> 00:25:34.319
+reaching for a fictional dependency,
+
+00:25:34.320 --> 00:25:35.439
+wishing that someone had written
+
+00:25:35.440 --> 00:25:37.679
+a library like this...
+
+00:25:37.680 --> 00:25:39.119
+We can take that opportunity
+
+00:25:39.120 --> 00:25:42.019
+to remember that we are "someone."
+
+00:25:42.020 --> 00:25:44.319
+We can write that library ourselves,
+
+00:25:44.320 --> 00:25:46.679
+and we deserve to write that library
+
+00:25:46.680 --> 00:25:52.339
+because we deserve to get to use it.
+
+NOTE Introducing Squint
+
+00:25:52.340 --> 00:25:55.279
+So I'm going to briefly show
+
+00:25:55.280 --> 00:25:56.899
+a Bookclub buffer
+
+00:25:56.900 --> 00:25:59.259
+for a program called Squint.
+
+00:25:59.260 --> 00:26:00.879
+It's the buffer destructure
+
+00:26:00.880 --> 00:26:03.199
+that I've been talking about, and it's real.
+
+00:26:03.200 --> 00:26:04.519
+It's a wrapper around
+
+00:26:04.520 --> 00:26:05.999
+Emacs's narrowing functionality
+
+00:26:06.000 --> 00:26:08.739
+and regular expression search.
+
+00:26:08.740 --> 00:26:11.799
+It's not totally done,
+
+00:26:11.800 --> 00:26:15.279
+and will likely see some breaking changes,
+
+00:26:15.280 --> 00:26:16.759
+but I really like where it is.
+
+00:26:16.760 --> 00:26:18.679
+I'll be posting it in its current state
+
+00:26:18.680 --> 00:26:22.399
+on some of the big source repository sites
+
+00:26:22.400 --> 00:26:23.279
+relatively soon.
+
+00:26:23.280 --> 00:26:24.719
+I think it has a good feature,
+
+00:26:24.720 --> 00:26:26.519
+which is really quite exciting.
+
+00:26:26.520 --> 00:26:28.999
+And it'll likely probably get split off
+
+00:26:29.000 --> 00:26:29.799
+into its own Tapas.
+
+00:26:29.800 --> 00:26:32.239
+We'll see. No matter what,
+
+00:26:32.240 --> 00:26:34.319
+I do recommend being on the lookout for it,
+
+00:26:34.320 --> 00:26:35.599
+because I think it'll be
+
+00:26:35.600 --> 00:26:37.479
+a really excellent demonstration
+
+00:26:37.480 --> 00:26:39.679
+of some of the solid ideas
+
+00:26:39.680 --> 00:26:43.899
+behind how to get rolling with Bookclub Tapas.
+
+00:26:43.900 --> 00:26:46.639
+So I have my background section
+
+00:26:46.640 --> 00:26:49.039
+where I'm basically just sort of laying out,
+
+00:26:49.040 --> 00:26:53.239
+you know, what the objective is for the program.
+
+00:26:53.240 --> 00:26:55.119
+I have my vision where I'm doing
+
+00:26:55.120 --> 00:26:58.019
+some daydreaming about, you know,
+
+00:26:58.020 --> 00:26:59.639
+how this all ought to work.
+
+00:26:59.640 --> 00:27:00.919
+I date stamped this.
+
+00:27:00.920 --> 00:27:02.919
+As you can see, it's from a while ago,
+
+00:27:02.920 --> 00:27:05.599
+but I still have the full context of, you know,
+
+00:27:05.600 --> 00:27:08.159
+all the things that I've done working on this.
+
+00:27:08.160 --> 00:27:12.319
+I listed out a bunch of ideas
+
+00:27:12.320 --> 00:27:15.479
+for different forms for functions macros.
+
+00:27:15.480 --> 00:27:21.839
+I did different pieces of research.
+
+00:27:21.840 --> 00:27:23.199
+Yeah, I was trying to figure out
+
+00:27:23.200 --> 00:27:24.679
+for the width restriction macro,
+
+00:27:24.680 --> 00:27:26.599
+what types does it take?
+
+00:27:26.600 --> 00:27:28.479
+And I did a whole bunch of tests
+
+00:27:28.480 --> 00:27:31.279
+to try and ultimately figure it out.
+
+00:27:31.280 --> 00:27:35.719
+Because it claims in the documentation,
+
+00:27:35.720 --> 00:27:37.399
+I believe, that it will just take
+
+00:27:37.400 --> 00:27:39.439
+any type for labels.
+
+00:27:39.440 --> 00:27:43.959
+But in my testing, that's not
+
+00:27:43.960 --> 00:27:44.879
+ultimately what I found.
+
+00:27:44.880 --> 00:27:46.519
+The results of my tests
+
+00:27:46.520 --> 00:27:50.119
+is that symbols, numbers, they work.
+
+00:27:50.120 --> 00:27:51.319
+Strings do not.
+
+00:27:51.320 --> 00:27:52.919
+I'm not sure why that is.
+
+00:27:52.920 --> 00:27:54.439
+But for my purposes,
+
+00:27:54.440 --> 00:27:58.159
+this is what I need to know.
+
+00:27:58.160 --> 00:28:00.359
+I have my development focuses here.
+
+00:28:00.360 --> 00:28:03.879
+So I have my assorted goals
+
+00:28:03.880 --> 00:28:05.119
+for different directions
+
+00:28:05.120 --> 00:28:08.059
+I want to take the program.
+
+00:28:08.060 --> 00:28:13.339
+And then lastly, I have my functions, my macros.
+
+00:28:13.340 --> 00:28:14.439
+And this right here
+
+00:28:14.440 --> 00:28:18.079
+is the titular macro.
+
+00:28:18.080 --> 00:28:20.499
+This is ultimately the big meat
+
+00:28:20.500 --> 00:28:24.859
+of the program.
+
+00:28:24.860 --> 00:28:28.219
+And it's all contained happily organized
+
+00:28:28.220 --> 00:28:30.359
+inside my Bookclub file.
+
+00:28:30.360 --> 00:28:31.199
+I'm quite happy with it.
+
+00:28:31.200 --> 00:28:36.099
+I think it looks really nice.
+
+NOTE What else does Bookclub Tapas do?
+
+00:28:36.100 --> 00:28:40.759
+So what else does Bookclub tapas do?
+
+00:28:40.760 --> 00:28:44.519
+I don't know. It probably does a lot of stuff.
+
+00:28:44.520 --> 00:28:46.439
+It does all sorts of stuff
+
+00:28:46.440 --> 00:28:47.439
+that I don't know about yet,
+
+00:28:47.440 --> 00:28:48.879
+but this is where you come in.
+
+00:28:48.880 --> 00:28:51.439
+I'm really excited to see what people do
+
+00:28:51.440 --> 00:28:52.879
+when they take these ideas
+
+00:28:52.880 --> 00:28:54.019
+and run with them.
+
+00:28:54.020 --> 00:28:56.819
+And if you have something really cool you're doing with it,
+
+00:28:56.820 --> 00:28:59.239
+please email me and come talk to me about it.
+
+00:28:59.240 --> 00:29:00.599
+I'd love to hear about it.
+
+00:29:00.600 --> 00:29:08.159
+Again, my email is hello@ElephantErgonomics.com.
+
+NOTE Let's work together
+
+00:29:08.160 --> 00:29:10.839
+So last, before we wrap up,
+
+00:29:10.840 --> 00:29:12.599
+I want to go ahead and give
+
+00:29:12.600 --> 00:29:14.199
+a quick plug for my services.
+
+00:29:14.200 --> 00:29:17.019
+I am an independent software engineer
+
+00:29:17.020 --> 00:29:20.079
+that has an emphasis in backend design
+
+00:29:20.080 --> 00:29:21.599
+and general automation.
+
+00:29:21.600 --> 00:29:23.919
+In particular, I have an emphasis
+
+00:29:23.920 --> 00:29:26.839
+in that really cool new generative AI thing
+
+00:29:26.840 --> 00:29:28.559
+that everyone's been talking about recently.
+
+00:29:28.560 --> 00:29:30.679
+If you have a headache,
+
+00:29:30.680 --> 00:29:33.239
+you have some sort of pain point
+
+00:29:33.240 --> 00:29:34.799
+for your small or large business,
+
+00:29:34.800 --> 00:29:36.767
+you wish you could just wiggle your nose
+
+00:29:36.768 --> 00:29:38.999
+and have disappear, come talk to me.
+
+00:29:39.000 --> 00:29:41.599
+I'll make it disappear. I love doing that.
+
+00:29:41.600 --> 00:29:46.979
+Reach out to me at hello@ElephantErgonomics.com.
+
+00:29:46.980 --> 00:29:48.319
+If you think that Bookclub Tapas
+
+00:29:48.320 --> 00:29:51.039
+would be a great fit for your team and your project,
+
+00:29:51.040 --> 00:29:53.039
+I'd love to hop on and help you
+
+00:29:53.040 --> 00:29:55.119
+get the ball rolling quickly.
+
+00:29:55.120 --> 00:29:59.819
+Go ahead and email me at hello@ElephantErgonomics.com.
+
+00:29:59.820 --> 00:30:01.639
+Lastly, if you're a member
+
+00:30:01.640 --> 00:30:03.799
+of the larger Lisp community
+
+00:30:03.800 --> 00:30:06.859
+and you want to fund independent software development
+
+00:30:06.860 --> 00:30:08.319
+for things that really excite you,
+
+00:30:08.320 --> 00:30:09.639
+for passion projects
+
+00:30:09.640 --> 00:30:11.439
+that make our ecosystem richer,
+
+00:30:11.440 --> 00:30:17.079
+I'd love to look into accepting independent funding
+
+00:30:17.080 --> 00:30:20.419
+so I can commit more hours
+
+00:30:20.420 --> 00:30:22.679
+toward making that happen.
+
+00:30:22.680 --> 00:30:24.599
+Some of the projects that I want to work on
+
+00:30:24.600 --> 00:30:28.679
+are a Python Foreign Function Interface for Guile Scheme,
+
+00:30:28.680 --> 00:30:31.959
+a framework for rapidly creating simulation games
+
+00:30:31.960 --> 00:30:33.878
+that feels just as simple
+
+00:30:33.879 --> 00:30:36.239
+as writing Emacs configurations,
+
+00:30:36.240 --> 00:30:37.719
+I want to work on getting
+
+00:30:37.720 --> 00:30:41.459
+a full graphical web browser inside of Emacs,
+
+00:30:41.460 --> 00:30:43.359
+and I want to finish programs like Squint.
+
+00:30:43.360 --> 00:30:44.879
+These are just some of the projects
+
+00:30:44.880 --> 00:30:46.019
+I want to work on,
+
+00:30:46.020 --> 00:30:48.239
+but I need funding to do so.
+
+00:30:48.240 --> 00:30:49.559
+If you want to see these things happen,
+
+00:30:49.560 --> 00:30:53.799
+send me an email at hello@ElephantErgonomics.com
+
+00:30:53.800 --> 00:30:55.559
+with both your intention
+
+00:30:55.560 --> 00:30:57.359
+to pledge a monthly contribution
+
+00:30:57.360 --> 00:30:59.399
+as well as clarification,
+
+00:30:59.400 --> 00:31:02.079
+a sort of vote on which project
+
+00:31:02.080 --> 00:31:03.519
+you would like to see me prioritize.
+
+00:31:03.520 --> 00:31:06.679
+I would love to have folks reach out
+
+00:31:06.680 --> 00:31:07.519
+for any of these reasons.
+
+00:31:07.520 --> 00:31:12.199
+I would just love to talk to you.
+
+00:31:12.200 --> 00:31:14.619
+Thank you so much for watching!
+
+00:31:14.620 --> 00:31:16.519
+I really hope that the talk was interesting,
+
+00:31:16.520 --> 00:31:18.639
+and I'm really excited to see
+
+00:31:18.640 --> 00:31:19.719
+your thoughts and questions
+
+00:31:19.720 --> 00:31:21.959
+right now in the Q&A!
+
+00:31:21.960 --> 00:31:25.800
+Thank you so much for watching. Bye!
diff --git a/2025/captions/emacsconf-2025-calc--basic-calc-functionality-for-engineering-or-electronics--christopher-howard--main--chapters.vtt b/2025/captions/emacsconf-2025-calc--basic-calc-functionality-for-engineering-or-electronics--christopher-howard--main--chapters.vtt
new file mode 100644
index 00000000..f3af8a6f
--- /dev/null
+++ b/2025/captions/emacsconf-2025-calc--basic-calc-functionality-for-engineering-or-electronics--christopher-howard--main--chapters.vtt
@@ -0,0 +1,41 @@
+WEBVTT
+
+
+00:00:03.620 --> 00:02:36.639
+Introduction
+
+00:02:36.640 --> 00:04:54.279
+What is Calc?
+
+00:04:54.280 --> 00:06:37.398
+calc-algebraic-entry
+
+00:06:37.399 --> 00:08:07.759
+calc-roll-down
+
+00:08:07.760 --> 00:08:58.179
+Advanced functions
+
+00:08:58.180 --> 00:09:54.719
+Solving equations with calc-solve-for
+
+00:09:54.720 --> 00:12:00.079
+Systems of equations
+
+00:12:00.080 --> 00:12:39.959
+calc-find-root
+
+00:12:39.960 --> 00:14:17.539
+Derivatives and integrals
+
+00:14:17.540 --> 00:18:12.159
+Programmable functions
+
+00:18:12.160 --> 00:20:08.799
+Plotting
+
+00:20:08.800 --> 00:22:38.599
+Wish list
+
+00:22:38.600 --> 00:23:35.920
+Wrapping up
diff --git a/2025/captions/emacsconf-2025-calc--basic-calc-functionality-for-engineering-or-electronics--christopher-howard--main.vtt b/2025/captions/emacsconf-2025-calc--basic-calc-functionality-for-engineering-or-electronics--christopher-howard--main.vtt
new file mode 100644
index 00000000..f0bf2d2a
--- /dev/null
+++ b/2025/captions/emacsconf-2025-calc--basic-calc-functionality-for-engineering-or-electronics--christopher-howard--main.vtt
@@ -0,0 +1,888 @@
+WEBVTT captioned by sachac
+
+NOTE Introduction
+
+00:00:03.620 --> 00:00:08.799
+Hello, my name is Christopher Howard and welcome to my talk.
+
+00:00:08.800 --> 00:00:11.319
+This is basically an introduction
+
+00:00:11.320 --> 00:00:15.119
+to the built-in Emacs calculator,
+
+00:00:15.120 --> 00:00:18.319
+properly known as Emacs Calc,
+
+00:00:18.320 --> 00:00:21.439
+particularly from the perspective of someone
+
+00:00:21.440 --> 00:00:27.559
+with a technical background such as engineering or electronics.
+
+00:00:27.560 --> 00:00:32.879
+I will say, though, my personal interest is not really
+
+00:00:32.880 --> 00:00:37.839
+in digital computing or digital calculators,
+
+00:00:37.840 --> 00:00:42.519
+but lately has been focused more on analog computing.
+
+00:00:42.520 --> 00:00:46.799
+I have, for example, been working to master
+
+00:00:46.800 --> 00:00:50.839
+the venerable slide rule, a mechanical computer
+
+00:00:50.840 --> 00:00:57.319
+that calculates multiplication powers and logarithms.
+
+00:00:57.320 --> 00:01:02.199
+Here's a picture of one.
+
+00:01:02.200 --> 00:01:06.799
+It's a physical tool that was used for hundreds of years
+
+00:01:06.800 --> 00:01:08.999
+for this sort of thing
+
+00:01:09.000 --> 00:01:16.679
+before the handheld calculator was made popular.
+
+00:01:16.680 --> 00:01:18.639
+And I also had a project that I did
+
+00:01:18.640 --> 00:01:21.119
+for a while to several months
+
+00:01:21.120 --> 00:01:33.119
+to build an electronic analog computer.
+
+00:01:33.120 --> 00:01:38.679
+A rudimentary attempt of mine, but it's functional,
+
+00:01:38.680 --> 00:01:43.399
+and it's basically a 1960s or 1970s style
+
+00:01:43.400 --> 00:01:48.839
+electronic analog computer built very much on a budget,
+
+00:01:48.840 --> 00:01:52.559
+but the box in the middle is the computer proper
+
+00:01:52.560 --> 00:01:55.719
+which has most of the components inside of it
+
+00:01:55.720 --> 00:02:00.199
+as well as the potentiometers for setting values,
+
+00:02:00.200 --> 00:02:02.039
+and an operation switch.
+
+00:02:02.040 --> 00:02:04.399
+There's a patch panel on the left
+
+00:02:04.400 --> 00:02:07.119
+for connecting the different integrators,
+
+00:02:07.120 --> 00:02:11.319
+amplifiers, multipliers, and so forth together.
+
+00:02:11.320 --> 00:02:16.919
+Then the output of the simulation is displayed
+
+00:02:16.920 --> 00:02:19.799
+on the oscilloscope on the right side,
+
+00:02:19.800 --> 00:02:25.479
+which is a digital oscilloscope.
+
+00:02:25.480 --> 00:02:28.439
+To be honest, I think that a talk about analog computing
+
+00:02:28.440 --> 00:02:30.199
+would be much more interesting
+
+00:02:30.200 --> 00:02:32.039
+than the talk that I'm about to give,
+
+00:02:32.040 --> 00:02:36.639
+but unfortunately that would be out of scope for EmacsConf.
+
+NOTE What is Calc?
+
+00:02:36.640 --> 00:02:39.919
+So instead I will talk about Emacs Calc,
+
+00:02:39.920 --> 00:02:43.359
+the digital calculator built into Emacs.
+
+00:02:43.360 --> 00:02:47.519
+Emacs Calc, while not being a replacement for software
+
+00:02:47.520 --> 00:02:51.479
+like GNU Octave, does have advanced calculator functionality
+
+00:02:51.480 --> 00:02:55.039
+that can be useful in engineering, electronics,
+
+00:02:55.040 --> 00:03:00.759
+or other technical applications. So I don't want to oversell it,
+
+00:03:00.760 --> 00:03:06.479
+but I think functionality-wise, Calc is somewhere in between
+
+00:03:06.480 --> 00:03:12.239
+what you'd expect of a decent scientific calculator
+
+00:03:12.240 --> 00:03:23.939
+and an advanced graphics calculator.
+
+00:03:23.940 --> 00:03:28.839
+So this talk I'll mention is not intended to be a tutorial
+
+00:03:28.840 --> 00:03:33.839
+but only a brief introduction to Calc.
+
+00:03:33.840 --> 00:03:37.439
+Please refer to the built-in Calc info manual
+
+00:03:37.440 --> 00:03:46.739
+for detailed instructions on how to complete operations.
+
+00:03:46.740 --> 00:04:01.479
+Turn off my volume here.
+
+00:04:01.480 --> 00:04:05.719
+The documentation for Emacs Calc is built-in,
+
+00:04:05.720 --> 00:04:10.439
+although on some distributions you may have to install
+
+00:04:10.440 --> 00:04:24.479
+the Emacs documentation separately for licensing reasons.
+
+00:04:24.480 --> 00:04:28.599
+Calc presents itself as a stack-based calculator
+
+00:04:28.600 --> 00:04:31.599
+where entries are dropped onto a stack
+
+00:04:31.600 --> 00:04:36.739
+and then an operation is performed on the stack entries.
+
+00:04:36.740 --> 00:04:42.899
+For example, I can drop 1.23 onto the stack,
+
+00:04:42.900 --> 00:04:54.279
+and then 8.56, and then multiply them together.
+
+NOTE calc-algebraic-entry
+
+00:04:54.280 --> 00:05:01.559
+It may present itself as a stack-based calculator,
+
+00:05:01.560 --> 00:05:05.399
+but indeed, Calc is also capable of accepting input
+
+00:05:05.400 --> 00:05:07.739
+in the more well-known algebraic format
+
+00:05:07.740 --> 00:05:10.759
+by using the calc-algebraic-entry command,
+
+00:05:10.760 --> 00:05:14.999
+which by default is bound to the apostrophe (') key.
+
+00:05:15.000 --> 00:05:19.759
+So you type the apostrophe key, enter the algebraic input,
+
+00:05:19.760 --> 00:05:22.759
+including parentheses as needed.
+
+00:05:22.760 --> 00:05:28.199
+For example, here's a calculation of the resonance frequency
+
+00:05:28.200 --> 00:05:35.039
+of a coil which has an inductance of 250 microhenries
+
+00:05:35.040 --> 00:05:41.059
+and 160 picofarads, taken from one of my electronics handbooks.
+
+00:05:41.060 --> 00:05:50.019
+The formula for that is 1 over 2 pi
+
+00:05:50.020 --> 00:05:57.439
+and then the square root of our inductance
+
+00:05:57.440 --> 00:06:06.279
+which is in this case 250 microfarads - excuse me, microhenries
+
+00:06:06.280 --> 00:06:19.399
+and then the capacitance is 160 picofarads.
+
+00:06:19.400 --> 00:06:24.399
+Small typo here.
+
+00:06:24.400 --> 00:06:26.639
+Now I need to evaluate that one more time,
+
+00:06:26.640 --> 00:06:30.919
+because pi is a symbol.
+
+00:06:30.920 --> 00:06:37.398
+I get about 800 kHz resonant frequency.
+
+NOTE calc-roll-down
+
+00:06:37.399 --> 00:06:41.679
+The command calc-roll-down,
+
+00:06:41.680 --> 00:06:44.199
+which by default is bound to the TAB key,
+
+00:06:44.200 --> 00:06:47.919
+will swap the top two stack entries,
+
+00:06:47.920 --> 00:06:51.559
+which is sometimes useful if you need to manipulate something
+
+00:06:51.560 --> 00:06:56.999
+that's further down the stack.
+
+00:06:57.000 --> 00:07:02.039
+So I can swap this around and say multiply by two
+
+00:07:02.040 --> 00:07:05.479
+and then put it back where it was.
+
+00:07:05.480 --> 00:07:14.039
+This command is also capable of rolling the entire stack.
+
+00:07:14.040 --> 00:07:18.899
+Say I want to shift them all around.
+
+00:07:18.900 --> 00:07:21.399
+This can be done by passing extra arguments
+
+00:07:21.400 --> 00:07:23.559
+to the calc-roll-down function.
+
+00:07:23.560 --> 00:07:28.279
+That's a little bit inconvenient to do manually,
+
+00:07:28.280 --> 00:07:40.079
+so in my init file, I defined here a key definition
+
+00:07:40.080 --> 00:07:45.759
+that passes in those arguments correctly.
+
+00:07:45.760 --> 00:07:49.179
+I attached this to shift-tab,
+
+00:07:49.180 --> 00:07:52.319
+so this way, I can roll the entire stack.
+
+00:07:52.320 --> 00:07:56.159
+Then I could change one entry here
+
+00:07:56.160 --> 00:08:03.459
+and then put it back where it was.
+
+00:08:03.460 --> 00:08:07.759
+So Calc does algebraic input.
+
+NOTE Advanced functions
+
+00:08:07.760 --> 00:08:10.159
+It also does advanced functions
+
+00:08:10.160 --> 00:08:15.599
+that you would expect any handheld scientific calculator,
+
+00:08:15.600 --> 00:08:19.159
+including trigonometric functions.
+
+00:08:19.160 --> 00:08:25.319
+For example, we can get the sine of a number.
+
+00:08:25.320 --> 00:08:30.719
+Now I'll mention here that Calc has multiple modes.
+
+00:08:30.720 --> 00:08:32.319
+Right now it's in degree mode.
+
+00:08:32.320 --> 00:08:38.159
+You can switch over to radian mode if you want.
+
+00:08:38.160 --> 00:08:42.799
+I'm going to put it back in degrees.
+
+00:08:42.800 --> 00:08:49.799
+Drop 12 degrees on the stack, and then get the sine of that.
+
+00:08:49.800 --> 00:08:58.179
+And then with the inverse sine function, I can put it back.
+
+NOTE Solving equations with calc-solve-for
+
+00:08:58.180 --> 00:09:07.519
+Calc also has the nifty ability to solve equations for you
+
+00:09:07.520 --> 00:09:13.919
+so long as the equation is not too complicated.
+
+00:09:13.920 --> 00:09:19.959
+This is using the calc-solve-for function.
+
+00:09:19.960 --> 00:09:31.699
+For example, we could enter in an equation algebraically,
+
+00:09:31.700 --> 00:09:36.679
+then run calc-solve-for, and we just have to tell it
+
+00:09:36.680 --> 00:09:40.999
+what variable we want to solve for. And there we go.
+
+00:09:41.000 --> 00:09:43.199
+We can do this manually as well
+
+00:09:43.200 --> 00:09:54.719
+just so you can see that we get the same result.
+
+NOTE Systems of equations
+
+00:09:54.720 --> 00:09:57.959
+Calc is also able to solve systems of equations.
+
+00:09:57.960 --> 00:10:03.439
+We can put more than one equation on the stack,
+
+00:10:03.440 --> 00:10:08.959
+and then solve for several variables.
+
+00:10:08.960 --> 00:10:13.319
+To give a technical example for this,
+
+00:10:13.320 --> 00:10:30.659
+I'll show you a resistor network scribble that I did recently.
+
+00:10:30.660 --> 00:10:32.819
+Hopefully you can see that. Basically,
+
+00:10:32.820 --> 00:10:38.719
+it's fairly simple, a pretty simple resistor network
+
+00:10:38.720 --> 00:10:42.159
+with 1 kilo ohm and 10 kilo ohm resistors,
+
+00:10:42.160 --> 00:10:48.959
+and using the loop methods, we are calculating the currents,
+
+00:10:48.960 --> 00:10:52.759
+the current in each loop, and then that current can be used
+
+00:10:52.760 --> 00:10:58.839
+to solve for the voltage of each individual resistor
+
+00:10:58.840 --> 00:11:06.199
+if we want to. So at the bottom there we have the equations
+
+00:11:06.200 --> 00:11:11.519
+that we come up with as we work through each loop.
+
+00:11:11.520 --> 00:11:19.579
+And I'm going to paste that into Calc.
+
+00:11:19.580 --> 00:11:22.719
+To save some time, I'm going to copy and paste that
+
+00:11:22.720 --> 00:11:34.259
+from my notes instead of typing it out.
+
+00:11:34.260 --> 00:11:38.259
+So we have two equations there on the stack
+
+00:11:38.260 --> 00:11:44.719
+in one stack entry. We run that calc-solve-for function again,
+
+00:11:44.720 --> 00:11:49.899
+and we tell it which variables we want to solve for.
+
+00:11:49.900 --> 00:11:51.959
+And voila! Those are our currents,
+
+00:11:51.960 --> 00:11:55.719
+which we can then use to get the voltages
+
+00:11:55.720 --> 00:12:00.079
+for the individual resistors.
+
+NOTE calc-find-root
+
+00:12:00.080 --> 00:12:01.999
+I'll just briefly mention
+
+00:12:02.000 --> 00:12:05.839
+that if Calc is not able to solve an equation
+
+00:12:05.840 --> 00:12:07.779
+with calc-solve-for,
+
+00:12:07.780 --> 00:12:10.279
+then you might be helped by another calc function
+
+00:12:10.280 --> 00:12:11.559
+called calc-find-root.
+
+00:12:11.560 --> 00:12:14.439
+This function basically does a manual search
+
+00:12:14.440 --> 00:12:30.199
+for a numerical solution to the equation.
+
+00:12:30.200 --> 00:12:39.959
+And there's the documentation page on that.
+
+NOTE Derivatives and integrals
+
+00:12:39.960 --> 00:12:44.039
+Calc can also solve or find derivatives of functions,
+
+00:12:44.040 --> 00:12:47.579
+at least the more straightforward functions.
+
+00:12:47.580 --> 00:12:49.839
+For a simple example,
+
+00:12:49.840 --> 00:13:00.559
+we can get the derivative of that
+
+00:13:00.560 --> 00:13:11.979
+with the derivative function.
+
+00:13:11.980 --> 00:13:17.159
+On the other hand, Calc is also capable of figuring out
+
+00:13:17.160 --> 00:13:22.099
+indefinite integrals.
+
+00:13:22.100 --> 00:13:26.859
+Say we put that function back on the stack,
+
+00:13:26.860 --> 00:13:32.559
+and this time, we call the integral function.
+
+00:13:32.560 --> 00:13:35.079
+There you go. Of course, you have to add
+
+00:13:35.080 --> 00:13:39.819
+your own constant of integration.
+
+00:13:39.820 --> 00:13:43.399
+For integrals that Calc cannot figure out symbolically,
+
+00:13:43.400 --> 00:13:46.079
+a numerical integration method is available
+
+00:13:46.080 --> 00:13:59.998
+through the calc-num-integral command, which is documented...
+
+00:13:59.999 --> 00:14:17.539
+The function documentation is available here, more or less.
+
+NOTE Programmable functions
+
+00:14:17.540 --> 00:14:20.399
+I definitely need to mention
+
+00:14:20.400 --> 00:14:24.759
+that Calc is capable of doing programmable functions.
+
+00:14:24.760 --> 00:14:29.619
+That is to say, you can program your own functions into Calc.
+
+00:14:29.620 --> 00:14:32.239
+There are three separate ways to do this.
+
+00:14:32.240 --> 00:14:36.279
+One is through a macro method
+
+00:14:36.280 --> 00:14:41.539
+similar to Emacs's usual keyboard macros.
+
+00:14:41.540 --> 00:14:46.519
+The second method is to transform an algebraic function
+
+00:14:46.520 --> 00:14:50.859
+into a stored function definition.
+
+00:14:50.860 --> 00:14:54.059
+And the third is to use Elisp directly.
+
+00:14:54.060 --> 00:14:56.599
+Personally, I find that the second method
+
+00:14:56.600 --> 00:15:01.799
+is the most practical, the most convenient and practical
+
+00:15:01.800 --> 00:15:08.059
+in my opinion. So I'll give a quick example of that.
+
+00:15:08.060 --> 00:15:14.159
+So I could... Let's say I wanted to have a function
+
+00:15:14.160 --> 00:15:20.699
+for calculating capacitive reactance.
+
+00:15:20.700 --> 00:15:28.899
+I'll define that in algebraic mode first.
+
+00:15:28.900 --> 00:15:33.639
+The function for that is 1 over 2 pi
+
+00:15:33.640 --> 00:15:41.599
+the frequency and the capacitance.
+
+00:15:41.600 --> 00:15:44.959
+Drop that on the stack. You see, it does automatically
+
+00:15:44.960 --> 00:15:52.079
+get simplified a little bit, but it's the same function.
+
+00:15:52.080 --> 00:15:58.839
+And then I press letters Z and F. Do that again.
+
+00:15:58.840 --> 00:16:06.239
+Z and F to start transforming that into a stored function.
+
+00:16:06.240 --> 00:16:11.039
+It asks me to select a user key, a single key press.
+
+00:16:11.040 --> 00:16:15.479
+I'll use the letter c.
+
+00:16:15.480 --> 00:16:19.079
+Then it's going to ask for a longer command name.
+
+00:16:19.080 --> 00:16:24.639
+I've actually defined this once before, so it prefilled in
+
+00:16:24.640 --> 00:16:38.339
+that command name.
+
+00:16:38.340 --> 00:16:42.999
+Then I need to enter which variables in the formula
+
+00:16:43.000 --> 00:16:46.559
+are actual arguments, rather than just symbols
+
+00:16:46.560 --> 00:16:52.559
+to be evaluated later. I prefer to put this in with frequency
+
+00:16:52.560 --> 00:16:54.279
+and the capacitance after that,
+
+00:16:54.280 --> 00:16:57.799
+but actually in this particular case,
+
+00:16:57.800 --> 00:17:07.339
+it doesn't matter at all to the mathematics.
+
+00:17:07.340 --> 00:17:11.399
+So, now all I have to do, that this is defined,
+
+00:17:11.400 --> 00:17:15.199
+is I can drop the frequency on the stack,
+
+00:17:15.200 --> 00:17:24.399
+which we'll say, for this example, will be 4.5 MHz,
+
+00:17:24.400 --> 00:17:32.279
+and then drop on the capacitance, which in this example
+
+00:17:32.280 --> 00:17:40.319
+will be 22 pF.
+
+00:17:40.320 --> 00:17:42.439
+Then I'll call the function that I just defined.
+
+00:17:42.440 --> 00:17:45.239
+I don't really like having to try to remember
+
+00:17:45.240 --> 00:17:48.679
+the short letters that I've come up with,
+
+00:17:48.680 --> 00:17:57.839
+so I'll just use the longer name.
+
+00:17:57.840 --> 00:17:59.799
+I need to evaluate one more time
+
+00:17:59.800 --> 00:18:05.619
+because the symbol pi is in there and not yet evaluated.
+
+00:18:05.620 --> 00:18:07.539
+And so if I've done that right,
+
+00:18:07.540 --> 00:18:12.159
+we have a capacitive reactance of about 1600 ohms.
+
+NOTE Plotting
+
+00:18:12.160 --> 00:18:16.839
+As the last feature that I'll mention here,
+
+00:18:16.840 --> 00:18:24.059
+Emacs Calc does have an interface with gnuplot,
+
+00:18:24.060 --> 00:18:30.799
+if you want to have Calc work as your graphing calculator.
+
+00:18:30.800 --> 00:18:33.159
+I do need to be honest and mention
+
+00:18:33.160 --> 00:18:35.579
+that I don't generally use it myself
+
+00:18:35.580 --> 00:18:39.719
+because there's another program in GNOME
+
+00:18:39.720 --> 00:18:43.499
+that I've found to be generally more convenient
+
+00:18:43.500 --> 00:18:47.399
+for the things that I want to graph quickly.
+
+00:18:47.400 --> 00:18:53.399
+But I think I can give you a simple example.
+
+00:18:53.400 --> 00:19:00.339
+So first, we need to drop a range on the stack.
+
+00:19:00.340 --> 00:19:06.619
+Let's say 0 to 10.
+
+00:19:06.620 --> 00:19:11.639
+And then we need to drop the function on the stack.
+
+00:19:11.640 --> 00:19:17.839
+And then I believe it's the letters g and f that graph this.
+
+00:19:17.840 --> 00:19:22.319
+Let's see. Yep, there we go.
+
+00:19:22.320 --> 00:19:25.059
+So there's our function and it looks nice.
+
+00:19:25.060 --> 00:19:26.659
+That was pretty easy.
+
+00:19:26.660 --> 00:19:29.019
+That's the fast way to do it.
+
+00:19:29.020 --> 00:19:32.839
+I will, as a disclaimer, mention that
+
+00:19:32.840 --> 00:19:34.159
+using this quick approach,
+
+00:19:34.160 --> 00:19:38.759
+that sometimes more complicated graphs
+
+00:19:38.760 --> 00:19:39.999
+will not turn out nicely,
+
+00:19:40.000 --> 00:19:44.339
+because by default, the resolution will be pretty low.
+
+00:19:44.340 --> 00:19:48.119
+That is to say it's... gnuplot is going to be
+
+00:19:48.120 --> 00:19:49.899
+skipping a lot of points
+
+00:19:49.900 --> 00:19:52.039
+and so you'll have to learn a bit more
+
+00:19:52.040 --> 00:19:55.319
+about how to use the interface,
+
+00:19:55.320 --> 00:19:59.519
+what parameters to pass if you want all your graphs
+
+00:19:59.520 --> 00:20:03.699
+to come out looking nice.
+
+00:20:03.700 --> 00:20:08.799
+So that covers all the features that I wanted to cover.
+
+NOTE Wish list
+
+00:20:08.800 --> 00:20:13.279
+I wanted to briefly mention a wish list of items
+
+00:20:13.280 --> 00:20:16.679
+that I'd like to see in Calc.
+
+00:20:16.680 --> 00:20:23.639
+One of them would be improper integrals.
+
+00:20:23.640 --> 00:20:25.159
+So that's like our definite integrals
+
+00:20:25.160 --> 00:20:32.859
+except for where a limit of integration is infinity.
+
+00:20:32.860 --> 00:20:38.559
+That's something that can be useful in a few applications.
+
+00:20:38.560 --> 00:20:41.079
+Something else that would be neat to have would be
+
+00:20:41.080 --> 00:20:45.679
+annotations for row entries. So for example
+
+00:20:45.680 --> 00:20:48.819
+if I was putting together a sum of numbers
+
+00:20:48.820 --> 00:20:53.279
+for, say, my monthly budget,
+
+00:20:53.280 --> 00:20:57.479
+let's say I was paying $2,000 for my rent
+
+00:20:57.480 --> 00:21:03.831
+and let's say $800 a month for my groceries,
+
+00:21:03.832 --> 00:21:07.931
+(a lot of kids to feed there)
+
+00:21:07.932 --> 00:21:14.565
+and then say another $60 for dining out, and so on,
+
+00:21:14.566 --> 00:21:18.259
+it would be nice if there was some way
+
+00:21:18.260 --> 00:21:21.319
+to put a little annotation next to each number
+
+00:21:21.320 --> 00:21:23.399
+so that you could remember
+
+00:21:23.400 --> 00:21:27.039
+what the meaning of that number was more easily.
+
+00:21:27.040 --> 00:21:31.199
+I actually looked into programming this into Calc myself,
+
+00:21:31.200 --> 00:21:35.919
+but discovered that it would require reprogramming
+
+00:21:35.920 --> 00:21:41.839
+quite a bit of Calc to make that work well
+
+00:21:41.840 --> 00:21:43.479
+across all calc functionality,
+
+00:21:43.480 --> 00:21:46.939
+and so, eventually, I gave up.
+
+00:21:46.940 --> 00:21:51.139
+But I'd still really like to have that feature.
+
+00:21:51.140 --> 00:21:52.039
+The final thing, though
+
+00:21:52.040 --> 00:21:54.579
+I think this would not necessarily belong in Calc,
+
+00:21:54.580 --> 00:21:57.919
+I think it would be cool if Emacs had some way
+
+00:21:57.920 --> 00:22:00.599
+to run numerical solutions
+
+00:22:00.600 --> 00:22:02.599
+for systems of differential equations,
+
+00:22:02.600 --> 00:22:06.019
+also known as a differential analyzer.
+
+00:22:06.020 --> 00:22:09.279
+So this would allow you to be able to set up simulation models
+
+00:22:09.280 --> 00:22:11.679
+involving systems of differential equations,
+
+00:22:11.680 --> 00:22:14.879
+for example, a spring mass system, or pressure temperature,
+
+00:22:14.880 --> 00:22:18.039
+or what have you, and then run the simulation
+
+00:22:18.040 --> 00:22:22.119
+using numerical approximation.
+
+00:22:22.120 --> 00:22:24.079
+Maybe it would be silly
+
+00:22:24.080 --> 00:22:25.999
+to actually put that in Calc itself,
+
+00:22:26.000 --> 00:22:30.339
+but a nice interface maybe to some other software,
+
+00:22:30.340 --> 00:22:33.299
+simple software that did that,
+
+00:22:33.300 --> 00:22:35.779
+an easy to use interface for that
+
+00:22:35.780 --> 00:22:38.599
+would be really great.
+
+NOTE Wrapping up
+
+00:22:38.600 --> 00:22:41.800
+So that's my entire talk.
+
+00:22:41.801 --> 00:22:44.534
+I'll just mention some information.
+
+00:22:44.535 --> 00:22:48.365
+If you want to learn more about me
+
+00:22:48.366 --> 00:22:50.119
+or things that I'm interested in,
+
+00:22:50.120 --> 00:22:57.779
+I do not any longer have a web presence.
+
+00:22:57.780 --> 00:22:59.659
+I don't have a website anymore,
+
+00:22:59.660 --> 00:23:03.359
+but I do have a Gemini capsule
+
+00:23:03.360 --> 00:23:07.139
+that I post to all the time.
+
+00:23:07.140 --> 00:23:13.879
+And if you can install, if you're willing to install the...
+
+00:23:13.880 --> 00:23:19.079
+Gemini browser known as Elpher
+
+00:23:19.080 --> 00:23:23.698
+into Emacs, which is available from ELPA,
+
+00:23:23.699 --> 00:23:27.359
+then you can browse directly to it
+
+00:23:27.360 --> 00:23:31.439
+and look around my Gemini capsule.
+
+00:23:31.440 --> 00:23:35.920
+Thank you very much.
diff --git a/2025/captions/emacsconf-2025-commonlisp--common-lisp-images-communicating-likeahuman-through-shared-emacs-slime-and-eev--screwlisp--answers.vtt b/2025/captions/emacsconf-2025-commonlisp--common-lisp-images-communicating-likeahuman-through-shared-emacs-slime-and-eev--screwlisp--answers.vtt
new file mode 100644
index 00000000..eaf3a04e
--- /dev/null
+++ b/2025/captions/emacsconf-2025-commonlisp--common-lisp-images-communicating-likeahuman-through-shared-emacs-slime-and-eev--screwlisp--answers.vtt
@@ -0,0 +1,1051 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:04.599
+Recording started.
+
+00:00:04.600 --> 00:00:07.199
+Great. All right, you are live in Common Lisp on dev.
+
+00:00:07.200 --> 00:00:14.399
+This is Corwin back and I've got screwlisp with me,
+
+00:00:14.400 --> 00:00:18.759
+the host of the Lispy Gopher... Climate, I like to say.
+
+00:00:18.760 --> 00:00:20.319
+It used to be show.
+
+00:00:20.320 --> 00:00:24.679
+The Lispy Gopher show or the Lispy Gopher Climate.
+
+00:00:24.680 --> 00:00:31.119
+Thank you so much for joining us. Minutes.
+
+00:00:31.120 --> 00:00:33.639
+Yeah, we're just, we've got already
+
+00:00:33.640 --> 00:00:35.359
+a whole pad full of questions
+
+00:00:35.360 --> 00:00:38.039
+and we have a unique opportunity if you,
+
+00:00:38.040 --> 00:00:39.159
+if you check out the etherpad,
+
+00:00:39.160 --> 00:00:42.239
+you'll see some instructions there to join on Lambda Moo,
+
+00:00:42.240 --> 00:00:43.039
+which screwless,
+
+00:00:43.040 --> 00:00:46.319
+but I'm hoping you will talk to us a little bit about that
+
+00:00:46.320 --> 00:00:48.879
+as well as your, your very cool project.
+
+00:00:48.880 --> 00:00:52.839
+Oh yeah, so I main on Lambda, as Corwin is saying.
+
+00:00:52.840 --> 00:00:55.639
+And Corwin was pretending not to know the name of the show,
+
+00:00:55.640 --> 00:00:59.399
+but he has in fact appeared on an episode of it
+
+00:00:59.400 --> 00:01:00.879
+in January this year, I think.
+
+00:01:00.880 --> 00:01:04.919
+So he was just pretending there. I'm screwless of this.
+
+00:01:04.920 --> 00:01:06.919
+What's happening?
+
+00:01:06.920 --> 00:01:13.439
+10 minutes or less before we started going live here,
+
+00:01:13.440 --> 00:01:16.159
+they were like, remember how you said you fixed that bug?
+
+00:01:16.160 --> 00:01:21.479
+And then I had to quickly recapitulate my whole talk.
+
+00:01:21.480 --> 00:01:23.719
+And I introduced some new bugs while that was happening.
+
+00:01:23.720 --> 00:01:26.199
+But let's go through some of these questions.
+
+00:01:26.200 --> 00:01:29.479
+We're all hanging out in LambdaMoo.
+
+00:01:29.480 --> 00:01:37.639
+So if you mx telnet over to lambda.moo.mud.org port 8888.
+
+00:01:37.640 --> 00:01:40.279
+This is where we're talking at the moment
+
+00:01:40.280 --> 00:01:45.399
+with people like Ed Swarthout, DM, and yduJ,
+
+00:01:45.400 --> 00:01:47.559
+who I gossiped about in the show,
+
+00:01:47.560 --> 00:01:50.519
+and Sasha, and people were there a little bit as well.
+
+00:01:50.520 --> 00:01:53.359
+I'm just going to read some of the questions
+
+00:01:53.360 --> 00:01:59.759
+that GGXX in Lambdomoo has been relaying to me there,
+
+00:01:59.760 --> 00:02:08.239
+though I hear that there are a whole bunch of them now.
+
+00:02:08.240 --> 00:02:09.759
+Someone asks on the Etherpad,
+
+00:02:09.760 --> 00:02:13.199
+what do you mean when I say the agent is running slowly?
+
+00:02:13.200 --> 00:02:17.119
+Yeah, so if you saw in the talk,
+
+00:02:17.120 --> 00:02:19.639
+I was having the agent only attempt
+
+00:02:19.640 --> 00:02:21.959
+to act every 20 seconds.
+
+00:02:21.960 --> 00:02:25.399
+This is what I mean by the agent is acting slowly.
+
+00:02:25.400 --> 00:02:26.599
+So this is quite different
+
+00:02:26.600 --> 00:02:28.599
+to what people might expect within AI
+
+00:02:28.600 --> 00:02:30.679
+if people are talking about like the graphics card ones
+
+00:02:30.680 --> 00:02:33.599
+where you're trying crunch as fast as you can
+
+00:02:33.600 --> 00:02:36.399
+for as few seconds as you can, and then you stop.
+
+00:02:36.400 --> 00:02:39.399
+In contrast, my agent is just trying to do
+
+00:02:39.400 --> 00:02:42.279
+a simple action every 20 seconds.
+
+00:02:42.280 --> 00:02:45.119
+But if you keep going continuously
+
+00:02:45.120 --> 00:02:47.919
+at a simple action every 20 seconds
+
+00:02:47.920 --> 00:02:49.959
+without sleeping for days,
+
+00:02:49.960 --> 00:02:51.239
+it still adds up to a lot.
+
+00:02:51.240 --> 00:02:57.039
+So that was the significance of it running slowly.
+
+00:02:57.040 --> 00:03:00.639
+What else are people saying? TGXX to screwtape.
+
+00:03:00.640 --> 00:03:02.519
+Someone asked on the Etherpad,
+
+00:03:02.520 --> 00:03:04.759
+do you think that it would be too hard
+
+00:03:04.760 --> 00:03:06.439
+to add a second way
+
+00:03:06.440 --> 00:03:09.959
+to send commands from Common Lisps to Emacs?
+
+00:03:09.960 --> 00:03:12.919
+No, I put three of them together
+
+00:03:12.920 --> 00:03:14.559
+and I didn't talk about it
+
+00:03:14.560 --> 00:03:17.239
+because this is a kind of affected choice.
+
+00:03:17.240 --> 00:03:20.039
+Right now you're using Emacs client for that.
+
+00:03:20.040 --> 00:03:22.039
+That is the simplest way to implement.
+
+00:03:22.040 --> 00:03:24.039
+How about using the slime protocol?
+
+00:03:24.040 --> 00:03:28.799
+Elsewhere, I am just using the SLIME protocol.
+
+00:03:28.800 --> 00:03:31.639
+So, in everyone that's SLIME-connected.
+
+00:03:31.640 --> 00:03:33.399
+So, earlier on, you saw somebody
+
+00:03:33.400 --> 00:03:35.399
+running a SWANK server in Python.
+
+00:03:35.400 --> 00:03:38.439
+Normally, you run a SWANK server in Common Lisp.
+
+00:03:38.440 --> 00:03:41.599
+And a SWANK server is what Emacs SLIME,
+
+00:03:41.600 --> 00:03:45.039
+Superior Lisp Interaction Mode for Emacs, connects to.
+
+00:03:45.040 --> 00:03:49.039
+And then Swank comes with Swank Eval and Emacs.
+
+00:03:49.040 --> 00:03:50.959
+So after you've been slime connected,
+
+00:03:50.960 --> 00:03:55.039
+you can trivially send Emacs Lisp forms to Emacs
+
+00:03:55.040 --> 00:03:57.319
+using Swank Eval and Emacs.
+
+00:03:57.320 --> 00:04:00.679
+The reason that I chose to use
+
+00:04:00.680 --> 00:04:05.199
+Emacs server and Emacs client
+
+00:04:05.200 --> 00:04:14.039
+was that I was letting the Leonardo agent
+
+00:04:14.040 --> 00:04:18.799
+talk to Emacs using Swank, Eval, and Emacs.
+
+00:04:18.800 --> 00:04:21.599
+And I wanted my ECL image to be using
+
+00:04:21.600 --> 00:04:23.119
+a different notion of a server.
+
+00:04:23.120 --> 00:04:27.039
+So the ECL image, just because
+
+00:04:27.040 --> 00:04:28.959
+I chose to do it like this,
+
+00:04:28.960 --> 00:04:33.279
+is using Emacs client and Emacs server going via,
+
+00:04:33.280 --> 00:04:35.239
+I guess it's executing a program
+
+00:04:35.240 --> 00:04:36.439
+rather than using a shell.
+
+00:04:36.440 --> 00:04:40.639
+And Yeah, I was letting somebody else
+
+00:04:40.640 --> 00:04:42.439
+use Slime eval in Emacs.
+
+00:04:42.440 --> 00:04:45.039
+It would have been simpler
+
+00:04:45.040 --> 00:04:48.319
+if everybody just used Slime eval in Emacs.
+
+00:04:48.320 --> 00:04:50.919
+I thought I was getting something
+
+00:04:50.920 --> 00:04:56.079
+out of adding Emacs server into the mix.
+
+00:04:56.080 --> 00:04:57.319
+What's somebody saying?
+
+00:04:57.320 --> 00:05:00.319
+Idaj is weirded out by doing get foo bar
+
+00:05:00.320 --> 00:05:02.439
+instead of get foo quote bar.
+
+00:05:02.440 --> 00:05:04.359
+Yeah, that was Sandewall's choice.
+
+00:05:04.360 --> 00:05:06.679
+He was trying to pitch Lisp
+
+00:05:06.680 --> 00:05:09.159
+to logic notation people,
+
+00:05:09.160 --> 00:05:12.319
+so he lets people put commas in
+
+00:05:12.320 --> 00:05:15.559
+and then ignores them in certain expressions,
+
+00:05:15.560 --> 00:05:18.679
+and he doesn't have these Lisp-style quotes.
+
+00:05:18.680 --> 00:05:22.439
+Idaj is obviously from like Schlumberger
+
+00:05:22.440 --> 00:05:24.879
+and wherever else she was at in
+
+00:05:24.880 --> 00:05:28.039
+in the kind of list of traditions.
+
+00:05:28.040 --> 00:05:30.359
+Full of Spain is saying good observation.
+
+00:05:30.360 --> 00:05:33.839
+Yidaj is shocked that she's being mentioned.
+
+00:05:33.840 --> 00:05:40.519
+Interestingly Nosredna yduJ capitalizes Nosredna at the front,
+
+00:05:40.520 --> 00:05:45.079
+but she capitalizes yduJ at the back, just for clarity.
+
+00:05:45.080 --> 00:05:49.199
+You should read her Stanford page or her recipe site
+
+00:05:49.200 --> 00:05:57.999
+or anything if you're not clear on who yduJ is.
+
+00:05:58.000 --> 00:06:00.679
+It's actually you're looking for the word eclipsed.
+
+00:06:00.680 --> 00:06:03.559
+I think she eclipsed a dodge,
+
+00:06:03.560 --> 00:06:06.119
+I think is the English phrase that you're looking for.
+
+00:06:06.120 --> 00:06:08.839
+He does just saying she would not.
+
+00:06:08.840 --> 00:06:10.519
+She's no matter what I say
+
+00:06:10.520 --> 00:06:13.039
+she's not going to hug my software agent
+
+00:06:13.040 --> 00:06:20.719
+like she would hug a grandchild eyes me warily.
+
+00:06:20.720 --> 00:06:22.119
+And Sasha is not going to.
+
+00:06:22.120 --> 00:06:24.759
+Totally not training a general intelligence
+
+00:06:24.760 --> 00:06:26.199
+who requires a lot of data
+
+00:06:26.200 --> 00:06:28.959
+and also cuddles. Okay, so everybody who has children
+
+00:06:28.960 --> 00:06:31.599
+is disagreeing with me quoting Sandewall,
+
+00:06:31.600 --> 00:06:33.319
+who did have children and grandchildren,
+
+00:06:33.320 --> 00:06:36.119
+saying that he wanted machine intelligences
+
+00:06:36.120 --> 00:06:37.759
+to be like his grandchild.
+
+00:06:37.760 --> 00:06:40.839
+GGXX is saying somebody on Etherpad
+
+00:06:40.840 --> 00:06:43.119
+is asking what the Leonardo system is.
+
+00:06:43.120 --> 00:06:46.599
+Sandewall is a LISP scientist
+
+00:06:46.600 --> 00:06:51.159
+from the 60s, 70s, 80s, 90s, 90s, 10s.
+
+00:06:51.160 --> 00:06:55.599
+with things like bronze statues of him in Sweden.
+
+00:06:55.600 --> 00:06:59.599
+People outside of the Swedish-speaking sphere of science
+
+00:06:59.600 --> 00:07:01.119
+are less familiar with him.
+
+00:07:01.120 --> 00:07:04.119
+I guess he famously taught Robert Strand
+
+00:07:04.120 --> 00:07:08.319
+how to program in LISP, if that places him for you.
+
+00:07:08.320 --> 00:07:10.199
+What else did he do?
+
+00:07:10.200 --> 00:07:15.599
+Yeah, so he was on a kind of long trajectory of AI,
+
+00:07:15.600 --> 00:07:18.039
+which would now be called good old-fashioned AI.
+
+00:07:18.040 --> 00:07:22.639
+And he was coming from the situation calculus,
+
+00:07:22.640 --> 00:07:26.559
+then activity calculus kind of direction,
+
+00:07:26.560 --> 00:07:28.759
+which are extended first order logics
+
+00:07:28.760 --> 00:07:31.559
+for reasoning about change over time.
+
+00:07:31.560 --> 00:07:35.759
+And his last program he contributed to the world was this.
+
+00:07:35.760 --> 00:07:39.319
+From 2005 to 2014, he worked on
+
+00:07:39.320 --> 00:07:43.479
+this Leonardo system for his master's program.
+
+00:07:43.480 --> 00:07:45.279
+He was teaching at that time
+
+00:07:45.280 --> 00:07:48.519
+at the University of Linköping in Sweden.
+
+00:07:48.520 --> 00:07:53.199
+And... Then he just kind of gradually faded from view
+
+00:07:53.200 --> 00:07:55.519
+while he wrote his unpublished books
+
+00:07:55.520 --> 00:08:01.639
+on reasoning and change, I guess, between 2010 and 2014.
+
+00:08:01.640 --> 00:08:03.959
+And then I just kind of noticed this eventually.
+
+00:08:03.960 --> 00:08:07.839
+And I brought that software back. And that's what this is.
+
+00:08:07.840 --> 00:08:09.999
+And that's why it kind of weirdly exists.
+
+00:08:10.000 --> 00:08:15.479
+Welcome to Khaki Guest. Magenta Guest is gone.
+
+00:08:15.480 --> 00:08:16.759
+Pink Guest is gone.
+
+00:08:16.760 --> 00:08:23.639
+Blue Guest has arrived. Great. Somebody order six.
+
+00:08:23.640 --> 00:08:26.239
+Everybody orders sake from Emily.
+
+00:08:26.240 --> 00:08:29.599
+We're hanging out in Jay Lamott's sushi bar in Lambda,
+
+00:08:29.600 --> 00:08:31.639
+which is on the model railway
+
+00:08:31.640 --> 00:08:35.599
+on the table in the second guest bedroom in Lambda House
+
+00:08:35.600 --> 00:08:36.639
+where we're all hanging out.
+
+00:08:36.640 --> 00:08:43.559
+Oh, I think GGXX is ordering people up things.
+
+00:08:43.560 --> 00:08:46.399
+You know, just teach people about this.
+
+00:08:46.400 --> 00:08:52.279
+All right, I'm going to try looking
+
+00:08:52.280 --> 00:08:55.519
+at the etherpad manually. Sorry, I can read you.
+
+00:08:55.520 --> 00:08:57.319
+So the next question you have,
+
+00:08:57.320 --> 00:09:00.479
+somebody says, I found Eduardo's blog.
+
+00:09:00.480 --> 00:09:03.199
+OK, you just got through that.
+
+00:09:03.200 --> 00:09:06.199
+And then we were also, a question you answered
+
+00:09:06.200 --> 00:09:10.799
+is the other one that I see here, just about Lambda Moo.
+
+00:09:10.800 --> 00:09:14.199
+And I think you started to answer in the pad.
+
+00:09:14.200 --> 00:09:16.079
+But if you want to kind of read that out.
+
+00:09:16.080 --> 00:09:19.119
+I definitely haven't written anything in the pad.
+
+00:09:19.120 --> 00:09:23.719
+I'm going to just talk to Khaki Guest in Lambda.
+
+00:09:23.720 --> 00:09:25.879
+Sure, so why don't you do a little bit
+
+00:09:25.880 --> 00:09:27.279
+and just read this question.
+
+00:09:27.280 --> 00:09:31.279
+The question was, what is LambdaMOO and how do we use it?
+
+00:09:31.280 --> 00:09:33.399
+LambdaMOO is a module introduction,
+
+00:09:33.400 --> 00:09:35.319
+and you can tell that to it.
+
+00:09:35.320 --> 00:09:36.799
+There's instructions in the pad.
+
+00:09:36.800 --> 00:09:40.039
+I'll go ahead and drop that in the gen channel
+
+00:09:40.040 --> 00:09:42.599
+or in the dev channel chat right now.
+
+00:09:42.600 --> 00:09:46.919
+And I see it is already in there.
+
+00:09:46.920 --> 00:09:49.559
+But down at the bottom
+
+00:09:49.560 --> 00:09:53.439
+of the discussion links feedback area,
+
+00:09:53.440 --> 00:09:55.679
+you'll see a set of detailed instructions
+
+00:09:55.680 --> 00:09:58.519
+that ScrewList has provided us to get in there.
+
+00:09:58.520 --> 00:10:01.159
+I think that was actually GGXX
+
+00:10:01.160 --> 00:10:03.959
+who might have written that for us.
+
+00:10:03.960 --> 00:10:08.039
+Several changes evolved in the last 10 minutes
+
+00:10:08.040 --> 00:10:09.679
+before we went live here.
+
+00:10:09.680 --> 00:10:12.839
+But yeah, so LambdaMoo is
+
+00:10:12.840 --> 00:10:14.879
+the world's longest-running virtual reality.
+
+00:10:14.880 --> 00:10:19.119
+I guess it started in the end of October in 1990
+
+00:10:19.120 --> 00:10:21.759
+and has run continuously to today.
+
+00:10:21.760 --> 00:10:24.599
+You can get there, ideally, with a MUD client.
+
+00:10:24.600 --> 00:10:27.479
+Technically, it's a MUD, comma, object-oriented.
+
+00:10:27.480 --> 00:10:30.199
+This is just where I hang out some degree of the week.
+
+00:10:30.200 --> 00:10:36.799
+yduJ is the wizard yduJ, or sorry,
+
+00:10:36.800 --> 00:10:40.919
+yduJ is also the wizard Nosredna of Lambdomoo, for example.
+
+00:10:40.920 --> 00:10:44.479
+It kind of fits into quite less history.
+
+00:10:44.480 --> 00:10:47.679
+I guess Pavel Curtis would have started in 1990
+
+00:10:47.680 --> 00:10:52.799
+for Xerox PARC, originally. Just to go to what Khaki Guest
+
+00:10:52.800 --> 00:10:54.839
+has been continuing to talk about.
+
+00:10:54.840 --> 00:10:57.799
+Welcome to Brown, Guest, as well, I guess.
+
+00:10:57.800 --> 00:11:03.399
+Aki Guest says, to Screwtape,
+
+00:11:03.400 --> 00:11:04.959
+it seems like you're trying to build
+
+00:11:04.960 --> 00:11:07.279
+a more restrictive Turing test
+
+00:11:07.280 --> 00:11:11.159
+using the input output logs of an Emacs conversation.
+
+00:11:11.160 --> 00:11:12.159
+Is that accurate?
+
+00:11:12.160 --> 00:11:15.079
+Can you explain this idea of if it is intelligent,
+
+00:11:15.080 --> 00:11:17.239
+I'd like it to be like me?
+
+00:11:17.240 --> 00:11:20.039
+Otherwise, I don't know what intelligence is.
+
+00:11:20.040 --> 00:11:21.959
+Doesn't that seem a little egocentric?
+
+00:11:21.960 --> 00:11:25.399
+Is that a joke or a genuine definition of intelligence?
+
+00:11:25.400 --> 00:11:27.439
+Why do you think the link between
+
+00:11:27.440 --> 00:11:30.519
+input-output of Emacs human input-output
+
+00:11:30.520 --> 00:11:33.919
+is stronger than other forms of Turing tests?
+
+00:11:33.920 --> 00:11:36.319
+So I'm going to misread Turing tests
+
+00:11:36.320 --> 00:11:37.839
+for a moment as Turing-complete.
+
+00:11:37.840 --> 00:11:40.279
+And Sandewall's system is very specifically
+
+00:11:40.280 --> 00:11:45.519
+Our first-order logic, if we don't extend it,
+
+00:11:45.520 --> 00:11:49.239
+is not Turing-complete, for starters.
+
+00:11:49.240 --> 00:11:51.959
+And things like situation calculus,
+
+00:11:51.960 --> 00:11:53.839
+McCarthy's situation calculus,
+
+00:11:53.840 --> 00:11:55.239
+which I guess is prior to
+
+00:11:55.240 --> 00:11:58.439
+Sandewall's Leonardo's calculus,
+
+00:11:58.440 --> 00:12:02.319
+are extended first-order logics
+
+00:12:02.320 --> 00:12:03.959
+for reasoning about change.
+
+00:12:03.960 --> 00:12:05.519
+And so they're slightly
+
+00:12:05.520 --> 00:12:07.639
+more restricted than conventional,
+
+00:12:07.640 --> 00:12:10.239
+than general-purpose computer programs.
+
+00:12:10.240 --> 00:12:14.639
+And then what you're saying is, if it's intelligent,
+
+00:12:14.640 --> 00:12:16.119
+I'd expect it to be like me.
+
+00:12:16.120 --> 00:12:19.799
+I'm really just paraphrasing what Sandewall says about,
+
+00:12:19.800 --> 00:12:23.319
+well, he thinks his grandchildren are intelligent.
+
+00:12:23.320 --> 00:12:24.759
+So if a computer is intelligent,
+
+00:12:24.760 --> 00:12:26.239
+he thinks the computer will have to be
+
+00:12:26.240 --> 00:12:28.039
+similar to his grandchildren.
+
+00:12:28.040 --> 00:12:32.279
+This is in contrast to people
+
+00:12:32.280 --> 00:12:33.839
+who are using the terms AI
+
+00:12:33.840 --> 00:12:37.319
+to mean something a graphics card does
+
+00:12:37.320 --> 00:12:41.319
+with extremely specialized bulk matrix multiplication
+
+00:12:41.320 --> 00:12:43.919
+for a very short period of time
+
+00:12:43.920 --> 00:12:47.519
+on absolutely gigantic electrical
+
+00:12:47.520 --> 00:12:50.159
+and kind of memory and computing resources,
+
+00:12:50.160 --> 00:12:51.519
+which doesn't look at all like what
+
+00:12:51.520 --> 00:12:54.999
+Sandewall's grandchildren were doing.
+
+00:12:55.000 --> 00:12:56.399
+And this is why I'm kind of saying,
+
+00:12:56.400 --> 00:12:57.559
+well, if I have an agent,
+
+00:12:57.560 --> 00:13:00.839
+And my agent is quite simple.
+
+00:13:00.840 --> 00:13:04.519
+It uses Emacs server and Emacs client
+
+00:13:04.520 --> 00:13:07.559
+to send lines of basically extended
+
+00:13:07.560 --> 00:13:09.199
+first-order logic to the agent,
+
+00:13:09.200 --> 00:13:12.959
+and the agent then takes a kind of
+
+00:13:12.960 --> 00:13:15.399
+first-order logic-y action.
+
+00:13:15.400 --> 00:13:21.079
+And I was making the point
+
+00:13:21.080 --> 00:13:23.479
+that this looks more like me computing
+
+00:13:23.480 --> 00:13:27.519
+using of REPL-driven development like EEV,
+
+00:13:27.520 --> 00:13:30.479
+where in EEV I have basically a log
+
+00:13:30.480 --> 00:13:32.119
+of something I've previously done,
+
+00:13:32.120 --> 00:13:34.239
+and I can tap F8 and execute
+
+00:13:34.240 --> 00:13:36.479
+line after line after line.
+
+00:13:36.480 --> 00:13:38.839
+And I think if I see an agent doing that,
+
+00:13:38.840 --> 00:13:40.399
+I can clearly understand
+
+00:13:40.400 --> 00:13:43.639
+and relate to what the agent is doing.
+
+00:13:43.640 --> 00:13:45.519
+And so I'm not classifying
+
+00:13:45.520 --> 00:13:49.399
+Like, I never do gigabytes and gigabytes
+
+00:13:49.400 --> 00:13:52.279
+and gigabytes of matrix multiplications,
+
+00:13:52.280 --> 00:13:54.959
+so I can't relate to this as an idea of intelligence.
+
+00:13:54.960 --> 00:13:57.919
+Sorry. Welcome to GreenGuest teleporting in.
+
+00:13:57.920 --> 00:14:02.759
+FullSpain is saying, no one truly knows what intelligence is.
+
+00:14:02.760 --> 00:14:10.759
+All right. I kind of wished that this was working,
+
+00:14:10.760 --> 00:14:13.199
+because just before we went live, they said,
+
+00:14:13.200 --> 00:14:15.919
+hey, just have your example working quickly.
+
+00:14:15.920 --> 00:14:18.999
+Then I downloaded my example from my blog,
+
+00:14:19.000 --> 00:14:22.479
+and I'd double escaped some characters
+
+00:14:22.480 --> 00:14:26.799
+so that the escaped characters would show up in my blog.
+
+00:14:26.800 --> 00:14:29.759
+And I caused a lot of rampant chaos.
+
+00:14:29.760 --> 00:14:32.319
+If anyone else has a question.
+
+00:14:32.320 --> 00:14:40.759
+Guest has said, but. So. Great.
+
+00:14:40.760 --> 00:14:47.279
+I guess I could go back and try it.
+
+00:14:47.280 --> 00:14:50.399
+I probably should have jumped in a couple of minutes ago
+
+00:14:50.400 --> 00:14:53.279
+and just said the live stream did cut over,
+
+00:14:53.280 --> 00:14:54.919
+but we're continuing to record this
+
+00:14:54.920 --> 00:14:57.119
+and the whole session will be published
+
+00:14:57.120 --> 00:14:58.399
+along with the video on the website.
+
+00:14:58.400 --> 00:15:04.079
+Oh, well. Sorry about that. I tried that.
+
+00:15:04.080 --> 00:15:06.799
+I just lost a couple of minutes there
+
+00:15:06.800 --> 00:15:08.879
+and failed to give you the smooth morning.
+
+00:15:08.880 --> 00:15:14.199
+Oh, no, no. That's fine. I was just kind of rambling.
+
+00:15:14.200 --> 00:15:16.959
+Listen. Don't download a web page
+
+00:15:16.960 --> 00:15:19.799
+and try and convert it to an org file on the fly
+
+00:15:19.800 --> 00:15:21.959
+and just before you go live somewhere
+
+00:15:21.960 --> 00:15:23.319
+is the kind of moral here.
+
+00:15:23.320 --> 00:15:27.799
+You know, just saying that's pretty graphics, but it's long.
+
+00:15:27.800 --> 00:15:29.399
+She's dropping. See you later. Yeah.
+
+00:15:29.400 --> 00:15:31.239
+Let's, let's, let's all get out of here.
+
+00:15:31.240 --> 00:15:32.399
+Basically. I'm going to go see
+
+00:15:32.400 --> 00:15:36.159
+if I can look at this ether pad one last time
+
+00:15:36.160 --> 00:15:37.639
+and see if there are any questions
+
+00:15:37.640 --> 00:15:39.359
+just to not leave anyone else.
+
+00:15:39.360 --> 00:15:43.559
+Anyone out much to their chagrin possibly.
+
+00:15:43.560 --> 00:15:47.639
+Um, how to connect to LambdaMu, seems great.
+
+00:15:47.640 --> 00:15:52.159
+Oh, interesting guides, somebody wrote that.
+
+00:15:52.160 --> 00:15:55.439
+What do you mean by slowly? Yeah, so I'm saying taking
+
+00:15:55.440 --> 00:15:57.279
+a simple action every 20 seconds,
+
+00:15:57.280 --> 00:15:59.079
+this still adds up to a lot over time.
+
+00:15:59.080 --> 00:16:01.599
+Question, do you think that it would be,
+
+00:16:01.600 --> 00:16:04.079
+yeah, well, if you've used Slime,
+
+00:16:04.080 --> 00:16:05.959
+and hence you're using Swank,
+
+00:16:05.960 --> 00:16:07.239
+you can just Swank, Eval,
+
+00:16:07.240 --> 00:16:08.839
+and Emacs would be the more trivial way.
+
+00:16:08.840 --> 00:16:10.719
+I felt like I was getting something bonus
+
+00:16:10.720 --> 00:16:13.959
+by using, um, Emacs server.
+
+00:16:13.960 --> 00:16:17.359
+Somebody has a link to Eduardo's blog,
+
+00:16:17.360 --> 00:16:19.839
+which I think has been misspelled.
+
+00:16:19.840 --> 00:16:23.079
+It should be angkwu with no dot there,
+
+00:16:23.080 --> 00:16:27.199
+dot net, sharp sign EEV.
+
+00:16:27.200 --> 00:16:31.519
+So, Eduardo is the author of EEV mode.
+
+00:16:31.520 --> 00:16:33.079
+I found Eduardo's thing.
+
+00:16:33.080 --> 00:16:36.199
+Oh, this was the question, what is the Leonardo system,
+
+00:16:36.200 --> 00:16:38.479
+which I just answered.
+
+00:16:38.480 --> 00:16:42.959
+What is LambdaMOO? How do you use it?
+
+00:16:42.960 --> 00:16:45.559
+It's a mud, comma, object-oriented.
+
+00:16:45.560 --> 00:16:49.319
+So it's a multi-user dungeon kind of classical video game,
+
+00:16:49.320 --> 00:16:52.799
+still popular, but with extended object-oriented facilities.
+
+00:16:52.800 --> 00:16:57.359
+Companies like Harlequin, which yduJ
+
+00:16:57.360 --> 00:17:00.319
+and Ken Pitman, for example, were at, I think, in the 90s.
+
+00:17:00.320 --> 00:17:05.319
+Instead of modernly, you'd have Slack web apps or something.
+
+00:17:05.320 --> 00:17:08.079
+People used to have these MOOs and things.
+
+00:17:08.080 --> 00:17:15.519
+Okay, the music that's replaced me is evidently quite nice.
+
+00:17:15.520 --> 00:17:22.119
+Yes, get the hints. Thanks for being here.
+
+00:17:22.120 --> 00:17:29.359
+Well, let's continue this diatribe
+
+00:17:29.360 --> 00:17:33.639
+possibly on the Mastodon or something like that.
+
+00:17:33.640 --> 00:17:35.999
+We'll do some kind of...
+
+00:17:36.000 --> 00:17:40.519
+Let me thank you one more time for preparing this talk
+
+00:17:40.520 --> 00:17:44.359
+and for all that you do for the Free Software community
+
+00:17:44.360 --> 00:17:47.879
+and especially for Emacs. particularly appreciate you.
+
+00:17:47.880 --> 00:17:50.439
+Thank you for all you do for the Free Software community
+
+00:17:50.440 --> 00:17:53.319
+and particularly Emacs, Corwin and Bruce.
+
+00:17:53.320 --> 00:17:56.079
+I'm still waiting for a working demo of Dungeon Mode.
+
+00:17:56.080 --> 00:17:58.559
+My joke that I was setting up and never had a chance for
+
+00:17:58.560 --> 00:17:59.959
+was that I was going to say
+
+00:17:59.960 --> 00:18:03.599
+I wanted my agent to be using Dungeon Mode in Emacs.
+
+00:18:03.600 --> 00:18:05.999
+How's that? Okay, well, we'll work on that.
+
+00:18:06.000 --> 00:18:10.119
+That could be a project for the two of us in our copious free time.
+
+00:18:10.120 --> 00:18:13.559
+Definitely. Yeah. Okay. I'll let you go.
+
+00:18:13.560 --> 00:18:14.679
+I'm gonna abandon this stream.
+
+00:18:14.680 --> 00:18:17.039
+All right. I'll end out the recording
+
+00:18:17.040 --> 00:18:24.560
+and thanks to all who participated. Okay. See you later.
diff --git a/2025/captions/emacsconf-2025-commonlisp--common-lisp-images-communicating-likeahuman-through-shared-emacs-slime-and-eev--screwlisp--main.vtt b/2025/captions/emacsconf-2025-commonlisp--common-lisp-images-communicating-likeahuman-through-shared-emacs-slime-and-eev--screwlisp--main.vtt
new file mode 100644
index 00000000..59f437f1
--- /dev/null
+++ b/2025/captions/emacsconf-2025-commonlisp--common-lisp-images-communicating-likeahuman-through-shared-emacs-slime-and-eev--screwlisp--main.vtt
@@ -0,0 +1,1260 @@
+WEBVTT captioned by sachac and jay_bird
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:07.119
+Hey, everyone. This talk is on this tradition,
+
+00:00:07.120 --> 00:00:10.639
+intelligent agents in Emacs
+
+00:00:10.640 --> 00:00:13.799
+using my Leonardo software individuals,
+
+00:00:13.800 --> 00:00:16.919
+which I've mistyped as I just wrote here, I see.
+
+00:00:16.920 --> 00:00:20.159
+Thank you to Sacha and everyone
+
+00:00:20.160 --> 00:00:25.239
+at EmacsConf and Emacs, I guess.
+
+00:00:25.240 --> 00:00:26.599
+Sorry that I was running late.
+
+00:00:26.600 --> 00:00:29.759
+I'm screwlisp.small-web.org.
+
+00:00:29.760 --> 00:00:33.999
+I run those one or two weekly shows for a long time,
+
+00:00:34.000 --> 00:00:35.599
+the Lispy Gopher Climate.
+
+00:00:35.600 --> 00:00:42.199
+I'm active on the Mastodon at @screwlisp@gamerplus.org.
+
+00:00:42.200 --> 00:00:46.719
+I'm screwtape on lambda.moo.mud.org.
+
+00:00:46.720 --> 00:00:50.474
+And I ported, over the last kind of year,
+
+00:00:50.475 --> 00:00:58.499
+years, to some extent, I ported Eric Sandewall's system
+
+00:00:58.500 --> 00:01:01.519
+for developing intelligent software agents,
+
+00:01:01.520 --> 00:01:04.879
+which he finished working on in 2014.
+
+00:01:04.880 --> 00:01:10.119
+I got it working again around 2025.
+
+00:01:10.120 --> 00:01:14.199
+First, we're going to take a long arc.
+
+00:01:14.200 --> 00:01:16.759
+We're going to motivate... This is the idea.
+
+00:01:16.760 --> 00:01:18.119
+You can see I'm using Org Mode,
+
+00:01:18.120 --> 00:01:19.959
+which I hope provides a good example
+
+00:01:19.960 --> 00:01:25.359
+for all the Org-Mode-oriented talks this conference.
+
+00:01:25.360 --> 00:01:26.399
+But you can also see
+
+00:01:26.400 --> 00:01:33.107
+that I'm using Eduardo Ochs's eev minor mode with Org.
+
+00:01:33.108 --> 00:01:35.640
+But we can see a little bit of the difference
+
+00:01:35.641 --> 00:01:39.207
+between these two, and that will kind of evolve into
+
+00:01:39.208 --> 00:01:45.259
+my style with the agent communication in Emacs.
+
+00:01:45.260 --> 00:01:52.999
+So you can see I used eev anchors as my Emacs headings.
+
+00:01:53.000 --> 00:01:56.839
+In eev, you just evaluate Elisp expressions
+
+00:01:56.840 --> 00:01:58.679
+as links to places.
+
+00:01:58.680 --> 00:02:01.679
+An anchor will link you somewhere else in the document.
+
+00:02:01.680 --> 00:02:04.807
+So my table of contents links to my talk, I guess.
+
+00:02:04.808 --> 00:02:07.507
+Anchors come in two halves,
+
+00:02:07.508 --> 00:02:12.940
+so that's why I built that unique table of contents
+
+00:02:12.941 --> 00:02:21.479
+experience there. What else am I going to say?
+
+NOTE Totally normal computing
+
+00:02:21.480 --> 00:02:24.174
+So first, let's just do some totally normal computing
+
+00:02:24.175 --> 00:02:27.140
+because intelligence is going to be difficult to describe.
+
+00:02:27.141 --> 00:02:31.100
+Let's just try and compute normally in Emacs in Org Mode
+
+00:02:31.101 --> 00:02:34.359
+and then segue more so into eev,
+
+00:02:34.360 --> 00:02:38.359
+and then maybe I would like if an agent was intelligent,
+
+00:02:38.360 --> 00:02:40.839
+I would think that an intelligent agent
+
+00:02:40.840 --> 00:02:43.319
+would do something like what I'm doing.
+
+00:02:43.320 --> 00:02:47.239
+It should be recognizably similar to what I do myself.
+
+00:02:47.240 --> 00:02:52.399
+I don't think the word intelligence is relevant
+
+00:02:52.400 --> 00:02:55.679
+if it's not related to something I'm not familiar with.
+
+NOTE Using Emacs as a human
+
+00:02:55.680 --> 00:03:00.999
+Using Emacs as a human, reading headings from my article,
+
+00:03:01.000 --> 00:03:03.919
+using Common Lisp. Right, my friend jeremy_list
+
+00:03:03.920 --> 00:03:06.879
+wrote actually a big project,
+
+00:03:06.880 --> 00:03:09.799
+but part of it was base64 encoding,
+
+00:03:09.800 --> 00:03:17.439
+and I just yoinked his C code for base64 encoding, I think.
+
+00:03:17.440 --> 00:03:20.759
+This is just clearly some C-based 64 encoding.
+
+00:03:20.760 --> 00:03:24.279
+If you go to my blog, his project is actually a C++ project
+
+00:03:24.280 --> 00:03:29.579
+and you can see me doing this with C++ rather than C.
+
+00:03:29.580 --> 00:03:33.319
+But basically, you can go to my blog articles
+
+00:03:33.320 --> 00:03:40.299
+if you want more detail to read something instead.
+
+00:03:40.300 --> 00:03:42.433
+And then here's some embeddable Common Lisp,
+
+00:03:42.434 --> 00:03:48.439
+Jack Daniel's ECL ANSI Common Lisp compiler I guess.
+
+00:03:48.440 --> 00:03:49.639
+This is just what it looks like.
+
+00:03:49.640 --> 00:03:52.239
+You can see I'm using Org Mode trickily,
+
+00:03:52.240 --> 00:03:56.119
+using noweb to put the lines of the C source block
+
+00:03:56.120 --> 00:04:00.279
+in this one. We're tangling it to this file
+
+00:04:00.280 --> 00:04:01.919
+rather than evaluating it.
+
+00:04:01.920 --> 00:04:05.279
+So, you know, literate programming, tangle and weave.
+
+00:04:05.280 --> 00:04:06.999
+We're just using Org Mode
+
+00:04:07.000 --> 00:04:09.197
+like the other Org Mode people
+
+00:04:09.198 --> 00:04:12.079
+are all showing us this conference, I guess.
+
+00:04:12.080 --> 00:04:13.399
+Then we have to compile it.
+
+00:04:13.400 --> 00:04:16.039
+It's always hard to remember these invocations for me.
+
+00:04:16.040 --> 00:04:20.159
+Results file. The file is my .fas file,
+
+00:04:20.160 --> 00:04:24.559
+because the way ECL's C and C++ integration works
+
+00:04:24.560 --> 00:04:30.519
+is that it just has to be seen by compile-file in Lisp.
+
+00:04:30.520 --> 00:04:32.119
+I cached this earlier.
+
+00:04:32.120 --> 00:04:36.199
+Oh, I should actually start Lisp, actually, shouldn't I?
+
+00:04:36.200 --> 00:04:39.639
+How are we going to do this?
+
+00:04:39.640 --> 00:04:47.099
+(setq inferior-lisp-program "ecl"). We could M-x slime.
+
+00:04:47.100 --> 00:04:48.919
+Because... we better actually load this.
+
+00:04:48.920 --> 00:04:54.119
+I did a dry run before.
+
+00:04:54.120 --> 00:04:58.259
+I think we can just load this, because I already did it.
+
+00:04:58.260 --> 00:05:04.079
+But I cached it. Let's nuke the cache.
+
+00:05:04.080 --> 00:05:06.599
+Okay, I'm going to say that that probably worked.
+
+00:05:06.600 --> 00:05:09.319
+Now, as you saw, that base64 encoding
+
+00:05:09.320 --> 00:05:13.619
+was just, I guess, number to character code
+
+00:05:13.620 --> 00:05:19.140
+to other character code. So I wrote this higher-level Lisp one,
+
+00:05:19.141 --> 00:05:20.599
+but that's not really the point.
+
+00:05:20.600 --> 00:05:26.199
+Obviously, Emacs also has Base64 encoding.
+
+00:05:26.200 --> 00:05:27.979
+It's just a point that we might have
+
+00:05:27.980 --> 00:05:29.959
+C++ and C external programs
+
+00:05:29.960 --> 00:05:31.239
+that we'd like to be integrating
+
+00:05:31.240 --> 00:05:37.139
+into our Emacs agents capabilities.
+
+00:05:37.140 --> 00:05:46.474
+Here we can see a normal named Org Mode source block.
+
+00:05:46.475 --> 00:05:50.474
+that calls that function, then an Org Mode source block
+
+00:05:50.475 --> 00:05:56.299
+that calls Emacs's base64-decode-string as a way of
+
+00:05:56.300 --> 00:05:57.940
+validating it, I guess.
+
+00:05:57.941 --> 00:06:00.140
+We go to Org, so we can see...
+
+00:06:00.141 --> 00:06:04.407
+I have a named call to that function calling the Lisp function
+
+00:06:04.408 --> 00:06:07.040
+Org is just kind of like this.
+
+00:06:07.041 --> 00:06:11.559
+It's cached but I don't seem to have run it before.
+
+00:06:11.560 --> 00:06:13.574
+Then I do the Emacs decode.
+
+00:06:13.575 --> 00:06:15.974
+So if we just run this using C-c C-c,
+
+00:06:15.975 --> 00:06:17.240
+and we can kind of see
+
+00:06:17.241 --> 00:06:22.179
+what Org Mode is like a little bit here.
+
+00:06:22.180 --> 00:06:24.319
+All right, yes, so as we can see,
+
+00:06:24.320 --> 00:06:27.659
+oh hang on, let's run this as well actually.
+
+00:06:27.660 --> 00:06:32.193
+So the C embeddable Common Lisp
+
+00:06:32.194 --> 00:06:35.199
+base64 encoding gets us this.
+
+00:06:35.200 --> 00:06:38.079
+And then Emacs is decoding and gets us back,
+
+00:06:38.080 --> 00:06:40.319
+kind of validates it. I think I'm missing some things.
+
+00:06:40.320 --> 00:06:43.079
+I don't pad characters out to the correct byte lengths,
+
+00:06:43.080 --> 00:06:45.399
+that kind of thing, but it's fine.
+
+NOTE using this via eev as a human
+
+00:06:45.400 --> 00:06:48.719
+And then I kind of contrast that to,
+
+00:06:48.720 --> 00:06:53.179
+I really like what my friend mdhughes.tech,
+
+00:06:53.180 --> 00:06:57.319
+game dev of the ages, calls REPL-driven development,
+
+00:06:57.320 --> 00:07:06.139
+which he says is kind of the opposite of literate coding.
+
+00:07:06.140 --> 00:07:08.940
+I think eev, at least for me,
+
+00:07:08.941 --> 00:07:11.079
+is kind of like REPL-driven development.
+
+00:07:11.080 --> 00:07:16.159
+So in eev, if you just press F8, the thing happens.
+
+00:07:16.160 --> 00:07:17.479
+And if it's a red star line,
+
+00:07:17.480 --> 00:07:19.439
+the thing is an Emacs Lisp thing,
+
+00:07:19.440 --> 00:07:22.999
+and otherwise it goes to the eepitch target.
+
+00:07:23.000 --> 00:07:26.719
+So if I do this, great, now I'm pitching to that slime
+
+00:07:26.720 --> 00:07:32.759
+REPL ECL I made. And then I pressed F8. Press F8 again.
+
+00:07:32.760 --> 00:07:34.480
+The string got coerced to a list.
+
+00:07:34.481 --> 00:07:38.359
+F8. Now it's car codified.
+
+00:07:38.360 --> 00:07:41.319
+I quite like this, because this looks like something I can do
+
+00:07:41.320 --> 00:07:44.239
+and understand doing and reason about doing.
+
+00:07:44.240 --> 00:07:49.519
+Then I form a command to send from Lisp to Emacs.
+
+00:07:49.520 --> 00:07:52.599
+Then I do it and I recover the string from the beginning.
+
+00:07:52.600 --> 00:07:56.119
+I guess I had one of these here. Oh, by the way, look at
+
+00:07:56.120 --> 00:07:59.159
+What Org Mode did with an eev source block.
+
+00:07:59.160 --> 00:08:00.999
+And then when I close the source block
+
+00:08:01.000 --> 00:08:02.679
+using C-c ',
+
+00:08:02.680 --> 00:08:05.319
+it brings me back to the Org doc,
+
+00:08:05.320 --> 00:08:09.159
+which was a cool synergy between the eev minor mode
+
+00:08:09.160 --> 00:08:16.019
+and eev source blocks in Org Mode that I noticed.
+
+00:08:16.020 --> 00:08:22.599
+And so I kind of want my agents to be like this eev usage.
+
+00:08:22.600 --> 00:08:25.159
+Clearly, Org is super powerful,
+
+00:08:25.160 --> 00:08:28.159
+but I don't even like writing calls like this,
+
+00:08:28.160 --> 00:08:32.079
+where you write the function that will happen last first,
+
+00:08:32.080 --> 00:08:39.039
+so you're kind of writing right to left, first to last.
+
+00:08:39.040 --> 00:08:41.239
+Whereas in REPL-driven development,
+
+00:08:41.240 --> 00:08:43.199
+I guess I'm writing top to bottom,
+
+00:08:43.200 --> 00:08:46.979
+and eev, I guess, executable logs
+
+00:08:46.980 --> 00:08:48.599
+are logs that are like that.
+
+00:08:48.600 --> 00:08:52.378
+So I kind of like eev's view for reasoning
+
+00:08:52.379 --> 00:08:54.399
+more than Org's Tangle.
+
+00:08:54.400 --> 00:08:57.319
+Obviously, Tangle is trying to do tricky things,
+
+00:08:57.320 --> 00:09:01.359
+but maybe they have different specializations,
+
+00:09:01.360 --> 00:09:04.879
+and eev's one is more close
+
+00:09:04.880 --> 00:09:07.799
+to my own version of intelligence, maybe.
+
+NOTE Software individuals using eev in Emacs like a human
+
+00:09:07.800 --> 00:09:13.539
+Software individuals using eev in Emacs like a human.
+
+00:09:13.540 --> 00:09:17.279
+Yeah, you can always visit my blog post for more detail.
+
+00:09:17.280 --> 00:09:20.039
+Right, I made a CLOS object
+
+00:09:20.040 --> 00:09:22.519
+in Common Lisp to wrap doing this.
+
+00:09:22.520 --> 00:09:23.639
+It's not really the topic.
+
+00:09:23.640 --> 00:09:27.959
+It's in the appendix somewhere if you need it.
+
+00:09:27.960 --> 00:09:29.559
+So I've just executed that.
+
+00:09:29.560 --> 00:09:32.079
+You can look at the appendix in your own time.
+
+NOTE Sandewall's leonardo system
+
+00:09:32.080 --> 00:09:33.959
+Jumping over to actually starting
+
+00:09:33.960 --> 00:09:36.319
+our hypothetical intelligent agent.
+
+00:09:36.320 --> 00:09:38.239
+I guess we're doing eev here.
+
+00:09:38.240 --> 00:09:46.759
+So if we open this, press F8 a bunch of times.
+
+00:09:46.760 --> 00:09:49.199
+Oh, and if you were cloning it yourself,
+
+00:09:49.200 --> 00:09:56.719
+I guess that's what you would do. setq eepitch-buffer-name.
+
+00:09:56.720 --> 00:10:00.319
+Oh yeah, if you went to an eepitch shell and then came back.
+
+00:10:00.320 --> 00:10:01.679
+You would have had to do that, but I didn't.
+
+00:10:01.680 --> 00:10:04.239
+I didn't, so I didn't need to.
+
+00:10:04.240 --> 00:10:07.279
+Sandewall's style is to use relative paths
+
+00:10:07.280 --> 00:10:11.974
+to tell which agent is acting inside a software individual.
+
+00:10:11.975 --> 00:10:13.359
+Remembering a software individual
+
+00:10:13.360 --> 00:10:15.239
+is potentially a bunch of agents.
+
+00:10:15.240 --> 00:10:18.479
+And we load... So one individual,
+
+00:10:18.480 --> 00:10:21.919
+all the agents in each individual share a kernel.
+
+00:10:21.920 --> 00:10:25.599
+So only one agent in one software individual
+
+00:10:25.600 --> 00:10:28.279
+is active at any given time, but the agents are separate.
+
+00:10:28.280 --> 00:10:31.279
+They just all have to share the kernel resource,
+
+00:10:31.280 --> 00:10:38.319
+which is the Remus agent. Oh, I got rid of this.
+
+00:10:38.320 --> 00:10:43.279
+And start the CLE is the thing.
+
+00:10:43.280 --> 00:10:46.119
+Oh, I did need to have an EmacsConf knowledge base.
+
+00:10:46.120 --> 00:10:48.959
+Well, let's just keep eepitching for a little bit.
+
+00:10:48.960 --> 00:10:55.259
+So I think I made... I'm going to call it emacsconf-kb.
+
+00:10:55.260 --> 00:10:59.679
+Right, that looks likely. And I think that the agent...
+
+00:10:59.680 --> 00:11:03.479
+I can check this. I could have checked that.
+
+00:11:03.480 --> 00:11:12.699
+I could have done something like (get emacsconf-kb contents).
+
+00:11:12.700 --> 00:11:13.479
+Yeah, and you can see
+
+00:11:13.480 --> 00:11:15.879
+there's a location inside it which is agent1,
+
+00:11:15.880 --> 00:11:17.519
+which I assume is an entity file
+
+00:11:17.520 --> 00:11:20.599
+that I was working with before.
+
+00:11:20.600 --> 00:11:21.919
+And then what were we going to do?
+
+00:11:21.920 --> 00:11:28.279
+Oh yeah, back to the embeddable Common Lisp image.
+
+00:11:28.280 --> 00:11:36.099
+So if I just press our button back to there...
+
+NOTE Start a loop for one leonardo software individual
+
+00:11:36.100 --> 00:11:41.119
+And so my idea is that for an Emacs agent,
+
+00:11:41.120 --> 00:11:46.999
+basically, I'd like to have an Emacs Lisp list.
+
+00:11:47.000 --> 00:11:49.640
+And just when stuff gets into that list,
+
+00:11:49.641 --> 00:11:53.239
+the agent which is always running, but running slowly,
+
+00:11:53.240 --> 00:11:58.359
+will incrementally just do the stuff it finds in that list.
+
+00:11:58.360 --> 00:12:00.759
+Populating that list probably gets into stuff
+
+00:12:00.760 --> 00:12:03.199
+like your Beliefs, Desires, Intents framework
+
+00:12:03.200 --> 00:12:06.159
+and those kind of well-known and well-studied algorithms.
+
+00:12:06.160 --> 00:12:07.799
+That's not the point here.
+
+00:12:07.800 --> 00:12:14.259
+I just want to have a list in Emacs that my ECL...
+
+00:12:14.260 --> 00:12:16.079
+I'm just going to run a loop in ECL,
+
+00:12:16.080 --> 00:12:18.319
+and the ECL is going to keep sending
+
+00:12:18.320 --> 00:12:22.399
+anything it finds in that Emacs Lisp list
+
+00:12:22.400 --> 00:12:25.399
+to the software agent. The agent is also in Emacs,
+
+00:12:25.400 --> 00:12:28.759
+so it would be able to populate its own list itself
+
+00:12:28.760 --> 00:12:36.159
+if it had an idea of evaluating desires and chances to improve
+
+00:12:36.160 --> 00:12:37.559
+whatever it wants to improve
+
+00:12:37.560 --> 00:12:39.999
+and chances to avoid whatever it wants to avoid.
+
+00:12:40.000 --> 00:12:47.599
+We talked a little bit too much. Let's just start this.
+
+00:12:47.600 --> 00:12:51.539
+Sorry that I'm manually setting up my screen.
+
+00:12:51.540 --> 00:12:55.499
+Then let's put CLisp over here.
+
+00:12:55.500 --> 00:12:58.679
+Right, we could work with this, right?
+
+00:12:58.680 --> 00:13:00.099
+This loop isn't very important.
+
+00:13:00.100 --> 00:13:04.919
+It's just a Common Lisp loop. I copy my friend jmbr's style
+
+00:13:04.920 --> 00:13:08.199
+of using Lisp machine-style keyword arguments
+
+00:13:08.200 --> 00:13:12.119
+instead of symbols like cl-loop,
+
+00:13:12.120 --> 00:13:16.719
+the compatibility thing in Emacs Lisp does.
+
+00:13:16.720 --> 00:13:28.139
+I'd never initialized that. Well, let's do that.
+
+00:13:28.140 --> 00:13:30.679
+Okay, now we have the list.
+
+00:13:30.680 --> 00:13:35.019
+And just every 30, let's turn it down to every 20 seconds.
+
+00:13:35.020 --> 00:13:37.159
+Hypothetically, it's going to put
+
+00:13:37.160 --> 00:13:39.999
+whatever it finds in there, into there.
+
+00:13:40.000 --> 00:13:46.239
+And so, I think, yeah, and now... Great.
+
+00:13:46.240 --> 00:13:50.099
+So here I'm just going to fill it with stuff.
+
+00:13:50.100 --> 00:13:54.839
+And this is quite interesting, I think.
+
+00:13:54.840 --> 00:13:58.479
+It just shows I can put a whole bunch of stuff into that list.
+
+00:13:58.480 --> 00:14:01.199
+Ideally, the agent would populate it itself
+
+00:14:01.200 --> 00:14:03.359
+with a BDI algorithm or something.
+
+00:14:03.360 --> 00:14:04.919
+But if we just put some stuff in there,
+
+00:14:04.920 --> 00:14:07.799
+we'll see that it will all get sent
+
+00:14:07.800 --> 00:14:14.799
+basically using Eduardo's eepitch internal machinery, at least.
+
+00:14:14.800 --> 00:14:17.479
+And hence, it meets my requirement
+
+00:14:17.480 --> 00:14:20.779
+that it works exactly like I work.
+
+00:14:20.780 --> 00:14:25.859
+And then in eev, I just have to press M-e.
+
+00:14:25.860 --> 00:14:31.479
+Oh, it works via Emacs server, and I didn't start that,
+
+00:14:31.480 --> 00:14:39.719
+so if we server-start, hopefully...
+
+00:14:39.720 --> 00:14:42.799
+And then, ideally, things will just begin happening
+
+00:14:42.800 --> 00:14:53.119
+in this slime-repl C/Lisp agent.
+
+00:14:53.120 --> 00:15:05.419
+Oh, if this was still running.
+
+00:15:05.420 --> 00:15:07.199
+Okay, well we got at least one,
+
+00:15:07.200 --> 00:15:09.639
+but hypothetically lots of these will happen.
+
+00:15:09.640 --> 00:15:13.699
+So, show agent, I guess,
+
+00:15:13.700 --> 00:15:17.039
+happened over here. I put a whole bunch of "sleep-for"s in,
+
+00:15:17.040 --> 00:15:19.719
+because I thought that going slowly
+
+00:15:19.720 --> 00:15:21.319
+would make it seem more human.
+
+00:15:21.320 --> 00:15:24.639
+Like I saw in Eduardo's talk last year
+
+00:15:24.640 --> 00:15:29.099
+which is where I learned about eev.
+
+00:15:29.100 --> 00:15:32.319
+The system is a little fragile.
+
+00:15:32.320 --> 00:15:41.079
+Hypothetically, we have a whole bunch of agents.
+
+00:15:41.080 --> 00:15:43.039
+I guess every time it gets sent,
+
+00:15:43.040 --> 00:15:44.999
+it checks that we're in the right agent.
+
+00:15:45.000 --> 00:15:46.999
+And it's not actually just sending a string,
+
+00:15:47.000 --> 00:15:52.799
+it's sending a sequence of string actions over there.
+
+00:15:52.800 --> 00:15:57.479
+And so we see Emacs Lisp hypothetically put,
+
+00:15:57.480 --> 00:16:06.859
+I guess it put this "foo bar baz!" into an entity, message-1,
+
+00:16:06.860 --> 00:16:11.899
+which should be of type message, I guess, conceivably.
+
+00:16:11.900 --> 00:16:13.319
+I forget if I set that up earlier.
+
+00:16:13.320 --> 00:16:14.719
+It's in the appendix somewhere.
+
+00:16:14.720 --> 00:16:17.999
+And then it just called, it did a sequence of actions
+
+00:16:18.000 --> 00:16:21.319
+which was really just one action of showing that.
+
+00:16:21.320 --> 00:16:26.399
+And then I called b64-encode on message1,
+
+00:16:26.400 --> 00:16:30.599
+which I believe will have set message-1 encoded.
+
+00:16:30.600 --> 00:16:37.242
+Can I check that manually while it's happening?
+
+00:16:37.243 --> 00:16:51.499
+Disaster. Well that's what it should have been.
+
+00:16:51.500 --> 00:16:54.940
+Well, I did mention it was a little bit fragile.
+
+00:16:54.941 --> 00:17:03.279
+What if we put... Can we kind of rescue this?
+
+00:17:03.280 --> 00:17:07.239
+I don't want to try redoing this. It's slightly fragile.
+
+00:17:07.240 --> 00:17:12.639
+What it would do, we can see the actions are kind of getting there,
+
+00:17:12.640 --> 00:17:16.719
+but somehow my message didn't end up getting encoded
+
+00:17:16.720 --> 00:17:18.119
+by that sequence of actions.
+
+00:17:18.120 --> 00:17:23.279
+So this decode will have also made the decoded one be null.
+
+NOTE Let's do it manually
+
+00:17:23.280 --> 00:17:26.239
+Let's just do it manually. Should have worked.
+
+00:17:26.240 --> 00:17:30.559
+b64-encode, which calls out to Emacs
+
+00:17:30.560 --> 00:17:37.299
+to get everything actually done.
+
+00:17:37.300 --> 00:17:41.519
+Oh, I got interrupted by the agent.
+
+00:17:41.520 --> 00:17:43.320
+Well, if I do it manually, it worked.
+
+00:17:43.321 --> 00:17:53.519
+Hypothetically, the queue thing should have worked. Great.
+
+00:17:53.520 --> 00:17:56.840
+Well, you can see it's kind of working.
+
+00:17:56.841 --> 00:17:57.440
+Could be more robust.
+
+00:17:57.441 --> 00:18:03.640
+The reason is that I think what I did is a bit fragile,
+
+00:18:03.641 --> 00:18:07.107
+but the intent is that FIPA,
+
+00:18:07.108 --> 00:18:09.307
+Foundation for Intelligent Physical Agents's
+
+00:18:09.308 --> 00:18:15.639
+SL standard has tools for reliability
+
+00:18:15.640 --> 00:18:19.919
+through repetition and checking outcomes and that kind of thing.
+
+00:18:19.920 --> 00:18:22.959
+So I would use those. I'm not putting too much work
+
+00:18:22.960 --> 00:18:26.679
+into being ultra-reliable right now, but it kind of worked.
+
+00:18:26.680 --> 00:18:29.759
+We saw, I guess, at least Embeddable Common Lisp
+
+00:18:29.760 --> 00:18:35.599
+believed it used emacsclient externally, asynchronously,
+
+00:18:35.600 --> 00:18:38.359
+to send these to Emacs within Emacs.
+
+00:18:38.360 --> 00:18:41.599
+I put a whole bunch of sleeps into its thing
+
+00:18:41.600 --> 00:18:44.999
+to make it look slow and human-like, kind of happened
+
+00:18:45.000 --> 00:18:52.719
+because Emacs' model is that it's kind of single-threaded.
+
+00:18:52.720 --> 00:18:59.639
+Can I just... I bet if we run this again
+
+00:18:59.640 --> 00:19:02.119
+It'll at least look like it's succeeding
+
+00:19:02.120 --> 00:19:05.039
+because I fixed the base64 encoding
+
+00:19:05.040 --> 00:19:11.399
+and so forth in the background. I wonder if it will.
+
+NOTE Wrapping up
+
+00:19:11.400 --> 00:19:15.559
+In the meantime, let's wrap up this talk to some extent.
+
+00:19:15.560 --> 00:19:18.799
+Then I'm just kind of saying what I'm expecting to happen.
+
+00:19:18.800 --> 00:19:20.479
+I took out next action.
+
+00:19:20.480 --> 00:19:25.279
+Originally, I was keeping the list inside of the agent.
+
+00:19:25.280 --> 00:19:27.879
+Then I decided to keep the list inside Emacs
+
+00:19:27.880 --> 00:19:31.679
+because I have kind of first class Emacs is my IDE,
+
+00:19:31.680 --> 00:19:37.607
+so I have better access to what's going on in my IDE.
+
+NOTE Intelligence
+
+00:19:37.608 --> 00:19:39.559
+Then I wanted to talk about intelligence a little bit
+
+00:19:39.560 --> 00:19:41.199
+in whatever my remaining time is.
+
+00:19:41.200 --> 00:19:43.039
+I just have these great bullet points
+
+00:19:43.040 --> 00:19:45.559
+of Nosredna yduJ and Eric Sandewall.
+
+00:19:45.560 --> 00:19:50.039
+So Nosredna yduJ, when she was on the show quite a long time ago,
+
+00:19:50.040 --> 00:19:55.559
+she... I keep describing things as expert systems
+
+00:19:55.560 --> 00:19:57.039
+and she wanted to know what I meant
+
+00:19:57.040 --> 00:19:58.359
+when I said expert systems,
+
+00:19:58.360 --> 00:20:00.199
+and I gave her a Lisp software example
+
+00:20:00.200 --> 00:20:02.618
+and she said she personally wrote
+
+00:20:02.619 --> 00:20:06.279
+that software in the 80s that I was referring to
+
+00:20:06.280 --> 00:20:08.239
+and she wanted to know how it was an expert system.
+
+00:20:08.240 --> 00:20:10.039
+What I mean when I say expert system
+
+00:20:10.040 --> 00:20:19.839
+is a system that works kind of like I do and eev's eepitch does.
+
+00:20:19.840 --> 00:20:21.999
+It's where we can really reason
+
+00:20:22.000 --> 00:20:24.199
+in a very human-relatable way
+
+00:20:24.200 --> 00:20:26.479
+about what the inputs to the program is.
+
+00:20:26.480 --> 00:20:31.399
+And also a program should be exposed to other programs
+
+00:20:31.400 --> 00:20:36.559
+in terms of like a well-structured transfer of knowledge as inputs,
+
+00:20:36.560 --> 00:20:38.010
+and it should have a well-structured
+
+00:20:38.011 --> 00:20:41.939
+transfer of knowledge kind of outputs.
+
+00:20:41.940 --> 00:20:47.159
+I don't know why this b64-encode message wasn't working.
+
+00:20:47.160 --> 00:20:49.999
+Then we kind of faked it into working.
+
+00:20:50.000 --> 00:20:52.399
+It's going to be embarrassing for me
+
+00:20:52.400 --> 00:20:58.739
+if anybody watches this. But yeah, so yduJ's thing...
+
+00:20:58.740 --> 00:20:59.959
+And then I was going to also build
+
+00:20:59.960 --> 00:21:02.679
+that into Eric Sandewall's one.
+
+00:21:02.680 --> 00:21:05.639
+So this is my vision of expert systems
+
+00:21:05.640 --> 00:21:07.779
+as kind of maybe this is an important
+
+00:21:07.780 --> 00:21:11.679
+general style loosely associated with Lisp.
+
+00:21:11.680 --> 00:21:14.399
+Same as the Lisp editor Emacs.
+
+00:21:14.400 --> 00:21:17.665
+So Eric Sandewall's description of intelligence
+
+00:21:17.666 --> 00:21:21.159
+was that his grandchildren were intelligent.
+
+00:21:21.160 --> 00:21:26.439
+So if we had software agents that were intelligent,
+
+00:21:26.440 --> 00:21:32.439
+this would be true if and maybe only if they were similar
+
+00:21:32.440 --> 00:21:33.719
+to his grandchildren
+
+00:21:33.720 --> 00:21:36.319
+who were a good reference for intelligence.
+
+00:21:36.320 --> 00:21:39.199
+And grandchildren live for a really long time.
+
+00:21:39.200 --> 00:21:42.879
+They kind of learn gradually.
+
+00:21:42.880 --> 00:21:46.879
+They don't run on GPUs for a few minutes
+
+00:21:46.880 --> 00:21:51.879
+and then get thrown out forever, something like that.
+
+00:21:51.880 --> 00:21:54.959
+And so this is the kind of vision of, I guess,
+
+00:21:54.960 --> 00:21:57.919
+the Leonardo system software individual stuff.
+
+00:21:57.920 --> 00:22:03.946
+You can see we kind of faked it into...
+
+00:22:03.947 --> 00:22:06.320
+at least the show get message one decoded bits were working.
+
+00:22:06.321 --> 00:22:07.300
+I'm not sure what was happening
+
+00:22:07.301 --> 00:22:12.674
+with the Elisp ones that worked interactively,
+
+00:22:12.675 --> 00:22:18.607
+but then they didn't work in my loopy thing.
+
+00:22:18.608 --> 00:22:21.307
+Oh yeah, and then so I mentioned
+
+00:22:21.308 --> 00:22:24.640
+thank you to Sacha at the start of this talk.
+
+00:22:24.641 --> 00:22:26.974
+And so Eric Sandewall's emphasis
+
+00:22:26.975 --> 00:22:31.340
+that you'd really like intelligent software agents,
+
+00:22:31.341 --> 00:22:34.174
+Leonardo system agents, to be like your grandchildren.
+
+00:22:34.175 --> 00:22:40.659
+And I was talking to somebody, maybe to Ramin Honary
+
+00:22:40.660 --> 00:22:44.959
+who's doing the schemacs talk this year
+
+00:22:44.960 --> 00:22:46.874
+about Sacha's writing.
+
+00:22:46.875 --> 00:22:48.840
+A lot of Sacha's writing is about
+
+00:22:48.841 --> 00:22:51.774
+her experiences of life and technology,
+
+00:22:51.775 --> 00:22:54.374
+and especially raising A*
+
+00:22:54.375 --> 00:22:59.740
+and her observations of her progeny A*'s
+
+00:22:59.741 --> 00:23:05.319
+experiences of life and technology,
+
+00:23:05.320 --> 00:23:07.874
+I would say as well as being
+
+00:23:07.875 --> 00:23:18.039
+the Emacs News and Emacs conf doer that she is.
+
+00:23:18.040 --> 00:23:22.740
+Yeah, and so I think a lot of what Sacha is seen doing
+
+00:23:22.741 --> 00:23:25.840
+and concerned with are specifically what Eric Sandewall
+
+00:23:25.841 --> 00:23:31.207
+identifies as the study of intelligence as such,
+
+00:23:31.208 --> 00:23:36.479
+as should apply to computing as well. That was my thought
+
+00:23:36.480 --> 00:23:42.979
+on Sacha, Eric Sandewall, intelligence, and yduJ.
+
+00:23:42.980 --> 00:23:44.240
+I have this note from pizzapal...
+
+00:23:44.241 --> 00:23:46.274
+I didn't realize that Microsoft had announced
+
+00:23:46.275 --> 00:23:49.679
+that 2025 was going to be the year of the software agent.
+
+00:23:49.680 --> 00:23:51.199
+I only found this out in hindsight
+
+00:23:51.200 --> 00:23:54.199
+when I saw people crowing on the Mastodon
+
+00:23:54.200 --> 00:23:58.079
+about how Microsoft had basically declared
+
+00:23:58.080 --> 00:24:00.779
+that their Year of the Agent marketing campaign
+
+00:24:00.780 --> 00:24:04.459
+was a failure
+
+00:24:04.460 --> 00:24:09.279
+where basically people didn't like the same old web services
+
+00:24:09.280 --> 00:24:11.359
+but now while you're accessing,
+
+00:24:11.360 --> 00:24:15.239
+while you're formally kind of accessing a web service,
+
+00:24:15.240 --> 00:24:16.959
+the kind of web service that used to be called
+
+00:24:16.960 --> 00:24:19.279
+serverless web services, this kind of thing,
+
+00:24:19.280 --> 00:24:23.879
+but you're just being gibbered at by Microsoft Copilot
+
+00:24:23.880 --> 00:24:27.119
+while you're trying to use regular services.
+
+00:24:27.120 --> 00:24:29.279
+And people turned out not to like this.
+
+00:24:29.280 --> 00:24:32.399
+I think that, as we can see in this agent,
+
+00:24:32.400 --> 00:24:36.374
+the agent really needs to be running on its own clock
+
+00:24:36.375 --> 00:24:37.907
+and independently of you.
+
+00:24:37.908 --> 00:24:42.279
+Like if you imagine your body is getting
+
+00:24:42.280 --> 00:24:46.074
+novel, slightly speculative instructions from your brain
+
+00:24:46.075 --> 00:24:50.680
+constantly throughout your entire waking day, quite slowly,
+
+00:24:50.681 --> 00:24:54.974
+this is what an agent should be like.
+
+00:24:54.975 --> 00:24:59.540
+And it should be... Sandewall wrote about this.
+
+00:24:59.541 --> 00:25:01.540
+Basically, computer programs
+
+00:25:01.541 --> 00:25:04.840
+aren't going to want to use human natural language with each other.
+
+00:25:04.841 --> 00:25:06.674
+There's nothing desirable about that,
+
+00:25:06.675 --> 00:25:10.674
+so you wouldn't have two hypothetical Microsoft agents,
+
+00:25:10.675 --> 00:25:13.399
+which are just regular web services with
+
+00:25:13.400 --> 00:25:16.340
+a GPT model gibbering at you
+
+00:25:16.341 --> 00:25:19.839
+while you're trying to use the web service.
+
+00:25:19.840 --> 00:25:22.539
+I think we can see...
+
+00:25:22.540 --> 00:25:26.740
+Microsoft did the wrong thing with the word agent,
+
+00:25:26.741 --> 00:25:30.707
+allowing that agent is an overloaded term like static.
+
+00:25:30.708 --> 00:25:34.256
+I'm going to stop this. I'm not going to try and fix this.
+
+00:25:34.257 --> 00:25:36.313
+Sorry, everybody. Thank you. Talk to you on the Mastodon.
+
+00:25:36.314 --> 00:25:37.919
+Hopefully, see you on the show.
+
+00:25:37.920 --> 00:25:40.399
+See you at your conference talks.
+
+00:25:40.400 --> 00:25:45.599
+My blog has writing and examples of this with multi-agents,
+
+00:25:45.600 --> 00:25:50.819
+more C and C++ stuff, Lisp things.
+
+00:25:50.820 --> 00:25:53.439
+You're welcome to come on my show to be interviewed,
+
+00:25:53.440 --> 00:25:56.640
+however formally we do that. See everybody next time.
diff --git a/2025/captions/emacsconf-2025-completion--corfuyasnippet-easier-than-i-thought--pedro-a-aranda-gutirrez--main.vtt b/2025/captions/emacsconf-2025-completion--corfuyasnippet-easier-than-i-thought--pedro-a-aranda-gutirrez--main.vtt
new file mode 100644
index 00000000..49bf10f3
--- /dev/null
+++ b/2025/captions/emacsconf-2025-completion--corfuyasnippet-easier-than-i-thought--pedro-a-aranda-gutirrez--main.vtt
@@ -0,0 +1,1426 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:02.319
+Nice to have you here on this talk.
+
+00:00:02.320 --> 00:00:04.519
+This is my second talk this year.
+
+00:00:04.520 --> 00:00:09.919
+First one was on things that I've done to Org Mode.
+
+00:00:09.920 --> 00:00:13.799
+Just as a side note, this presentation
+
+00:00:13.800 --> 00:00:16.279
+that I'm going to share with you
+
+00:00:16.280 --> 00:00:19.879
+about my work on Corfu and Jasnipit.
+
+00:00:19.880 --> 00:00:21.839
+I've prepared that on Org Mode
+
+00:00:21.840 --> 00:00:25.079
+and exported that with a work I've been doing
+
+00:00:25.080 --> 00:00:26.839
+to the latest exporter.
+
+00:00:26.840 --> 00:00:31.959
+Anyhow, what is my talk going to be about?
+
+00:00:31.960 --> 00:00:34.599
+It's going to be about Corfu and Yasnippet,
+
+00:00:34.600 --> 00:00:36.599
+which I thought would be difficult to integrate,
+
+00:00:36.600 --> 00:00:42.799
+and it was much easier than I thought.
+
+00:00:42.800 --> 00:00:46.959
+So just a short outline, my motivation,
+
+00:00:46.960 --> 00:00:49.959
+step-by-step of the things that I've been investigating,
+
+00:00:49.960 --> 00:00:55.919
+and some takeaways. So my motivation, yeah, snippet is old.
+
+00:00:55.920 --> 00:00:59.599
+So I've tried another, I've tried Temple
+
+00:00:59.600 --> 00:01:02.519
+and other template management packages,
+
+00:01:02.520 --> 00:01:08.159
+but it was really not my cup of tea. So mainly why?
+
+00:01:08.160 --> 00:01:10.919
+Mainly because I have a nice base of VR snippets
+
+00:01:10.920 --> 00:01:14.479
+I have generated for my needs.
+
+00:01:14.480 --> 00:01:17.799
+So it's not that I've been importing snippets
+
+00:01:17.800 --> 00:01:20.359
+from packages which are out there.
+
+00:01:20.360 --> 00:01:23.599
+No, they are my snippets. I'm used to them.
+
+00:01:23.600 --> 00:01:26.559
+And of course, migration counts as a cost.
+
+00:01:26.560 --> 00:01:32.639
+I've been using Company as my completion point function GUI for years,
+
+00:01:32.640 --> 00:01:38.919
+but with the time coming in features and so on it
+
+00:01:38.920 --> 00:01:44.359
+was it's was not as easy to set up as I wanted for my needs
+
+00:01:44.360 --> 00:01:53.119
+so I had been working I've been playing with Eaglet already some time for a language server protocol
+
+00:01:53.120 --> 00:01:57.039
+I had read about how easy it was to integrate with Corfu
+
+00:01:57.040 --> 00:02:02.839
+which was really nice and I had given it a try,
+
+00:02:02.840 --> 00:02:06.439
+but I'm using both graphical user interface mode in Emacs
+
+00:02:06.440 --> 00:02:07.839
+and text mode,
+
+00:02:07.840 --> 00:02:10.319
+and for text mode you need a corporate terminal,
+
+00:02:10.320 --> 00:02:16.399
+which was yet another package that I don't download.
+
+00:02:16.400 --> 00:02:21.479
+Well, and I didn't really find a quick way
+
+00:02:21.480 --> 00:02:24.479
+to get rid of company to get just snippet.
+
+00:02:24.480 --> 00:02:26.679
+So at the end, when, at the beginning,
+
+00:02:26.680 --> 00:02:33.959
+when I was using Corfu and Eglot, I also needed to load a company
+
+00:02:33.960 --> 00:02:35.759
+to have a snippet support,
+
+00:02:35.760 --> 00:02:37.639
+which was really like sort of weird
+
+00:02:37.640 --> 00:02:40.559
+because I wanted to get rid of, of your snippet.
+
+00:02:40.560 --> 00:02:47.199
+Anyhow, while I try now, I'm following the mailing list,
+
+00:02:47.200 --> 00:02:48.559
+the development mailing list,
+
+00:02:48.560 --> 00:02:51.799
+and I got interested when I heard something about
+
+00:02:51.800 --> 00:02:57.119
+TTI charge frames being announced for master.
+
+00:02:57.120 --> 00:02:59.599
+That would mean less packages to download
+
+00:02:59.600 --> 00:03:04.159
+because I thought I could get rid of Corfu,
+
+00:03:04.160 --> 00:03:07.359
+and I wanted to try if I could get rid of Corfu terminal
+
+00:03:07.360 --> 00:03:11.199
+and run Corfu without that.
+
+00:03:11.200 --> 00:03:18.799
+So, there were some hints there in that mailing list
+
+00:03:18.800 --> 00:03:21.879
+that made it interesting for me.
+
+00:03:21.880 --> 00:03:26.639
+And at the end, I'm also like a why not trying man,
+
+00:03:26.640 --> 00:03:29.119
+so I said let's give it a try.
+
+00:03:29.120 --> 00:03:33.479
+My requirements, I'm working always on a new Emacs,
+
+00:03:33.480 --> 00:03:36.759
+a decently new Emacs, normally from Master Vanilla.
+
+00:03:36.760 --> 00:03:42.559
+completely Vanilla and I don't have any extras like Doom or things like that.
+
+00:03:42.560 --> 00:03:45.519
+So I'm only Vanilla. And one of the things
+
+00:03:45.520 --> 00:03:50.279
+that I don't want is that on this Vanilla recent Emacs,
+
+00:03:50.280 --> 00:03:55.719
+I don't want a Kung Fu Terminal. I need your snippet.
+
+00:03:55.720 --> 00:03:57.359
+I'm basically an old man.
+
+00:03:57.360 --> 00:04:02.479
+Old dog does new tricks and snippets must,
+
+00:04:02.480 --> 00:04:06.239
+in my way of working, must be easy and quick to configure
+
+00:04:06.240 --> 00:04:10.479
+and Tempo or others that I've seen are not.
+
+00:04:10.480 --> 00:04:13.919
+I don't want any reminiscence of a company in my setup.
+
+00:04:13.920 --> 00:04:18.679
+And of course, don't forget that I've embraced
+
+00:04:18.680 --> 00:04:24.119
+the language protocol implementations and basically Eglot.
+
+00:04:24.120 --> 00:04:28.159
+My main focus now is Python and LaTeX,
+
+00:04:28.160 --> 00:04:31.719
+and I have PyLSB and TechLab.
+
+00:04:31.720 --> 00:04:37.599
+And I don't want to have to stop using them.
+
+00:04:37.600 --> 00:04:40.479
+So basic setup for Corfu and Eglot.
+
+00:04:40.480 --> 00:04:43.439
+You can find it everywhere you look for it.
+
+00:04:43.440 --> 00:04:46.559
+It's really easy.
+
+00:04:46.560 --> 00:04:51.119
+And actually, I also do something somehow naughty,
+
+00:04:51.120 --> 00:04:53.079
+which is to set this variable,
+
+00:04:53.080 --> 00:04:55.519
+the Corfu auto variable to true,
+
+00:04:55.520 --> 00:04:58.399
+although I know it's not recommended, blah, blah, blah.
+
+00:04:58.400 --> 00:05:02.959
+But I use that because I'm a bit lazy in that.
+
+00:05:02.960 --> 00:05:07.239
+So next step was looking at completion at point functions.
+
+00:05:07.240 --> 00:05:10.479
+So the information there if you go through the scatter
+
+00:05:10.480 --> 00:05:13.999
+and sometimes a bit cryptic.
+
+00:05:14.000 --> 00:05:16.599
+At the end I came up with something like the thing
+
+00:05:16.600 --> 00:05:18.399
+that you see there on the screen.
+
+00:05:18.400 --> 00:05:21.879
+So it's a function for just completion point
+
+00:05:21.880 --> 00:05:24.639
+so I need my list of keywords
+
+00:05:24.640 --> 00:05:30.039
+so that I'm going to be talking later
+
+00:05:30.040 --> 00:05:34.399
+and I have my bounds which is normally a word
+
+00:05:34.400 --> 00:05:37.119
+and from that I get the start and the end
+
+00:05:37.120 --> 00:05:38.919
+of the of the thing that I want to
+
+00:05:38.920 --> 00:05:47.319
+that I want to be my seed for looking and bringing up Corfu
+
+00:05:47.320 --> 00:05:53.439
+and of course I need some completion properties here
+
+00:05:53.440 --> 00:05:55.719
+This looked like this is what you need to do,
+
+00:05:55.720 --> 00:05:57.519
+but I had to dig quite deep
+
+00:05:57.520 --> 00:06:01.319
+to create a JavaScript keyword test
+
+00:06:01.320 --> 00:06:04.759
+and to understand the completion props.
+
+00:06:04.760 --> 00:06:11.759
+And as an update of what I've been doing in the last weeks,
+
+00:06:11.760 --> 00:06:13.879
+I've created a bound of things
+
+00:06:13.880 --> 00:06:18.679
+that point for me with a different thing
+
+00:06:18.680 --> 00:06:22.039
+that doesn't skip over non-blank characters,
+
+00:06:22.040 --> 00:06:25.039
+that only skips over non-blank characters.
+
+00:06:25.040 --> 00:06:28.999
+Why? Because Word was confusingly tech,
+
+00:06:29.000 --> 00:06:30.759
+because the backslash,
+
+00:06:30.760 --> 00:06:34.999
+like in the example for the teletype text,
+
+00:06:35.000 --> 00:06:36.919
+was not taken into account by Word.
+
+00:06:36.920 --> 00:06:39.959
+So I had to create my own one,
+
+00:06:39.960 --> 00:06:42.119
+which was a bunch of thing at point,
+
+00:06:42.120 --> 00:06:44.879
+and then my thing is non-blanks.
+
+00:06:44.880 --> 00:06:53.239
+Completion at point properties, what are they?
+
+00:06:53.240 --> 00:06:56.039
+They allow Emacs to know how to handle the information
+
+00:06:56.040 --> 00:06:57.879
+for a specific completion time.
+
+00:06:57.880 --> 00:07:02.319
+So you normally will have an annotation,
+
+00:07:02.320 --> 00:07:08.519
+which then can disappear if you use NerdIconScoreFull.
+
+00:07:08.520 --> 00:07:11.839
+which is what I'm doing currently,
+
+00:07:11.840 --> 00:07:17.559
+but I keep it commented just in case I get tired of Corfu
+
+00:07:17.560 --> 00:07:20.079
+and I want to have my completion function.
+
+00:07:20.080 --> 00:07:26.759
+Then the company kind is actually not something
+
+00:07:26.760 --> 00:07:30.999
+that comes from the company package, but does not require.
+
+00:07:31.000 --> 00:07:39.439
+And that's going to allow NerdEye Conscorfu to identify
+
+00:07:39.440 --> 00:07:44.839
+and put the right icon there in the completion list,
+
+00:07:44.840 --> 00:07:47.159
+as you will see in a couple of minutes.
+
+00:07:47.160 --> 00:07:50.439
+So it's a snippet key.
+
+00:07:50.440 --> 00:07:52.599
+So basically what this is telling you
+
+00:07:52.600 --> 00:07:54.319
+is that this is a snippet keyword.
+
+00:07:54.320 --> 00:07:56.799
+These two lines, either line,
+
+00:07:56.800 --> 00:07:59.999
+tell you that this is a snippet keyword.
+
+00:08:00.000 --> 00:08:05.279
+And that it should be added to the other completions
+
+00:08:05.280 --> 00:08:08.079
+that you already have in your list.
+
+00:08:08.080 --> 00:08:15.479
+Problems looking now next step
+
+00:08:15.480 --> 00:08:19.079
+once I had the completion props
+
+00:08:19.080 --> 00:08:21.439
+which was relatively easy was to go
+
+00:08:21.440 --> 00:08:24.399
+and get the keyword list right.
+
+00:08:24.400 --> 00:08:27.199
+I've been looking at pre-existing solutions
+
+00:08:27.200 --> 00:08:29.319
+like for example how the menu
+
+00:08:29.320 --> 00:08:34.399
+is built in by your snippet and it looked a bit like Mission Impossible.
+
+00:08:34.400 --> 00:08:40.439
+because the approach by all the things
+
+00:08:40.440 --> 00:08:43.199
+that I have seen and I have examined
+
+00:08:43.200 --> 00:08:45.639
+is to get the keys and the names
+
+00:08:45.640 --> 00:08:50.799
+and then further process them.
+
+00:08:50.800 --> 00:08:55.279
+My take was, do I really need both?
+
+00:08:55.280 --> 00:08:58.159
+At the end, if I use my own snippets,
+
+00:08:58.160 --> 00:09:00.439
+I'm going to be using something
+
+00:09:00.440 --> 00:09:02.559
+I would call meaningful keys for them
+
+00:09:02.560 --> 00:09:06.359
+or at least meaningful for these keys are meaningful for me
+
+00:09:06.360 --> 00:09:07.679
+and I try not to repeat them
+
+00:09:07.680 --> 00:09:09.959
+because it makes little sense to repeat a keyword.
+
+00:09:09.960 --> 00:09:13.919
+So why not center everything around the keys only
+
+00:09:13.920 --> 00:09:18.879
+and can that help simplify my code?
+
+00:09:18.880 --> 00:09:23.639
+So I started to dive into your snippet
+
+00:09:23.640 --> 00:09:27.319
+and I found a lot of useful semi-hidden functions there.
+
+00:09:27.320 --> 00:09:30.679
+I discovered that getting the list
+
+00:09:30.680 --> 00:09:34.959
+the list of keys for a given mode was not that difficult.
+
+00:09:34.960 --> 00:09:40.079
+And at the end what I started doing
+
+00:09:40.080 --> 00:09:47.079
+is get all the snipple tables used by a major mode
+
+00:09:47.080 --> 00:09:52.399
+and get the lists of the keys that you have in each table.
+
+00:09:52.400 --> 00:09:55.839
+Sometimes the list is empty
+
+00:09:55.840 --> 00:10:01.959
+so it's going to return a nil and that you have to discard.
+
+00:10:01.960 --> 00:10:05.999
+When you're using structured snippets
+
+00:10:06.000 --> 00:10:08.919
+like snippets and submenus and so on
+
+00:10:08.920 --> 00:10:12.359
+to get a structured menu,
+
+00:10:12.360 --> 00:10:14.999
+you also get some non-strings that you need to filter out
+
+00:10:15.000 --> 00:10:18.999
+in order to get a workable keyword list.
+
+00:10:19.000 --> 00:10:24.879
+At the end of the day, what I had was something like this.
+
+00:10:24.880 --> 00:10:30.959
+I have, for a mode, I went through all modes.
+
+00:10:30.960 --> 00:10:37.159
+through all modes associated to that and then I went
+
+00:10:37.160 --> 00:10:42.519
+I got my results from all the tables that I had
+
+00:10:42.520 --> 00:10:45.279
+for a for a given time for a given table
+
+00:10:45.280 --> 00:10:48.079
+so what you do is you get your the tables
+
+00:10:48.080 --> 00:10:53.119
+that are associated to a mode because surprise surprise
+
+00:10:53.120 --> 00:10:55.958
+Some modes have more than one table,
+
+00:10:55.959 --> 00:11:00.917
+and then what you do is you filter out all non strings
+
+00:11:00.918 --> 00:11:07.719
+from each of the keys list that you have for each table.
+
+00:11:07.720 --> 00:11:12.679
+So as you see, it's a 1, 2, 3, 4, 5, 6, 7 liner,
+
+00:11:12.680 --> 00:11:14.319
+which was not too much.
+
+00:11:14.320 --> 00:11:20.039
+By the way, if someone from Yasnippet is around,
+
+00:11:20.040 --> 00:11:26.959
+I sent a pull request to include this
+
+00:11:26.960 --> 00:11:28.999
+as a public function in Yasnipit
+
+00:11:29.000 --> 00:11:32.319
+because it might be nice to have it in a packet
+
+00:11:32.320 --> 00:11:33.840
+in order to do this kind of things.
+
+00:11:33.840 --> 00:11:41.239
+So fine-tuning I just adding a yes completion
+
+00:11:41.240 --> 00:11:44.719
+to the completion point functions was not enough
+
+00:11:44.720 --> 00:11:46.799
+I don't really know
+
+00:11:46.800 --> 00:11:51.199
+but exclusive node didn't seem to work how I wanted
+
+00:11:51.200 --> 00:11:57.399
+so I needed to escape sorry yeah I was saying I was getting rid of packages
+
+00:11:57.400 --> 00:12:00.999
+and I had to add one package
+
+00:12:01.000 --> 00:12:04.479
+in order to get a function which is very very nice
+
+00:12:04.480 --> 00:12:08.919
+and which is part of the cape function of the cape package
+
+00:12:08.920 --> 00:12:12.799
+and that's cape cap super.
+
+00:12:12.800 --> 00:12:16.439
+So at the end using that you define an alias
+
+00:12:16.440 --> 00:12:23.199
+which for that where you use cape cap super
+
+00:12:23.200 --> 00:12:25.799
+to have a list of what you want
+
+00:12:25.800 --> 00:12:29.079
+so in this case for example for the demo
+
+00:12:29.080 --> 00:12:32.759
+I'm going to make I'm using yes completion
+
+00:12:32.760 --> 00:12:37.719
+and then the elisp completion point function provided by Emacs.
+
+00:12:37.720 --> 00:12:43.999
+I combine them using cape cap super
+
+00:12:44.000 --> 00:12:47.679
+and with that I create a completion point
+
+00:12:47.680 --> 00:12:53.159
+a new completion point function which I call cape list mode
+
+00:12:53.160 --> 00:12:58.480
+and then I add this alias to the completion functions list
+
+00:12:58.520 --> 00:13:05.719
+and with that it is enough snippet expansion
+
+00:13:05.720 --> 00:13:14.479
+if you want to have your snippets expanded automatically,
+
+00:13:14.480 --> 00:13:27.999
+you have to add an exit function to the, I'm sorry,
+
+00:13:28.000 --> 00:13:30.879
+to the completion properties
+
+00:13:30.880 --> 00:13:34.119
+yet another functionality you have to add
+
+00:13:34.120 --> 00:13:39.199
+and to avoid this automatic selection to be too eager
+
+00:13:39.200 --> 00:13:43.319
+you need to add this set corfu
+
+00:13:43.320 --> 00:13:48.599
+on exact match to nil because otherwise
+
+00:13:48.600 --> 00:13:51.839
+you will always get the snippet expanded
+
+00:13:51.840 --> 00:13:55.039
+even if you don't want it Basically why?
+
+00:13:55.040 --> 00:13:57.639
+Basically because this would be suboptimal
+
+00:13:57.640 --> 00:14:05.359
+because the key can appear as part of a variable name.
+
+00:14:05.360 --> 00:14:10.599
+Another nice thing, I'm also creating my own themes.
+
+00:14:10.600 --> 00:14:13.759
+I'm trying to have very sleek themes
+
+00:14:13.760 --> 00:14:16.839
+that only cover the modes that I use
+
+00:14:16.840 --> 00:14:22.959
+and for that I have my own theme creator fork
+
+00:14:22.960 --> 00:14:26.959
+from the original team creator.
+
+00:14:26.960 --> 00:14:31.719
+In my personal work that I'm running at home,
+
+00:14:31.720 --> 00:14:34.159
+I only have the faces for the modes I use.
+
+00:14:34.160 --> 00:14:38.159
+I don't want to overload the thing
+
+00:14:38.160 --> 00:14:41.839
+with too much different things.
+
+00:14:41.840 --> 00:14:45.999
+Looking at this, I really didn't need, as you will see now,
+
+00:14:46.000 --> 00:14:50.079
+I don't need to add anything to my themes
+
+00:14:50.080 --> 00:14:53.279
+because the default faces for Corfu
+
+00:14:53.280 --> 00:14:58.319
+adapt quite well to most of the themes.
+
+00:14:58.320 --> 00:15:02.839
+So if I go back to my checklist decently remax yes
+
+00:15:02.840 --> 00:15:06.559
+compiled the one you'll see
+
+00:15:06.560 --> 00:15:09.239
+for the for in the demo I'm doing is a master
+
+00:15:09.240 --> 00:15:11.999
+compiled the day before yesterday
+
+00:15:12.000 --> 00:15:15.199
+so and I don't need Corfu terminal there.
+
+00:15:15.200 --> 00:15:16.559
+I need your snippet,
+
+00:15:16.560 --> 00:15:20.159
+and you're going to see that in a second
+
+00:15:20.160 --> 00:15:24.439
+with a couple of snippets that I can expand here.
+
+00:15:24.440 --> 00:15:27.479
+I don't want any reminiscence of a company in my setup,
+
+00:15:27.480 --> 00:15:32.119
+and there's none. Well, actually, company kind is there
+
+00:15:32.120 --> 00:15:33.719
+you see the company there
+
+00:15:33.720 --> 00:15:39.559
+but it isn't if I buy companies strictly speaking
+
+00:15:39.560 --> 00:15:44.679
+and for I don't want I need Eglot integration
+
+00:15:44.680 --> 00:15:50.400
+which I will also be showing you. Takeaways from all this,
+
+00:15:50.440 --> 00:15:55.279
+if you accept the extra burden
+
+00:15:55.280 --> 00:16:02.239
+of Corfu terminal for Emacs 30 or earlier Emacs 30s,
+
+00:16:02.240 --> 00:16:07.559
+it's not too difficult to get this set up running.
+
+00:16:07.560 --> 00:16:11.759
+Corfu was easier to integrate and configure than Company,
+
+00:16:11.760 --> 00:16:13.799
+and it's much lighter in terms
+
+00:16:13.800 --> 00:16:20.039
+of number of lines, et cetera. I learned a lot.
+
+00:16:20.040 --> 00:16:25.159
+Well, actually, yes, with the help of Cape,
+
+00:16:25.160 --> 00:16:27.399
+but it is much lighter and much easier
+
+00:16:27.400 --> 00:16:30.119
+to integrate and configure.
+
+00:16:30.120 --> 00:16:34.879
+I've learned a lot about computational functions in the process,
+
+00:16:34.880 --> 00:16:40.439
+which is, something that is always nice to learn new things
+
+00:16:40.440 --> 00:16:45.039
+and the Nerd Icons Corfu makes the
+
+00:16:45.040 --> 00:16:48.319
+at least at this point in time I might get tired of it
+
+00:16:48.320 --> 00:16:50.399
+but at this point in time it makes
+
+00:16:50.400 --> 00:16:53.679
+a makes a very nice overall look
+
+00:16:53.680 --> 00:16:58.039
+and look and feel for for Emacs.
+
+00:16:58.040 --> 00:17:02.039
+requests to whom it may concern cape has nice features
+
+00:17:02.040 --> 00:17:06.279
+that maybe could make their way into emacs
+
+00:17:06.280 --> 00:17:09.159
+i'm thinking basically about this cape super fun
+
+00:17:09.160 --> 00:17:12.399
+uh super function super cape function functionality
+
+00:17:12.400 --> 00:17:18.799
+which is very nice and overcomes the problem of linking
+
+00:17:18.800 --> 00:17:22.239
+and this exclusive and all this kind of things
+
+00:17:22.240 --> 00:17:26.479
+that we have currently in Corfu
+
+00:17:26.480 --> 00:17:28.439
+with the computational point functions.
+
+00:17:28.440 --> 00:17:32.959
+Corfu is also really nice to have and it's not too big
+
+00:17:32.960 --> 00:17:35.559
+so is there any possibility
+
+00:17:35.560 --> 00:17:40.079
+that it makes its way into Emacs?
+
+00:17:40.080 --> 00:17:42.399
+Please keep Yarn Snippet alive.
+
+00:17:42.400 --> 00:17:48.559
+I'm not saying here that my pull request should be there,
+
+00:17:48.560 --> 00:17:51.559
+but it would be nice if someone took a look
+
+00:17:51.560 --> 00:17:57.399
+and made it part of Yarn Snippet.
+
+00:17:57.400 --> 00:18:01.799
+And PS, currently on master,
+
+00:18:01.800 --> 00:18:07.799
+there's a lot of semantic highlighting going on,
+
+00:18:07.800 --> 00:18:13.719
+which is very, very nice. No criticism on that.
+
+00:18:13.720 --> 00:18:19.639
+but you may need to add to your snippet hook
+
+00:18:19.640 --> 00:18:25.039
+this simple local value for ElixirFontify semantically
+
+00:18:25.040 --> 00:18:30.719
+because at least in my case I felt that
+
+00:18:30.720 --> 00:18:32.439
+the face were a bit too pushy
+
+00:18:32.440 --> 00:18:37.280
+so I had to make a snippet mode
+
+00:18:37.334 --> 00:18:41.279
+use the old Emacs Lisp fontification.
+
+00:18:41.280 --> 00:18:46.279
+That's what we want to talk about.
+
+00:18:46.280 --> 00:18:54.999
+Any initial reactions to this? There's a question here.
+
+00:18:55.000 --> 00:18:59.159
+Someone asked, did you try Jasnepet Cup?
+
+00:18:59.160 --> 00:19:05.959
+If so, what did you miss from this approach? I tried that.
+
+00:19:05.960 --> 00:19:11.239
+And it's not that I missed anything.
+
+00:19:11.240 --> 00:19:16.519
+It was more or less that I wanted to do it myself.
+
+00:19:16.520 --> 00:19:24.159
+So I wanted to see what was behind it. That's my answer.
+
+00:19:24.160 --> 00:19:26.679
+There are lots of packages there,
+
+00:19:26.680 --> 00:19:31.719
+but I try to keep learning. So, this was a nice objective
+
+00:19:31.720 --> 00:19:40.159
+to learn a bit more about Emacs. And now, just a second.
+
+00:19:40.160 --> 00:19:44.879
+Now, a small demo. This is the interaction.
+
+00:19:44.880 --> 00:19:47.199
+And as you see, I have the snippet there.
+
+00:19:47.200 --> 00:19:52.879
+and I have a couple of snippets.
+
+00:19:52.880 --> 00:19:55.839
+So, for example, if I would like to say
+
+00:19:55.840 --> 00:19:58.879
+I want to define a function, I can go like this.
+
+00:19:58.880 --> 00:20:00.519
+And what you see here is that
+
+00:20:00.520 --> 00:20:04.319
+I have two snippets appearing and then some variables.
+
+00:20:04.320 --> 00:20:09.879
+So, I could go for def one or if I want a key map, for def key map,
+
+00:20:09.880 --> 00:20:11.479
+which would be something like this.
+
+00:20:11.480 --> 00:20:18.319
+And then when I press enter, I get directly into the map
+
+00:20:18.320 --> 00:20:26.719
+and I could say like, Show off mob.
+
+00:20:26.720 --> 00:20:30.079
+Then it sets out directly a prefix T,
+
+00:20:30.080 --> 00:20:35.039
+which is something that I asked for in Emacs master.
+
+00:20:35.040 --> 00:20:39.479
+So with prefix T, for those who prefix it true,
+
+00:20:39.480 --> 00:20:41.399
+for those who don't know it,
+
+00:20:41.400 --> 00:20:46.799
+it makes integrating this into keymaps in use package much easier.
+
+00:20:46.800 --> 00:20:51.119
+So the next thing would be
+
+00:20:51.120 --> 00:20:55.999
+I would like to write a description
+
+00:20:56.000 --> 00:21:04.999
+like for example a cool show off team up
+
+00:21:05.000 --> 00:21:08.599
+and then my keys are my functions and that would be it
+
+00:21:08.600 --> 00:21:15.839
+but you also have like but also have like this define function
+
+00:21:15.840 --> 00:21:21.679
+and of course you can say that's nice but there's no
+
+00:21:21.680 --> 00:21:23.799
+but you're not showing the integration
+
+00:21:23.800 --> 00:21:25.439
+with Eglot and you're right.
+
+00:21:25.440 --> 00:21:30.279
+So I'm going just to open up a small program
+
+00:21:30.280 --> 00:21:33.319
+that I'm currently developing in Python.
+
+00:21:33.320 --> 00:21:38.239
+X is a tool to do things in MP3.
+
+00:21:38.240 --> 00:21:42.279
+And here I would have like all these things.
+
+00:21:42.280 --> 00:21:45.359
+As you see here in the bottom,
+
+00:21:45.360 --> 00:21:49.079
+service running, pilot is local, eglot is active.
+
+00:21:49.080 --> 00:21:57.919
+So I have my eglot stop and then I go down.
+
+00:21:57.920 --> 00:22:00.519
+And I want to add a new argument here.
+
+00:22:00.520 --> 00:22:08.799
+I would go like for it. I would go like add flag.
+
+00:22:08.800 --> 00:22:13.759
+For example, I would add a flag
+
+00:22:13.760 --> 00:22:21.759
+and I would get a new flag to add here.
+
+00:22:21.760 --> 00:22:33.119
+Oops. Of course, this is integrated into Eagle Lord.
+
+00:22:33.120 --> 00:22:42.759
+So I'm getting your information about what I have.
+
+00:22:42.760 --> 00:22:52.359
+I don't have OS, so I would need to import here,
+
+00:22:52.360 --> 00:22:59.279
+but I can go up just to see
+
+00:22:59.280 --> 00:23:01.759
+if I would like to, for example,
+
+00:23:01.760 --> 00:23:11.879
+create a new a regular expression
+
+00:23:11.880 --> 00:23:15.439
+I'm getting this information that you see right now on call
+
+00:23:15.440 --> 00:23:17.359
+for I'm getting that from Eglot
+
+00:23:17.360 --> 00:23:18.919
+so you see there's the integration
+
+00:23:18.920 --> 00:23:20.839
+with with Eglot too in Python
+
+00:23:20.840 --> 00:23:23.559
+I have Eglot and as you've seen
+
+00:23:23.560 --> 00:23:30.239
+I also have the and all these are snippets fine
+
+00:23:30.240 --> 00:23:38.199
+more reactions and questions
+
+00:23:38.200 --> 00:23:54.239
+Because that would be my show off here.
+
+00:23:54.240 --> 00:23:56.759
+Any questions? Any more questions on the pad?
+
+00:23:56.760 --> 00:24:11.479
+but anyhow i'm going to try
+
+00:24:11.480 --> 00:24:13.239
+i'm going to try your snippet too
+
+00:24:13.240 --> 00:24:16.279
+and i'm going to be answering this question more
+
+00:24:16.280 --> 00:24:21.079
+yeah time is good okay fine
+
+00:24:21.080 --> 00:24:30.039
+so I would be done if there's no more reactions
+
+00:24:30.040 --> 00:24:33.239
+thank you so much You're welcome.
+
+00:24:33.240 --> 00:24:34.919
+If you have any other questions, folks,
+
+00:24:34.920 --> 00:24:37.079
+you can always follow up on the pad.
+
+00:24:37.080 --> 00:24:39.639
+That was a great demonstration, and I'm sure lots of people
+
+00:24:39.640 --> 00:24:43.519
+are looking forward to trying it out.
+
+00:24:43.520 --> 00:24:45.239
+Oh, I see some questions coming in now.
+
+00:24:45.240 --> 00:24:46.199
+You may go ahead if you like.
+
+00:24:46.200 --> 00:24:51.879
+okay fine uh what uh there's someone asking
+
+00:24:51.880 --> 00:24:57.079
+what do special characters in your snippets work well too
+
+00:24:57.080 --> 00:25:02.479
+what kind of i don't use special characters in the key name
+
+00:25:02.480 --> 00:25:05.199
+so in this case everything works quite nicely
+
+00:25:05.200 --> 00:25:11.359
+and then i'm passing i'm passing the control to your snippets
+
+00:25:11.360 --> 00:25:13.679
+so if there's any problem in your snippets
+
+00:25:13.680 --> 00:25:15.359
+with uh special characters
+
+00:25:15.360 --> 00:25:24.399
+that i don't know I don't use that as a key.
+
+00:25:24.400 --> 00:25:30.519
+I'm just using for key names.
+
+00:25:30.520 --> 00:25:38.399
+I normally use a, I only use letters, but that should work.
+
+00:25:38.400 --> 00:25:43.959
+I mean, let's, uh, let's give it a trial.
+
+00:25:43.960 --> 00:25:58.039
+Let's kill here. Yes. I don't want, I don't want to touch this.
+
+00:25:58.040 --> 00:26:01.039
+Ugh. let's go into this one uh
+
+00:26:01.040 --> 00:26:06.920
+let's say I'm going to define this for example like this
+
+00:26:06.959 --> 00:26:10.919
+and I'm going to create a new snippet
+
+00:26:10.920 --> 00:26:15.359
+I'm going to create a new snippet
+
+00:26:15.360 --> 00:26:18.119
+and use this is for example when you look at this
+
+00:26:18.120 --> 00:26:20.599
+if you if you have the the venue uh the new
+
+00:26:20.600 --> 00:26:26.159
+sorry the new way of the the new emacs uh
+
+00:26:26.160 --> 00:26:31.639
+semantical highlighting working
+
+00:26:31.640 --> 00:26:39.199
+this would be quite cramped this is why i'm using
+
+00:26:39.200 --> 00:26:43.039
+this is why i said uh the snippet the
+
+00:26:43.040 --> 00:26:49.039
+so is this more or less what you're talking about
+
+00:26:49.040 --> 00:27:01.479
+This is what you're talking about. Snippet. Save the snippet.
+
+00:27:01.480 --> 00:27:15.479
+So I'm going to... Snippet, load and put window.
+
+00:27:15.480 --> 00:27:21.279
+Enable interaction mode. Yes, I'm going to save.
+
+00:27:21.280 --> 00:27:24.439
+And I'm going to save that as FD test. on the file.
+
+00:27:24.440 --> 00:27:41.479
+No, I'm going to save this. Load. Load input window.
+
+00:27:41.480 --> 00:27:53.679
+I'm going to put this in Emacs Lisp mode. I want to save it. No.
+
+00:27:53.680 --> 00:28:27.359
+I'm going to write that directly into Emacs Lisp mode.
+
+00:28:27.360 --> 00:28:30.639
+going to go back into scratch buffer
+
+00:28:30.640 --> 00:28:43.079
+and here I have it and we have it here but anyhow
+
+00:28:43.080 --> 00:28:52.079
+and I'm just going to try to see if I feel like empty of course
+
+00:28:52.080 --> 00:28:58.839
+there's only one it will not show in Corfu,
+
+00:28:58.840 --> 00:29:01.519
+but I mean, I don't have any problems
+
+00:29:01.520 --> 00:29:20.999
+with that, as you see. Was that what you were meaning?
+
+00:29:21.000 --> 00:29:24.839
+Yeah, I guess that works. Fine.
+
+00:29:24.840 --> 00:29:29.039
+All right, shall we wrap up here
+
+00:29:29.040 --> 00:29:31.279
+so that you can have supper
+
+00:29:31.280 --> 00:29:40.919
+and have lunch and other things? Okay, fine for me.
+
+00:29:40.920 --> 00:29:46.319
+I was hoping to see the drop down. Just a second.
+
+00:29:46.320 --> 00:29:49.959
+I think we can do that too. Two seconds.
+
+00:29:49.960 --> 00:29:52.559
+How can we do that with a drop down?
+
+00:29:52.560 --> 00:29:57.719
+Yeah, if I say something like this.
+
+00:29:57.720 --> 00:30:04.919
+And then I go and save it.
+
+00:30:04.920 --> 00:30:08.799
+And I'm going to go and write this
+
+00:30:08.800 --> 00:30:16.719
+into, with a second, fine.
+
+00:30:16.720 --> 00:30:19.919
+And now I need to quit here, sorry.
+
+00:30:19.920 --> 00:30:26.639
+And I'm going to come back in a second with another remark.
+
+00:30:26.640 --> 00:30:31.559
+Well, I'm bringing back and now let's see.
+
+00:30:31.560 --> 00:30:34.839
+Let's see what we have in your snippets.
+
+00:30:34.840 --> 00:30:44.159
+It's not there. Why not? Just a second. Let's see if I go.
+
+00:30:44.160 --> 00:30:47.839
+I don't know if it matters that the name was
+
+00:30:47.840 --> 00:30:52.599
+that didn't have the characters in the beginning.
+
+00:30:52.600 --> 00:31:03.159
+Just a second. I think I know what is happening here.
+
+00:31:03.160 --> 00:31:21.439
+Do I have here? I have them. I'm going to clean.
+
+00:31:21.440 --> 00:31:28.879
+Oh, you're back in your home directories. Why?
+
+00:31:28.880 --> 00:31:35.879
+CD dash to get back in. Yeah. That's right.
+
+00:31:35.880 --> 00:31:37.799
+So you see how the name also has
+
+00:31:37.800 --> 00:31:39.319
+it doesn't have the same as the keys.
+
+00:31:39.320 --> 00:31:41.039
+I don't know if that affects what shows up.
+
+00:31:41.040 --> 00:31:49.399
+Yeah, we we can try that. That's a quick one. This is my.
+
+00:31:49.400 --> 00:31:51.279
+Fine, now that I have this,
+
+00:31:51.280 --> 00:31:55.359
+which is going to be quicker, we check again.
+
+00:31:55.360 --> 00:31:57.919
+They both seem to be the same now
+
+00:31:57.920 --> 00:32:03.079
+and I don't know if that affects, but anyhow, let's try it.
+
+00:32:03.080 --> 00:32:07.679
+I go and then I look at the AR snippets, if it's there.
+
+00:32:07.680 --> 00:32:11.879
+Yes, it is. Yeah, it's there.
+
+00:32:11.880 --> 00:32:18.559
+And then if I say there, there you are. Oh, look at that.
+
+00:32:18.560 --> 00:32:24.159
+It doesn't seem to be affecting. Fantastic.
+
+00:32:24.160 --> 00:32:32.119
+And by the way, it is there.
+
+00:32:32.120 --> 00:32:33.999
+Yeah, I really should spend time
+
+00:32:34.000 --> 00:32:36.599
+getting more templates set up with Snippet.
+
+00:32:36.600 --> 00:32:37.639
+I really love the fact that
+
+00:32:37.640 --> 00:32:40.399
+you can evaluate Emacs Lisp in it too.
+
+00:32:40.400 --> 00:32:43.399
+Yeah, I mean, just to make it bigger,
+
+00:32:43.400 --> 00:32:51.359
+try that because if I go into my, for example,
+
+00:32:51.360 --> 00:32:55.679
+into my org mode stuff
+
+00:32:55.680 --> 00:32:59.439
+and in my org mode, I go to the article,
+
+00:32:59.440 --> 00:33:03.319
+which is one of the big ones.
+
+00:33:03.320 --> 00:33:06.199
+I have things like, for example,
+
+00:33:06.200 --> 00:33:10.719
+I defined a couple of functions here to do if it's empty,
+
+00:33:10.720 --> 00:33:16.399
+if that is empty, just add a white space.
+
+00:33:16.400 --> 00:33:19.599
+If one is empty, add a white space.
+
+00:33:19.600 --> 00:33:23.319
+add a white space here so it becomes a comment.
+
+00:33:23.320 --> 00:33:27.279
+I have functions for to do more things on that
+
+00:33:27.280 --> 00:33:29.799
+and I also have like menus to see
+
+00:33:29.800 --> 00:33:33.599
+what language I want to choose for
+
+00:33:33.600 --> 00:33:37.079
+for my spell checking and so on so
+
+00:33:37.080 --> 00:33:40.319
+and that's all that's as you see
+
+00:33:40.320 --> 00:33:41.959
+this is a Lisp being evaluated
+
+00:33:41.960 --> 00:33:45.119
+so yes do I really encourage you
+
+00:33:45.120 --> 00:33:46.519
+I've also heard people use it,
+
+00:33:46.520 --> 00:33:47.799
+like, especially if they're working
+
+00:33:47.800 --> 00:33:49.919
+in different programming languages,
+
+00:33:49.920 --> 00:33:52.399
+so they can just have the syntax
+
+00:33:52.400 --> 00:33:54.359
+for the different languages
+
+00:33:54.360 --> 00:33:58.239
+be condensed into a consistent abbreviation. Yeah.
+
+00:33:58.240 --> 00:34:01.319
+And look, this is my article. I have another.
+
+00:34:01.320 --> 00:34:07.799
+This is when I'm writing articles. I have another one.
+
+00:34:07.800 --> 00:34:10.279
+I have another one for writing letters
+
+00:34:10.280 --> 00:34:14.399
+in org mode and so on. So, it's like letter, block,
+
+00:34:14.400 --> 00:34:16.559
+and you have the complete infrastructure
+
+00:34:16.560 --> 00:34:20.159
+and you don't have to type it by hand.
+
+00:34:20.160 --> 00:34:22.879
+So, it's really, really nice.
+
+00:34:22.880 --> 00:34:25.959
+Hmm, I think it might be nice to have
+
+00:34:25.960 --> 00:34:28.079
+a future Emacs carnival, you know,
+
+00:34:28.080 --> 00:34:31.239
+shared blogging theme thing be around
+
+00:34:31.240 --> 00:34:33.359
+having people share their snippets.
+
+00:34:33.360 --> 00:34:39.359
+No snippets and other things like for example,
+
+00:34:39.360 --> 00:34:41.319
+this is something stupid.
+
+00:34:41.320 --> 00:34:44.519
+I'm switching my themes. All right.
+
+00:34:44.520 --> 00:34:48.639
+And of course, there you see,
+
+00:34:48.640 --> 00:34:51.439
+I have also, this is also with,
+
+00:34:51.440 --> 00:34:54.519
+this is my way of switching buffers,
+
+00:34:54.520 --> 00:34:58.159
+which is with the shift control and tab,
+
+00:34:58.160 --> 00:35:00.559
+I can switch different families
+
+00:35:00.560 --> 00:35:02.519
+and then when I'm in a family,
+
+00:35:02.520 --> 00:35:06.999
+I can go and switch with control tab between the different,
+
+00:35:07.000 --> 00:35:15.599
+I'm using tab line by the way. I'm not using the other one.
+
+00:35:15.600 --> 00:35:20.839
+I'm using the old plain tab line with my themes.
+
+00:35:20.840 --> 00:35:23.519
+So that's more or less everything.
+
+00:35:23.520 --> 00:35:26.519
+Thank you for the peek into your workflow.
+
+00:35:26.520 --> 00:35:30.759
+I will work on getting the recordings for the live talks
+
+00:35:30.760 --> 00:35:33.919
+sorted out at some point very soon.
+
+00:35:33.920 --> 00:35:37.839
+I might even be able to get them out next week.
+
+00:35:37.840 --> 00:35:44.920
+So thanks again. All right. Have a nice supper. Same to you.
diff --git a/2025/captions/emacsconf-2025-gardening--gardening-in-emacs-a-windows-users-tale-of-tending-tweaking-and-triumph--marco-bresciani--main--chapters.vtt b/2025/captions/emacsconf-2025-gardening--gardening-in-emacs-a-windows-users-tale-of-tending-tweaking-and-triumph--marco-bresciani--main--chapters.vtt
new file mode 100644
index 00000000..0b803303
--- /dev/null
+++ b/2025/captions/emacsconf-2025-gardening--gardening-in-emacs-a-windows-users-tale-of-tending-tweaking-and-triumph--marco-bresciani--main--chapters.vtt
@@ -0,0 +1,32 @@
+WEBVTT
+
+
+00:00:05.980 --> 00:00:39.039
+Introduction
+
+00:00:39.040 --> 00:02:11.519
+What is a digital garden?
+
+00:02:11.520 --> 00:03:39.199
+Why a digital garden?
+
+00:03:39.200 --> 00:04:57.439
+How to digital garden?
+
+00:04:57.440 --> 00:08:18.819
+How to make Emacs portable, on Windows
+
+00:08:18.820 --> 00:10:36.119
+My Emacs customization
+
+00:10:36.120 --> 00:14:50.659
+PlantUML and Japanese
+
+00:14:50.660 --> 00:16:04.519
+My Org Mode publishing configuration
+
+00:16:04.520 --> 00:17:03.279
+The final result
+
+00:17:03.280 --> 00:17:36.880
+Thank you for listening
diff --git a/2025/captions/emacsconf-2025-gardening--gardening-in-emacs-a-windows-users-tale-of-tending-tweaking-and-triumph--marco-bresciani--main.vtt b/2025/captions/emacsconf-2025-gardening--gardening-in-emacs-a-windows-users-tale-of-tending-tweaking-and-triumph--marco-bresciani--main.vtt
new file mode 100644
index 00000000..b853b855
--- /dev/null
+++ b/2025/captions/emacsconf-2025-gardening--gardening-in-emacs-a-windows-users-tale-of-tending-tweaking-and-triumph--marco-bresciani--main.vtt
@@ -0,0 +1,1110 @@
+WEBVTT captioned by rodion
+
+NOTE Introduction
+
+00:00:05.980 --> 00:00:08.959
+Hello, everyone. My name is Marco
+
+00:00:08.960 --> 00:00:13.359
+and today I'll talk about gardening with Emacs.
+
+00:00:13.360 --> 00:00:17.199
+Gardening? Yes, but digital gardening, obviously.
+
+00:00:17.200 --> 00:00:20.359
+But first, one thing: I'm sorry, yes,
+
+00:00:20.360 --> 00:00:22.519
+I'm a Microsoft Windows user.
+
+00:00:22.520 --> 00:00:24.679
+I know, I know. I said I'm sorry.
+
+00:00:24.680 --> 00:00:26.159
+Please stick with me.
+
+00:00:26.160 --> 00:00:27.319
+Do not skip this talk!
+
+00:00:27.320 --> 00:00:31.199
+Promise, I'll show you only free software!
+
+00:00:31.200 --> 00:00:33.199
+And speaking about free software,
+
+00:00:33.200 --> 00:00:35.919
+yes, this presentation is not made with Emacs,
+
+00:00:35.920 --> 00:00:39.039
+but I made it with LibreOffice.
+
+NOTE What is a digital garden?
+
+00:00:39.040 --> 00:00:41.999
+So what is a digital garden?
+
+00:00:42.000 --> 00:00:43.319
+A digital garden is
+
+00:00:43.320 --> 00:00:45.479
+your personal corner of the internet
+
+00:00:45.480 --> 00:00:47.839
+to cultivate ideas.
+
+00:00:47.840 --> 00:00:50.079
+Think of it like a real garden
+
+00:00:50.080 --> 00:00:54.394
+where you plant seeds (your new thoughts),
+
+00:00:54.395 --> 00:00:57.379
+you water them (you add the details),
+
+00:00:57.380 --> 00:00:59.959
+and watch them grow.
+
+00:00:59.960 --> 00:01:03.199
+Unlike a fixed-date blog,
+
+00:01:03.200 --> 00:01:06.319
+which shows only polished results,
+
+00:01:06.320 --> 00:01:09.279
+a garden includes works-in-progress--
+
+00:01:09.280 --> 00:01:12.479
+like seedlings in a greenhouse.
+
+00:01:12.480 --> 00:01:14.759
+It's a network of notes
+
+00:01:14.760 --> 00:01:17.319
+connected by links and tags,
+
+00:01:17.320 --> 00:01:21.279
+helping you see patterns in your thinking.
+
+00:01:21.280 --> 00:01:24.159
+Here, the ideas are not static;
+
+00:01:24.160 --> 00:01:26.399
+they evolve as you learn,
+
+00:01:26.400 --> 00:01:29.359
+creating a living archive of your mind,
+
+00:01:29.360 --> 00:01:37.739
+just like the plants in a garden grow.
+
+00:01:37.740 --> 00:01:41.519
+Also here, instead of the blog platform,
+
+00:01:41.520 --> 00:01:46.879
+you decide the tools, the look, and your pace.
+
+00:01:46.880 --> 00:01:50.599
+I'll show you how I run my garden
+
+00:01:50.600 --> 00:01:53.039
+with plain Org Mode files
+
+00:01:53.040 --> 00:01:55.639
+and our favorite Emacs.
+
+00:01:55.640 --> 00:01:57.879
+In short: a digital garden
+
+00:01:57.880 --> 00:02:01.039
+is a flexible, pressure-free space
+
+00:02:01.040 --> 00:02:04.212
+to explore, learn in public
+
+00:02:04.213 --> 00:02:07.159
+and connect the knowledge--
+
+00:02:07.160 --> 00:02:11.519
+your own digital ecosystem.
+
+NOTE Why a digital garden?
+
+00:02:11.520 --> 00:02:13.559
+Why a digital garden?
+
+00:02:13.560 --> 00:02:17.359
+Well, a digital garden keeps knowledge alive:
+
+00:02:17.360 --> 00:02:21.039
+instead of freezing content after "publish,"
+
+00:02:21.040 --> 00:02:22.399
+you revisit and refine it,
+
+00:02:22.400 --> 00:02:26.079
+so ideas stay accurate and useful.
+
+00:02:26.080 --> 00:02:29.239
+By sharing half-formed thoughts early,
+
+00:02:29.240 --> 00:02:31.559
+you lower the barrier to writing
+
+00:02:31.560 --> 00:02:34.159
+and let concepts evolve gradually--
+
+00:02:34.160 --> 00:02:37.839
+no need to wait for one "perfect" essay.
+
+00:02:37.840 --> 00:02:41.119
+Links and tags weave ideas together,
+
+00:02:41.120 --> 00:02:43.479
+revealing unexpected patterns
+
+00:02:43.480 --> 00:02:46.439
+that isolated posts would hide.
+
+00:02:46.440 --> 00:02:49.919
+This approach sheds perfectionism,
+
+00:02:49.920 --> 00:02:52.559
+encouraging small, regular updates
+
+00:02:52.560 --> 00:02:55.879
+that build momentum and invite collaboration.
+
+00:02:55.880 --> 00:03:00.079
+Well, actually, even not regular updates are fine.
+
+00:03:00.080 --> 00:03:04.879
+Early readers can offer feedback, share resources,
+
+00:03:04.880 --> 00:03:07.239
+or identify blind spots,
+
+00:03:07.240 --> 00:03:12.039
+accelerating your and their improvement.
+
+00:03:12.040 --> 00:03:14.719
+Over time, your garden can become
+
+00:03:14.720 --> 00:03:18.439
+a searchable showcase of your thinking,
+
+00:03:18.440 --> 00:03:21.239
+a living résumé for collaborators, peers,
+
+00:03:21.240 --> 00:03:25.919
+or anyone curious about how you learn.
+
+00:03:25.920 --> 00:03:27.799
+And what about me?
+
+00:03:27.800 --> 00:03:29.119
+Why a digital garden?
+
+00:03:29.120 --> 00:03:33.139
+Well, I actually have started a digital garden
+
+00:03:33.140 --> 00:03:39.199
+to learn Emacs and Org Mode.
+
+NOTE How to digital garden?
+
+00:03:39.200 --> 00:03:41.439
+How to digital garden?
+
+00:03:41.440 --> 00:03:42.999
+Well, start simple.
+
+00:03:43.000 --> 00:03:45.079
+Pick one place for your notes
+
+00:03:45.080 --> 00:03:46.119
+and put them online.
+
+00:03:46.120 --> 00:03:50.419
+Even the worst Github ever out there is fine.
+
+00:03:50.420 --> 00:03:53.519
+Then, well, maybe you can move out of GitHub,
+
+00:03:53.520 --> 00:03:55.019
+but that's another story.
+
+00:03:55.020 --> 00:03:57.919
+Capture your ideas quickly.
+
+00:03:57.920 --> 00:04:00.239
+Publish them, even rough,
+
+00:04:00.240 --> 00:04:02.939
+and maybe, if you want, tag them as seeds
+
+00:04:02.940 --> 00:04:06.439
+to let the other people know they are rough.
+
+00:04:06.440 --> 00:04:09.439
+Learning in public is useful
+
+00:04:09.440 --> 00:04:11.579
+because link-related pages
+
+00:04:11.580 --> 00:04:16.859
+so that readers can work through your thinking,
+
+00:04:16.860 --> 00:04:19.919
+helping them see your connections.
+
+00:04:19.920 --> 00:04:22.039
+Once a week or whenever you want,
+
+00:04:22.040 --> 00:04:24.959
+prune outdated pieces if you want
+
+00:04:24.960 --> 00:04:26.519
+or keep them there
+
+00:04:26.520 --> 00:04:30.459
+and add fresh insights if you have any.
+
+00:04:30.460 --> 00:04:33.399
+Share your updates openly.
+
+00:04:33.400 --> 00:04:38.079
+Invite comments because steady small steps
+
+00:04:38.080 --> 00:04:41.559
+will keep the garden thriving.
+
+00:04:41.560 --> 00:04:43.239
+And what about me?
+
+00:04:43.240 --> 00:04:46.359
+How I do digital garden work with Emacs?
+
+00:04:46.360 --> 00:04:51.139
+With Org Mode and its publishing to HTML file,
+
+00:04:51.140 --> 00:04:57.439
+and we will see it in a moment.
+
+NOTE How to make Emacs portable, on Windows
+
+00:04:57.440 --> 00:05:01.319
+How to make Emacs portable on Windows
+
+00:05:01.320 --> 00:05:03.699
+is the first topic.
+
+00:05:03.700 --> 00:05:05.999
+Well, being in Windows,
+
+00:05:06.000 --> 00:05:08.739
+I have the advantage and the possibility
+
+00:05:08.740 --> 00:05:10.879
+to bring and use my data
+
+00:05:10.880 --> 00:05:14.299
+and software basically everywhere:
+
+00:05:14.300 --> 00:05:18.159
+home, office, my sister-in-law's PC
+
+00:05:18.160 --> 00:05:19.439
+when she needs technical help,
+
+00:05:19.440 --> 00:05:21.439
+friends and the like.
+
+00:05:21.440 --> 00:05:23.239
+So for these reasons,
+
+00:05:23.240 --> 00:05:25.319
+it's been many, many years
+
+00:05:25.320 --> 00:05:28.519
+I'm using exclusively portable applications
+
+00:05:28.520 --> 00:05:31.539
+that do not need an installation
+
+00:05:31.540 --> 00:05:33.239
+and bring their own data
+
+00:05:33.240 --> 00:05:37.319
+and configuration bundled together.
+
+00:05:37.320 --> 00:05:38.799
+And now also Emacs is portable,
+
+00:05:38.800 --> 00:05:43.679
+inside my tiny, really tiny, USB key.
+
+00:05:43.680 --> 00:05:44.839
+How?
+
+00:05:44.840 --> 00:05:46.919
+I mean: not being sure
+
+00:05:46.920 --> 00:05:48.799
+if my USB key drive letter
+
+00:05:48.800 --> 00:05:52.119
+will be D:, E:, K:,
+
+00:05:52.120 --> 00:05:53.639
+or whatever other drive letter
+
+00:05:53.640 --> 00:05:54.759
+will be assigned to it
+
+00:05:54.760 --> 00:05:57.719
+by the system I'm plugging it into,
+
+00:05:57.720 --> 00:06:00.319
+how can I specify, to Emacs,
+
+00:06:00.320 --> 00:06:04.439
+that its home folder is on my USB?
+
+00:06:04.440 --> 00:06:07.359
+Well, I could maybe have used relative paths,
+
+00:06:07.360 --> 00:06:10.879
+but then, where's the fun of hacking things?
+
+00:06:10.880 --> 00:06:12.699
+The trick here is
+
+00:06:12.700 --> 00:06:17.679
+the not-so-well-known ~dp0 system variable
+
+00:06:17.680 --> 00:06:20.699
+that contains the execution directory
+
+00:06:20.700 --> 00:06:25.519
+full path of the executable file.
+
+00:06:25.520 --> 00:06:29.039
+And yes, it ends with a backslash,
+
+00:06:29.040 --> 00:06:33.339
+so composing it with other literal paths is ugly as well.
+
+00:06:33.340 --> 00:06:37.539
+The ~dp0 variable is only available
+
+00:06:37.540 --> 00:06:40.759
+inside a batch file during its execution,
+
+00:06:40.760 --> 00:06:46.719
+and expands to the drive (d) and the path (p),
+
+00:06:46.720 --> 00:06:50.700
+in which that batch file (0th)
+
+00:06:50.701 --> 00:06:55.499
+command line parameter is located
+
+00:06:55.500 --> 00:06:58.439
+(that obviously cannot change
+
+00:06:58.440 --> 00:07:02.399
+because it's executing).
+
+00:07:02.400 --> 00:07:04.679
+The data are obtained
+
+00:07:04.680 --> 00:07:08.733
+from the %0 system variable
+
+00:07:08.734 --> 00:07:10.599
+that contains the batch file name.
+
+00:07:10.600 --> 00:07:12.439
+I actually have never tried,
+
+00:07:12.440 --> 00:07:16.279
+but it should even allow to let the batch run
+
+00:07:16.280 --> 00:07:19.819
+from a UNC network location
+
+00:07:19.820 --> 00:07:22.639
+with no mapped drive letter at all!
+
+00:07:22.640 --> 00:07:24.279
+And that's the batch file
+
+00:07:24.280 --> 00:07:28.279
+I'm using to run Emacs with an automatically selected
+
+00:07:28.280 --> 00:07:31.139
+and fixed Emacs folder,
+
+00:07:31.140 --> 00:07:33.119
+emacshome folder,
+
+00:07:33.120 --> 00:07:35.899
+sibling of the unzipped Emacs one,
+
+00:07:35.900 --> 00:07:37.679
+regardless the computer I'm in
+
+00:07:37.680 --> 00:07:40.219
+and the assigned drive letter.
+
+00:07:40.220 --> 00:07:42.159
+If you need a portable Emacs,
+
+00:07:42.160 --> 00:07:45.519
+this is probably the simplest way to go!
+
+00:07:45.520 --> 00:07:48.399
+Just put the runemacs.bat file
+
+00:07:48.400 --> 00:07:50.079
+in your unzipped Emacs
+
+00:07:50.080 --> 00:07:54.379
+(well, 30.2 actually now) bin folder,
+
+00:07:54.380 --> 00:07:56.519
+and your Emacs and its configuration
+
+00:07:56.520 --> 00:07:58.619
+will always be there with you.
+
+00:07:58.620 --> 00:08:00.199
+With this, I'm basically
+
+00:08:00.200 --> 00:08:01.559
+creating the possibility
+
+00:08:01.560 --> 00:08:05.239
+to bring my own digital garden with me,
+
+00:08:05.240 --> 00:08:09.466
+just like a little desk Zen garden,
+
+00:08:09.467 --> 00:08:11.479
+and together with it, also,
+
+00:08:11.480 --> 00:08:13.859
+all the tools that I need to work on it,
+
+00:08:13.860 --> 00:08:18.819
+always with me, in my USB key.
+
+NOTE My Emacs customization
+
+00:08:18.820 --> 00:08:20.679
+Speaking about configuration,
+
+00:08:20.680 --> 00:08:22.199
+here comes the second topic:
+
+00:08:22.200 --> 00:08:25.479
+my Emacs customization.
+
+00:08:25.480 --> 00:08:28.079
+Having a portable Emacs allows to
+
+00:08:28.080 --> 00:08:31.319
+always have the configuration with me.
+
+00:08:31.320 --> 00:08:33.559
+Yes, okay, but which configuration?
+
+00:08:33.560 --> 00:08:38.519
+Well, obviously, I'm speaking of the init.el file
+
+00:08:38.520 --> 00:08:41.999
+that lives inside of the emacs.d folder
+
+00:08:42.000 --> 00:08:45.239
+in my emacshome portable configuration folder
+
+00:08:45.240 --> 00:08:46.879
+that we just saw.
+
+00:08:46.880 --> 00:08:48.319
+I'm not an Emacs expert,
+
+00:08:48.320 --> 00:08:51.519
+but I want to highlight a point here
+
+00:08:51.520 --> 00:08:55.559
+that has to be clear to every one of us:
+
+00:08:55.560 --> 00:08:59.159
+the set of basic considerations I had
+
+00:08:59.160 --> 00:09:02.019
+for text width, tabs versus spaces,
+
+00:09:02.020 --> 00:09:05.139
+trailing spaces, and so on.
+
+00:09:05.140 --> 00:09:07.299
+As you can see here,
+
+00:09:07.300 --> 00:09:08.959
+I'm pretty opinionated,
+
+00:09:08.960 --> 00:09:10.759
+but this is the important part:
+
+00:09:10.760 --> 00:09:15.339
+we are lucky enough to be able to use Emacs,
+
+00:09:15.340 --> 00:09:16.919
+that is presumably
+
+00:09:16.920 --> 00:09:20.359
+the most highly configurable tool ever,
+
+00:09:20.360 --> 00:09:21.679
+so let's use it!
+
+00:09:21.680 --> 00:09:24.279
+Remember that it's your Emacs,
+
+00:09:24.280 --> 00:09:27.859
+and you can and must configure it
+
+00:09:27.860 --> 00:09:28.879
+for your needs,
+
+00:09:28.880 --> 00:09:33.139
+even if it might seem ridiculous to others.
+
+00:09:33.140 --> 00:09:35.279
+Here, the configuration you see
+
+00:09:35.280 --> 00:09:37.239
+is not the important part.
+
+00:09:37.240 --> 00:09:39.759
+The important part is how you feel
+
+00:09:39.760 --> 00:09:42.419
+with your configuration.
+
+00:09:42.420 --> 00:09:45.359
+For example: I have a fill-column-indicator
+
+00:09:45.360 --> 00:09:47.319
+at 72 characters,
+
+00:09:47.320 --> 00:09:49.479
+I prefer spaces instead of tabs,
+
+00:09:49.480 --> 00:09:53.019
+no trailing spaces, truncate lines, and so on.
+
+00:09:53.020 --> 00:09:55.479
+It might seem weird to some of you
+
+00:09:55.480 --> 00:09:57.959
+and to most of my colleagues
+
+00:09:57.960 --> 00:09:58.959
+(and friends as well,
+
+00:09:58.960 --> 00:10:00.619
+but that's another story!)
+
+00:10:00.620 --> 00:10:02.239
+and it might even be.
+
+00:10:02.240 --> 00:10:05.199
+But I'm comfortable with my configuration,
+
+00:10:05.200 --> 00:10:07.599
+and you should be with yours too.
+
+00:10:07.600 --> 00:10:11.479
+That is: as an owner and worker
+
+00:10:11.480 --> 00:10:13.479
+of my own digital garden,
+
+00:10:13.480 --> 00:10:15.719
+it's obviously easier for me
+
+00:10:15.720 --> 00:10:18.079
+to choose my own tools
+
+00:10:18.080 --> 00:10:21.039
+and adapt those to my needs,
+
+00:10:21.040 --> 00:10:23.159
+instead of the opposite!
+
+00:10:23.160 --> 00:10:25.719
+If I want to put the roses
+
+00:10:25.720 --> 00:10:27.759
+in a circle instead of a row
+
+00:10:27.760 --> 00:10:30.399
+that is maybe the best practice, who cares?
+
+00:10:30.400 --> 00:10:36.119
+It's my garden, and I use it as I want.
+
+NOTE PlantUML and Japanese
+
+00:10:36.120 --> 00:10:38.439
+Continuing on the configuration party,
+
+00:10:38.440 --> 00:10:44.859
+the third topic is PlantUML and Japanese.
+
+00:10:44.860 --> 00:10:47.199
+Why those two are listed together?
+
+00:10:47.200 --> 00:10:48.679
+Well, they are weird enough
+
+00:10:48.680 --> 00:10:50.879
+to be both part of my configuration.
+
+00:10:50.880 --> 00:10:52.839
+First, I think PlantUML
+
+00:10:52.840 --> 00:10:55.019
+is a very nice and powerful tool,
+
+00:10:55.020 --> 00:10:57.359
+so integrating it in Emacs
+
+00:10:57.360 --> 00:10:58.899
+is pretty useful,
+
+00:10:58.900 --> 00:11:01.079
+even if I'm currently using it
+
+00:11:01.080 --> 00:11:04.239
+only to generate SVG images
+
+00:11:04.240 --> 00:11:08.959
+when publishing my digital garden to HTML.
+
+00:11:08.960 --> 00:11:10.599
+There are some pain points
+
+00:11:10.600 --> 00:11:11.759
+that I still have to solve,
+
+00:11:11.760 --> 00:11:14.739
+and I know that it's also possible to use it
+
+00:11:14.740 --> 00:11:16.279
+for (pre)viewing diagrams
+
+00:11:16.280 --> 00:11:19.159
+directly in Emacs, without publishing,
+
+00:11:19.160 --> 00:11:22.839
+but maybe I don't need this feature at the moment.
+
+00:11:22.840 --> 00:11:27.119
+And I have to thank our favorite Sacha Chua here,
+
+00:11:27.120 --> 00:11:29.279
+because she taught me (through Mastodon)
+
+00:11:29.280 --> 00:11:32.359
+how to automatically answer y,
+
+00:11:32.360 --> 00:11:33.919
+when publishing in HTML,
+
+00:11:33.920 --> 00:11:36.919
+every time that PlantUML has to (re)generate an SVG.
+
+00:11:36.920 --> 00:11:39.199
+So, thank you Sacha.
+
+00:11:39.200 --> 00:11:41.839
+Moving to Japanese, let me go back to
+
+00:11:41.840 --> 00:11:43.559
+the previous slide for a moment
+
+00:11:43.560 --> 00:11:46.319
+to show you a bit more in detail
+
+00:11:46.320 --> 00:11:49.799
+the coding system I've configured.
+
+00:11:49.800 --> 00:11:54.239
+If this PC is helping me in moving
+
+00:11:54.240 --> 00:11:56.359
+back to the previous slide.
+
+00:11:56.360 --> 00:12:02.519
+Okay, so let me... No, it's not working.
+
+00:12:02.520 --> 00:12:05.819
+It's not... Okay.
+
+00:12:05.820 --> 00:12:09.399
+So, speaking about Japanese,
+
+00:12:09.400 --> 00:12:12.359
+I have studied Japanese.
+
+00:12:12.360 --> 00:12:13.799
+My wife is Japanese,
+
+00:12:13.800 --> 00:12:15.599
+but that's a detail.
+
+00:12:15.600 --> 00:12:18.039
+So I frequently write in Japanese,
+
+00:12:18.040 --> 00:12:19.639
+and I wanted to write in Japanese
+
+00:12:19.640 --> 00:12:21.219
+also inside Emacs.
+
+00:12:21.220 --> 00:12:23.239
+I learned, as you can see,
+
+00:12:23.240 --> 00:12:25.559
+that UTF-8 DOS
+
+00:12:25.560 --> 00:12:28.479
+is a more than enough coding system
+
+00:12:28.480 --> 00:12:31.139
+to allow me writing in the same file,
+
+00:12:31.140 --> 00:12:35.639
+both Italian with all our accented letters
+
+00:12:35.640 --> 00:12:40.359
+and Japanese through Windows IME system.
+
+00:12:40.360 --> 00:12:44.879
+This allows me to properly write, save, read files,
+
+00:12:44.880 --> 00:12:48.719
+but it was not enough for copying
+
+00:12:48.720 --> 00:12:51.179
+and pasting Japanese text.
+
+00:12:51.180 --> 00:12:55.119
+If I copied some Japanese text from the browser
+
+00:12:55.120 --> 00:12:56.759
+or even from another text editor,
+
+00:12:56.760 --> 00:12:57.879
+it didn't work.
+
+00:12:57.880 --> 00:13:00.679
+It only pasted the rubbish in Emacs
+
+00:13:00.680 --> 00:13:04.559
+until I found out that for whatever reason,
+
+00:13:04.560 --> 00:13:07.679
+I had to use, as you can see in bold,
+
+00:13:07.680 --> 00:13:13.279
+UTF-16LE DOS for the selection coding system.
+
+00:13:13.280 --> 00:13:14.879
+And this basically allows me
+
+00:13:14.880 --> 00:13:17.719
+to copy Japanese from another file,
+
+00:13:17.720 --> 00:13:19.599
+text editor, browser, whatever,
+
+00:13:19.600 --> 00:13:22.699
+and paste it in Emacs and vice versa.
+
+00:13:22.700 --> 00:13:24.399
+So the lesson here is,
+
+00:13:24.400 --> 00:13:26.279
+if you need European languages
+
+00:13:26.280 --> 00:13:29.159
+and Japanese inside your Emacs,
+
+00:13:29.160 --> 00:13:32.359
+well, this coding system works.
+
+00:13:32.360 --> 00:13:36.999
+Let me go back to PlantUML and Japanese.
+
+00:13:37.000 --> 00:13:40.519
+Another interesting thing about Japanese
+
+00:13:40.520 --> 00:13:44.279
+is this nice macro I found
+
+00:13:44.280 --> 00:13:46.979
+in the Emacs mailing list
+
+00:13:46.980 --> 00:13:49.719
+to add furigana to Japanese kanjis
+
+00:13:49.720 --> 00:13:53.639
+when exporting or publishing to HTML.
+
+00:13:53.640 --> 00:13:55.559
+It's actually even possible to do the same
+
+00:13:55.560 --> 00:13:57.679
+with LaTeX export/publish
+
+00:13:57.680 --> 00:14:00.359
+and I'll give you some references later.
+
+00:14:00.360 --> 00:14:03.239
+It's very useful because I can show,
+
+00:14:03.240 --> 00:14:06.859
+as you can see on the example at the bottom,
+
+00:14:06.860 --> 00:14:10.219
+I can show the easier-to-read pronunciation
+
+00:14:10.220 --> 00:14:14.079
+even for readers with really basic knowledge of Japanese.
+
+00:14:14.080 --> 00:14:17.319
+(And it's also useful to myself, actually,
+
+00:14:17.320 --> 00:14:20.259
+to remember how to pronounce those kanji!)
+
+00:14:20.260 --> 00:14:22.559
+For those of you that have no idea
+
+00:14:22.560 --> 00:14:27.039
+on how to read or write Japanese, well, sorry.
+
+00:14:27.040 --> 00:14:31.479
+As you can see, the garden evolved from the beginning
+
+00:14:31.480 --> 00:14:33.319
+on how to use Emacs and Org Mode,
+
+00:14:33.320 --> 00:14:35.199
+and it's evolving further,
+
+00:14:35.200 --> 00:14:37.399
+and here it's becoming open to
+
+00:14:37.400 --> 00:14:40.639
+different plants (or PlantUML…)
+
+00:14:40.640 --> 00:14:43.839
+and also be able to adapt
+
+00:14:43.840 --> 00:14:50.659
+to different foreign visitors' needs.
+
+NOTE My Org Mode publishing configuration
+
+00:14:50.660 --> 00:14:54.879
+Third topic: my Org Mode publishing configuration,
+
+00:14:54.880 --> 00:14:58.159
+or where the digital garden is born.
+
+00:14:58.160 --> 00:15:00.839
+The latest (but not least!) part of
+
+00:15:00.840 --> 00:15:03.359
+the creation and tending of my digital garden
+
+00:15:03.360 --> 00:15:07.119
+is the publishing file that is needed to export
+
+00:15:07.120 --> 00:15:11.279
+the whole Org Mode project into HTML.
+
+00:15:11.280 --> 00:15:14.759
+Here I do not have many fancy configurations,
+
+00:15:14.760 --> 00:15:19.519
+even though I'm copying the publishing.el file itself
+
+00:15:19.520 --> 00:15:21.459
+in the output folder,
+
+00:15:21.460 --> 00:15:24.859
+to make it available in the published version of the garden.
+
+00:15:24.860 --> 00:15:28.519
+Also I have added the mentioned configuration
+
+00:15:28.520 --> 00:15:32.979
+to manage SVG (or PNG) exports from PlantUML
+
+00:15:32.980 --> 00:15:34.279
+(thank you again, Sacha),
+
+00:15:34.280 --> 00:15:36.999
+and I'm also forcing HTML5
+
+00:15:37.000 --> 00:15:40.059
+without scripts as the result format.
+
+00:15:40.060 --> 00:15:41.239
+Together with this,
+
+00:15:41.240 --> 00:15:43.439
+I also have a fancy CSS addition
+
+00:15:43.440 --> 00:15:44.359
+to the default one
+
+00:15:44.360 --> 00:15:48.239
+that uses the System Font Stack concept
+
+00:15:48.240 --> 00:15:49.759
+to harmonize fonts
+
+00:15:49.760 --> 00:15:51.879
+with readers' local systems,
+
+00:15:51.880 --> 00:15:54.319
+without downloading or injecting
+
+00:15:54.320 --> 00:15:55.279
+external fonts.
+
+00:15:55.280 --> 00:15:57.799
+I've customized links and tags a bit,
+
+00:15:57.800 --> 00:15:59.839
+with the CSS, together with tables
+
+00:15:59.840 --> 00:16:01.159
+and some other pieces here and there,
+
+00:16:01.160 --> 00:16:04.519
+but nothing too much fancy.
+
+NOTE The final result
+
+00:16:04.520 --> 00:16:08.439
+So, this is one (not-so-)random page
+
+00:16:08.440 --> 00:16:10.039
+of my digital garden,
+
+00:16:10.040 --> 00:16:12.359
+or my knowledge 枯山水,
+
+00:16:12.360 --> 00:16:17.619
+my knowledge Zen garden, as I prefer to call it.
+
+00:16:17.620 --> 00:16:20.519
+This is, specifically, the page related
+
+00:16:20.520 --> 00:16:23.639
+to write about the Digital Garden concept itself,
+
+00:16:23.640 --> 00:16:26.079
+as a sort of meta-writing.
+
+00:16:26.080 --> 00:16:27.319
+You can see the different
+
+00:16:27.320 --> 00:16:28.879
+rendering of the links,
+
+00:16:28.880 --> 00:16:31.639
+depending if they are internal, in blue,
+
+00:16:31.640 --> 00:16:37.659
+or external to the garden in gray-ish.
+
+00:16:37.660 --> 00:16:39.439
+You can see the Japanese furigana
+
+00:16:39.440 --> 00:16:40.919
+on top of the kanjis,
+
+00:16:40.920 --> 00:16:44.359
+and you also can see the automatic table of contents,
+
+00:16:44.360 --> 00:16:47.599
+the custom aside component that highlights
+
+00:16:47.600 --> 00:16:50.819
+the latest modification date, and so on.
+
+00:16:50.820 --> 00:16:53.279
+Everything I've spoke about here
+
+00:16:53.280 --> 00:16:55.919
+is available in my digital garden
+
+00:16:55.920 --> 00:16:57.599
+in my knowledge kare-san-sui, again,
+
+00:16:57.600 --> 00:17:00.599
+as a sort of self-description
+
+00:17:00.600 --> 00:17:03.279
+of the digital garden itself.
+
+NOTE Thank you for listening
+
+00:17:03.280 --> 00:17:04.279
+Thank you, everyone,
+
+00:17:04.280 --> 00:17:06.079
+for being with me till the end.
+
+00:17:06.080 --> 00:17:08.719
+So as I said, if you want more details
+
+00:17:08.720 --> 00:17:10.039
+about these topics,
+
+00:17:10.040 --> 00:17:13.159
+take a look at my knowledge kare-san-sui.
+
+00:17:13.160 --> 00:17:16.359
+The link is here, and feel free to contact me
+
+00:17:16.360 --> 00:17:17.479
+through Delta Chat
+
+00:17:17.480 --> 00:17:20.319
+at this email address.
+
+00:17:20.320 --> 00:17:21.319
+Yes, I know.
+
+00:17:21.320 --> 00:17:23.719
+It's a Microsoft email address.
+
+00:17:23.720 --> 00:17:25.079
+It's an old one.
+
+00:17:25.080 --> 00:17:29.019
+I recycled it. I know. It's my fault.
+
+00:17:29.020 --> 00:17:36.880
+Thank you again, and happy Emacs everyone!
diff --git a/2025/captions/emacsconf-2025-gmail--orggmail-a-deep-integration-of-gmail-into-your-org-mode--bala-ramadurai--answers.vtt b/2025/captions/emacsconf-2025-gmail--orggmail-a-deep-integration-of-gmail-into-your-org-mode--bala-ramadurai--answers.vtt
new file mode 100644
index 00000000..c9034d0b
--- /dev/null
+++ b/2025/captions/emacsconf-2025-gmail--orggmail-a-deep-integration-of-gmail-into-your-org-mode--bala-ramadurai--answers.vtt
@@ -0,0 +1,448 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:02.219
+I first of all want to address the feedback.
+
+00:00:02.220 --> 00:00:06.099
+You're absolutely right. I should have stuck to one theme.
+
+00:00:06.100 --> 00:00:09.099
+Unfortunately, I was using vanilla Emacs
+
+00:00:09.100 --> 00:00:10.299
+and not my own config.
+
+00:00:10.300 --> 00:00:13.459
+So to show that it can work, apologies for that.
+
+00:00:13.460 --> 00:00:18.419
+I will keep that in mind the next time I do such a demo.
+
+00:00:18.420 --> 00:00:21.539
+The first question, I mean, the feedback was considered
+
+00:00:21.540 --> 00:00:23.819
+using similar background dark only
+
+00:00:23.820 --> 00:00:25.419
+or light only throughout the help,
+
+00:00:25.420 --> 00:00:29.859
+throughout the help with iStream.
+
+00:00:29.860 --> 00:00:31.819
+The question, the first question is,
+
+00:00:31.820 --> 00:00:35.419
+should I know all my contact email address by heart
+
+00:00:35.420 --> 00:00:38.499
+or is some kind of contact list?
+
+00:00:38.500 --> 00:00:42.019
+Unfortunately, right now, this is just to get started.
+
+00:00:42.020 --> 00:00:45.859
+So it is, you have to know it by heart,
+
+00:00:45.860 --> 00:00:47.619
+but I take this as feedback.
+
+00:00:47.620 --> 00:00:51.339
+I will write this down for myself as a feature request.
+
+00:00:51.340 --> 00:00:53.779
+I will make sure that all contacts
+
+00:00:53.780 --> 00:00:58.419
+or some kind of tab support is present for email addresses.
+
+00:00:58.420 --> 00:01:03.659
+I do not use the org system for replying so much.
+
+00:01:03.660 --> 00:01:06.259
+I use it for knowing the context.
+
+00:01:06.260 --> 00:01:12.019
+So I don't really reply using the org mode itself to reply.
+
+00:01:12.020 --> 00:01:16.019
+So I did not focus on that feature. But this is doable.
+
+00:01:16.020 --> 00:01:18.739
+We can certainly add a tab support
+
+00:01:18.740 --> 00:01:24.619
+for any contacts that you may have, org contacts.
+
+00:01:24.620 --> 00:01:28.059
+Or I don't know if there's any other package that does that.
+
+00:01:28.060 --> 00:01:29.699
+So if it is, let me know.
+
+00:01:29.700 --> 00:01:33.899
+Org contacts is what comes to my mind.
+
+00:01:33.900 --> 00:01:36.739
+The second question is, what would it take
+
+00:01:36.740 --> 00:01:40.139
+to use the org pieces of this with?
+
+00:01:40.140 --> 00:01:45.019
+offline IMAP or other non Gmail mail setups.
+
+00:01:45.020 --> 00:01:46.059
+I use fast mail.
+
+00:01:46.060 --> 00:01:52.779
+Currently, I use only Gmail because that's my workflow
+
+00:01:52.780 --> 00:01:58.019
+and it works with a Gmail API.
+
+00:01:58.020 --> 00:02:00.859
+So which means the Python script that goes along with it
+
+00:02:00.860 --> 00:02:05.179
+only works with Gmail and no other system for now.
+
+00:02:05.180 --> 00:02:06.939
+This is the current package.
+
+00:02:06.940 --> 00:02:09.459
+However, yes, I will note this down.
+
+00:02:09.460 --> 00:02:12.059
+I don't know what it will take
+
+00:02:12.060 --> 00:02:16.379
+to include this offline IMAP setup
+
+00:02:16.380 --> 00:02:18.499
+or any other non-Gmail setup.
+
+00:02:18.500 --> 00:02:23.139
+Let me tinker with it and find out what it will involve.
+
+00:02:23.140 --> 00:02:30.019
+So give me some time, maybe I will get to it.
+
+00:02:30.020 --> 00:02:43.739
+Sorry, sorry. Oops. Okay. Okay. May I continue?
+
+00:02:43.740 --> 00:02:46.739
+Hi, Bella. Yes, please. Sorry for the confusion.
+
+00:02:46.740 --> 00:02:53.179
+Hi, Amin. All right. So the next one is,
+
+00:02:53.180 --> 00:02:56.939
+do you worry about sending some info to a wrong person
+
+00:02:56.940 --> 00:02:58.899
+due to some unseen technical issues,
+
+00:02:58.900 --> 00:03:03.299
+for example, due to memory overflow?
+
+00:03:03.300 --> 00:03:05.739
+Again, I have not been focusing
+
+00:03:05.740 --> 00:03:07.139
+on replying from within Emacs.
+
+00:03:07.140 --> 00:03:09.659
+so much, or using my package,
+
+00:03:09.660 --> 00:03:13.019
+I usually do it through the Gmail interface.
+
+00:03:13.020 --> 00:03:18.299
+I usually use this to get the context within the project,
+
+00:03:18.300 --> 00:03:22.059
+download all the emails, make sure that I have acted on emails
+
+00:03:22.060 --> 00:03:23.859
+which Gmail doesn't do so well.
+
+00:03:23.860 --> 00:03:25.099
+I don't know what the action is.
+
+00:03:25.100 --> 00:03:28.499
+I don't want to use Gmail as a to-do list.
+
+00:03:28.500 --> 00:03:30.146
+Org Mode is great at this.
+
+00:03:30.147 --> 00:03:32.646
+Any work I have to do, any reports I have to compile,
+
+00:03:32.647 --> 00:03:39.099
+all of that Org Mode does. I don't use it for replying
+
+00:03:39.100 --> 00:03:43.459
+or doing its actions around the email, which I focus on.
+
+00:03:43.460 --> 00:03:45.859
+But point taken, let me see
+
+00:03:45.860 --> 00:03:47.779
+if there is a like Gmail offers.
+
+00:03:47.780 --> 00:03:52.219
+you know, for 10 seconds or something you can still undo
+
+00:03:52.220 --> 00:03:54.739
+so that it doesn't go out of your email
+
+00:03:54.740 --> 00:03:59.659
+if you made a mistake or if there's a problem with your,
+
+00:03:59.660 --> 00:04:04.619
+you know, Gmail or email sending should sort of stop.
+
+00:04:04.620 --> 00:04:07.019
+Let me think about that.
+
+00:04:07.020 --> 00:04:09.396
+So, I've not paid attention to that,
+
+00:04:09.397 --> 00:04:11.104
+but I'll take your point.
+
+00:04:11.105 --> 00:04:17.539
+The next one, you should say what org-gmail is
+
+00:04:17.540 --> 00:04:20.219
+and not its goals and non-goals,
+
+00:04:20.220 --> 00:04:22.019
+which in this case is more helpful
+
+00:04:22.020 --> 00:04:24.739
+to help people get their head around this.
+
+00:04:24.740 --> 00:04:26.379
+You had some good ones in your slides,
+
+00:04:26.380 --> 00:04:28.859
+but not your GitHub page. Okay, great.
+
+00:04:28.860 --> 00:04:30.579
+Okay, so I will definitely take
+
+00:04:30.580 --> 00:04:33.779
+the information from the slides
+
+00:04:33.780 --> 00:04:38.499
+and give it to, I mean, put it back into my readme.
+
+00:04:38.500 --> 00:04:40.179
+It's been a while since I updated ReadMe,
+
+00:04:40.180 --> 00:04:42.179
+and you're absolutely right.
+
+00:04:42.180 --> 00:04:45.779
+It probably doesn't say why you need org email.
+
+00:04:45.780 --> 00:04:49.059
+So that would be definitely something that I can do.
+
+00:04:49.060 --> 00:04:51.659
+Wanting to add the goal is an easier way
+
+00:04:51.660 --> 00:04:53.819
+to add one-off email into org mode
+
+00:04:53.820 --> 00:04:56.419
+and org agenda workflows and first.
+
+00:04:56.420 --> 00:04:57.779
+Love seeing a different way
+
+00:04:57.780 --> 00:04:59.539
+of looking at and working with email.
+
+00:04:59.540 --> 00:05:00.659
+Thank you so much for that.
+
+00:05:00.660 --> 00:05:05.619
+Yes, that's the idea here is if we can integrate email
+
+00:05:05.620 --> 00:05:08.339
+and I think there is memacs, you know,
+
+00:05:08.340 --> 00:05:11.579
+that's one package that I love.
+
+00:05:11.580 --> 00:05:17.099
+It can integrate all of the other stuff into your org mode.
+
+00:05:17.100 --> 00:05:21.539
+That worked, but I like email and dealing with email.
+
+00:05:21.540 --> 00:05:26.099
+That is my single source of truth outside of org mode.
+
+00:05:26.100 --> 00:05:28.819
+So that's the only one I need for now.
+
+00:05:28.820 --> 00:05:32.659
+And I like seeing the action
+
+00:05:32.660 --> 00:05:35.099
+and the history on my org agenda.
+
+00:05:35.100 --> 00:05:37.259
+That's one of the reasons why I built this package.
+
+00:05:37.260 --> 00:05:43.699
+And I hope that answers that.
+
+00:05:43.700 --> 00:05:49.459
+There is one more saying, how does it handle attachments?
+
+00:05:49.460 --> 00:05:52.819
+If it doesn't, do you have a plan to add this feature?
+
+00:05:52.820 --> 00:05:55.859
+Attachments is a bit tricky for me right now
+
+00:05:55.860 --> 00:05:58.619
+because I don't understand org-attach so well.
+
+00:05:58.620 --> 00:06:01.299
+I don't use org-attach, but you're absolutely right.
+
+00:06:01.300 --> 00:06:05.339
+It does make sense to have org-attach also.
+
+00:06:05.340 --> 00:06:08.259
+And it's definitely in my plan to include org-attach.
+
+00:06:08.260 --> 00:06:12.459
+I don't think I talked about it in my talk,
+
+00:06:12.460 --> 00:06:14.739
+but I definitely have that idea.
+
+00:06:14.740 --> 00:06:17.339
+First I have to wrap myself, my head
+
+00:06:17.340 --> 00:06:21.339
+around the idea of org-attach and how it,
+
+00:06:21.340 --> 00:06:26.059
+because I don't like, what I don't like about org-attach,
+
+00:06:26.060 --> 00:06:28.899
+I'll tell you, is default is,
+
+00:06:28.900 --> 00:06:31.699
+it opens a new folder called data
+
+00:06:31.700 --> 00:06:34.379
+and there are, it uses a unique code
+
+00:06:34.380 --> 00:06:37.859
+and there are subfolders in it, which I do not appreciate
+
+00:06:37.860 --> 00:06:43.659
+because I want all those files also to be within the same context.
+
+00:06:43.660 --> 00:06:45.779
+of my project or area.
+
+00:06:45.780 --> 00:06:50.859
+And that's one of the reasons I, and I'm sure you can customize that.
+
+00:06:50.860 --> 00:06:52.099
+There are ways to do that,
+
+00:06:52.100 --> 00:06:55.379
+but I have to pay more attention to this.
+
+00:06:55.380 --> 00:06:58.729
+Right now, all of the attachments are dealt with in Gmail,
+
+00:06:58.730 --> 00:07:01.219
+which is not a good system to handle that
+
+00:07:01.220 --> 00:07:03.579
+because it's so out of context.
+
+00:07:03.580 --> 00:07:06.379
+And there are like 25 contexts in the same inbox,
+
+00:07:06.380 --> 00:07:08.419
+which I do not appreciate.
+
+00:07:08.420 --> 00:07:11.059
+So even the attachments are like that.
+
+00:07:11.060 --> 00:07:13.539
+But Org Mode has a much better way of handling it,
+
+00:07:13.540 --> 00:07:16.099
+or Emacs has a much better way of handling it.
+
+00:07:16.100 --> 00:07:20.339
+I will definitely put my attention
+
+00:07:20.340 --> 00:07:22.219
+to this and get this feature out.
+
+00:07:22.220 --> 00:07:25.299
+This is all customer feedback for me, so to speak.
+
+00:07:25.300 --> 00:07:30.179
+So I would definitely request all of you to try it out.
+
+00:07:30.180 --> 00:07:32.179
+And tell me, you know, good
+
+00:07:32.180 --> 00:07:34.939
+or bad things about the package.
+
+00:07:34.940 --> 00:07:38.619
+And you've been very candid so far. Please be so.
+
+00:07:38.620 --> 00:07:43.539
+So, you know, so be it that be candid with your feedback
+
+00:07:43.540 --> 00:07:46.699
+and I will get to know how to go with this.
+
+00:07:46.700 --> 00:07:49.699
+With so much, I mean, I'm not an expert in Elisp,
+
+00:07:49.700 --> 00:07:57.019
+but I have a workaround, which is I have generative AI support,
+
+00:07:57.020 --> 00:07:58.339
+which has done well with me.
+
+00:07:58.340 --> 00:08:03.659
+I test the software better, so I can use the generative AI
+
+00:08:03.660 --> 00:08:05.139
+to help me with the coding,
+
+00:08:05.140 --> 00:08:08.539
+but I can test it so that it works for me.
+
+00:08:08.540 --> 00:08:10.739
+And I would request your help
+
+00:08:10.740 --> 00:08:13.259
+also in testing this software.
+
+00:08:13.260 --> 00:08:16.179
+So for sure. Thank you so much for your question.
+
+00:08:16.180 --> 00:08:21.271
+If there are any more, I can definitely answer them.
diff --git a/2025/captions/emacsconf-2025-gmail--orggmail-a-deep-integration-of-gmail-into-your-org-mode--bala-ramadurai--main--chapters.vtt b/2025/captions/emacsconf-2025-gmail--orggmail-a-deep-integration-of-gmail-into-your-org-mode--bala-ramadurai--main--chapters.vtt
new file mode 100644
index 00000000..23622244
--- /dev/null
+++ b/2025/captions/emacsconf-2025-gmail--orggmail-a-deep-integration-of-gmail-into-your-org-mode--bala-ramadurai--main--chapters.vtt
@@ -0,0 +1,77 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:19.839
+Before we begin
+
+00:00:19.840 --> 00:01:02.799
+The 4-year overnight success
+
+00:01:02.800 --> 00:01:15.599
+The real title
+
+00:01:15.600 --> 00:01:34.279
+Why not gnus/mu4e/notmuch?
+
+00:01:34.280 --> 00:02:17.919
+The honest answer
+
+00:02:17.920 --> 00:02:49.439
+The org-gmail philosophy
+
+00:02:49.440 --> 00:03:21.199
+Architecture (the boring but important slide)
+
+00:03:21.200 --> 00:04:37.479
+Demo 1: From gmail to org
+
+00:04:37.480 --> 00:05:43.039
+Settings
+
+00:05:43.040 --> 00:07:56.879
+Downloading
+
+00:07:56.880 --> 00:09:33.679
+Replying
+
+00:09:33.680 --> 00:10:57.159
+Label management
+
+00:10:57.160 --> 00:12:04.119
+Refiling
+
+00:12:04.120 --> 00:13:37.139
+Archiving
+
+00:13:37.140 --> 00:15:53.679
+Action commands
+
+00:15:53.680 --> 00:16:28.279
+Org Agenda
+
+00:16:28.280 --> 00:17:07.439
+Trash
+
+00:17:07.440 --> 00:17:40.559
+Real workflow: GTD
+
+00:17:40.560 --> 00:18:35.959
+Real Workflow: P.A.R.A.
+
+00:18:35.960 --> 00:20:07.679
+What this is NOT
+
+00:20:07.680 --> 00:20:54.759
+Technical decisions
+
+00:20:54.760 --> 00:21:41.439
+Roadmap
+
+00:21:41.440 --> 00:22:32.939
+Contributing
+
+00:22:32.940 --> 00:22:41.119
+The big picture
+
+00:22:41.120 --> 00:23:04.400
+Let's connect
diff --git a/2025/captions/emacsconf-2025-gmail--orggmail-a-deep-integration-of-gmail-into-your-org-mode--bala-ramadurai--main.vtt b/2025/captions/emacsconf-2025-gmail--orggmail-a-deep-integration-of-gmail-into-your-org-mode--bala-ramadurai--main.vtt
new file mode 100644
index 00000000..06ab2200
--- /dev/null
+++ b/2025/captions/emacsconf-2025-gmail--orggmail-a-deep-integration-of-gmail-into-your-org-mode--bala-ramadurai--main.vtt
@@ -0,0 +1,1764 @@
+WEBVTT captioned by bala
+
+NOTE Before we begin
+
+00:00:00.000 --> 00:00:01.759
+Hello everyone.
+
+00:00:01.760 --> 00:00:03.439
+My name is Bala Ramadurai.
+
+00:00:03.440 --> 00:00:07.839
+Today I'm going to be talking about org-gmail.
+
+00:00:07.840 --> 00:00:10.039
+That's something that I put together.
+
+00:00:10.040 --> 00:00:12.719
+This is what I call gmail meets org mode.
+
+00:00:12.720 --> 00:00:15.119
+And they get along too.
+
+00:00:15.120 --> 00:00:16.519
+Let's talk about email
+
+00:00:16.520 --> 00:00:19.839
+and how to manage email via org mode.
+
+NOTE The 4-year overnight success
+
+00:00:19.840 --> 00:00:23.919
+This project is a four year overnight success.
+
+00:00:23.920 --> 00:00:26.039
+It was in 2021.
+
+00:00:26.040 --> 00:00:27.279
+I said, Hey, wait a second.
+
+00:00:27.280 --> 00:00:30.519
+It'll be so cool if we can integrate Gmail with org.
+
+00:00:30.520 --> 00:00:32.959
+So I started trying out new things.
+
+00:00:32.960 --> 00:00:34.399
+And immediately I realized
+
+00:00:34.400 --> 00:00:36.799
+this is a much larger project than I thought.
+
+00:00:36.800 --> 00:00:40.599
+So it lived in someday maybe.org
+
+00:00:40.600 --> 00:00:42.599
+for about three years.
+
+00:00:42.600 --> 00:00:48.759
+Enter 2024 AI arrives and in 2025 I had a working
+
+00:00:48.760 --> 00:00:50.919
+prototype in 24 hours flat.
+
+00:00:50.920 --> 00:00:55.759
+So three years and 364 days, nothing much happened
+
+00:00:55.760 --> 00:00:58.159
+and one day it actually got it working.
+
+00:00:58.160 --> 00:01:00.919
+Sometimes procrastination is just waiting for the
+
+00:01:00.920 --> 00:01:02.799
+right tools.
+
+NOTE The real title
+
+00:01:02.800 --> 00:01:05.519
+The real title should have been org mail for
+
+00:01:05.520 --> 00:01:08.479
+people who like org mode more than email.
+
+00:01:08.480 --> 00:01:12.799
+The Gmail monster that has always been attacking us.
+
+00:01:12.800 --> 00:01:15.599
+Okay, but we still have to deal with email.
+
+NOTE Why not gnus/mu4e/notmuch?
+
+00:01:15.600 --> 00:01:18.599
+One of the most common questions that I've got so far.
+
+00:01:18.600 --> 00:01:24.639
+Why not gnus or mu4e or notmuch, or other tools.
+
+00:01:24.640 --> 00:01:26.359
+They are amazing.
+
+00:01:26.360 --> 00:01:29.239
+Use them if it works for you, absolutely.
+
+00:01:29.240 --> 00:01:30.319
+Just go right ahead.
+
+00:01:30.320 --> 00:01:32.239
+If it works for you, don't change anything
+
+00:01:32.240 --> 00:01:34.279
+because this looks cool.
+
+NOTE The honest answer
+
+00:01:34.280 --> 00:01:36.599
+Well, the honest answer for me is that
+
+00:01:36.600 --> 00:01:39.399
+they want to be your email client.
+
+00:01:39.400 --> 00:01:40.879
+That's not what I am after.
+
+00:01:40.880 --> 00:01:42.959
+I don't want an email client.
+
+00:01:42.960 --> 00:01:45.039
+I have enough email clients already.
+
+00:01:45.040 --> 00:01:46.239
+I don't want one more.
+
+00:01:46.240 --> 00:01:49.359
+And they require 500 lines of config.
+
+00:01:49.360 --> 00:01:50.679
+I've tried it.
+
+00:01:50.680 --> 00:01:53.039
+It's a lot of maintenance for myself,
+
+00:01:53.040 --> 00:01:54.359
+I still have those somewhere.
+
+00:01:54.360 --> 00:01:57.319
+The mu4e config or the gnus config.
+
+00:01:57.320 --> 00:01:59.439
+They struggle with Gmail's labels,
+
+00:01:59.440 --> 00:02:01.839
+threading, messages and deletion.
+
+00:02:01.840 --> 00:02:05.439
+I find it tough, and it's either
+
+00:02:05.440 --> 00:02:07.079
+all in emacs or nothing.
+
+00:02:07.080 --> 00:02:10.079
+It cannot be a combinatorial approach,
+
+00:02:10.080 --> 00:02:11.159
+is what I realized.
+
+00:02:11.160 --> 00:02:13.519
+So I said, why can't we have both?
+
+00:02:13.520 --> 00:02:15.959
+I want the org mode's focus
+
+00:02:15.960 --> 00:02:17.919
+and Gmail's flexibility.
+
+NOTE The org-gmail philosophy
+
+00:02:17.920 --> 00:02:20.559
+Org-gmail philosophy is very simple.
+
+00:02:20.560 --> 00:02:22.199
+You triage in Gmail.
+
+00:02:22.200 --> 00:02:26.279
+Use the fast web UI for the easy stuff
+
+00:02:26.280 --> 00:02:27.879
+and process in org mode.
+
+00:02:27.880 --> 00:02:30.639
+Pull important threads where you do real work.
+
+00:02:30.640 --> 00:02:33.719
+And of course, a two way sync is possible.
+
+00:02:33.720 --> 00:02:36.639
+Changes flow both directions.
+
+00:02:36.640 --> 00:02:39.479
+Big inspiration has been org-gcal.
+
+00:02:39.480 --> 00:02:42.319
+I named it org-gmail because I saw org-gcal.
+
+00:02:42.320 --> 00:02:43.159
+It was so cool.
+
+00:02:43.160 --> 00:02:44.759
+I really wanted it.
+
+00:02:44.760 --> 00:02:47.719
+Think of it like an org capture for email, but
+
+00:02:47.720 --> 00:02:49.439
+just bidirectional.
+
+NOTE Architecture (the boring but important slide)
+
+00:02:49.440 --> 00:02:52.999
+Alright, the architecture (boring, but important
+
+00:02:53.000 --> 00:02:56.679
+slide) is that Gmail interacts with Python via an
+
+00:02:56.680 --> 00:02:59.439
+API and interacts with Emacs Lisp.
+
+00:02:59.440 --> 00:03:02.519
+User commands, org formatting, all that magic is
+
+00:03:02.520 --> 00:03:04.279
+done on the Emacs side with Lisp.
+
+00:03:04.280 --> 00:03:09.140
+Python side handles the Gmail API, OAuth,
+
+00:03:09.141 --> 00:03:12.407
+json wrangling and Gmail API handles
+
+00:03:12.408 --> 00:03:13.959
+the actual email data.
+
+00:03:13.960 --> 00:03:17.679
+You can do pip install, add to the load path, and
+
+00:03:17.680 --> 00:03:21.199
+10 minute OAuth setup, you are all set.
+
+NOTE Demo 1: From gmail to org
+
+00:03:21.200 --> 00:03:27.079
+We'll switch over to demo from gmail to org.
+
+00:03:27.080 --> 00:03:29.039
+How do you go about doing that?
+
+00:03:29.040 --> 00:03:32.879
+I will start off with a demo folder that I have.
+
+00:03:32.880 --> 00:03:35.119
+It has this tree structure.
+
+00:03:35.120 --> 00:03:36.559
+Ignore the tilde files.
+
+00:03:36.560 --> 00:03:37.919
+So this is what it contains.
+
+00:03:37.920 --> 00:03:41.639
+An org folder with all the working directory, the
+
+00:03:41.640 --> 00:03:44.639
+actual where the life of org mode is.
+
+00:03:44.640 --> 00:03:48.239
+And I have a credentials.json, this is for logging
+
+00:03:48.240 --> 00:03:49.119
+into Gmail.
+
+00:03:49.120 --> 00:03:50.799
+This is a file that you can download.
+
+00:03:50.800 --> 00:03:53.319
+The instructions are in my README in the
+
+00:03:53.320 --> 00:03:54.159
+repository.
+
+00:03:54.160 --> 00:03:56.119
+You can find out how to get yourself a
+
+00:03:56.120 --> 00:03:57.719
+credentials.json.
+
+00:03:57.720 --> 00:03:59.159
+It's not very difficult.
+
+00:03:59.160 --> 00:04:01.479
+Once you have these, you're all set.
+
+00:04:01.480 --> 00:04:05.359
+All you need to do is if you have straight or any
+
+00:04:05.360 --> 00:04:08.539
+of the other VC packages ready, that you can take
+
+00:04:08.540 --> 00:04:11.500
+a Git repository and have that in your folder, you
+
+00:04:11.501 --> 00:04:13.399
+can do that, or you can do it like this.
+
+00:04:13.400 --> 00:04:15.159
+Have a Git clone.
+
+00:04:15.160 --> 00:04:16.479
+Like I'm doing it right now.
+
+00:04:16.480 --> 00:04:19.239
+Just clone it, keep it in.
+
+00:04:19.240 --> 00:04:20.874
+And now you'll see
+
+00:04:20.875 --> 00:04:23.199
+that the Gmail is already there.
+
+00:04:23.200 --> 00:04:25.199
+There are two files that are really ultra
+
+00:04:25.200 --> 00:04:28.039
+important, which is, gmail_label_manager.py and
+
+00:04:28.040 --> 00:04:30.479
+org-gmail.el.
+
+00:04:30.480 --> 00:04:31.899
+These are the two files that do the email
+
+00:04:31.900 --> 00:04:33.199
+processing.
+
+00:04:33.200 --> 00:04:35.199
+I have a plain vanilla Emacs
+
+00:04:35.200 --> 00:04:37.479
+that I'm going to use for the demo.
+
+NOTE Settings
+
+00:04:37.480 --> 00:04:39.439
+These are a few settings
+
+00:04:39.440 --> 00:04:42.159
+that you will need in order to get going.
+
+00:04:42.160 --> 00:04:45.959
+So one is the Gmail itself, the elisp, and the
+
+00:04:45.960 --> 00:04:47.039
+Python script.
+
+00:04:47.040 --> 00:04:49.399
+You'll need to require the package.
+
+00:04:49.400 --> 00:04:52.399
+The org agenda files need to be set.
+
+00:04:52.400 --> 00:04:54.839
+If they're already there, then yes, it needs to
+
+00:04:54.840 --> 00:04:55.879
+include the org files.
+
+00:04:55.880 --> 00:04:59.279
+Main settings are, you need an org file in order
+
+00:04:59.280 --> 00:05:02.239
+to download all the emails from Gmail.
+
+00:05:02.240 --> 00:05:03.879
+You need the credentials path.
+
+00:05:03.880 --> 00:05:05.519
+You need the Python script,
+
+00:05:05.520 --> 00:05:07.439
+wherever it is pointed to that.
+
+00:05:07.440 --> 00:05:10.039
+The date drawer, you can customize it
+
+00:05:10.040 --> 00:05:11.319
+to whatever you want.
+
+00:05:11.320 --> 00:05:12.159
+I call it org-gmail.
+
+00:05:12.160 --> 00:05:14.639
+You can set it to ignore certain labels,
+
+00:05:14.640 --> 00:05:15.799
+not to download it.
+
+00:05:15.800 --> 00:05:17.359
+You're not interested in certain labels
+
+00:05:17.360 --> 00:05:18.479
+being downloaded.
+
+00:05:18.480 --> 00:05:19.599
+You can set that
+
+00:05:19.600 --> 00:05:21.959
+and process time out of 300 seconds.
+
+00:05:21.960 --> 00:05:25.359
+These are some things to keep life sane in this
+
+00:05:25.360 --> 00:05:27.819
+plain vanilla emacs.
+
+00:05:27.820 --> 00:05:30.799
+So I have this refile targets and stuff.
+
+00:05:30.800 --> 00:05:33.579
+That's the main org-gmail settings are all here.
+
+00:05:33.580 --> 00:05:37.879
+I'm going to eval this buffer so that we have all
+
+00:05:37.880 --> 00:05:40.039
+of it and we are all set.
+
+00:05:40.040 --> 00:05:43.039
+So we have org-gmail ready to work right now.
+
+NOTE Downloading
+
+00:05:43.040 --> 00:05:44.959
+The first thing I'm going to show you is
+
+00:05:44.960 --> 00:05:48.079
+org-gmail-download-by-label.
+
+00:05:48.080 --> 00:05:50.599
+This is the demo Gmail that I have.
+
+00:05:50.600 --> 00:05:53.619
+They all have some kind of test emails and I'm
+
+00:05:53.620 --> 00:05:56.199
+going to label them.
+
+00:05:56.200 --> 00:06:00.719
+I've created this hierarchy of labels here based
+
+00:06:00.720 --> 00:06:04.119
+on Tiago Forte's PARA - Project, Area, Resources,
+
+00:06:04.120 --> 00:06:06.079
+Archives structure.
+
+00:06:06.080 --> 00:06:09.439
+1Projects, DemoProject1, 2Areas, DemoArea,
+
+00:06:09.440 --> 00:06:12.119
+4Archives, 2025, OldProject.
+
+00:06:12.120 --> 00:06:14.959
+I've labeled them inside my Gmail.
+
+00:06:14.960 --> 00:06:20.759
+Okay, now let's go to Emacs and we will now
+
+00:06:20.760 --> 00:06:23.719
+download these things, but before downloading
+
+00:06:23.720 --> 00:06:26.919
+them, you will need to authenticate.
+
+00:06:26.920 --> 00:06:28.800
+So for that, you can start
+
+00:06:28.801 --> 00:06:30.900
+with any org-gmail command.
+
+00:06:30.901 --> 00:06:35.079
+So I'm going to take org-gmail-download-by-label.
+
+00:06:35.080 --> 00:06:38.839
+When I press that, it immediately opens a session
+
+00:06:38.840 --> 00:06:39.999
+in my browser.
+
+00:06:40.000 --> 00:06:40.659
+Okay?
+
+00:06:40.660 --> 00:06:45.799
+What you can't see is a list of my Gmail accounts
+
+00:06:45.800 --> 00:06:46.759
+that I'm going to select.
+
+00:06:46.760 --> 00:06:50.039
+I'm going to select my one Gmail account, and I'm
+
+00:06:50.040 --> 00:06:53.199
+going to show you the next screen.
+
+00:06:53.200 --> 00:06:56.999
+So in this screen, you'll have to continue and
+
+00:06:57.000 --> 00:06:59.119
+select, and the authentication is completed.
+
+00:06:59.120 --> 00:07:02.679
+So once it's, this is done, you can close this.
+
+00:07:02.680 --> 00:07:08.999
+Come back to Emacs and you will have Select Gmail.
+
+00:07:09.000 --> 00:07:10.439
+So it has tab support.
+
+00:07:10.440 --> 00:07:11.719
+If you click tab, it will tell you
+
+00:07:11.720 --> 00:07:13.919
+what all labels are available.
+
+00:07:13.920 --> 00:07:16.319
+I can pick anyone.
+
+00:07:16.320 --> 00:07:21.839
+1Projects/DemoProject1, and let's see what happens.
+
+00:07:21.840 --> 00:07:26.479
+It starts downloading and it downloads.
+
+00:07:26.480 --> 00:07:28.799
+And all three messages, four messages,
+
+00:07:28.800 --> 00:07:29.719
+five messages.
+
+00:07:29.720 --> 00:07:30.759
+Six, seven.
+
+00:07:30.760 --> 00:07:33.319
+There are 11 messages in total,
+
+00:07:33.320 --> 00:07:36.039
+and it's downloading all of them.
+
+00:07:36.040 --> 00:07:40.319
+~/demo/org/0Inbox.
+
+00:07:40.320 --> 00:07:42.079
+That's where I have it.
+
+00:07:42.080 --> 00:07:44.399
+And here are the emails.
+
+00:07:44.400 --> 00:07:46.439
+They're all in org mode, format.
+
+00:07:46.440 --> 00:07:48.399
+All the emails are in here.
+
+00:07:48.400 --> 00:07:49.719
+Since it's org mode,
+
+00:07:49.720 --> 00:07:52.679
+it can fold them all and you will see those emails.
+
+00:07:52.680 --> 00:07:54.279
+So these are five emails
+
+00:07:54.280 --> 00:07:56.879
+that are present for the DemoProject1.
+
+NOTE Replying
+
+00:07:56.880 --> 00:07:59.279
+The next one I wanted to show you was
+
+00:07:59.280 --> 00:08:01.039
+reply without leaving emacs.
+
+00:08:01.040 --> 00:08:04.919
+Let's go back to emacs.
+
+00:08:04.920 --> 00:08:06.479
+How am I going to reply?
+
+00:08:06.480 --> 00:08:09.319
+org-gmail-reply-at-point.
+
+00:08:09.320 --> 00:08:11.379
+That's how I'm going to reply.
+
+00:08:11.380 --> 00:08:13.119
+Reply all or reply.
+
+00:08:13.120 --> 00:08:13.759
+Okay.
+
+00:08:13.760 --> 00:08:16.199
+Let's first find out what is the email all about.
+
+00:08:16.200 --> 00:08:16.719
+Okay.
+
+00:08:16.720 --> 00:08:19.319
+There's just one sender with just one recipient.
+
+00:08:19.320 --> 00:08:21.399
+So the reply all or reply
+
+00:08:21.400 --> 00:08:23.020
+doesn't make a difference.
+
+00:08:23.021 --> 00:08:23.700
+Okay?
+
+00:08:23.701 --> 00:08:28.339
+So we will reply at point and if it's Reply All,
+
+00:08:28.340 --> 00:08:30.999
+it includes my own email as well.
+
+00:08:31.000 --> 00:08:34.399
+In this, my email is .mx.
+
+00:08:34.400 --> 00:08:35.159
+Okay.
+
+00:08:35.160 --> 00:08:39.279
+Cc, I can cc anybody I want and I won't do that.
+
+00:08:39.280 --> 00:08:42.039
+I have a Gmail reply window.
+
+00:08:42.040 --> 00:08:43.439
+Split window here.
+
+00:08:43.440 --> 00:08:47.159
+C-c C-c is what will send the reply.
+
+00:08:47.160 --> 00:08:50.479
+C-c C-k is what will cancel the reply.
+
+00:08:50.480 --> 00:08:51.919
+I want to reply.
+
+00:08:51.920 --> 00:08:57.779
+So let's say test reply from within emacs
+
+00:08:57.780 --> 00:09:00.559
+and bala@balaramadurai.net
+
+00:09:00.560 --> 00:09:01.719
+should receive this email.
+
+00:09:01.720 --> 00:09:02.999
+Okay.
+
+00:09:03.000 --> 00:09:07.599
+Initial successfully reply sent for this email id.
+
+00:09:07.600 --> 00:09:08.599
+Okay.
+
+00:09:08.600 --> 00:09:11.959
+A feature request I can already imagine is
+
+00:09:11.960 --> 00:09:15.439
+the reply also appearing at the bottom of this.
+
+00:09:15.440 --> 00:09:16.759
+It's not yet there.
+
+00:09:16.760 --> 00:09:18.279
+In the next version I will have that.
+
+00:09:18.280 --> 00:09:22.319
+Let's check if I've have sent that email.
+
+00:09:22.320 --> 00:09:25.319
+Let's check in the sent box.
+
+00:09:25.320 --> 00:09:29.119
+I just checked in the sent and yes,
+
+00:09:29.120 --> 00:09:31.959
+a test reply from within emacs, does show up.
+
+00:09:31.960 --> 00:09:33.039
+Okay, great.
+
+00:09:33.040 --> 00:09:33.679
+That works.
+
+NOTE Label management
+
+00:09:33.680 --> 00:09:36.959
+The third demo is going to be on label management.
+
+00:09:36.960 --> 00:09:38.439
+How do I manage labels?
+
+00:09:38.440 --> 00:09:39.359
+Let's see.
+
+00:09:39.360 --> 00:09:40.399
+Let's go back to emacs.
+
+00:09:40.400 --> 00:09:46.599
+Suppose, I am not keen on this DemoProject1 for this.
+
+00:09:46.600 --> 00:09:50.839
+It should belong to DemoArea, okay?
+
+00:09:50.840 --> 00:09:52.919
+For this thread itself doesn't belong to this.
+
+00:09:52.920 --> 00:09:57.879
+Let's do org-gmail-edit-label-at-point.
+
+00:09:57.880 --> 00:10:00.879
+Well, I don't want one project at all.
+
+00:10:00.880 --> 00:10:05.899
+It should be under 2Areas/DemoArea.
+
+00:10:05.900 --> 00:10:08.559
+I don't think it, it's not tab supported.
+
+00:10:08.560 --> 00:10:09.519
+You should know this.
+
+00:10:09.520 --> 00:10:09.999
+I will.
+
+00:10:10.000 --> 00:10:11.439
+That's another feature request.
+
+00:10:11.440 --> 00:10:14.599
+2Areas/DemoArea.
+
+00:10:14.600 --> 00:10:17.679
+And when I say this, it should update it.
+
+00:10:17.680 --> 00:10:19.039
+Yes, it has updated it.
+
+00:10:19.040 --> 00:10:21.039
+So you can see that it has updated
+
+00:10:21.040 --> 00:10:22.159
+the label here as well.
+
+00:10:22.160 --> 00:10:26.159
+We can go check if it has indeed changed it
+
+00:10:26.160 --> 00:10:29.399
+in our... what is the name of the email?
+
+00:10:29.400 --> 00:10:31.439
+It's a test mail for one project demo
+
+00:10:31.440 --> 00:10:33.459
+and the date is at 3 12.
+
+00:10:33.460 --> 00:10:36.839
+Let's check if DemoArea has it.
+
+00:10:36.840 --> 00:10:39.559
+It's not refreshed, but there are two,
+
+00:10:39.560 --> 00:10:42.279
+two emails now under DemoArea.
+
+00:10:42.280 --> 00:10:43.639
+It's obviously done the job well.
+
+00:10:43.640 --> 00:10:46.119
+It's happening as expected.
+
+00:10:46.120 --> 00:10:49.159
+I just turned this back from DemoArea to
+
+00:10:49.160 --> 00:10:50.159
+DemoProject1.
+
+00:10:50.160 --> 00:10:53.759
+If you decide that I want to move all of
+
+00:10:53.760 --> 00:10:56.559
+DemoProject1 to archive, I'm done with the
+
+00:10:56.560 --> 00:10:57.159
+project.
+
+NOTE Refiling
+
+00:10:57.160 --> 00:10:58.319
+Oh, by the way, you could...
+
+00:10:58.320 --> 00:10:59.599
+that's the whole point
+
+00:10:59.600 --> 00:11:00.919
+of this is to have
+
+00:11:00.920 --> 00:11:05.199
+all of this refiled into your project,
+
+00:11:05.200 --> 00:11:06.719
+you can do that.
+
+00:11:06.720 --> 00:11:08.919
+I don't know if I have that.
+
+00:11:08.920 --> 00:11:11.639
+Yes, I have demo project one
+
+00:11:11.640 --> 00:11:17.519
+and I could have emails and I created a node
+
+00:11:17.520 --> 00:11:20.439
+and I moved everything there to that folder
+
+00:11:20.440 --> 00:11:24.799
+so that when I want to look at the demo project.
+
+00:11:24.800 --> 00:11:25.959
+Let me look at this.
+
+00:11:25.960 --> 00:11:29.559
+In that context, in the project context and email,
+
+00:11:29.560 --> 00:11:33.959
+I have notes, let's say, and one of the emails is
+
+00:11:33.960 --> 00:11:34.839
+a note.
+
+00:11:34.840 --> 00:11:38.359
+And I want to be able to keep it that way.
+
+00:11:38.360 --> 00:11:41.719
+I could refile it and put it under notes as well,
+
+00:11:41.720 --> 00:11:44.439
+saying that this has some password, it has some
+
+00:11:44.440 --> 00:11:46.559
+reference that I need to have it there.
+
+00:11:46.560 --> 00:11:48.199
+I can have it under notes as well.
+
+00:11:48.200 --> 00:11:49.919
+So that's the advantage.
+
+00:11:49.920 --> 00:11:52.879
+Once it's inside the org mode system, you can do
+
+00:11:52.880 --> 00:11:55.239
+many things that are usually org-modesy.
+
+00:11:55.240 --> 00:11:57.599
+So you can do all of that within your org mode
+
+00:11:57.600 --> 00:12:00.199
+with emails, manipulate them, see it under a
+
+00:12:00.200 --> 00:12:01.359
+context, reply to that.
+
+00:12:01.360 --> 00:12:02.574
+All of that can happen
+
+00:12:02.575 --> 00:12:04.119
+right within your project context.
+
+NOTE Archiving
+
+00:12:04.120 --> 00:12:05.439
+You're done with this project.
+
+00:12:05.440 --> 00:12:06.999
+You want to move to archive.
+
+00:12:07.000 --> 00:12:09.479
+So what you need to do is you don't have to be
+
+00:12:09.480 --> 00:12:11.839
+here, you can do it this from anywhere.
+
+00:12:11.840 --> 00:12:15.199
+Bulk movement of labels, you can do it.
+
+00:12:15.200 --> 00:12:19.679
+If you had consult, embark, ivy, or helm, this will
+
+00:12:19.680 --> 00:12:22.439
+show up as a dropdown and it looks neater.
+
+00:12:22.440 --> 00:12:24.399
+This, I'm using a vanilla emacs, so this is what
+
+00:12:24.400 --> 00:12:26.279
+you would see, but it has tab support.
+
+00:12:26.280 --> 00:12:27.519
+You can use that.
+
+00:12:27.520 --> 00:12:32.319
+So I want to transfer 1Projects/DemoArea1, I want
+
+00:12:32.320 --> 00:12:32.999
+to move it to archive.
+
+00:12:33.000 --> 00:12:36.719
+So let's say 4Archives is the folder.
+
+00:12:36.720 --> 00:12:41.759
+So 4Archives/2025 already set this up.
+
+00:12:41.760 --> 00:12:46.739
+I have not created this label in Gmail.
+
+00:12:46.740 --> 00:12:48.680
+So do I need to go back to Gmail and create that?
+
+00:12:48.681 --> 00:12:49.839
+No, not at all.
+
+00:12:49.840 --> 00:12:52.159
+You can do this from the comfort of your org mode.
+
+00:12:52.160 --> 00:12:54.679
+Go in here and enter this.
+
+00:12:54.680 --> 00:12:55.639
+Let's see what happens.
+
+00:12:55.640 --> 00:12:57.759
+So it found that it is not there.
+
+00:12:57.760 --> 00:13:01.439
+So it created a new label and it's now moving all
+
+00:13:01.440 --> 00:13:04.799
+of the emails, all of those threads into archives
+
+00:13:04.800 --> 00:13:07.079
+without deleting 1Projects/DemoProject1.
+
+00:13:07.080 --> 00:13:09.639
+So it still has 1Projects/DemoProject1 and it also
+
+00:13:09.640 --> 00:13:10.639
+updated the labels here.
+
+00:13:10.640 --> 00:13:12.239
+So the project has been moved.
+
+00:13:12.240 --> 00:13:14.999
+If you want to move it to archive this entire...
+
+00:13:15.000 --> 00:13:16.479
+You can do that too.
+
+00:13:16.480 --> 00:13:19.079
+Let's see if it has archives.
+
+00:13:19.080 --> 00:13:21.959
+Yes, it has archives and I have it...
+
+00:13:21.960 --> 00:13:24.519
+have a heading called 2025.
+
+00:13:24.520 --> 00:13:26.274
+My demo project can be moved there
+
+00:13:26.275 --> 00:13:27.279
+and I'm done here.
+
+00:13:27.280 --> 00:13:28.399
+My project was done.
+
+00:13:28.400 --> 00:13:30.079
+All the emails are moved to archive.
+
+00:13:30.080 --> 00:13:32.479
+So is this project from my project folder.
+
+00:13:32.480 --> 00:13:34.919
+You can integrate it into your workflow, your org
+
+00:13:34.920 --> 00:13:37.139
+mode workflow.
+
+NOTE Action commands
+
+00:13:37.140 --> 00:13:39.039
+Next, we have action commands.
+
+00:13:39.040 --> 00:13:41.399
+What all can you do with singular emails?
+
+00:13:41.400 --> 00:13:44.999
+You can do four things with single emails.
+
+00:13:45.000 --> 00:13:49.659
+Delegate, defer, act on it or trash at point.
+
+00:13:49.660 --> 00:13:50.399
+Defer.
+
+00:13:50.400 --> 00:13:52.519
+Doesn't seem to work yet.
+
+00:13:52.520 --> 00:13:53.599
+That is a snooze part.
+
+00:13:53.600 --> 00:13:54.759
+Doesn't seem to work yet.
+
+00:13:54.760 --> 00:13:55.719
+That's another bug.
+
+00:13:55.720 --> 00:13:58.239
+That's the second bug I have in my package.
+
+00:13:58.240 --> 00:13:59.599
+But the rest of them work.
+
+00:13:59.600 --> 00:14:02.519
+Delegate is to move it to somebody so they can do
+
+00:14:02.520 --> 00:14:03.119
+the job.
+
+00:14:03.120 --> 00:14:06.399
+Act is you will do it with a context with a to-do
+
+00:14:06.400 --> 00:14:08.119
+which will show up in your agenda.
+
+00:14:08.120 --> 00:14:10.839
+Trash the email from your Gmail, and you are done.
+
+00:14:10.840 --> 00:14:12.079
+Okay, let's do that.
+
+00:14:12.080 --> 00:14:13.879
+Let's go back to emacs.
+
+00:14:13.880 --> 00:14:18.079
+I just moved everything back to DemoProject1.
+
+00:14:18.080 --> 00:14:20.919
+I moved everything back so that I can demonstrate
+
+00:14:20.920 --> 00:14:22.679
+the four actions that I'm showing.
+
+00:14:22.680 --> 00:14:23.519
+At least three actions.
+
+00:14:23.520 --> 00:14:25.039
+One of them doesn't work yet.
+
+00:14:25.040 --> 00:14:30.179
+So if I want to delegate it to somebody in this
+
+00:14:30.180 --> 00:14:31.607
+case myself, but I can delegate it
+
+00:14:31.608 --> 00:14:32.839
+to anybody I want.
+
+00:14:32.840 --> 00:14:36.159
+So how do I do that so I can delegate this, or
+
+00:14:36.160 --> 00:14:38.959
+delegate is org-gmail-delegate-at-point.
+
+00:14:38.960 --> 00:14:42.279
+Move the cursor to the email, delegate it to this
+
+00:14:42.280 --> 00:14:44.919
+guy balaramadurai.net.
+
+00:14:44.920 --> 00:14:46.607
+You can add a note saying,
+
+00:14:46.608 --> 00:14:50.799
+Hey, act on task quickly.
+
+00:14:50.800 --> 00:14:53.399
+Boss is watching.
+
+00:14:53.400 --> 00:14:54.919
+Okay?
+
+00:14:54.920 --> 00:14:59.519
+So you can say yes, and this thread gets forwarded
+
+00:14:59.520 --> 00:15:01.440
+to your colleague
+
+00:15:01.441 --> 00:15:03.559
+and so that they can take this up.
+
+00:15:03.560 --> 00:15:05.819
+It has indeed arrived here.
+
+00:15:05.820 --> 00:15:07.039
+You can see.
+
+00:15:07.040 --> 00:15:08.839
+Boss is watching.
+
+00:15:08.840 --> 00:15:11.399
+The test reply was also arrived here.
+
+00:15:11.400 --> 00:15:13.079
+You can also see that email.
+
+00:15:13.080 --> 00:15:15.359
+So that was delegate.
+
+00:15:15.360 --> 00:15:18.519
+So how do we set up actions?
+
+00:15:18.520 --> 00:15:21.199
+So let's not mess this email.
+
+00:15:21.200 --> 00:15:22.599
+This is the second email.
+
+00:15:22.600 --> 00:15:23.919
+How do you act
+
+00:15:23.920 --> 00:15:24.919
+on it?
+
+00:15:24.920 --> 00:15:27.159
+That's an action you set for yourself is add
+
+00:15:27.160 --> 00:15:31.000
+action at point, and you do that.
+
+00:15:31.001 --> 00:15:32.940
+What action can you set for yourself?
+
+00:15:32.941 --> 00:15:38.619
+Write a long report using an LLM.
+
+00:15:38.620 --> 00:15:42.279
+Okay, so it's changed the status to a to-do task.
+
+00:15:42.280 --> 00:15:44.959
+And the to-do is right here.
+
+00:15:44.960 --> 00:15:47.833
+Now, here you can schedule it
+
+00:15:47.834 --> 00:15:50.700
+to say tomorrow 9:00 AM.
+
+00:15:50.701 --> 00:15:51.800
+So there you go.
+
+00:15:51.801 --> 00:15:53.679
+At 9:00 AM I'll be looking at this.
+
+NOTE Org Agenda
+
+00:15:53.680 --> 00:15:55.119
+Now here's the cool part.
+
+00:15:55.120 --> 00:15:58.933
+You can actually find the whole thing
+
+00:15:58.934 --> 00:16:00.559
+in org agenda.
+
+00:16:00.560 --> 00:16:03.267
+So my entire email threads
+
+00:16:03.268 --> 00:16:05.959
+are all in the org agenda.
+
+00:16:05.960 --> 00:16:09.679
+They're all present here and my task associated is
+
+00:16:09.680 --> 00:16:11.319
+also here in the agenda.
+
+00:16:11.320 --> 00:16:12.767
+This is marked TODO,
+
+00:16:12.768 --> 00:16:14.919
+means I haven't acted on that email.
+
+00:16:14.920 --> 00:16:16.159
+It's still pending.
+
+00:16:16.160 --> 00:16:19.119
+And what do I have to do is right here within
+
+00:16:19.120 --> 00:16:21.559
+here, which is the action that I have to carry on
+
+00:16:21.560 --> 00:16:22.719
+in the DemoProject1.
+
+00:16:22.720 --> 00:16:24.533
+You can see that demo project one
+
+00:16:24.534 --> 00:16:25.739
+is showing up in the bottom.
+
+00:16:25.740 --> 00:16:28.279
+Okay. It's cool way you can also see it in the agenda.
+
+NOTE Trash
+
+00:16:28.280 --> 00:16:31.599
+I am not interested in this email at all.
+
+00:16:31.600 --> 00:16:33.199
+Let's say I, I want to delete it.
+
+00:16:33.200 --> 00:16:33.719
+Let's see.
+
+00:16:33.720 --> 00:16:35.319
+Yes, I finished the task.
+
+00:16:35.320 --> 00:16:37.599
+Now the task is finished.
+
+00:16:37.600 --> 00:16:40.039
+I really don't want to see this email, this
+
+00:16:40.040 --> 00:16:40.919
+message alone.
+
+00:16:40.920 --> 00:16:42.159
+Alright.
+
+00:16:42.160 --> 00:16:42.599
+Easy peasy.
+
+00:16:42.600 --> 00:16:46.679
+Let's do Gmail Trash at point.
+
+00:16:46.680 --> 00:16:48.020
+And you say, message,
+
+00:16:48.021 --> 00:16:49.901
+I don't want to delete the entire thread.
+
+00:16:49.880 --> 00:16:50.399
+Yes.
+
+00:16:50.400 --> 00:16:51.959
+Delete it.
+
+00:16:51.960 --> 00:16:53.239
+Delete the message alone.
+
+00:16:53.240 --> 00:16:54.239
+And it's gone.
+
+00:16:54.240 --> 00:16:56.039
+But it's not gone.
+
+00:16:56.040 --> 00:16:57.159
+It's gone to the trash.
+
+00:16:57.160 --> 00:16:59.733
+The entire subtree was deleted
+
+00:16:59.734 --> 00:17:01.880
+and we have a clean flow here.
+
+00:17:01.881 --> 00:17:04.479
+I have archived, it is still in the archive, but
+
+00:17:04.480 --> 00:17:07.439
+it's still active according to my Gmail folder.
+
+NOTE Real workflow: GTD
+
+00:17:07.440 --> 00:17:09.574
+Next I'm going to show you is
+
+00:17:09.575 --> 00:17:12.039
+real workflow capture.
+
+00:17:12.040 --> 00:17:15.799
+You can use label in email with ToProcess
+
+00:17:15.800 --> 00:17:19.359
+downloaded to the inbox.org, and do one of these
+
+00:17:19.360 --> 00:17:20.599
+you've already seen.
+
+00:17:20.600 --> 00:17:22.519
+Later still doesn't work.
+
+00:17:22.520 --> 00:17:25.639
+I will get it to work, but hopefully by the time
+
+00:17:25.640 --> 00:17:28.759
+the conference is up, you will have the feature up
+
+00:17:28.760 --> 00:17:29.399
+and ready.
+
+00:17:29.400 --> 00:17:32.679
+Rest of the stuff works, delegate works, trash
+
+00:17:32.680 --> 00:17:34.039
+works, and add action works.
+
+00:17:34.040 --> 00:17:37.479
+We are in weekly review can have an email context,
+
+00:17:37.480 --> 00:17:40.559
+not just links to an external URL.
+
+NOTE Real Workflow: P.A.R.A.
+
+00:17:40.560 --> 00:17:46.519
+In the P.A.R.A Our Project, Areas, Resources and
+
+00:17:46.520 --> 00:17:50.039
+Archives structure, you can have Gmail labels
+
+00:17:50.040 --> 00:17:51.199
+mirror your PARA structure.
+
+00:17:51.200 --> 00:17:53.879
+You can have that within your org mode structure,
+
+00:17:53.880 --> 00:17:56.239
+and you can mimic that very well.
+
+00:17:56.240 --> 00:17:59.419
+All the emails embedded in your own structure and
+
+00:17:59.420 --> 00:18:02.067
+you can download it by label
+
+00:18:02.068 --> 00:18:03.520
+in the place you want.
+
+00:18:03.521 --> 00:18:05.439
+I'm still working on that feature where you can
+
+00:18:05.440 --> 00:18:08.559
+have it inside the project structure itself rather
+
+00:18:08.560 --> 00:18:09.839
+than an index.org.
+
+00:18:09.840 --> 00:18:11.719
+It'll take some time, but I will do it.
+
+00:18:11.720 --> 00:18:14.839
+But right now you can refile it once it's in the
+
+00:18:14.840 --> 00:18:17.459
+index.org or any other file you choose, and then
+
+00:18:17.460 --> 00:18:21.039
+you can bulk move labels to archive and move that
+
+00:18:21.040 --> 00:18:23.319
+entire project repository to
+
+00:18:23.320 --> 00:18:26.319
+your archive also. That works very well.
+
+00:18:26.320 --> 00:18:29.919
+And your org files and Gmail stay in sync
+
+00:18:29.920 --> 00:18:33.039
+effortlessly, and the whole email part of it
+
+00:18:33.040 --> 00:18:35.239
+becomes part of your knowledge management system.
+
+00:18:35.240 --> 00:18:35.959
+Okay.
+
+NOTE What this is NOT
+
+00:18:35.960 --> 00:18:37.639
+We have reached the end of the demo.
+
+00:18:37.640 --> 00:18:39.667
+Hopefully you understood
+
+00:18:39.668 --> 00:18:41.799
+what org-gmail was all about.
+
+00:18:41.800 --> 00:18:44.639
+If you have any questions, let me know, but some
+
+00:18:44.640 --> 00:18:47.519
+bits of warning, I wanted to give you what this
+
+00:18:47.520 --> 00:18:50.239
+package is not, it's not a full fledged email
+
+00:18:50.240 --> 00:18:50.959
+client.
+
+00:18:50.960 --> 00:18:55.319
+It's meant for label management and importing some
+
+00:18:55.320 --> 00:18:58.739
+emails that you wanted or you're interested in to
+
+00:18:58.740 --> 00:19:02.079
+the context of your projects or areas or your GTD
+
+00:19:02.080 --> 00:19:02.679
+context.
+
+00:19:02.680 --> 00:19:07.159
+It is not a replacement for gnus, mu4e or notmuch.
+
+00:19:07.160 --> 00:19:10.479
+It is not a way to read all your emails in emacs.
+
+00:19:10.480 --> 00:19:13.439
+It cannot handle a large server load for sure.
+
+00:19:13.440 --> 00:19:15.679
+It is not offline capable.
+
+00:19:15.680 --> 00:19:17.359
+It needs API access.
+
+00:19:17.360 --> 00:19:19.479
+So bear that in mind.
+
+00:19:19.480 --> 00:19:22.159
+What it is, is a bridge between
+
+00:19:22.160 --> 00:19:23.879
+gmail and org mode.
+
+00:19:23.880 --> 00:19:27.359
+It's a way to manage important email threads.
+
+00:19:27.360 --> 00:19:29.559
+So you can keep updating threads.
+
+00:19:29.560 --> 00:19:32.039
+Whenever there's a reply, you keep downloading it
+
+00:19:32.040 --> 00:19:32.919
+to that thread.
+
+00:19:32.920 --> 00:19:35.279
+If you want to keep track of what's going on, what
+
+00:19:35.280 --> 00:19:37.079
+is the logical way you can all see it.
+
+00:19:37.080 --> 00:19:40.599
+You can even use ellama or one of those to make
+
+00:19:40.600 --> 00:19:41.999
+sense of the conversation.
+
+00:19:42.000 --> 00:19:45.279
+If it's a long longish thread, it's a power tool
+
+00:19:45.280 --> 00:19:49.079
+for the getting things done or Tiago Forte's PARA
+
+00:19:49.080 --> 00:19:49.839
+method.
+
+00:19:49.840 --> 00:19:52.119
+I've used PARA for a long time now.
+
+00:19:52.120 --> 00:19:54.839
+I'm a power user of PARA, so to speak, so I find
+
+00:19:54.840 --> 00:19:56.319
+this extremely useful myself.
+
+00:19:56.320 --> 00:19:59.067
+It's about 800 lines of Python
+
+00:19:59.068 --> 00:20:02.479
+and about 300 to 500 lines of elisp.
+
+00:20:02.480 --> 00:20:06.999
+It's usable in 10 minutes, but can remain powerful
+
+00:20:07.000 --> 00:20:07.679
+for years.
+
+NOTE Technical decisions
+
+00:20:07.680 --> 00:20:10.599
+So some technical decisions that I took.
+
+00:20:10.600 --> 00:20:13.419
+Why Python plus Gmail, API.
+
+00:20:13.420 --> 00:20:17.959
+Gmail API is better at handling than an imap with
+
+00:20:17.960 --> 00:20:19.359
+all the other metadata.
+
+00:20:19.360 --> 00:20:20.199
+I found it easier.
+
+00:20:20.200 --> 00:20:22.679
+Python has excellent Google API libraries.
+
+00:20:22.680 --> 00:20:25.479
+Email calls Python via the call-process.
+
+00:20:25.480 --> 00:20:27.559
+json is the interchange format.
+
+00:20:27.560 --> 00:20:29.879
+Why not pure elisp?
+
+00:20:29.880 --> 00:20:33.799
+For one, OAuth 2.0 flow is a bit complex.
+
+00:20:33.800 --> 00:20:35.719
+I found it a bit complex to meander on.
+
+00:20:35.720 --> 00:20:38.139
+That's probably why it took me three years, 364
+
+00:20:38.140 --> 00:20:40.319
+days to get over it.
+
+00:20:40.320 --> 00:20:43.839
+Gmail API Client libraries are mature, easier to
+
+00:20:43.840 --> 00:20:48.459
+test/debug separately and lets emacs do what it
+
+00:20:48.460 --> 00:20:50.159
+does best, which is text editing.
+
+00:20:50.160 --> 00:20:54.759
+Pragmatism over purity, the emacs way since 1976.
+
+NOTE Roadmap
+
+00:20:54.760 --> 00:20:57.159
+Okay, some roadmap here.
+
+00:20:57.160 --> 00:21:00.239
+But near term I want better error messages.
+
+00:21:00.240 --> 00:21:02.759
+It still gives me python error messages.
+
+00:21:02.760 --> 00:21:05.039
+There are some asynchronous operations there's no
+
+00:21:05.040 --> 00:21:06.319
+blocking going on.
+
+00:21:06.320 --> 00:21:08.879
+It needs a search integration soon.
+
+00:21:08.880 --> 00:21:11.119
+Attachment I have not yet touched.
+
+00:21:11.120 --> 00:21:13.879
+That's a big big if, I don't know how to integrate
+
+00:21:13.880 --> 00:21:15.879
+with org-attach, I'm still wondering how to do
+
+00:21:15.880 --> 00:21:16.439
+that.
+
+00:21:16.440 --> 00:21:19.519
+Perhaps I should be able to interact with Outlook
+
+00:21:19.520 --> 00:21:21.919
+also, fast mail, proton mail.
+
+00:21:21.920 --> 00:21:24.759
+I don't know AI summaries of thread.
+
+00:21:24.760 --> 00:21:27.759
+I'm thinking ellama could do it, but I'm not very
+
+00:21:27.760 --> 00:21:28.319
+sure.
+
+00:21:28.320 --> 00:21:32.079
+Calendar integration is a nice idea, but org-gcal
+
+00:21:32.080 --> 00:21:33.319
+and org gmail...
+
+00:21:33.320 --> 00:21:34.279
+How will they interact?
+
+00:21:34.280 --> 00:21:35.839
+How will that work?
+
+00:21:35.840 --> 00:21:37.759
+I'm still not sure. I use them separately.
+
+00:21:37.760 --> 00:21:40.599
+And any other feature requests that you may have,
+
+00:21:40.600 --> 00:21:41.439
+just let me know.
+
+NOTE Contributing
+
+00:21:41.440 --> 00:21:44.919
+What I may need help with if you have the time and
+
+00:21:44.920 --> 00:21:47.439
+you're interested in this project, is to test it
+
+00:21:47.440 --> 00:21:49.079
+on macOS and Windows.
+
+00:21:49.080 --> 00:21:50.159
+I use Linux.
+
+00:21:50.160 --> 00:21:51.759
+I use it on Debian.
+
+00:21:51.760 --> 00:21:52.719
+It works fine.
+
+00:21:52.720 --> 00:21:54.359
+OAuth edge cases.
+
+00:21:54.360 --> 00:21:55.719
+I'm not sure how it works.
+
+00:21:55.720 --> 00:21:57.519
+It shows me some error or the other
+
+00:21:57.520 --> 00:21:58.119
+here and there.
+
+00:21:58.120 --> 00:22:00.919
+Definitely documentation needs improvements.
+
+00:22:00.920 --> 00:22:04.239
+Other email provider expertise will be welcome.
+
+00:22:04.240 --> 00:22:07.359
+What's ready is, GitHub repo with issues.
+
+00:22:07.360 --> 00:22:10.239
+You can start with that could be great if you can
+
+00:22:10.240 --> 00:22:11.879
+tell me some issues with that.
+
+00:22:11.880 --> 00:22:13.879
+Some kind of development guide.
+
+00:22:13.880 --> 00:22:15.479
+I am not a programmer.
+
+00:22:15.480 --> 00:22:18.079
+I vibe-coded most of it.
+
+00:22:18.080 --> 00:22:20.919
+So a development guide, a true blood developer,
+
+00:22:20.920 --> 00:22:22.479
+if they can come and tell me,
+
+00:22:22.480 --> 00:22:23.999
+here is what you should be doing,
+
+00:22:24.000 --> 00:22:26.239
+I'm more than happy to listen to that.
+
+00:22:26.240 --> 00:22:27.959
+And probably a test suite.
+
+00:22:27.960 --> 00:22:28.959
+I do that manually.
+
+00:22:28.960 --> 00:22:31.239
+All of this, some kind of help with that
+
+00:22:31.240 --> 00:22:32.939
+will also work.
+
+NOTE The big picture
+
+00:22:32.940 --> 00:22:36.559
+The big picture is org-mode and Gmail
+
+00:22:36.560 --> 00:22:37.679
+can be friends.
+
+00:22:37.680 --> 00:22:41.119
+They can bond over a cup of coffee.
+
+NOTE Let's connect
+
+00:22:41.120 --> 00:22:41.959
+Let's connect.
+
+00:22:41.960 --> 00:22:47.659
+Here are my details and I am all game to listen to
+
+00:22:47.660 --> 00:22:48.679
+your question and answers.
+
+00:22:48.680 --> 00:22:51.279
+I'm happy to give you any answer or responses that
+
+00:22:51.280 --> 00:22:51.999
+I find.
+
+00:22:52.000 --> 00:22:54.439
+Please do connect with me on LinkedIn. I have my
+
+00:22:54.440 --> 00:22:58.359
+website here, and please do fork or install
+
+00:22:58.360 --> 00:23:00.519
+org-gmail and let me know what you think.
+
+00:23:00.520 --> 00:23:02.759
+Let's talk about taming email.
+
+00:23:02.760 --> 00:23:04.400
+Thank you very much.
diff --git a/2025/captions/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--answers.vtt b/2025/captions/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--answers.vtt
new file mode 100644
index 00000000..3e22e18d
--- /dev/null
+++ b/2025/captions/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--answers.vtt
@@ -0,0 +1,973 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:02.117
+Okay, so first question.
+
+00:00:02.118 --> 00:00:05.037
+I noticed that it took considerable amount of time to send email.
+
+00:00:05.038 --> 00:00:09.637
+Is it possible to configure to use an external SMTP client
+
+00:00:09.638 --> 00:00:14.357
+to send emails? Right, yes, it definitely is possible.
+
+00:00:14.358 --> 00:00:18.957
+In fact, in the past, I've used, I believe, MSMTP,
+
+00:00:18.958 --> 00:00:23.317
+which is a small SMTP implementation
+
+00:00:23.318 --> 00:00:27.437
+that's independent of Emacs. So you can do that.
+
+00:00:27.438 --> 00:00:30.757
+It's also possible to, pointed
+
+00:00:30.758 --> 00:00:34.997
+to have it use the sendmail binary on your system.
+
+00:00:34.998 --> 00:00:41.637
+If you have a local MTA mail transfer agents
+
+00:00:41.638 --> 00:00:46.117
+like Exim or Postfix installed and configure.
+
+00:00:46.118 --> 00:00:50.037
+I believe that should also dispatch
+
+00:00:50.038 --> 00:00:51.997
+and return instantaneously
+
+00:00:51.998 --> 00:00:55.157
+and then have Postfix or Exim
+
+00:00:55.158 --> 00:00:57.997
+deal with sending the message on their terms
+
+00:00:57.998 --> 00:01:02.197
+without blocking Emacs. I don't know, it depends.
+
+00:01:02.198 --> 00:01:04.917
+Normally it's not always that slow. Sometimes it is.
+
+00:01:04.918 --> 00:01:11.917
+I think it also depends on the load on your mail server.
+
+00:01:11.918 --> 00:01:14.917
+Sometimes it's instantaneous, sometimes not.
+
+00:01:14.918 --> 00:01:17.837
+So I hope that helps.
+
+00:01:17.838 --> 00:01:20.597
+Let's see, is the Dovecot workaround
+
+00:01:20.598 --> 00:01:21.917
+actually a solution?
+
+00:01:21.918 --> 00:01:24.437
+I haven't tried it, but if it works smoothly,
+
+00:01:24.438 --> 00:01:27.477
+I'll surely do so. It is, it really is.
+
+00:01:27.478 --> 00:01:31.637
+I've actually been using that setup for many years.
+
+00:01:31.638 --> 00:01:45.837
+I can't remember. Oh, I believe it's Eric Abramson
+
+00:01:45.838 --> 00:01:49.077
+who first shared instructions on how to set this up.
+
+00:01:49.078 --> 00:02:04.037
+Let's see if I can find it. There we go. Yeah, this is it.
+
+00:02:04.038 --> 00:02:06.957
+I'll share this on IRC as well.
+
+00:02:06.958 --> 00:02:15.517
+Yeah, so Dovecot is very, very efficient.
+
+00:02:15.518 --> 00:02:21.557
+It's written in C. And yeah, when you point Gnu's
+
+00:02:21.558 --> 00:02:23.237
+to an IMAP server like Dovecot,
+
+00:02:23.238 --> 00:02:25.037
+dealing with email is pretty instantaneous.
+
+00:02:25.038 --> 00:02:29.157
+This article or post by Eric is great.
+
+00:02:29.158 --> 00:02:32.397
+Although I will say that
+
+00:02:32.398 --> 00:02:34.997
+there was a recent major release of Dovecot.
+
+00:02:34.998 --> 00:02:37.877
+I can't remember if it's 2.4 or 2.5.
+
+00:02:37.878 --> 00:02:39.597
+and it's a breaking change.
+
+00:02:39.598 --> 00:02:42.557
+They change a lot of the configuration syntax,
+
+00:02:42.558 --> 00:02:44.077
+so there's a high likelihood
+
+00:02:44.078 --> 00:02:47.477
+that this drop-in configuration won't work,
+
+00:02:47.478 --> 00:02:49.237
+even though that's what I used
+
+00:02:49.238 --> 00:02:51.957
+as my starting point a couple years ago.
+
+00:02:51.958 --> 00:02:56.237
+I will be writing an article on my personal site
+
+00:02:56.238 --> 00:03:02.717
+to go over how to configure recent versions of Dofconn
+
+00:03:02.718 --> 00:03:07.117
+for such a setup, for a local setup.
+
+00:03:07.118 --> 00:03:15.957
+Let's see. Do you have experience with Mu4e or not much?
+
+00:03:15.958 --> 00:03:22.397
+And why would you say Gnus is worth using compared to these?
+
+00:03:22.398 --> 00:03:23.837
+I do have experience with these,
+
+00:03:23.838 --> 00:03:25.517
+although it goes back many years,
+
+00:03:25.518 --> 00:03:27.757
+and I'm sure both of these have evolved since,
+
+00:03:27.758 --> 00:03:31.837
+and they're great pieces of software in their own rights.
+
+00:03:31.838 --> 00:03:33.917
+And actually I did use them in that order.
+
+00:03:33.918 --> 00:03:37.397
+Like I first tried Mu4e in Emacs,
+
+00:03:37.398 --> 00:03:40.277
+when I started using email in Emacs,
+
+00:03:40.278 --> 00:03:44.277
+then I tried Notmuch for a while, and then I went to Gnus.
+
+00:03:44.278 --> 00:03:51.157
+They're great. They have like pros and cons.
+
+00:03:51.158 --> 00:03:52.397
+Mu4e, I believe, has
+
+00:03:52.398 --> 00:03:55.357
+excellent maildir handling directly,
+
+00:03:55.358 --> 00:03:58.357
+if I'm not mistaken, unlike Gnus,
+
+00:03:58.358 --> 00:04:00.837
+so you can point it directly
+
+00:04:00.838 --> 00:04:03.637
+to your maildirs locally,
+
+00:04:03.638 --> 00:04:06.157
+and it should work fine,
+
+00:04:06.158 --> 00:04:08.157
+if I'm remembering correctly.
+
+00:04:08.158 --> 00:04:11.477
+NotMuch is also excellent.
+
+00:04:11.478 --> 00:04:12.477
+The thing with Notmuch
+
+00:04:12.478 --> 00:04:13.957
+is that it uses Xapien
+
+00:04:13.958 --> 00:04:17.877
+for indexing and searching email.
+
+00:04:17.878 --> 00:04:20.397
+It's tag-based, so you can tag messages.
+
+00:04:20.398 --> 00:04:24.077
+And then, yeah, it's amazing
+
+00:04:24.078 --> 00:04:26.197
+for tagging and searching capabilities,
+
+00:04:26.198 --> 00:04:28.877
+very powerful search features.
+
+00:04:28.878 --> 00:04:31.677
+And my reason for trying Gnus
+
+00:04:31.678 --> 00:04:33.637
+and then, I don't know, eventually
+
+00:04:33.638 --> 00:04:37.037
+liking it was couple of years ago,
+
+00:04:37.038 --> 00:04:38.437
+I went through this kind of phase
+
+00:04:38.438 --> 00:04:40.597
+of trying and trying to like use
+
+00:04:40.598 --> 00:04:43.357
+and stick with packages
+
+00:04:43.358 --> 00:04:45.317
+that are built into GNU Emacs
+
+00:04:45.318 --> 00:04:47.157
+as much as possible.
+
+00:04:47.158 --> 00:04:51.877
+No particular reason that I would like,
+
+00:04:51.878 --> 00:04:54.197
+you know, recommend people do that per se,
+
+00:04:54.198 --> 00:04:57.037
+but yeah, that's just what I wanted to do.
+
+00:04:57.038 --> 00:05:00.597
+Cause I noticed my configurations
+
+00:05:00.598 --> 00:05:02.277
+were like growing unwieldy.
+
+00:05:02.278 --> 00:05:07.797
+So I, like many others declared, Emacs in its bankruptcy,
+
+00:05:07.798 --> 00:05:11.677
+in its file bankruptcy, and configure things from scratch
+
+00:05:11.678 --> 00:05:15.717
+and try to use whatever that Emacs had to offer
+
+00:05:15.718 --> 00:05:18.797
+built in itself, and then only reach for a couple
+
+00:05:18.798 --> 00:05:20.277
+of external packages here and there.
+
+00:05:20.278 --> 00:05:24.717
+So that's what I went to. That's how I ended up on Gnu's.
+
+00:05:24.718 --> 00:05:26.397
+And it's been very nice.
+
+00:05:26.398 --> 00:05:29.557
+I've tried a few other email clients
+
+00:05:29.558 --> 00:05:31.237
+since then, temporarily,
+
+00:05:31.238 --> 00:05:33.197
+like I tried AERC, A-E-R-C,
+
+00:05:33.198 --> 00:05:36.197
+which is not built into Emacs,
+
+00:05:36.198 --> 00:05:36.797
+but I don't know,
+
+00:05:36.798 --> 00:05:38.197
+I keep coming back to Gnus.
+
+00:05:38.198 --> 00:05:42.757
+It's great to have it all, to be able to do all these things
+
+00:05:42.758 --> 00:05:47.677
+from within GNU Emacs. Let's see, some notes and feedback.
+
+00:05:47.678 --> 00:05:52.557
+Thank you for all the kind words folks, appreciate it.
+
+00:05:52.558 --> 00:05:56.557
+I'm glad that you found the presentation helpful
+
+00:05:56.558 --> 00:05:59.157
+or somewhat useful. Let's see, new question.
+
+00:05:59.158 --> 00:06:02.357
+Oh, and I will check IRC as well.
+
+00:06:02.358 --> 00:06:06.917
+Let's see, at my organization,
+
+00:06:06.918 --> 00:06:09.317
+we're forced to use OAuth with Outlook,
+
+00:06:09.318 --> 00:06:11.157
+and they've also blacklisted
+
+00:06:11.158 --> 00:06:13.517
+all email clients except Thunderbird,
+
+00:06:13.518 --> 00:06:15.237
+but they don't support it,
+
+00:06:15.238 --> 00:06:17.037
+only the Webmail or the Outlook app.
+
+00:06:17.038 --> 00:06:18.517
+Do you know if this is something
+
+00:06:18.518 --> 00:06:23.997
+that can be circumvented in Gnus? Let's see.
+
+00:06:23.998 --> 00:06:29.797
+So if I'm pretty sure, at least with the recent Emacs versions,
+
+00:06:29.798 --> 00:06:37.677
+Gnus does support xOAuth as a backend.
+
+00:06:37.678 --> 00:06:41.557
+So I think you should be able to do that
+
+00:06:41.558 --> 00:06:45.677
+even with just the things, the machinery built into Emacs.
+
+00:06:45.678 --> 00:06:53.917
+Even so, I think there are external packages and programs.
+
+00:06:53.918 --> 00:06:58.717
+One of them I think comes from this Cyrus IMAP world
+
+00:06:58.718 --> 00:07:02.357
+of things that implement like XOAuth.
+
+00:07:02.358 --> 00:07:04.797
+So you should be able to do that.
+
+00:07:04.798 --> 00:07:09.397
+You should be able to use that to get authenticated
+
+00:07:09.398 --> 00:07:12.237
+to your organization's mail server.
+
+00:07:12.238 --> 00:07:15.797
+But I've never tried that myself.
+
+00:07:15.798 --> 00:07:22.837
+In terms of like blacklisting all email clients,
+
+00:07:22.838 --> 00:07:27.637
+I don't know how they would do it outside of, you know,
+
+00:07:27.638 --> 00:07:29.797
+this kind of authentication thingy.
+
+00:07:29.798 --> 00:07:32.317
+If, you know, they check
+
+00:07:32.318 --> 00:07:36.397
+the user agent header or something,
+
+00:07:36.398 --> 00:07:42.037
+that's pretty easy to customize and set.
+
+00:07:42.038 --> 00:07:50.437
+With Gnus, you can set, define a posting style
+
+00:07:50.438 --> 00:07:55.237
+to set a custom user agent.
+
+00:07:55.238 --> 00:07:58.157
+So, yeah, that's as far as I know.
+
+00:07:58.158 --> 00:08:00.877
+Thunderbird is pretty nice too.
+
+00:08:00.878 --> 00:08:05.157
+Like I reach out for it sometimes
+
+00:08:05.158 --> 00:08:10.557
+when I'm in a rush or can't,
+
+00:08:10.558 --> 00:08:15.957
+don't have the time to like set up Gnus with
+
+00:08:15.958 --> 00:08:24.117
+like some new like IMAP server or something.
+
+00:08:24.118 --> 00:08:28.757
+I reach for it sometimes, but yeah,
+
+00:08:28.758 --> 00:08:32.397
+I primarily use Gnus. I see.
+
+00:08:32.398 --> 00:08:34.757
+So the question says they tried it
+
+00:08:34.758 --> 00:08:38.117
+with not much and it never worked.
+
+00:08:38.118 --> 00:08:39.877
+Even KML on Android didn't work.
+
+00:08:39.878 --> 00:08:45.597
+Right. Yeah, I'm not sure.
+
+00:08:45.598 --> 00:08:47.677
+If you can like provide maybe more details
+
+00:08:47.678 --> 00:08:57.477
+as to like what doesn't work
+
+00:08:57.478 --> 00:09:02.517
+or if you get any particular error messages
+
+00:09:02.518 --> 00:09:05.677
+or like how they're trying to like prevent you from using it,
+
+00:09:05.678 --> 00:09:08.557
+then maybe folks could have some ideas
+
+00:09:08.558 --> 00:09:11.877
+of maybe how to get around that.
+
+00:09:11.878 --> 00:09:16.237
+Yeah. Let's see, I'm going to go
+
+00:09:16.238 --> 00:09:29.597
+over and take a look at IRC. Yes, scoring is great.
+
+00:09:29.598 --> 00:09:33.357
+In it for bankruptcy,
+
+00:09:33.358 --> 00:09:39.157
+they have mail to use outlook from Gnus, right?
+
+00:09:39.158 --> 00:09:43.637
+Yeah, there are various like solutions and workarounds.
+
+00:09:43.638 --> 00:09:47.277
+Yeah, let's see. How's the schedule looking?
+
+00:09:47.278 --> 00:09:48.277
+I think the next talk
+
+00:09:48.278 --> 00:09:52.637
+is gonna start pretty soon, if I'm not mistaken.
+
+00:09:52.638 --> 00:10:34.557
+Yeah, so I believe that's about all the time
+
+00:10:34.558 --> 00:10:35.717
+that we have on the stream for the Q&A,
+
+00:10:35.718 --> 00:10:38.757
+but of course I'll hang around here on big blue button
+
+00:10:38.758 --> 00:10:43.077
+and IRC for a while if folks would like to ask more questions.
+
+00:10:43.078 --> 00:10:43.757
+And also feel free to email me,
+
+00:10:43.758 --> 00:10:44.877
+bandali@gnu.org
+
+00:10:44.878 --> 00:10:46.437
+or at kelar.org with any questions.
+
+00:10:46.438 --> 00:10:49.557
+Thanks again for the kind words folks, appreciate it.
+
+00:10:49.558 --> 00:10:51.037
+Yeah, I myself also wish
+
+00:10:51.038 --> 00:10:53.637
+that there were like some tutorials or something
+
+00:10:53.638 --> 00:10:54.997
+when I was getting started with Guinness,
+
+00:10:54.998 --> 00:10:56.557
+but we didn't have that. So, and I've been meaning
+
+00:10:56.558 --> 00:10:59.117
+to like record a talk like this for years for EmacsConf,
+
+00:10:59.118 --> 00:11:12.277
+but yeah, funnily enough, after like 10 years of,
+
+00:11:12.278 --> 00:11:22.117
+at my 10th anniversary
+
+00:11:22.118 --> 00:11:27.397
+of being involved with the conference,
+
+00:11:27.398 --> 00:11:29.357
+I finally put together a talk of my own
+
+00:11:29.358 --> 00:11:32.317
+to talk about configuring Gnus.
+
+00:11:32.318 --> 00:11:35.757
+Let's see. Oh, I see, I see.
+
+00:11:35.758 --> 00:11:41.517
+So the organization is doing some kind of check
+
+00:11:41.518 --> 00:11:43.437
+during setting up of OAuth.
+
+00:11:43.438 --> 00:11:44.637
+So I think how that works is
+
+00:11:44.638 --> 00:11:47.157
+sometimes these email clients,
+
+00:11:47.158 --> 00:11:50.117
+I think at least this is the case for Gmail or something,
+
+00:11:50.118 --> 00:11:55.037
+where a project such as Thunderbird
+
+00:11:55.038 --> 00:12:00.557
+needs to apply for some kind of token
+
+00:12:00.558 --> 00:12:02.517
+to be able to authenticate
+
+00:12:02.518 --> 00:12:05.117
+and connect its users to a mail server.
+
+00:12:05.118 --> 00:12:10.197
+So all I will say is
+
+00:12:10.198 --> 00:12:12.237
+that Thunderbird is free software
+
+00:12:12.238 --> 00:12:13.517
+and the sources are available
+
+00:12:13.518 --> 00:12:15.517
+and you might be able to find
+
+00:12:15.518 --> 00:12:19.637
+the token that they use and yeah.
+
+00:12:19.638 --> 00:13:13.877
+Right, so yeah, I'm just reading this comment here.
+
+00:13:13.878 --> 00:13:16.077
+You're very welcome again.
+
+00:13:16.078 --> 00:13:18.797
+I hope you find it useful in some way.
+
+00:13:18.798 --> 00:13:21.597
+So they say that they like the fact
+
+00:13:21.598 --> 00:13:25.237
+that I started with a clean setup and built from that.
+
+00:13:25.238 --> 00:13:27.117
+Reading and writing emails in Emacs
+
+00:13:27.118 --> 00:13:28.917
+is definitely not straightforward.
+
+00:13:28.918 --> 00:13:30.357
+And I find it frustrating
+
+00:13:30.358 --> 00:13:32.317
+that there are so many pieces to put together
+
+00:13:32.318 --> 00:13:34.397
+and a bunch of documentation to read.
+
+00:13:34.398 --> 00:13:39.317
+And they admit that they find Gnus overwhelming.
+
+00:13:39.318 --> 00:13:42.757
+I sympathize and empathize.
+
+00:13:42.758 --> 00:13:45.317
+I've been in that very same situation.
+
+00:13:45.318 --> 00:13:50.557
+And yeah, it's totally okay to feel like that.
+
+00:13:50.558 --> 00:13:55.437
+I mean, email itself is kind of complex,
+
+00:13:55.438 --> 00:13:57.517
+even on the server side.
+
+00:13:57.518 --> 00:14:00.517
+If you've ever looked or have been interested
+
+00:14:00.518 --> 00:14:02.677
+in self-hosting your email,
+
+00:14:02.678 --> 00:14:06.637
+you know that there are so many moving parts and pieces.
+
+00:14:06.638 --> 00:14:14.397
+So yeah, I hope that this short video
+
+00:14:14.398 --> 00:14:18.277
+can be a useful first step
+
+00:14:18.278 --> 00:14:19.757
+of getting you set up to
+
+00:14:19.758 --> 00:14:22.957
+at least be able to read your emails
+
+00:14:22.958 --> 00:14:26.557
+and compose and send them within Emacs
+
+00:14:26.558 --> 00:14:30.837
+so that you can see that it's possible
+
+00:14:30.838 --> 00:14:34.837
+and get that positive feedback loop going
+
+00:14:34.838 --> 00:14:41.157
+and get the encouragement and then go from there.
+
+00:14:41.158 --> 00:15:06.597
+Yeah, Gnus is most definitely very extensible.
+
+00:15:06.598 --> 00:15:10.157
+It already has a lot of backends built into GNU Emacs,
+
+00:15:10.158 --> 00:15:12.437
+and there are other ones
+
+00:15:12.438 --> 00:15:14.237
+that people have written externally
+
+00:15:14.238 --> 00:15:18.557
+on various code hosting forges
+
+00:15:18.558 --> 00:15:27.877
+that you can download and set up. Yeah, thank you all.
+
+00:15:27.878 --> 00:15:30.717
+It's nice to see that the talk
+
+00:15:30.718 --> 00:15:33.917
+has kind of resonated with so many folks.
+
+00:15:33.918 --> 00:15:41.237
+And, yeah, it is encouragement
+
+00:15:41.238 --> 00:15:44.197
+for me to finally get around to starting
+
+00:15:44.198 --> 00:15:47.997
+perhaps either a tutorial series
+
+00:15:47.998 --> 00:15:50.477
+or like a video series like this
+
+00:15:50.478 --> 00:15:54.117
+concretely showing and walking through
+
+00:15:54.118 --> 00:15:57.917
+how to like set up and configure these different aspects.
+
+00:15:57.918 --> 00:16:00.277
+There were so many other things that I wanted to show,
+
+00:16:00.278 --> 00:16:04.557
+but didn't have the time
+
+00:16:04.558 --> 00:16:06.437
+or couldn't squeeze it into
+
+00:16:06.438 --> 00:16:09.037
+the 15, 20 minute format for the conference.
+
+00:16:09.038 --> 00:16:28.917
+Yeah. I'm going to hang out here for a few more minutes.
+
+00:16:28.918 --> 00:17:36.557
+Another comment, they would have liked
+
+00:17:36.558 --> 00:17:38.717
+to see a quick demo of Gnus
+
+00:17:38.718 --> 00:17:41.117
+while it is fully configured and tweaked.
+
+00:17:41.118 --> 00:17:43.357
+That's kind of a teaser.
+
+00:17:43.358 --> 00:17:52.357
+I can definitely do that sometime after the conference.
+
+00:17:52.358 --> 00:17:59.637
+Truth be told, I don't customize the looks of it heavily.
+
+00:17:59.638 --> 00:18:01.757
+I use the default layout
+
+00:18:01.758 --> 00:18:03.957
+for the summary and article buffers.
+
+00:18:03.958 --> 00:18:12.557
+With Gnus, you can even reconfigure that
+
+00:18:12.558 --> 00:18:15.637
+to arrange these in your preferred location or layout.
+
+00:18:15.638 --> 00:18:18.717
+I don't really do any of that.
+
+00:18:18.718 --> 00:18:22.797
+For the most part, my setup is pretty simple.
+
+00:18:22.798 --> 00:18:27.757
+I can actually maybe show my init file here. Let's see.
+
+00:18:27.758 --> 00:18:58.717
+Yeah, so this is, I guess, part of my Gnus configuration.
+
+00:18:58.718 --> 00:19:01.437
+I configure a couple of mail servers,
+
+00:19:01.438 --> 00:19:04.637
+set up these expiry targets
+
+00:19:04.638 --> 00:19:07.597
+so that I can hit capital E on a message
+
+00:19:07.598 --> 00:19:12.437
+and then have it be archived. You can have it be immediate.
+
+00:19:12.438 --> 00:19:15.477
+I do that for work messages
+
+00:19:15.478 --> 00:19:17.677
+or you can use the default seven day,
+
+00:19:17.678 --> 00:19:21.797
+where if a message is older than seven days,
+
+00:19:21.798 --> 00:19:23.317
+like once it reaches that age
+
+00:19:23.318 --> 00:19:26.357
+and it's been marked as expired and it'll be moved into,
+
+00:19:26.358 --> 00:19:29.597
+like for example, this yearly archive directory,
+
+00:19:29.598 --> 00:19:31.757
+like archive. For example, 2025.
+
+00:19:31.758 --> 00:19:35.317
+Yeah, you can do like mail splitting,
+
+00:19:35.318 --> 00:19:38.557
+automatically filing email.
+
+00:19:38.558 --> 00:19:44.037
+The fancy splitting is the more powerful variant.
+
+00:19:44.038 --> 00:19:46.917
+You can use like all kinds of regular expressions
+
+00:19:46.918 --> 00:19:48.917
+and move email around depending on
+
+00:19:48.918 --> 00:19:50.877
+what field or what header
+
+00:19:50.878 --> 00:19:52.637
+matches what regular expression.
+
+00:19:52.638 --> 00:20:00.397
+What else? Gnus has things,
+
+00:20:00.398 --> 00:20:03.477
+has a facility like Gnus parameters
+
+00:20:03.478 --> 00:20:07.237
+for configuring individual groups or directories.
+
+00:20:07.238 --> 00:20:11.477
+Like if you file all the mailing or the mails
+
+00:20:11.478 --> 00:20:15.797
+for a particular mailing list into a certain group.
+
+00:20:15.798 --> 00:20:20.237
+And for example, if they add
+
+00:20:20.238 --> 00:20:22.917
+the name of the mailing list
+
+00:20:22.918 --> 00:20:26.437
+to the, subject header.
+
+00:20:26.438 --> 00:20:28.957
+They prefix the subject header with the name of the list.
+
+00:20:28.958 --> 00:20:30.637
+You can set that here
+
+00:20:30.638 --> 00:20:32.877
+and Gnus will automatically
+
+00:20:32.878 --> 00:20:39.117
+hide that for you. So, let's see.
+
+00:20:39.118 --> 00:20:54.637
+There's a news agent,
+
+00:20:54.638 --> 00:20:58.917
+which I won't even get into because it's a rabbit hole.
+
+00:20:58.918 --> 00:21:01.877
+It's pretty cool. Definitely check it out.
+
+00:21:01.878 --> 00:21:07.517
+You can define what MIME parts should be buttonized
+
+00:21:07.518 --> 00:21:09.277
+so that you can like easily toggle them
+
+00:21:09.278 --> 00:21:11.077
+when displaying the article.
+
+00:21:11.078 --> 00:21:14.837
+Yeah, you can customize the list
+
+00:21:14.838 --> 00:21:17.597
+of the headers that are displayed and the order of them.
+
+00:21:17.598 --> 00:21:22.997
+Like I showed in the sample init file that I provided.
+
+00:21:22.998 --> 00:21:25.437
+Games can integrate with Dired.
+
+00:21:25.438 --> 00:21:35.957
+You can set like custom signatures like here.
+
+00:21:35.958 --> 00:21:37.877
+I might define something
+
+00:21:37.878 --> 00:21:44.797
+and then I use it later in the posting,
+
+00:21:44.798 --> 00:21:48.517
+in the posting, the news posting styles variable.
+
+00:21:48.518 --> 00:21:52.117
+I set a signature to that. Yeah.
+
+00:21:52.118 --> 00:22:09.997
+You can write custom like functions to move email around.
+
+00:22:09.998 --> 00:22:16.077
+So I have this like Gnus chunk article function
+
+00:22:16.078 --> 00:22:19.117
+that I bind to VS,
+
+00:22:19.118 --> 00:22:22.317
+so V is the prefix came up that I defined,
+
+00:22:22.318 --> 00:22:29.757
+and then S, so you can do things like that.
+
+00:22:29.758 --> 00:22:34.197
+You can customize the format of the topic lines,
+
+00:22:34.198 --> 00:22:39.557
+so if I actually launch Gnus with my own configuration,
+
+00:22:39.558 --> 00:22:43.397
+this is how it might look like, so.
+
+00:22:43.398 --> 00:22:58.437
+You can define archive decoders
+
+00:22:58.438 --> 00:23:02.317
+to let you like automatically decode
+
+00:23:02.318 --> 00:23:04.957
+inside the Gnus article buffer,
+
+00:23:04.958 --> 00:23:10.157
+how to extract certain archive formats.
+
+00:23:10.158 --> 00:23:13.037
+Like for example, I defined this one for Gzip.
+
+00:23:13.038 --> 00:23:18.637
+You can set like discouraged alternatives
+
+00:23:18.638 --> 00:23:22.077
+to like, for example, hide HTML email by default,
+
+00:23:22.078 --> 00:23:26.997
+especially if there is a plain text version. I do that.
+
+00:23:26.998 --> 00:23:34.997
+GNU says machinery around like encrypting emails.
+
+00:23:34.998 --> 00:23:36.957
+It has a bunch of customizations.
+
+00:23:36.958 --> 00:23:44.797
+that you can configure and have Dynos behave a certain way.
+
+00:23:44.798 --> 00:23:48.637
+For example, when replying to signed or encrypted emails.
+
+00:23:48.638 --> 00:24:01.957
+And yeah. Anyway. That's about it.
+
+00:24:01.958 --> 00:24:04.557
+So yeah, thanks again for hanging out with me, folks.
+
+00:24:04.558 --> 00:24:08.877
+I appreciate all the kind words.
+
+00:24:08.878 --> 00:24:13.117
+comments and yeah, I'm also
+
+00:24:13.118 --> 00:24:17.037
+looking forward to trying and putting together
+
+00:24:17.038 --> 00:24:21.997
+more videos or articles about Gnus.
+
+00:24:21.998 --> 00:24:28.117
+Definitely one about configuring Dovecot for local mail.
+
+00:24:28.118 --> 00:24:31.157
+And yeah, take it from there. Thanks again.
+
+00:24:31.158 --> 00:24:33.688
+Hope you enjoy the rest of the conference.
diff --git a/2025/captions/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--main--chapters.vtt b/2025/captions/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--main--chapters.vtt
new file mode 100644
index 00000000..fc516878
--- /dev/null
+++ b/2025/captions/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--main--chapters.vtt
@@ -0,0 +1,50 @@
+WEBVTT
+
+
+00:00:02.620 --> 00:01:25.239
+Introduction
+
+00:01:25.240 --> 00:02:49.959
+Demo
+
+00:02:49.960 --> 00:03:58.559
+Don't panic
+
+00:03:58.560 --> 00:05:46.239
+Configuring servers
+
+00:05:46.240 --> 00:06:26.599
+.authinfo
+
+00:06:26.600 --> 00:08:25.719
+Configuration
+
+00:08:25.720 --> 00:09:40.079
+Starting Gnus
+
+00:09:40.080 --> 00:10:19.899
+Always showing groups
+
+00:10:19.900 --> 00:11:30.119
+Reading messages
+
+00:11:30.120 --> 00:12:55.159
+Debugging IMAP
+
+00:12:55.160 --> 00:14:25.559
+Topics
+
+00:14:25.560 --> 00:15:24.319
+Customizing message display
+
+00:15:24.320 --> 00:17:26.659
+Sending emails
+
+00:17:26.660 --> 00:19:27.959
+Plans
+
+00:19:27.960 --> 00:20:12.759
+Wrapping up
+
+00:20:12.760 --> 00:21:37.760
+nnimap
diff --git a/2025/captions/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--main.vtt b/2025/captions/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--main.vtt
new file mode 100644
index 00000000..c4e86336
--- /dev/null
+++ b/2025/captions/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--main.vtt
@@ -0,0 +1,1332 @@
+WEBVTT captioned by sachac
+
+NOTE Introduction
+
+00:00:02.620 --> 00:00:04.799
+Hello, my name is Amin Bandali,
+
+00:00:04.800 --> 00:00:06.359
+and today I'd like to talk about
+
+00:00:06.360 --> 00:00:08.799
+reading and writing emails in GNU Emacs
+
+00:00:08.800 --> 00:00:14.319
+using Gnus specifically.
+
+00:00:14.320 --> 00:00:16.879
+Gnus has had this sort of reputation
+
+00:00:16.880 --> 00:00:20.599
+of being difficult to approach and configure.
+
+00:00:20.600 --> 00:00:23.359
+That's understandable
+
+00:00:23.360 --> 00:00:26.319
+because it has many, many options
+
+00:00:26.320 --> 00:00:27.679
+and major and minor modes
+
+00:00:27.680 --> 00:00:30.679
+that interact in different ways with each other.
+
+00:00:30.680 --> 00:00:35.319
+And it also doesn't help that Gnus started originally
+
+00:00:35.320 --> 00:00:36.359
+as a newsreader
+
+00:00:36.360 --> 00:00:38.759
+rather than a mail client.
+
+00:00:38.760 --> 00:00:40.879
+So a lot of the terminology that it uses
+
+00:00:40.880 --> 00:00:42.519
+is also rooted in that,
+
+00:00:42.520 --> 00:00:45.559
+in reading and writing news.
+
+00:00:45.560 --> 00:00:48.119
+But nevertheless, with this video and talk,
+
+00:00:48.120 --> 00:00:52.159
+I hope to provide a sort
+
+00:00:52.160 --> 00:00:55.759
+of very quick introduction
+
+00:00:55.760 --> 00:00:57.539
+of starting to use Gnus
+
+00:00:57.540 --> 00:01:00.919
+to read and write email and send it.
+
+00:01:00.920 --> 00:01:02.679
+We will use Gnus' IMAP support,
+
+00:01:02.680 --> 00:01:06.119
+mainly because a lot of people
+
+00:01:06.120 --> 00:01:08.679
+these days have email accounts
+
+00:01:08.680 --> 00:01:10.759
+with mail service providers
+
+00:01:10.760 --> 00:01:12.039
+that support IMAP,
+
+00:01:12.040 --> 00:01:14.319
+which is an open standard.
+
+00:01:14.320 --> 00:01:17.479
+So it's widely available and supported
+
+00:01:17.480 --> 00:01:19.719
+across many different providers
+
+00:01:19.720 --> 00:01:25.239
+as well as mail clients or mail user agents as well.
+
+NOTE Demo
+
+00:01:25.240 --> 00:01:30.559
+Okay, so let's just jump straight right in.
+
+00:01:30.560 --> 00:01:34.279
+I will enter this demo directory that I created
+
+00:01:34.280 --> 00:01:36.919
+for the purposes of this demonstration
+
+00:01:36.920 --> 00:01:40.999
+and change my home directory to this one
+
+00:01:41.000 --> 00:01:49.839
+so that we can safely experiment with Gnus here.
+
+00:01:49.840 --> 00:01:53.979
+For this presentation, I've written up
+
+00:01:53.980 --> 00:01:56.839
+a quick initialization file or init file
+
+00:01:56.840 --> 00:01:59.719
+that I will share afterwards as well
+
+00:01:59.720 --> 00:02:01.639
+to get us going with Gnus.
+
+00:02:01.640 --> 00:02:04.519
+There's not much to it at the moment.
+
+00:02:04.520 --> 00:02:07.399
+Just set up the package archives and
+
+00:02:07.400 --> 00:02:09.479
+install the keycast package
+
+00:02:09.480 --> 00:02:14.079
+for showing the key presses in the mode line.
+
+00:02:14.080 --> 00:02:15.359
+Yeah, that's about it.
+
+00:02:15.360 --> 00:02:16.239
+And I'll also define
+
+00:02:16.240 --> 00:02:20.279
+a little like inline function +emacs.d
+
+00:02:20.280 --> 00:02:24.079
+that allows me to conveniently write
+
+00:02:24.080 --> 00:02:26.639
+and have it expanded
+
+00:02:26.640 --> 00:02:29.300
+or refer to files and directories, rather,
+
+00:02:29.301 --> 00:02:30.900
+paths that we could expand,
+
+00:02:30.901 --> 00:02:32.833
+inside my Emacs configuration directory.
+
+00:02:32.834 --> 00:02:37.500
+I also have this eval-last-sexp
+
+00:02:37.501 --> 00:02:41.119
+bound to a global key,
+
+00:02:41.120 --> 00:02:43.279
+so that I will be able to easily
+
+00:02:43.280 --> 00:02:47.519
+use it for this talk.
+
+00:02:47.520 --> 00:02:49.959
+Okay, let's jump right in.
+
+NOTE Don't panic
+
+00:02:49.960 --> 00:02:52.239
+First things first, don't panic.
+
+00:02:52.240 --> 00:02:55.267
+And that's actually also the name
+
+00:02:55.268 --> 00:02:58.359
+of the very first node
+
+00:02:58.360 --> 00:03:01.559
+in the Gnus manual when you open it.
+
+00:03:01.560 --> 00:03:02.839
+And it's actually nice.
+
+00:03:02.840 --> 00:03:04.479
+I definitely, definitely recommend
+
+00:03:04.480 --> 00:03:07.079
+that you look through
+
+00:03:07.080 --> 00:03:10.199
+at least the very first couple of chapters of this,
+
+00:03:10.200 --> 00:03:14.199
+skim through it, and later on refer to it
+
+00:03:14.200 --> 00:03:16.133
+whenever you find something confusing
+
+00:03:16.134 --> 00:03:19.499
+or don't understand it.
+
+00:03:19.500 --> 00:03:21.359
+But yeah, we'll start
+
+00:03:21.360 --> 00:03:22.399
+with these two paragraphs here.
+
+00:03:22.400 --> 00:03:23.639
+So again, a Gnus installation
+
+00:03:23.640 --> 00:03:28.119
+is basically just a list of one or more servers
+
+00:03:28.120 --> 00:03:30.119
+and the subscribed groups from those servers
+
+00:03:30.120 --> 00:03:32.319
+and articles in those groups.
+
+00:03:32.320 --> 00:03:34.279
+You can already kind of see
+
+00:03:34.280 --> 00:03:39.479
+where that influence of a newsreader comes in.
+
+00:03:39.480 --> 00:03:41.839
+But yeah, basically what it's saying is that,
+
+00:03:41.840 --> 00:03:43.839
+you know, we have one or more servers.
+
+00:03:43.840 --> 00:03:47.079
+We can think of them as email servers.
+
+00:03:47.080 --> 00:03:49.359
+Groups can be like, we can think
+
+00:03:49.360 --> 00:03:52.959
+of them as folders or directories.
+
+00:03:52.960 --> 00:03:55.239
+And yeah, articles,
+
+00:03:55.240 --> 00:03:58.559
+those would be like our email messages.
+
+NOTE Configuring servers
+
+00:03:58.560 --> 00:03:59.679
+With Gnus, we can add
+
+00:03:59.680 --> 00:04:06.119
+and configure servers mainly using two variables.
+
+00:04:06.120 --> 00:04:07.919
+One of them is the gnus-select-method
+
+00:04:07.920 --> 00:04:11.479
+and the other is gnus-secondary-select-methods.
+
+00:04:11.480 --> 00:04:15.759
+The first one predates the second one
+
+00:04:15.760 --> 00:04:17.559
+and I generally don't recommend using it, because
+
+00:04:17.560 --> 00:04:22.559
+first of all, it can only point
+
+00:04:22.560 --> 00:04:26.359
+to one server, and that server,
+
+00:04:26.360 --> 00:04:27.879
+because it's the primary,
+
+00:04:27.880 --> 00:04:32.559
+then Gnus won't add a prefix to its groups,
+
+00:04:32.560 --> 00:04:34.839
+so later on, as you get into
+
+00:04:34.840 --> 00:04:36.679
+more advanced features of Gnus
+
+00:04:36.680 --> 00:04:38.519
+and, for example, want to write rules
+
+00:04:38.520 --> 00:04:42.959
+to modify your message composition
+
+00:04:42.960 --> 00:04:47.039
+in a way for certain groups, or file mail,
+
+00:04:47.040 --> 00:04:48.799
+automatically classify mail,
+
+00:04:48.800 --> 00:04:51.879
+this distinction can become
+
+00:04:51.880 --> 00:04:53.959
+confusing and annoying.
+
+00:04:53.960 --> 00:04:57.199
+My recommendation is to always and only use
+
+00:04:57.200 --> 00:05:01.799
+the gnus-secondary-select-methods.
+
+00:05:01.800 --> 00:05:07.319
+Yeah, so let's do that here.
+
+00:05:07.320 --> 00:05:10.299
+I'm gonna uncomment this portion.
+
+00:05:10.300 --> 00:05:16.419
+So here, I set the primary select method to nil,
+
+00:05:16.420 --> 00:05:24.159
+and the second one, I define an nnimap server
+
+00:05:24.160 --> 00:05:30.039
+of the nnimap backend.
+
+00:05:30.040 --> 00:05:32.439
+I give it the name ec25gnus.
+
+00:05:32.440 --> 00:05:35.879
+What I want it to do is to
+
+00:05:35.880 --> 00:05:37.799
+connect to my mail server,
+
+00:05:37.800 --> 00:05:41.079
+which is at this address,
+
+00:05:41.080 --> 00:05:46.239
+and fetch emails from it over TLS with this username.
+
+NOTE .authinfo
+
+00:05:46.240 --> 00:05:50.719
+And then the passwords or the credentials,
+
+00:05:50.720 --> 00:05:56.839
+you can put them in the .authinfo file.
+
+00:05:56.840 --> 00:05:58.799
+Normally, you would want to, for example,
+
+00:05:58.800 --> 00:06:03.719
+encrypt this file with your GPG key.
+
+00:06:03.720 --> 00:06:06.719
+But for this demonstration, I haven't.
+
+00:06:06.720 --> 00:06:10.479
+So yeah, the format is the keyword "machine"
+
+00:06:10.480 --> 00:06:15.239
+followed by the name of your Gnus server or account,
+
+00:06:15.240 --> 00:06:17.199
+followed by the word "login",
+
+00:06:17.200 --> 00:06:19.199
+then your login username,
+
+00:06:19.200 --> 00:06:23.959
+and then the password, which here it's not shown.
+
+00:06:23.960 --> 00:06:26.599
+Yeah.
+
+NOTE Configuration
+
+00:06:26.600 --> 00:06:28.679
+But before we actually set this,
+
+00:06:28.680 --> 00:06:31.479
+I'll just show you that if we like start Gnus
+
+00:06:31.480 --> 00:06:33.719
+with M-x gnus,
+
+00:06:33.720 --> 00:06:36.439
+initially, it will just show
+
+00:06:36.440 --> 00:06:37.759
+an error like this.
+
+00:06:37.760 --> 00:06:40.399
+Even if we continue, it's empty.
+
+00:06:40.400 --> 00:06:43.399
+There's not much because Gnus doesn't know
+
+00:06:43.400 --> 00:06:47.039
+where to fetch these emails from.
+
+00:06:47.040 --> 00:06:52.159
+And that's what we will configure.
+
+00:06:52.160 --> 00:06:55.859
+Excuse me.
+
+00:06:55.860 --> 00:06:57.559
+Yeah, so just for convenience,
+
+00:06:57.560 --> 00:06:59.079
+we can bind Gnus to,
+
+00:06:59.080 --> 00:07:00.679
+for example, C-c g, as I've done here.
+
+00:07:00.680 --> 00:07:04.119
+You will want to set your name
+
+00:07:04.120 --> 00:07:05.799
+and email address, like so.
+
+00:07:05.800 --> 00:07:09.239
+Here we tell Emacs
+
+00:07:09.240 --> 00:07:11.439
+that we are going to be using Gnus for reading email,
+
+00:07:11.440 --> 00:07:12.839
+because Emacs comes
+
+00:07:12.840 --> 00:07:14.759
+with other email clients as well,
+
+00:07:14.760 --> 00:07:18.559
+such as Rmail, and in fact, defaults to Rmail,
+
+00:07:18.560 --> 00:07:24.839
+so this way, we tell it to use Gnus.
+
+00:07:24.840 --> 00:07:31.559
+By default, Gnus puts its newsrc file and other files,
+
+00:07:31.560 --> 00:07:34.319
+I believe it still scatters them
+
+00:07:34.320 --> 00:07:35.439
+in a few different directories
+
+00:07:35.440 --> 00:07:36.279
+in your home directory,
+
+00:07:36.280 --> 00:07:37.399
+so it's a little bit messy.
+
+00:07:37.400 --> 00:07:40.039
+So what I prefer to do is to just put it
+
+00:07:40.040 --> 00:07:42.439
+all under the Gnus directory
+
+00:07:42.440 --> 00:07:47.439
+inside of my Emacs configuration, as I do here.
+
+00:07:47.440 --> 00:07:50.639
+Yeah, and then here we just tell Gnus
+
+00:07:50.640 --> 00:07:53.319
+to, like, don't try to bother
+
+00:07:53.320 --> 00:07:55.759
+with a generic newsrc file
+
+00:07:55.760 --> 00:07:57.119
+that would be shared
+
+00:07:57.120 --> 00:07:58.399
+with other news readers.
+
+00:07:58.400 --> 00:07:59.679
+Just want to use it for email.
+
+00:07:59.680 --> 00:08:01.959
+And yeah, so we just tell Gnus
+
+00:08:01.960 --> 00:08:03.039
+to keep all of its data
+
+00:08:03.040 --> 00:08:08.079
+inside a dedicated .newsrc.eld
+
+00:08:08.080 --> 00:08:12.159
+(for Emacs Lisp data) file instead.
+
+00:08:12.160 --> 00:08:15.199
+And we can also have Gnus not prompt us
+
+00:08:15.200 --> 00:08:19.679
+when we want to exit with q.
+
+00:08:19.680 --> 00:08:23.399
+Anyway, so let's go ahead and evaluate this.
+
+00:08:23.400 --> 00:08:25.719
+So this has been set,
+
+NOTE Starting Gnus
+
+00:08:25.720 --> 00:08:32.267
+so if we type M-x gnus again, or hit C-c g,
+
+00:08:32.268 --> 00:08:35.699
+now we're faced with an empty buffer,
+
+00:08:35.700 --> 00:08:37.399
+and it says no news is good news,
+
+00:08:37.400 --> 00:08:38.399
+and that's actually
+
+00:08:38.400 --> 00:08:40.719
+one of the characteristics of Gnus
+
+00:08:40.720 --> 00:08:44.779
+is that by default it tries
+
+00:08:44.780 --> 00:08:47.619
+to like sort of declutter
+
+00:08:47.620 --> 00:08:49.199
+and show us a little less possible
+
+00:08:49.200 --> 00:08:50.819
+in the group buffer,
+
+00:08:50.820 --> 00:08:53.259
+meaning that if you don't have
+
+00:08:53.260 --> 00:08:55.639
+any groups with unread or marked
+
+00:08:55.640 --> 00:09:00.119
+or, like, starred messages, it will not show them.
+
+00:09:00.120 --> 00:09:03.959
+To actually see all of our groups or folders,
+
+00:09:03.960 --> 00:09:08.359
+we hit shift L or capital L,
+
+00:09:08.360 --> 00:09:12.419
+and we see that we have an inbox here,
+
+00:09:12.420 --> 00:09:14.879
+as expected. So we enter the inbox,
+
+00:09:14.880 --> 00:09:17.459
+and we see that there is an article there
+
+00:09:17.460 --> 00:09:20.779
+and it's already been marked as read.
+
+00:09:20.780 --> 00:09:22.679
+But if we mark it as unread
+
+00:09:22.680 --> 00:09:25.959
+and exit and enter Gnus again,
+
+00:09:25.960 --> 00:09:27.279
+this is what we would see.
+
+00:09:27.280 --> 00:09:28.839
+We would see that our group
+
+00:09:28.840 --> 00:09:34.099
+and then we enter it, we see our mail here.
+
+00:09:34.100 --> 00:09:36.159
+Yeah, and this is our very first email
+
+00:09:36.160 --> 00:09:40.079
+that we read in GNU Emacs here, inside Gnus.
+
+NOTE Always showing groups
+
+00:09:40.080 --> 00:09:43.839
+It might be useful to have Gnus always show
+
+00:09:43.840 --> 00:09:46.839
+certain groups or folders
+
+00:09:46.840 --> 00:09:48.319
+even if they don't have
+
+00:09:48.320 --> 00:09:52.339
+anything unread or marked inside of them.
+
+00:09:52.340 --> 00:09:56.039
+The way we can do that is
+
+00:09:56.040 --> 00:09:57.599
+by setting this variable
+
+00:09:57.600 --> 00:10:01.339
+gnus-permanently-visible-groups
+
+00:10:01.340 --> 00:10:03.039
+to a regular expression
+
+00:10:03.040 --> 00:10:09.119
+that describes the name of these groups.
+
+00:10:09.120 --> 00:10:11.539
+So if we launch Gnus again,
+
+00:10:11.540 --> 00:10:14.759
+this time, we see that that group is visible,
+
+00:10:14.760 --> 00:10:19.899
+even though there's no unread messages in it.
+
+NOTE Reading messages
+
+00:10:19.900 --> 00:10:24.399
+When we enter a group or folder,
+
+00:10:24.400 --> 00:10:26.719
+we will see a list of all of our messages.
+
+00:10:26.720 --> 00:10:27.799
+Here, we only have one.
+
+00:10:27.800 --> 00:10:31.939
+We can press M-u or Alt-u
+
+00:10:31.940 --> 00:10:34.679
+to mark something as unread.
+
+00:10:34.680 --> 00:10:38.539
+You can press d to mark it as read.
+
+00:10:38.540 --> 00:10:40.079
+If you press just u,
+
+00:10:40.080 --> 00:10:41.959
+it'll tick the article,
+
+00:10:41.960 --> 00:10:44.039
+which is kind of the equivalent
+
+00:10:44.040 --> 00:10:46.999
+of marking the message or email
+
+00:10:47.000 --> 00:10:50.539
+as starred in other email clients
+
+00:10:50.540 --> 00:10:55.719
+such as Thunderbird.
+
+00:10:55.720 --> 00:11:00.639
+We see that when there are groups
+
+00:11:00.640 --> 00:11:03.959
+that have starred or ticked messages
+
+00:11:03.960 --> 00:11:04.679
+inside of them,
+
+00:11:04.680 --> 00:11:05.599
+Gnus will mark them
+
+00:11:05.600 --> 00:11:16.019
+with this little star here, or asterisk.
+
+00:11:16.020 --> 00:11:17.639
+This talk is just barely
+
+00:11:17.640 --> 00:11:19.039
+scratching the surface.
+
+00:11:19.040 --> 00:11:21.080
+Let's see how far...
+
+00:11:21.081 --> 00:11:22.759
+How am I doing with the time?
+
+00:11:22.760 --> 00:11:30.119
+Okay, 11 minutes already.
+
+NOTE Debugging IMAP
+
+00:11:30.120 --> 00:11:32.079
+Just a couple of helpful things here,
+
+00:11:32.080 --> 00:11:36.919
+like this nnimap-record-commands variable.
+
+00:11:36.920 --> 00:11:38.519
+It's useful when you want to debug
+
+00:11:38.520 --> 00:11:40.119
+your IMAP setup with Gnus.
+
+00:11:40.120 --> 00:11:42.859
+If you set it to anything non-nil,
+
+00:11:42.860 --> 00:11:46.699
+it will log the commands that it runs
+
+00:11:46.700 --> 00:11:49.539
+to a special `*imap log*` buffer.
+
+00:11:49.540 --> 00:11:50.719
+And here I just set it
+
+00:11:50.720 --> 00:11:52.679
+to this init-file-debug variable,
+
+00:11:52.680 --> 00:11:55.159
+which is set to non-nil
+
+00:11:55.160 --> 00:11:56.439
+whenever you launch Emacs
+
+00:11:56.440 --> 00:11:59.279
+with the --debug-init switch,
+
+00:11:59.280 --> 00:12:02.239
+so that's pretty helpful.
+
+00:12:02.240 --> 00:12:05.119
+You want to also set your sent folder,
+
+00:12:05.120 --> 00:12:07.479
+basically, where Gnus will save
+
+00:12:07.480 --> 00:12:09.439
+a copy of the message that you just sent.
+
+00:12:09.440 --> 00:12:12.799
+Normally, I think the convention these days is,
+
+00:12:12.800 --> 00:12:16.599
+a lot of you know servers and clients
+
+00:12:16.600 --> 00:12:18.799
+use a dedicated sent folder,
+
+00:12:18.800 --> 00:12:24.339
+but with Gnus, I just prefer to use INBOX itself.
+
+00:12:24.340 --> 00:12:27.119
+Mainly because then I will have
+
+00:12:27.120 --> 00:12:28.759
+threading working for free,
+
+00:12:28.760 --> 00:12:31.939
+so I can read the entire thread
+
+00:12:31.940 --> 00:12:34.299
+of an email chain there in one place.
+
+00:12:34.300 --> 00:12:35.319
+Of course, we don't have to keep
+
+00:12:35.320 --> 00:12:38.899
+the messages in there forever.
+
+00:12:38.900 --> 00:12:42.079
+And in fact, Gnus has facilities,
+
+00:12:42.080 --> 00:12:43.479
+both manual and automated,
+
+00:12:43.480 --> 00:12:45.999
+for expiring emails into
+
+00:12:46.000 --> 00:12:52.679
+different locations or different folders.
+
+00:12:52.680 --> 00:12:55.159
+Yeah. So let's move on here.
+
+NOTE Topics
+
+00:12:55.160 --> 00:13:02.039
+Topics are another nice feature of Gnus.
+
+00:13:02.040 --> 00:13:03.279
+So this is useful
+
+00:13:03.280 --> 00:13:05.359
+for creating some topics
+
+00:13:05.360 --> 00:13:08.459
+and then classifying or grouping
+
+00:13:08.460 --> 00:13:10.599
+your directories there.
+
+00:13:10.600 --> 00:13:11.799
+So we will see the use
+
+00:13:11.800 --> 00:13:13.639
+of this in a moment,
+
+00:13:13.640 --> 00:13:17.019
+where, let's say, I want to add
+
+00:13:17.020 --> 00:13:19.999
+a second account to Gnus.
+
+00:13:20.000 --> 00:13:23.559
+This one I'm going to call ec25work.
+
+00:13:23.560 --> 00:13:24.679
+Let's pretend that
+
+00:13:24.680 --> 00:13:29.859
+this is my work email.
+
+00:13:29.860 --> 00:13:32.479
+So if we open Gnus now,
+
+00:13:32.480 --> 00:13:36.999
+we see that our work INBOX
+
+00:13:37.000 --> 00:13:37.959
+also shows up here.
+
+00:13:37.960 --> 00:13:41.299
+And because we enabled topic mode,
+
+00:13:41.300 --> 00:13:42.359
+we see that we have
+
+00:13:42.360 --> 00:13:43.439
+these sort of buttons
+
+00:13:43.440 --> 00:13:44.839
+like Gnus and misc here.
+
+00:13:44.840 --> 00:13:46.679
+And we can, I believe,
+
+00:13:46.680 --> 00:13:49.799
+create a topic with capital T n.
+
+00:13:49.800 --> 00:13:52.879
+We can call it personal, this one.
+
+00:13:52.880 --> 00:13:56.939
+Let's create another one, work.
+
+00:13:56.940 --> 00:13:59.579
+And then what we can do is go
+
+00:13:59.580 --> 00:14:02.799
+over the directory that we want,
+
+00:14:02.800 --> 00:14:04.759
+for example, this one,
+
+00:14:04.760 --> 00:14:08.219
+hit capital T m to move it
+
+00:14:08.220 --> 00:14:11.899
+to the personal topic,
+
+00:14:11.900 --> 00:14:13.079
+and this work one,
+
+00:14:13.080 --> 00:14:15.199
+move it to the work topic.
+
+00:14:15.200 --> 00:14:17.439
+So we can nicely classify
+
+00:14:17.440 --> 00:14:23.119
+and group our groups folders here,
+
+00:14:23.120 --> 00:14:24.719
+which is especially useful
+
+00:14:24.720 --> 00:14:25.559
+when you have hundreds of them.
+
+NOTE Customizing message display
+
+00:14:25.560 --> 00:14:29.759
+Anyhow, we can customize
+
+00:14:29.760 --> 00:14:35.039
+different aspects of message display.
+
+00:14:35.040 --> 00:14:35.839
+Like for example,
+
+00:14:35.840 --> 00:14:38.199
+we can this way customize
+
+00:14:38.200 --> 00:14:39.199
+and change the order of
+
+00:14:39.200 --> 00:14:41.599
+which headers we want to see and where.
+
+00:14:41.600 --> 00:14:45.199
+So if I launch Gnus
+
+00:14:45.200 --> 00:14:48.459
+and go back to this email here,
+
+00:14:48.460 --> 00:14:52.139
+these are the headers that we see at the top.
+
+00:14:52.140 --> 00:14:52.639
+Excuse me.
+
+00:14:52.640 --> 00:14:55.159
+And with Gnus we can always
+
+00:14:55.160 --> 00:14:57.799
+We can have it show all the headers
+
+00:14:57.800 --> 00:15:01.999
+by pressing t to toggle the headers.
+
+00:15:02.000 --> 00:15:04.579
+Here we can see all the nitty-gritty
+
+00:15:04.580 --> 00:15:06.359
+and all of the headers in the message
+
+00:15:06.360 --> 00:15:12.219
+and we can toggle it back with t again.
+
+00:15:12.220 --> 00:15:16.479
+We can modify and customize the sorting
+
+00:15:16.480 --> 00:15:20.019
+with dedicated sorting functions.
+
+00:15:20.020 --> 00:15:20.999
+It comes with a number of them
+
+00:15:21.000 --> 00:15:21.599
+out of the box
+
+00:15:21.600 --> 00:15:24.319
+but we can define them as well.
+
+NOTE Sending emails
+
+00:15:24.320 --> 00:15:29.759
+Now to send emails. Let's see.
+
+00:15:29.760 --> 00:15:30.999
+We will be using message,
+
+00:15:31.000 --> 00:15:34.939
+and that's what Gnus itself uses.
+
+00:15:34.940 --> 00:15:38.579
+So I will set things up here.
+
+00:15:38.580 --> 00:15:42.639
+Let's see.
+
+00:15:42.640 --> 00:15:44.519
+Okay, so first of all,
+
+00:15:44.520 --> 00:15:46.439
+we want to have Gnus mark
+
+00:15:46.440 --> 00:15:48.519
+the messages that we write to others
+
+00:15:48.520 --> 00:15:49.759
+as read automatically,
+
+00:15:49.760 --> 00:15:51.359
+so this option does that.
+
+00:15:51.360 --> 00:15:58.039
+And then we define posting styles this way
+
+00:15:58.040 --> 00:16:01.619
+using the prefix, the name
+
+00:16:01.620 --> 00:16:04.359
+of the IMAP server.
+
+00:16:04.360 --> 00:16:06.519
+And this is how we can tell it to use
+
+00:16:06.520 --> 00:16:09.199
+what email address for the From [header]
+
+00:16:09.200 --> 00:16:14.599
+and which SMTP server to send it with.
+
+00:16:14.600 --> 00:16:17.879
+Yeah, and then gcc is where Gnus will save
+
+00:16:17.880 --> 00:16:20.199
+the copy of the messages that we write.
+
+00:16:20.200 --> 00:16:24.139
+So if we go ahead and launch Gnus again.
+
+00:16:24.140 --> 00:16:26.279
+We can go into our personal email here,
+
+00:16:26.280 --> 00:16:28.919
+hit m to compose a new message.
+
+00:16:28.920 --> 00:16:33.559
+We can prepare an email to,
+
+00:16:33.560 --> 00:16:35.119
+let's say, our work address.
+
+00:16:35.120 --> 00:16:42.419
+Hello from EmacsConf 2025 Gnus talk.
+
+00:16:42.420 --> 00:16:47.639
+Hello, this is just a test. :)
+
+00:16:47.640 --> 00:16:55.739
+Yeah, and we hit send.
+
+00:16:55.740 --> 00:16:56.919
+The sending will be done
+
+00:16:56.920 --> 00:17:03.479
+using Emacs's built-in SMTP libraries.
+
+00:17:03.480 --> 00:17:05.119
+Sometimes it can take a moment.
+
+00:17:05.120 --> 00:17:07.599
+Okay, that's it. It's done.
+
+00:17:07.600 --> 00:17:09.259
+So if we go back out
+
+00:17:09.260 --> 00:17:11.559
+and if we hit g to get new news,
+
+00:17:11.560 --> 00:17:15.679
+we should be able to see our new email there
+
+00:17:15.680 --> 00:17:17.639
+in the other account that we just sent it to.
+
+00:17:17.640 --> 00:17:22.360
+So we can come here, open it,
+
+00:17:22.361 --> 00:17:26.659
+and there we go.
+
+NOTE Plans
+
+00:17:26.660 --> 00:17:29.239
+There is a lot to configure in Gnus,
+
+00:17:29.240 --> 00:17:31.439
+and we're just barely scratching the surface,
+
+00:17:31.440 --> 00:17:34.079
+and unfortunately I don't have the time
+
+00:17:34.080 --> 00:17:34.999
+to explain all of these
+
+00:17:35.000 --> 00:17:36.519
+but I do plan on doing
+
+00:17:36.520 --> 00:17:38.839
+a much longer running series,
+
+00:17:38.840 --> 00:17:41.499
+whether it's text or videos,
+
+00:17:41.500 --> 00:17:42.879
+showing how to configure
+
+00:17:42.880 --> 00:17:45.319
+and use a lot of these different aspects of Gnus.
+
+00:17:45.320 --> 00:17:49.519
+But yeah, here, near the end, just a couple of...
+
+00:17:49.520 --> 00:17:54.919
+quick things. I find it's nice to have message
+
+00:17:54.920 --> 00:17:56.519
+prompt us for [confirmation]
+
+00:17:56.520 --> 00:17:59.199
+that we do want to send a message.
+
+00:17:59.200 --> 00:18:01.359
+Actually, when it does that, I take
+
+00:18:01.360 --> 00:18:02.599
+another look over my email
+
+00:18:02.600 --> 00:18:07.059
+to make sure I don't have any typos.
+
+00:18:07.060 --> 00:18:09.519
+It's generally a good idea to wrap your messages
+
+00:18:09.520 --> 00:18:14.119
+around 70 or 72 characters.
+
+00:18:14.120 --> 00:18:16.619
+We do that here.
+
+00:18:16.620 --> 00:18:19.159
+We can tell Gnus to forward messages
+
+00:18:19.160 --> 00:18:22.599
+as a proper MIME part,
+
+00:18:22.600 --> 00:18:27.059
+instead of some half-broken way.
+
+00:18:27.060 --> 00:18:30.119
+This customization, the sendmail function,
+
+00:18:30.120 --> 00:18:34.239
+is how we tell Gnus with message
+
+00:18:34.240 --> 00:18:38.239
+to use the SMTP library to sending the email,
+
+00:18:38.240 --> 00:18:42.479
+and these two variables are useful for
+
+00:18:42.480 --> 00:18:45.959
+omitting our own email address
+
+00:18:45.960 --> 00:18:47.439
+when we want to send someone,
+
+00:18:47.440 --> 00:18:50.179
+like when we hit r, to reply to someone.
+
+00:18:50.180 --> 00:18:51.959
+if we configure these variables,
+
+00:18:51.960 --> 00:18:52.959
+then Gnus won't add
+
+00:18:52.960 --> 00:18:56.059
+our own address to the To or Cc,
+
+00:18:56.060 --> 00:18:58.479
+which is pretty useful.
+
+00:18:58.480 --> 00:18:59.919
+I also find it helpful
+
+00:18:59.920 --> 00:19:03.359
+to unbind C-c C-s.
+
+00:19:03.360 --> 00:19:04.974
+That's another key
+
+00:19:04.975 --> 00:19:06.319
+for sending the message [in addition to C-c C-c].
+
+00:19:06.320 --> 00:19:09.719
+And because C-c C-d,
+
+00:19:09.720 --> 00:19:13.359
+which is very close to it on the QWERTY layout,
+
+00:19:13.360 --> 00:19:15.719
+is useful for saving a draft
+
+00:19:15.720 --> 00:19:16.839
+and then coming back to it,
+
+00:19:16.840 --> 00:19:20.079
+I don't want to accidentally hit C-c C-s,
+
+00:19:20.080 --> 00:19:22.039
+and send the message prematurely.
+
+00:19:22.040 --> 00:19:25.979
+So I unbind it.
+
+00:19:25.980 --> 00:19:27.959
+Yeah, anyway, that's about it.
+
+NOTE Wrapping up
+
+00:19:27.960 --> 00:19:31.039
+That's a kind of very quick tour
+
+00:19:31.040 --> 00:19:37.119
+and introduction of setting up Gnus.
+
+00:19:37.120 --> 00:19:40.719
+Here, we just configured a remote IMAP server,
+
+00:19:40.720 --> 00:19:43.519
+but we can also, of course,
+
+00:19:43.520 --> 00:19:46.359
+set up a local IMAP server such as Dovecot
+
+00:19:46.360 --> 00:19:48.399
+and point Gnus to there,
+
+00:19:48.400 --> 00:19:52.799
+and use programs like OfflineIMAP, I believe,
+
+00:19:52.800 --> 00:19:57.479
+or the mbsync program from isync package
+
+00:19:57.480 --> 00:20:02.939
+or isync project to synchronize our messages
+
+00:20:02.940 --> 00:20:04.479
+to local mail directories
+
+00:20:04.480 --> 00:20:06.279
+and then point Gnus to it.
+
+00:20:06.280 --> 00:20:08.359
+The reason we might want to use that
+
+00:20:08.360 --> 00:20:11.719
+is to always have a copy of our messages at hand
+
+00:20:11.720 --> 00:20:12.759
+so we can use offline.
+
+NOTE nnimap
+
+00:20:12.760 --> 00:20:17.439
+And why use nnimap specifically?
+
+00:20:17.440 --> 00:20:27.399
+As of now, the Maildir backend included with Gnus
+
+00:20:27.400 --> 00:20:29.679
+is very inefficient,
+
+00:20:29.680 --> 00:20:31.399
+especially when dealing with
+
+00:20:31.400 --> 00:20:33.839
+tens or hundreds of thousands of messages
+
+00:20:33.840 --> 00:20:36.659
+like some of us are.
+
+00:20:36.660 --> 00:20:38.759
+It just takes an eternity to try
+
+00:20:38.760 --> 00:20:43.259
+and index them and get going.
+
+00:20:43.260 --> 00:20:44.639
+In that case, what I recommend doing
+
+00:20:44.640 --> 00:20:47.799
+is instead of interfacing directly with Maildir,
+
+00:20:47.800 --> 00:20:52.359
+for Gnus, just install and run
+
+00:20:52.360 --> 00:20:54.359
+Dovecot, a local IMAP server,
+
+00:20:54.360 --> 00:20:59.819
+and point Gnus to that.
+
+00:20:59.820 --> 00:21:02.959
+I plan on writing tutorials or doing videos
+
+00:21:02.960 --> 00:21:06.639
+about these other aspects
+
+00:21:06.640 --> 00:21:10.519
+of configuring Gnus after the conference.
+
+00:21:10.520 --> 00:21:11.439
+That's about it for me,
+
+00:21:11.440 --> 00:21:14.119
+so I hope you find this helpful.
+
+00:21:14.120 --> 00:21:16.679
+If you have any questions,
+
+00:21:16.680 --> 00:21:18.239
+please feel free to email me
+
+00:21:18.240 --> 00:21:23.759
+at bandali@gnu.org or @kelar.org.
+
+00:21:23.760 --> 00:21:25.879
+You can take a look at my personal website
+
+00:21:25.880 --> 00:21:26.839
+where I plan on posting
+
+00:21:26.840 --> 00:21:31.059
+other Emacs and Gnus materials.
+
+00:21:31.060 --> 00:21:33.039
+And yeah, thank you for watching
+
+00:21:33.040 --> 00:21:35.159
+and I hope you enjoy the rest of the conference.
+
+00:21:35.160 --> 00:21:37.760
+Take care.
diff --git a/2025/captions/emacsconf-2025-graphics--modern-emacselisp-hardwaresoftware-accelerated-graphics--emanuel-berg--main.vtt b/2025/captions/emacsconf-2025-graphics--modern-emacselisp-hardwaresoftware-accelerated-graphics--emanuel-berg--main.vtt
new file mode 100644
index 00000000..f922227a
--- /dev/null
+++ b/2025/captions/emacsconf-2025-graphics--modern-emacselisp-hardwaresoftware-accelerated-graphics--emanuel-berg--main.vtt
@@ -0,0 +1,75 @@
+WEBVTT captioned by sachac
+
+00:00:00.000 --> 00:00:04.999
+[ This video has no narration. ]
+
+NOTE space box intro (elisp model matrix pipeline c dynamic module)
+
+00:00:05.000 --> 00:01:58.999
+space box intro (elisp model matrix pipeline c dynamic module)
+
+NOTE parallel (sdl/linux multicore pthreads)
+
+00:01:59.000 --> 00:02:03.999
+parallel (sdl/linux multicore pthreads)
+
+
+NOTE bad snake (oop eieio)
+
+00:02:04.000 --> 00:03:29.999
+bad snake (oop eieio)
+
+NOTE solar (ecs)
+
+00:03:30.000 --> 00:04:31.999
+solar (ecs)
+
+NOTE 60 fps 1 (opengl cpu)
+
+00:04:32.000 --> 00:05:35.999
+60 fps 1 (opengl cpu)
+
+NOTE earth (grid ascii)
+
+00:05:36.000 --> 00:06:01.999
+earth (grid ascii)
+
+NOTE studio (image unicode)
+
+00:06:02.000 --> 00:09:31.999
+studio (image unicode)
+
+NOTE 60 fps 2 (gpu)
+
+00:09:32.000 --> 00:11:56.999
+60 fps 2 (gpu)
+
+NOTE rgb triangle (glsl vertex/fragment shaders)
+
+00:11:57.000 --> 00:13:08.999
+rgb triangle (glsl vertex/fragment shaders)
+
+NOTE ansi cube (software functional shader)
+
+00:13:09.000 --> 00:13:32.999
+ansi cube (software functional shader)
+
+NOTE horizon (gradient)
+
+00:13:33.000 --> 00:15:15.999
+horizon (gradient)
+
+NOTE shell color table (zsh)
+
+00:15:16.000 --> 00:16:12.999
+shell color table (zsh)
+
+NOTE luki-lisp (macros)
+
+00:16:13.000 --> 00:18:24.999
+luki-lisp (macros)
+
+NOTE incal & rave dave outro (debug text triangles)
+
+00:18:25.000 --> 00:22:15.777
+incal & rave dave outro (debug text triangles)
diff --git a/2025/captions/emacsconf-2025-greader--gnu-emacs-greader-gnam-reader-mode-is-the-best-emacs-mode-in-existence--yuval-langer--main.vtt b/2025/captions/emacsconf-2025-greader--gnu-emacs-greader-gnam-reader-mode-is-the-best-emacs-mode-in-existence--yuval-langer--main.vtt
new file mode 100644
index 00000000..780ff013
--- /dev/null
+++ b/2025/captions/emacsconf-2025-greader--gnu-emacs-greader-gnam-reader-mode-is-the-best-emacs-mode-in-existence--yuval-langer--main.vtt
@@ -0,0 +1,223 @@
+WEBVTT captioned by sachac
+
+NOTE Introduction
+
+00:00:01.460 --> 00:00:03.785
+Hi, I'm Yuval Langer.
+
+00:00:03.786 --> 00:00:09.479
+Some may know me as cow_2001 on IRC.
+
+00:00:09.480 --> 00:00:12.119
+I'd like to tell you about greader mode,
+
+00:00:12.120 --> 00:00:14.519
+a versatile text-to-speech package
+
+00:00:14.520 --> 00:00:18.399
+written by Michelangelo Rodriguez.
+
+00:00:18.400 --> 00:00:20.399
+Sometimes you want to read a bunch
+
+00:00:20.400 --> 00:00:23.039
+and cannot be bothered, right?
+
+00:00:23.040 --> 00:00:25.079
+You'd rather plop on your chair
+
+00:00:25.080 --> 00:00:27.519
+and let the words come to you.
+
+00:00:27.520 --> 00:00:31.157
+You can do it using greader Mode.
+
+NOTE What is greader mode?
+
+00:00:31.158 --> 00:00:33.119
+What is greader mode?
+
+00:00:33.120 --> 00:00:36.319
+Greader mode is a text-to-speech minor mode
+
+00:00:36.320 --> 00:00:40.399
+with which you can read any buffer using the point.
+
+00:00:40.400 --> 00:00:41.602
+You move your point
+
+00:00:41.603 --> 00:00:43.559
+right before the text you want to read
+
+00:00:43.560 --> 00:00:47.639
+and run greader-read command.
+
+00:00:47.640 --> 00:00:50.839
+You can then use the left and right arrow keys
+
+00:00:50.840 --> 00:00:56.599
+to jump to the previous sentence or the next sentence.
+
+NOTE Installing Greader
+
+00:00:56.600 --> 00:00:59.143
+Installing GReader:
+
+00:00:59.144 --> 00:01:05.439
+Greader is available on the GNU Emacs app store
+
+00:01:05.440 --> 00:01:07.285
+and its copyright assigned to
+
+00:01:07.286 --> 00:01:10.959
+the Free Software Foundation.
+
+00:01:10.960 --> 00:01:12.857
+To install Greader,
+
+00:01:12.858 --> 00:01:19.279
+you can run M-x list-packages RET.
+
+00:01:19.280 --> 00:01:23.099
+look it up with C-s greader,
+
+00:01:23.100 --> 00:01:26.679
+press i to mark it for installation,
+
+00:01:26.680 --> 00:01:31.759
+and then press x to execute the installation.
+
+NOTE Basic usage
+
+00:01:31.760 --> 00:01:33.211
+Basic usage:
+
+00:01:33.212 --> 00:01:37.559
+We can now open a text file and start reading.
+
+00:01:37.560 --> 00:01:42.599
+Let's open The Willows by Algernon Blackwood.
+
+00:01:42.600 --> 00:01:44.479
+I've never read the story,
+
+00:01:44.480 --> 00:01:48.279
+but HP Lovecraft said it was the best horror story
+
+00:01:48.280 --> 00:01:52.959
+he had ever read, so it is in my reading list.
+
+00:01:52.960 --> 00:02:01.519
+Now load greader using M-x greader-mode.
+
+00:02:01.520 --> 00:02:08.139
+To start reading, press C-r SPC.
+
+00:02:08.140 --> 00:02:10.559
+The Project Gutenberg ebook of The willows.
+
+00:02:10.560 --> 00:02:14.079
+This will run the greader-read command.
+
+00:02:14.080 --> 00:02:16.799
+To stop, press the SPC key.
+
+00:02:16.800 --> 00:02:20.819
+This will run the greader-stop command.
+
+NOTE Navigation
+
+00:02:20.820 --> 00:02:22.359
+Navigation:
+
+00:02:22.360 --> 00:02:24.679
+You can navigate like you normally do,
+
+00:02:24.680 --> 00:02:27.559
+but using the left or right arrow keys
+
+00:02:27.560 --> 00:02:30.199
+will move the point between sentences
+
+00:02:30.200 --> 00:02:33.087
+instead of characters.
+
+00:02:33.088 --> 00:02:36.639
+So... This ebook is...
+
+00:02:36.640 --> 00:02:38.095
+You may copy it, give it away,
+
+00:02:38.096 --> 00:02:41.479
+or reuse it if you are not.
+
+00:02:41.480 --> 00:02:43.580
+Let's move to the start of the story.
+
+00:02:57.040 --> 00:02:58.088
+"After leaving Vienna,
+
+00:02:58.089 --> 00:02:59.839
+and long before you come to Budapest,
+
+00:02:59.840 --> 00:03:00.919
+the Danube enters a region
+
+00:03:00.920 --> 00:03:02.919
+of singular loneliness and desolation,
+
+00:03:02.920 --> 00:03:04.879
+where its waters spread away on all sides,
+
+00:03:04.880 --> 00:03:06.199
+regardless of a main channel,
+
+00:03:06.200 --> 00:03:08.799
+and the country becomes a swamp for miles upon miles,
+
+00:03:08.800 --> 00:03:11.759
+covered by a vast sea of low willow bushes."
+
+NOTE Reading rate
+
+00:03:12.380 --> 00:03:15.839
+Reading rate: this reading rate is rather slow.
+
+00:03:15.840 --> 00:03:19.519
+Let's pick up the pace using the plus key.
+
+00:03:19.520 --> 00:03:23.519
+This will run the greader-inc-rate command.
+
+00:03:23.520 --> 00:03:26.780
+You must do that while greader is reading.
+
+00:03:37.885 --> 00:03:39.779
+Now it is too fast.
+
+00:03:39.780 --> 00:03:44.679
+We can slow down using the - key.
+
+00:03:44.680 --> 00:03:52.485
+This will run the greader-dec-rate command.
+
+00:03:54.560 --> 00:03:59.384
+"In high flood this great acreage
+
+00:03:59.385 --> 00:04:01.239
+of sand, shingle-beds, and willow-grown islands
+
+00:04:01.240 --> 00:04:02.439
+is almost topped by the water,
+
+00:04:02.440 --> 00:04:03.609
+but in normal seasons the bushes
+
+00:04:03.610 --> 00:04:04.919
+bend and rustle in the free winds,
+
+00:04:04.920 --> 00:04:06.399
+showing their silver leaves to the sunshine
+
+00:04:06.400 --> 00:04:08.320
+in an ever-moving plain of bewildering beauty."
diff --git a/2025/captions/emacsconf-2025-hyperboleqa--questions-and-answers-to-help-you-fly-with-hyperbole--bob-weiner--main.vtt b/2025/captions/emacsconf-2025-hyperboleqa--questions-and-answers-to-help-you-fly-with-hyperbole--bob-weiner--main.vtt
new file mode 100644
index 00000000..d20eabe4
--- /dev/null
+++ b/2025/captions/emacsconf-2025-hyperboleqa--questions-and-answers-to-help-you-fly-with-hyperbole--bob-weiner--main.vtt
@@ -0,0 +1,2203 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:12.239
+All right, you're good to go. Are people here?
+
+00:00:12.240 --> 00:00:15.639
+Let me read the first question to you since I'm here.
+
+00:00:15.640 --> 00:00:17.639
+The first question here is,
+
+00:00:17.640 --> 00:00:20.599
+I'm excited to know opinion and current state
+
+00:00:20.600 --> 00:00:23.799
+of using NCP and AI for PKMs and PIEs.
+
+00:00:23.800 --> 00:00:28.639
+Since they do carry a lot of burden out of us, it means a lot of process.
+
+00:00:28.640 --> 00:00:33.439
+How does our pipeline stand with the coming days?
+
+00:00:33.440 --> 00:00:35.119
+Thanks for the question.
+
+00:00:35.120 --> 00:00:40.239
+AI is obviously on everybody's mind.
+
+00:00:40.240 --> 00:00:43.719
+We haven't done a lot of integration
+
+00:00:43.720 --> 00:00:47.199
+with any of the popular AI engines,
+
+00:00:47.200 --> 00:00:50.519
+but I think as you'll see through this Q&A session,
+
+00:00:50.520 --> 00:00:54.559
+Hyperbole's function is really to interlink
+
+00:00:54.560 --> 00:00:57.959
+your information everywhere throughout Emacs.
+
+00:00:57.960 --> 00:01:02.279
+And so, whether you're using a chatbot
+
+00:01:02.280 --> 00:01:04.919
+in a specific buffer,
+
+00:01:04.920 --> 00:01:11.359
+you can use hyperbole implicit links, implicit buttons
+
+00:01:11.360 --> 00:01:17.039
+to activate different actions there as well.
+
+00:01:17.040 --> 00:01:20.399
+So sometimes it takes a bit of customization,
+
+00:01:20.400 --> 00:01:25.999
+a small amount of two to seven lines of code to do that.
+
+00:01:26.000 --> 00:01:30.839
+As we get to working with more of these engines,
+
+00:01:30.840 --> 00:01:34.119
+we'll build that into the core part of Hyperbole.
+
+00:01:34.120 --> 00:01:40.039
+But right now, that's left as an extension
+
+00:01:40.040 --> 00:01:43.359
+for users who are heavily using MCP
+
+00:01:43.360 --> 00:01:45.879
+or other protocols right now.
+
+00:01:45.880 --> 00:01:50.239
+We have, for example, integrated
+
+00:01:50.240 --> 00:01:57.559
+with LSPs, you know, for coding and have that interface through xref
+
+00:01:57.560 --> 00:02:01.199
+and basically using the single key, the action key,
+
+00:02:01.200 --> 00:02:02.719
+which is made a return.
+
+00:02:02.720 --> 00:02:08.919
+You can jump around to any of your source definitions
+
+00:02:08.920 --> 00:02:10.999
+from any reference in almost any language
+
+00:02:11.000 --> 00:02:14.599
+that anybody uses today. So you can extrapolate from that
+
+00:02:14.600 --> 00:02:17.119
+how that might work with AI as well.
+
+00:02:17.120 --> 00:02:22.999
+And I think you'll see later when we talk about HiWiki
+
+00:02:23.000 --> 00:02:26.719
+that we're now enabling just just wiki words
+
+00:02:26.720 --> 00:02:30.079
+to be buttons in hyperbole.
+
+00:02:30.080 --> 00:02:33.999
+So those could be part of your chat with an AI
+
+00:02:34.000 --> 00:02:37.519
+and you just click on it and you jump right to all your references
+
+00:02:37.520 --> 00:02:49.119
+associated with that terminology. Thanks for the question.
+
+00:02:49.120 --> 00:02:51.839
+Should I just go through the second question?
+
+00:02:51.840 --> 00:02:54.199
+I thought people would be glad.
+
+00:02:54.200 --> 00:02:56.559
+As a normal user who codes and takes notes,
+
+00:02:56.560 --> 00:02:58.759
+I really want to deep dive and learn Hyperbole,
+
+00:02:58.760 --> 00:03:02.079
+but always end up winding back up to Embark
+
+00:03:02.080 --> 00:03:04.399
+and Org Mode being the better system.
+
+00:03:04.400 --> 00:03:06.479
+For me, Hyperbole looks over engineering
+
+00:03:06.480 --> 00:03:08.079
+or over the peer system,
+
+00:03:08.080 --> 00:03:10.119
+which other individual packages do well.
+
+00:03:10.120 --> 00:03:15.399
+And outside DMAC, there's no system supporting Hyperbole or any usability.
+
+00:03:15.400 --> 00:03:17.519
+And I think you've cited answering
+
+00:03:17.520 --> 00:03:21.159
+that already, so go ahead.
+
+00:03:21.160 --> 00:03:26.919
+Right, hyperbole is large, but there's reasons behind that.
+
+00:03:26.920 --> 00:03:30.599
+We're just trying to link all your information in Emacs.
+
+00:03:30.600 --> 00:03:38.079
+So I think you can see my screen here in Emacs.
+
+00:03:38.080 --> 00:03:45.439
+So for example, you can take any Lisp expression,
+
+00:03:45.440 --> 00:03:49.239
+even a variable like here we have in hyperbole
+
+00:03:49.240 --> 00:03:50.959
+Hyperbdur variable
+
+00:03:50.960 --> 00:03:53.519
+and I just hit the action key made a return
+
+00:03:53.520 --> 00:03:57.759
+and in my mini buffer I see the value of that variable,
+
+00:03:57.760 --> 00:04:01.599
+but I could just as well take any other expression
+
+00:04:01.600 --> 00:04:03.919
+and take the outer parens off
+
+00:04:03.920 --> 00:04:05.679
+and change them to angle brackets
+
+00:04:05.680 --> 00:04:08.239
+and now that's a live Hyper button
+
+00:04:08.240 --> 00:04:12.079
+could be in a comment in a programming buffer in this case.
+
+00:04:12.080 --> 00:04:15.679
+It's in K outliner buffer,
+
+00:04:15.680 --> 00:04:19.159
+which is a an auto-numbered outliner part of hyperbole.
+
+00:04:19.160 --> 00:04:23.599
+So let's just try this and say made a return.
+
+00:04:23.600 --> 00:04:28.719
+I pressed and it ran occur and found all the occurrences of buttons.
+
+00:04:28.720 --> 00:04:31.919
+And similarly in here, I could just jump and go
+
+00:04:31.920 --> 00:04:35.519
+to any of these lines directly
+
+00:04:35.520 --> 00:04:37.919
+by hitting made a return in that buffer as well.
+
+00:04:37.920 --> 00:04:39.799
+So all your text, all your sort
+
+00:04:39.800 --> 00:04:44.879
+of what we call implicit links become live and hyperbole.
+
+00:04:44.880 --> 00:04:46.519
+And you didn't have to learn much.
+
+00:04:46.520 --> 00:04:48.559
+You just learn, you know, if you know a little Lisp
+
+00:04:48.560 --> 00:04:50.279
+or how to type any expression,
+
+00:04:50.280 --> 00:04:52.879
+then you just change the outer brackets.
+
+00:04:52.880 --> 00:04:55.079
+And all of a sudden, you have hyperbuttons.
+
+00:04:55.080 --> 00:05:01.079
+So hyperbole, you can learn a little bit at a time.
+
+00:05:01.080 --> 00:05:04.479
+And although it seems daunting at first
+
+00:05:04.480 --> 00:05:06.879
+because it has so much functionality,
+
+00:05:06.880 --> 00:05:09.679
+very large and rich architecture.
+
+00:05:09.680 --> 00:05:13.639
+But what we do is teach people one piece at a time.
+
+00:05:13.640 --> 00:05:17.919
+So just to continue on that a little bit,
+
+00:05:17.920 --> 00:05:19.639
+implicit buttons are buttons
+
+00:05:19.640 --> 00:05:23.359
+that exist just from the text pattern in the buffer.
+
+00:05:23.360 --> 00:05:28.279
+So you saw an example of changing Lisp into implicit buttons right there.
+
+00:05:28.280 --> 00:05:30.959
+I could do keystrokes.
+
+00:05:30.960 --> 00:05:33.119
+I can just type them out in my buffer
+
+00:05:33.120 --> 00:05:34.879
+and surround them with braces.
+
+00:05:34.880 --> 00:05:37.439
+So here's something, let's see,
+
+00:05:37.440 --> 00:05:41.079
+this is actually a command in the K Outliner
+
+00:05:41.080 --> 00:05:45.799
+to jump to the cell numbered four. So let's just do that.
+
+00:05:45.800 --> 00:05:47.599
+And it took me right there, right?
+
+00:05:47.600 --> 00:05:51.759
+So I'm just pressing made a return to activate these buttons.
+
+00:05:51.760 --> 00:05:56.279
+Similarly, any sort of, this is a complex example,
+
+00:05:56.280 --> 00:05:59.479
+but any path name I can surround with double quotes,
+
+00:05:59.480 --> 00:06:01.079
+and it's a live hyper button.
+
+00:06:01.080 --> 00:06:05.479
+In this case, I want to jump to a path name called readme.md,
+
+00:06:05.480 --> 00:06:08.359
+but it's in a directory that's specified
+
+00:06:08.360 --> 00:06:13.519
+by an actual list variable. And then I want to go directly
+
+00:06:13.520 --> 00:06:17.479
+to a headline within that file called hyperbole manual.
+
+00:06:17.480 --> 00:06:19.759
+And within that headline, I wanna go
+
+00:06:19.760 --> 00:06:22.719
+to the eighth line relative to that.
+
+00:06:22.720 --> 00:06:24.879
+So all I have to do, made a return again,
+
+00:06:24.880 --> 00:06:28.959
+and boom, I'm in that, I'm directly linked to that.
+
+00:06:28.960 --> 00:06:33.799
+And Hyperbole has ways that you can just split your windows like this
+
+00:06:33.800 --> 00:06:38.079
+and create that reference in the source buffer right there.
+
+00:06:38.080 --> 00:06:41.999
+You just press a few keys and it'll embed that link.
+
+00:06:42.000 --> 00:06:43.839
+We'll see that a little later.
+
+00:06:43.840 --> 00:06:47.319
+Another example, so all of these buttons,
+
+00:06:47.320 --> 00:06:49.599
+if I just show you here,
+
+00:06:49.600 --> 00:06:52.279
+you can press Control-H, Capital-A anytime.
+
+00:06:52.280 --> 00:06:54.319
+and it will show you exactly
+
+00:06:54.320 --> 00:06:56.559
+what made a return will do in that context.
+
+00:06:56.560 --> 00:06:59.479
+In this case, it's an implicit button,
+
+00:06:59.480 --> 00:07:03.119
+and it shows you even where the button starts and ends,
+
+00:07:03.120 --> 00:07:06.679
+what type of action it will run,
+
+00:07:06.680 --> 00:07:08.039
+it's a link to a file line,
+
+00:07:08.040 --> 00:07:09.999
+and then what arguments it takes.
+
+00:07:10.000 --> 00:07:13.999
+So Hyperbole extracts all this meta information
+
+00:07:14.000 --> 00:07:16.679
+just from the text in your buffer
+
+00:07:16.680 --> 00:07:19.119
+and displays it to you conveniently
+
+00:07:19.120 --> 00:07:22.319
+so you can know before you ever touch a hyper button
+
+00:07:22.320 --> 00:07:24.479
+if it will do something that you want it to do.
+
+00:07:24.480 --> 00:07:28.559
+Here we have a fairly advanced button
+
+00:07:28.560 --> 00:07:31.519
+that's very simple to do. You just specify a bug in Emacs
+
+00:07:31.520 --> 00:07:34.279
+that you want to reference to.
+
+00:07:34.280 --> 00:07:40.039
+Notice no delimiters, just bug pound, whatever, made a return.
+
+00:07:40.040 --> 00:07:45.479
+And I'm in GNU's reading the conversation for that bug.
+
+00:07:45.480 --> 00:07:48.719
+And I can just, you know, move
+
+00:07:48.720 --> 00:07:50.919
+through all the conversation.
+
+00:07:50.920 --> 00:07:56.039
+I can quit out of there and go back to where I was.
+
+00:07:56.040 --> 00:07:59.599
+So very, very easy to use these implicit buttons
+
+00:07:59.600 --> 00:08:00.879
+because they're already there
+
+00:08:00.880 --> 00:08:03.679
+throughout your Emacs buffers.
+
+00:08:03.680 --> 00:08:06.119
+I described the control HA, what that does.
+
+00:08:06.120 --> 00:08:09.359
+And there's other types of buttons
+
+00:08:09.360 --> 00:08:11.559
+that we can get into as questions go on,
+
+00:08:11.560 --> 00:08:14.719
+but you can create your own explicit buttons
+
+00:08:14.720 --> 00:08:18.719
+that have a little slightly different delimiter than you see
+
+00:08:18.720 --> 00:08:19.799
+in the implicit buttons.
+
+00:08:19.800 --> 00:08:24.759
+And this one I just put in here to show you that
+
+00:08:24.760 --> 00:08:30.439
+If you use it and you go, this is the hyperbole to do list,
+
+00:08:30.440 --> 00:08:31.879
+which is an org buffer.
+
+00:08:31.880 --> 00:08:35.079
+But I wanted to show in here that similarly,
+
+00:08:35.080 --> 00:08:37.799
+we have implicit buttons for to do's in the work.
+
+00:08:37.800 --> 00:08:39.679
+And when we hit made a return,
+
+00:08:39.680 --> 00:08:42.679
+it just changes the state of that to do.
+
+00:08:42.680 --> 00:08:44.919
+And I can cycle through those
+
+00:08:44.920 --> 00:08:47.399
+but even better with the prefix argument
+
+00:08:47.400 --> 00:08:50.399
+if I have multiple sequences of to do's
+
+00:08:50.400 --> 00:08:53.519
+because there's Bob and Matt's that maintain hyperbole
+
+00:08:53.520 --> 00:08:55.999
+so I can shift to Bob's to do's
+
+00:08:56.000 --> 00:08:57.759
+with control you made a return
+
+00:08:57.760 --> 00:09:00.079
+and then cycle through the states for me
+
+00:09:00.080 --> 00:09:05.039
+So very very easy to use,
+
+00:09:05.040 --> 00:09:08.319
+you know something that's a little bit more difficult to do
+
+00:09:08.320 --> 00:09:16.239
+I think in org without it and So that's an explicit button
+
+00:09:16.240 --> 00:09:19.479
+where I had to actually say I want to create this button,
+
+00:09:19.480 --> 00:09:21.599
+and I had to specify what type it is.
+
+00:09:21.600 --> 00:09:23.759
+If I show you the information there again,
+
+00:09:23.760 --> 00:09:25.879
+you see it has a little different type
+
+00:09:25.880 --> 00:09:29.679
+called a keyboard key, which runs just the key sequence.
+
+00:09:29.680 --> 00:09:34.759
+So you're starting to see already
+
+00:09:34.760 --> 00:09:36.839
+that explicit buttons have a type
+
+00:09:36.840 --> 00:09:38.159
+that's connected to an action
+
+00:09:38.160 --> 00:09:41.199
+that an implicit button can do as well.
+
+00:09:41.200 --> 00:09:42.959
+So all of this ties back together.
+
+00:09:42.960 --> 00:09:47.079
+And finally, there's a homepage that Hyperbole has,
+
+00:09:47.080 --> 00:09:49.159
+a personal homepage that you have.
+
+00:09:49.160 --> 00:09:52.999
+You hit Control-H-H, which is our mini-buffer menu,
+
+00:09:53.000 --> 00:09:58.319
+and then you hit what is it, B for button file
+
+00:09:58.320 --> 00:10:01.439
+and then P for personal file.
+
+00:10:01.440 --> 00:10:05.239
+And that just brings you to basically a set of links
+
+00:10:05.240 --> 00:10:10.199
+that you can create buttons in any format you want.
+
+00:10:10.200 --> 00:10:12.479
+There's no structure that you see here.
+
+00:10:12.480 --> 00:10:18.759
+But the nice thing is that all of these buttons that have these names, as we call them,
+
+00:10:18.760 --> 00:10:20.279
+with the delimiters here,
+
+00:10:20.280 --> 00:10:23.799
+can be referenced now as what we call global buttons
+
+00:10:23.800 --> 00:10:28.239
+wherever you are in Emacs. So I'm in a separate buffer here
+
+00:10:28.240 --> 00:10:30.719
+and say I want to jump to that to-do button
+
+00:10:30.720 --> 00:10:33.279
+that's labeled TD on line 10 down there.
+
+00:10:33.280 --> 00:10:35.519
+No matter what I have on screen,
+
+00:10:35.520 --> 00:10:39.199
+I can hit control H, H, G for global button,
+
+00:10:39.200 --> 00:10:43.719
+A for activate, and then it gives me a list of those.
+
+00:10:43.720 --> 00:10:47.119
+So I know it's TD, I just put TD in.
+
+00:10:47.120 --> 00:10:52.159
+Okay, that's a path link problem I have,
+
+00:10:52.160 --> 00:10:56.359
+but when I fix the link, it would go to it.
+
+00:10:56.360 --> 00:10:58.239
+So you can create buttons
+
+00:10:58.240 --> 00:11:01.639
+that you can access in any mode, anywhere,
+
+00:11:01.640 --> 00:11:05.799
+and just give them quick names, and it's very easy.
+
+00:11:05.800 --> 00:11:08.559
+So that kind of gives you an idea
+
+00:11:08.560 --> 00:11:11.719
+of how you can get very productive
+
+00:11:11.720 --> 00:11:14.999
+with hyperbole with just a few simple techniques.
+
+00:11:15.000 --> 00:11:30.439
+You still there Sacha? Yep, I'm still here.
+
+00:11:30.440 --> 00:11:37.079
+I have too many tabs.
+
+00:11:37.080 --> 00:11:46.199
+So the question is, I've been using activities.el
+
+00:11:46.200 --> 00:11:48.879
+and bufferload to save dedicated workplaces,
+
+00:11:48.880 --> 00:11:52.159
+open buffers, and decisions in tabs and frames
+
+00:11:52.160 --> 00:11:54.599
+for tasks and projects across the next sessions.
+
+00:11:54.600 --> 00:12:00.119
+Can I do something similar with Hyper-V? Yes, you can.
+
+00:12:00.120 --> 00:12:03.719
+And activities is a nice package from alphapapa.
+
+00:12:03.720 --> 00:12:07.399
+We've actually been working with it lately.
+
+00:12:07.400 --> 00:12:11.159
+So we're probably in the next month or so
+
+00:12:11.160 --> 00:12:13.479
+we'll have a specific integration
+
+00:12:13.480 --> 00:12:15.999
+to activities built into Hyperbole.
+
+00:12:16.000 --> 00:12:21.519
+But right now, we don't. But of course, you can call
+
+00:12:21.520 --> 00:12:23.279
+any of its functions or key bindings
+
+00:12:23.280 --> 00:12:26.079
+using the techniques that I just showed you earlier.
+
+00:12:26.080 --> 00:12:33.599
+But what we do have built in if you go to the menu again.
+
+00:12:33.600 --> 00:12:35.959
+and you see control HH,
+
+00:12:35.960 --> 00:12:43.039
+and then there's a W, Windows, WinConfig menu,
+
+00:12:43.040 --> 00:12:48.399
+and there's two types of window configurations that you can save here.
+
+00:12:48.400 --> 00:12:52.599
+They are, right now, they're per Emacs session.
+
+00:12:52.600 --> 00:12:55.759
+They're not stored beyond that,
+
+00:12:55.760 --> 00:12:58.519
+but we'll probably add that in as well,
+
+00:12:58.520 --> 00:12:59.879
+or we'll use activities for that.
+
+00:12:59.880 --> 00:13:07.199
+so the two types are you can either just save a window configuration in a frame
+
+00:13:07.200 --> 00:13:10.319
+to actually it stores the frame configuration
+
+00:13:10.320 --> 00:13:13.359
+to a ring just like the kill ring
+
+00:13:13.360 --> 00:13:16.119
+so you have the three commands at the right
+
+00:13:16.120 --> 00:13:21.239
+you can save with an s you can pop one off the ring with p
+
+00:13:21.240 --> 00:13:25.959
+or you can just yank and keep cycling through with a y
+
+00:13:25.960 --> 00:13:31.119
+and it will restore the frame configuration that you saved.
+
+00:13:31.120 --> 00:13:35.079
+Similarly you can just do it by name
+
+00:13:35.080 --> 00:13:36.839
+and you can say I want to add a name
+
+00:13:36.840 --> 00:13:45.799
+and then you know just give it a name again win win C and store it and it stores it there
+
+00:13:45.800 --> 00:13:48.559
+and then you can get back to it by name as well.
+
+00:13:48.560 --> 00:13:51.319
+So fairly fairly easy to use as well
+
+00:13:51.320 --> 00:13:54.999
+and again integrated in the same simple menu system.
+
+00:13:55.000 --> 00:13:57.079
+So thanks for that question.
+
+00:13:57.080 --> 00:14:07.119
+Should I just go to the next question?
+
+00:14:07.120 --> 00:14:10.079
+How well do hyperbole and org mode work together?
+
+00:14:10.080 --> 00:14:12.759
+Is there any kind of integration?
+
+00:14:12.760 --> 00:14:18.079
+Yes, in fact, that's really good.
+
+00:14:18.080 --> 00:14:22.359
+I'll just mention something. Let me go back to my homepage.
+
+00:14:22.360 --> 00:14:26.679
+I just stored that here. So we gave a talk at an earlier
+
+00:14:26.680 --> 00:14:31.559
+Emacs conference right here on org
+
+00:14:31.560 --> 00:14:33.199
+and hyperbole integration.
+
+00:14:33.200 --> 00:14:35.919
+So that's a good one to go back to.
+
+00:14:35.920 --> 00:14:39.479
+And I believe it's in this files
+
+00:14:39.480 --> 00:14:41.599
+included with hyperbole as well.
+
+00:14:41.600 --> 00:14:45.079
+So you can learn various techniques
+
+00:14:45.080 --> 00:14:48.199
+of how the action key helps you in org.
+
+00:14:48.200 --> 00:14:51.679
+It does special things in tables.
+
+00:14:51.680 --> 00:15:00.239
+And there's some nice support for, for example, working with code blocks.
+
+00:15:00.240 --> 00:15:02.639
+Let me see where that is. Okay, so right back here.
+
+00:15:02.640 --> 00:15:09.759
+So you can run them with the action key.
+
+00:15:09.760 --> 00:15:15.039
+You can refresh the output and do things like that.
+
+00:15:15.040 --> 00:15:17.559
+So again, if I just hit Control-H-A,
+
+00:15:17.560 --> 00:15:20.439
+it'll tell me that it's in SmartOrg,
+
+00:15:20.440 --> 00:15:24.359
+and it'll give me all the different contexts that that operates within.
+
+00:15:24.360 --> 00:15:26.559
+So there's a lot that it does in here.
+
+00:15:26.560 --> 00:15:30.479
+And you can see it would point on the dir value of a code block definition
+
+00:15:30.480 --> 00:15:33.559
+that will actually display a summary
+
+00:15:33.560 --> 00:15:35.199
+and all sorts of functionality.
+
+00:15:35.200 --> 00:15:37.439
+So the integration is quite tight.
+
+00:15:37.440 --> 00:15:39.679
+And one of the things we do
+
+00:15:39.680 --> 00:15:41.799
+since made return is used in org,
+
+00:15:41.800 --> 00:15:44.719
+we have a customization setting, C even O.
+
+00:15:44.720 --> 00:15:48.239
+And you have these three settings where you can say,
+
+00:15:48.240 --> 00:15:53.359
+I want me to return to, I want hyperbole to control that
+
+00:15:53.360 --> 00:15:57.279
+and everything that the action key does I want to happen.
+
+00:15:57.280 --> 00:16:00.479
+Or I only want hyperbole to control
+
+00:16:00.480 --> 00:16:03.239
+when I'm over a hyperbole implicit explicit button.
+
+00:16:03.240 --> 00:16:09.159
+Or I want org to control that key and never use hyperbole.
+
+00:16:09.160 --> 00:16:10.799
+So you just set that once,
+
+00:16:10.800 --> 00:16:13.919
+it's persistent across sessions and you're good to go.
+
+00:16:13.920 --> 00:16:16.399
+And again, it's built right into the menus.
+
+00:16:16.400 --> 00:16:23.919
+So but even following that we've the latest addition to hyperbole is Something
+
+00:16:23.920 --> 00:16:25.799
+and this is the first time
+
+00:16:25.800 --> 00:16:29.799
+we're really showing it publicly is the high wiki
+
+00:16:29.800 --> 00:16:33.559
+Which is a new subsystem as we call it
+
+00:16:33.560 --> 00:16:44.719
+and this is I think the best wiki capability in Emacs now what it does is it automatically highlights
+
+00:16:44.720 --> 00:16:48.119
+let me turn it on I have to turn on high wiki mode
+
+00:16:48.120 --> 00:16:54.679
+and you see those wiki words now got highlighted so any any wiki word
+
+00:16:54.680 --> 00:16:58.839
+which is the capitalized alpha word you know
+
+00:16:58.840 --> 00:17:01.439
+so you can have multiple capitals in there
+
+00:17:01.440 --> 00:17:06.039
+and I'll get recognized can be used as a wiki word
+
+00:17:06.040 --> 00:17:09.519
+so for example when I just type hi wiki here
+
+00:17:09.520 --> 00:17:11.559
+it automatically recognizes it,
+
+00:17:11.560 --> 00:17:14.239
+and you see it turned it into a hyperlink button,
+
+00:17:14.240 --> 00:17:18.159
+which again, Control-H-A will tell me exactly what it does there.
+
+00:17:18.160 --> 00:17:23.119
+But I can just hit the action key, made a return,
+
+00:17:23.120 --> 00:17:26.879
+and it'll display my hiwiki.org file.
+
+00:17:26.880 --> 00:17:30.559
+All wiki pages are org files.
+
+00:17:30.560 --> 00:17:35.679
+So we're using that for the wikis, and you have
+
+00:17:35.680 --> 00:17:40.359
+You can export an entire wiki
+
+00:17:40.360 --> 00:17:43.159
+using essentially the org export capability
+
+00:17:43.160 --> 00:17:48.599
+With a little extra set of features that we've added in
+
+00:17:48.600 --> 00:17:51.199
+but let's say even better you see
+
+00:17:51.200 --> 00:17:54.119
+I have this heading here so let me just change this
+
+00:17:54.120 --> 00:17:59.239
+you go back here and I'll say go to heading
+
+00:17:59.240 --> 00:18:01.039
+so you just put a pound on it
+
+00:18:01.040 --> 00:18:05.679
+and now that whole thing is a reference to a specific org section.
+
+00:18:05.680 --> 00:18:08.439
+Notice there's no org IDs here.
+
+00:18:08.440 --> 00:18:11.639
+There's nothing other than the text that you're seeing.
+
+00:18:11.640 --> 00:18:13.439
+There's not even a delimiter.
+
+00:18:13.440 --> 00:18:17.839
+So we have automatic implicit hyper buttons
+
+00:18:17.840 --> 00:18:20.679
+being added in any buffer.
+
+00:18:20.680 --> 00:18:23.959
+Could be a comment in a programming buffer with all you
+
+00:18:23.960 --> 00:18:26.599
+You don't have to add anything.
+
+00:18:26.600 --> 00:18:31.999
+I'll show you how to create a new page in a minute.
+
+00:18:32.000 --> 00:18:35.959
+But you see I can link to any org section without any IDs.
+
+00:18:35.960 --> 00:18:38.799
+And then I can also do like org-roam does,
+
+00:18:38.800 --> 00:18:42.039
+but without the indexing or database that it requires.
+
+00:18:42.040 --> 00:18:46.839
+I can scan over all of my wiki files and headings.
+
+00:18:46.840 --> 00:18:48.759
+find a match really quickly.
+
+00:18:48.760 --> 00:18:53.279
+So we can get into some of that a little later as well.
+
+00:18:53.280 --> 00:18:55.759
+But, you know, very convenient.
+
+00:18:55.760 --> 00:18:58.439
+There's nothing that you change on org to do this.
+
+00:18:58.440 --> 00:19:00.879
+So how do I create a wiki word?
+
+00:19:00.880 --> 00:19:07.359
+Well, let's say I wanted, you know, wiki word for me.
+
+00:19:07.360 --> 00:19:09.999
+So that's already, that was a wiki word,
+
+00:19:10.000 --> 00:19:12.959
+but now this is a new one. So you see it doesn't highlight
+
+00:19:12.960 --> 00:19:16.559
+because I haven't created a wiki page yet.
+
+00:19:16.560 --> 00:19:20.319
+So all I hit is the action key, and boom.
+
+00:19:20.320 --> 00:19:23.519
+Now it created it as a new wiki word.
+
+00:19:23.520 --> 00:19:24.879
+It created the .org file.
+
+00:19:24.880 --> 00:19:28.279
+If I don't edit this file, it won't save it,
+
+00:19:28.280 --> 00:19:32.359
+and it'll not become a word in case you made an accident.
+
+00:19:32.360 --> 00:19:34.319
+But let's just say I want to say it.
+
+00:19:34.320 --> 00:19:39.159
+So, you know, heading. That's it. I'm just in org mode.
+
+00:19:39.160 --> 00:19:42.879
+Now anytime that high wiki mode is active,
+
+00:19:42.880 --> 00:19:46.239
+in any buffer essentially,
+
+00:19:46.240 --> 00:19:50.279
+I can type that out and it'll recognize it.
+
+00:19:50.280 --> 00:19:53.039
+Notice so that's not a wiki word.
+
+00:19:53.040 --> 00:19:55.279
+So it's highlighting and it's unhighlighting
+
+00:19:55.280 --> 00:19:56.599
+right as I type.
+
+00:19:56.600 --> 00:20:03.199
+So, again, you can embed these as org links in org.
+
+00:20:03.200 --> 00:20:09.439
+There's a special format like this, HiWiki word
+
+00:20:09.440 --> 00:20:11.239
+that you can make an org link
+
+00:20:11.240 --> 00:20:13.479
+if I was in org mode, just like that.
+
+00:20:13.480 --> 00:20:16.599
+So there's all sorts of compatibility,
+
+00:20:16.600 --> 00:20:18.319
+but basically it's just words,
+
+00:20:18.320 --> 00:20:21.119
+and HiWiki takes care of the rest for you.
+
+00:20:21.120 --> 00:20:26.679
+So there's a directory where all these, it's HiWiki,
+
+00:20:26.680 --> 00:20:28.879
+hi wiki tilde slash
+
+00:20:28.880 --> 00:20:32.719
+hi wiki is the default place where all these would be found
+
+00:20:32.720 --> 00:20:36.359
+and there's a menu now in hyperbole for hi wiki h
+
+00:20:36.360 --> 00:20:40.639
+and you can see it has a lot of capabilities
+
+00:20:40.640 --> 00:20:44.359
+but i can say b go into the directory of all the files
+
+00:20:44.360 --> 00:20:47.799
+just pull them up and any of these you'll see
+
+00:20:47.800 --> 00:20:59.959
+let me give you one like this me okay so you can see the other wiki words being highlighted in here
+
+00:20:59.960 --> 00:21:04.039
+so it's very fast to this there's almost no delay for anything
+
+00:21:04.040 --> 00:21:14.679
+and yet very flexible and you have this ability you know where you could type emacs section dash 1 dash 2
+
+00:21:14.680 --> 00:21:16.759
+and If you didn't have delimiters around it,
+
+00:21:16.760 --> 00:21:18.479
+but you can put any delimiters
+
+00:21:18.480 --> 00:21:20.839
+like double quotes or parentheses,
+
+00:21:20.840 --> 00:21:25.159
+and then it'll match without you having to change the header at all
+
+00:21:25.160 --> 00:21:28.439
+with the spaces included and all of those.
+
+00:21:28.440 --> 00:21:31.919
+know will get recognized.
+
+00:21:31.920 --> 00:21:35.599
+I don't know if this if the section exists right there.
+
+00:21:35.600 --> 00:21:41.959
+So anyway a lot of capability you can see that here where I did the high
+
+00:21:41.960 --> 00:21:45.519
+it actually highlights as an org link
+
+00:21:45.520 --> 00:21:46.839
+because it is an org link
+
+00:21:46.840 --> 00:21:50.319
+and it'll operate just like any other org link
+
+00:21:50.320 --> 00:21:54.279
+even though it's a high wiki word link as well.
+
+00:21:54.280 --> 00:21:55.759
+So very powerful stuff
+
+00:21:55.760 --> 00:22:00.959
+and totally integrated with Org Mode throughout.
+
+00:22:00.960 --> 00:22:06.439
+Great. There's another question.
+
+00:22:06.440 --> 00:22:09.039
+Are there any talks from this year's Emacs Conf
+
+00:22:09.040 --> 00:22:12.599
+that discuss things that would work well with Hyperbole?
+
+00:22:12.600 --> 00:22:19.279
+No. Unfortunately, I had to work yesterday, so I haven't...
+
+00:22:19.280 --> 00:22:22.639
+been following the conference as much as I do.
+
+00:22:22.640 --> 00:22:25.559
+Maybe somebody else could comment on that.
+
+00:22:25.560 --> 00:22:29.519
+But I think, you know, again,
+
+00:22:29.520 --> 00:22:31.879
+it's like pick your favorite mode,
+
+00:22:31.880 --> 00:22:34.719
+pick your favorite type of information.
+
+00:22:34.720 --> 00:22:36.839
+Can I hyperbole work with that?
+
+00:22:36.840 --> 00:22:39.999
+You know, the answer is almost always yes.
+
+00:22:40.000 --> 00:22:44.959
+So, you know, if I show you just a little bit,
+
+00:22:44.960 --> 00:22:48.679
+if I show you some of these implicit button types,
+
+00:22:48.680 --> 00:22:53.359
+just so you know the amount of code
+
+00:22:53.360 --> 00:22:56.279
+involved to create a type.
+
+00:22:56.280 --> 00:22:59.679
+So here's like a male, recognizing
+
+00:22:59.680 --> 00:23:01.639
+an email address as a button.
+
+00:23:01.640 --> 00:23:05.519
+It's a little long so that it creates a lot of things
+
+00:23:05.520 --> 00:23:09.199
+but you know it's less than 15 lines of code for that.
+
+00:23:09.200 --> 00:23:12.199
+Path names are complicated so that's a longer one
+
+00:23:12.200 --> 00:23:18.799
+but let's look at so here's one recognizing a bibliography entry.
+
+00:23:18.800 --> 00:23:24.879
+So it can be between two and 20 lines of code
+
+00:23:24.880 --> 00:23:27.519
+to create an entirely new button type.
+
+00:23:27.520 --> 00:23:32.159
+And you create it once, and you just add it to the set of types,
+
+00:23:32.160 --> 00:23:35.479
+just like at the fun, except it's done with this macro
+
+00:23:35.480 --> 00:23:39.479
+called def, implicit button type, and defib.
+
+00:23:39.480 --> 00:23:45.559
+And it's part of your hyperlinking system forever then.
+
+00:23:45.560 --> 00:23:49.799
+So say you got dumped with 5,000 documents
+
+00:23:49.800 --> 00:23:51.519
+that were in this weird text format,
+
+00:23:51.520 --> 00:23:54.119
+and they all had cross-references among them,
+
+00:23:54.120 --> 00:23:56.792
+but it was, again, using a weird format.
+
+00:23:56.760 --> 00:23:59.919
+You could just write your own little type for that,
+
+00:23:59.920 --> 00:24:04.319
+and then those 5,000 documents are hyperlinked for you
+
+00:24:04.320 --> 00:24:08.759
+every time you're browsing them in Emacs automatically.
+
+00:24:08.760 --> 00:24:11.959
+So we do that all the time, create small things,
+
+00:24:11.960 --> 00:24:15.159
+but all of these are built into Hyperbole.
+
+00:24:15.160 --> 00:24:20.199
+Markdown links, tech info links, all of that's automatic.
+
+00:24:20.200 --> 00:24:26.199
+I could even be in a shell mode, and I just say ls,
+
+00:24:26.200 --> 00:24:30.519
+and these are hyperlinks that Hyperbole understands, right?
+
+00:24:30.520 --> 00:24:31.759
+It just jumps right to the file.
+
+00:24:31.760 --> 00:24:36.999
+So grep-n, You know, looking at any line numbers,
+
+00:24:37.000 --> 00:24:39.839
+you don't have to remember
+
+00:24:39.840 --> 00:24:41.959
+all these different commands anymore.
+
+00:24:41.960 --> 00:24:44.319
+You just hit made a return,
+
+00:24:44.320 --> 00:24:46.599
+and Hyperbole does the right thing
+
+00:24:46.600 --> 00:24:48.359
+in all these different contexts,
+
+00:24:48.360 --> 00:24:52.639
+including following cross-references in code.
+
+00:24:52.640 --> 00:24:56.079
+So I would say that's your answer.
+
+00:24:56.080 --> 00:24:58.399
+Most things that people are talking about,
+
+00:24:58.400 --> 00:25:02.199
+we've already probably integrated with Hyperbole
+
+00:25:02.200 --> 00:25:04.639
+or with a little bit of custom coding.
+
+00:25:04.640 --> 00:25:11.199
+You can do it. I think that's the end of the etherpad questions for now,
+
+00:25:11.200 --> 00:25:12.919
+but I see a number of people in the room,
+
+00:25:12.920 --> 00:25:15.439
+so you can continue the conversation.
+
+00:25:15.440 --> 00:25:18.719
+We'll be on the stream for another five minutes or so,
+
+00:25:18.720 --> 00:25:22.319
+but yes, please go ahead. Great. Yeah.
+
+00:25:22.320 --> 00:25:27.639
+I mean, people, does everybody have, can talk on the conference?
+
+00:25:27.640 --> 00:25:31.439
+I was expecting to just talk with people here.
+
+00:25:31.440 --> 00:25:40.799
+Let's see. Yeah. Can anybody say anything here?
+
+00:25:40.800 --> 00:25:52.039
+Hi, Bob. I can say something. Hey, Matt. Hi. Yeah.
+
+00:25:52.040 --> 00:25:55.199
+Maybe you want to bring up a topic.
+
+00:25:55.200 --> 00:25:56.839
+I think I... Yes. Sorry, Bob.
+
+00:25:56.840 --> 00:26:05.839
+I think I saw a question here on IOC. It was like this.
+
+00:26:05.840 --> 00:26:08.599
+Interesting, but the many different link formats
+
+00:26:08.600 --> 00:26:11.279
+makes reading and analyzing my notes
+
+00:26:11.280 --> 00:26:14.959
+much harder and less usable outside Emacs.
+
+00:26:14.960 --> 00:26:18.759
+I don't know if you have some comment on that.
+
+00:26:18.760 --> 00:26:22.319
+Well, I mean, the different formats that you're saying,
+
+00:26:22.320 --> 00:26:24.839
+like angle brackets or curly braces,
+
+00:26:24.840 --> 00:26:31.319
+are just so that you can utilize many different types.
+
+00:26:31.320 --> 00:26:35.599
+of buttons, but if you just want to use key sequences,
+
+00:26:35.600 --> 00:26:37.759
+there's only one markup format.
+
+00:26:37.760 --> 00:26:41.599
+With org, you've got the square brackets,
+
+00:26:41.600 --> 00:26:44.919
+which are consistent, but in order to have different types,
+
+00:26:44.920 --> 00:26:47.279
+you have to type a prefix name,
+
+00:26:47.280 --> 00:26:53.279
+like you see the HY for the High Wiki buttons in org mode.
+
+00:26:53.280 --> 00:26:56.999
+So I think the trade-off is pretty much the same,
+
+00:26:57.000 --> 00:27:02.239
+but Hyperbole always, always works
+
+00:27:02.240 --> 00:27:04.559
+to minimize the amount of markup.
+
+00:27:04.560 --> 00:27:07.439
+Markdown is pretty simple. A lot of people like that.
+
+00:27:07.440 --> 00:27:10.759
+But I think you'll find in hyperbole texts,
+
+00:27:10.760 --> 00:27:15.479
+they read just like regular language.
+
+00:27:15.480 --> 00:27:19.599
+I mean, the delimiters are fairly invisible.
+
+00:27:19.600 --> 00:27:23.039
+So I'm not sure what the issue is there.
+
+00:27:23.040 --> 00:27:24.919
+And again, you can choose your own.
+
+00:27:24.920 --> 00:27:27.639
+You can make your own types with your own delimiters.
+
+00:27:27.640 --> 00:27:31.359
+There's even a custom macro
+
+00:27:31.360 --> 00:27:33.399
+that instead of using that defib
+
+00:27:33.400 --> 00:27:35.559
+where you have to type out list code,
+
+00:27:35.560 --> 00:27:37.519
+you can use regular expressions.
+
+00:27:37.520 --> 00:27:41.239
+And in one line, you can define your own type of button
+
+00:27:41.240 --> 00:27:42.919
+with its own delimiters.
+
+00:27:42.920 --> 00:27:47.879
+So, you know, depending on what works well for your eyes,
+
+00:27:47.880 --> 00:27:51.359
+you can make Hyperbole adapt quite well to that.
+
+00:27:51.360 --> 00:27:54.319
+And again, if you start using the HiWiki,
+
+00:27:54.320 --> 00:27:57.479
+there's literally zero markup on that.
+
+00:27:57.480 --> 00:27:59.599
+So you're just reading text,
+
+00:27:59.600 --> 00:28:01.759
+and when you want something hyperlinked,
+
+00:28:01.760 --> 00:28:04.599
+it's like a glossary or a dictionary entry.
+
+00:28:04.600 --> 00:28:09.599
+It's just there, and it's just highlighted in the text.
+
+00:28:09.600 --> 00:28:17.479
+So I don't see much barrier to using it with many different types of documents.
+
+00:28:17.480 --> 00:28:23.319
+Let me go back to the Emacs here.
+
+00:28:23.320 --> 00:28:27.039
+If there are any other questions.
+
+00:28:27.040 --> 00:28:36.639
+Let me see. Let me go back to that. This K outline here.
+
+00:28:36.640 --> 00:28:38.719
+So we covered HiWiki.
+
+00:28:38.720 --> 00:28:42.999
+We're in the, I'll just show you some things
+
+00:28:43.000 --> 00:28:44.039
+that we wanted to highlight
+
+00:28:44.040 --> 00:28:46.279
+if people didn't have specific questions.
+
+00:28:46.280 --> 00:28:48.879
+But feel free to jump in anytime
+
+00:28:48.880 --> 00:28:51.399
+if you want to ask something.
+
+00:28:51.400 --> 00:28:57.039
+So what we're looking at here is a K Outliner document.
+
+00:28:57.040 --> 00:29:00.399
+There's, you know, hyperbole is pretty well documented.
+
+00:29:00.400 --> 00:29:04.719
+There's a large manual. There's interactive.
+
+00:29:04.720 --> 00:29:09.319
+demos of it and there are videos as well
+
+00:29:09.320 --> 00:29:12.079
+but the K Outliner is unique in Emacs
+
+00:29:12.080 --> 00:29:17.439
+because it it can do like full legal auto numbering you
+
+00:29:17.440 --> 00:29:21.399
+just say I want to create a new headline
+
+00:29:21.400 --> 00:29:23.919
+and you can see or I could create four
+
+00:29:23.920 --> 00:29:26.679
+I could say I want to create three more of these
+
+00:29:26.680 --> 00:29:29.239
+and I can do it all at once with one key
+
+00:29:29.240 --> 00:29:33.679
+I can then just tab to make sublevels here
+
+00:29:33.680 --> 00:29:40.319
+and you see this is using a specific outline format that we have
+
+00:29:40.320 --> 00:29:43.919
+but if we do dot in the view specs here
+
+00:29:43.920 --> 00:29:48.239
+it changes to legal outlining so it's really that simple
+
+00:29:48.240 --> 00:29:51.399
+and all of these numbers are automatically maintained
+
+00:29:51.400 --> 00:29:56.639
+as I move stuff around I can use like org mode alt arrow keys
+
+00:29:56.640 --> 00:30:00.119
+to like move things up and down, right?
+
+00:30:00.120 --> 00:30:00.839
+And just move them around.
+
+00:30:00.840 --> 00:30:04.719
+And when I run out, you know, when it can't go any higher,
+
+00:30:04.720 --> 00:30:06.039
+it gives me an error.
+
+00:30:06.040 --> 00:30:11.079
+And then it's just free form typing here with auto-wrapping.
+
+00:30:11.080 --> 00:30:13.759
+The nice thing is that there's,
+
+00:30:13.760 --> 00:30:17.359
+there's actually these hidden,
+
+00:30:17.360 --> 00:30:22.519
+let's get, hidden what are called ID stamps.
+
+00:30:22.520 --> 00:30:24.919
+So these are permanent hyperlink anchors
+
+00:30:24.920 --> 00:30:26.719
+that are assigned to each cell.
+
+00:30:26.720 --> 00:30:29.679
+So as this cell moves in the outline,
+
+00:30:29.680 --> 00:30:32.679
+you notice that this 29 didn't change.
+
+00:30:32.680 --> 00:30:37.439
+So you can move and all those other auto numbers shift
+
+00:30:37.440 --> 00:30:40.359
+to represent the actual outline structure.
+
+00:30:40.360 --> 00:30:44.079
+But this ID stamp of 29 stays the same.
+
+00:30:44.080 --> 00:30:47.679
+So you can embed that in links and say,
+
+00:30:47.680 --> 00:30:51.719
+I want to link to cell 29.
+
+00:30:51.720 --> 00:30:55.999
+If I go, let me just go to the K Outliner example.
+
+00:30:56.000 --> 00:30:59.039
+And I'll show you one of those, which is really cool.
+
+00:30:59.040 --> 00:31:02.599
+Because what you can do is say, I want to link
+
+00:31:02.600 --> 00:31:06.999
+Let me find that. It's down here somewhere.
+
+00:31:07.000 --> 00:31:12.199
+I think there's 3A. Where was it? Yeah, okay.
+
+00:31:12.200 --> 00:31:16.479
+So see right here, this is an internal link
+
+00:31:16.480 --> 00:31:21.200
+with just the pound and then the relative ID, as we call it, 3B.
+
+00:31:21.200 --> 00:31:25.719
+But of course, somebody may have moved 3B in the outline.
+
+00:31:25.720 --> 00:31:27.919
+So when Hyperbole inserts a link,
+
+00:31:27.920 --> 00:31:32.039
+it puts this equal with the ID stamp in it automatically.
+
+00:31:32.040 --> 00:31:35.839
+So if what'll happen is when I reference this,
+
+00:31:35.840 --> 00:31:37.639
+okay, it's still the same.
+
+00:31:37.640 --> 00:31:40.959
+But if it had changed, it would update this link
+
+00:31:40.960 --> 00:31:44.759
+and would change the 3B to say it was 3D now
+
+00:31:44.760 --> 00:31:50.519
+based on this permalink, the 08 that's hidden away in here.
+
+00:31:50.520 --> 00:31:52.439
+So you don't have to do anything.
+
+00:31:52.440 --> 00:31:56.599
+It's just that you have these automatic hyperlink anchors
+
+00:31:56.600 --> 00:31:58.959
+that are embedded in your outlines again.
+
+00:31:58.960 --> 00:32:04.519
+sort of like org IDs, but you have to manually place those in org.
+
+00:32:04.520 --> 00:32:09.039
+And it just makes linking much simpler.
+
+00:32:09.040 --> 00:32:10.359
+And you can reference this.
+
+00:32:10.360 --> 00:32:13.799
+You can reference the file and the cell number.
+
+00:32:13.800 --> 00:32:15.999
+And again, you don't put this hyperbole.
+
+00:32:16.000 --> 00:32:17.679
+You don't put this in.
+
+00:32:17.680 --> 00:32:20.719
+And then you can even have these view specs, which say,
+
+00:32:20.720 --> 00:32:25.919
+I want to clip the display to one line,
+
+00:32:25.920 --> 00:32:27.399
+and I want to delete. ellipses.
+
+00:32:27.400 --> 00:32:31.079
+So here we see a view over the same outline
+
+00:32:31.080 --> 00:32:37.319
+that's all in one mode. So it's just incredibly capable.
+
+00:32:37.320 --> 00:32:40.079
+So here we've said, you know,
+
+00:32:40.080 --> 00:32:42.879
+there's no blank lines between cells.
+
+00:32:42.880 --> 00:32:46.719
+now I change the view spec and put a blank line in there
+
+00:32:46.720 --> 00:32:51.879
+and it's all changed so lots of consistency that you get
+
+00:32:51.880 --> 00:32:55.599
+when you when you change a node in the outline
+
+00:32:55.600 --> 00:32:58.799
+the whole tree shifts and all of this is maintained
+
+00:32:58.800 --> 00:33:02.839
+all of the structure is maintained automatically by hyperbole
+
+00:33:02.840 --> 00:33:09.479
+and you can embed or Tables in here as well.
+
+00:33:09.480 --> 00:33:17.079
+So if I just press made a return action key again on this or Disabled.
+
+00:33:17.080 --> 00:33:21.799
+Okay. So now I enabled org mode here
+
+00:33:21.800 --> 00:33:31.719
+and where you see like tab here shifts a cell when I'm inside a The table tab just operates like normal org tables.
+
+00:33:31.720 --> 00:33:33.519
+So I can do all of the things
+
+00:33:33.520 --> 00:33:40.839
+that I can do in org table mode as well within this k-outline.
+
+00:33:40.840 --> 00:33:43.399
+So it seems pretty useful to me,
+
+00:33:43.400 --> 00:33:48.519
+but of course, I helped write it.
+
+00:33:48.520 --> 00:33:51.279
+But I think you see some of the benefits
+
+00:33:51.280 --> 00:33:53.959
+that can accrue by using that format.
+
+00:33:53.960 --> 00:33:57.839
+But this is just this is just one piece of hyperbole,
+
+00:33:57.840 --> 00:34:01.559
+a major mode that you can choose to use or ignore entirely,
+
+00:34:01.560 --> 00:34:04.039
+you know, dependent on your needs.
+
+00:34:04.040 --> 00:34:06.399
+If you're writing requirements, documents,
+
+00:34:06.400 --> 00:34:08.879
+or anything that needs structure,
+
+00:34:08.880 --> 00:34:12.079
+I think that's where this is really ideal.
+
+00:34:12.080 --> 00:34:14.279
+You can write a legal document,
+
+00:34:14.280 --> 00:34:16.159
+and you've got auto-numbering,
+
+00:34:16.160 --> 00:34:18.679
+which is always, if you've ever used Word
+
+00:34:18.680 --> 00:34:21.039
+or any of those word processors,
+
+00:34:21.040 --> 00:34:26.479
+it's really a pain to maintain those hierarchies in those compared to here.
+
+00:34:26.480 --> 00:34:32.239
+Okay, so that was just showing you the KL liner.
+
+00:34:32.240 --> 00:34:35.279
+Does anybody have any questions
+
+00:34:35.280 --> 00:34:43.279
+or I'll just continue down a bit?
+
+00:34:43.280 --> 00:34:47.999
+Okay, so some other capabilities
+
+00:34:48.000 --> 00:34:49.959
+that we've fairly recently put in.
+
+00:34:49.960 --> 00:34:52.799
+Well, this has been here for a long time.
+
+00:34:52.800 --> 00:34:58.719
+You can, I think the binding I use is Control-C-M.
+
+00:34:58.720 --> 00:35:00.159
+I forget what it is.
+
+00:35:00.160 --> 00:35:07.159
+No, sorry, that's Control-C, Control-M.
+
+00:35:07.160 --> 00:35:14.319
+Now let's CTRL C, forward slash.
+
+00:35:14.320 --> 00:35:21.719
+Okay, so what I wanted to show you here is that the action key
+
+00:35:21.720 --> 00:35:26.679
+on any double quote, single quote, usually,
+
+00:35:26.680 --> 00:35:30.079
+or paired delimiters will select that whole thing.
+
+00:35:30.080 --> 00:35:33.239
+There is this capability, and I probably just select bigger
+
+00:35:33.240 --> 00:35:35.119
+and bigger chunks of text,
+
+00:35:35.120 --> 00:35:39.319
+but this is really nice that you can just go anywhere
+
+00:35:39.320 --> 00:35:42.479
+in pretty much any mode and hit made a return.
+
+00:35:42.480 --> 00:35:46.559
+And so in Lisp, you can be on the trailing paren
+
+00:35:46.560 --> 00:35:50.599
+and it will select the whole expression or the opening
+
+00:35:50.600 --> 00:35:52.879
+and it'll select just that piece
+
+00:35:52.880 --> 00:35:56.159
+but even better when you're copying pasting
+
+00:35:56.160 --> 00:36:02.039
+I can now if there's no region selected control W made a W
+
+00:36:02.040 --> 00:36:05.679
+will act on the structured entity
+
+00:36:05.680 --> 00:36:09.359
+that you're at the beginning or ending delimiter for
+
+00:36:09.360 --> 00:36:12.199
+without you having to highlight the region
+
+00:36:12.200 --> 00:36:14.719
+So if I hit made a return, it would highlight it,
+
+00:36:14.720 --> 00:36:19.839
+but let's just do made a W to cut that and then I'll yank it here.
+
+00:36:19.840 --> 00:36:23.599
+And you see it grabbed the whole expression
+
+00:36:23.600 --> 00:36:25.599
+and just let you yank it.
+
+00:36:25.600 --> 00:36:29.679
+So it's a nice add on to the basic Emacs commands
+
+00:36:29.680 --> 00:36:33.159
+that just let you operate a lot more efficiently.
+
+00:36:33.160 --> 00:36:35.359
+You can do something similar in C mode.
+
+00:36:35.360 --> 00:36:39.439
+You know, on the braces, you can select the whole function
+
+00:36:39.440 --> 00:36:40.439
+with one key press,
+
+00:36:40.440 --> 00:36:43.079
+made a return, and then copy it somewhere.
+
+00:36:43.080 --> 00:36:50.559
+And Hyperbole integrates with Ace Window if you use that.
+
+00:36:50.560 --> 00:36:56.799
+So let me split this a few ways. And let's do it over here.
+
+00:36:56.800 --> 00:37:06.799
+We'll just go to scratch. Okay. And then I can go,
+
+00:37:06.800 --> 00:37:08.119
+it's sort of interesting,
+
+00:37:08.120 --> 00:37:11.120
+it works with the, with Dired as well.
+
+00:37:11.120 --> 00:37:16.519
+So I can go here and say, I want to So if I do Meta O,
+
+00:37:16.520 --> 00:37:22.159
+ACE window will show me the labels to use, A, D, or S, to do something.
+
+00:37:22.160 --> 00:37:24.559
+Like I can move to any of those windows.
+
+00:37:24.560 --> 00:37:27.959
+But what Hyperbole lets you do
+
+00:37:27.960 --> 00:37:30.759
+is say I want to throw with T,
+
+00:37:30.760 --> 00:37:36.399
+like this glass.org file over to the bottom window.
+
+00:37:36.400 --> 00:37:42.479
+So I go MetaO to invoke it. I say I want a T to throw it.
+
+00:37:42.480 --> 00:37:46.399
+then where do I want to throw it to s the window and
+
+00:37:46.400 --> 00:37:49.879
+Then you see it's now displaying glass org
+
+00:37:49.880 --> 00:37:56.679
+so I can do that with files I can do it with regions of text you can
+
+00:37:56.680 --> 00:37:58.719
+Replace things in a buffer
+
+00:37:58.720 --> 00:38:01.199
+or throw the whole thing to the window
+
+00:38:01.200 --> 00:38:02.759
+so a couple extra commands
+
+00:38:02.760 --> 00:38:06.519
+that it extends ace window with you
+
+00:38:06.520 --> 00:38:12.159
+can even I think, well, we also have this command,
+
+00:38:12.160 --> 00:38:16.799
+I think it's Control-C, yeah.
+
+00:38:16.800 --> 00:38:21.719
+So what it did there was it just selected the files
+
+00:38:21.720 --> 00:38:22.799
+that I had marked in Dura,
+
+00:38:22.800 --> 00:38:26.839
+it selected and created a window grid out of all of them.
+
+00:38:26.840 --> 00:38:29.559
+you know, so I hit like three keystrokes.
+
+00:38:29.560 --> 00:38:35.159
+That's kind of convenient if you want to see
+
+00:38:35.160 --> 00:38:38.159
+a lot of information all at once.
+
+00:38:38.160 --> 00:38:42.239
+And so we covered all that. I won't go into it too much,
+
+00:38:42.240 --> 00:38:46.639
+but there's a whole nother window and frame control system
+
+00:38:46.640 --> 00:38:50.799
+under the screen menu here if you type control HHS.
+
+00:38:50.800 --> 00:38:54.479
+then you can select either controlling windows or frames.
+
+00:38:54.480 --> 00:38:56.119
+Let's do windows.
+
+00:38:56.120 --> 00:39:00.479
+And it has this menu where it's just sort of showing you.
+
+00:39:00.480 --> 00:39:07.839
+I can like split my windows vertically or horizontally.
+
+00:39:07.840 --> 00:39:13.759
+I can widen by a pixel or I can say, or character.
+
+00:39:13.760 --> 00:39:18.319
+I can say, use my prefix argument to change that to 10.
+
+00:39:18.320 --> 00:39:22.479
+And then when I shrink it, shrinks it up by 10
+
+00:39:22.480 --> 00:39:27.319
+or it narrows it width by 10 or it widens it by 10.
+
+00:39:27.320 --> 00:39:33.679
+So it has this concept of prefix arguments that persist
+
+00:39:33.680 --> 00:39:35.719
+and you just type in the number
+
+00:39:35.720 --> 00:39:38.359
+and then you can issue any number of the commands.
+
+00:39:38.360 --> 00:39:41.679
+So you could move windows or frames
+
+00:39:41.680 --> 00:39:44.919
+or create them, delete them, cycle through them,
+
+00:39:44.920 --> 00:39:48.279
+all sorts of things, including relative to movement,
+
+00:39:48.280 --> 00:39:50.719
+relative to the edges of your screens.
+
+00:39:50.720 --> 00:39:52.559
+So if you have multiple screens
+
+00:39:52.560 --> 00:39:54.479
+and many frames that you use,
+
+00:39:54.480 --> 00:39:59.639
+it just makes management very convenient.
+
+00:39:59.640 --> 00:40:02.439
+And then you just cue to quit out of there
+
+00:40:02.440 --> 00:40:04.959
+and you're back wherever you were.
+
+00:40:04.960 --> 00:40:10.439
+So, Finally, we have a lot of documentation.
+
+00:40:10.440 --> 00:40:12.599
+This is just a link to the videos,
+
+00:40:12.600 --> 00:40:16.239
+which is in the readme and in the manuals.
+
+00:40:16.240 --> 00:40:21.399
+There's two demos or tutorials. One to get you started.
+
+00:40:21.400 --> 00:40:24.719
+Notice I'm using these implicit buttons, so keystrokes,
+
+00:40:24.720 --> 00:40:26.879
+and I can just made a return on that.
+
+00:40:26.880 --> 00:40:30.519
+And that takes me to, here's all the videos.
+
+00:40:30.520 --> 00:40:34.239
+And you can get started with that
+
+00:40:34.240 --> 00:40:38.279
+or just interact with this demo that we have.
+
+00:40:38.280 --> 00:40:41.519
+And there's one for the K Outliner as well.
+
+00:40:41.520 --> 00:40:45.399
+One of the things that If you're into videos
+
+00:40:45.400 --> 00:40:46.919
+and you need to link to them,
+
+00:40:46.920 --> 00:40:50.519
+notice what you're seeing here. This is a hyperbole feature
+
+00:40:50.520 --> 00:40:54.919
+which is very difficult to achieve any other way that I've seen
+
+00:40:54.920 --> 00:40:59.279
+where you want a specific start and stop time
+
+00:40:59.280 --> 00:41:01.039
+in a video that you want to play.
+
+00:41:01.040 --> 00:41:05.639
+Hyperbole has a built-in link type for that.
+
+00:41:05.640 --> 00:41:08.760
+as you see here. So this is the name of the link
+
+00:41:08.760 --> 00:41:10.919
+that you can reference it by,
+
+00:41:10.920 --> 00:41:14.279
+and then this is the actual link expression.
+
+00:41:14.280 --> 00:41:17.479
+So I could just go and play a video right here,
+
+00:41:17.480 --> 00:41:22.079
+and this is from one long intro to hyperbole that we did.
+
+00:41:22.080 --> 00:41:25.759
+So it's just linking to the specific sections.
+
+00:41:25.760 --> 00:41:27.439
+But that's something, again,
+
+00:41:27.440 --> 00:41:29.519
+this could be embedded anywhere.
+
+00:41:29.520 --> 00:41:33.759
+in any file and it would start to play.
+
+00:41:33.760 --> 00:41:36.559
+Uh, I guess I could try YouTube.
+
+00:41:36.560 --> 00:41:43.239
+Well, I don't want to. Yeah. Okay. It's on my other screen.
+
+00:41:43.240 --> 00:41:48.199
+So, but it did, it did, uh, link to it.
+
+00:41:48.200 --> 00:41:53.319
+So, um, yeah, just, you know, tremendous capability
+
+00:41:53.320 --> 00:41:56.919
+to interlink your information that way.
+
+00:41:56.920 --> 00:42:00.359
+And, uh, You know, again, you learn it bit by bit.
+
+00:42:00.360 --> 00:42:04.279
+You can study one particular section right here.
+
+00:42:04.280 --> 00:42:09.039
+Just jump directly to that if you want to know about it.
+
+00:42:09.040 --> 00:42:13.319
+The manual is interlinked, has an extensive glossary,
+
+00:42:13.320 --> 00:42:16.119
+cross-references of sections.
+
+00:42:16.120 --> 00:42:23.119
+And if you go in there, this is the hyperlinked manual.
+
+00:42:23.120 --> 00:42:25.119
+So this is the structure of it
+
+00:42:25.120 --> 00:42:27.799
+with all the subsystems documented.
+
+00:42:27.800 --> 00:42:31.519
+But one of the sections we've added
+
+00:42:31.520 --> 00:42:33.559
+is developing with hyperbole.
+
+00:42:33.560 --> 00:42:37.319
+So if you are or you want to create your own button types,
+
+00:42:37.320 --> 00:42:38.919
+this explains how to do it.
+
+00:42:38.920 --> 00:42:42.959
+Creating types, you can create your own action
+
+00:42:42.960 --> 00:42:44.999
+and implicit button types.
+
+00:42:45.000 --> 00:42:48.359
+And if you look in here, there are three ways
+
+00:42:48.360 --> 00:42:55.039
+to create implicit button types from simpler to harder.
+
+00:42:55.040 --> 00:42:59.079
+So like, here's an example
+
+00:42:59.080 --> 00:43:03.679
+where the do pressing control X after this expression
+
+00:43:03.680 --> 00:43:07.199
+defines a new action button link type called pilot.
+
+00:43:07.200 --> 00:43:13.359
+So let's say, I don't know if I have this set up, but we can try it.
+
+00:43:13.360 --> 00:43:21.999
+Yeah, I don't have the variable setup,
+
+00:43:22.000 --> 00:43:25.759
+but basically, you know, it can get you.
+
+00:43:25.760 --> 00:43:31.359
+This is a one line definition of a new action type.
+
+00:43:31.360 --> 00:43:36.399
+that can get you to a Python file
+
+00:43:36.400 --> 00:43:39.639
+based on whatever your Python path is set to
+
+00:43:39.640 --> 00:43:42.919
+with this simple syntax right here.
+
+00:43:42.920 --> 00:43:45.199
+And here we're going to the file.
+
+00:43:45.200 --> 00:43:48.399
+So we have no idea where this is on the file system.
+
+00:43:48.400 --> 00:43:54.959
+And the same way like if you use man path, Python path,
+
+00:43:54.960 --> 00:44:08.599
+you can embed buttons. Let's just go to scratch buffer.
+
+00:44:08.600 --> 00:44:17.919
+My first read-only. It doesn't want me to go.
+
+00:44:17.920 --> 00:44:24.999
+It must be kind of strange.
+
+00:44:25.000 --> 00:44:34.799
+Something with this key window that I have over here.
+
+00:44:34.800 --> 00:44:41.039
+Let me just move off there. Look at that.
+
+00:44:41.040 --> 00:44:46.519
+Maybe it's just activating that.
+
+00:44:46.520 --> 00:44:53.319
+Yeah, it keeps jumping back there.
+
+00:44:53.320 --> 00:44:55.919
+I don't know. I have to get this straight.
+
+00:44:55.920 --> 00:45:02.199
+Yeah, it's not letting me type the buttons.
+
+00:45:02.200 --> 00:45:15.839
+Let me see if I can turn off the key casting.
+
+00:45:15.840 --> 00:45:23.519
+Yeah, maybe that'll help. just gonna exit out of here.
+
+00:45:23.520 --> 00:45:32.960
+Does anybody have any questions they want to cover?
+
+00:45:33.000 --> 00:45:39.079
+I was just gonna show you yeah a little more on type definitions
+
+00:45:39.080 --> 00:45:53.119
+if there was any interest OK, there's nobody piping up.
+
+00:45:53.120 --> 00:45:56.999
+Let me see if there's any other questions.
+
+00:45:57.000 --> 00:46:04.439
+Hi, Bob. I haven't seen any more questions.
+
+00:46:04.440 --> 00:46:10.839
+Yeah, so maybe it's you, me, and someone called Max is here in the channel.
+
+00:46:10.840 --> 00:46:19.479
+OK. Okay, so if Max doesn't have any questions
+
+00:46:19.480 --> 00:46:24.839
+and there aren't other people, we can just end it there.
+
+00:46:24.840 --> 00:46:34.479
+I don't want to have an audience of zero or talk to that.
+
+00:46:34.480 --> 00:46:37.919
+So, but I think that was a good overview, Max, right?
+
+00:46:37.920 --> 00:46:45.479
+Yes, definitely covered a lot in a short time.
+
+00:46:45.480 --> 00:46:48.639
+And hopefully, you know, just try it out.
+
+00:46:48.640 --> 00:46:52.399
+At the top here, it shows you how to install it.
+
+00:46:52.400 --> 00:46:56.559
+It's pretty simple, basic package and installation.
+
+00:46:56.560 --> 00:47:02.719
+And we're happy to help anybody get started if they need to.
+
+00:47:02.720 --> 00:47:05.199
+So thanks, everyone.
+
+00:47:05.200 --> 00:47:09.279
+And we'll answer any further questions on the Etherpad after this.
diff --git a/2025/captions/emacsconf-2025-juicemacs--juicemacs-exploring-speculative-jit-compilation-for-elisp-in-java--kana--main.vtt b/2025/captions/emacsconf-2025-juicemacs--juicemacs-exploring-speculative-jit-compilation-for-elisp-in-java--kana--main.vtt
new file mode 100644
index 00000000..46820e94
--- /dev/null
+++ b/2025/captions/emacsconf-2025-juicemacs--juicemacs-exploring-speculative-jit-compilation-for-elisp-in-java--kana--main.vtt
@@ -0,0 +1,1238 @@
+WEBVTT captioned by kana
+
+
+00:00:01.200 --> 00:00:02.803
+Hello! This is Kana!
+
+00:00:02.903 --> 00:00:04.367
+And today I'll be talking about
+
+00:00:04.368 --> 00:00:06.067
+<b>J</b>ust-<b>I</b>n-<b>T</b>ime compilation, or JIT,
+
+00:00:06.068 --> 00:00:07.363
+for Emacs Lisp,
+
+00:00:07.463 --> 00:00:11.163
+based on my work-in-progress Emacs clone, Juicemacs.
+
+00:00:11.263 --> 00:00:13.533
+Juicemacs aims to explore a few things
+
+00:00:13.534 --> 00:00:15.843
+that I've been wondering about for a while.
+
+00:00:15.943 --> 00:00:18.567
+For exmaple, what if we had better or even
+
+00:00:18.568 --> 00:00:21.223
+transparent concurrency in ELisp?
+
+00:00:21.323 --> 00:00:23.243
+Or, can we have a concurrent GUI?
+
+00:00:23.343 --> 00:00:26.783
+One that does not block, or is blocked by Lisp code?
+
+00:00:26.883 --> 00:00:31.067
+And finally what can JIT compilation do for ELisp?
+
+00:00:31.068 --> 00:00:34.083
+Will it provide better performance?
+
+00:00:34.183 --> 00:00:37.400
+However, a main problem with explorations
+
+00:00:37.401 --> 00:00:38.623
+in Emacs clones is that,
+
+00:00:38.723 --> 00:00:40.863
+Emacs is a whole universe.
+
+00:00:40.963 --> 00:00:43.600
+And that means, to make these explorations
+
+00:00:43.601 --> 00:00:45.383
+meaningful for Emacs users,
+
+00:00:45.483 --> 00:00:47.967
+we need to cover a lot of Emacs features,
+
+00:00:47.968 --> 00:00:50.543
+before we can ever begin.
+
+00:00:50.643 --> 00:00:53.923
+For example, one of the features of Emacs is that,
+
+00:00:54.023 --> 00:00:56.003
+it supports a lot of encodings.
+
+00:00:56.103 --> 00:00:59.267
+Let's look at this string: it can be encoded
+
+00:00:59.268 --> 00:01:03.643
+in both Unicode and Shift-JIS, a Japanese encoding system.
+
+00:01:03.743 --> 00:01:07.067
+But currently, Unicode does not have
+
+00:01:07.068 --> 00:01:09.803
+an official mapping for this "ki" (﨑) character.
+
+00:01:09.903 --> 00:01:12.767
+So when we map from Shift-JIS to Unicode,
+
+00:01:12.768 --> 00:01:14.423
+in most programming languages,
+
+00:01:14.523 --> 00:01:16.533
+you end up with something like this:
+
+00:01:16.534 --> 00:01:19.143
+it's a replacement character.
+
+00:01:19.243 --> 00:01:22.067
+But in Emacs, it actually extends
+
+00:01:22.068 --> 00:01:23.883
+the Unicode range by threefold,
+
+00:01:23.983 --> 00:01:26.833
+and uses the extra range to losslessly
+
+00:01:26.834 --> 00:01:29.483
+support characters like this.
+
+00:01:29.583 --> 00:01:31.923
+So if you want to support this feature,
+
+00:01:32.023 --> 00:01:34.033
+that basically rules out all string
+
+00:01:34.034 --> 00:01:37.243
+libraries with Unicode assumptions.
+
+00:01:37.843 --> 00:01:40.067
+For another, you need to support
+
+00:01:40.068 --> 00:01:41.883
+the regular expressions in Emacs,
+
+00:01:41.983 --> 00:01:45.023
+which are, really irregular.
+
+00:01:45.123 --> 00:01:46.900
+For example, it supports asserting
+
+00:01:46.901 --> 00:01:49.403
+about the user cursor position.
+
+00:01:49.503 --> 00:01:52.033
+And it also uses some character tables,
+
+00:01:52.034 --> 00:01:53.883
+that can be modified from Lisp code,
+
+00:01:53.983 --> 00:01:56.163
+to determine to case mappings.
+
+00:01:56.263 --> 00:01:59.567
+And all that makes it really hard, or even
+
+00:01:59.568 --> 00:02:05.123
+impossible to use any existing regexp libraries.
+
+00:02:05.223 --> 00:02:07.883
+Also, you need a functional garbage collector.
+
+00:02:07.983 --> 00:02:09.867
+You need threading primitives, because
+
+00:02:09.868 --> 00:02:12.323
+Emacs has already had some threading support.
+
+00:02:12.423 --> 00:02:14.533
+And you might want the performance of your clone
+
+00:02:14.534 --> 00:02:18.963
+to match Emacs, even with its native compilation enabled.
+
+00:02:19.063 --> 00:02:21.500
+Not to mention you also need a GUI for an editor.
+
+00:02:21.501 --> 00:02:23.543
+And so on.
+
+00:02:23.643 --> 00:02:25.633
+For Juicemacs, building on Java and
+
+00:02:25.634 --> 00:02:27.563
+a compiler framework called Truffle,
+
+00:02:27.663 --> 00:02:30.503
+helps in getting better performance;
+
+00:02:30.603 --> 00:02:32.933
+and by choosing a language with a good GC,
+
+00:02:32.934 --> 00:02:38.063
+we can actually focus more on the challenges above.
+
+00:02:38.163 --> 00:02:41.433
+Currently, Juicemacs has implemented three out of,
+
+00:02:41.434 --> 00:02:43.983
+at least four of the interpreters in Emacs.
+
+00:02:44.083 --> 00:02:46.363
+One for lisp code, one for bytecode,
+
+00:02:46.463 --> 00:02:48.567
+and one for regular expressions,
+
+00:02:48.568 --> 00:02:50.903
+all of them JIT-capable.
+
+00:02:51.003 --> 00:02:53.667
+Other than these, Emacs also has around
+
+00:02:53.668 --> 00:02:56.083
+two thousand built-in functions in C code.
+
+00:02:56.183 --> 00:02:57.333
+And Juicemacs has around
+
+00:02:57.334 --> 00:02:59.763
+four hundred of them implemented.
+
+00:02:59.863 --> 00:03:03.603
+It's not that many, but it is surprisingly enough
+
+00:03:03.703 --> 00:03:05.200
+to bootstrap Emacs and run
+
+00:03:05.201 --> 00:03:08.483
+the portable dumper, or pdump, in short.
+
+00:03:08.583 --> 00:03:11.243
+Let's have a try.
+
+00:03:11.343 --> 00:03:11.703
+
+
+00:03:11.803 --> 00:03:14.923
+So this is the binary produced by Java native image.
+
+00:03:15.023 --> 00:03:17.167
+And it's loading all the files
+
+00:03:17.168 --> 00:03:18.763
+needed for bootstrapping.
+
+00:03:18.863 --> 00:03:22.233
+Then it dumps the memory to a file to
+
+00:03:22.234 --> 00:03:24.923
+be loaded later, giving us fast startup.
+
+00:03:25.023 --> 00:03:28.723
+As we can see here, it throws some frame errors
+
+00:03:28.823 --> 00:03:31.400
+because Juicemacs doesn't have an editor UI
+
+00:03:31.401 --> 00:03:33.283
+or functional frames yet.
+
+00:03:33.383 --> 00:03:35.367
+But otherwise, it can already run
+
+00:03:35.368 --> 00:03:36.643
+quite some lisp code.
+
+00:03:36.743 --> 00:03:40.400
+For example, this code uses the benchmark library
+
+00:03:40.401 --> 00:03:44.403
+to measure the performance of this Fibonacci function.
+
+00:03:44.503 --> 00:03:47.067
+And we can see here, the JIT engine is
+
+00:03:47.068 --> 00:03:51.163
+already kicking in and makes the execution faster.
+
+00:03:51.263 --> 00:03:53.483
+In addition to that, with a bit of workaround,
+
+00:03:53.583 --> 00:03:56.467
+Juicemacs can also run some of the ERT,
+
+00:03:56.468 --> 00:04:01.043
+or, <b>E</b>macs <b>R</b>egression <b>T</b>est suite, that comes with Emacs.
+
+00:04:01.143 --> 00:04:05.823
+So... Yes, there are a bunch of test failures,
+
+00:04:05.923 --> 00:04:07.933
+which means we are not that compatible
+
+00:04:07.934 --> 00:04:09.523
+with Emacs and need more work.
+
+00:04:09.623 --> 00:04:12.803
+But the whole testing procedure runs fine,
+
+00:04:12.903 --> 00:04:14.767
+and it has proper stack traces,
+
+00:04:14.768 --> 00:04:17.803
+which is quite useful for debugging Juicemacs.
+
+00:04:17.903 --> 00:04:21.033
+So with that, a rather functional JIT runtime,
+
+00:04:21.034 --> 00:04:25.983
+let's now try look into today's topic, JIT compilation for ELisp.
+
+00:04:26.083 --> 00:04:28.533
+So, you probably know that Emacs has supported
+
+00:04:28.534 --> 00:04:32.083
+native-compilation, or nativecomp in short, for some time now.
+
+00:04:32.183 --> 00:04:35.033
+It mainly uses GCC to compile Lisp code
+
+00:04:35.034 --> 00:04:37.363
+into native code, ahead of time.
+
+00:04:37.463 --> 00:04:41.433
+And during runtime, Emacs loads those compiled files,
+
+00:04:41.434 --> 00:04:44.523
+and gets the performance of native code.
+
+00:04:44.623 --> 00:04:47.643
+However, for example, for installed packages,
+
+00:04:47.743 --> 00:04:49.059
+we might want to compile them when we
+
+00:04:49.060 --> 00:04:51.823
+actually use them instead of ahead of time.
+
+00:04:51.923 --> 00:04:53.733
+And Emacs supports this through
+
+00:04:53.734 --> 00:04:55.683
+this <i>native-comp-jit-compilation</i> flag.
+
+00:04:55.783 --> 00:04:59.767
+What it does is, during runtime, Emacs sends
+
+00:04:59.768 --> 00:05:03.203
+loaded files to external Emacs worker processes,
+
+00:05:03.303 --> 00:05:06.903
+which will then compile those files asynchronously.
+
+00:05:07.003 --> 00:05:09.043
+And when the compilation is done,
+
+00:05:09.143 --> 00:05:11.967
+the current Emacs session will load the compiled code back
+
+00:05:11.968 --> 00:05:16.323
+and improves its performance, on the fly.
+
+00:05:16.423 --> 00:05:18.643
+When you look at this procedure, however, it is,
+
+00:05:18.743 --> 00:05:21.563
+ahead-of-time compilation, done at runtime.
+
+00:05:21.663 --> 00:05:25.123
+And it is what current Emacs calls JIT compilation.
+
+00:05:25.223 --> 00:05:27.867
+But if you look at some other JIT engines,
+
+00:05:27.868 --> 00:05:31.803
+you'll see much more complex architectures.
+
+00:05:31.903 --> 00:05:34.233
+So, take luaJIT for an example,
+
+00:05:34.234 --> 00:05:36.163
+in addition to this red line here,
+
+00:05:36.263 --> 00:05:38.767
+which leads us from an interpreted state
+
+00:05:38.768 --> 00:05:40.643
+to a compiled native state,
+
+00:05:40.743 --> 00:05:42.163
+which is also what Emacs does,
+
+00:05:42.263 --> 00:05:44.333
+LuaJIT also supports going from
+
+00:05:44.334 --> 00:05:47.523
+a compiled state back to its interpreter.
+
+00:05:47.623 --> 00:05:51.483
+And this process is called "deoptimization".
+
+00:05:51.583 --> 00:05:55.300
+In contrast to its name, deoptimization here actually
+
+00:05:55.301 --> 00:05:58.563
+enables a huge category of JIT optimizations.
+
+00:05:58.663 --> 00:06:00.163
+They are called speculation.
+
+00:06:01.463 --> 00:06:04.600
+Basically, with speculation, the compiler
+
+00:06:04.601 --> 00:06:07.683
+can use runtime statistics to speculate,
+
+00:06:07.783 --> 00:06:11.443
+to make bolder assumptions in the compiled code.
+
+00:06:11.543 --> 00:06:13.983
+And when the assumptions are invalidated,
+
+00:06:14.083 --> 00:06:18.323
+the runtime deoptimizes the code, updates statistics,
+
+00:06:18.423 --> 00:06:21.133
+and then recompile the code based on new assumptions,
+
+00:06:21.134 --> 00:06:24.443
+and that will make the code more performant.
+
+00:06:24.543 --> 00:06:26.763
+Let's look at an example.
+
+00:06:28.463 --> 00:06:30.967
+So, here is a really simple function,
+
+00:06:30.968 --> 00:06:33.083
+that adds one to the input number.
+
+00:06:33.183 --> 00:06:36.167
+But in Emacs, it is not that simple,
+
+00:06:36.168 --> 00:06:38.203
+because Emacs has three categories of numbers,
+
+00:06:38.303 --> 00:06:42.700
+that is, fix numbers, or machine-word-sized integers,
+
+00:06:42.701 --> 00:06:45.603
+floating numbers, and big integers.
+
+00:06:45.703 --> 00:06:47.600
+And when we compile this, we need
+
+00:06:47.601 --> 00:06:49.363
+to handle all three cases.
+
+00:06:49.463 --> 00:06:52.600
+And if we analyze the code produced by Emacs,
+
+00:06:52.601 --> 00:06:54.683
+as is shown by this gray graph here,
+
+00:06:54.783 --> 00:06:58.083
+we can see that it has, two paths:
+
+00:06:58.183 --> 00:07:01.403
+One fast path, that does fast fix number addition;
+
+00:07:01.503 --> 00:07:03.967
+and one for slow paths, that calls out
+
+00:07:03.968 --> 00:07:06.523
+to an external plus-one function,
+
+00:07:06.623 --> 00:07:09.683
+to handle floating number and big integers.
+
+00:07:09.783 --> 00:07:13.167
+Now, if we pass integers into this function,
+
+00:07:13.168 --> 00:07:16.283
+it's pretty fast because it's on the fast path.
+
+00:07:16.383 --> 00:07:19.767
+However, if we pass in a floating number,
+
+00:07:19.768 --> 00:07:21.843
+then it has to go through the slow path,
+
+00:07:21.943 --> 00:07:25.563
+doing an extra function call, which is slow.
+
+00:07:25.663 --> 00:07:28.733
+What speculation might help here is that,
+
+00:07:28.734 --> 00:07:31.443
+it can have flexible fast paths.
+
+00:07:31.543 --> 00:07:34.563
+When we pass a floating number into this function,
+
+00:07:34.663 --> 00:07:37.400
+which currently has only fixnumbers on the fast path,
+
+00:07:37.401 --> 00:07:40.723
+it also has to go through the slow path.
+
+00:07:40.823 --> 00:07:44.567
+But the difference is that, a speculative runtime can
+
+00:07:44.568 --> 00:07:47.763
+deoptimize and recompile the code to adapt to this.
+
+00:07:47.863 --> 00:07:50.367
+And when it recompiles, it might add
+
+00:07:50.368 --> 00:07:52.643
+floating number onto the fast path,
+
+00:07:52.743 --> 00:07:55.003
+and now floating number operations are also fast.
+
+00:07:55.103 --> 00:07:58.567
+And this kind of speculation is why
+
+00:07:58.568 --> 00:08:03.603
+speculative runtime can be really fast.
+
+00:08:03.703 --> 00:08:05.723
+Let's take a look at some benchmarks.
+
+00:08:05.823 --> 00:08:09.423
+They're obtained with the <i>elisp-benchmarks</i> library on ELPA.
+
+00:08:09.523 --> 00:08:12.600
+The blue line here is for nativecomp,
+
+00:08:12.601 --> 00:08:16.043
+and these blue areas mean that nativecomp is slower.
+
+00:08:16.143 --> 00:08:19.133
+And, likewise, green areas mean that
+
+00:08:19.134 --> 00:08:20.523
+Juicemacs is slower.
+
+00:08:20.623 --> 00:08:22.867
+At a glance, the two (or four)
+
+00:08:22.868 --> 00:08:25.143
+actually seems somehow on par, to me.
+
+00:08:25.243 --> 00:08:30.383
+But, let's take a closer look at some of them.
+
+00:08:30.483 --> 00:08:32.667
+So, the first few benchmarks are the classic,
+
+00:08:32.668 --> 00:08:33.983
+Fibonacci benchmarks.
+
+00:08:34.083 --> 00:08:36.933
+We know that, the series is formed by
+
+00:08:36.934 --> 00:08:39.203
+adding the previous two numbers in the series.
+
+00:08:39.303 --> 00:08:41.700
+And looking at this expression here,
+
+00:08:41.701 --> 00:08:44.043
+Fibonacci benchmarks are quite intensive
+
+00:08:44.143 --> 00:08:46.800
+in number additions, subtractions,
+
+00:08:46.801 --> 00:08:49.103
+and function calls, if you use recursions.
+
+00:08:49.203 --> 00:08:51.000
+And it is exactly why
+
+00:08:51.001 --> 00:08:54.323
+Fibonacci series is a good benchmark.
+
+00:08:54.423 --> 00:08:57.243
+And looking at the results here... wow.
+
+00:08:57.343 --> 00:08:59.843
+Emacs nativecomp executes instantaneously.
+
+00:08:59.943 --> 00:09:04.523
+It's a total defeat for Juicemacs, seemingly.
+
+00:09:04.623 --> 00:09:08.043
+Now, if you're into benchmarks, you know something is wrong here:
+
+00:09:08.143 --> 00:09:11.683
+we are comparing the different things.
+
+00:09:11.783 --> 00:09:14.200
+So let's look under the hood
+
+00:09:14.201 --> 00:09:15.483
+and disassemble the function
+
+00:09:15.583 --> 00:09:17.567
+with this convenient Emacs command
+
+00:09:17.568 --> 00:09:19.063
+called <i>disassemble</i>...
+
+00:09:19.163 --> 00:09:23.043
+And these two lines of code is what we got.
+
+00:09:23.143 --> 00:09:24.700
+So, we already can see
+
+00:09:24.701 --> 00:09:26.123
+what's going on here:
+
+00:09:26.223 --> 00:09:29.963
+GCC sees Fibonacci is a pure function,
+
+00:09:30.063 --> 00:09:31.867
+because it returns the same value
+
+00:09:31.868 --> 00:09:33.243
+for the same arguments,
+
+00:09:33.343 --> 00:09:35.700
+so GCC chooses to do the computation
+
+00:09:35.701 --> 00:09:36.723
+at compile time
+
+00:09:36.823 --> 00:09:39.133
+and inserts the final number directly
+
+00:09:39.134 --> 00:09:40.323
+into the compiled code.
+
+00:09:41.823 --> 00:09:43.603
+It is actually great!
+
+00:09:43.703 --> 00:09:45.400
+Because it shows that nativecomp
+
+00:09:45.401 --> 00:09:47.283
+knows about pure functions,
+
+00:09:47.383 --> 00:09:48.700
+and can do all kinds of things
+
+00:09:48.701 --> 00:09:51.203
+like removing or constant-folding them.
+
+00:09:51.303 --> 00:09:54.403
+And Juicemacs just does not do that.
+
+00:09:54.503 --> 00:09:57.367
+However, we are also concerned about
+
+00:09:57.368 --> 00:09:59.003
+the things we mentioned earlier:
+
+00:09:59.103 --> 00:10:00.900
+the performance of number additions,
+
+00:10:00.901 --> 00:10:02.983
+or function calls.
+
+00:10:03.083 --> 00:10:05.633
+So, in order to let the benchmarks
+
+00:10:05.634 --> 00:10:06.863
+show some extra things,
+
+00:10:06.963 --> 00:10:08.367
+we need to modify it a bit...
+
+00:10:08.368 --> 00:10:11.323
+by simply making things non-constant.
+
+00:10:11.423 --> 00:10:15.203
+With that, Emacs gets much slower now.
+
+00:10:15.303 --> 00:10:17.133
+And again, let's look what's
+
+00:10:17.134 --> 00:10:21.083
+happening behind these numbers.
+
+00:10:21.183 --> 00:10:23.500
+Similarly, with the <i>disassemble</i> command,
+
+00:10:23.501 --> 00:10:25.643
+we can look into the assembly.
+
+00:10:25.743 --> 00:10:28.019
+And again, we can already see
+
+00:10:28.020 --> 00:10:29.303
+what's happening here.
+
+00:10:29.403 --> 00:10:32.083
+So, Juicemacs, due to its speculation nature,
+
+00:10:32.183 --> 00:10:35.443
+supports fast paths for all three kind of numbers.
+
+00:10:35.543 --> 00:10:39.233
+However, currently, Emacs nativecomp
+
+00:10:39.234 --> 00:10:41.243
+does not have any fast path
+
+00:10:41.343 --> 00:10:43.433
+for the operations here like additions,
+
+00:10:43.434 --> 00:10:45.803
+or subtractions, or comparisons,
+
+00:10:45.903 --> 00:10:48.067
+which is exactly what
+
+00:10:48.068 --> 00:10:50.963
+Fibonacci benchmarks are measuring.
+
+00:10:51.063 --> 00:10:53.800
+Emacs, at this time, has to call some generic,
+
+00:10:53.801 --> 00:10:57.963
+external functions for them, and this is slow.
+
+00:11:00.063 --> 00:11:03.203
+But is nativecomp really that slow?
+
+00:11:03.303 --> 00:11:04.967
+So, I also ran the same benchmark
+
+00:11:04.968 --> 00:11:07.083
+in Common Lisp, with SBCL.
+
+00:11:07.183 --> 00:11:09.000
+And nativecomp is already fast,
+
+00:11:09.001 --> 00:11:11.003
+compared to untyped SBCL.
+
+00:11:11.103 --> 00:11:15.500
+It's because SBCL also emits call instructions
+
+00:11:15.501 --> 00:11:18.483
+when it comes to no type info.
+
+00:11:18.583 --> 00:11:21.700
+However, once we declare the types,
+
+00:11:21.701 --> 00:11:25.283
+SBCL is able to compile a fast path for fix numbers,
+
+00:11:25.383 --> 00:11:27.467
+which makes its performance on par
+
+00:11:27.468 --> 00:11:30.683
+with speculative JIT engines (that is, Juicemacs),
+
+00:11:30.783 --> 00:11:34.763
+because, now both of us are now on fast paths.
+
+00:11:36.063 --> 00:11:38.400
+Additionally, if we are bold enough
+
+00:11:38.401 --> 00:11:41.203
+to pass this safety zero flag to SBCL,
+
+00:11:41.303 --> 00:11:43.700
+it will remove all the slow paths
+
+00:11:43.701 --> 00:11:44.963
+and type checks,
+
+00:11:45.063 --> 00:11:46.367
+and its performance is close
+
+00:11:46.368 --> 00:11:48.643
+to what you get with C.
+
+00:11:48.743 --> 00:11:51.299
+Well, probably we don't want safety zero
+
+00:11:51.300 --> 00:11:52.063
+most of the time.
+
+00:11:52.163 --> 00:11:55.133
+But even then, if nativecomp were to
+
+00:11:55.134 --> 00:11:57.763
+get fast paths for more constructs,
+
+00:11:57.863 --> 00:11:59.867
+there certainly is quite
+
+00:11:59.868 --> 00:12:03.563
+some room for performance improvement.
+
+00:12:04.063 --> 00:12:06.803
+Let's look at some more benchmarks.
+
+00:12:06.903 --> 00:12:08.933
+For example, for this inclist,
+
+00:12:08.934 --> 00:12:10.923
+or increment-list, benchmark,
+
+00:12:11.023 --> 00:12:14.333
+Juicemacs is really slow here. Partly,
+
+00:12:14.334 --> 00:12:17.603
+it comes from the cost of Java boxing integers.
+
+00:12:17.703 --> 00:12:20.300
+On the other hand, for Emacs nativecomp,
+
+00:12:20.301 --> 00:12:22.043
+for this particular benchmark,
+
+00:12:22.143 --> 00:12:23.667
+it actually has fast paths
+
+00:12:23.668 --> 00:12:25.523
+for all of the operations.
+
+00:12:25.623 --> 00:12:27.723
+And that's why it can be so fast,
+
+00:12:27.823 --> 00:12:30.667
+and that also proves the nativecomp
+
+00:12:30.668 --> 00:12:33.843
+has a lot potential for improvement.
+
+00:12:33.943 --> 00:12:35.833
+There is another benchmark here
+
+00:12:35.834 --> 00:12:37.963
+that use advices.
+
+00:12:38.063 --> 00:12:40.500
+So Emacs Lisp supports using
+
+00:12:40.501 --> 00:12:42.203
+advices to override functions
+
+00:12:42.303 --> 00:12:44.833
+by wrapping the original function, and an advice
+
+00:12:44.834 --> 00:12:47.443
+function, two of them, inside a glue function.
+
+00:12:47.543 --> 00:12:51.467
+And in this benchmark, we advice the Fibonacci function
+
+00:12:51.468 --> 00:12:54.523
+to cache the first ten entries to speed up computation,
+
+00:12:54.623 --> 00:13:00.003
+as can be seen in the speed-up in the Juicemacs results.
+
+00:13:00.103 --> 00:13:02.900
+However, it seems that nativecomp does not yet
+
+00:13:02.901 --> 00:13:08.523
+compile glue functions, and that makes advices slower.
+
+00:13:08.623 --> 00:13:12.043
+With these benchmarks, let's discuss this big question:
+
+00:13:12.143 --> 00:13:16.563
+Should GNU Emacs adopt speculative JIT compilation?
+
+00:13:16.663 --> 00:13:18.967
+Well, the hidden question is actually,
+
+00:13:18.968 --> 00:13:21.223
+is it worth it?
+
+00:13:21.323 --> 00:13:24.163
+And, my personal answer is, maybe not.
+
+00:13:24.263 --> 00:13:28.133
+The first reason is that, slow paths, like, floating numbers,
+
+00:13:28.134 --> 00:13:31.043
+are actually not that frequent in Emacs.
+
+00:13:31.143 --> 00:13:34.100
+And optimizing for fast paths like fix numbers
+
+00:13:34.101 --> 00:13:37.983
+can already get us very good performance already.
+
+00:13:38.083 --> 00:13:40.333
+And the second or main reason is that,
+
+00:13:40.334 --> 00:13:43.163
+speculative JIT is very hard.
+
+00:13:43.263 --> 00:13:46.843
+LuaJIT, for example, took a genius to build.
+
+00:13:46.943 --> 00:13:50.967
+Even with the help of GCC, we need to hand-write
+
+00:13:50.968 --> 00:13:54.283
+all those fast path or slow path or switching logic.
+
+00:13:54.383 --> 00:13:58.133
+We need to find a way to deoptimize, which requires
+
+00:13:58.134 --> 00:14:01.803
+mapping machine registers back to interpreter stack.
+
+00:14:01.903 --> 00:14:04.067
+And also, speculation needs runtime info,
+
+00:14:04.068 --> 00:14:07.323
+which also costs us extra memory.
+
+00:14:07.423 --> 00:14:10.763
+Moreover, as is shown by some benchmarks above,
+
+00:14:10.863 --> 00:14:13.333
+there's some low-hanging fruits in nativecomp that
+
+00:14:13.334 --> 00:14:17.343
+might get us better performance with relatively lower effort.
+
+00:14:17.443 --> 00:14:22.163
+Compared to this, a JIT engine is a huge, huge undertaking.
+
+00:14:22.263 --> 00:14:26.123
+But, for Juicemacs, the JIT engine comes a lot cheaper,
+
+00:14:26.223 --> 00:14:29.067
+because, we are cheating by building on
+
+00:14:29.068 --> 00:14:33.443
+an existing compiler framework called Truffle.
+
+00:14:33.543 --> 00:14:35.883
+Truffle is a meta-compiler framework,
+
+00:14:35.983 --> 00:14:37.633
+which means that it lets you write
+
+00:14:37.634 --> 00:14:40.103
+an interpreter, add required annotations,
+
+00:14:40.203 --> 00:14:42.500
+and it will automatically turn the
+
+00:14:42.501 --> 00:14:45.643
+interpreter into a JIT runtime.
+
+00:14:45.743 --> 00:14:49.083
+So for example, here is a typical bytecode interpreter.
+
+00:14:49.183 --> 00:14:51.233
+After you add the required annotations,
+
+00:14:51.234 --> 00:14:52.523
+Truffle will know that,
+
+00:14:52.623 --> 00:14:55.533
+the bytecode here is constant, and it should
+
+00:14:55.534 --> 00:14:59.123
+unroll this loop here, to inline all those bytecode.
+
+00:14:59.223 --> 00:15:00.467
+And then, when Truffle
+
+00:15:00.468 --> 00:15:02.243
+compiles the code, it knows that:
+
+00:15:02.343 --> 00:15:05.233
+the first loop here does: x plus one,
+
+00:15:05.234 --> 00:15:07.723
+and the second does: return.
+
+00:15:07.823 --> 00:15:09.533
+And then it will compile all that into,
+
+00:15:09.534 --> 00:15:11.363
+return x plus 1,
+
+00:15:11.463 --> 00:15:14.067
+which is exactly what we would expect
+
+00:15:14.068 --> 00:15:17.683
+when compiling this pseudo code.
+
+00:15:17.783 --> 00:15:21.083
+Building on that, we can also easily implement speculation,
+
+00:15:21.183 --> 00:15:24.867
+by using this <i>transferToInterpreterAndInvalidate</i> function
+
+00:15:24.868 --> 00:15:26.123
+provided by Truffle.
+
+00:15:26.223 --> 00:15:28.533
+And Truffle will automatically turn that
+
+00:15:28.534 --> 00:15:30.683
+into deoptimization.
+
+00:15:30.783 --> 00:15:32.700
+Now, for example, when this add function
+
+00:15:32.701 --> 00:15:35.723
+is supplied with, two floating numbers.
+
+00:15:35.823 --> 00:15:38.243
+It will go through the slow path here,
+
+00:15:38.343 --> 00:15:40.960
+which might lead to a compiled slow path,
+
+00:15:40.961 --> 00:15:43.203
+or deoptimization.
+
+00:15:43.303 --> 00:15:45.733
+And going this deoptimization way,
+
+00:15:45.734 --> 00:15:48.223
+it can then update the runtime stats.
+
+00:15:48.323 --> 00:15:50.400
+And now, when the code is compiled again,
+
+00:15:50.401 --> 00:15:51.603
+Truffle will know,
+
+00:15:51.703 --> 00:15:54.100
+that these compilation stats, suggests that,
+
+00:15:54.101 --> 00:15:55.563
+we have floating numbers.
+
+00:15:55.663 --> 00:15:58.733
+And this floating point addition branch will
+
+00:15:58.734 --> 00:16:02.603
+then be incorporated into the fast path.
+
+00:16:02.703 --> 00:16:06.003
+To put it into Java code...
+
+00:16:06.103 --> 00:16:08.723
+Most operations are just as simple as this.
+
+00:16:08.823 --> 00:16:11.033
+And it supports fast paths for integers,
+
+00:16:11.034 --> 00:16:13.963
+floating numbers, and big integers.
+
+00:16:14.063 --> 00:16:17.133
+And the simplicity of this not only saves us work,
+
+00:16:17.134 --> 00:16:22.243
+but also enables Juicemacs to explore more things more rapidly.
+
+00:16:22.343 --> 00:16:26.483
+And actually, I have done some silly explorations.
+
+00:16:26.583 --> 00:16:30.203
+For example, I tried to constant-fold more things.
+
+00:16:30.303 --> 00:16:32.767
+Many of us have an Emacs config that stays
+
+00:16:32.768 --> 00:16:36.683
+largely unchanged, at least during one Emacs session.
+
+00:16:36.783 --> 00:16:39.667
+And that means many of the global variables
+
+00:16:39.668 --> 00:16:42.323
+in ELisp are constant.
+
+00:16:42.423 --> 00:16:44.600
+And with speculation, we can
+
+00:16:44.601 --> 00:16:46.683
+speculate about the stable ones,
+
+00:16:46.783 --> 00:16:49.563
+and try to inline them as constants.
+
+00:16:49.663 --> 00:16:51.733
+And this might improve performance,
+
+00:16:51.734 --> 00:16:53.083
+or maybe not?
+
+00:16:53.183 --> 00:16:55.367
+Because, we will need a full editor
+
+00:16:55.368 --> 00:16:58.123
+to get real world data.
+
+00:16:58.223 --> 00:17:01.733
+I also tried changing cons lists to be backed
+
+00:17:01.734 --> 00:17:05.243
+by some arrays, because, maybe arrays are faster, I guess?
+
+00:17:05.343 --> 00:17:09.033
+But in the end, <i>setcdr</i> requires some kind of indirection,
+
+00:17:09.034 --> 00:17:12.883
+and that actually makes the performance worse.
+
+00:17:12.983 --> 00:17:14.733
+And for regular expressions,
+
+00:17:14.734 --> 00:17:17.923
+I also tried borrowing techniques from PCRE JIT,
+
+00:17:18.023 --> 00:17:20.667
+which is quite fast in itself, but it is
+
+00:17:20.668 --> 00:17:24.163
+unfortunately unsupported by Java Truffle runtime.
+
+00:17:24.263 --> 00:17:27.333
+So, looking at these, well,
+
+00:17:27.334 --> 00:17:30.243
+explorations can fail, certainly.
+
+00:17:30.343 --> 00:17:32.800
+But, with Truffle and Java, these,
+
+00:17:32.801 --> 00:17:34.883
+for now, are not that hard to implement,
+
+00:17:34.983 --> 00:17:37.667
+and also very often, they teach us something
+
+00:17:37.668 --> 00:17:42.363
+in return, whether or not they fail.
+
+00:17:42.463 --> 00:17:45.333
+Finally, let's talk about some explorations
+
+00:17:45.334 --> 00:17:47.883
+that we might get into in the future.
+
+00:17:47.983 --> 00:17:49.683
+For the JIT engine, for example,
+
+00:17:49.783 --> 00:17:52.633
+currently I'm looking into the implementation of
+
+00:17:52.634 --> 00:17:56.883
+nativecomp to maybe reuse some of its optimizations.
+
+00:17:56.983 --> 00:18:01.323
+For the GUI, I'm very very slowly working on one.
+
+00:18:01.423 --> 00:18:03.733
+If it ever completes, I have one thing
+
+00:18:03.734 --> 00:18:06.603
+I'm really looking forward to implementing.
+
+00:18:06.703 --> 00:18:08.900
+That is, inlining widgets, or even
+
+00:18:08.901 --> 00:18:11.763
+other buffers, directly into a buffer.
+
+00:18:11.863 --> 00:18:13.967
+Well, it's because, people sometimes complain
+
+00:18:13.968 --> 00:18:16.003
+about Emacs's GUI capabilities,
+
+00:18:16.103 --> 00:18:19.767
+But I personally think that supporting inlining,
+
+00:18:19.768 --> 00:18:23.043
+like a whole buffer inside another buffer as a rectangle,
+
+00:18:23.143 --> 00:18:26.883
+could get us very far in layout abilities.
+
+00:18:26.983 --> 00:18:28.567
+And this approach should also
+
+00:18:28.568 --> 00:18:30.843
+be compatible with terminals.
+
+00:18:30.943 --> 00:18:32.933
+And I really want to see how this idea
+
+00:18:32.934 --> 00:18:36.003
+plays out with Juicemacs.
+
+00:18:36.103 --> 00:18:38.963
+And of course, there's Lisp concurrency.
+
+00:18:39.063 --> 00:18:42.167
+And currently i'm thinking of a JavaScript-like,
+
+00:18:42.168 --> 00:18:46.283
+transparent, single-thread model, using Java's virtual threads.
+
+00:18:46.383 --> 00:18:49.967
+But anyway, if you are interested in JIT compilation,
+
+00:18:49.968 --> 00:18:51.663
+Truffle, or anything above,
+
+00:18:51.763 --> 00:18:53.867
+or maybe you have your own ideas,
+
+00:18:53.868 --> 00:18:56.283
+you are very welcome to reach out!
+
+00:18:56.383 --> 00:19:00.033
+Juicemacs does need to implement many more built-in functions,
+
+00:19:00.034 --> 00:19:03.063
+and any help would be very appreciated.
+
+00:19:03.163 --> 00:19:05.800
+And I promise, it can be a very fun playground
+
+00:19:05.801 --> 00:19:08.343
+to learn about Emacs and do crazy things.
+
+00:19:08.443 --> 00:19:10.902
+Thank you!
diff --git a/2025/captions/emacsconf-2025-latex--latex-export-in-orgmode-the-overhaul--pedro-a-aranda-gutirrez--main.vtt b/2025/captions/emacsconf-2025-latex--latex-export-in-orgmode-the-overhaul--pedro-a-aranda-gutirrez--main.vtt
new file mode 100644
index 00000000..9f354abd
--- /dev/null
+++ b/2025/captions/emacsconf-2025-latex--latex-export-in-orgmode-the-overhaul--pedro-a-aranda-gutirrez--main.vtt
@@ -0,0 +1,1402 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:04.456
+Okay. Good afternoon, morning or evening,
+
+00:00:04.457 --> 00:00:06.519
+whatever it is in your airtime zone.
+
+00:00:06.520 --> 00:00:10.959
+I'm Pedro Aranda and I'm going to be talking about
+
+00:00:10.960 --> 00:00:12.959
+what I've been doing
+
+00:00:12.960 --> 00:00:16.999
+with the latest backend in Org Mode
+
+00:00:17.000 --> 00:00:24.719
+and the different Sorry, and the way it treats fonts.
+
+00:00:24.720 --> 00:00:28.279
+Just a couple of words before
+
+00:00:28.280 --> 00:00:30.359
+I am going to go through motivation,
+
+00:00:30.360 --> 00:00:35.279
+the evolution and get you an idea of what you can get
+
+00:00:35.280 --> 00:00:38.079
+from the feature branch that I have started
+
+00:00:38.080 --> 00:00:41.399
+and give a couple of demos.
+
+00:00:41.400 --> 00:00:47.779
+actually my motivation is I was using ox-latex currently
+
+00:00:47.780 --> 00:00:51.439
+and b and ox-beamer for as a foundation for my activities
+
+00:00:51.440 --> 00:00:54.399
+mainly for lecture notes and lecture slides
+
+00:00:54.400 --> 00:01:01.359
+so i came from pure latex and beamers
+
+00:01:01.360 --> 00:01:04.519
+and for me the real cool use case
+
+00:01:04.520 --> 00:01:05.959
+or I would say this was
+
+00:01:05.960 --> 00:01:07.959
+the killer use case for me was
+
+00:01:07.960 --> 00:01:09.239
+I have a programming lecture
+
+00:01:09.240 --> 00:01:12.199
+which is sort of a Python 101
+
+00:01:12.200 --> 00:01:14.199
+and when I'm live in the lecture
+
+00:01:14.200 --> 00:01:18.279
+I can go and if the pupils ask me I can modify code,
+
+00:01:18.280 --> 00:01:21.079
+show modified code and results on the fly
+
+00:01:21.080 --> 00:01:25.119
+and that's something that really impresses the kids
+
+00:01:25.120 --> 00:01:30.159
+and makes them understand what we are talking about.
+
+00:01:30.160 --> 00:01:34.399
+From my pro-subjective point of view, in some,
+
+00:01:34.400 --> 00:01:38.159
+mainly in ox-beamer, some of the things that I was missing
+
+00:01:38.160 --> 00:01:41.879
+is that emojis would really break the monotony
+
+00:01:41.880 --> 00:01:47.679
+and I missed the support for emojis and stock Beamer themes.
+
+00:01:47.680 --> 00:01:52.159
+And some fonts I also found were suboptimal
+
+00:01:52.160 --> 00:01:56.639
+or difficult to adapt in case they need an adaptation.
+
+00:01:56.640 --> 00:02:01.799
+So, for example, people who need special fonts
+
+00:02:01.800 --> 00:02:05.799
+because of their special capabilities,
+
+00:02:05.800 --> 00:02:11.159
+it's difficult to get those fonts from the stock themes
+
+00:02:11.160 --> 00:02:17.359
+and from the stock font implementations you have there.
+
+00:02:17.360 --> 00:02:19.399
+So, requirements on mice
+
+00:02:19.400 --> 00:02:21.479
+from the Emacs site to do this is none,
+
+00:02:21.480 --> 00:02:24.999
+because basically, okay, the only thing I want
+
+00:02:25.000 --> 00:02:27.159
+is to work on a vanilla Emacs,
+
+00:02:27.160 --> 00:02:28.399
+which is more or less recent,
+
+00:02:28.400 --> 00:02:30.119
+because yes, I'm a bit of a freak
+
+00:02:30.120 --> 00:02:32.479
+and I compile it every two, three,
+
+00:02:32.480 --> 00:02:36.839
+I get it from master and compile it every two, three days.
+
+00:02:36.840 --> 00:02:40.599
+And Yahoo, I had to change to Neumark,
+
+00:02:40.600 --> 00:02:47.359
+and I'm able now to get my vanilla Neumarks within four.
+
+00:02:47.360 --> 00:02:53.359
+So that was a big accomplishment in these last days.
+
+00:02:53.360 --> 00:02:55.119
+What is the evolution?
+
+00:02:55.120 --> 00:03:00.719
+I mean my personal evolution and my take of xLatex
+
+00:03:00.720 --> 00:03:05.919
+was I put everything in a in a latex file
+
+00:03:05.920 --> 00:03:09.959
+and I input it through the latex shader and that's it.
+
+00:03:09.960 --> 00:03:12.319
+But that was not very beginner friendly
+
+00:03:12.320 --> 00:03:15.719
+and once I had some people interested in this,
+
+00:03:15.720 --> 00:03:19.159
+oh wow I can modify the code on the fly
+
+00:03:19.160 --> 00:03:21.119
+and see the results on the fly,
+
+00:03:21.120 --> 00:03:26.719
+it was more difficult for them to give it a go.
+
+00:03:26.720 --> 00:03:32.359
+So I just, because they,
+
+00:03:32.360 --> 00:03:36.919
+there are people who have not that big,
+
+00:03:36.920 --> 00:03:41.159
+that much experience with LaTeX
+
+00:03:41.160 --> 00:03:44.919
+and It can even be a bridge to introduce people into latex.
+
+00:03:44.920 --> 00:03:48.959
+So, in any case, it was not very beginner-friendly
+
+00:03:48.960 --> 00:03:52.799
+and I had complaints on that.
+
+00:03:52.800 --> 00:03:57.159
+So, what I think was, we can do better.
+
+00:03:57.160 --> 00:04:00.399
+My first attempt was something that was completely neutral
+
+00:04:00.400 --> 00:04:02.879
+to Babel or Polyglosia.
+
+00:04:02.880 --> 00:04:06.199
+and it was made basically for font Lattesch
+
+00:04:06.200 --> 00:04:08.839
+although some of the things can for rural Lattesch
+
+00:04:08.840 --> 00:04:14.279
+and some of the things can also be used with the latest.
+
+00:04:14.280 --> 00:04:16.519
+So overriding template fonts
+
+00:04:16.520 --> 00:04:21.279
+and taking into account pullback fonts
+
+00:04:21.280 --> 00:04:23.839
+was something that I learned uh uh
+
+00:04:23.840 --> 00:04:27.959
+when we started this conversation
+
+00:04:27.960 --> 00:04:29.839
+and the only problem with this
+
+00:04:29.840 --> 00:04:34.799
+is that fallback fonts only work for latex
+
+00:04:34.800 --> 00:04:40.679
+and because uh because it doesn't support them
+
+00:04:40.680 --> 00:04:42.439
+actually for fallback points is a lua feature
+
+00:04:42.440 --> 00:04:45.319
+There was already something in the list
+
+00:04:45.320 --> 00:04:48.399
+regarding script detection which helped me a lot.
+
+00:04:48.400 --> 00:04:52.399
+So big recognition to Romano Lafias for that
+
+00:04:52.400 --> 00:04:57.679
+and for his publishing the algorithm or the script
+
+00:04:57.680 --> 00:05:04.399
+and the in the org mode mailing list.
+
+00:05:04.400 --> 00:05:11.319
+And then came my sort of little nightmare,
+
+00:05:11.320 --> 00:05:13.879
+which was when we started talking
+
+00:05:13.880 --> 00:05:17.359
+about internationalization or localization.
+
+00:05:17.360 --> 00:05:21.599
+Looking back, I have a very strange feeling
+
+00:05:21.600 --> 00:05:22.919
+about a blurring target there.
+
+00:05:22.920 --> 00:05:29.679
+Because the reality being very, very frank, did I need it?
+
+00:05:29.680 --> 00:05:34.919
+Really no, because I just needed
+
+00:05:34.920 --> 00:05:39.999
+to add Spanish with Babel and that was it.
+
+00:05:40.000 --> 00:05:43.199
+Well actually for me it still is
+
+00:05:43.200 --> 00:05:46.519
+and you can put the British, German or Italian
+
+00:05:46.520 --> 00:05:48.359
+it continues to be true for me
+
+00:05:48.360 --> 00:05:51.839
+so I had personally I had little interest in doing that
+
+00:05:51.840 --> 00:05:55.319
+but I took it as a challenge
+
+00:05:55.320 --> 00:06:02.479
+which has shown to be really tough.
+
+00:06:02.480 --> 00:06:05.799
+What do you get from the feature branch? The feature branch
+
+00:06:05.800 --> 00:06:08.999
+adds font management for font spec,
+
+00:06:09.000 --> 00:06:10.839
+which is not strictly needed
+
+00:06:10.840 --> 00:06:16.079
+when you are on Latin, Cyrillic, and Greek scripts
+
+00:06:16.080 --> 00:06:20.599
+as long as the fonts in your template support them.
+
+00:06:20.600 --> 00:06:28.799
+But again, it's a nice way to get better support here.
+
+00:06:28.800 --> 00:06:33.039
+You don't need it if you're happy with the fonts you get
+
+00:06:33.040 --> 00:06:38.439
+from the templates that you use both for Beamer
+
+00:06:38.440 --> 00:06:40.359
+and the document classes in LaTeX.
+
+00:06:40.360 --> 00:06:43.639
+If you don't want to use alternative fonts,
+
+00:06:43.640 --> 00:06:47.999
+you don't need it, but you would need it.
+
+00:06:48.000 --> 00:06:50.639
+Of course, if you don't want things like,
+
+00:06:50.640 --> 00:06:55.719
+for example, emojis or need emojis,
+
+00:06:55.720 --> 00:06:59.359
+you really don't need forward fonts.
+
+00:06:59.360 --> 00:07:03.959
+So my idea is that the next thing that you can add
+
+00:07:03.960 --> 00:07:07.319
+is Babel and Polyglos here
+
+00:07:07.320 --> 00:07:13.079
+for enhanced localization and multilingual documents there.
+
+00:07:13.080 --> 00:07:17.799
+And at the end, my vision was that the keywords involved
+
+00:07:17.800 --> 00:07:19.799
+would be language, the main language.
+
+00:07:19.800 --> 00:07:23.039
+And then a nice idea from Ihor
+
+00:07:23.040 --> 00:07:27.199
+was to put all the secondary languages there too.
+
+00:07:27.200 --> 00:07:30.559
+Then specify the LaTeX compiler
+
+00:07:30.560 --> 00:07:32.639
+and then what I've added is a keyword
+
+00:07:32.640 --> 00:07:34.279
+which is LaTeX Montylang
+
+00:07:34.280 --> 00:07:37.879
+which can be fontspec or babel or polyglossia
+
+00:07:37.880 --> 00:07:40.319
+for localized documents.
+
+00:07:40.320 --> 00:07:45.359
+By default, this thing is nil and when it is nil,
+
+00:07:45.360 --> 00:07:51.719
+you get the behavior from OrgBug
+
+00:07:51.720 --> 00:07:56.559
+that you already are used to if you don't want to switch.
+
+00:07:56.560 --> 00:08:00.559
+and I was there and I was really
+
+00:08:00.560 --> 00:08:03.479
+was chirped into the conversation
+
+00:08:03.480 --> 00:08:06.799
+and I'm really helpful and a big thanks to him
+
+00:08:06.800 --> 00:08:09.199
+because he also had a an easy idea
+
+00:08:09.200 --> 00:08:13.079
+to support Chinese and Japanese documents
+
+00:08:13.080 --> 00:08:17.239
+so that the only thing that you need is to add the language
+
+00:08:17.240 --> 00:08:19.879
+that you're going to write your document in
+
+00:08:19.880 --> 00:08:23.639
+very very big thank you for that
+
+00:08:23.640 --> 00:08:25.399
+because that was really a challenge
+
+00:08:25.400 --> 00:08:29.279
+not being able to decipher
+
+00:08:29.280 --> 00:08:32.639
+what I was what I was coding there
+
+00:08:32.640 --> 00:08:34.439
+in terms of I have a document
+
+00:08:34.440 --> 00:08:37.519
+I copy and paste it from some place
+
+00:08:37.520 --> 00:08:40.039
+and from there I get my answer I get my my pdf
+
+00:08:40.040 --> 00:08:47.279
+and I compare whether it is correct or not
+
+00:08:47.280 --> 00:08:50.239
+So what is behind the scenes?
+
+00:08:50.240 --> 00:08:52.959
+I've always suggested that in order
+
+00:08:52.960 --> 00:08:55.239
+to use the feature branch efficiently
+
+00:08:55.240 --> 00:08:59.919
+you create a file with the default values
+
+00:08:59.920 --> 00:09:02.439
+you need for your variables
+
+00:09:02.440 --> 00:09:06.199
+and that's the this famous.locals.el files.
+
+00:09:06.200 --> 00:09:10.239
+What I do is I have a generic one
+
+00:09:10.240 --> 00:09:12.079
+in my home documents directory
+
+00:09:12.080 --> 00:09:16.599
+and this is used for all the org documents
+
+00:09:16.600 --> 00:09:20.559
+that are in subdirectories from there.
+
+00:09:20.560 --> 00:09:24.039
+Why? Because normally you will not be
+
+00:09:24.040 --> 00:09:26.599
+changing your fonts that often.
+
+00:09:26.600 --> 00:09:29.599
+and if you need you can always go
+
+00:09:29.600 --> 00:09:33.479
+and have your configuration locally.
+
+00:09:33.480 --> 00:09:38.639
+So it's this point where I'm collecting
+
+00:09:38.640 --> 00:09:40.759
+my phone configuration and
+
+00:09:40.760 --> 00:09:47.519
+For me, this gives me a very, very nice quick start
+
+00:09:47.520 --> 00:09:49.639
+for new documents and presentations.
+
+00:09:49.640 --> 00:09:54.639
+And there you can even configure a lot of compiler
+
+00:09:54.640 --> 00:09:57.919
+and font language management too,
+
+00:09:57.920 --> 00:10:00.919
+so you have everything in a file.
+
+00:10:00.920 --> 00:10:04.759
+And the other nice thing for that
+
+00:10:04.760 --> 00:10:08.479
+is that you can also include that in a subdirectory.
+
+00:10:08.480 --> 00:10:13.199
+And if this subdirectory is something that you're sharing
+
+00:10:13.200 --> 00:10:14.479
+in a project with other people,
+
+00:10:14.480 --> 00:10:17.759
+you are already configuring the, say,
+
+00:10:17.760 --> 00:10:23.559
+quote, unquote, corporate look and feel for your documents
+
+00:10:23.560 --> 00:10:26.079
+in that project for everyone
+
+00:10:26.080 --> 00:10:28.919
+and no one else has to care about
+
+00:10:28.920 --> 00:10:35.119
+how this document has to be configured.
+
+00:10:35.120 --> 00:10:38.679
+One of the things that I really like in this approach
+
+00:10:38.680 --> 00:10:40.439
+is that it is a grow-as-you-go.
+
+00:10:40.440 --> 00:10:44.079
+So, for example, you can start with something like that,
+
+00:10:44.080 --> 00:10:48.439
+which is I have my fonts, my basic fonts for main,
+
+00:10:48.440 --> 00:10:51.479
+which is the Serif font, for sans,
+
+00:10:51.480 --> 00:10:54.079
+which is the Sans Serif font, for maths,
+
+00:10:54.080 --> 00:10:58.639
+and for the mono, with some features like to make them scale.
+
+00:10:58.640 --> 00:11:02.679
+This is something that is uh provided by you
+
+00:11:02.680 --> 00:11:05.359
+through the font spec package
+
+00:11:05.360 --> 00:11:08.959
+and you're happy with it and you work with it
+
+00:11:08.960 --> 00:11:11.919
+and given a in a given moment
+
+00:11:11.920 --> 00:11:14.439
+you go and you have your own problems
+
+00:11:14.440 --> 00:11:16.599
+and or your own challenge
+
+00:11:16.600 --> 00:11:20.279
+and you need to have for example emojis for one of the fonts
+
+00:11:20.280 --> 00:11:24.959
+and what you do is in this case you just add the emojis
+
+00:11:24.960 --> 00:11:31.239
+as a fallback font in in the font that where you want to replace this
+
+00:11:31.240 --> 00:11:36.119
+is this is what i'm doing right now for this presentation and you will see
+
+00:11:36.120 --> 00:11:39.119
+You can always, as I've said,
+
+00:11:39.120 --> 00:11:42.359
+you can always have your dear locals
+
+00:11:42.360 --> 00:11:46.319
+and you can copy that into a working directory
+
+00:11:46.320 --> 00:11:49.439
+which needs special adaptations or has special needs
+
+00:11:49.440 --> 00:11:54.119
+and from there you have that directory
+
+00:11:54.120 --> 00:11:59.079
+with your modified or customized their local study l file
+
+00:11:59.080 --> 00:12:05.439
+so font spec is normally enough
+
+00:12:05.440 --> 00:12:09.999
+but sometimes you can't control all the fonts
+
+00:12:10.000 --> 00:12:15.479
+with font spec only so and there you have a polyglot here
+
+00:12:15.480 --> 00:12:19.319
+and babel coming to your help
+
+00:12:19.320 --> 00:12:21.359
+this may also be the case
+
+00:12:21.360 --> 00:12:25.879
+that you are working in an intended language
+
+00:12:25.880 --> 00:12:28.959
+i don't know which but an intended language and you found
+
+00:12:28.960 --> 00:12:31.279
+and you wanted to see how that was configured
+
+00:12:31.280 --> 00:12:34.999
+and you found the latest example
+
+00:12:35.000 --> 00:12:38.639
+that used Babel or Polyglossia.
+
+00:12:38.640 --> 00:12:42.559
+The exporter provides you three variables
+
+00:12:42.560 --> 00:12:48.679
+to configure both font spec, Polyglossia and Babel.
+
+00:12:48.680 --> 00:12:56.799
+So just as an example of how I picture this is,
+
+00:12:56.800 --> 00:12:59.359
+uh, you find it in the internet,
+
+00:12:59.360 --> 00:13:01.679
+something like that, uh, something like this,
+
+00:13:01.680 --> 00:13:05.599
+because you have your document and you need tie.
+
+00:13:05.600 --> 00:13:09.999
+So, and I found an example in the internet
+
+00:13:10.000 --> 00:13:12.679
+that tells me that I'm going to be using
+
+00:13:12.680 --> 00:13:15.079
+Babel main is going to be English.
+
+00:13:15.080 --> 00:13:17.919
+And I'm also going to have a tie.
+
+00:13:17.920 --> 00:13:22.879
+and then they tell me that for english
+
+00:13:22.880 --> 00:13:26.639
+i'm going to be using noto serif for the main
+
+00:13:26.640 --> 00:13:31.759
+for the main of the serif font noto sans for the sans font
+
+00:13:31.760 --> 00:13:35.799
+and then when i'm writing things in thai
+
+00:13:35.800 --> 00:13:40.119
+i'm going to be using noto serif thai and noto sans thai
+
+00:13:40.120 --> 00:13:42.399
+That's what I see in the internet.
+
+00:13:42.400 --> 00:13:47.159
+So what you can always do, what you would do in this case,
+
+00:13:47.160 --> 00:13:54.279
+is I'm going to get and map the font configurations
+
+00:13:54.280 --> 00:13:59.239
+from the latest into this variable.
+
+00:13:59.240 --> 00:14:03.479
+Things that you have to take into account here
+
+00:14:03.480 --> 00:14:05.919
+is, for example, the language.
+
+00:14:05.920 --> 00:14:11.919
+The language here is Thai. You have the language
+
+00:14:11.920 --> 00:14:16.759
+that you're intending this font for is Thai.
+
+00:14:16.760 --> 00:14:21.279
+So this appears here. In case you don't have any language,
+
+00:14:21.280 --> 00:14:24.799
+like in the first two lines,
+
+00:14:24.800 --> 00:14:27.239
+you just say that the language is nil,
+
+00:14:27.240 --> 00:14:31.439
+which is the language for the default language.
+
+00:14:31.440 --> 00:14:34.799
+The other thing is in my example,
+
+00:14:34.800 --> 00:14:40.039
+in this example that I found in the internet,
+
+00:14:40.040 --> 00:14:46.319
+I have my properties for the fonts in this part in Latex
+
+00:14:46.320 --> 00:14:52.239
+and I put them as properties here.
+
+00:14:52.240 --> 00:14:55.079
+That's the whole idea behind the feature branch.
+
+00:14:55.080 --> 00:15:03.119
+The Babel provide part is also integrated
+
+00:15:03.120 --> 00:15:10.119
+from the Org header, mainly from the language line.
+
+00:15:10.120 --> 00:15:14.639
+We have a variable in case you need to tweak it,
+
+00:15:14.640 --> 00:15:21.079
+but normally the defaults provided by Org are good enough.
+
+00:15:21.080 --> 00:15:27.679
+So what is the rationale behind my take at Latex Fonts Management?
+
+00:15:27.680 --> 00:15:31.359
+And that's something that might be something very personal.
+
+00:15:31.360 --> 00:15:33.759
+When am I using FontSpec?
+
+00:15:33.760 --> 00:15:37.239
+I'm using FontSpec when I'm with Lua or Zlatex
+
+00:15:37.240 --> 00:15:40.279
+and I want fonts that are different
+
+00:15:40.280 --> 00:15:42.439
+from those specified in the Latex class.
+
+00:15:42.440 --> 00:15:49.279
+That's point number one. I will also go for font spec
+
+00:15:49.280 --> 00:15:52.599
+when I need to support scripts,
+
+00:15:52.600 --> 00:15:54.559
+but I'm missing in the fonts I use,
+
+00:15:54.560 --> 00:15:59.479
+and I can use fallback fonts for that. I have two.
+
+00:15:59.480 --> 00:16:05.239
+The only limitation I have here is the following.
+
+00:16:05.240 --> 00:16:09.039
+All languages must be left to right.
+
+00:16:09.040 --> 00:16:12.799
+And if you don't say anything at all,
+
+00:16:12.800 --> 00:16:16.519
+the LATIC backend assumes that you want the dates,
+
+00:16:16.520 --> 00:16:19.159
+standard names for the abstract and so on
+
+00:16:19.160 --> 00:16:21.039
+in American English. if you're using them.
+
+00:16:21.040 --> 00:16:25.439
+In many cases, you're not using any sort of
+
+00:16:25.440 --> 00:16:32.319
+abstract table of contents and so on
+
+00:16:32.320 --> 00:16:37.239
+and you don't need that.
+
+00:16:37.240 --> 00:16:44.599
+The important thing is maybe date management.
+
+00:16:44.600 --> 00:16:50.399
+If you need dates, headings
+
+00:16:50.400 --> 00:16:56.919
+or anything in any other language or locale,
+
+00:16:56.920 --> 00:17:06.599
+then yes, then you need to use Babel or Polyglosia.
+
+00:17:06.600 --> 00:17:12.079
+Choice, Depends. Can use poly loss here,
+
+00:17:12.080 --> 00:17:15.639
+or you can use Babel, whatever you want.
+
+00:17:15.640 --> 00:17:20.079
+Also, in some cases, it will depend
+
+00:17:20.080 --> 00:17:21.839
+if you've been researching a bit
+
+00:17:21.840 --> 00:17:24.119
+of how this is done with pure latest,
+
+00:17:24.120 --> 00:17:25.999
+it will be also depending on, uh,
+
+00:17:26.000 --> 00:17:28.919
+on the examples that you get.
+
+00:17:28.920 --> 00:17:35.719
+So, what can you, when you are using
+
+00:17:35.720 --> 00:17:41.639
+Babel or Polygross here, what do you have?
+
+00:17:41.640 --> 00:17:46.239
+You have your dates, your headings, and so on.
+
+00:17:46.240 --> 00:17:48.279
+You might need to control the text
+
+00:17:48.280 --> 00:17:51.239
+in the sense that what passage
+
+00:17:51.240 --> 00:17:53.479
+is written in what language.
+
+00:17:53.480 --> 00:17:58.119
+For example, for things like hyphenation
+
+00:17:58.120 --> 00:18:01.919
+and some ways of writing the hyphens in a
+
+00:18:01.920 --> 00:18:12.039
+and direct speech and things like that.
+
+00:18:12.040 --> 00:18:17.359
+And the other place where you need
+
+00:18:17.360 --> 00:18:19.199
+other Babel or polyglots here,
+
+00:18:19.200 --> 00:18:24.559
+and you will see that because all examples
+
+00:18:24.560 --> 00:18:26.839
+that you can get for later in this case
+
+00:18:26.840 --> 00:18:30.679
+is when you have a language
+
+00:18:30.680 --> 00:18:38.199
+that uses right to left alignment
+
+00:18:38.200 --> 00:18:40.439
+like Arabic, Hebrew and others.
+
+00:18:40.440 --> 00:18:45.359
+So One note of, I would say, care is you always use the,
+
+00:18:45.360 --> 00:18:46.479
+if you use Unicode fonts
+
+00:18:46.480 --> 00:18:49.359
+that includes the scripts as you need,
+
+00:18:49.360 --> 00:18:51.759
+you will have done, that will be a great leap for you
+
+00:18:51.760 --> 00:18:53.759
+because that simplifies the configuration a lot.
+
+00:18:53.760 --> 00:18:55.359
+Now a couple of demos.
+
+00:18:55.360 --> 00:19:01.079
+I don't know if you've noticed
+
+00:19:01.080 --> 00:19:03.359
+first demo is that I'm using.
+
+00:19:03.360 --> 00:19:05.119
+fonts but are not the official fonts
+
+00:19:05.120 --> 00:19:06.399
+in this Beamer template
+
+00:19:06.400 --> 00:19:07.959
+which is by the way Boadilla.
+
+00:19:07.960 --> 00:19:10.519
+This would be the first thing
+
+00:19:10.520 --> 00:19:14.079
+so I've been using other fonts
+
+00:19:14.080 --> 00:19:17.639
+and they are at least from what I get in class
+
+00:19:17.640 --> 00:19:20.439
+they are more readable than the official
+
+00:19:20.440 --> 00:19:22.439
+than the default fonts in Poliglossi
+
+00:19:22.440 --> 00:19:24.439
+that you get in Babel for the Boadilla theme.
+
+00:19:24.440 --> 00:19:25.959
+Another thing is what I've told you,
+
+00:19:25.960 --> 00:19:27.559
+I have my own things like emojis.
+
+00:19:27.560 --> 00:19:29.799
+Now, if you allow me for a second,
+
+00:19:29.800 --> 00:19:38.399
+I'm going to switch to the Emacs
+
+00:19:38.400 --> 00:19:40.279
+which is running behind the scenes to show you what.
+
+00:19:40.280 --> 00:19:45.719
+Okay, fine. So, this is the presentation.
+
+00:19:45.720 --> 00:19:47.879
+that I have here, and as you see,
+
+00:19:47.880 --> 00:19:50.959
+I'm using Lua Latex and just one spec.
+
+00:19:50.960 --> 00:19:59.479
+given I don't know why I would I would need this
+
+00:19:59.480 --> 00:20:01.079
+this is an English presentation
+
+00:20:01.080 --> 00:20:03.039
+but just to show you what you can do
+
+00:20:03.040 --> 00:20:09.359
+if I go back here and I go to the beginning of the presentation
+
+00:20:09.360 --> 00:20:13.159
+and now what I don't think you're showing anything oh thank you
+
+00:20:13.160 --> 00:20:21.399
+Okay, this is the presentation, right?
+
+00:20:21.400 --> 00:20:33.559
+So what I'm going to do is I'm going to go back
+
+00:20:33.560 --> 00:20:35.839
+and I'm going to show the full screen.
+
+00:20:35.840 --> 00:20:37.199
+And in this full screen,
+
+00:20:37.200 --> 00:20:41.919
+you see the presentation on one side
+
+00:20:41.920 --> 00:20:46.079
+and you see Emacs on the other side. Oh, still nothing.
+
+00:20:46.080 --> 00:20:50.279
+Yeah, we're not seeing your screen at the moment, sorry.
+
+00:20:50.280 --> 00:20:54.079
+Oh, thank you. Thank you for that.
+
+00:20:54.080 --> 00:20:59.959
+Now it's starting to come. Okay. Yay! Fine.
+
+00:20:59.960 --> 00:21:03.479
+So this presentation, I've done it with Lua Latex,
+
+00:21:03.480 --> 00:21:05.839
+and what I add here is font spec and English language.
+
+00:21:05.840 --> 00:21:10.279
+Just to show you, but with the same configuration,
+
+00:21:10.280 --> 00:21:14.279
+with the same font spec configuration,
+
+00:21:14.280 --> 00:21:15.439
+but adding Polyglossia.
+
+00:21:15.440 --> 00:21:23.159
+I just have enough with adding polygons here
+
+00:21:23.160 --> 00:21:28.799
+with the Spanish language to get my dates correctly
+
+00:21:28.800 --> 00:21:32.559
+and this is something I'm going to see the date in English
+
+00:21:32.560 --> 00:21:46.719
+and if I now go and recompile it in a couple of seconds
+
+00:21:46.720 --> 00:21:48.999
+you will see that the data is in Spanish.
+
+00:21:49.000 --> 00:21:53.879
+We are using the same Which I can show by the way.
+
+00:21:53.880 --> 00:21:58.079
+I see just by adding polyglyphs here.
+
+00:21:58.080 --> 00:21:59.439
+I can get my dates in Spanish.
+
+00:21:59.440 --> 00:22:09.559
+What I have included the the locals in the.
+
+00:22:09.560 --> 00:22:14.999
+In this in this lines, but just to discuss it a bit more.
+
+00:22:15.000 --> 00:22:19.439
+I have it for all the presentations.
+
+00:22:19.440 --> 00:22:24.319
+I think it was here. No. For the demo.
+
+00:22:24.320 --> 00:22:27.719
+For the presentations I use for MX conferences.
+
+00:22:27.720 --> 00:22:31.119
+I have it and it's something like this.
+
+00:22:31.120 --> 00:22:37.359
+actually you don't need a fallback
+
+00:22:37.360 --> 00:22:39.439
+for for the main font here
+
+00:22:39.440 --> 00:22:44.239
+because the presentations are done with the sans font
+
+00:22:44.240 --> 00:22:46.559
+so the only thing that I would really need
+
+00:22:46.560 --> 00:22:48.199
+would be something like this
+
+00:22:48.200 --> 00:22:53.359
+this can be commented and the same happens here
+
+00:22:53.360 --> 00:22:56.159
+with the model this can be also commented
+
+00:22:56.160 --> 00:23:00.399
+and the only thing where I would really need
+
+00:23:00.400 --> 00:23:02.119
+a full back font is here
+
+00:23:02.120 --> 00:23:04.319
+and what this is telling me is that
+
+00:23:04.320 --> 00:23:07.079
+you have a full back for the emoji
+
+00:23:07.080 --> 00:23:09.799
+for the emoji script
+
+00:23:09.800 --> 00:23:15.399
+and you need to use the apple color emoji font with A modifier
+
+00:23:15.400 --> 00:23:18.759
+which in this case is that you need
+
+00:23:18.760 --> 00:23:21.359
+to have the half-word renderer.
+
+00:23:21.360 --> 00:23:24.599
+That's the only thing that you really need.
+
+00:23:24.600 --> 00:23:26.679
+Where do I get all these things from?
+
+00:23:26.680 --> 00:23:29.039
+All these things I get from the different parts
+
+00:23:29.040 --> 00:23:32.079
+and from different scripts in the Internet.
+
+00:23:32.080 --> 00:23:38.039
+I also have a couple of other things to show.
+
+00:23:38.040 --> 00:23:42.919
+For example, first of all, I do not need this.
+
+00:23:42.920 --> 00:23:44.749
+This is a letter that I've been writing this morning
+
+00:23:44.750 --> 00:23:55.640
+and I'm not using the full feature branches at all
+
+00:23:55.641 --> 00:23:58.119
+because I just needed a sans font
+
+00:23:58.120 --> 00:24:02.119
+and it's going to be a letter that I'm writing in.
+
+00:24:02.120 --> 00:24:06.119
+with the sans font and the only thing I need
+
+00:24:06.120 --> 00:24:09.119
+was Spanish for the date anyhow
+
+00:24:09.120 --> 00:24:14.719
+how did what was my first thing that I did
+
+00:24:14.720 --> 00:24:19.639
+with the back end back in I think it was April
+
+00:24:19.640 --> 00:24:23.079
+we had a this comes from the mailing list
+
+00:24:23.080 --> 00:24:26.759
+we had someone who had this who had this problem right
+
+00:24:26.760 --> 00:24:29.559
+and he wanted to add emojis
+
+00:24:29.560 --> 00:24:33.039
+and he had problems with the verbatim font
+
+00:24:33.040 --> 00:24:35.279
+And that's how everything got started.
+
+00:24:35.280 --> 00:24:42.599
+If you now go and I get my period
+
+00:24:42.600 --> 00:24:44.599
+of latex for that running.
+
+00:24:44.600 --> 00:24:50.559
+Well, I actually, all my latex is supported for that.
+
+00:24:50.560 --> 00:24:58.119
+And this was what I showed in one of the Emacs, Org Mode meetups.
+
+00:24:58.120 --> 00:25:00.079
+And there you see that We have the emojis.
+
+00:25:00.080 --> 00:25:06.879
+We had the fonts for the different things. We had maps.
+
+00:25:06.880 --> 00:25:13.799
+And you could even go and add scripts
+
+00:25:13.800 --> 00:25:16.319
+and little passages and different scripts.
+
+00:25:16.320 --> 00:25:22.359
+And this was done with the same principles that I want.
+
+00:25:22.360 --> 00:25:25.439
+I have my main font. I have the emojis.
+
+00:25:25.440 --> 00:25:30.559
+and I want, I have my son's phone and I have the emojis,
+
+00:25:30.560 --> 00:25:32.959
+the Han for Japanese and the Kana for Japanese,
+
+00:25:32.960 --> 00:25:36.799
+so that these characters here,
+
+00:25:36.800 --> 00:25:40.679
+both in the sons and in the serif passages
+
+00:25:40.680 --> 00:25:44.399
+are included correctly in the PDF.
+
+00:25:44.400 --> 00:25:49.999
+And a third thing of what you can do
+
+00:25:50.000 --> 00:25:53.439
+I've also shown this so this is more
+
+00:25:53.440 --> 00:25:55.799
+for people who have not seen it
+
+00:25:55.800 --> 00:26:01.399
+this is a side-by-side package a passage of
+
+00:26:01.400 --> 00:26:04.919
+well actually the beginning of the analysis by Xenophon
+
+00:26:04.920 --> 00:26:12.919
+both in in Greek and in German with some comments
+
+00:26:12.920 --> 00:26:18.679
+and if I go this is this is done with Polyglossia
+
+00:26:18.680 --> 00:26:25.279
+so if I go once again and produce
+
+00:26:25.280 --> 00:26:32.039
+the PDF for this just a second
+
+00:26:32.040 --> 00:26:41.119
+Come on. There you are. You get this.
+
+00:26:41.120 --> 00:26:46.399
+And there you see different fonts.
+
+00:26:46.400 --> 00:26:48.239
+Which fonts am I using for this?
+
+00:26:48.240 --> 00:26:51.279
+I'm using for the main font for me is Swissere.
+
+00:26:51.280 --> 00:27:01.479
+This listing is produced with Deja Vu Sansponor.
+
+00:27:01.480 --> 00:27:13.359
+And using Polyglos here, I'm able to go and define
+
+00:27:13.360 --> 00:27:15.799
+the Greek polytone for the variant,
+
+00:27:15.800 --> 00:27:18.799
+for the Serif variant with the Noto Serif font,
+
+00:27:18.800 --> 00:27:26.199
+just to differentiate it from the German text.
+
+00:27:26.200 --> 00:27:30.279
+And nice thing is that both in the German text
+
+00:27:30.280 --> 00:27:37.359
+You see for example here and with the Greek text
+
+00:27:37.360 --> 00:27:40.879
+everything is scaled to match
+
+00:27:40.880 --> 00:27:44.119
+the lower case of the main font which is free serif.
+
+00:27:44.120 --> 00:27:45.879
+So that everything looks
+
+00:27:45.880 --> 00:27:49.359
+extremely uniform and nice to read.
+
+00:27:49.360 --> 00:27:53.759
+So that's what you want to do.
+
+00:27:53.760 --> 00:27:56.519
+That's what you can do with this.
+
+00:27:56.520 --> 00:28:00.759
+Just a couple of final words on this.
+
+00:28:00.760 --> 00:28:17.519
+I want to thank once again Juan Manuel Garcia and Jim Crump
+
+00:28:17.520 --> 00:28:19.919
+for what they have shared.
+
+00:28:19.920 --> 00:28:24.079
+And I also want to thank everybody
+
+00:28:24.080 --> 00:28:26.479
+for productive contributions to the discussion.
+
+00:28:26.480 --> 00:28:32.159
+I'm saying this because I think I need a longer rest
+
+00:28:32.160 --> 00:28:34.839
+and I'm going to be leaving
+
+00:28:34.840 --> 00:28:38.559
+the feature fund untouched for a couple of months
+
+00:28:38.560 --> 00:28:41.719
+so that people can take the feature branch
+
+00:28:41.720 --> 00:28:43.519
+untouched for a couple of months.
+
+00:28:43.520 --> 00:28:47.599
+to see if people want to use it and how they want to use it
+
+00:28:47.600 --> 00:28:49.919
+and then maybe in the future we can discuss
+
+00:28:49.920 --> 00:28:52.559
+if we want to integrate it or not
+
+00:28:52.560 --> 00:28:58.839
+or if people need it and all that. Now questions, comments?
+
+00:28:58.840 --> 00:29:41.279
+I think there was one question on. Beautiful for.
+
+00:29:41.280 --> 00:29:47.119
+I think that goes beyond fonts right.
+
+00:29:47.120 --> 00:29:52.839
+Someone is asking what about how is about video
+
+00:29:52.840 --> 00:29:56.319
+mainly MP4 support on ox-latex.
+
+00:29:56.320 --> 00:29:58.799
+I started the presentations with many videos.
+
+00:29:58.800 --> 00:30:07.839
+This is something that really pushed me back using ox-latex.
+
+00:30:07.840 --> 00:30:18.799
+What I would say to this is I mean this goes beyond
+
+00:30:18.800 --> 00:30:24.319
+what we're discussing here with fonts.
+
+00:30:24.320 --> 00:30:29.319
+I would advise you to go and get the same
+
+00:30:29.320 --> 00:30:35.239
+or have the same thing that I did
+
+00:30:35.240 --> 00:30:39.119
+which was first of all try to write it in latex
+
+00:30:39.120 --> 00:30:49.599
+and then Once you have the minimal working examples,
+
+00:30:49.600 --> 00:30:53.159
+you can get the latest parts
+
+00:30:53.160 --> 00:30:58.159
+integrated into your own presentation.
+
+00:30:58.160 --> 00:31:01.319
+That's what I've been doing.
+
+00:31:01.320 --> 00:31:04.519
+By the way, I still do it, for example, not in this,
+
+00:31:04.520 --> 00:31:06.079
+but for my lectures,
+
+00:31:06.080 --> 00:31:09.119
+I have a lot of I'm using a lot of ticks
+
+00:31:09.120 --> 00:31:12.479
+to do graphs and animated graphs.
+
+00:31:12.480 --> 00:31:18.319
+And that's begin export later and export later.
+
+00:31:18.320 --> 00:31:20.159
+That's what I'm doing.
+
+00:31:20.160 --> 00:31:28.999
+Videos are generally a bit tricky because you cannot
+
+00:31:29.000 --> 00:31:35.119
+So I think there is something called PDF-PC that can,
+
+00:31:35.120 --> 00:31:37.399
+this provides a lot of cloud package
+
+00:31:37.400 --> 00:31:39.079
+where you can include videos
+
+00:31:39.080 --> 00:31:44.399
+and then they can be played through that specific program.
+
+00:31:44.400 --> 00:31:46.239
+And JavaScript embedding,
+
+00:31:46.240 --> 00:31:49.999
+that can only be done through Acrobat Reader,
+
+00:31:50.000 --> 00:31:54.519
+which is like also finicky. Sure, yes.
+
+00:31:54.520 --> 00:32:03.999
+As you said there are many things that need to be changed.
+
+00:32:04.000 --> 00:32:07.199
+But I mean it's always a thing of taking it
+
+00:32:07.200 --> 00:32:11.359
+and trying to see what you can do
+
+00:32:11.360 --> 00:32:13.319
+and what the specifics are.
+
+00:32:13.320 --> 00:32:17.079
+Maybe this can be done with Acrobat
+
+00:32:17.080 --> 00:32:23.959
+and with a couple of extra packages and who knows.
+
+00:32:23.960 --> 00:32:26.359
+And you can always keep it as as late
+
+00:32:26.360 --> 00:32:34.599
+as fragments inside Org, I think. Any other questions?
diff --git a/2025/captions/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--answers.vtt b/2025/captions/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--answers.vtt
new file mode 100644
index 00000000..f35c2d27
--- /dev/null
+++ b/2025/captions/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--answers.vtt
@@ -0,0 +1,1591 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:01.759
+So let's, I'm just going to answer
+
+00:00:01.760 --> 00:00:04.399
+the questions as I see them on the pad.
+
+00:00:04.400 --> 00:00:07.079
+So yeah, this first question is really good.
+
+00:00:07.080 --> 00:00:09.919
+And I think it's actually this great thing
+
+00:00:09.920 --> 00:00:12.719
+that I did not mention is that like,
+
+00:00:12.720 --> 00:00:14.119
+if you have unsaved buffers,
+
+00:00:14.120 --> 00:00:17.679
+which is, you know, when you're actually doing editing,
+
+00:00:17.680 --> 00:00:21.999
+most buffers are unsaved.
+
+00:00:22.000 --> 00:00:25.959
+really you need something tightly integrated with Emacs
+
+00:00:25.960 --> 00:00:27.479
+to deal with that.
+
+00:00:27.480 --> 00:00:29.039
+So things like, you know,
+
+00:00:29.040 --> 00:00:30.239
+I demonstrated Copilot,
+
+00:00:30.240 --> 00:00:32.519
+I demonstrated Gptel,
+
+00:00:32.520 --> 00:00:35.439
+things like those things, things like Ellama,
+
+00:00:35.440 --> 00:00:38.719
+these things will all work with unsaved buffers
+
+00:00:38.720 --> 00:00:43.959
+because they work via, you know, the input is the buffer.
+
+00:00:43.960 --> 00:00:45.199
+as opposed to a file.
+
+00:00:45.200 --> 00:00:48.519
+Things like Claude Code, Gemini Code, et cetera,
+
+00:00:48.520 --> 00:00:49.519
+those are working with files.
+
+00:00:49.520 --> 00:00:51.639
+They have no idea what is going on with your buffers.
+
+00:00:51.640 --> 00:00:55.119
+And it could be that you can solve this problem
+
+00:00:55.120 --> 00:00:56.799
+by using this thing called MCP,
+
+00:00:56.800 --> 00:01:02.839
+which kind of gives the coding agent
+
+00:01:02.840 --> 00:01:05.119
+a way to see anything in particular.
+
+00:01:05.120 --> 00:01:06.799
+In this case, it would be Emacs
+
+00:01:06.800 --> 00:01:07.799
+and the state of your buffers.
+
+00:01:07.800 --> 00:01:11.319
+But I think that's not a particularly great solution
+
+00:01:11.320 --> 00:01:13.839
+if that's how you want to work.
+
+00:01:13.840 --> 00:01:15.719
+But I think that's kind of like
+
+00:01:15.720 --> 00:01:17.359
+if you're in the Claude Code
+
+00:01:17.360 --> 00:01:19.759
+that kind of world where you know things are happening,
+
+00:01:19.760 --> 00:01:24.679
+basically through a terminal.
+
+00:01:24.680 --> 00:01:26.399
+It's okay, like you typically
+
+00:01:26.400 --> 00:01:28.639
+would not be doing a mix of things.
+
+00:01:28.640 --> 00:01:30.119
+You would just be doing things either
+
+00:01:30.120 --> 00:01:32.399
+in one place or the other place.
+
+00:01:32.400 --> 00:01:33.599
+You know, it could be that you switch off
+
+00:01:33.600 --> 00:01:34.359
+from one place to another,
+
+00:01:34.360 --> 00:01:36.399
+but you wouldn't be doing both at the same time.
+
+00:01:36.400 --> 00:01:40.279
+And it's kind of a, you tend to just fall into one,
+
+00:01:40.280 --> 00:01:41.679
+you know,
+
+00:01:41.680 --> 00:01:44.759
+editing outside the editor or editing inside the editor.
+
+00:01:44.760 --> 00:01:47.039
+And I find myself switching between the two
+
+00:01:47.040 --> 00:01:48.959
+when I use those kinds of tools.
+
+00:01:48.960 --> 00:01:51.439
+So David, let me interrupt you for just one moment.
+
+00:01:51.440 --> 00:01:53.519
+I want to just take care to read out
+
+00:01:53.520 --> 00:01:55.079
+the question that we're answering.
+
+00:01:55.080 --> 00:01:58.999
+The question was, my biggest question with AI code editors
+
+00:01:59.000 --> 00:02:00.999
+trying to integrate with Emacs is,
+
+00:02:01.000 --> 00:02:04.599
+are the AI code editors able to read unsaved buffers
+
+00:02:04.600 --> 00:02:06.319
+and not just saved files?
+
+00:02:06.320 --> 00:02:11.719
+Sorry. Yes. Yeah. Thank you for reminding me to.
+
+00:02:11.720 --> 00:02:13.519
+I will read the questions from now on.
+
+00:02:13.520 --> 00:02:16.599
+But yes, that's what I think about.
+
+00:02:16.600 --> 00:02:20.319
+that interesting questions about unsaved buffers.
+
+00:02:20.320 --> 00:02:22.239
+The next question is,
+
+00:02:22.240 --> 00:02:23.799
+I don't agree with the comment you made
+
+00:02:23.800 --> 00:02:25.199
+about VS code usage dying out
+
+00:02:25.200 --> 00:02:26.719
+because I see companies and products
+
+00:02:26.720 --> 00:02:28.879
+pushing for tightly integrated agent
+
+00:02:28.880 --> 00:02:31.319
+and products like Windsurf.
+
+00:02:31.320 --> 00:02:33.239
+So thoughts on that?
+
+00:02:33.240 --> 00:02:35.879
+Yeah, I mean, it's really hard
+
+00:02:35.880 --> 00:02:36.999
+to be certain of anything,
+
+00:02:37.000 --> 00:02:38.439
+like things are changing very fast
+
+00:02:38.440 --> 00:02:40.639
+and it's very hard to predict the future.
+
+00:02:40.640 --> 00:02:47.839
+But the trend I see is that um,
+
+00:02:47.840 --> 00:02:50.919
+the sort of outside editing experience
+
+00:02:50.920 --> 00:02:53.519
+where you just kind of instruct a model,
+
+00:02:53.520 --> 00:02:56.759
+what to do is getting better.
+
+00:02:56.760 --> 00:02:58.679
+And as long as that keeps getting better,
+
+00:02:58.680 --> 00:03:00.839
+I think that's going to lessen the demand
+
+00:03:00.840 --> 00:03:04.879
+for these tightly integrated editing experiences.
+
+00:03:04.880 --> 00:03:10.839
+So it could be that, um, a lot of people,
+
+00:03:10.840 --> 00:03:12.839
+especially in, you know, corporate environments
+
+00:03:12.840 --> 00:03:14.279
+just start using,
+
+00:03:14.280 --> 00:03:15.599
+they're going to use whatever is
+
+00:03:15.600 --> 00:03:17.959
+going to make the most productive.
+
+00:03:17.960 --> 00:03:22.399
+And I think right now, it's not clear that that will be,
+
+00:03:22.400 --> 00:03:25.079
+you know, the very agent-based, you know,
+
+00:03:25.080 --> 00:03:27.359
+command line-centric way of doing things.
+
+00:03:27.360 --> 00:03:31.239
+But it certainly, the trend is, if that continues,
+
+00:03:31.240 --> 00:03:33.319
+I think it probably will be like that.
+
+00:03:33.320 --> 00:03:35.479
+So I think we'll have to see.
+
+00:03:35.480 --> 00:03:37.679
+I don't think your opinion is unreasonable.
+
+00:03:37.680 --> 00:03:40.319
+I guess I'm kind of cautiously saying
+
+00:03:40.320 --> 00:03:43.199
+I think it's gonna be the opposite, but I guess we'll see.
+
+00:03:43.200 --> 00:03:47.759
+Like, let's reconvene in a year and see what happens.
+
+00:03:47.760 --> 00:03:49.159
+Uh, the 3rd question answer,
+
+00:03:49.160 --> 00:03:55.319
+do you have any thoughts about the environmental costs
+
+00:03:55.320 --> 00:03:57.079
+of using either the training
+
+00:03:57.080 --> 00:03:59.799
+of the models are we can download or use locally
+
+00:03:59.800 --> 00:04:02.359
+or the larger commercial models used from the cloud.
+
+00:04:02.360 --> 00:04:09.839
+Um, I think. The, you know, I'm on social media,
+
+00:04:09.840 --> 00:04:13.039
+probably a little bit more than I should be.
+
+00:04:13.040 --> 00:04:15.719
+And I do see a lot of discussion there
+
+00:04:15.720 --> 00:04:18.639
+and a lot of concern about the environmental costs of using LLMs.
+
+00:04:18.640 --> 00:04:22.799
+I've looked into this as I'm also concerned
+
+00:04:22.800 --> 00:04:27.199
+about keeping my environmental footprint personally down.
+
+00:04:27.200 --> 00:04:29.199
+And I do this in many ways,
+
+00:04:29.200 --> 00:04:31.319
+but I certainly don't want to kind of like blow that all the water
+
+00:04:31.320 --> 00:04:35.039
+because I'm using LLMs so much.
+
+00:04:35.040 --> 00:04:38.359
+I think that the concerns are mostly overblown.
+
+00:04:38.360 --> 00:04:41.839
+There's a concern that, well, it uses a lot of energy.
+
+00:04:41.840 --> 00:04:46.599
+In aggregate, the total amount of energy
+
+00:04:46.600 --> 00:04:50.559
+used by the data centers in the US is a few percent.
+
+00:04:50.560 --> 00:04:53.839
+And this is a fraction. I think this is like LM's account
+
+00:04:53.840 --> 00:04:56.719
+for something like 20% now
+
+00:04:56.720 --> 00:05:02.479
+of all data center usage, which is a lot.
+
+00:05:02.480 --> 00:05:03.959
+But Those data centers are doing lots of things.
+
+00:05:03.960 --> 00:05:05.239
+They all need to be water cooled.
+
+00:05:05.240 --> 00:05:08.679
+Um, if you like per LLM prompt,
+
+00:05:08.680 --> 00:05:11.399
+the costs are relatively small
+
+00:05:11.400 --> 00:05:13.239
+and by relatively small, I mean,
+
+00:05:13.240 --> 00:05:14.999
+you know, people have said online,
+
+00:05:15.000 --> 00:05:17.879
+well, it's like a few bottles of water per prompt.
+
+00:05:17.880 --> 00:05:20.119
+That, that is not true. It is much, much less than that.
+
+00:05:20.120 --> 00:05:21.359
+It's a fraction of that.
+
+00:05:21.360 --> 00:05:25.119
+So, uh, I don't think the answer is nothing,
+
+00:05:25.120 --> 00:05:28.759
+but I would say it's, I would say you probably,
+
+00:05:28.760 --> 00:05:30.799
+if you want the most bang for your environmental buck,
+
+00:05:30.800 --> 00:05:32.879
+probably the best thing for you to do
+
+00:05:32.880 --> 00:05:35.799
+is take less flights and things like that.
+
+00:05:35.800 --> 00:05:37.319
+Like, yes, you can cut down on this,
+
+00:05:37.320 --> 00:05:40.559
+but I think it's pretty marginal at the moment.
+
+00:05:40.560 --> 00:05:43.079
+We do probably need to think about the total costs
+
+00:05:43.080 --> 00:05:44.599
+like of humanity using all of this.
+
+00:05:44.600 --> 00:05:46.519
+Like a lot of stuff you'll see
+
+00:05:46.520 --> 00:05:48.759
+corporations are using a lot of these things.
+
+00:05:48.760 --> 00:05:52.079
+And so like, just like if you look
+
+00:05:52.080 --> 00:05:54.359
+at water usage or energy uses in total,
+
+00:05:54.360 --> 00:05:56.639
+it's like really corporations that are using this.
+
+00:05:56.640 --> 00:05:58.519
+So there might, there's a lot of leverage there
+
+00:05:58.520 --> 00:06:01.399
+to make things more efficient as opposed to personal use.
+
+00:06:01.400 --> 00:06:06.119
+So I think it's wise to be cautious,
+
+00:06:06.120 --> 00:06:09.079
+but I think it's okay, I think, at least for personal use.
+
+00:06:09.080 --> 00:06:13.159
+The next question is another,
+
+00:06:13.160 --> 00:06:20.959
+yeah, this is also disagreeing with me about VS Code,
+
+00:06:20.960 --> 00:06:23.839
+but it says, I must say I liked your conclusion,
+
+00:06:23.840 --> 00:06:26.719
+but I differ insofar as you said that VS Code differs from Emacs
+
+00:06:26.720 --> 00:06:30.479
+because the former is not as easy to adapt as the latter.
+
+00:06:30.480 --> 00:06:33.559
+But why should Microsoft not adapt VS Code
+
+00:06:33.560 --> 00:06:35.759
+as we adapt Emacs for the new era of coding?
+
+00:06:35.760 --> 00:06:38.159
+And why would VS Code be harder hit?
+
+00:06:38.160 --> 00:06:43.599
+Could you please elaborate on this point? Yeah, thanks.
+
+00:06:43.600 --> 00:06:46.279
+This is a good question.
+
+00:06:46.280 --> 00:06:50.399
+I think maybe I wasn't as sharp on my point as I could be.
+
+00:06:50.400 --> 00:06:51.239
+Because I think the core
+
+00:06:51.240 --> 00:06:56.479
+of what I'm saying is like, there is a going to be a trend.
+
+00:06:56.480 --> 00:06:58.679
+I believe there will be a trend away from editing.
+
+00:06:58.680 --> 00:07:01.039
+And if we are going to be editing less,
+
+00:07:01.040 --> 00:07:04.559
+I think VS Code, like people will be in editors less.
+
+00:07:04.560 --> 00:07:06.919
+And that means people will be in VS Code less,
+
+00:07:06.920 --> 00:07:09.759
+people will probably be in Emacs less.
+
+00:07:09.760 --> 00:07:13.719
+And yes, I think you can, VS Code
+
+00:07:13.720 --> 00:07:15.399
+is to some degree extensible.
+
+00:07:15.400 --> 00:07:21.559
+but I think there's less of a community, or that is,
+
+00:07:21.560 --> 00:07:23.399
+I think the people using Emacs
+
+00:07:23.400 --> 00:07:25.319
+have used Emacs for a long time.
+
+00:07:25.320 --> 00:07:27.119
+They're going to continue to use Emacs.
+
+00:07:27.120 --> 00:07:28.279
+I speak for myself, but I know
+
+00:07:28.280 --> 00:07:30.119
+a lot of people here are kind of like this,
+
+00:07:30.120 --> 00:07:33.279
+and they're going to just, like,
+
+00:07:33.280 --> 00:07:37.759
+we have a lot of momentum to keep doing things in Emacs,
+
+00:07:37.760 --> 00:07:41.079
+and especially because we have a lot of things
+
+00:07:41.080 --> 00:07:42.799
+that we already do in Emacs.
+
+00:07:42.800 --> 00:07:45.079
+We do to-do lists and, you know, with org mode
+
+00:07:45.080 --> 00:07:47.479
+and some people read email
+
+00:07:47.480 --> 00:07:49.039
+and some people are using
+
+00:07:49.040 --> 00:07:50.959
+shells in Emacs and all these things,
+
+00:07:50.960 --> 00:07:53.959
+I think will make Emacs
+
+00:07:53.960 --> 00:07:55.559
+kind of a better environment
+
+00:07:55.560 --> 00:07:59.599
+if you want to do various editing like things in Emacs.
+
+00:07:59.600 --> 00:08:05.359
+In, you know, in an editing environment,
+
+00:08:05.360 --> 00:08:07.119
+because I think just emails can edit
+
+00:08:07.120 --> 00:08:09.239
+more types of things I think will naturally
+
+00:08:09.240 --> 00:08:10.959
+be a bit more useful than VS code,
+
+00:08:10.960 --> 00:08:14.079
+which people are really just using to edit code
+
+00:08:14.080 --> 00:08:16.799
+and if people find it less useful to edit code.
+
+00:08:16.800 --> 00:08:20.919
+I think it's VS code will be harder hit than emails
+
+00:08:20.920 --> 00:08:24.239
+because that's its whole like that's in the name
+
+00:08:24.240 --> 00:08:25.559
+like the whole reason for it
+
+00:08:25.560 --> 00:08:27.359
+to be doing things as to edit code.
+
+00:08:27.360 --> 00:08:30.839
+So I think that it's it's vulnerable
+
+00:08:30.840 --> 00:08:31.959
+in a way that Emacs isn't
+
+00:08:31.960 --> 00:08:34.519
+just because emacs is so very...
+
+00:08:34.520 --> 00:08:40.119
+you know, it's, it could do so many things
+
+00:08:40.120 --> 00:08:42.719
+and and people use it for so many different kinds of things
+
+00:08:42.720 --> 00:08:46.079
+that it's I think it's going to be
+
+00:08:46.080 --> 00:08:46.999
+a little bit more resilient.
+
+00:08:47.000 --> 00:08:48.879
+But as I said with the present.
+
+00:08:48.880 --> 00:08:52.639
+For those of us that are using Emacs,
+
+00:08:52.640 --> 00:08:55.159
+it's everywhere for us.
+
+00:08:55.160 --> 00:08:58.359
+Not necessarily everyone is an I live in Emacs person,
+
+00:08:58.360 --> 00:09:00.279
+but whatever you're using Emacs for,
+
+00:09:00.280 --> 00:09:02.999
+it is the thing you reach for to do that thing.
+
+00:09:03.000 --> 00:09:06.639
+Is that touching on the point?
+
+00:09:06.640 --> 00:09:09.079
+Yeah, that's a great way to say it.
+
+00:09:09.080 --> 00:09:12.439
+Thank you. Thank you, Colin. Yeah.
+
+00:09:12.440 --> 00:09:14.039
+Thank you. Thank you for that question.
+
+00:09:14.040 --> 00:09:18.759
+Do you think we're falling behind in productivity as Emacs users
+
+00:09:18.760 --> 00:09:19.959
+compared to all these VS code forks
+
+00:09:19.960 --> 00:09:21.799
+that have a thousand button and text boxes everywhere,
+
+00:09:21.800 --> 00:09:24.319
+which are basically much richer UIs,
+
+00:09:24.320 --> 00:09:25.719
+which are basically web pages?
+
+00:09:25.720 --> 00:09:28.799
+I do think Emacs is falling behind in some ways.
+
+00:09:28.800 --> 00:09:32.519
+I mean, it's definitely showing its age a little bit,
+
+00:09:32.520 --> 00:09:35.079
+especially you mentioned richer UIs
+
+00:09:35.080 --> 00:09:36.519
+that are basically web pages.
+
+00:09:36.520 --> 00:09:41.159
+I mean, this I think is one of the big problems Emacs has
+
+00:09:41.160 --> 00:09:46.479
+is that it uses a very, you know, a much more ancient way
+
+00:09:46.480 --> 00:09:49.799
+of kind of doing UIs that is not particularly flexible
+
+00:09:49.800 --> 00:09:55.959
+and not particularly comfortable for any modern UI coder.
+
+00:09:55.960 --> 00:09:58.639
+And I think if you look at the Emacs stuff out there,
+
+00:09:58.640 --> 00:10:01.959
+like, yes, you can do a few things with UIs.
+
+00:10:01.960 --> 00:10:04.759
+You can have some amount of UI richness,
+
+00:10:04.760 --> 00:10:06.279
+but it's pretty limited.
+
+00:10:06.280 --> 00:10:07.839
+And I kind of, if there's one thing
+
+00:10:07.840 --> 00:10:09.079
+I could wish for in Emacs,
+
+00:10:09.080 --> 00:10:12.519
+it's sort of like, I kind of wish Emacs could be on a,
+
+00:10:12.520 --> 00:10:18.199
+could be built on top of basically like Atom or something like that,
+
+00:10:18.200 --> 00:10:20.399
+where it's like a web framework
+
+00:10:20.400 --> 00:10:24.639
+that allows us to write actual rich pages,
+
+00:10:24.640 --> 00:10:29.639
+rich UIs in a modern style using things like CSS
+
+00:10:29.640 --> 00:10:33.599
+instead of the kinds of things Emacs lets you do.
+
+00:10:33.600 --> 00:10:37.199
+But that said, that is an advantage
+
+00:10:37.200 --> 00:10:38.959
+of VS Code and other editors like that.
+
+00:10:38.960 --> 00:10:45.079
+I think that Emacs does a good job
+
+00:10:45.080 --> 00:10:46.719
+of eventually catching up
+
+00:10:46.720 --> 00:10:49.759
+to all sorts of things people are doing in other editors.
+
+00:10:49.760 --> 00:10:52.599
+It's often that other editors get there first,
+
+00:10:52.600 --> 00:10:55.479
+but there's a lot of momentum
+
+00:10:55.480 --> 00:10:57.839
+to kind of keep Emacs fresh, keep it modern.
+
+00:10:57.840 --> 00:11:00.119
+And it's pretty easy to- I love that.
+
+00:11:00.120 --> 00:11:05.679
+I forgot about the lag. We do have a little bit of lag,
+
+00:11:05.680 --> 00:11:07.999
+but I just, I find that very captivating.
+
+00:11:08.000 --> 00:11:10.359
+We have with technologies
+
+00:11:10.360 --> 00:11:12.399
+like Apache Cassandra in the database world,
+
+00:11:12.400 --> 00:11:14.879
+we have this idea of eventual concurrency.
+
+00:11:14.880 --> 00:11:17.559
+And you make me think with Emacs,
+
+00:11:17.560 --> 00:11:21.279
+we have this idea of eventual feature parity, right?
+
+00:11:21.280 --> 00:11:23.919
+If a feature stays desirable long enough,
+
+00:11:23.920 --> 00:11:25.879
+Emacs will eventually grow it.
+
+00:11:25.880 --> 00:11:32.159
+I think that's a very contagious idea. Yeah, yeah, thanks.
+
+00:11:32.160 --> 00:11:35.839
+I hope that idea makes sense. And I hope it's correct,
+
+00:11:35.840 --> 00:11:39.919
+because I think that I do want Emacs to continue to succeed.
+
+00:11:39.920 --> 00:11:43.439
+And I personally, using Emacs,
+
+00:11:43.440 --> 00:11:46.479
+do not feel myself falling behind in productivity.
+
+00:11:46.480 --> 00:11:51.759
+That said, there's a lot of ways that Emacs can improve
+
+00:11:51.760 --> 00:11:53.519
+and should improve on this front.
+
+00:11:53.520 --> 00:11:56.599
+And a lot of these ways are pretty fundamental.
+
+00:11:56.600 --> 00:11:59.719
+So I kind of hope people pay a lot of attention
+
+00:11:59.720 --> 00:12:02.439
+to some of these more fundamental lower-level Emacs things
+
+00:12:02.440 --> 00:12:04.879
+that really allows the packages
+
+00:12:04.880 --> 00:12:07.599
+to do more richer and better things.
+
+00:12:07.600 --> 00:12:10.359
+Sorry, you have a ton of questions.
+
+00:12:10.360 --> 00:12:12.279
+I shouldn't be doing so much active listening.
+
+00:12:12.280 --> 00:12:17.479
+No, no, I appreciate your input.
+
+00:12:17.480 --> 00:12:23.079
+OK, next is I've been using Claude Code extensively.
+
+00:12:23.080 --> 00:12:25.519
+I recently switched to Agent Shell with Claude Code.
+
+00:12:25.520 --> 00:12:28.039
+Have you tried it? And what are your thoughts?
+
+00:12:28.040 --> 00:12:30.279
+I actually have tried Agent Shell.
+
+00:12:30.280 --> 00:12:34.719
+And currently, I recorded this video like three months ago.
+
+00:12:34.720 --> 00:12:38.119
+So Agent Shell did not exist then.
+
+00:12:38.120 --> 00:12:39.719
+If Agent Shell did exist,
+
+00:12:39.720 --> 00:12:41.239
+I probably would have demoed it as well.
+
+00:12:41.240 --> 00:12:45.359
+Agent Hell is great in the sense of it's
+
+00:12:45.360 --> 00:12:53.719
+It does use comment, which is the way that I think all Emacs users
+
+00:12:53.720 --> 00:12:57.039
+would prefer to interact with something like Claude Code,
+
+00:12:57.040 --> 00:13:00.199
+or any of those types of tools, which is like, I don't.
+
+00:13:00.200 --> 00:13:02.719
+Um, the other,
+
+00:13:02.720 --> 00:13:05.159
+but it's a trade-off it uses like on the back
+
+00:13:05.160 --> 00:13:06.959
+and it's, it has a common buffer.
+
+00:13:06.960 --> 00:13:08.759
+And then on the back end, it's using a protocol
+
+00:13:08.760 --> 00:13:11.759
+to talk to agent, uh, to Claude Code and other things.
+
+00:13:11.760 --> 00:13:15.399
+The problem is this has a lot of problems.
+
+00:13:15.400 --> 00:13:16.799
+For example, like you don't have
+
+00:13:16.800 --> 00:13:18.319
+completion of slash commands.
+
+00:13:18.320 --> 00:13:22.119
+You don't have, um, if you ask to see the, in Claude Code,
+
+00:13:22.120 --> 00:13:24.319
+you can get a visual representation of. the context window.
+
+00:13:24.320 --> 00:13:30.239
+But you can't do this. I mean, last time I tried,
+
+00:13:30.240 --> 00:13:31.719
+I couldn't do this in agent shell.
+
+00:13:31.720 --> 00:13:33.399
+It's progressing rapidly.
+
+00:13:33.400 --> 00:13:37.479
+But it's not as rich in functionality
+
+00:13:37.480 --> 00:13:40.119
+as using quad code directly.
+
+00:13:40.120 --> 00:13:44.839
+On the other hand, because it's letting Emacs be Emacs
+
+00:13:44.840 --> 00:13:49.239
+and using comment, it's a much better experience
+
+00:13:49.240 --> 00:13:50.919
+to actually give instructions.
+
+00:13:50.920 --> 00:13:56.519
+I think the maximum power, though, is, to me,
+
+00:13:56.520 --> 00:13:58.479
+the best way is still like, you know,
+
+00:13:58.480 --> 00:13:59.399
+do your editing in org mode,
+
+00:13:59.400 --> 00:14:02.359
+and then just tell, you could have,
+
+00:14:02.360 --> 00:14:06.959
+you know, the richer experience of using
+
+00:14:06.960 --> 00:14:13.639
+of using Claude Code in, in it's more like shell like form
+
+00:14:13.640 --> 00:14:15.559
+where everything is, it's much, you know,
+
+00:14:15.560 --> 00:14:17.079
+designed to be used in the terminal,
+
+00:14:17.080 --> 00:14:18.759
+but you don't have to type in that much
+
+00:14:18.760 --> 00:14:20.039
+because you're really doing your typing
+
+00:14:20.040 --> 00:14:21.439
+in order to me, I think there's
+
+00:14:21.440 --> 00:14:23.519
+kind of the sweet spot that I like.
+
+00:14:23.520 --> 00:14:26.639
+Um, but HHL is a great step forward
+
+00:14:26.640 --> 00:14:29.879
+and I think it's, uh, it's quite good to use.
+
+00:14:29.880 --> 00:14:32.119
+And I, I personally use it a lot.
+
+00:14:32.120 --> 00:14:40.479
+Um, OK, so in terms of, next question,
+
+00:14:40.480 --> 00:14:41.839
+in terms of agent selection,
+
+00:14:41.840 --> 00:14:44.639
+what has been your experience with different agents?
+
+00:14:44.640 --> 00:14:48.079
+And have you had any success with hosting your own models
+
+00:14:48.080 --> 00:14:49.439
+and using open weights?
+
+00:14:49.440 --> 00:14:54.159
+I think there's, you know, many people
+
+00:14:54.160 --> 00:14:56.519
+have many different opinions on this.
+
+00:14:56.520 --> 00:15:00.839
+I think Claude Code is, most people I know
+
+00:15:00.840 --> 00:15:03.479
+would say Claude Code is probably,
+
+00:15:03.480 --> 00:15:07.479
+sorry, Cloud is probably the best for coding right now.
+
+00:15:07.480 --> 00:15:09.919
+Gemini can be very hit and miss even with 3.0,
+
+00:15:09.920 --> 00:15:12.519
+but Claude is quite good.
+
+00:15:12.520 --> 00:15:16.119
+4.5 Opus is actually relatively cheap
+
+00:15:16.120 --> 00:15:21.119
+compared to the previous version of 4.1 Opus.
+
+00:15:21.120 --> 00:15:24.239
+There's other models out there,
+
+00:15:24.240 --> 00:15:29.159
+but I think most people just stick with Claude
+
+00:15:29.160 --> 00:15:33.999
+because it's very reliable, it's very good,
+
+00:15:34.000 --> 00:15:36.479
+and nothing is obviously better than that.
+
+00:15:36.480 --> 00:15:41.039
+And as far as DeepSeek is pretty good as well,
+
+00:15:41.040 --> 00:15:42.079
+and then much cheaper.
+
+00:15:42.080 --> 00:15:46.839
+I've had some good luck using that locally,
+
+00:15:46.840 --> 00:15:50.159
+but actually the problem is for my day-to-day machine,
+
+00:15:50.160 --> 00:15:53.079
+like my personal machine,
+
+00:15:53.080 --> 00:15:55.679
+it's not powerful enough to run anything locally.
+
+00:15:55.680 --> 00:15:58.479
+And my work machine, it is powerful enough,
+
+00:15:58.480 --> 00:16:02.079
+but I can spend my company's money at will
+
+00:16:02.080 --> 00:16:03.759
+on more powerful models.
+
+00:16:03.760 --> 00:16:05.519
+So there's really not a lot of incentive
+
+00:16:05.520 --> 00:16:06.439
+for me to run locally.
+
+00:16:06.440 --> 00:16:12.199
+I think, as far as I know, I haven't heard
+
+00:16:12.200 --> 00:16:14.359
+of local models being incredible,
+
+00:16:14.360 --> 00:16:16.879
+but I think you can get reasonable quality with them.
+
+00:16:16.880 --> 00:16:19.159
+That is, especially if you're doing
+
+00:16:19.160 --> 00:16:20.279
+relatively simple things,
+
+00:16:20.280 --> 00:16:25.679
+I think it's pretty reasonable to be using those.
+
+00:16:25.680 --> 00:16:29.959
+Also, they tend to be slower
+
+00:16:29.960 --> 00:16:33.279
+than the models that are elsewhere
+
+00:16:33.280 --> 00:16:36.319
+just because they just have more horsepower,
+
+00:16:36.320 --> 00:16:38.679
+they can churn through those tokens a little quicker.
+
+00:16:38.680 --> 00:16:44.719
+So, I'll just break in here to say,
+
+00:16:44.720 --> 00:16:46.239
+we've got about 7 minutes left
+
+00:16:46.240 --> 00:16:49.239
+before we're cutting over this great discussion so far.
+
+00:16:49.240 --> 00:16:50.839
+I'm very happy to keep going.
+
+00:16:50.840 --> 00:16:55.399
+There's no time limit, but at a certain point,
+
+00:16:55.400 --> 00:16:56.479
+I may have to leave
+
+00:16:56.480 --> 00:16:58.679
+to jump in and prep with the next speaker,
+
+00:16:58.680 --> 00:17:00.359
+but you'll be able to keep going
+
+00:17:00.360 --> 00:17:02.599
+as long as you have the steam for it.
+
+00:17:02.600 --> 00:17:06.159
+Yeah, I think we have 3 questions. Yeah, thanks.
+
+00:17:06.160 --> 00:17:08.239
+I think we have 3 questions.
+
+00:17:08.240 --> 00:17:09.719
+Let's see if we can get through them
+
+00:17:09.720 --> 00:17:17.359
+all in that time period. OK, this one is interesting talk.
+
+00:17:17.360 --> 00:17:20.439
+I'll start by asking it for everything, but is it editing?
+
+00:17:20.440 --> 00:17:23.239
+I think there's more of a comment than a question.
+
+00:17:23.240 --> 00:17:29.719
+So yes, let us all ask, but is it editing?
+
+00:17:29.720 --> 00:17:33.439
+All right. I can move on to the comment area.
+
+00:17:33.440 --> 00:17:40.319
+I'm reading angst in your thinking about AI editing.
+
+00:17:40.320 --> 00:17:41.839
+I think that's true.
+
+00:17:41.840 --> 00:17:44.119
+It says, and the question continues with,
+
+00:17:44.120 --> 00:17:45.159
+what are you excited about?
+
+00:17:45.160 --> 00:17:48.719
+Wow, that's an interesting question.
+
+00:17:48.720 --> 00:17:53.799
+I mean, I think there are possibilities.
+
+00:17:53.800 --> 00:17:58.719
+Like, yes, people are going in sort of a relatively obvious direction
+
+00:17:58.720 --> 00:18:01.439
+with LLMs right now.
+
+00:18:01.440 --> 00:18:04.599
+And I think there's lots of opportunities,
+
+00:18:04.600 --> 00:18:07.839
+clever opportunities to do things
+
+00:18:07.840 --> 00:18:11.079
+we couldn't have thought of Things that are useful,
+
+00:18:11.080 --> 00:18:14.919
+but in ways that are not super obvious to us,
+
+00:18:14.920 --> 00:18:18.519
+and I think I'm still excited
+
+00:18:18.520 --> 00:18:23.839
+about the possibilities of using them in ways that are super helpful
+
+00:18:23.840 --> 00:18:29.319
+and different than. normal. I'll give you an example.
+
+00:18:29.320 --> 00:18:33.199
+This is something that I intend to, I think,
+
+00:18:33.200 --> 00:18:36.479
+post on Reddit in a few days,
+
+00:18:36.480 --> 00:18:39.399
+but I have a extension to eshell
+
+00:18:39.400 --> 00:18:43.439
+where you can prefix a command with at,
+
+00:18:43.440 --> 00:18:45.199
+and then just tell it what you want to do,
+
+00:18:45.200 --> 00:18:46.919
+and it will substitute the command
+
+00:18:46.920 --> 00:18:51.919
+that you are thinking of. Because often, I do not remember.
+
+00:18:51.920 --> 00:18:56.919
+I never remember, like, how do you find a file in a directory tree,
+
+00:18:56.920 --> 00:19:00.159
+you know, recursing? Who can remember how to do that?
+
+00:19:00.160 --> 00:19:04.799
+It's like a find, and there's like a dash print there somewhere.
+
+00:19:04.800 --> 00:19:10.159
+Yes. There are some smart people who remember this
+
+00:19:10.160 --> 00:19:11.199
+but I am not one of them.
+
+00:19:11.200 --> 00:19:13.639
+And so I think like something like this is like you just type out,
+
+00:19:13.640 --> 00:19:17.279
+find me this file, and it will substitute
+
+00:19:17.280 --> 00:19:18.879
+the correct command.
+
+00:19:18.880 --> 00:19:20.999
+I think this is, there's a lot of little,
+
+00:19:21.000 --> 00:19:24.319
+little tweaks you could do like, you know, if you want the AI,
+
+00:19:24.320 --> 00:19:26.679
+it could be there for you. And it will help you.
+
+00:19:26.680 --> 00:19:27.559
+And if you don't want it,
+
+00:19:27.560 --> 00:19:28.919
+it's not going to get in your way.
+
+00:19:28.920 --> 00:19:30.639
+And I think this is where eMath can really shine.
+
+00:19:30.640 --> 00:19:33.079
+It can really take advantage of LLMs,
+
+00:19:33.080 --> 00:19:35.799
+but still remain true to its kind of editing experience,
+
+00:19:35.800 --> 00:19:39.319
+because it's not forcing you to use LLMs all the time.
+
+00:19:39.320 --> 00:19:43.919
+So thank you for that great question.
+
+00:19:43.920 --> 00:19:47.919
+And then the final question. Yep.
+
+00:19:47.920 --> 00:19:50.839
+This final question is, why does it matter to have a richer UI?
+
+00:19:50.840 --> 00:19:53.439
+All this left is basically running and getting the results.
+
+00:19:53.440 --> 00:19:56.119
+I think maybe this is a response to me complaining
+
+00:19:56.120 --> 00:19:58.479
+about Emacs not having a richer UI before,
+
+00:19:58.480 --> 00:20:03.159
+but I think it does matter a lot for all sorts of things.
+
+00:20:03.160 --> 00:20:07.159
+It's hard to kind of explain succinctly
+
+00:20:07.160 --> 00:20:08.519
+because I'm talking about UI
+
+00:20:08.520 --> 00:20:09.759
+and I'd have to show you things.
+
+00:20:09.760 --> 00:20:14.599
+But it should be just something like oh I have an error
+
+00:20:14.600 --> 00:20:15.799
+and I'm using flymake and I'm,
+
+00:20:15.800 --> 00:20:17.759
+I'm using the you know I have options
+
+00:20:17.760 --> 00:20:19.839
+where it'll show me the error in line
+
+00:20:19.840 --> 00:20:22.639
+by like underlining things and having a little message,
+
+00:20:22.640 --> 00:20:24.079
+but like, you know what that message
+
+00:20:24.080 --> 00:20:26.399
+doesn't appear quite right, a lot of the times,
+
+00:20:26.400 --> 00:20:30.159
+or here's another one like. I program in Python a lot.
+
+00:20:30.160 --> 00:20:33.479
+And Python, it's super hard to program in
+
+00:20:33.480 --> 00:20:35.279
+unless you have these little vertical lines
+
+00:20:35.280 --> 00:20:37.599
+that shows you what the indents are. At least I find it.
+
+00:20:37.600 --> 00:20:40.479
+There are two packages that do that.
+
+00:20:40.480 --> 00:20:43.039
+None of them do it particularly well,
+
+00:20:43.040 --> 00:20:44.599
+just because Emacs at its base
+
+00:20:44.600 --> 00:20:45.919
+does not allow you to do this.
+
+00:20:45.920 --> 00:20:47.759
+And so you kind of have to hack it in.
+
+00:20:47.760 --> 00:20:49.479
+And there's lots of ways to mess it up.
+
+00:20:49.480 --> 00:20:52.799
+And when editing, you'll find yourself messing this thing up.
+
+00:20:52.800 --> 00:20:57.159
+regularly. So it doesn't look quite clean.
+
+00:20:57.160 --> 00:20:59.079
+And like, there's little artifacts,
+
+00:20:59.080 --> 00:21:01.039
+or, you know, there's little ways that it,
+
+00:21:01.040 --> 00:21:02.359
+it kind of gets things wrong,
+
+00:21:02.360 --> 00:21:06.279
+or you can, you can get things wrong with it.
+
+00:21:06.280 --> 00:21:10.039
+So I think that, like,
+
+00:21:10.040 --> 00:21:11.879
+there's a lot of issues with that sort of thing.
+
+00:21:11.880 --> 00:21:15.759
+And, and also, like, you know,
+
+00:21:15.760 --> 00:21:17.719
+what if you want to do something like play a video inline,
+
+00:21:17.720 --> 00:21:19.559
+like, I don't know, you might should be able to do that,
+
+00:21:19.560 --> 00:21:20.839
+you might should be able to do anything.
+
+00:21:20.840 --> 00:21:23.799
+But right now it just can't and I think
+
+00:21:23.800 --> 00:21:24.999
+a lot of the reason as well
+
+00:21:25.000 --> 00:21:26.519
+we you know we wanted to be compatible
+
+00:21:26.520 --> 00:21:29.919
+with you know TRS 80 machines or something like that
+
+00:21:29.920 --> 00:21:33.159
+and it's this is important this really is important,
+
+00:21:33.160 --> 00:21:34.719
+but I hope there's some way
+
+00:21:34.720 --> 00:21:36.079
+that we can kind of eventually figure out
+
+00:21:36.080 --> 00:21:39.279
+how to get the best of you know both compatibility and.
+
+00:21:39.280 --> 00:21:44.879
+more modern UIs. So, you know, we can have more modern UIs
+
+00:21:44.880 --> 00:21:49.839
+for people that have modern machines and other people
+
+00:21:49.840 --> 00:21:51.959
+either do without that functionality
+
+00:21:51.960 --> 00:21:54.319
+or sort of fall back to some reasonable default.
+
+00:21:54.320 --> 00:21:59.079
+So we have about 30 seconds or a minute.
+
+00:21:59.080 --> 00:22:00.679
+I know there's one more question.
+
+00:22:00.680 --> 00:22:01.559
+I'd love for you to get to it.
+
+00:22:01.560 --> 00:22:02.839
+I just want to make sure that
+
+00:22:02.840 --> 00:22:04.239
+while we're still live on stream,
+
+00:22:04.240 --> 00:22:05.519
+you get a chance to share
+
+00:22:05.520 --> 00:22:06.799
+any closing remarks you might have.
+
+00:22:06.800 --> 00:22:10.879
+Thank you for that. Um, yes.
+
+00:22:10.880 --> 00:22:14.519
+So first of all, I want to thank everyone involved for listening.
+
+00:22:14.520 --> 00:22:18.919
+And I want to thank the core when I think thanks for moderating this.
+
+00:22:18.920 --> 00:22:21.279
+And Sacha, thank you for putting that together.
+
+00:22:21.280 --> 00:22:21.919
+And I know there's more people
+
+00:22:21.920 --> 00:22:23.319
+that are working behind the scenes.
+
+00:22:23.320 --> 00:22:25.079
+So thank you all for putting this together.
+
+00:22:25.080 --> 00:22:29.199
+I'm so happy that we all are here. We care about Emacs.
+
+00:22:29.200 --> 00:22:31.199
+We're pushing Emacs forward.
+
+00:22:31.200 --> 00:22:35.959
+We are I think Emacs remains
+
+00:22:35.960 --> 00:22:37.279
+this really remarkable achievement.
+
+00:22:37.280 --> 00:22:41.799
+Like it's amazing that it exists. It continues to exist.
+
+00:22:41.800 --> 00:22:42.999
+It hasn't got, it's hard.
+
+00:22:43.000 --> 00:22:45.159
+It's like, really, there's a lot of work to go into it.
+
+00:22:45.160 --> 00:22:47.559
+So I think let's all just appreciate everyone who,
+
+00:22:47.560 --> 00:22:50.679
+who like contributes and makes all of this possible.
+
+00:22:50.680 --> 00:22:52.159
+Cause it's, if you ever read
+
+00:22:52.160 --> 00:22:53.279
+the Emacs Develop mailing list,
+
+00:22:53.280 --> 00:22:55.479
+it's a lot of work, a lot of deep thinking,
+
+00:22:55.480 --> 00:22:56.679
+a lot of careful thinking.
+
+00:22:56.680 --> 00:22:58.599
+And I think this is really important.
+
+00:22:58.600 --> 00:23:02.039
+So thank you, especially to the maintainers of Emacs
+
+00:23:02.040 --> 00:23:04.199
+and everyone who's contributing to the core experience,
+
+00:23:04.200 --> 00:23:07.759
+all the libraries, all the LLM stuff we mentioned before.
+
+00:23:07.760 --> 00:23:09.839
+You're all doing such a fantastic job.
+
+00:23:09.840 --> 00:23:13.799
+It's exciting to be here. Thank you for your talk, Andrew.
+
+00:23:13.800 --> 00:23:16.159
+It's been just fascinating.
+
+00:23:16.160 --> 00:23:19.759
+If you don't mind, I'd love to jump
+
+00:23:19.760 --> 00:23:23.879
+right over to the last question. OK, let's do that.
+
+00:23:23.880 --> 00:23:27.599
+It says, I have 45 plus years editing programming.
+
+00:23:27.600 --> 00:23:29.239
+I'm not sure I can think about things
+
+00:23:29.240 --> 00:23:31.039
+without thinking of buffers, editors, et cetera.
+
+00:23:31.040 --> 00:23:31.959
+Is this the handicap?
+
+00:23:31.960 --> 00:23:34.239
+Should we have people with no experience
+
+00:23:34.240 --> 00:23:35.319
+with code learning to prompt?
+
+00:23:35.320 --> 00:23:38.799
+Well, this is something I do have a strong opinion about.
+
+00:23:38.800 --> 00:23:42.159
+I feel like I do not want to see people that have no experience
+
+00:23:42.160 --> 00:23:44.119
+with code learning to prompt. I think it's very limited
+
+00:23:44.120 --> 00:23:46.039
+what you could do right now with that.
+
+00:23:46.040 --> 00:23:48.439
+Like you could do, if you could sort of one-shot it,
+
+00:23:48.440 --> 00:23:51.999
+that is like, I have something that's relatively easy,
+
+00:23:52.000 --> 00:23:54.879
+And it could do it, and I'm going to tell it to do it,
+
+00:23:54.880 --> 00:23:56.039
+and then I'm going to give feedback.
+
+00:23:56.040 --> 00:24:00.039
+OK, as long as this is for relatively short-lived things,
+
+00:24:00.040 --> 00:24:02.599
+I think that works well. But for people who really care
+
+00:24:02.600 --> 00:24:04.279
+about the longevity of their code,
+
+00:24:04.280 --> 00:24:06.599
+really care about software engineering,
+
+00:24:06.600 --> 00:24:09.879
+which is software engineering is very different than just writing code.
+
+00:24:09.880 --> 00:24:11.879
+Software engineering is about maintainability.
+
+00:24:11.880 --> 00:24:15.119
+Software engineering is making sure everything is scalable
+
+00:24:15.120 --> 00:24:19.599
+and all sorts of things that it's unlikely,
+
+00:24:19.600 --> 00:24:21.759
+I think, that an LM is going to get right.
+
+00:24:21.760 --> 00:24:25.279
+And I've seen a lot of bad cases
+
+00:24:25.280 --> 00:24:27.199
+where people who don't understand code
+
+00:24:27.200 --> 00:24:31.159
+are doing things and it's not working well
+
+00:24:31.160 --> 00:24:33.239
+because they don't understand
+
+00:24:33.240 --> 00:24:35.279
+some of the some of the complexities
+
+00:24:35.280 --> 00:24:36.959
+or some of the concerns that that you might have
+
+00:24:36.960 --> 00:24:43.279
+in maintaining a piece of code.
+
+00:24:43.280 --> 00:24:45.759
+So I think those people who have lots of experience
+
+00:24:45.760 --> 00:24:46.959
+are the best people to use this.
+
+00:24:46.960 --> 00:24:48.119
+And I think that's what we're seeing
+
+00:24:48.120 --> 00:24:49.079
+in the industry as well,
+
+00:24:49.080 --> 00:24:51.639
+where more senior people are doing quite well
+
+00:24:51.640 --> 00:24:54.599
+because they're able to use LLMs
+
+00:24:54.600 --> 00:24:56.559
+more effectively than junior people.
+
+00:24:56.560 --> 00:25:00.999
+That may all even out because LLMs get even better,
+
+00:25:01.000 --> 00:25:03.079
+but for now hasn't happened.
+
+00:25:03.080 --> 00:25:06.319
+So I think, you know, I also have a ton of experience,
+
+00:25:06.320 --> 00:25:13.079
+not 45 years, but a lot. And, and I think that it's those,
+
+00:25:13.080 --> 00:25:14.839
+those years of experience will only help you.
+
+00:25:14.840 --> 00:25:16.919
+And I think it's, it's, it's a great,
+
+00:25:16.920 --> 00:25:19.639
+it's great to kind of dip your toes in the water
+
+00:25:19.640 --> 00:25:20.732
+and see what you can do.
diff --git a/2025/captions/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--main.vtt b/2025/captions/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--main.vtt
new file mode 100644
index 00000000..ea969e1e
--- /dev/null
+++ b/2025/captions/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--main.vtt
@@ -0,0 +1,1069 @@
+WEBVTT captioned by amitav
+
+NOTE Introduction
+
+00:00:01.040 --> 00:00:03.079
+Hi, I'm Andrew Hyatt.
+
+00:00:03.080 --> 00:00:09.399
+I'm going to talk to you today about Emacs and AI,
+
+00:00:09.400 --> 00:00:10.879
+and where things are right now
+
+00:00:10.880 --> 00:00:12.119
+in the world of Emacs and AI,
+
+00:00:12.120 --> 00:00:14.159
+via large language models,
+
+00:00:14.160 --> 00:00:16.999
+and where things might be going,
+
+00:00:17.000 --> 00:00:22.699
+and what it means for the future of Emacs.
+
+00:00:22.700 --> 00:00:27.279
+I think what we're seeing with Emacs is interesting.
+
+00:00:27.280 --> 00:00:29.399
+We've seen a lot of different things
+
+00:00:29.400 --> 00:00:31.559
+come around in the past year,
+
+00:00:31.560 --> 00:00:33.119
+in the past several years.
+
+00:00:33.120 --> 00:00:35.079
+There's lots of different solutions.
+
+00:00:35.080 --> 00:00:36.759
+But in the past year, things have been very interesting.
+
+00:00:36.760 --> 00:00:39.679
+I think there's new and interesting questions
+
+00:00:39.680 --> 00:00:43.279
+about what does it mean to use Emacs?
+
+00:00:43.280 --> 00:00:45.479
+What does it mean to use any editor?
+
+00:00:45.480 --> 00:00:47.279
+I'm going to be talking about Emacs,
+
+00:00:47.280 --> 00:00:50.359
+and I'm going to show you various Emacs packages
+
+00:00:50.360 --> 00:00:53.079
+as demonstrations of these ideas.
+
+00:00:53.080 --> 00:00:59.839
+But there's the general question of
+
+00:00:59.840 --> 00:01:03.719
+what does it mean to use any editor, not just Emacs?
+
+00:01:03.720 --> 00:01:06.239
+What does it mean to do work?
+
+00:01:06.240 --> 00:01:10.719
+And I think the industry in general is facing these challenges
+
+00:01:10.720 --> 00:01:13.279
+of we don't really know where things are going to end up,
+
+00:01:13.280 --> 00:01:16.919
+but we do know the direction they're going.
+
+00:01:16.920 --> 00:01:20.039
+Emacs is a reflection of that.
+
+00:01:20.040 --> 00:01:23.239
+I think the answer for Emacs might be
+
+00:01:23.240 --> 00:01:25.719
+a little bit different than everything else,
+
+00:01:25.720 --> 00:01:28.599
+but I do want to show you what's out there
+
+00:01:28.600 --> 00:01:33.319
+so we can explore what are the possibilities
+
+00:01:33.320 --> 00:01:41.119
+of Emacs, AI, and generally how we get things done.
+
+00:01:41.120 --> 00:01:44.719
+Thanks. Let's dive right into it.
+
+NOTE Copilot
+
+00:01:44.720 --> 00:01:48.079
+We're going to start by showing you
+
+00:01:48.080 --> 00:01:51.039
+some things that are pretty well integrated,
+
+00:01:51.040 --> 00:01:55.279
+that look a lot like what you see in Emacs
+
+00:01:55.280 --> 00:01:58.679
+and fit in with the kinds of editing
+
+00:01:58.680 --> 00:02:02.639
+that you normally do in Emacs.
+
+00:02:02.640 --> 00:02:06.579
+So this is just kind of like, it's well integrated.
+
+00:02:06.580 --> 00:02:08.779
+So we're going to talk about Copilot and Semext.
+
+00:02:08.780 --> 00:02:12.679
+Copilot is by Microsoft via GitHub,
+
+00:02:12.680 --> 00:02:14.759
+and Semext is just my personal demo,
+
+00:02:14.760 --> 00:02:18.039
+but they're both showing you, you know,
+
+00:02:18.040 --> 00:02:24.399
+this kind of thing. Let's start with Copilot.
+
+00:02:24.400 --> 00:02:31.919
+Let's try out Copilot on just a standard bit of Elisp.
+
+00:02:31.920 --> 00:02:38.439
+We're going to write a Fibonacci function.
+
+00:02:38.440 --> 00:02:43.079
+Let's try out Emacs on a standard bit of Elisp.
+
+00:02:43.080 --> 00:02:49.279
+We're going to write a Fibonacci function.
+
+00:02:49.280 --> 00:02:53.159
+And you can see like as soon as we even start typing it,
+
+00:02:53.160 --> 00:02:56.339
+we get everything as a completion.
+
+00:02:56.340 --> 00:02:59.879
+So you can just press Tab here,
+
+00:02:59.880 --> 00:03:02.159
+and you've just completed
+
+00:03:02.160 --> 00:03:06.799
+a significant bunch of Emacs Lisp code.
+
+00:03:06.800 --> 00:03:09.919
+It will do this no matter where you are.
+
+00:03:09.920 --> 00:03:14.799
+So, pretty useful. It will just keep suggesting things.
+
+00:03:14.800 --> 00:03:16.439
+Do you want to do this?
+
+00:03:16.440 --> 00:03:17.479
+I'm not sure.
+
+00:03:17.480 --> 00:03:22.839
+But it usually is offering pretty reasonable things.
+
+00:03:22.840 --> 00:03:29.299
+So you could do this with code,
+
+00:03:29.300 --> 00:03:32.119
+of course, any code.
+
+00:03:32.120 --> 00:03:33.919
+You don't really even have to have a mode for it, right?
+
+00:03:33.920 --> 00:03:36.679
+That's kind of the beauty of AI is that
+
+00:03:36.680 --> 00:03:38.519
+you don't need any Emacs functionality for this,
+
+00:03:38.520 --> 00:03:39.519
+except for Copilot.
+
+00:03:39.520 --> 00:03:41.679
+It doesn't need to know the structure of your code.
+
+00:03:41.680 --> 00:03:45.279
+It doesn't need anything except for the text itself
+
+00:03:45.280 --> 00:03:51.239
+and whatever AI integration that this is.
+
+00:03:51.240 --> 00:03:53.739
+We can look at, you can do the same thing with Org-mode.
+
+00:03:53.740 --> 00:03:57.999
+So we could say create, no,
+
+00:03:58.000 --> 00:04:02.919
+how about let's, let's do, you know, spring cleaning.
+
+00:04:02.920 --> 00:04:10.839
+It's actually the fall, but still we'll say spring cleaning.
+
+00:04:10.840 --> 00:04:12.767
+And it'll start suggesting things that, you know,
+
+00:04:12.768 --> 00:04:15.439
+maybe at first, it doesn't really know what to do to
+
+00:04:15.440 --> 00:04:16.433
+clean up all code.
+
+00:04:16.434 --> 00:04:18.400
+It thinks I need to clean up code, but no,
+
+00:04:18.401 --> 00:04:21.839
+this is going to be actual, you know,
+
+00:04:21.840 --> 00:04:31.567
+clean hood over range. Clean out pantry.
+
+00:04:31.568 --> 00:04:33.879
+These are all really reasonable suggestions.
+
+00:04:33.880 --> 00:04:38.319
+You just keep going here.
+
+NOTE Semext
+
+00:04:38.320 --> 00:04:40.559
+I'm going to demonstrate Semext,
+
+00:04:40.560 --> 00:04:43.879
+which is a package I have on GNU Elpa,
+
+00:04:43.880 --> 00:04:48.719
+that is designed to integrate AI in a very Emacs-like way.
+
+00:04:48.720 --> 00:04:50.999
+And so what you could do is you could do a
+
+00:04:51.000 --> 00:04:54.799
+semext-search-forward.
+
+00:04:54.800 --> 00:04:58.719
+The UI looks just like other Emacs commands,
+
+00:04:58.720 --> 00:05:02.379
+but you can search for anything.
+
+00:05:02.380 --> 00:05:06.279
+There's really no way to express what I'm about to,
+
+00:05:06.280 --> 00:05:08.679
+what I'm trying to demonstrate
+
+00:05:08.680 --> 00:05:12.359
+in Emacs's normal search commands.
+
+00:05:12.360 --> 00:05:15.399
+You could really ask for anything.
+
+00:05:15.400 --> 00:05:18.759
+And it takes a little while, which is not Emacs-like,
+
+00:05:18.760 --> 00:05:20.033
+but everything else is sort of like
+
+00:05:20.034 --> 00:05:21.719
+it's designed to be like Emacs,
+
+00:05:21.720 --> 00:05:23.519
+except way more powerful.
+
+00:05:23.520 --> 00:05:27.119
+You don't need any mode to be active for this.
+
+00:05:27.120 --> 00:05:32.039
+You just need the library
+
+00:05:32.040 --> 00:05:34.759
+and an AI provider of some sort, either locally
+
+00:05:34.760 --> 00:05:41.199
+or, you know, your favorite cloud provider.
+
+NOTE Integrated AI experiences: gptel, ellama, chatgpt-shell, etc.
+
+00:05:41.200 --> 00:05:43.679
+Now we're going to move on to a different way
+
+00:05:43.680 --> 00:05:46.399
+of interacting with AI and Emacs.
+
+00:05:46.400 --> 00:05:52.319
+This way is less like the normal editing experience.
+
+00:05:52.320 --> 00:05:56.999
+So you lose some familiarity. However, in exchange,
+
+00:05:57.000 --> 00:05:58.079
+it is a lot more powerful.
+
+00:05:58.080 --> 00:06:00.119
+And there's a whole suite of these tools.
+
+00:06:00.120 --> 00:06:02.479
+I'm going to demonstrate gptel,
+
+00:06:02.480 --> 00:06:05.779
+which is the most popular one.
+
+00:06:05.780 --> 00:06:06.399
+But there are many.
+
+00:06:06.400 --> 00:06:08.479
+And I think different people have
+
+00:06:08.480 --> 00:06:11.759
+their own preferences of what they like to use.
+
+00:06:11.760 --> 00:06:12.999
+We're going to try now something
+
+00:06:13.000 --> 00:06:15.079
+that is a step away from just editing.
+
+00:06:15.080 --> 00:06:19.839
+And we're going to, I'm actually using gptel.
+
+00:06:19.840 --> 00:06:22.799
+There are several packages that are going to be
+
+00:06:22.800 --> 00:06:25.959
+doing the same sort of thing as I'm going to show you.
+
+00:06:25.960 --> 00:06:29.999
+gptel has sort of become the most popular one.
+
+00:06:30.000 --> 00:06:32.199
+So that's why I'm showing that to you.
+
+00:06:32.200 --> 00:06:39.319
+But let's just highlight everything and say gptel rewrite.
+
+00:06:39.320 --> 00:06:42.399
+And gptel basically just has a few things.
+
+00:06:42.400 --> 00:06:45.119
+There's different ways of thinking about this.
+
+00:06:45.120 --> 00:06:49.999
+With just a few very configurable menus,
+
+00:06:50.000 --> 00:06:53.959
+you can do a large variety of things.
+
+00:06:53.960 --> 00:06:59.819
+So let's give rewrite instructions.
+
+00:06:59.820 --> 00:07:06.600
+"Turn this into an iterative program
+
+00:07:06.601 --> 00:07:12.199
+instead of a recursive program."
+
+00:07:12.200 --> 00:07:17.799
+In Elisp, you really should not be using recursion.
+
+00:07:17.800 --> 00:07:20.359
+So we could say "return to be ready".
+
+00:07:20.360 --> 00:07:21.119
+Do we accept it?
+
+00:07:21.120 --> 00:07:24.519
+Yes, we accept it. Or we could iterate and say, no, no,
+
+00:07:24.520 --> 00:07:26.799
+that's not what we meant. We meant something else.
+
+00:07:26.800 --> 00:07:29.159
+Or you did something a little something wrong.
+
+00:07:29.160 --> 00:07:29.879
+Please fix it.
+
+00:07:29.880 --> 00:07:31.879
+So this is all very powerful.
+
+00:07:31.880 --> 00:07:33.799
+Is this editing?
+
+00:07:33.800 --> 00:07:40.279
+Well, it's in the editor.
+
+00:07:40.280 --> 00:07:42.759
+You could do this while editing, while deleting,
+
+00:07:42.760 --> 00:07:44.959
+you could be doing some sort of traditional editing.
+
+00:07:44.960 --> 00:07:47.679
+And then this, which is editing
+
+00:07:47.680 --> 00:07:48.919
+in the sense that it's in your editor,
+
+00:07:48.920 --> 00:07:51.039
+you might have to highlight
+
+00:07:51.040 --> 00:07:52.799
+some parts of the file and do things,
+
+00:07:52.800 --> 00:07:54.719
+but generally you don't even need to,
+
+00:07:54.720 --> 00:07:59.879
+or you go to a spot and you say, put code at this spot.
+
+00:07:59.880 --> 00:08:01.959
+It's kind of like editing.
+
+00:08:01.960 --> 00:08:05.839
+I would say it's not exactly editing,
+
+00:08:05.840 --> 00:08:10.159
+but it's at least something that must happen in an editor
+
+00:08:10.160 --> 00:08:12.359
+and it's well integrated into Emacs.
+
+00:08:12.360 --> 00:08:14.759
+As you can tell, it used very sort of
+
+00:08:14.760 --> 00:08:18.239
+modern standard Emacs UI paradigms
+
+00:08:18.240 --> 00:08:20.759
+and it's all written in Elisp.
+
+00:08:20.760 --> 00:08:23.779
+Everything is happening in Elisp here.
+
+00:08:23.780 --> 00:08:25.959
+So this is just very much an Emacs experience.
+
+00:08:25.960 --> 00:08:27.679
+It's just not exactly editing
+
+00:08:27.680 --> 00:08:29.879
+because the thing doing the editing
+
+00:08:29.880 --> 00:08:32.519
+is the AI and not you.
+
+00:08:32.520 --> 00:08:36.039
+You're just kind of telling it what to do.
+
+NOTE Outside the editor
+
+00:08:36.040 --> 00:08:41.119
+Now we're going to go and look at a way of interaction
+
+00:08:41.120 --> 00:08:43.239
+that's even more powerful
+
+00:08:43.240 --> 00:08:46.279
+and even more disconnected from the normal editing experience.
+
+00:08:46.280 --> 00:08:47.919
+In fact, it's so disconnected
+
+00:08:47.920 --> 00:08:52.399
+that most people are using this without an editor.
+
+00:08:52.400 --> 00:08:57.879
+These are things like Claude Code
+
+00:08:57.880 --> 00:09:01.079
+or the sort of open source equivalent, Aider.
+
+00:09:01.080 --> 00:09:05.039
+There's a few other things that follow this pattern as well.
+
+00:09:05.040 --> 00:09:07.479
+But it's very interesting in the sense
+
+00:09:07.480 --> 00:09:09.839
+that while you can integrate these with the editors,
+
+00:09:09.840 --> 00:09:12.039
+and I'm going to show you an Emacs integration,
+
+00:09:12.040 --> 00:09:13.519
+you don't need to.
+
+00:09:13.520 --> 00:09:16.939
+And that's not the way most people are using them.
+
+00:09:16.940 --> 00:09:19.759
+And I find it very interesting that sort of
+
+00:09:19.760 --> 00:09:23.719
+we're going back kind of full circle where, you know,
+
+00:09:23.720 --> 00:09:31.959
+in the 1960s or 70s, we were using Ed from the terminal
+
+00:09:31.960 --> 00:09:35.639
+to edit files, but then we created editors,
+
+00:09:35.640 --> 00:09:37.959
+and that was a really good idea.
+
+00:09:37.960 --> 00:09:40.167
+It is a lot easier to edit files
+
+00:09:40.168 --> 00:09:42.499
+when you have an actual UI.
+
+00:09:42.500 --> 00:09:46.879
+But now it's 2025, and we're back in the terminal,
+
+00:09:46.880 --> 00:09:50.799
+and we're editing files through the terminal,
+
+00:09:50.800 --> 00:09:53.599
+and you know what, it's great,
+
+00:09:53.600 --> 00:09:56.899
+but I think it's even better with Emacs.
+
+00:09:56.900 --> 00:10:00.279
+On the other hand, it comes with some trade-offs,
+
+00:10:00.280 --> 00:10:04.733
+as you can see, as we will see.
+
+NOTE Outside Experiences: claude-code.el, aidermacs, eca
+
+00:10:04.734 --> 00:10:07.467
+Okay, we're going to look at
+
+00:10:07.468 --> 00:10:20.320
+[audio glitch] Claude Code IDE, aidermacs, ECA.
+
+00:10:20.321 --> 00:10:22.639
+Last time, I didn't show you all the variants.
+
+00:10:22.640 --> 00:10:26.839
+I do want to show you eca, which points to,
+
+00:10:26.840 --> 00:10:29.799
+it is a very similar tool in what it does,
+
+00:10:29.800 --> 00:10:32.739
+but does have a different
+
+00:10:32.740 --> 00:10:37.239
+and I think better type of Emacs integration.
+
+00:10:37.240 --> 00:10:42.599
+All right, we're going to demonstrate Claude Code IDE,
+
+00:10:42.600 --> 00:10:46.839
+which is one of three Claude Code packages.
+
+00:10:46.840 --> 00:10:47.719
+It's a bit confusing.
+
+00:10:47.720 --> 00:10:52.039
+One of them will be demoed by another presenter
+
+00:10:52.040 --> 00:10:54.639
+at the Emacs conference, so stay tuned for that.
+
+00:10:54.640 --> 00:10:56.439
+Here I'm just going to give you a little taste
+
+00:10:56.440 --> 00:10:58.759
+of what these packages look like.
+
+00:10:58.760 --> 00:11:03.339
+So if we say Claude Code IDE,
+
+00:11:03.340 --> 00:11:06.839
+it presents us with basically
+
+00:11:06.840 --> 00:11:09.039
+almost exactly what you would get
+
+00:11:09.040 --> 00:11:11.519
+when you're running this in the terminal.
+
+00:11:11.520 --> 00:11:13.933
+And essentially there's a terminal interface.
+
+00:11:13.934 --> 00:11:16.659
+You can see that there's a vterm.
+
+00:11:16.660 --> 00:11:20.699
+But here we're going to say, "In scratch.el"...
+
+00:11:20.700 --> 00:11:23.400
+let's say what we want to happen.
+
+00:11:23.401 --> 00:11:32.133
+[In scratch.el, there is a fibonacci function.
+
+00:11:32.134 --> 00:11:39.567
+Can you add all normal elisp headers
+
+00:11:39.568 --> 00:11:43.859
+and footers to this file?]
+
+00:11:43.860 --> 00:11:45.840
+So, we just say what's going to happen,
+
+00:11:45.841 --> 00:11:48.399
+and this is going to do things in the background.
+
+00:11:48.400 --> 00:11:50.979
+It's not going to do things through Emacs.
+
+00:11:50.980 --> 00:11:54.079
+That said, there is an integration with Emacs,
+
+00:11:54.080 --> 00:12:00.659
+so that it can do things like show you these nice ediffs.
+
+00:12:00.660 --> 00:12:03.199
+My screen is not really wide enough
+
+00:12:03.200 --> 00:12:04.699
+to show you a really great ediff here,
+
+00:12:04.700 --> 00:12:06.239
+but you can kind of see what it's doing,
+
+00:12:06.240 --> 00:12:09.079
+and you can see, yeah, that looks good,
+
+00:12:09.080 --> 00:12:14.120
+so you could say yes, yes, accept the changes,
+
+00:12:14.121 --> 00:12:25.299
+and if we... Just need to revert the buffer.
+
+00:12:25.300 --> 00:12:28.459
+We can quit the printout of this.
+
+00:12:28.460 --> 00:12:33.019
+We see that it just did everything I asked it to.
+
+00:12:33.020 --> 00:12:36.139
+Is everything exactly right?
+
+00:12:36.140 --> 00:12:39.159
+Probably not. It's reasonable for a start though.
+
+00:12:39.160 --> 00:12:40.959
+But you could ask it to do anything.
+
+00:12:40.960 --> 00:12:45.339
+You could say, write unit tests for this, and it will.
+
+00:12:45.340 --> 00:12:49.019
+You could say, write me a suite of functions
+
+00:12:49.020 --> 00:12:52.579
+like Fibonacci, and it'll probably do something reasonable.
+
+00:12:52.580 --> 00:12:54.900
+But you can see this is not editing.
+
+00:12:54.901 --> 00:12:58.659
+There's nothing editing-like about this.
+
+00:12:58.660 --> 00:13:07.159
+That said, there is something that is editing.
+
+00:13:07.160 --> 00:13:08.599
+You need to give it instructions.
+
+00:13:08.600 --> 00:13:10.959
+You need to tell it what to do.
+
+NOTE Org files
+
+00:13:10.960 --> 00:13:19.619
+And what you could do is... You could have a project.org,
+
+00:13:19.620 --> 00:13:23.899
+and what you could do is you could have functions.
+
+00:13:23.900 --> 00:13:26.659
+The way I've done things often is ....
+
+00:13:26.660 --> 00:13:28.439
+You could say something like,
+
+00:13:28.440 --> 00:13:36.199
+unit tests for Fibonacci. How do you spell Fibonacci?
+
+00:13:36.200 --> 00:13:40.479
+I don't remember. But then you could say that this is,
+
+00:13:40.480 --> 00:13:47.159
+you could clock it, basically. org-clock.
+
+00:13:47.160 --> 00:13:48.879
+What I've done is...
+
+00:13:48.880 --> 00:13:50.399
+You could add custom commands to Claude Code,
+
+00:13:50.400 --> 00:13:53.119
+and you could just say, look, here's my Org file,
+
+00:13:53.120 --> 00:13:57.879
+read it and do the thing that I'm clocked in as.
+
+00:13:57.880 --> 00:14:01.159
+And then you can write a bunch of instructions here, like,
+
+00:14:01.160 --> 00:14:07.039
+I like to use ert for tests. Tests should, like, whatever.
+
+00:14:07.040 --> 00:14:08.639
+You should just say... everything
+
+00:14:08.640 --> 00:14:10.999
+you need to kind of specify.
+
+00:14:11.000 --> 00:14:13.199
+As you get to more complicated tasks,
+
+00:14:13.200 --> 00:14:16.679
+it's harder and harder to give it all the context
+
+00:14:16.680 --> 00:14:17.799
+it needs for a task,
+
+00:14:17.800 --> 00:14:22.299
+and Org Mode is actually a pretty good way to do this.
+
+00:14:22.300 --> 00:14:24.079
+I find that this works pretty well,
+
+00:14:24.080 --> 00:14:26.699
+and you can even have it instruct Claude
+
+00:14:26.700 --> 00:14:29.333
+to just mark things done in your Org file
+
+00:14:29.334 --> 00:14:30.679
+when they're done.
+
+00:14:30.680 --> 00:14:32.867
+And it knows how to do this, of course.
+
+00:14:32.868 --> 00:14:37.959
+So, let's just clock out.
+
+00:14:37.960 --> 00:14:45.239
+That's one way to do things.
+
+NOTE ECA
+
+00:14:45.240 --> 00:14:49.499
+So one other thing I'd like to show you is eca,
+
+00:14:49.500 --> 00:14:52.879
+which, compared to Claude Code, ECA is open source.
+
+00:14:52.880 --> 00:14:54.239
+It's very nice in that respect.
+
+00:14:54.240 --> 00:14:57.839
+It doesn't have to use Anthropic's models.
+
+00:14:57.840 --> 00:15:00.279
+You can use local models,
+
+00:15:00.280 --> 00:15:07.619
+but it has the advantage of integrating very well with Emacs.
+
+00:15:07.620 --> 00:15:08.559
+I'm not going to demonstrate it,
+
+00:15:08.560 --> 00:15:11.159
+because it works essentially the same thing you could do
+
+00:15:11.160 --> 00:15:14.119
+approximately the same kinds of things
+
+00:15:14.120 --> 00:15:15.479
+you could do with Claude Code.
+
+00:15:15.480 --> 00:15:17.439
+You just write what you want to happen
+
+00:15:17.440 --> 00:15:18.639
+and it will make it happen.
+
+00:15:18.640 --> 00:15:21.879
+It again does not do this through Emacs,
+
+00:15:21.880 --> 00:15:23.039
+but what it does do is
+
+00:15:23.040 --> 00:15:25.119
+it gives you a much better Emacs interface
+
+00:15:25.120 --> 00:15:26.919
+that's not terminal-based,
+
+00:15:26.920 --> 00:15:29.639
+because you're not using it through the terminal,
+
+00:15:29.640 --> 00:15:31.239
+or not even through comint,
+
+00:15:31.240 --> 00:15:35.599
+you are using it through a backend
+
+00:15:35.600 --> 00:15:37.499
+that is exchanging structured information
+
+00:15:37.500 --> 00:15:40.999
+with this process that is doing all the work.
+
+00:15:41.000 --> 00:15:41.900
+But other than that,
+
+00:15:41.901 --> 00:15:44.519
+it's the same model as Claude Code
+
+00:15:44.520 --> 00:15:52.059
+and projects of that nature.
+
+NOTE Editing
+
+00:15:52.060 --> 00:15:56.159
+We've seen in the demos that I gave
+
+00:15:56.160 --> 00:15:58.639
+that there are AI experiences
+
+00:15:58.640 --> 00:16:01.279
+that are very natural in the world of editing.
+
+00:16:01.280 --> 00:16:05.339
+because they, like Copilot, just offers completion,
+
+00:16:05.340 --> 00:16:09.479
+it fits very well with what we all do in Emacs.
+
+00:16:09.480 --> 00:16:14.279
+And it's truly, yes, it's kind of a cheat in a sense
+
+00:16:14.280 --> 00:16:15.639
+for editing experiences,
+
+00:16:15.640 --> 00:16:20.159
+because it can do so much, but it's just editing.
+
+00:16:20.160 --> 00:16:25.259
+Whereas things like gptel and those kinds of tools,
+
+00:16:25.260 --> 00:16:29.799
+they are clearly in an editor and using editor,
+
+00:16:29.800 --> 00:16:35.319
+they're using Emacs, but they represent sort of like, well,
+
+00:16:35.320 --> 00:16:37.759
+you can edit for a while, then you could use these tools
+
+00:16:37.760 --> 00:16:39.479
+to do something that is not editing,
+
+00:16:39.480 --> 00:16:45.899
+this AI just changing the buffer for you. And that's fine.
+
+00:16:45.900 --> 00:16:48.399
+It's still... It may not be editing,
+
+00:16:48.400 --> 00:16:52.033
+but it's still clearly something that
+
+00:16:52.034 --> 00:16:55.567
+is useful to do in Emacs
+
+00:16:55.568 --> 00:16:57.039
+and belongs in Emacs.
+
+00:16:57.040 --> 00:17:01.859
+But the new tools like Claude Code and things like that
+
+00:17:01.860 --> 00:17:02.639
+are kind of different.
+
+00:17:02.640 --> 00:17:06.639
+Yes, they will get better integrated with Emacs,
+
+00:17:06.640 --> 00:17:11.639
+but it's not clear that they really need to.
+
+00:17:11.640 --> 00:17:15.479
+They can do a lot of things without editing.
+
+00:17:15.480 --> 00:17:19.239
+In a sense, editing is obsolete in some sense.
+
+00:17:19.240 --> 00:17:23.459
+For as many tasks, you don't need to edit anymore.
+
+00:17:23.460 --> 00:17:26.439
+And that's a nice thing.
+
+00:17:26.440 --> 00:17:30.579
+No one really knows when all this will end,
+
+00:17:30.580 --> 00:17:36.879
+how far things will go. It could be that in a decade or so,
+
+00:17:36.880 --> 00:17:41.039
+no one's really editing for work anymore.
+
+00:17:41.040 --> 00:17:43.159
+Maybe you're just writing instructions.
+
+00:17:43.160 --> 00:17:44.319
+You could do that with anything.
+
+00:17:44.320 --> 00:17:47.439
+You don't need Emacs or any special editor.
+
+00:17:47.440 --> 00:17:50.439
+We could all be using Notepad. That would be bad.
+
+00:17:50.440 --> 00:17:58.039
+But... I think it could go that far,
+
+00:17:58.040 --> 00:18:01.839
+but it could be that, well, for many specialized things,
+
+00:18:01.840 --> 00:18:04.359
+people are still using editing for certain tasks,
+
+00:18:04.360 --> 00:18:07.000
+but most tasks are getting fed to just...
+
+00:18:07.001 --> 00:18:08.839
+AI is just doing those things.
+
+00:18:08.840 --> 00:18:15.759
+In any case, I think it's clear that editing is diminishing,
+
+00:18:15.760 --> 00:18:17.959
+the need for editing itself is diminishing.
+
+00:18:17.960 --> 00:18:21.879
+And in such a world, It's interesting to think
+
+00:18:21.880 --> 00:18:24.799
+where Emacs is headed, especially in relation to
+
+00:18:24.800 --> 00:18:26.359
+all the other editors.
+
+00:18:26.360 --> 00:18:28.599
+I think people will use Emacs less.
+
+00:18:28.600 --> 00:18:31.639
+But I think other editors, like VS Code,
+
+00:18:31.640 --> 00:18:37.999
+may simply disappear or be a relatively fringe tool.
+
+00:18:38.000 --> 00:18:42.719
+And Emacs is going to follow its own path.
+
+00:18:42.720 --> 00:18:44.679
+It's very extensible. It could do anything.
+
+00:18:44.680 --> 00:18:47.919
+If there's one thing Emacs can do, it's adapt.
+
+00:18:47.920 --> 00:18:51.679
+Emacs has been around for a long time.
+
+00:18:51.680 --> 00:18:54.799
+It's pretty clear that Emacs will be around for a long time.
+
+00:18:54.800 --> 00:18:58.879
+It might be that in the future,
+
+00:18:58.880 --> 00:19:04.339
+editing is some sort of like an artisanal activity that we do.
+
+00:19:04.340 --> 00:19:05.599
+It's kind of weird to think about it.
+
+00:19:05.600 --> 00:19:07.679
+It's not like baking bread.
+
+00:19:07.680 --> 00:19:10.079
+But it is the sense that AI might be
+
+00:19:10.080 --> 00:19:12.399
+churning out code in the way, you know,
+
+00:19:12.400 --> 00:19:14.199
+the factories are turning out bread,
+
+00:19:14.200 --> 00:19:17.139
+but if you really want the good stuff,
+
+00:19:17.140 --> 00:19:20.999
+you'll have to do it yourself.
+
+00:19:21.000 --> 00:19:23.959
+I don't know if it'll be exactly like that,
+
+00:19:23.960 --> 00:19:29.519
+but it could be that Emacs survives and thrives
+
+00:19:29.520 --> 00:19:33.559
+in a very kind of specialized ecosystem of people
+
+00:19:33.560 --> 00:19:35.599
+who contribute and use it in the way
+
+00:19:35.600 --> 00:19:39.539
+it has survived and thrive right now.
+
+00:19:39.540 --> 00:19:46.139
+And I think that's a really nice way for all this to end up.
+
+00:19:46.140 --> 00:19:48.719
+There's the whole sense of how society will end up
+
+00:19:48.720 --> 00:19:50.759
+if all this happens. I don't know,
+
+00:19:50.760 --> 00:19:54.639
+but Emacs will be there for us when whatever happens.
+
+00:19:54.640 --> 00:20:00.079
+So thank you, and let's help make Emacs the best it can be
+
+00:20:00.080 --> 00:20:04.880
+to survive and thrive in the next decade.
diff --git a/2025/captions/emacsconf-2025-modern--some-problems-of-modernizing-emacs--eduardo-ochs--main.vtt b/2025/captions/emacsconf-2025-modern--some-problems-of-modernizing-emacs--eduardo-ochs--main.vtt
new file mode 100644
index 00000000..e461b1f1
--- /dev/null
+++ b/2025/captions/emacsconf-2025-modern--some-problems-of-modernizing-emacs--eduardo-ochs--main.vtt
@@ -0,0 +1,727 @@
+WEBVTT
+Kind: captions
+Language: en-GB
+
+00:00:54.000 --> 00:00:55.000
+
+
+00:00:55.000 --> 00:00:57.000
+Hi! My name is Eduardo Ochs. I'm the
+
+00:00:57.000 --> 00:01:00.000
+author of an Emacs package called eev and
+
+00:01:00.000 --> 00:01:03.000
+the title of this video is
+
+00:01:03.000 --> 00:01:05.000
+"Some problems of modernizing Emacs".
+
+00:01:05.000 --> 00:01:08.000
+Here is a summary of the main themes
+
+00:01:08.000 --> 00:01:10.000
+of this video. I'm going to talk mainly
+
+00:01:10.000 --> 00:01:12.000
+about these four things here. The first
+
+00:01:12.000 --> 00:01:15.000
+one is that Emacs has changed a lot in its
+
+00:01:15.000 --> 00:01:18.000
+recent versions, and now it has lots of
+
+00:01:18.000 --> 00:01:21.000
+types... so if we want to look under the
+
+00:01:21.000 --> 00:01:24.000
+hood and to understand what Emacs
+
+00:01:24.000 --> 00:01:27.000
+really does we are going to stumble on
+
+00:01:27.000 --> 00:01:30.000
+lots of types... and the
+
+00:01:30.000 --> 00:01:34.000
+current tree of classes and types
+
+00:01:34.000 --> 00:01:37.000
+looks like this... that is,
+
+00:01:37.000 --> 00:01:46.000
+is quite big.
+
+00:01:46.000 --> 00:01:49.000
+The second theme is that people used
+
+00:01:49.000 --> 00:01:53.000
+to say things like "Anyone can learn Lisp
+
+00:01:53.000 --> 00:01:56.000
+in one day"... I'm going to explain
+
+00:01:56.000 --> 00:02:01.000
+this quote, and I'm also going to show
+
+00:02:01.000 --> 00:02:04.000
+that now this is gone... anyway. This is a
+
+00:02:04.000 --> 00:02:08.000
+very short summary... details soon.
+
+00:02:08.000 --> 00:02:10.000
+I will also show how to display
+
+00:02:10.000 --> 00:02:13.000
+better "inner views" of Emacs objects...
+
+00:02:13.000 --> 00:02:16.000
+I'm going to Define what is an inner view,
+
+00:02:16.000 --> 00:02:18.000
+of course.
+
+00:02:18.000 --> 00:02:20.000
+The main trick is that we are going
+
+00:02:20.000 --> 00:02:24.000
+to use one of the ways of displaying
+
+00:02:24.000 --> 00:02:29.000
+internal objects, that is the `cl-print'
+
+00:02:29.000 --> 00:02:32.000
+family of functions, for example,
+
+00:02:32.000 --> 00:02:35.000
+`cl-prin1-to-string', and here are some
+
+00:02:35.000 --> 00:02:37.000
+examples of the kind of output that we
+
+00:02:37.000 --> 00:02:38.000
+are going to see...
+
+00:02:38.000 --> 00:02:44.000
+for example, if we run these two lines
+
+00:02:44.000 --> 00:02:47.000
+here the first line defines a function `foo'
+
+00:02:47.000 --> 00:02:52.000
+and the second line sets `o' to the
+
+00:02:52.000 --> 00:02:54.000
+internal view of the definition of `foo'.
+
+00:02:54.000 --> 00:02:59.000
+In older Emacses `o' would be just a
+
+00:02:59.000 --> 00:03:02.000
+list that looks... that would look very
+
+00:03:02.000 --> 00:03:05.000
+similar to this line here... but in newer
+
+00:03:05.000 --> 00:03:09.000
+Emacses the result of this - I mean, the
+
+00:03:09.000 --> 00:03:12.000
+the contents of `o' is this thing here,
+
+00:03:12.000 --> 00:03:15.000
+that looks quite different
+
+00:03:15.000 --> 00:03:18.000
+from this definition.
+
+00:03:18.000 --> 00:03:21.000
+So, in older Emacses
+
+00:03:21.000 --> 00:03:25.000
+the contents of the
+
+00:03:25.000 --> 00:03:28.000
+function cell of `o'...
+
+00:03:28.000 --> 00:03:30.000
+sorry, of the function cell of `foo',
+
+00:03:30.000 --> 00:03:32.000
+would be an "old-style lambda",
+
+00:03:32.000 --> 00:03:35.000
+that would be just a list like this...
+
+00:03:35.000 --> 00:03:39.000
+and in newer Emacses uh the contents of O would
+
+00:03:39.000 --> 00:03:42.000
+be a "vector-like lambda"... look for the
+
+00:03:42.000 --> 00:03:44.000
+square brackets here - this is a
+
+00:03:44.000 --> 00:03:47.000
+vector, but it is preceded by a hash sign.
+
+00:03:47.000 --> 00:03:49.000
+So this is what we call
+
+00:03:49.000 --> 00:03:51.000
+a "vector-like lambda",
+
+00:03:51.000 --> 00:03:53.000
+and vector-like lambas do not
+
+00:03:53.000 --> 00:03:55.000
+have a canonical printed representation -
+
+00:03:55.000 --> 00:03:57.000
+they have at least two semicanonical
+
+00:03:57.000 --> 00:03:59.000
+printed representations...
+
+00:03:59.000 --> 00:04:01.000
+The first semicanonical
+
+00:04:01.000 --> 00:04:04.000
+printed representation is this one, that is
+
+00:04:04.000 --> 00:04:07.000
+generated by a family of functions with
+
+00:04:07.000 --> 00:04:09.000
+names like `prin1'...
+
+00:04:09.000 --> 00:04:13.000
+and the second semicanonical printed
+
+00:04:13.000 --> 00:04:17.000
+representation is like this -
+
+00:04:17.000 --> 00:04:20.000
+it looks like a list...
+
+00:04:20.000 --> 00:04:23.000
+it looks somewhat like this definition
+
+00:04:23.000 --> 00:04:27.000
+of `foo' here, but it has this
+
+00:04:27.000 --> 00:04:29.000
+`:dynbind' symbol here...
+
+00:04:29.000 --> 00:04:32.000
+and it turns out that when we use
+
+00:04:32.000 --> 00:04:35.000
+the `cl-print' family of functions we can
+
+00:04:35.000 --> 00:04:37.000
+reconfigure how things are printed...
+
+00:04:37.000 --> 00:04:40.000
+and I'm going to show several interesting
+
+00:04:40.000 --> 00:04:47.000
+ways of reconfiguring how lambdas are printed,
+
+00:04:47.000 --> 00:04:49.000
+and one of the ways is going to
+
+00:04:49.000 --> 00:04:52.000
+be like this.
+
+00:04:52.000 --> 00:04:56.000
+We can also use the `cl-print'
+
+00:04:56.000 --> 00:04:59.000
+functions with my indentation tricks to
+
+00:04:59.000 --> 00:05:04.000
+to display how types, or classes, are
+
+00:05:04.000 --> 00:05:07.000
+viewed internally by Emacs, and this is a
+
+00:05:07.000 --> 00:05:10.000
+big example...
+
+00:05:10.000 --> 00:05:14.000
+This is what Emacs considers as being
+
+00:05:14.000 --> 00:05:16.000
+the definition of the type
+
+00:05:16.000 --> 00:05:18.000
+`cl-structure-class',
+
+00:05:18.000 --> 00:05:21.000
+class and it is this big thing here.
+
+00:05:21.000 --> 00:05:24.000
+I edited it very lightly...
+
+00:05:24.000 --> 00:05:30.000
+I just uh deleted some line breaks here.
+
+00:05:30.000 --> 00:05:33.000
+And another thing that I want to to
+
+00:05:33.000 --> 00:05:35.000
+explain is that Emacs
+
+00:05:35.000 --> 00:05:37.000
+has some help functions that
+
+00:05:37.000 --> 00:05:39.000
+I have never liked...
+
+00:05:39.000 --> 00:05:41.000
+for most people they are good enough,
+
+00:05:41.000 --> 00:05:44.000
+but for me they aren't... they...
+
+00:05:44.000 --> 00:05:48.000
+uh, well - I'm going to say
+
+00:05:48.000 --> 00:05:50.000
+more about this later...
+
+00:05:50.000 --> 00:05:52.000
+and, for example,
+
+00:05:52.000 --> 00:05:54.000
+if we want a description of what is
+
+00:05:54.000 --> 00:05:58.000
+this type here, that we just saw in
+
+00:05:58.000 --> 00:06:00.000
+its internal view here...
+
+00:06:00.000 --> 00:06:02.000
+we can run either `describe-type'
+
+00:06:02.000 --> 00:06:04.000
+or my variant of `describe-type',
+
+00:06:04.000 --> 00:06:07.000
+and we get a help buffer
+
+00:06:07.000 --> 00:06:10.000
+that looks like this, in which
+
+00:06:10.000 --> 00:06:13.000
+these blue things that are underlined
+
+00:06:13.000 --> 00:06:15.000
+are "buttons", in the classical sense...
+
+00:06:15.000 --> 00:06:17.000
+you can click on these buttons, or type
+
+00:06:17.000 --> 00:06:19.000
+RET on these buttons, and you will be
+
+00:06:19.000 --> 00:06:22.000
+taken to another help page, that is
+
+00:06:22.000 --> 00:06:24.000
+generated dynamically...
+
+00:06:24.000 --> 00:06:28.000
+and you can navigate back and forth...
+
+00:06:28.000 --> 00:06:30.000
+and well, whatever...
+
+00:06:30.000 --> 00:06:33.000
+and I'm going to explain my
+
+00:06:33.000 --> 00:06:35.000
+problems with these kinds of help buffers
+
+00:06:35.000 --> 00:06:37.000
+and what I'm trying to do to
+
+00:06:37.000 --> 00:06:41.000
+overcome these problems...
+
+00:06:41.000 --> 00:06:43.000
+One of my slogans in this video
+
+00:06:43.000 --> 00:06:43.000
+is going to be this one:
+
+00:06:43.000 --> 00:06:45.000
+"Anyone can learn Lisp in one day".
+
+00:06:45.000 --> 00:06:49.000
+this is a part of a bigger quote
+
+00:06:49.000 --> 00:06:51.000
+that I took from a keynote presentation
+
+00:06:51.000 --> 00:06:54.000
+by Abelson and Sussman, who
+
+00:06:54.000 --> 00:06:58.000
+are two dinosaurs of Computer Science...
+
+00:06:58.000 --> 00:07:00.000
+Here is the full quote:
+
+00:07:00.000 --> 00:07:04.000
+"Anyone can learn Lisp in one day -
+
+00:07:04.000 --> 00:07:06.000
+except that if they already know Fortran
+
+00:07:06.000 --> 00:07:11.000
+then it would take three days."
+
+00:07:11.000 --> 00:07:24.000
+This is a frame of the video...
+
+00:07:24.000 --> 00:07:28.000
+By the way I am going to to add
+
+00:07:28.000 --> 00:07:32.000
+this... "and if the person is starting
+
+00:07:32.000 --> 00:07:34.000
+with Doom Emacs then it would take 5 years."
+
+00:07:34.000 --> 00:07:39.000
+why? I'm going to explain why.
+
+00:07:39.000 --> 00:07:43.000
+This is how Emacs used to be.
+
+00:07:43.000 --> 00:07:46.000
+If we execute these two expressions here
+
+00:07:46.000 --> 00:07:51.000
+the first one... sorry, each symbol can
+
+00:07:51.000 --> 00:07:53.000
+have two "values",
+
+00:07:53.000 --> 00:07:54.000
+one is its "value as a variable"
+
+00:07:54.000 --> 00:07:58.000
+and another one is its "value as a function"...
+
+00:07:58.000 --> 00:08:02.000
+and if we run this we store 42
+
+00:08:02.000 --> 00:08:07.000
+in the "value cell" of the symbol `foo', and
+
+00:08:07.000 --> 00:08:11.000
+if we run this defun here it stores a
+
+00:08:11.000 --> 00:08:14.000
+certain anonymous function in the
+
+00:08:14.000 --> 00:08:18.000
+"function cell" of the symbol `foo'...
+
+00:08:18.000 --> 00:08:22.000
+and in Emacs, until some time ago
+
+00:08:22.000 --> 00:08:27.000
+if we did that and and if we ran
+
+00:08:27.000 --> 00:08:30.000
+this expression here the result
+
+00:08:30.000 --> 00:08:31.000
+would be 42,
+
+00:08:31.000 --> 00:08:35.000
+because of this line here, and if we
+
+00:08:35.000 --> 00:08:37.000
+ran this line here the result would be
+
+00:08:37.000 --> 00:08:40.000
+the anonymous function corresponding to
+
+00:08:40.000 --> 00:08:41.000
+this defun here...
+
+00:08:41.000 --> 00:08:45.000
+but now this has changed...
+
+00:08:45.000 --> 00:08:48.000
+the result of this thing here is this
+
+00:08:48.000 --> 00:08:51.000
+vector-like lambda here - but that doesn't
+
+00:08:51.000 --> 00:08:54.000
+matter much now...
+
+00:08:54.000 --> 00:08:56.000
+So, until some time ago
+
+00:08:56.000 --> 00:08:58.000
+if we did that and if we ran
+
+00:08:58.000 --> 00:09:01.000
+this expression here, (foo foo)...
+
+00:09:01.000 --> 00:09:04.000
+Emacs would do this: it would
+
+00:09:04.000 --> 00:09:06.000
+replace the first `foo' by this
+
+00:09:06.000 --> 00:09:09.000
+anonymous function here, it would replace
+
+00:09:09.000 --> 00:09:11.000
+the second `foo' by the value of `foo' as a
+
+00:09:11.000 --> 00:09:13.000
+variable, that is 42,
+
+00:09:13.000 --> 00:09:16.000
+and it would evaluate this, and the
+
+00:09:16.000 --> 00:09:20.000
+result would be 420.
+
+00:09:20.000 --> 00:09:23.000
+So, again, we used to have this slogan
+
+00:09:23.000 --> 00:09:26.000
+here, "anyone can learn Lisp in one day"...
+
+00:09:26.000 --> 00:09:28.000
+but now this is gone.
+
+00:09:28.000 --> 00:09:30.000
+Let me show... let me talk
+
+00:09:30.000 --> 00:09:34.000
+a bit more about why...
+
+00:09:34.000 --> 00:09:36.000
+the title of this slide is
+
+00:09:36.000 --> 00:09:38.000
+"Lambdas for beginners broken"...
+
+00:09:38.000 --> 00:09:41.000
+if we run this, as I've shown
+
+00:09:41.000 --> 00:09:43.000
+in the previous slide...
+
+00:09:43.000 --> 00:09:45.000
+in the old style, in old Emacses,
+
+00:09:45.000 --> 00:09:47.000
+the result of (symbol-function 'foo)
+
+00:09:47.000 --> 00:09:49.000
+would be this anonymous function here...
+
+00:09:49.000 --> 00:09:54.000
+and now we get this strange thing here.
+
+00:09:54.000 --> 00:09:58.000
+So, this is an "old-style lambda",
+
+00:09:58.000 --> 00:10:02.000
+this is a "vector-like lambda",
+
+00:10:02.000 --> 00:10:05.000
+and until the middle of 2024
+
+00:10:05.000 --> 00:10:08.000
+beginners could learn a lot of Lisp
+
+00:10:08.000 --> 00:10:11.000
+by thinking only in terms of
+
+00:10:11.000 --> 00:10:13.000
+objects like these...
+
+00:10:13.000 --> 00:10:15.000
+this is a function and this
+
+00:10:15.000 --> 00:10:17.000
+is an anonymous function, and
+
+00:10:17.000 --> 00:10:20.000
+they would learn how to draw cons cell
+
+00:10:20.000 --> 00:10:23.000
+diagrams like this thing here and this
+
+00:10:23.000 --> 00:10:25.000
+thing here...
+
+00:10:25.000 --> 00:10:27.000
+they would think on lists as
+
+00:10:27.000 --> 00:10:29.000
+being these trees here, and they
+
+00:10:29.000 --> 00:10:32.000
+would be able to understand a lot of
+
+00:10:32.000 --> 00:10:35.000
+Lisp just by thinking in these terms...
+
+00:10:35.000 --> 00:10:39.000
+and then vector-like lambdas started
+
+00:10:39.000 --> 00:10:43.000
+to appear in many places... and if we use
+
+00:10:43.000 --> 00:10:46.000
+"vector-like lambdas" in a wide sense,
+
+00:10:46.000 --> 00:10:50.000
+to mean all the new objects,
+
+00:10:50.000 --> 00:10:54.000
+these new objects, that are
+
+00:10:54.000 --> 00:10:56.000
+difficult to visualize... they also started
+
+00:10:56.000 --> 00:10:58.000
+to appear in many places.
+
+00:10:58.000 --> 00:11:01.000
+This is a continuation of the
+
+00:11:01.000 --> 00:11:04.000
+previous slide - this part here is a copy
+
+00:11:04.000 --> 00:11:06.000
+of things that were in the previous slide...
+
+00:11:06.000 --> 00:11:12.000
+before 2024 beginners could
+
+00:11:12.000 --> 00:11:17.000
+open black boxes like this...
+
+00:11:17.000 --> 00:11:20.000
+they could try to see what was in the
+
+00:11:20.000 --> 00:11:24.000
+function cell of the symbol `foo'...
+
+00:11:24.000 --> 00:11:27.000
+and they would see something elegant and
+
+00:11:27.000 --> 00:11:29.000
+mind-blowing... and they would start to love
+
+00:11:29.000 --> 00:11:31.000
+Lisp immediately.
+
+00:11:31.000 --> 00:11:33.000
+Now what they get - what they see -
+
+00:11:33.000 --> 00:11:35.000
+is a tiny part of a very complex structure
+
+00:11:35.000 --> 00:11:39.000
+that is very powerful but that is
+
+00:11:39.000 --> 00:11:41.000
+very difficult to understand...
+
+00:11:41.000 --> 00:11:44.000
+and now our beginners are overwhelmed
+
+00:11:44.000 --> 00:11:46.000
+instead of mind-blown.
+
+00:11:46.000 --> 00:11:48.000
+Note that I said "black box" here.
+
+00:11:48.000 --> 00:11:52.000
+Let me explain the term.
+
+00:11:52.000 --> 00:11:57.000
+We can open what's inside of `foo'...
+
+00:11:57.000 --> 00:11:59.000
+we can open `foo' to see the contents of
+
+00:11:59.000 --> 00:12:02.000
+the symbol `foo', and we can try to see
+
+00:12:02.000 --> 00:12:06.000
+what's in the function cell of the
+
+00:12:06.000 --> 00:12:08.000
+symbol `foo'...
+
+00:12:08.000 --> 00:12:10.000
+so we can open the box, but what we get
+
+00:12:10.000 --> 00:12:13.000
+is something very difficult to understand,
+
+00:12:13.000 --> 00:12:17.000
+and so I'm going to say that
+
+00:12:17.000 --> 00:12:21.000
+when this happens that box is black.
+
+00:12:21.000 --> 00:12:23.000
+It is not totally black - we can open open it -
+
+00:12:23.000 --> 00:12:26.000
+but we don't understand what is going on there,
+
+00:12:26.000 --> 00:12:30.000
+so we declare that that is black.
+
+00:12:30.000 --> 00:12:33.000
+And... when these things started to happen
+
+00:12:33.000 --> 00:12:38.000
+_I_ was overwhelmed -
+
+00:12:38.000 --> 00:12:40.000
+and in this video I'm going to pretend
+
+00:12:40.000 --> 00:12:44.000
+that I was not the only person
+
+00:12:44.000 --> 00:12:46.000
+that was overwhelmed
+
+00:12:46.000 --> 00:12:50.000
+by these new structures
+
+00:12:50.000 --> 00:12:52.000
+that are not so elegant
+
+00:12:52.000 --> 00:12:54.000
+as the ones that we had before.
+
+00:12:54.000 --> 00:12:56.000
+Anyway...
+
+00:12:56.000 --> 00:20:38.000
+
+
diff --git a/2025/captions/emacsconf-2025-open-mic--open-session--participants--main.vtt b/2025/captions/emacsconf-2025-open-mic--open-session--participants--main.vtt
new file mode 100644
index 00000000..ffdfe3de
--- /dev/null
+++ b/2025/captions/emacsconf-2025-open-mic--open-session--participants--main.vtt
@@ -0,0 +1,3058 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:03.599
+All right, so yes, we have a little bit of time
+
+00:00:03.600 --> 00:00:05.719
+while we are waiting for the dev track to finish,
+
+00:00:05.720 --> 00:00:08.319
+and we could just declare this as a break,
+
+00:00:08.320 --> 00:00:12.039
+or if anyone's got any interesting last-minute stuff,
+
+00:00:12.040 --> 00:00:17.239
+you can come and share it here,
+
+00:00:17.240 --> 00:00:20.879
+where Karthik is also hanging out.
+
+00:00:20.880 --> 00:00:23.279
+I think every time I read one of your long blog posts,
+
+00:00:23.280 --> 00:00:25.559
+Karthik, I'm like, mm, life goals.
+
+00:00:25.560 --> 00:00:28.399
+Someday I want to write something with nice diagrams
+
+00:00:28.400 --> 00:00:31.279
+and, you know, deep Emacs interestingness.
+
+00:00:31.280 --> 00:00:34.919
+I have not yet gotten the hang of even using avy
+
+00:00:34.920 --> 00:00:38.119
+to nearly the extent that you do.
+
+00:00:38.120 --> 00:00:40.119
+But yes, I have, I have always looked
+
+00:00:40.120 --> 00:00:42.319
+at your diagrams very longingly
+
+00:00:42.320 --> 00:00:44.679
+and wondered how you make them.
+
+00:00:44.680 --> 00:00:51.239
+With a lot of sweat and cursing, unfortunately.
+
+00:00:51.240 --> 00:00:54.199
+It's all very nice. Yeah.
+
+00:00:54.200 --> 00:00:58.319
+And I, I, I've seen your interactive SVGs,
+
+00:00:58.320 --> 00:01:02.319
+which is just wizardry. I have no idea how you do that.
+
+00:01:02.320 --> 00:01:06.959
+You can hover over different elements in the SVG
+
+00:01:06.960 --> 00:01:08.759
+and do interesting things.
+
+00:01:08.760 --> 00:01:11.799
+Yeah, so it turns out if you just think of them as XML,
+
+00:01:11.800 --> 00:01:13.079
+which Emacs will let you
+
+00:01:13.080 --> 00:01:15.159
+because you can just control C, control C,
+
+00:01:15.160 --> 00:01:16.759
+and it'll switch back to text mode, right?
+
+00:01:16.760 --> 00:01:19.999
+Then you can be like, oh, yeah, I can work with this
+
+00:01:20.000 --> 00:01:23.559
+using the DOM Emacs list library.
+
+00:01:23.560 --> 00:01:28.479
+And then you can add title elements to it to get the hovers,
+
+00:01:28.480 --> 00:01:31.079
+or you can add hyperlinks.
+
+00:01:31.080 --> 00:01:35.039
+So in fact, the emacs-conf schedule
+
+00:01:35.040 --> 00:01:41.199
+is very naturally generated from emacs-lisp itself,
+
+00:01:41.200 --> 00:01:43.399
+because there was no way I was going to handle
+
+00:01:43.400 --> 00:01:45.719
+two track schedules by hand.
+
+00:01:45.720 --> 00:01:49.799
+And that's just SVG so that you can then have the hovers.
+
+00:01:49.800 --> 00:01:53.119
+The important thing is that when you're exporting it to HTML,
+
+00:01:53.120 --> 00:01:57.919
+it has to be an inline SVG to get the fancy behaviors.
+
+00:01:57.920 --> 00:02:02.799
+If you're linking it in as an image, then it doesn't work.
+
+00:02:02.800 --> 00:02:09.279
+It has to be inline. So for example, for my org mode,
+
+00:02:09.280 --> 00:02:14.079
+I have my exports for images checked first if it's an SVG.
+
+00:02:14.080 --> 00:02:15.959
+And unless I have an attribute
+
+00:02:15.960 --> 00:02:20.359
+on it that says, no, just link to it because it's large and not interactive,
+
+00:02:20.360 --> 00:02:22.759
+it actually inlines all of that markup
+
+00:02:22.760 --> 00:02:26.879
+into the exported HTML, if that makes sense.
+
+00:02:26.880 --> 00:02:34.279
+That does, that does make sense.
+
+00:02:34.280 --> 00:02:36.559
+It's a little less mysterious now.
+
+00:02:36.560 --> 00:02:40.319
+On the plus side, once it is in there as inline HTML,
+
+00:02:40.320 --> 00:02:42.519
+well, inline, you know, it's an inline markup,
+
+00:02:42.520 --> 00:02:44.359
+you can actually play around with it
+
+00:02:44.360 --> 00:03:01.919
+using JavaScript or CSS. That's really neat.
+
+00:03:01.920 --> 00:03:07.679
+I had a question about some other SVG wizardry I've seen you do.
+
+00:03:07.680 --> 00:03:09.759
+You have these SVGs that grow, right?
+
+00:03:09.760 --> 00:03:15.959
+Like they accumulate elements, almost like a slideshow.
+
+00:03:15.960 --> 00:03:20.199
+Am I remembering that correctly? Yeah, yeah, yeah.
+
+00:03:20.200 --> 00:03:22.399
+I started using that for one
+
+00:03:22.400 --> 00:03:24.519
+of the EmacsConf presentations.
+
+00:03:24.520 --> 00:03:26.559
+Well, the one EmacsConf presentation
+
+00:03:26.560 --> 00:03:27.919
+I've done in recent history,
+
+00:03:27.920 --> 00:03:31.639
+because it's nice to be able to add things gradually, right?
+
+00:03:31.640 --> 00:03:35.799
+Especially as you're giving a presentation.
+
+00:03:35.800 --> 00:03:38.719
+And that's also done with Emacs Lisp.
+
+00:03:38.720 --> 00:03:43.599
+What I do is, first I make the image, and then in Inkscape,
+
+00:03:43.600 --> 00:03:46.519
+I can group together the elements
+
+00:03:46.520 --> 00:03:49.639
+that I want to appear at the same time.
+
+00:03:49.640 --> 00:03:54.639
+And then I can use Emacs to, I think I just changed the,
+
+00:03:54.640 --> 00:04:01.039
+I just add some CSS to them to make them dimmer.
+
+00:04:01.040 --> 00:04:04.759
+and you just iterate through the different groups in that level,
+
+00:04:04.760 --> 00:04:09.839
+and you write out the intermediate SVG files,
+
+00:04:09.840 --> 00:04:12.279
+and then you can use Inkscape
+
+00:04:12.280 --> 00:04:14.839
+to convert them into PNGs if you want,
+
+00:04:14.840 --> 00:04:16.079
+like images of each step
+
+00:04:16.080 --> 00:04:18.719
+that are in PNG format instead of SVG.
+
+00:04:18.720 --> 00:04:20.359
+But the basic idea is you group
+
+00:04:20.360 --> 00:04:24.159
+the elements together that you want in one step,
+
+00:04:24.160 --> 00:04:25.879
+and then you can manipulate it
+
+00:04:25.880 --> 00:04:30.159
+using the Emacs DOM.EL library,
+
+00:04:30.160 --> 00:04:32.879
+because it's just an XML document.
+
+00:04:32.880 --> 00:04:38.719
+So you can say, all right, hide everything or have everything visible
+
+00:04:38.720 --> 00:04:43.159
+and then remove the last one or something like that, you know, iterated.
+
+00:04:43.160 --> 00:04:50.679
+Show them one at a time and then write your resulting document object model
+
+00:04:50.680 --> 00:05:05.919
+to a new file each step. Do you have, that makes sense.
+
+00:05:05.920 --> 00:05:09.159
+So do you just write the e-list,
+
+00:05:09.160 --> 00:05:12.079
+like is this on a case-by-case basis?
+
+00:05:12.080 --> 00:05:13.519
+Like every time you need to do this,
+
+00:05:13.520 --> 00:05:18.519
+do you write fresh e-list to step through the SVG this way?
+
+00:05:18.520 --> 00:05:22.479
+Or do you have some kind of package
+
+00:05:22.480 --> 00:05:27.159
+or library to do this more?
+
+00:05:27.160 --> 00:05:32.999
+Let me go see if this is the one.
+
+00:05:33.000 --> 00:05:39.839
+It's probably just buried in my config.
+
+00:05:39.840 --> 00:05:46.719
+If I do it again, I'm sure I will find another thing
+
+00:05:46.720 --> 00:05:51.159
+that I've completely forgotten about
+
+00:05:51.160 --> 00:05:56.399
+and therefore have to recode or fix or whatever.
+
+00:05:56.400 --> 00:06:03.199
+But let me go see. Can you see my screen? Yep. OK.
+
+00:06:03.200 --> 00:06:07.559
+So, oh, yeah, yeah, this one. Nice, I remember that one.
+
+00:06:07.560 --> 00:06:13.719
+OK, so we get this SVG, and then this animateSVGPaths
+
+00:06:13.720 --> 00:06:16.959
+is just a function I have. It takes the file name.
+
+00:06:16.960 --> 00:06:22.039
+It makes an output there. It adds one path back at a time.
+
+00:06:22.040 --> 00:06:25.839
+And it just creates a lot of these numbered frames.
+
+00:06:25.840 --> 00:06:27.639
+So as you can see here,
+
+00:06:27.640 --> 00:06:30.039
+I'm just saying, OK, take the whole thing.
+
+00:06:30.040 --> 00:06:34.479
+And then I think, yeah, maybe I said it like,
+
+00:06:34.480 --> 00:06:36.999
+you know, take the whole thing,
+
+00:06:37.000 --> 00:06:40.199
+make everything transparent,
+
+00:06:40.200 --> 00:06:45.079
+and then one at a time, make them opaque
+
+00:06:45.080 --> 00:06:50.079
+and save that, save that to the frame, to the image.
+
+00:06:50.080 --> 00:06:54.319
+So this theoretically is a somewhat reusable function
+
+00:06:54.320 --> 00:07:01.039
+that takes the SVG and just fills the directory with it.
+
+00:07:01.040 --> 00:07:03.399
+What's the order in which it reveals things?
+
+00:07:03.400 --> 00:07:12.919
+Top to bottom or bottom to top, it's whatever the SVG has.
+
+00:07:12.920 --> 00:07:15.959
+And so if you're grouping things together,
+
+00:07:15.960 --> 00:07:17.599
+you can rearrange things in Inkscape.
+
+00:07:17.600 --> 00:07:22.039
+If you've given them IDs,
+
+00:07:22.040 --> 00:07:25.119
+which I have another function for in Emacs list
+
+00:07:25.120 --> 00:07:26.919
+that just highlights something
+
+00:07:26.920 --> 00:07:28.439
+and lets me put an ID for it,
+
+00:07:28.440 --> 00:07:30.879
+then you can rearrange them yourself
+
+00:07:30.880 --> 00:07:32.319
+by looking at the markup, I guess.
+
+00:07:32.320 --> 00:07:35.319
+Or I think I actually have some code also
+
+00:07:35.320 --> 00:07:37.039
+that will rearrange the path
+
+00:07:37.040 --> 00:07:39.279
+based on a list of IDs that I give it.
+
+00:07:39.280 --> 00:07:42.759
+and sequence so this one is animating
+
+00:07:42.760 --> 00:07:44.319
+one element at a time here
+
+00:07:44.320 --> 00:07:47.319
+um it's kind of like interesting effect
+
+00:07:47.320 --> 00:07:49.039
+but for larger things like for this one
+
+00:07:49.040 --> 00:07:52.039
+i can split this up into groups
+
+00:07:52.040 --> 00:07:59.599
+because i don't want to necessarily animate them letter by letter and that one
+
+00:07:59.600 --> 00:08:03.319
+Oh yes, this is the function that I have
+
+00:08:03.320 --> 00:08:05.319
+for identifying the paths
+
+00:08:05.320 --> 00:08:08.959
+and it highlights it and then it asks me for a name.
+
+00:08:08.960 --> 00:08:11.359
+And this is the one that reorders it.
+
+00:08:11.360 --> 00:08:14.559
+So I can say, this is the sequence
+
+00:08:14.560 --> 00:08:19.279
+that I want it animated in. And it will, yeah, good.
+
+00:08:19.280 --> 00:08:23.399
+So you don't actually need Inkscape at all, right?
+
+00:08:23.400 --> 00:08:24.999
+Because you have an elisp function
+
+00:08:25.000 --> 00:08:28.399
+that will let you assign the order interactively.
+
+00:08:28.400 --> 00:08:34.599
+Yeah, so if you're doing just all the elements one after the other,
+
+00:08:34.600 --> 00:08:39.279
+Inkscape is helpful for combining the different shapes,
+
+00:08:39.280 --> 00:08:41.399
+well, breaking it apart,
+
+00:08:41.400 --> 00:08:44.719
+because when I get the PDF and I convert it,
+
+00:08:44.720 --> 00:08:48.559
+it's like one big element that has a very complex path.
+
+00:08:48.560 --> 00:08:52.479
+And if I want to animate it element by element,
+
+00:08:52.480 --> 00:08:53.959
+I have to break it apart
+
+00:08:53.960 --> 00:08:59.759
+and then recombine it so that, you know, so that this O looks like it's hollow
+
+00:08:59.760 --> 00:09:01.079
+instead of like a circle.
+
+00:09:01.080 --> 00:09:02.959
+So there's a little bit of Inkscape
+
+00:09:02.960 --> 00:09:04.879
+cleaning up before then,
+
+00:09:04.880 --> 00:09:08.439
+but I really dislike the mouse heavy stuff of Inkscape
+
+00:09:08.440 --> 00:09:12.119
+for assigning IDs and things like that.
+
+00:09:12.120 --> 00:09:13.999
+I haven't quite gotten the hang of it.
+
+00:09:14.000 --> 00:09:16.119
+So this is what it looks like
+
+00:09:16.120 --> 00:09:17.919
+before you group the elements together
+
+00:09:17.920 --> 00:09:20.039
+and you combine paths,
+
+00:09:20.040 --> 00:09:22.079
+which is what you have to do Inkscape for,
+
+00:09:22.080 --> 00:09:24.879
+because I can't make sense of the numbers in Emacs someday.
+
+00:09:24.880 --> 00:09:30.319
+So just combine, combine, combine. But once it's there,
+
+00:09:30.320 --> 00:09:32.719
+I don't like having to set the ID in this
+
+00:09:32.720 --> 00:09:34.879
+object properties on the right side,
+
+00:09:34.880 --> 00:09:36.959
+because there's a lot of clicking.
+
+00:09:36.960 --> 00:09:40.559
+press escape and tab and tab, it's not reliable.
+
+00:09:40.560 --> 00:09:42.599
+So that's why I have this function
+
+00:09:42.600 --> 00:09:46.559
+and it lets me identify the paths and animate them
+
+00:09:46.560 --> 00:09:50.999
+from within Emacs, because Emacs is a text editor.
+
+00:09:51.000 --> 00:09:55.279
+Yeah, in name only, but anyway.
+
+00:09:55.280 --> 00:10:02.679
+So the groups, if you've already assigned groups in Inkscape,
+
+00:10:02.680 --> 00:10:06.519
+Then when you run it through this function in Emacs,
+
+00:10:06.520 --> 00:10:09.159
+you can assign an ordering to the groups,
+
+00:10:09.160 --> 00:10:10.599
+the order in which it will be revealed.
+
+00:10:10.600 --> 00:10:15.039
+Yeah. What I did was I gave it all IDs.
+
+00:10:15.040 --> 00:10:17.599
+So I gave each group an ID.
+
+00:10:17.600 --> 00:10:25.999
+And then when I have the ID, I can say, you know, maybe when I group it,
+
+00:10:26.000 --> 00:10:28.319
+I'm doing it in a bit of a haphazard way,
+
+00:10:28.320 --> 00:10:30.279
+not grouping the first thing first,
+
+00:10:30.280 --> 00:10:32.279
+and then the second thing, and the third thing.
+
+00:10:32.280 --> 00:10:34.399
+So it's a bit of a mess.
+
+00:10:34.400 --> 00:10:38.119
+And this one just resorts it by, I think,
+
+00:10:38.120 --> 00:10:41.479
+just looking everything up, storing it,
+
+00:10:41.480 --> 00:10:45.039
+and then putting it back in order.
+
+00:10:45.040 --> 00:10:49.159
+I probably have the code for this somewhere,
+
+00:10:49.160 --> 00:10:52.039
+and if it's not, it's in the source code.
+
+00:10:52.040 --> 00:10:53.039
+There should be a source.
+
+00:10:53.040 --> 00:10:57.599
+Yes, so this is an org source for this post,
+
+00:10:57.600 --> 00:11:01.279
+and if it's not in there, then it should be in my config,
+
+00:11:01.280 --> 00:11:03.679
+the definition of this function.
+
+00:11:03.680 --> 00:11:11.439
+We are to pass. Here we are. Yeah, there you go.
+
+00:11:11.440 --> 00:11:17.639
+So there, it just, it takes it, it looks for it,
+
+00:11:17.640 --> 00:11:19.719
+and it adds it to the first layer.
+
+00:11:19.720 --> 00:11:29.399
+Okay, you've just explained the magic,
+
+00:11:29.400 --> 00:11:31.159
+which makes it less magical,
+
+00:11:31.160 --> 00:11:36.279
+but also something I could try. Yeah, this is interesting.
+
+00:11:36.280 --> 00:11:41.759
+Yeah, S2G is surprisingly powerful. Yeah, I know.
+
+00:11:41.760 --> 00:11:43.679
+I know it can do a lot more
+
+00:11:43.680 --> 00:11:46.559
+than what we typically use it for.
+
+00:11:46.560 --> 00:11:53.039
+So you also had this feature where, I think you used CSS,
+
+00:11:53.040 --> 00:11:56.599
+where if you mouse over something in the SVG,
+
+00:11:56.600 --> 00:11:58.839
+something is highlighted in your webpage.
+
+00:11:58.840 --> 00:12:04.799
+Oh yeah, yeah, yeah. Like in the organizer's notebook.
+
+00:12:04.800 --> 00:12:07.959
+So I have a draft schedule here.
+
+00:12:07.960 --> 00:12:10.679
+Yeah, we've been doing all this stuff live, that schedule,
+
+00:12:10.680 --> 00:12:16.239
+where if you have, let's pick someone's talk.
+
+00:12:16.240 --> 00:12:22.119
+Oh, yeah, highlight.
+
+00:12:22.120 --> 00:12:26.159
+I think, oh, maybe it's the other way around.
+
+00:12:26.160 --> 00:12:30.839
+I need to put this stuff here first. Oh yeah, okay.
+
+00:12:30.840 --> 00:12:33.959
+So you'll notice here how if I add some JavaScript,
+
+00:12:33.960 --> 00:12:35.999
+it takes a look at what's in the URL.
+
+00:12:36.000 --> 00:12:38.439
+And if so, then it can highlight a specific thing
+
+00:12:38.440 --> 00:12:41.679
+using just, maybe CSS might be it.
+
+00:12:41.680 --> 00:12:47.879
+Actually, I think it's JavaScript setting the CSS style on it.
+
+00:12:47.880 --> 00:12:51.279
+But yeah, you can play around with CSS.
+
+00:12:51.280 --> 00:12:53.639
+See, this one has a slightly darker,
+
+00:12:53.640 --> 00:12:59.519
+slightly thicker background. So SVGs are great for that.
+
+00:12:59.520 --> 00:13:01.479
+And if you inspect it,
+
+00:13:01.480 --> 00:13:03.199
+which I don't think I have shared here,
+
+00:13:03.200 --> 00:13:07.559
+but if you inspect it, I will share my inspect.
+
+00:13:07.560 --> 00:13:10.719
+I have too many windows open,
+
+00:13:10.720 --> 00:13:12.079
+so I don't want to share my whole thing.
+
+00:13:12.080 --> 00:13:19.074
+But one of these, oh, I don't even know which, how do I find, okay,
+
+00:13:19.075 --> 00:13:20.366
+it's the developer tools window.
+
+00:13:20.367 --> 00:13:25.324
+Do I even have developer tools? Oh, I can't see it. OK.
+
+00:13:25.325 --> 00:13:29.491
+If you inspect the page on the developer thingy,
+
+00:13:29.492 --> 00:13:38.116
+then it will show the SVG element. Yeah.
+
+00:13:38.117 --> 00:13:41.240
+And unfortunately, I can't share it easily right now.
+
+00:13:41.241 --> 00:13:46.616
+Maybe just say inspect. Oh, this is actually, I think,
+
+00:13:46.617 --> 00:13:55.116
+how also the individual talks have current ones, right?
+
+00:13:55.117 --> 00:14:00.439
+So I just have this image over here,
+
+00:14:00.440 --> 00:14:01.719
+and then you just have that one,
+
+00:14:01.720 --> 00:14:05.999
+that specific talk styled differently.
+
+00:14:06.000 --> 00:14:13.159
+How did you generate this SVG,
+
+00:14:13.160 --> 00:14:14.639
+the one showing the schedule?
+
+00:14:14.640 --> 00:14:24.439
+Oh, okay, okay. Emacs. Book, book, book, book.
+
+00:14:24.440 --> 00:14:29.599
+Emacs publish, I think. Let me share it. Emacs conf pub.
+
+00:14:29.600 --> 00:14:36.119
+One of these windows. Okay, let's see.
+
+00:14:36.120 --> 00:14:39.199
+Slow down, look at all the windows.
+
+00:14:39.200 --> 00:14:40.639
+Okay, I'm just gonna share the whole screen.
+
+00:14:40.640 --> 00:14:50.519
+Screen two, no, screen one. All right, and okay.
+
+00:14:50.520 --> 00:15:05.759
+I think this is the one. Is it sharing my screen?
+
+00:15:05.760 --> 00:15:08.079
+It is not sharing my screen. I'm going to try this again.
+
+00:15:08.080 --> 00:15:23.119
+Okay. All right. So, the schedule. The schedule.
+
+00:15:23.120 --> 00:15:24.559
+This is the actual function
+
+00:15:24.560 --> 00:15:28.319
+that creates the SVG rectangles for the talks.
+
+00:15:28.320 --> 00:15:35.279
+Oops. My screen share ended. Let me do that again.
+
+00:15:35.280 --> 00:15:41.239
+All right, and as you can see,
+
+00:15:41.240 --> 00:15:45.039
+it's just a little bit of math for the X, the Y,
+
+00:15:45.040 --> 00:15:48.199
+we color it differently
+
+00:15:48.200 --> 00:15:52.839
+depending on whether I'm making the schedule for the public view.
+
+00:15:52.840 --> 00:15:58.439
+So we just, you know, do we do developer, development talk
+
+00:15:58.440 --> 00:15:59.919
+or general talk as colors,
+
+00:15:59.920 --> 00:16:02.639
+or if I want to color it for the backstage view,
+
+00:16:02.640 --> 00:16:04.719
+I can keep track of the talk's status.
+
+00:16:04.720 --> 00:16:07.799
+Anyway, so SDG track takes the track
+
+00:16:07.800 --> 00:16:09.239
+and all the talk information,
+
+00:16:09.240 --> 00:16:11.559
+and it makes all the little rectangles.
+
+00:16:11.560 --> 00:16:15.599
+And this is the thing that adds a little hover
+
+00:16:15.600 --> 00:16:17.919
+for the times and titles as well.
+
+00:16:17.920 --> 00:16:22.639
+So, Emacs's API for dealing with this is actually pretty good.
+
+00:16:22.640 --> 00:16:27.559
+Oh, and of course, I have a hook here that modifies it.
+
+00:16:27.560 --> 00:16:30.119
+You can just run through a different function,
+
+00:16:30.120 --> 00:16:32.519
+different functions to tweak it.
+
+00:16:32.520 --> 00:16:36.399
+So I could say, okay, color it in case my time constraints are,
+
+00:16:36.400 --> 00:16:37.839
+you know, not being met.
+
+00:16:37.840 --> 00:16:40.959
+And then I can paint about this somewhere.
+
+00:16:40.960 --> 00:16:51.119
+And the nice thing about this
+
+00:16:51.120 --> 00:17:06.719
+is it's actually, it's, you can, hang on a second, let me do this carefully.
+
+00:17:06.720 --> 00:17:07.999
+All right, here you go.
+
+00:17:08.000 --> 00:17:13.479
+It's super nice to be able to refer to it within Emacs itself
+
+00:17:13.480 --> 00:17:15.839
+because Emacs has SVG support.
+
+00:17:15.840 --> 00:17:19.679
+So this is, for example, the organizer view
+
+00:17:19.680 --> 00:17:24.039
+inside an org mode file. And it just has all those SVGs.
+
+00:17:24.040 --> 00:17:25.599
+It don't have the hover things,
+
+00:17:25.600 --> 00:17:27.399
+because it's just an image in it.
+
+00:17:27.400 --> 00:17:37.759
+But yeah, SVGs, Emacs, awesome. Oh, that's very cool.
+
+00:17:37.760 --> 00:17:40.719
+You're actually drawing the rectangles from scratch.
+
+00:17:40.720 --> 00:17:44.999
+It took a little bit of figuring out,
+
+00:17:45.000 --> 00:17:46.959
+especially since I realized
+
+00:17:46.960 --> 00:17:49.679
+I wanted horizontal on the wiki pages
+
+00:17:49.680 --> 00:17:51.359
+so that it fits on people's screens,
+
+00:17:51.360 --> 00:17:56.039
+but I wanted vertical in my organized review
+
+00:17:56.040 --> 00:18:09.199
+so that I don't have to keep tilting my head sideways.
+
+00:18:09.200 --> 00:18:12.359
+and this is the code for that.
+
+00:18:12.360 --> 00:18:19.439
+See, I'm just directly adding G nodes for groups
+
+00:18:19.440 --> 00:18:23.199
+or A nodes for the hyperlinks and rep as well.
+
+00:18:23.200 --> 00:18:27.319
+I think the SVG library also has functions
+
+00:18:27.320 --> 00:18:31.079
+for adding rectangles and things like that,
+
+00:18:31.080 --> 00:18:32.359
+but sometimes I vaguely remember
+
+00:18:32.360 --> 00:18:34.999
+sometimes you can't return the node that I'm expecting.
+
+00:18:35.000 --> 00:18:40.559
+So, it's okay to just use the DOM functions directly.
+
+00:18:40.560 --> 00:18:46.079
+And then the whole thing gets SVG printed afterwards.
+
+00:18:46.080 --> 00:18:54.079
+So I can just say SVG printed, and then it's good to go.
+
+00:18:54.080 --> 00:18:57.719
+Let me see. Actually, do I have SVG?
+
+00:18:57.720 --> 00:19:05.679
+Let's schedule for track SVG.
+
+00:19:05.680 --> 00:19:08.799
+It's a shame that you can't visually interact
+
+00:19:08.800 --> 00:19:11.559
+with parts of an SVG in Emacs the way you can in Emacs.
+
+00:19:11.560 --> 00:19:16.799
+Oh, some people have some interesting experiments with that.
+
+00:19:16.800 --> 00:19:18.839
+I haven't dug into it much,
+
+00:19:18.840 --> 00:19:21.639
+but people have figured out how to use the mouse events
+
+00:19:21.640 --> 00:19:26.199
+and then figure out what the, like there's LEC draw, right?
+
+00:19:26.200 --> 00:19:30.159
+So lecdraw is a package that lets you draw SVGs
+
+00:19:30.160 --> 00:19:33.039
+and you can drag things and whatever. So that's very cool.
+
+00:19:33.040 --> 00:19:37.159
+And there's also an org related package
+
+00:19:37.160 --> 00:19:43.439
+that lets you visualize your schedule as boxes.
+
+00:19:43.440 --> 00:19:45.639
+I'd like, yeah, that's a thing also.
+
+00:19:45.640 --> 00:19:46.919
+So people have experimented
+
+00:19:46.920 --> 00:19:49.439
+with mouse interaction and it's cool,
+
+00:19:49.440 --> 00:19:51.919
+but I haven't had the brain space to do that yet,
+
+00:19:51.920 --> 00:19:55.479
+but it would be nice. Yeah, you're right.
+
+00:19:55.480 --> 00:19:58.079
+I remember using easy draw
+
+00:19:58.080 --> 00:20:01.999
+and being surprised at what it can do.
+
+00:20:02.000 --> 00:20:05.119
+The only thing I think I discovered
+
+00:20:05.120 --> 00:20:10.279
+is that it ends up creating lots of new SVGs,
+
+00:20:10.280 --> 00:20:13.079
+kind of the way that you do
+
+00:20:13.080 --> 00:20:14.959
+when you show elements one by one,
+
+00:20:14.960 --> 00:20:19.079
+you are essentially creating one SVG for each state,
+
+00:20:19.080 --> 00:20:24.439
+one full SVG for each intermediate state of the presentation, let's say.
+
+00:20:24.440 --> 00:20:26.479
+That's kind of what ELEasyDraw does.
+
+00:20:26.480 --> 00:20:30.839
+And I thought that's not good for performance.
+
+00:20:30.840 --> 00:20:33.039
+And it is kind of on the slow side,
+
+00:20:33.040 --> 00:20:37.359
+if you compare it to like Inkscape or anything else.
+
+00:20:37.360 --> 00:20:40.959
+But yeah, what it can do is pretty amazing.
+
+00:20:40.960 --> 00:20:44.559
+you can dynamically modify an SVG object,
+
+00:20:44.560 --> 00:20:48.399
+and it will automatically get updated in Emacs,
+
+00:20:48.400 --> 00:20:52.519
+which is a technique that I use a lot in FFNS in subbed.
+
+00:20:52.520 --> 00:20:57.559
+So for example, if I have waveform show all in this,
+
+00:20:57.560 --> 00:21:03.239
+it will, like, it's very easy to just move one element, for example,
+
+00:21:03.240 --> 00:21:08.519
+or make an element larger or smaller.
+
+00:21:08.520 --> 00:21:13.279
+And that's the... It might be pretty efficient, I don't know,
+
+00:21:13.280 --> 00:21:20.199
+but I'm certainly not like writing it to disk each time and reloading it.
+
+00:21:20.200 --> 00:21:25.519
+Eric and I demoed in 2020 EmacsConf for Dungeon Mode Works,
+
+00:21:25.520 --> 00:21:29.399
+where we demonstrated, you know, showing parts of the map
+
+00:21:29.400 --> 00:21:31.649
+and then, you know, different characters
+
+00:21:31.650 --> 00:21:33.839
+have different abilities that show,
+
+00:21:33.840 --> 00:21:36.599
+that allow you to see different dungeon features.
+
+00:21:36.600 --> 00:21:38.799
+And then if your last character,
+
+00:21:38.800 --> 00:21:42.719
+you know, of that class or race dies,
+
+00:21:42.720 --> 00:21:44.479
+then you suddenly can't see
+
+00:21:44.480 --> 00:21:46.759
+secret doors or whatever anymore.
+
+00:21:46.760 --> 00:21:48.719
+And so just make that disappear
+
+00:21:48.720 --> 00:21:50.559
+between one turn and the next
+
+00:21:50.560 --> 00:21:54.919
+is just working with just simply update the SVG
+
+00:21:54.920 --> 00:21:57.679
+and there goes the screen. No, no, no bus, no bus.
+
+00:21:57.680 --> 00:22:01.559
+It's pretty awesome. So this is an example
+
+00:22:01.560 --> 00:22:07.159
+of how I'm using it to kind of show where we are in the, in the track.
+
+00:22:07.160 --> 00:22:09.639
+And then here's mouse, mouse interaction, right?
+
+00:22:09.640 --> 00:22:21.359
+I can change my timestamp right from there. Which is fine.
+
+00:22:21.360 --> 00:22:28.079
+So, I'm curious how this works exactly.
+
+00:22:28.080 --> 00:22:31.799
+To effect any kind of change in the SVG,
+
+00:22:31.800 --> 00:22:36.239
+you have to use the DOM library, right? Yes.
+
+00:22:36.240 --> 00:22:39.319
+Okay, so, but that means that it's going to be,
+
+00:22:39.320 --> 00:22:43.639
+anytime you make a change, it's going to read in the XML,
+
+00:22:43.640 --> 00:22:47.999
+convert it to an Elisp DOM, right?
+
+00:22:48.000 --> 00:22:50.919
+And then you modify that tree.
+
+00:22:50.920 --> 00:22:55.839
+Yeah, you keep the DOM, like, well, in this case, for example,
+
+00:22:55.840 --> 00:23:00.879
+I'm actually constructing it using Emacs list objects directly.
+
+00:23:00.880 --> 00:23:02.959
+If you were working with an external SVG,
+
+00:23:02.960 --> 00:23:05.199
+you would parse it first, yes,
+
+00:23:05.200 --> 00:23:07.919
+using XML parse file or something like that.
+
+00:23:07.920 --> 00:23:11.999
+and then you would have it in memory.
+
+00:23:12.000 --> 00:23:14.559
+When you insert the image,
+
+00:23:14.560 --> 00:23:18.519
+you insert the list document object model that you have,
+
+00:23:18.520 --> 00:23:21.199
+and then any changes you make to that document object model
+
+00:23:21.200 --> 00:23:25.519
+automatically get updated in the image somehow.
+
+00:23:25.520 --> 00:23:33.559
+Oh, that's fantastic. Yeah. Yeah. I'll show you the code. Yeah.
+
+00:23:33.560 --> 00:23:38.079
+So I was under the impression
+
+00:23:38.080 --> 00:23:40.096
+that there's a round trip to XML involved
+
+00:23:40.097 --> 00:23:42.298
+to do anything like to go from displayed
+
+00:23:42.299 --> 00:23:46.079
+to in-memory to in-memory modified back
+
+00:23:46.080 --> 00:23:47.839
+to display all around trip.
+
+00:23:47.840 --> 00:23:52.959
+Yeah. So let me see where's my thing that changes it.
+
+00:23:52.960 --> 00:23:59.079
+So when it's the time.
+
+00:23:59.080 --> 00:24:06.999
+It's probably some kind of hook that I'm listening to here.
+
+00:24:07.000 --> 00:24:12.879
+Playback position hook. Oh, it's this update current bar.
+
+00:24:12.880 --> 00:24:15.999
+All right, so what update current bar does
+
+00:24:16.000 --> 00:24:19.319
+is it moves the bar to the right place.
+
+00:24:19.320 --> 00:24:21.159
+And you see here how this SVG,
+
+00:24:21.160 --> 00:24:24.719
+I'm actually just reading it off the text property
+
+00:24:24.720 --> 00:24:28.279
+so that I know which one is the current one in the overlay.
+
+00:24:28.280 --> 00:24:31.399
+I remove the old one, just the element.
+
+00:24:31.400 --> 00:24:34.279
+I don't have to mess around with the image.
+
+00:24:34.280 --> 00:24:35.599
+I removed the old one for some reason,
+
+00:24:35.600 --> 00:24:36.839
+just to make sure, I guess.
+
+00:24:36.840 --> 00:24:38.879
+You can actually just update the attribute on it.
+
+00:24:38.880 --> 00:24:42.919
+Oh, I think this is just so that I don't have to worry
+
+00:24:42.920 --> 00:24:45.519
+about whether there is one or there isn't.
+
+00:24:45.520 --> 00:24:47.959
+And then I add a bar at the right position
+
+00:24:47.960 --> 00:24:52.519
+and then it makes that little animated sweeping thingy.
+
+00:24:52.520 --> 00:24:55.959
+So you see how I'm not recreating the SVG at this point.
+
+00:24:55.960 --> 00:25:02.559
+I'm just getting it from the overlay.
+
+00:25:02.560 --> 00:25:07.479
+Yeah, that's very interesting. I wonder what it's doing.
+
+00:25:07.480 --> 00:25:09.919
+what it's actually doing under the hood when you run SVG removal.
+
+00:25:09.920 --> 00:25:19.439
+Yeah, I don't know, too. I think it's RSVG is tied
+
+00:25:19.440 --> 00:25:32.039
+into the display engine, so to speak. Yeah, that it is.
+
+00:25:32.040 --> 00:25:33.919
+But RSVG, the library,
+
+00:25:33.920 --> 00:25:39.199
+can only deal with actual SVGs, right, like XML SVGs,
+
+00:25:39.200 --> 00:25:43.119
+but we're dealing with the ELISP DOM of an SVG.
+
+00:25:43.120 --> 00:25:47.559
+So the display engine can re-enter the LISP.
+
+00:25:47.560 --> 00:25:49.519
+I do know that the display engine
+
+00:25:49.520 --> 00:25:51.839
+can re-enter the LISP engine,
+
+00:25:51.840 --> 00:25:53.599
+so I think that may be the answer.
+
+00:25:53.600 --> 00:25:58.759
+Yeah, you can just SVG insert image the object itself.
+
+00:25:58.760 --> 00:26:01.879
+So here, for example, SVG create just creates,
+
+00:26:01.880 --> 00:26:04.239
+it actually just creates a DOM model.
+
+00:26:04.240 --> 00:26:06.599
+So this is Lisp, and it's not,
+
+00:26:06.600 --> 00:26:09.079
+it doesn't get printed to string representation or anything.
+
+00:26:09.080 --> 00:26:13.239
+And then you can SVG insert image,
+
+00:26:13.240 --> 00:26:15.159
+or you can set the display and, you know,
+
+00:26:15.160 --> 00:26:20.719
+and use pass it like as an SVG image.
+
+00:26:20.720 --> 00:26:22.599
+SVG image gives you an image object
+
+00:26:22.600 --> 00:26:24.679
+if you want to do the like the regular
+
+00:26:24.680 --> 00:26:31.199
+sort of display thingy. Actually, that one says it turns it
+
+00:26:31.200 --> 00:26:34.399
+into a string representation.
+
+00:26:34.400 --> 00:26:36.719
+Or at least maybe that's just how it gets retrained.
+
+00:26:36.720 --> 00:26:38.559
+Anyhow, some kind of magic happens,
+
+00:26:38.560 --> 00:26:39.919
+but I don't have to worry about it.
+
+00:26:39.920 --> 00:26:44.119
+It just stays on my side. Yeah, but I was thinking about it
+
+00:26:44.120 --> 00:26:49.599
+because I expect that if it's converting to XML all the time, every time you make a change,
+
+00:26:49.600 --> 00:26:52.119
+then that's going to be the bottleneck
+
+00:26:52.120 --> 00:26:58.119
+for any kind of heavy interactive SVG editing or modification in Emacs.
+
+00:26:58.120 --> 00:27:01.199
+The kind that ELEasyDraw does.
+
+00:27:01.200 --> 00:27:03.839
+But maybe if we make it compelling enough,
+
+00:27:03.840 --> 00:27:07.279
+then the folks upstream can say, all right,
+
+00:27:07.280 --> 00:27:10.239
+like the way that JSON got a lot faster.
+
+00:27:10.240 --> 00:27:13.359
+Who knows? Maybe we can get that to be faster too. Yeah.
+
+00:27:13.360 --> 00:27:19.199
+I see a lot of potential for better UIs in Emacs
+
+00:27:19.200 --> 00:27:22.719
+with using SVGs. Yeah.
+
+00:27:22.720 --> 00:27:26.319
+Nicolas Rougier has all those experiments, right?
+
+00:27:26.320 --> 00:27:30.159
+Yeah, but all of those, I think, are bound by the limitations
+
+00:27:30.160 --> 00:27:33.599
+of how deeply SVGs are embedded in the display engine,
+
+00:27:33.600 --> 00:27:36.359
+because that's kind of what we're discussing.
+
+00:27:36.360 --> 00:27:38.479
+We want to avoid going to XML,
+
+00:27:38.480 --> 00:27:41.479
+I mean, going from XML to Elisp DOM
+
+00:27:41.480 --> 00:27:44.839
+to modified Elisp DOM back to XML.
+
+00:27:44.840 --> 00:27:50.079
+We want to avoid that round trip. Yeah, for sure.
+
+00:27:50.080 --> 00:28:04.799
+Or make that as fast as possible, yeah.
+
+00:28:04.800 --> 00:28:11.919
+Does anyone else have anything they want to share?
+
+00:28:11.920 --> 00:28:13.919
+I've always got stuff I can share,
+
+00:28:13.920 --> 00:28:17.639
+but I pretty happily defer. I've already seen what I made.
+
+00:28:17.640 --> 00:28:28.759
+Karthik? Oh, I'm a fly on a wall here. I'm not.
+
+00:28:28.760 --> 00:28:32.199
+Okay. I didn't come in with the intent to share anything.
+
+00:28:32.200 --> 00:28:34.239
+Yeah. How about you, Sacha?
+
+00:28:34.240 --> 00:28:37.999
+Do you have other stuff you haven't shown off recently?
+
+00:28:38.000 --> 00:28:39.839
+Aside from all the panicking
+
+00:28:39.840 --> 00:28:42.599
+about getting EmacsConf together this year?
+
+00:28:42.600 --> 00:28:45.399
+I just wanted to bring it up.
+
+00:28:45.400 --> 00:28:50.359
+Yeah, let's see, what do I have in my recent, like, fiddled with?
+
+00:28:50.360 --> 00:28:53.999
+So I have a project called...
+
+00:28:54.000 --> 00:28:56.879
+I have a project called Ufta, which is a little bit fun.
+
+00:28:56.880 --> 00:29:00.159
+Let me pull it up here before I share.
+
+00:29:00.160 --> 00:29:08.959
+You can see my messy, messy desktop. Okay, there it is.
+
+00:29:08.960 --> 00:29:21.519
+And that's supposed to want a shell. Probably that one.
+
+00:29:21.520 --> 00:29:29.119
+And we'll just bootroot. keeping in mind that graphics
+
+00:29:29.120 --> 00:29:33.399
+is going to end in about five minutes. Ooh, perfect.
+
+00:29:33.400 --> 00:29:38.959
+That'll keep me from from being my normal long-winded self.
+
+00:29:38.960 --> 00:29:47.239
+Have you already made contact with Emmanuel? I was not.
+
+00:29:47.240 --> 00:29:50.159
+Okay, I'm going to quickly do a check in.
+
+00:29:50.160 --> 00:30:00.119
+Okay, sounds good. Did you hear back from him?
+
+00:30:00.120 --> 00:30:01.039
+Assume that's a yes.
+
+00:30:01.040 --> 00:30:04.399
+All right, I'll go ahead and share screen here
+
+00:30:04.400 --> 00:30:08.879
+and just take a look, a very brief look at this.
+
+00:30:08.880 --> 00:30:16.719
+Assuming I can present. I had a question for Sacha.
+
+00:30:16.720 --> 00:30:22.399
+I had a question for Sacha and you, Corbin.
+
+00:30:22.400 --> 00:30:28.759
+Hello. Yeah, you're good. Go for it. Yeah, yeah.
+
+00:30:28.760 --> 00:30:33.319
+So in past years, in the EmacsConf,
+
+00:30:33.320 --> 00:30:36.799
+there was a talk by someone,
+
+00:30:36.800 --> 00:30:40.999
+usually John Wheatley, or I think Philip last year,
+
+00:30:41.000 --> 00:30:44.079
+about new developments in Emacs.
+
+00:30:44.080 --> 00:30:48.679
+Yes, and that is kind of at the whim
+
+00:30:48.680 --> 00:30:50.079
+of the Emacs developers,
+
+00:30:50.080 --> 00:30:56.919
+whether that is included in the in the conference.
+
+00:30:56.920 --> 00:30:59.679
+It's kind of up to the, you know, how busy folks are
+
+00:30:59.680 --> 00:31:02.879
+and whether somebody can follow up the time to prepare it.
+
+00:31:02.880 --> 00:31:07.119
+I see. Yeah, I noticed that there wasn't one for this year.
+
+00:31:07.120 --> 00:31:09.999
+And I know of at least one improvement
+
+00:31:10.000 --> 00:31:12.359
+or one change to Emacs.
+
+00:31:12.360 --> 00:31:17.559
+It's small, but I'm guessing it's very crucial
+
+00:31:17.560 --> 00:31:20.359
+for a certain class of Emacs users.
+
+00:31:20.360 --> 00:31:24.239
+And I can talk about that, just that one thing.
+
+00:31:24.240 --> 00:31:29.719
+But you can, you can, you can go right.
+
+00:31:29.720 --> 00:31:32.599
+So I can't share anything and we've got about one minute.
+
+00:31:32.600 --> 00:31:39.719
+So have that. Okay. Um, so the change is that, uh,
+
+00:31:39.720 --> 00:31:41.919
+in the development version of Emacs,
+
+00:31:41.920 --> 00:31:46.919
+sorry, child frames are now supported
+
+00:31:46.920 --> 00:31:53.679
+in terminal in the terminal.
+
+00:31:53.680 --> 00:31:56.519
+And I suspect that not many people know about it yet,
+
+00:31:56.520 --> 00:32:03.839
+but basically this means something like Corfu is going to work fine
+
+00:32:03.840 --> 00:32:05.479
+when you're running Emacs in a terminal,
+
+00:32:05.480 --> 00:32:14.159
+as well as pause frames or anything that shows like a little pop-up window
+
+00:32:14.160 --> 00:32:19.159
+that previously did not work in Terminal Emacs.
+
+00:32:19.160 --> 00:32:27.519
+That's it. That's the update. Cool.
+
+00:32:27.520 --> 00:32:29.359
+Okay, there I have a share screen button.
+
+00:32:29.360 --> 00:32:31.999
+We'll see if I think we're just about to cut away,
+
+00:32:32.000 --> 00:32:34.919
+but I'll go ahead and see if I can get this going.
+
+00:32:34.920 --> 00:32:36.679
+I'll just share my whole screen
+
+00:32:36.680 --> 00:32:39.599
+and this will be a little ugly as it comes in.
+
+00:32:39.600 --> 00:32:44.359
+So this is a project that I think is a little bit fun.
+
+00:32:44.360 --> 00:32:47.519
+It's called Oopda. And basically what this does,
+
+00:32:47.520 --> 00:32:49.759
+you can see it on my source site,
+
+00:32:49.760 --> 00:32:55.159
+that's sr.ht tilde mplscorewin slash Oopda.
+
+00:32:55.160 --> 00:32:59.599
+O-F-D-A, and this is a very simple approach
+
+00:32:59.600 --> 00:33:04.639
+to using an org file as a replacement for SQLite.
+
+00:33:04.640 --> 00:33:12.239
+It's very simple, but it does support like a dot style path and notation.
+
+00:33:12.240 --> 00:33:16.319
+So you can get at deeply nested data
+
+00:33:16.320 --> 00:33:19.159
+and just gives a little,
+
+00:33:19.160 --> 00:33:24.159
+there's a shell script wrapper that comes with it.
+
+00:33:24.160 --> 00:33:26.319
+All right.
+
+00:33:26.320 --> 00:33:32.759
+Theoretically, this is the Q&A for the graphics talk.
+
+00:33:32.760 --> 00:33:38.079
+Oops, I have to unmute over here. Sorry.
+
+00:33:38.080 --> 00:33:52.999
+All right, I had a little audio bleed through,
+
+00:33:53.000 --> 00:34:02.399
+my apologies, can you still hear me?
+
+00:34:02.400 --> 00:34:03.719
+All right, I'm gonna guess,
+
+00:34:03.720 --> 00:34:05.759
+because I still see us live on the screen
+
+00:34:05.760 --> 00:34:12.839
+that we're still live. All right, so I'll just press on.
+
+00:34:12.840 --> 00:34:18.599
+So what we're looking at here is a project called Upta.
+
+00:34:18.600 --> 00:34:21.239
+Here's the Emacs Lisp source port.
+
+00:34:21.240 --> 00:34:23.199
+You can see it's not real impressive
+
+00:34:23.200 --> 00:34:24.759
+even with all of its boilerplate.
+
+00:34:24.760 --> 00:34:27.399
+It's under 200 lines of code.
+
+00:34:27.400 --> 00:34:30.599
+And this is kind of a proof of concept,
+
+00:34:30.600 --> 00:34:34.999
+giving us the ability to use a org.org file
+
+00:34:35.000 --> 00:34:38.279
+as a flat file database. The intention here is to get
+
+00:34:38.280 --> 00:34:40.439
+a kind of transition from SQLite,
+
+00:34:40.440 --> 00:34:44.239
+which is using a flat text file as a database,
+
+00:34:44.240 --> 00:34:48.879
+to being able to have more of a literate database
+
+00:34:48.880 --> 00:34:52.759
+where we can intermix documentation about the data
+
+00:34:52.760 --> 00:34:54.119
+with the data itself,
+
+00:34:54.120 --> 00:34:57.599
+and then by giving a path on the command line.
+
+00:34:57.600 --> 00:35:02.199
+I'll go back to the README, just take a look at that.
+
+00:35:02.200 --> 00:35:05.239
+And you can see there's a couple of kind of examples here
+
+00:35:05.240 --> 00:35:11.319
+where we're, here we would be querying a path.
+
+00:35:11.320 --> 00:35:15.479
+We can also provide a value
+
+00:35:15.480 --> 00:35:20.039
+and that'll set data into the file.
+
+00:35:20.040 --> 00:35:23.119
+It also has an optional first parameter
+
+00:35:23.120 --> 00:35:26.319
+to specify the specific org file by default.
+
+00:35:26.320 --> 00:35:29.399
+It looks for a file called data.org.
+
+00:35:29.400 --> 00:35:34.279
+And of course that can be used inside Emacs as well,
+
+00:35:34.280 --> 00:35:37.799
+although the value of that may be a little bit limited
+
+00:35:37.800 --> 00:35:39.799
+compared to more sophisticated
+
+00:35:39.800 --> 00:35:41.799
+technologies like org-element.
+
+00:35:41.800 --> 00:35:43.839
+This is not an implementation
+
+00:35:43.840 --> 00:35:47.159
+that mirrors all of org-element
+
+00:35:47.160 --> 00:35:50.079
+or any of the more complex functionality of org.
+
+00:35:50.080 --> 00:35:52.919
+It's really as simple as possible proof of concept
+
+00:35:52.920 --> 00:35:57.679
+to just to be able to kind of work
+
+00:35:57.680 --> 00:35:59.559
+with the data inside an org file
+
+00:35:59.560 --> 00:36:01.679
+and get it back out on the command line.
+
+00:36:01.680 --> 00:36:07.839
+So we'll see if we can make it work here.
+
+00:36:07.840 --> 00:36:13.479
+Corwin, could you increase the font size?
+
+00:36:13.480 --> 00:36:27.199
+I surely will. All right. How's that?
+
+00:36:27.200 --> 00:36:30.999
+That's my picture. Yeah. Okay. Cool.
+
+00:36:31.000 --> 00:36:39.159
+So, let's see if we do have a, well, we can probably make it.
+
+00:36:39.160 --> 00:37:00.839
+Let's do this.
+
+00:37:00.840 --> 00:37:05.159
+All right, and then in theory, this just works.
+
+00:37:05.160 --> 00:37:42.199
+So we'll cut.
+
+00:37:42.200 --> 00:37:45.840
+So we'll just create a data file called data.org.
+
+00:37:45.880 --> 00:37:50.239
+Make sure that works. Looks reasonable.
+
+00:37:50.240 --> 00:38:13.079
+Let's try adding some data to it. Hmm, not so happy.
+
+00:38:13.080 --> 00:38:17.559
+Okay, let's try it the hard way.
+
+00:38:17.560 --> 00:38:21.079
+I'll come back over here to my usage
+
+00:38:21.080 --> 00:38:23.199
+and we'll just try running it.
+
+00:38:23.200 --> 00:38:37.319
+Is Emacs, is finding Emacs really the issue?
+
+00:38:37.320 --> 00:38:41.199
+It seems to me it's not, it's not liking my path.
+
+00:38:41.200 --> 00:38:44.079
+It's not finding out that I do EO and PWD.
+
+00:38:44.080 --> 00:38:49.519
+It wants it to be on the log. I see.
+
+00:38:49.520 --> 00:38:54.119
+So I may have to even mess with that further,
+
+00:38:54.120 --> 00:38:55.359
+but we'll just try it.
+
+00:38:55.360 --> 00:39:04.839
+So this should retrieve the value if it works.
+
+00:39:04.840 --> 00:39:17.119
+Oh, and let's take a take a simple
+
+00:39:17.120 --> 00:39:47.319
+Yeah, add-to-list takes a symbol.
+
+00:39:47.320 --> 00:39:52.639
+We're going to have issues with bash quoting,
+
+00:39:52.640 --> 00:39:58.559
+so you should escape the quoting side.
+
+00:39:58.560 --> 00:40:27.719
+Gotcha. You're kidding.
+
+00:40:27.720 --> 00:40:36.560
+I'm not letting go. Whoa. That might work.
+
+00:40:36.600 --> 00:41:02.159
+I got my parents right. Never demo live. How exciting. OK.
+
+00:41:02.160 --> 00:41:13.079
+Without batch, though, we may not get our output. OK.
+
+00:41:13.080 --> 00:41:20.320
+Well, that's as far as I'm going to take it.
+
+00:41:20.400 --> 00:41:21.959
+I should have prepped a demo environment.
+
+00:41:21.960 --> 00:41:26.879
+I wasn't really prepared to demo. No worries.
+
+00:41:26.880 --> 00:41:30.719
+Couple of questions about this feature.
+
+00:41:30.720 --> 00:41:37.799
+The first question is, do you use it? I do use it, yeah.
+
+00:41:37.800 --> 00:41:41.279
+I should have gotten onto the environment
+
+00:41:41.280 --> 00:41:45.599
+where I'm using it. It's a little messy.
+
+00:41:45.600 --> 00:41:47.079
+It gets into another project
+
+00:41:47.080 --> 00:41:48.839
+that's way too complicated to get into.
+
+00:41:48.840 --> 00:41:53.079
+Yeah, but what kinds of things do you use it for?
+
+00:41:53.080 --> 00:41:56.999
+It's sort of hard to answer
+
+00:41:57.000 --> 00:41:59.159
+that without getting into my other project,
+
+00:41:59.160 --> 00:42:02.919
+but essentially I've got a web development tool chain
+
+00:42:02.920 --> 00:42:05.759
+that is kind of a web-based REPL
+
+00:42:05.760 --> 00:42:10.919
+that is kind of a literate compute environment, if you will,
+
+00:42:10.920 --> 00:42:13.119
+allowing me to use a bunch of virtual machines
+
+00:42:13.120 --> 00:42:19.079
+as one big computer. That project is called Ghost Wheel.
+
+00:42:19.080 --> 00:42:23.719
+And so in order to show off the homepage,
+
+00:42:23.720 --> 00:42:30.359
+So on this page, you can see the list of machines,
+
+00:42:30.360 --> 00:42:34.759
+and then you'll also see there's these state indicators.
+
+00:42:34.760 --> 00:42:38.439
+And right now, as a matter of fact,
+
+00:42:38.440 --> 00:42:41.239
+what I've been hacking on
+
+00:42:41.240 --> 00:42:44.879
+is trying to get support for org tables.
+
+00:42:44.880 --> 00:42:48.759
+Right now, I support only changing all of the data
+
+00:42:48.760 --> 00:42:51.959
+within some heading, subheading, or whatever.
+
+00:42:51.960 --> 00:42:55.079
+What I'd like to be able to do is specify,
+
+00:42:55.080 --> 00:43:01.079
+using org table fm syntax, the particular row column.
+
+00:43:01.080 --> 00:43:03.839
+So find a particular named table,
+
+00:43:03.840 --> 00:43:06.559
+find a particular row, you know,
+
+00:43:06.560 --> 00:43:08.639
+column one, you know, row two, column one,
+
+00:43:08.640 --> 00:43:11.919
+and then set the value from the command.
+
+00:43:11.920 --> 00:43:18.359
+Currently, I just use it for very simple stuff.
+
+00:43:18.360 --> 00:43:20.519
+I don't really want to show that off.
+
+00:43:20.520 --> 00:43:23.599
+I've got another page that lists all of the DNS names
+
+00:43:23.600 --> 00:43:26.159
+that are associated that are hosted on Ghostwheel.
+
+00:43:26.160 --> 00:43:29.319
+And so I use that to add items to the list.
+
+00:43:29.320 --> 00:43:40.439
+Does it make sense? Yeah, it sounds useful.
+
+00:43:40.440 --> 00:43:47.279
+So one thing that I would like,
+
+00:43:47.280 --> 00:43:51.479
+I guess it's easy enough to write,
+
+00:43:51.480 --> 00:43:58.799
+but is a tool exactly like this
+
+00:43:58.800 --> 00:44:03.839
+where I can query my org files from the command line?
+
+00:44:03.840 --> 00:44:06.879
+Yeah, that's exactly what it says.
+
+00:44:06.880 --> 00:44:14.599
+Yeah, but it's going to be more
+
+00:44:14.600 --> 00:44:23.319
+like a database query where, you know, I say select, select all headings where, you know,
+
+00:44:23.320 --> 00:44:27.279
+that contain this string or that have this tag, right?
+
+00:44:27.280 --> 00:44:38.519
+The kinds of things that you can do with org-ql from outside, from inside Emacs, right?
+
+00:44:38.520 --> 00:44:41.119
+To be able to do those from the command line with,
+
+00:44:41.120 --> 00:44:48.279
+I'm going to invoke SQL here, like SQL SELECT statements,
+
+00:44:48.280 --> 00:44:50.519
+but it doesn't have to be that syntax, right?
+
+00:44:50.520 --> 00:44:52.519
+Just that capability.
+
+00:44:52.520 --> 00:44:57.079
+Yeah, I can see that being useful as a command line tool.
+
+00:44:57.080 --> 00:44:59.399
+And I don't even care about write,
+
+00:44:59.400 --> 00:45:02.399
+like the ability to write or manipulate the file.
+
+00:45:02.400 --> 00:45:11.799
+Just query. the command line that sounds yeah yeah exactly
+
+00:45:11.800 --> 00:45:15.159
+to be able to dig a piece of data out of an org file as well
+
+00:45:15.160 --> 00:45:18.359
+for my purpose it's very useful to be able to replace it
+
+00:45:18.360 --> 00:45:20.999
+because then i can deal with submit the form you know
+
+00:45:21.000 --> 00:45:23.999
+and that might be like a sign up form
+
+00:45:24.000 --> 00:45:29.159
+and then i just add the user add up an entry into the org file
+
+00:45:29.160 --> 00:45:35.239
+for that user right what it doesn't do is a relational data
+
+00:45:35.240 --> 00:45:40.559
+So everything, it's essentially a document data store.
+
+00:45:40.560 --> 00:45:53.959
+Like a Mongo kind of. True. So over on IRC, ScrewLisp asks,
+
+00:45:53.960 --> 00:45:57.279
+what does it mean to query an ARC file?
+
+00:45:57.280 --> 00:46:01.679
+Is the data in a table? Is it in an ELISP nested list view
+
+00:46:01.680 --> 00:46:06.559
+of a table that has a name in ARC?
+
+00:46:06.560 --> 00:46:10.639
+And my answer to that is that if you ever used RQL,
+
+00:46:10.640 --> 00:46:14.199
+written by Alpha Papa,
+
+00:46:14.200 --> 00:46:18.039
+then that's the kind of thing I'm talking about.
+
+00:46:18.040 --> 00:46:23.119
+So, you query based on one of a set of attributes.
+
+00:46:23.120 --> 00:46:30.599
+And these attributes are anything that's recognized by ARC.
+
+00:46:30.600 --> 00:46:35.239
+For example, the to-do status, the dates,
+
+00:46:35.240 --> 00:46:40.399
+the outline path, the headings, a full text search.
+
+00:46:40.400 --> 00:46:43.479
+There are several more.
+
+00:46:43.480 --> 00:46:46.079
+The presence or absence of certain properties.
+
+00:46:46.080 --> 00:46:50.879
+using any combination of those if you want to dig down
+
+00:46:50.880 --> 00:46:52.759
+and find some data in an art file.
+
+00:46:52.760 --> 00:46:56.079
+That's the kind of query I'm talking about.
+
+00:46:56.080 --> 00:46:58.239
+It is somewhat equivalent
+
+00:46:58.240 --> 00:47:02.359
+to being able to write SQL queries
+
+00:47:02.360 --> 00:47:09.719
+where you match on things just for your art files.
+
+00:47:09.720 --> 00:47:21.199
+Okay. I think we might have figured out our problem.
+
+00:47:21.200 --> 00:47:38.839
+It was DOS encoding. See if that works.
+
+00:47:38.840 --> 00:47:47.879
+I switched the development track over
+
+00:47:47.880 --> 00:47:53.559
+to just watching the gen track since I couldn't find it.
+
+00:47:53.560 --> 00:47:57.359
+Also, Eludo wants to mention
+
+00:47:57.360 --> 00:48:00.799
+the Emacs Carnival theme for December.
+
+00:48:00.800 --> 00:48:02.359
+Yes, the people of Emacs,
+
+00:48:02.360 --> 00:48:04.119
+of which you are all very awesome.
+
+00:48:04.120 --> 00:48:05.519
+Thank you so much for your patience.
+
+00:48:05.520 --> 00:48:08.159
+Today has been very interesting.
+
+00:48:08.160 --> 00:48:13.359
+But yes, at some point we can show that too.
+
+00:48:13.360 --> 00:48:17.199
+And we can basically wrap up anytime we like
+
+00:48:17.200 --> 00:48:19.279
+or hang out for as much time as we like also.
+
+00:48:19.280 --> 00:48:23.279
+okay so this is okay at least i got
+
+00:48:23.280 --> 00:48:24.519
+as far as a working demo here
+
+00:48:24.520 --> 00:48:26.439
+so now you can kind of see what's going on um
+
+00:48:26.440 --> 00:48:31.599
+and i'll just wrap that into uh
+
+00:48:31.600 --> 00:48:40.959
+into a little prettier output
+
+00:48:40.960 --> 00:48:53.159
+And you can see that it modified the value.
+
+00:48:53.160 --> 00:48:59.479
+So it's pretty darn simple.
+
+00:48:59.480 --> 00:49:06.159
+Again, all it's doing is completely replacing all of this content
+
+00:49:06.160 --> 00:49:11.679
+with whatever new value is given as its final argument
+
+00:49:11.680 --> 00:49:14.879
+after naming the data path.
+
+00:49:14.880 --> 00:49:23.439
+So the one refinement we can do just to get a little more complex example going.
+
+00:49:23.440 --> 00:49:32.759
+We'll deepen our structure a little bit. And try that.
+
+00:49:32.760 --> 00:49:38.799
+So here now we'll say test two.
+
+00:49:38.800 --> 00:49:47.639
+And we can take a look at the data file
+
+00:49:47.640 --> 00:49:51.599
+and see that it has adjusted that
+
+00:49:51.600 --> 00:49:55.959
+because test2 was completely unique, that worked fine.
+
+00:49:55.960 --> 00:50:00.519
+If that were not the case,
+
+00:50:00.520 --> 00:50:02.599
+we would have had to specify the path
+
+00:50:02.600 --> 00:50:17.679
+using dot notation like this. And that's pretty much it.
+
+00:50:17.680 --> 00:50:20.759
+It took me much longer to figure out
+
+00:50:20.760 --> 00:50:23.759
+why it wasn't just working than it did to demo it.
+
+00:50:23.760 --> 00:50:29.239
+And again, what I really like about this program,
+
+00:50:29.240 --> 00:50:31.639
+besides the fact that I find it quite useful
+
+00:50:31.640 --> 00:50:34.639
+to just be able to stuff values into an org file
+
+00:50:34.640 --> 00:50:36.439
+from the command line using shell script,
+
+00:50:36.440 --> 00:50:41.279
+is what I really like about this
+
+00:50:41.280 --> 00:50:45.999
+is that it's a whopping 190 lines of code,
+
+00:50:46.000 --> 00:50:47.919
+including all the boilerplate.
+
+00:50:47.920 --> 00:50:55.759
+And I will share the project into the chat.
+
+00:50:55.760 --> 00:51:02.199
+So, Corwin, you're not using org-element for this, are you?
+
+00:51:02.200 --> 00:51:06.799
+No. Yeah, that's a great question.
+
+00:51:06.800 --> 00:51:10.839
+Let's just dig a little into the code here.
+
+00:51:10.840 --> 00:51:21.039
+Or maybe it would be more fun to actually
+
+00:51:21.040 --> 00:51:26.719
+So the only real requires here, I do use cl-lib mostly.
+
+00:51:26.720 --> 00:51:33.159
+I'm directly using the macros from org.
+
+00:51:33.160 --> 00:51:36.879
+Particularly, I'm extremely fond of this function.
+
+00:51:36.880 --> 00:51:41.279
+I'd love to see this just promoted to promoted
+
+00:51:41.280 --> 00:51:43.559
+somewhere deeper into Emacs proper,
+
+00:51:43.560 --> 00:51:47.639
+so that I don't have to load all of the org macros
+
+00:51:47.640 --> 00:51:50.239
+to get to this particularly useful one,
+
+00:51:50.240 --> 00:51:54.679
+which just tells me whether ignoring whitespace
+
+00:51:54.680 --> 00:51:59.639
+a string has any characters, has greater than zero length.
+
+00:51:59.640 --> 00:52:04.439
+Isn't that just string blank B?
+
+00:52:04.440 --> 00:52:08.999
+So this is a little different.
+
+00:52:09.000 --> 00:52:14.799
+This deals with... I may struggle to remember the details,
+
+00:52:14.800 --> 00:52:20.999
+and it's possible that the non-org specific version
+
+00:52:21.000 --> 00:52:23.519
+has even been improved or I didn't use it correctly,
+
+00:52:23.520 --> 00:52:29.479
+but I believe my experience was it didn't handle new lines, for example, quite the same way.
+
+00:52:29.480 --> 00:52:38.519
+So getting into what this actually does,
+
+00:52:38.520 --> 00:52:43.879
+most of the program is finding the relevant part of the file.
+
+00:52:43.880 --> 00:52:49.079
+You'll see that we start out by doing a depth-based search,
+
+00:52:49.080 --> 00:52:51.959
+capture the value that we're looking for.
+
+00:52:51.960 --> 00:52:58.119
+And then finally, we widen the buffer
+
+00:52:58.120 --> 00:53:01.799
+and keep handling the case where we might be being called
+
+00:53:01.800 --> 00:53:05.839
+from within Emacs in a narrowed buffer.
+
+00:53:05.840 --> 00:53:11.079
+This is another what should be documented at the top.
+
+00:53:11.080 --> 00:53:13.919
+So that is obviously going to load org.
+
+00:53:13.920 --> 00:53:21.399
+Just double-check that. Yeah, it is going to load org.
+
+00:53:21.400 --> 00:53:30.039
+And we can see that because it didn't find the function.
+
+00:53:30.040 --> 00:53:40.399
+until I loaded Org and then it did when I did C-h f
+
+00:53:40.400 --> 00:53:44.999
+to get definition of a function.
+
+00:53:45.000 --> 00:53:51.719
+So, widen the buffer and then I just start looking for the search.
+
+00:53:51.720 --> 00:53:55.399
+You can see I'm doing simple regular expression based searches here.
+
+00:53:55.400 --> 00:54:01.719
+Looking for lines, ultimately, that start with a star.
+
+00:54:01.720 --> 00:54:05.119
+That was a little simpler format
+
+00:54:05.120 --> 00:54:07.759
+that didn't quite work out.
+
+00:54:07.760 --> 00:54:25.719
+So I'm searching for, here this is a little tricky,
+
+00:54:25.720 --> 00:54:28.839
+but I'm searching for a number of stars
+
+00:54:28.840 --> 00:54:30.839
+equal to the depth that I want.
+
+00:54:30.840 --> 00:54:33.439
+The depth that I want being calculated
+
+00:54:33.440 --> 00:54:38.039
+based on the number of dots that were in the query string.
+
+00:54:38.040 --> 00:54:47.159
+from there, you know, kind of skipping some stuff, right?
+
+00:54:47.160 --> 00:54:49.599
+Once we find our starting position,
+
+00:54:49.600 --> 00:54:53.239
+then we're going to have to find the end of that,
+
+00:54:53.240 --> 00:54:57.679
+the section that we're going to read or replace.
+
+00:54:57.680 --> 00:55:12.959
+Text a tiny bit smaller. So I checked org-string nwp,
+
+00:55:12.960 --> 00:55:20.079
+and it's the same as string blank p.
+
+00:55:20.080 --> 00:55:26.319
+exactly the same code or the same result?
+
+00:55:26.320 --> 00:55:30.399
+No, it's the same result. Well, it's the same check,
+
+00:55:30.400 --> 00:55:34.519
+but string blank p will return a match object,
+
+00:55:34.520 --> 00:55:35.999
+like a string match object,
+
+00:55:36.000 --> 00:55:39.119
+whereas the org version will return the string itself
+
+00:55:39.120 --> 00:55:46.159
+if it finds a match, as in if it's blank.
+
+00:55:46.160 --> 00:55:48.319
+I don't remember that.
+
+00:55:48.320 --> 00:55:51.079
+As a Boolean check, they are the same.
+
+00:55:51.080 --> 00:55:54.159
+If you use it as, you know, is it blank or not.
+
+00:55:54.160 --> 00:56:02.679
+So, um, yeah, I've talked for way longer.
+
+00:56:02.680 --> 00:56:04.119
+I thought I literally thought
+
+00:56:04.120 --> 00:56:05.319
+this would be a five minute thing.
+
+00:56:05.320 --> 00:56:08.399
+I'm not sure if there are any questions on it,
+
+00:56:08.400 --> 00:56:10.239
+but just to simply answer your question.
+
+00:56:10.240 --> 00:56:11.719
+No, it doesn't use org element.
+
+00:56:11.720 --> 00:56:23.759
+This is pure regex based work.
+
+00:56:23.760 --> 00:56:26.919
+So, the advantage of not using... Right.
+
+00:56:26.920 --> 00:56:32.679
+So, the advantage of not using arg element
+
+00:56:32.680 --> 00:56:37.439
+is that you don't have to load arg or arg element, right?
+
+00:56:37.440 --> 00:56:39.039
+And so, it's going to be faster.
+
+00:56:39.040 --> 00:56:45.359
+And it's going to be faster both because you don't have to load arg element
+
+00:56:45.360 --> 00:56:51.079
+and because you don't have to run arg element, like the arg parser.
+
+00:56:51.080 --> 00:56:52.879
+But on the other hand,
+
+00:56:52.880 --> 00:56:58.439
+you end up loading all of org anyway.
+
+00:56:58.440 --> 00:57:02.679
+So at that point, it might just be better
+
+00:57:02.680 --> 00:57:05.039
+to use org element because it's more robust.
+
+00:57:05.040 --> 00:57:07.919
+For example, if you have a bunch of leading stars
+
+00:57:07.920 --> 00:57:09.959
+inside a source block or something,
+
+00:57:09.960 --> 00:57:11.599
+you don't want to misclassify that.
+
+00:57:11.600 --> 00:57:16.639
+Matter of fact, I believe I had to do some flossing with it
+
+00:57:16.640 --> 00:57:18.879
+to deal with not just that,
+
+00:57:18.880 --> 00:57:21.439
+but drawers and things like that.
+
+00:57:21.440 --> 00:57:25.879
+right yeah so at the end of the day
+
+00:57:25.880 --> 00:57:28.039
+that was just an extra 10 or 20 characters
+
+00:57:28.040 --> 00:57:31.039
+in the regular expression so i just shrugged and wrote them
+
+00:57:31.040 --> 00:57:36.799
+you can see there are a number of i
+
+00:57:36.800 --> 00:57:40.279
+i happen to like writing regular expressions
+
+00:57:40.280 --> 00:57:42.479
+and find them relatively readable so
+
+00:57:42.480 --> 00:57:46.719
+So it didn't bother me doing that.
+
+00:57:46.720 --> 00:57:49.239
+I've also done a bunch of work with org-element
+
+00:57:49.240 --> 00:57:51.439
+with the dungeon project,
+
+00:57:51.440 --> 00:57:53.759
+which of course uses that extensively
+
+00:57:53.760 --> 00:57:57.079
+to pull data out of tables and so on.
+
+00:57:57.080 --> 00:58:01.319
+And indeed, I think that may ultimately be my solution.
+
+00:58:01.320 --> 00:58:06.199
+I've been kind of distracted on a side quest
+
+00:58:06.200 --> 00:58:09.959
+to improve the org-table-fm parser.
+
+00:58:09.960 --> 00:58:14.279
+There's a post on my blog about the work that I've done there,
+
+00:58:14.280 --> 00:58:19.359
+and recently started talking to Ihor,
+
+00:58:19.360 --> 00:58:20.839
+the new org maintainer,
+
+00:58:20.840 --> 00:58:27.579
+who took over in the last year or so from Bastien.
+
+00:58:27.580 --> 00:58:32.159
+Just about what it would take to pick that up,
+
+00:58:32.160 --> 00:58:34.279
+or at least get it to a point
+
+00:58:34.280 --> 00:58:35.679
+where somebody else could work on it.
+
+00:58:35.680 --> 00:58:39.599
+It's pretty dense right now.
+
+00:58:39.600 --> 00:58:59.919
+So this thing is a bit of a monster,
+
+00:58:59.920 --> 00:59:01.799
+but at the end of the day,
+
+00:59:01.800 --> 00:59:06.919
+our goal is to extend the syntax,
+
+00:59:06.920 --> 00:59:12.519
+is to be able to use this Org Table FM syntax
+
+00:59:12.520 --> 00:59:14.439
+in other contexts.
+
+00:59:14.440 --> 00:59:18.519
+So if you haven't looked at board table FM,
+
+00:59:18.520 --> 00:59:21.399
+these I bar or these I markers
+
+00:59:21.400 --> 00:59:26.039
+are telling us to look for the table separator.
+
+00:59:26.040 --> 00:59:29.759
+So positioning based on the location of a table separator.
+
+00:59:29.760 --> 00:59:34.439
+I find that a little bit brittle
+
+00:59:34.440 --> 00:59:38.679
+just because it's really easy to go in and decide,
+
+00:59:38.680 --> 00:59:42.919
+oh, it'll look better with an additional line separator in there.
+
+00:59:42.920 --> 00:59:48.039
+And then all of these formulas break everywhere.
+
+00:59:48.040 --> 00:59:49.919
+So it would be a little more fun
+
+00:59:49.920 --> 00:59:53.399
+to have at least variables in there.
+
+00:59:53.400 --> 00:59:56.159
+And that's kind of part of the scope.
+
+00:59:56.160 --> 01:00:04.119
+If we look, and here you get kind of a hint
+
+01:00:04.120 --> 01:00:06.639
+of the new syntax I'd like to support,
+
+01:00:06.640 --> 01:00:12.559
+things like $star, $underscore.
+
+01:00:12.560 --> 01:00:17.559
+Keyword it's it's probably a half-hour talk
+
+01:00:17.560 --> 01:00:20.879
+just to get into what every single one of these would do
+
+01:00:20.880 --> 01:00:26.319
+But this post does does give some some context of that
+
+01:00:26.320 --> 01:00:35.679
+And more importantly there is a as a complete test program that
+
+01:00:35.680 --> 01:00:39.159
+Worked the last time I was playing with it
+
+01:00:39.160 --> 01:00:43.959
+And this gives you complete examples
+
+01:00:43.960 --> 01:00:48.479
+of all the syntax that the work in progress does currently support.
+
+01:00:48.480 --> 01:00:52.799
+You'll see some of these items are commented out.
+
+01:00:52.800 --> 01:00:54.359
+Those aren't supported yet
+
+01:00:54.360 --> 01:00:56.119
+and before I would implement them now,
+
+01:00:56.120 --> 01:01:04.359
+especially now that we're talking in terms of trying to take org itself this direction, you know,
+
+01:01:04.360 --> 01:01:13.539
+of kind of beefing up the the TableFM format parsing
+
+01:01:13.540 --> 01:01:16.999
+so that it could be used in other contexts besides
+
+01:01:17.000 --> 01:01:19.640
+specifically within a formula.
+
+01:01:19.640 --> 01:01:26.839
+I wouldn't want to add features
+
+01:01:26.840 --> 01:01:33.399
+to it without discussing those.
+
+01:01:33.400 --> 01:01:37.639
+So this is just a simple, basically a literate test file
+
+01:01:37.640 --> 01:01:40.439
+if you want to call it that.
+
+01:01:40.440 --> 01:01:43.239
+The perhaps key improvement here
+
+01:01:43.240 --> 01:01:49.799
+is naming all of the different capture groups.
+
+01:01:49.800 --> 01:01:52.119
+which just, if you're working
+
+01:01:52.120 --> 01:01:55.919
+with really huge regular expressions, which this is,
+
+01:01:55.920 --> 01:01:58.839
+let me just make sure the whole pagex is right in here
+
+01:01:58.840 --> 01:02:00.599
+so we can see it, yeah.
+
+01:02:00.600 --> 01:02:05.959
+So here's the actual rewrite, scale it a little bit,
+
+01:02:05.960 --> 01:02:14.479
+so you can see it's kind of a monster.
+
+01:02:14.480 --> 01:02:27.639
+And that's all using Rx.
+
+01:02:27.640 --> 01:02:29.519
+So hopefully that looks pretty familiar.
+
+01:02:29.520 --> 01:02:35.039
+Dollars for specifying a column, at sign to specify a row.
+
+01:02:35.040 --> 01:02:43.959
+And we also have the keys.
+
+01:02:43.960 --> 01:02:58.559
+Anybody else want to show and tell?
+
+01:02:58.560 --> 01:03:01.399
+We're going to cut over to the automated introduction
+
+01:03:01.400 --> 01:03:07.799
+for the Saturday closing remarks in like four minutes.
+
+01:03:07.800 --> 01:03:15.599
+Oh, but quick, quick, quick mention of the Emacs Carnival.
+
+01:03:15.600 --> 01:03:20.559
+So the Emacs Carnival is a shared blogging theme.
+
+01:03:20.560 --> 01:03:25.079
+where lots of people write about a specific theme,
+
+01:03:25.080 --> 01:03:26.119
+and then if you write about it,
+
+01:03:26.120 --> 01:03:28.239
+you can send your link to whoever's hosting the carnival.
+
+01:03:28.240 --> 01:03:31.679
+And it's a great way to discover other people's cool stuff.
+
+01:03:31.680 --> 01:03:35.679
+So if I take presenter, hang on a second, take presenter.
+
+01:03:35.680 --> 01:03:39.519
+Oh, actually, haha, I know,
+
+01:03:39.520 --> 01:03:41.959
+I'm going to make Elladom present it.
+
+01:03:41.960 --> 01:03:47.199
+Haha, you are now in charge. Okay, take it away.
+
+01:03:47.200 --> 01:03:49.959
+So I've been using Emacs for like 46 years now,
+
+01:03:49.960 --> 01:03:53.359
+back to TECO Emacs. And as I just said in the chat,
+
+01:03:53.360 --> 01:03:56.319
+I've found that the people who use Emacs
+
+01:03:56.320 --> 01:03:59.400
+tend to be interesting people in many different ways.
+
+01:03:59.440 --> 01:04:03.199
+And so this month, I'm just saying, let's give a shout out
+
+01:04:03.200 --> 01:04:06.399
+to some of the interesting people we've met along the way.
+
+01:04:06.400 --> 01:04:09.239
+And including some of the people
+
+01:04:09.240 --> 01:04:10.159
+that are putting on this conference
+
+01:04:10.160 --> 01:04:11.959
+are some of the most interesting
+
+01:04:11.960 --> 01:04:13.439
+and helpful people I've ever met.
+
+01:04:13.440 --> 01:04:27.919
+So thank you. You're very kind. Thank you.
+
+01:04:27.920 --> 01:04:30.679
+I'll say more than that. Maybe I will.
+
+01:04:30.680 --> 01:04:34.279
+I completely agree with you and I couldn't agree more.
+
+01:04:34.280 --> 01:04:38.839
+I think that's how Sacha and Amin and Leo
+
+01:04:38.840 --> 01:04:40.559
+really dragged me into this,
+
+01:04:40.560 --> 01:04:42.319
+you know, into being a volunteer.
+
+01:04:42.320 --> 01:04:44.599
+And I really, I'm sure we'll talk
+
+01:04:44.600 --> 01:04:46.039
+about this in the closing remarks,
+
+01:04:46.040 --> 01:04:50.199
+but I can't recommend volunteering for this project enough.
+
+01:04:50.200 --> 01:04:54.319
+It's just so fun to talk backstage
+
+01:04:54.320 --> 01:05:00.679
+with the presenters I don't know.
+
+01:05:00.680 --> 01:05:11.439
+It's an extremely engaging community.
+
+01:05:11.440 --> 01:05:12.759
+It's really thoughtful.
+
+01:05:12.760 --> 01:05:15.039
+I like the way y'all are so patient and awesome
+
+01:05:15.040 --> 01:05:19.439
+and I can be just quietly having my little freak out here
+
+01:05:19.440 --> 01:05:20.679
+and everyone's fine
+
+01:05:20.680 --> 01:05:23.879
+and will even help debug things live as needed.
+
+01:05:23.880 --> 01:05:45.499
+So this is all good.
+
+01:05:45.500 --> 01:05:48.119
+Anyway, so if people want to participate,
+
+01:05:48.120 --> 01:05:49.919
+you basically write a blog post.
+
+01:05:49.920 --> 01:05:53.159
+If you don't have a blog yet,
+
+01:05:53.160 --> 01:05:56.959
+there are any number of packages in Emacs,
+
+01:05:56.960 --> 01:05:58.479
+as well as web-based services,
+
+01:05:58.480 --> 01:06:02.039
+but really, you can get something going with Emacs.
+
+01:06:02.040 --> 01:06:05.839
+or exporting to HTML and maybe even figure out RSS,
+
+01:06:05.840 --> 01:06:08.279
+or you can use a static site generator like Hugo,
+
+01:06:08.280 --> 01:06:10.999
+or you can find, if you can set up WordPress,
+
+01:06:11.000 --> 01:06:12.119
+that's another way to do it.
+
+01:06:12.120 --> 01:06:15.079
+Or you can email me your thing and I'll post it on my blog
+
+01:06:15.080 --> 01:06:20.239
+and let me know how you want to be credited for it.
+
+01:06:20.240 --> 01:06:23.559
+Anyway, so you can share your story
+
+01:06:23.560 --> 01:06:26.879
+or share your story about somebody else's story
+
+01:06:26.880 --> 01:06:35.319
+and celebrate Emacs community.
+
+01:06:35.320 --> 01:06:39.079
+And we can send it to George also.
+
+01:06:39.080 --> 01:06:48.399
+We'll then make links in that blog post.
+
+01:06:48.400 --> 01:06:50.199
+And on the subject of community,
+
+01:06:50.200 --> 01:06:53.439
+I also heartily recommend the IRC community on Emacs.
+
+01:06:53.440 --> 01:06:55.919
+Pound Emacs is another one of those things
+
+01:06:55.920 --> 01:06:58.279
+that I just personally can't get enough of,
+
+01:06:58.280 --> 01:07:05.079
+and I hear a lot of stories about just how it's helped people.
+
+01:07:05.080 --> 01:07:09.119
+All right, we are now having the automated introduction
+
+01:07:09.120 --> 01:07:12.759
+and then it's going to rejoin over here very soon.
+
+01:07:12.760 --> 01:07:22.439
+Hang on a second. Wow, that's going.
+
+01:07:22.440 --> 01:07:34.399
+Saturday close and let's arrange our screen nicely.
+
+01:07:34.400 --> 01:07:38.279
+All right, we made it to the end of the first day! Woohoo!
+
+01:07:38.280 --> 01:07:40.399
+Thank you for joining us
+
+01:07:40.400 --> 01:07:42.959
+for the first day of EmacsConf 2025.
+
+01:07:42.960 --> 01:07:44.919
+Feel free to spread the word
+
+01:07:44.920 --> 01:07:48.479
+because there is still another day of fun talks tomorrow.
+
+01:07:48.480 --> 01:07:51.399
+So hashtag EmacsConf and hashtag Emacs.
+
+01:07:51.400 --> 01:07:54.239
+If you do hashtag Emacs on Macedon
+
+01:07:54.240 --> 01:07:58.239
+or Blue Sky or other places, we'll probably find it.
+
+01:07:58.240 --> 01:08:01.759
+Or if I don't, you can just let me know also.
+
+01:08:01.760 --> 01:08:04.039
+The prerecorded talks should be up
+
+01:08:04.040 --> 01:08:05.639
+on the talk pages already.
+
+01:08:05.640 --> 01:08:09.119
+The live talks, we'll probably actually get them up
+
+01:08:09.120 --> 01:08:11.079
+within the next week or two.
+
+01:08:11.080 --> 01:08:13.359
+I think they've already started processing,
+
+01:08:13.360 --> 01:08:15.479
+so I just had to sit down and then work with
+
+01:08:15.480 --> 01:08:18.399
+our wonderful army of volunteer captioners
+
+01:08:18.400 --> 01:08:20.119
+to get them all nicely captioned.
+
+01:08:20.120 --> 01:08:22.439
+But anyway, so the prerecorded talks
+
+01:08:22.440 --> 01:08:23.759
+are also up on YouTube,
+
+01:08:23.760 --> 01:08:25.719
+and I will eventually also upload them
+
+01:08:25.720 --> 01:08:29.239
+to TubeNix, which is a PeerTube instance.
+
+01:08:29.240 --> 01:08:31.239
+We will work on extracting live talks.
+
+01:08:31.240 --> 01:08:32.119
+If you'd like updates,
+
+01:08:32.120 --> 01:08:35.319
+please subscribe to the EmacsConf Discuss mailing list.
+
+01:08:35.320 --> 01:08:37.279
+If you've got ideas for making things better,
+
+01:08:37.280 --> 01:08:39.479
+we have so many ideas. I always end up with a very long
+
+01:08:39.480 --> 01:08:43.359
+to-do list after these things. Please add them to the pad.
+
+01:08:43.360 --> 01:08:46.919
+I'd love to hear from you on how we can make it even smoother next year.
+
+01:08:46.920 --> 01:08:49.359
+There are about 100 people watching in gen
+
+01:08:49.360 --> 01:08:52.159
+and 100 people watching in devs, which is really awesome.
+
+01:08:52.160 --> 01:08:54.119
+It's amazing to think that we can have
+
+01:08:54.120 --> 01:08:56.959
+an Emacs party for a lot of people.
+
+01:08:56.960 --> 01:09:00.399
+And we can only do this because of all the wonderful speakers,
+
+01:09:00.400 --> 01:09:02.279
+volunteers, participants,
+
+01:09:02.280 --> 01:09:04.359
+and very patient people in our lives
+
+01:09:04.360 --> 01:09:07.079
+who make it possible through all the time and support.
+
+01:09:07.080 --> 01:09:10.039
+So this year, Corwin did most of the hosting.
+
+01:09:10.040 --> 01:09:13.439
+I mean, also dropped by earlier, so that's great.
+
+01:09:13.440 --> 01:09:17.919
+I hope Leo is okay. You know, we managed.
+
+01:09:17.920 --> 01:09:22.439
+And I'm Sasha, by the way. I was running around backstage
+
+01:09:22.440 --> 01:09:26.559
+and occasionally dropping in to go on the stream.
+
+01:09:26.560 --> 01:09:29.359
+There are lots of other volunteers who are not on air.
+
+01:09:29.360 --> 01:09:32.719
+So, for example, during the proposal review process,
+
+01:09:32.720 --> 01:09:34.319
+we got a lot of wonderful comments
+
+01:09:34.320 --> 01:09:37.759
+from J.C. Hellery, Chico, and James Andrews-Howell.
+
+01:09:37.760 --> 01:09:41.039
+captions from Amitav and Rodion and other people
+
+01:09:41.040 --> 01:09:42.879
+have actually started also helping
+
+01:09:42.880 --> 01:09:45.079
+with the captions as well.
+
+01:09:45.080 --> 01:09:49.399
+So jay_bird just sent in some stuff today too.
+
+01:09:49.400 --> 01:09:52.959
+We are slowly working on getting a mirror in the EU set up
+
+01:09:52.960 --> 01:09:55.639
+so it'll be a little faster for people.
+
+01:09:55.640 --> 01:09:58.079
+So thanks to Yang3 for lending us a server.
+
+01:09:58.080 --> 01:10:00.879
+Babin and Michael and Ian and Jamie
+
+01:10:00.880 --> 01:10:06.119
+and Eeyore and Floyd Coulter have also helped out as well.
+
+01:10:06.120 --> 01:10:08.959
+Thanks to the Free Software Foundation
+
+01:10:08.960 --> 01:10:12.679
+for the mailing list, the media server, and of course, GNU Emacs itself,
+
+01:10:12.680 --> 01:10:15.439
+for which an astonishing amount
+
+01:10:15.440 --> 01:10:19.319
+of the scripting is done in Emacs. It's great.
+
+01:10:19.320 --> 01:10:23.279
+Thanks to Ry P for the server that we're using for OBS
+
+01:10:23.280 --> 01:10:27.639
+so that we can just VNC into it and I can manage two tracks
+
+01:10:27.640 --> 01:10:30.799
+without making my computer melt. It's great.
+
+01:10:30.800 --> 01:10:32.879
+And of course, to all the users
+
+01:10:32.880 --> 01:10:33.999
+and contributors and project teams
+
+01:10:34.000 --> 01:10:36.119
+that work on all the free software
+
+01:10:36.120 --> 01:10:37.279
+that this stuff is built on.
+
+01:10:37.280 --> 01:10:43.639
+Emacs, Org Mode, ERC, Tramp, Magit, BigBlueButton,
+
+01:10:43.640 --> 01:10:48.239
+Etherpad, IkiWiki, IceCast, OBS, The Lounge,
+
+01:10:48.240 --> 01:10:52.959
+LiberaChat, FFmpeg, OpenAI Whisper, WhisperX,
+
+01:10:52.960 --> 01:10:55.039
+the Aeneas forced alignment tool,
+
+01:10:55.040 --> 01:11:00.279
+PsyTransfer, SubEd, SubSeg, Mozilla Firefox, MPV, and Tampermonkey,
+
+01:11:00.280 --> 01:11:02.199
+and other things I probably forgot to mention.
+
+01:11:02.200 --> 01:11:04.599
+Thanks to Shoshin for the music,
+
+01:11:04.600 --> 01:11:06.799
+and thanks to people also who've donated
+
+01:11:06.800 --> 01:11:08.679
+through the Working Together program,
+
+01:11:08.680 --> 01:11:12.559
+like Scott and Jonathan and other anonymous donors.
+
+01:11:12.560 --> 01:11:15.919
+So that's a quick thanks. There's more tomorrow,
+
+01:11:15.920 --> 01:11:18.359
+but Corwin, do you have any parting words?
+
+01:11:18.360 --> 01:11:23.559
+You know, my parting words, Sacha are a thanks to you
+
+01:11:23.560 --> 01:11:25.759
+and not just a thanks
+
+01:11:25.760 --> 01:11:27.279
+for the hundreds of hours that you put
+
+01:11:27.280 --> 01:11:29.399
+into preparing this conference,
+
+01:11:29.400 --> 01:11:32.159
+you know, over the years and probably just this year,
+
+01:11:32.160 --> 01:11:35.999
+but also for all that you do for the community you are.
+
+01:11:36.000 --> 01:11:38.759
+You are a real unsung hero,
+
+01:11:38.760 --> 01:11:42.319
+even though I do hear your praises sung.
+
+01:11:42.320 --> 01:11:43.759
+They really can't be sung enough.
+
+01:11:43.760 --> 01:11:45.879
+In fact, I just this last week
+
+01:11:45.880 --> 01:11:48.039
+recommended to two different people your blog
+
+01:11:48.040 --> 01:11:51.599
+as a place to get a first introduction to Emacs.
+
+01:11:51.600 --> 01:11:54.799
+Your Emacs news is an incredible contribution,
+
+01:11:54.800 --> 01:11:57.959
+and just I want you to hear us thanking you.
+
+01:11:57.960 --> 01:12:04.879
+Thank you, Sacha. Emacs is a lot of fun,
+
+01:12:04.880 --> 01:12:07.519
+and Emacs people are a lot of fun,
+
+01:12:07.520 --> 01:12:10.879
+so it's all very wonderful. Yeah, we can wrap up here.
+
+01:12:10.880 --> 01:12:15.079
+People can keep hanging out if they want.
+
+01:12:15.080 --> 01:12:21.119
+I have a kiddo who is probably going to be back home soon
+
+01:12:21.120 --> 01:12:23.559
+and will pounce on me for more hugs,
+
+01:12:23.560 --> 01:12:25.599
+so I will see y'all tomorrow.
+
+01:12:25.600 --> 01:12:29.919
+uh, for more probably the same kind of stuff.
+
+01:12:29.920 --> 01:12:32.679
+Shut it down, save our energy for tomorrow.
+
+01:12:32.680 --> 01:12:36.319
+Uh, we do like to run into like hours long closing tomorrow.
+
+01:12:36.320 --> 01:12:38.319
+So we'll work on resisting that.
+
+01:12:38.320 --> 01:12:41.559
+Um, I suggest we, we look, we go get some rest
+
+01:12:41.560 --> 01:12:43.839
+and come, come back at it fresh tomorrow.
+
+01:12:43.840 --> 01:12:47.799
+Anybody else, any concerns with that or shall we go for it?
+
+01:12:47.800 --> 01:12:50.479
+Sounds good to me.
+
+01:12:50.480 --> 01:12:53.599
+If you've got ideas, pop them into the etherpad.
+
+01:12:53.600 --> 01:12:56.600
+And thank you so much for sharing this time with us.
+
+01:12:56.640 --> 01:13:23.800
+See you tomorrow.
diff --git a/2025/captions/emacsconf-2025-org-babel--making-orgbabel-reactive--abhinav-tushar--main--chapters.vtt b/2025/captions/emacsconf-2025-org-babel--making-orgbabel-reactive--abhinav-tushar--main--chapters.vtt
new file mode 100644
index 00000000..fb1e557c
--- /dev/null
+++ b/2025/captions/emacsconf-2025-org-babel--making-orgbabel-reactive--abhinav-tushar--main--chapters.vtt
@@ -0,0 +1,26 @@
+WEBVTT
+
+
+00:00:01.120 --> 00:00:49.041
+What are reactive notebooks?
+
+00:00:49.042 --> 00:02:38.498
+Reactivity demo
+
+00:02:38.499 --> 00:03:21.079
+Org-Babel
+
+00:03:21.080 --> 00:03:51.900
+Running the whole buffer
+
+00:03:51.901 --> 00:04:21.660
+Caching
+
+00:04:21.760 --> 00:06:04.533
+Computation dependencies
+
+00:06:04.534 --> 00:07:29.965
+Making this even better
+
+00:07:29.966 --> 00:08:08.240
+Wrapping up
diff --git a/2025/captions/emacsconf-2025-org-babel--making-orgbabel-reactive--abhinav-tushar--main.vtt b/2025/captions/emacsconf-2025-org-babel--making-orgbabel-reactive--abhinav-tushar--main.vtt
new file mode 100644
index 00000000..22373ce6
--- /dev/null
+++ b/2025/captions/emacsconf-2025-org-babel--making-orgbabel-reactive--abhinav-tushar--main.vtt
@@ -0,0 +1,614 @@
+WEBVTT captioned by abhinav
+
+NOTE What are reactive notebooks?
+
+00:00:01.120 --> 00:00:03.033
+Hello, everyone. My name is Abhinav,
+
+00:00:03.034 --> 00:00:03.900
+and I'm going to talk about
+
+00:00:03.901 --> 00:00:07.140
+how to make Org Babel reactive. So reactivity here
+
+00:00:07.240 --> 00:00:10.000
+means reactivity in the sense of reactive notebooks.
+
+00:00:10.001 --> 00:00:11.600
+So if you used Org Babel,
+
+00:00:11.601 --> 00:00:13.933
+you might also have used Jupyter notebooks,
+
+00:00:13.934 --> 00:00:16.100
+which are basically notebooks primarily for
+
+00:00:16.200 --> 00:00:16.933
+Python programming,
+
+00:00:16.934 --> 00:00:20.100
+where you have these text and code blocks interleaved,
+
+00:00:20.101 --> 00:00:23.157
+and then you can execute every code block independently,
+
+00:00:23.158 --> 00:00:25.858
+and then you control the order of execution manually,
+
+00:00:25.859 --> 00:00:27.199
+or you can just run the code blocks
+
+00:00:27.200 --> 00:00:29.699
+from top to bottom. But with reactive notebooks,
+
+00:00:29.700 --> 00:00:32.927
+what happens is that there's another way of running
+
+00:00:32.928 --> 00:00:35.329
+which is basically by having all these
+
+00:00:35.330 --> 00:00:36.900
+dependent code blocks automatically get
+
+00:00:37.000 --> 00:00:38.900
+executed whenever you make a change.
+
+00:00:38.901 --> 00:00:40.774
+So for example, if you change a variable,
+
+00:00:40.775 --> 00:00:42.060
+everything else that's dependent on
+
+00:00:42.160 --> 00:00:44.433
+that variable will be executed automatically.
+
+00:00:44.434 --> 00:00:49.041
+I'll show you an example of what that looks like.
+
+NOTE Reactivity demo
+
+00:00:49.042 --> 00:00:51.762
+Right, here's an example reactive Notebook.
+
+00:00:51.763 --> 00:00:53.460
+So this is called Observable.
+
+00:00:53.560 --> 00:00:54.863
+Observable is this tool made by
+
+00:00:54.864 --> 00:00:57.679
+the creator of d3.js which is
+
+00:00:57.680 --> 00:01:01.499
+a famous JavaScript charting library. So here, the
+
+00:01:01.500 --> 00:01:03.667
+interface is very similar to Jupyter Notebook.
+
+00:01:03.668 --> 00:01:06.407
+You basically are having these cells
+
+00:01:06.408 --> 00:01:08.508
+and each cell could be a text cell, like here,
+
+00:01:08.509 --> 00:01:09.588
+this is a Markdown cell
+
+00:01:09.589 --> 00:01:11.609
+and then there are these code blocks.
+
+00:01:11.610 --> 00:01:15.250
+Now each code cell is basically defining a variable.
+
+00:01:15.251 --> 00:01:17.740
+This is important in reactive notebooks because
+
+00:01:17.840 --> 00:01:21.140
+each cell is connected to other cell via this variable
+
+00:01:21.240 --> 00:01:23.552
+usage. So here data is defined,
+
+00:01:23.553 --> 00:01:25.012
+then there is filtered which is defined
+
+00:01:25.013 --> 00:01:27.620
+which is dependent on data, and then this plot is
+
+00:01:27.720 --> 00:01:29.133
+dependent on filtered.
+
+00:01:29.134 --> 00:01:31.153
+So now, in a classical notebook, what I will do is
+
+00:01:31.154 --> 00:01:34.394
+if I change something here, let's say from 1 to 2,
+
+00:01:34.395 --> 00:01:34.854
+I will have to run this, and then run this plot block again
+
+00:01:34.855 --> 00:01:40.335
+to make the change be visible.
+
+00:01:40.336 --> 00:01:42.055
+But in a reactive notebook, what happens is
+
+00:01:42.056 --> 00:01:44.396
+I can just change this from some value
+
+00:01:44.397 --> 00:01:46.256
+to some value, and then execute,
+
+00:01:46.257 --> 00:01:48.817
+and then every descendant is also executed,
+
+00:01:48.818 --> 00:01:50.940
+because that's how the reactivity works.
+
+00:01:51.040 --> 00:01:51.937
+You change this variable,
+
+00:01:51.938 --> 00:01:53.080
+so this should also be changed,
+
+00:01:53.081 --> 00:01:55.238
+because this is dependent on this variable.
+
+00:01:55.239 --> 00:01:56.858
+Now this is really helpful
+
+00:01:56.859 --> 00:01:58.900
+if you have a very complex and messy notebook
+
+00:01:59.000 --> 00:02:01.199
+which is what actually happens in reality.
+
+00:02:01.200 --> 00:02:03.480
+You end up doing an exploratory analysis,
+
+00:02:03.481 --> 00:02:05.959
+and you have these code blocks lying here and there.
+
+00:02:05.960 --> 00:02:07.101
+Then you change something
+
+00:02:07.102 --> 00:02:09.281
+and then you have to keep something in your mind
+
+00:02:09.282 --> 00:02:11.362
+that if I change this, I need to run
+
+00:02:11.363 --> 00:02:13.023
+these five code blocks again
+
+00:02:13.024 --> 00:02:15.604
+to finally get to the result that I want to see.
+
+00:02:15.605 --> 00:02:20.467
+Stale state causes a lot of issues in Jupyter Notebooks.
+
+00:02:20.468 --> 00:02:23.788
+So this is really good for reactivity, sorry reproducibility,
+
+00:02:23.789 --> 00:02:26.630
+but this is also really good for
+
+00:02:26.631 --> 00:02:28.599
+just having this exploration
+
+00:02:28.600 --> 00:02:30.117
+that you're trying to do. For example,
+
+00:02:30.118 --> 00:02:31.761
+you're changing something and it's really easy
+
+00:02:31.762 --> 00:02:34.887
+to just see that change happening in real time
+
+00:02:34.888 --> 00:02:38.498
+in your outcome variables, right?
+
+NOTE Org-Babel
+
+00:02:38.499 --> 00:02:41.920
+So I was wondering how to introduce this reactivity in Org Mode.
+
+00:02:41.921 --> 00:02:43.200
+And here's how it will look like.
+
+00:02:43.201 --> 00:02:46.302
+So this is a demo Org Mode file.
+
+00:02:46.303 --> 00:02:48.603
+There are many Org Babel blocks here.
+
+00:02:48.604 --> 00:02:49.563
+So you start from here.
+
+00:02:49.564 --> 00:02:52.085
+Let's say this is a code block. It has a name.
+
+00:02:52.086 --> 00:02:53.665
+And then there's another code block,
+
+00:02:53.666 --> 00:02:55.426
+which is dependent on the previous one,
+
+00:02:55.427 --> 00:02:57.807
+as you can see here, and so on.
+
+00:02:57.808 --> 00:02:59.368
+And then finally, there's a plot here,
+
+00:02:59.369 --> 00:03:00.889
+which is a gnuplot code.
+
+00:03:00.890 --> 00:03:02.550
+And you can see the image here.
+
+00:03:02.551 --> 00:03:04.131
+Now, what happens usually is that
+
+00:03:04.132 --> 00:03:05.196
+if I change this value from,
+
+00:03:05.197 --> 00:03:09.199
+let's say, 113 to 112, nothing happens on its own right?
+
+00:03:09.200 --> 00:03:12.199
+There's an extra step of execution that I will have to do
+
+00:03:12.200 --> 00:03:15.079
+so I will do that, and then the value is changed.
+
+00:03:15.080 --> 00:03:17.699
+Now the problem is that only this value is changed and
+
+00:03:17.700 --> 00:03:21.079
+if I go down and see the image, nothing will have changed.
+
+NOTE Running the whole buffer
+
+00:03:21.080 --> 00:03:23.079
+So what I can do is basically,
+
+00:03:23.080 --> 00:03:24.818
+a really simple thing is that,
+
+00:03:24.819 --> 00:03:26.500
+a simple trick is to basically
+
+00:03:26.600 --> 00:03:29.445
+enable a hook, like, add a hook
+
+00:03:29.446 --> 00:03:30.525
+whenever you're saving the buffer,
+
+00:03:30.526 --> 00:03:31.866
+you just run the full buffer again,
+
+00:03:31.867 --> 00:03:34.287
+like run all the code blocks automatically.
+
+00:03:34.288 --> 00:03:36.849
+Now if you do that, you can basically make a change somewhere
+
+00:03:36.850 --> 00:03:37.889
+and then you can, you know,
+
+00:03:37.890 --> 00:03:41.071
+see how everything else is changing
+
+00:03:41.072 --> 00:03:42.712
+which gives you some sort of reactivity,
+
+00:03:42.713 --> 00:03:43.972
+but there's still a lot of computation
+
+00:03:43.973 --> 00:03:45.973
+that's being wasted.
+
+00:03:45.974 --> 00:03:49.595
+You might not want to change or run this code block again
+
+00:03:49.596 --> 00:03:51.900
+when something down there is changing.
+
+NOTE Caching
+
+00:03:51.901 --> 00:03:54.567
+So to counter that, you can actually add caching.
+
+00:03:54.568 --> 00:03:57.133
+So if you add caching to any code block,
+
+00:03:57.134 --> 00:03:59.800
+that code block will only be executed again
+
+00:03:59.801 --> 00:04:02.300
+if that code has changed or
+
+00:04:02.400 --> 00:04:04.755
+the input variables have changed.
+
+00:04:04.756 --> 00:04:06.336
+But the other problem is that
+
+00:04:06.337 --> 00:04:08.659
+you don't want caching to be enabled for a lot of cases
+
+00:04:08.660 --> 00:04:10.840
+where the code block is actually dependent on
+
+00:04:10.841 --> 00:04:12.722
+external state, like for example,
+
+00:04:12.723 --> 00:04:15.024
+some sort of randomness or time.
+
+00:04:15.025 --> 00:04:17.433
+So caching also is, you know, kind of,
+
+00:04:17.434 --> 00:04:18.967
+it's, like, an important thing to use,
+
+00:04:18.968 --> 00:04:21.660
+but it's probably not giving you the complete answer.
+
+NOTE Computation dependencies
+
+00:04:21.760 --> 00:04:25.973
+So what we can instead do is basically figure out
+
+00:04:25.974 --> 00:04:28.554
+the whole computation dependencies here.
+
+00:04:28.555 --> 00:04:31.275
+So let's say if I look at this buffer,
+
+00:04:31.276 --> 00:04:35.076
+here's how all the blocks are connected.
+
+00:04:35.077 --> 00:04:37.656
+So as you can see the plot code block
+
+00:04:37.657 --> 00:04:40.117
+is dependent on c and then legendpg,
+
+00:04:40.118 --> 00:04:43.918
+and they themselves are dependent on these other nodes.
+
+00:04:43.919 --> 00:04:47.279
+So when I make a change in b, I only want b to run
+
+00:04:47.280 --> 00:04:50.844
+and then c and then plot. I don't want anything else to run.
+
+00:04:50.845 --> 00:04:54.267
+So what I did was I wrote a small minor mode for Org Mode
+
+00:04:54.268 --> 00:04:55.368
+which does exactly this.
+
+00:04:55.369 --> 00:04:57.769
+So whenever you are in a code block
+
+00:04:57.770 --> 00:04:59.871
+and you are making a change and then you save it,
+
+00:04:59.872 --> 00:05:01.913
+it will just follow the trail from that code block
+
+00:05:01.914 --> 00:05:05.355
+to every other descendant which is going to be impacted,
+
+00:05:05.356 --> 00:05:09.719
+and it just runs all of them, and nothing else gets executed.
+
+00:05:09.720 --> 00:05:13.119
+So to see it in action, I will just enable that mode.
+
+00:05:13.120 --> 00:05:17.021
+Yeah, right. So now here, if I change this 113 to 112
+
+00:05:17.022 --> 00:05:21.243
+and I save, this code, this variable gets changed.
+
+00:05:21.244 --> 00:05:23.744
+It's the same value because I did not update it again.
+
+00:05:23.745 --> 00:05:25.719
+And you can also see b also got changed
+
+00:05:25.720 --> 00:05:29.667
+because it's just following all the execution order and so on.
+
+00:05:29.668 --> 00:05:31.727
+The plot also got updated.
+
+00:05:31.728 --> 00:05:34.068
+We will be able to see more clearly
+
+00:05:34.069 --> 00:05:36.402
+once I change something more substantial.
+
+00:05:36.402 --> 00:05:36.402
+So here's another variable.
+
+00:05:36.403 --> 00:05:41.332
+So I added a small toggle button here,
+
+00:05:41.333 --> 00:05:43.468
+which is again part of the minor mode.
+
+00:05:43.469 --> 00:05:45.209
+So since this is nil, if I toggle it,
+
+00:05:45.210 --> 00:05:49.300
+it will become true. And this variable dictates whether
+
+00:05:49.400 --> 00:05:51.174
+the plot will have the legend or not.
+
+00:05:51.175 --> 00:05:54.457
+So if I toggle it to be t, now it's t
+
+00:05:54.458 --> 00:05:57.900
+and you can see that the plot has legend that's visible.
+
+00:05:57.901 --> 00:06:03.139
+If I toggle it back again to nil, the legend is gone.
+
+00:06:03.140 --> 00:06:04.533
+Now this is nice, this...
+
+NOTE Making this even better
+
+00:06:04.534 --> 00:06:06.380
+This is already pretty helpful for me
+
+00:06:06.480 --> 00:06:10.179
+but what we can do is we can make it even better.
+
+00:06:10.180 --> 00:06:11.400
+So one of the nicer ideas
+
+00:06:11.401 --> 00:06:13.015
+from these reactive notebooks
+
+00:06:13.016 --> 00:06:16.078
+is this idea of having an infinite canvas
+
+00:06:16.079 --> 00:06:19.022
+where you don't look at the document model,
+
+00:06:19.023 --> 00:06:20.623
+you look at the whole document
+
+00:06:20.624 --> 00:06:25.008
+as a canvas of multiple connected documents.
+
+00:06:25.009 --> 00:06:26.589
+One good thing that happens there is that
+
+00:06:26.590 --> 00:06:29.550
+you can basically have a piece of code somewhere
+
+00:06:29.551 --> 00:06:30.410
+and then piece of code
+
+00:06:30.411 --> 00:06:32.499
+somewhere very different position in the document,
+
+00:06:32.500 --> 00:06:34.732
+but you can put them together in the canvas
+
+00:06:34.733 --> 00:06:36.933
+and then see them side by side.
+
+00:06:36.934 --> 00:06:38.294
+So here also, let's say
+
+00:06:38.295 --> 00:06:41.996
+if I want to just have this image shown up at the top,
+
+00:06:41.997 --> 00:06:45.857
+what I can do is like I can pop this out,
+
+00:06:45.858 --> 00:06:49.938
+which opens a child frame, and then I can just go here.
+
+00:06:49.939 --> 00:06:52.460
+This child frame is showing the same image.
+
+00:06:52.461 --> 00:06:55.502
+So there's no change. So if I toggle this variable here,
+
+00:06:55.503 --> 00:06:58.423
+you can see that the image is updated.
+
+00:06:58.424 --> 00:07:02.199
+If I toggle it back to nil, the image, the legend is gone.
+
+00:07:02.200 --> 00:07:03.367
+And you can obviously, you know,
+
+00:07:03.368 --> 00:07:08.690
+you can make a lot of things come up as child frames.
+
+00:07:08.691 --> 00:07:09.430
+This is the same image.
+
+00:07:09.431 --> 00:07:11.291
+So even if you go down to the document,
+
+00:07:11.292 --> 00:07:13.810
+you will see the same image.
+
+00:07:13.811 --> 00:07:18.174
+So yeah, this is what I have right now.
+
+00:07:18.175 --> 00:07:21.956
+I'm definitely looking forward to making it more useful,
+
+00:07:21.957 --> 00:07:25.599
+probably including more kinds of child frames,
+
+00:07:25.600 --> 00:07:29.965
+maybe like making the whole document an infinite canvas.
+
+NOTE Wrapping up
+
+00:07:29.966 --> 00:07:32.099
+Alright, so that's the talk.
+
+00:07:32.100 --> 00:07:33.346
+If you're interested in the codebase,
+
+00:07:33.347 --> 00:07:34.446
+here's the homepage
+
+00:07:34.447 --> 00:07:35.546
+for the project [https://dev.lepisma.xyz/git/ob-rx].
+
+00:07:35.547 --> 00:07:37.566
+So the next steps for me are basically
+
+00:07:37.567 --> 00:07:40.647
+making my workflow easier in matplotlib,
+
+00:07:40.648 --> 00:07:42.587
+which is a Python-based library,
+
+00:07:42.588 --> 00:07:45.348
+and d3.js, which is for JavaScript.
+
+00:07:45.349 --> 00:07:47.888
+For the JS thing, I might have to add
+
+00:07:47.889 --> 00:07:49.540
+the interactive JS child frames,
+
+00:07:49.640 --> 00:07:51.829
+and I am also looking forward to building something
+
+00:07:51.830 --> 00:07:53.969
+which can replicate the work
+
+00:07:53.970 --> 00:07:56.750
+of the Observable's infinite canvas,
+
+00:07:56.751 --> 00:07:57.490
+because that's something
+
+00:07:57.491 --> 00:08:00.619
+which I found really useful in my work with
+
+00:08:00.620 --> 00:08:02.240
+just JS visualizations.
+
+00:08:02.340 --> 00:08:05.540
+So yeah, happy to take questions on Etherpad
+
+00:08:05.560 --> 00:08:08.240
+and thank you for your time.
diff --git a/2025/captions/emacsconf-2025-private-ai--emacs-and-private-ai-a-great-match--aaron-grothe--main.vtt b/2025/captions/emacsconf-2025-private-ai--emacs-and-private-ai-a-great-match--aaron-grothe--main.vtt
new file mode 100644
index 00000000..a8e76986
--- /dev/null
+++ b/2025/captions/emacsconf-2025-private-ai--emacs-and-private-ai-a-great-match--aaron-grothe--main.vtt
@@ -0,0 +1,2602 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:04.859
+Hey, everybody. Welcome from frigid Omaha, Nebraska.
+
+00:00:04.860 --> 00:00:06.619
+I'm just going to kick off my talk here,
+
+00:00:06.620 --> 00:00:23.899
+and we'll see how it all goes. Thanks for attending.
+
+00:00:23.900 --> 00:00:26.939
+So the slides will be available on my site, growthy.us,
+
+00:00:26.940 --> 00:00:29.899
+in the presentation section tonight or tomorrow.
+
+00:00:29.900 --> 00:00:33.099
+This is a quick intro to one way to do private AI in Emacs.
+
+00:00:33.100 --> 00:00:35.299
+There are a lot of other ways to do it.
+
+00:00:35.300 --> 00:00:38.899
+This one is really just more or less the easiest way to do it.
+
+00:00:38.900 --> 00:00:40.379
+It's a minimal viable product
+
+00:00:40.380 --> 00:00:42.379
+to get you an idea of how to get started with it
+
+00:00:42.380 --> 00:00:43.859
+and how to give it a spin.
+
+00:00:43.860 --> 00:00:45.819
+Really hope some of you give it a shot
+
+00:00:45.820 --> 00:00:48.179
+and learn something along the way.
+
+00:00:48.180 --> 00:00:50.379
+So the overview of the talk.
+
+00:00:50.380 --> 00:00:54.939
+broke down these basic bullet points of why private AI,
+
+00:00:54.940 --> 00:00:58.939
+what do I need to do private AI, Emacs and private AI,
+
+00:00:58.940 --> 00:01:02.739
+pieces for an AI Emacs solution,
+
+00:01:02.740 --> 00:01:08.059
+a demo of a minimal viable product, and the summary.
+
+00:01:08.060 --> 00:01:10.779
+Why private AI? This is pretty simple.
+
+00:01:10.780 --> 00:01:12.099
+Just read the terms and conditions
+
+00:01:12.100 --> 00:01:14.819
+for any AI system you're currently using.
+
+00:01:14.820 --> 00:01:17.019
+If you're using the free tiers, your queries,
+
+00:01:17.020 --> 00:01:18.619
+code uploaded information
+
+00:01:18.620 --> 00:01:20.699
+is being used to train the models.
+
+00:01:20.700 --> 00:01:22.939
+In some cases, you are giving the company
+
+00:01:22.940 --> 00:01:25.419
+a perpetual license to your data.
+
+00:01:25.420 --> 00:01:27.059
+You have no control over this,
+
+00:01:27.060 --> 00:01:29.219
+except for not using the engine.
+
+00:01:29.220 --> 00:01:30.699
+And keep in mind, the terms
+
+00:01:30.700 --> 00:01:32.179
+are changing all the time on that,
+
+00:01:32.180 --> 00:01:34.139
+and they're not normally changing for our benefit.
+
+00:01:34.140 --> 00:01:38.259
+So that's not necessarily a good thing.
+
+00:01:38.260 --> 00:01:40.339
+If you're using the paid tiers,
+
+00:01:40.340 --> 00:01:43.459
+you may be able to opt out of the data collection.
+
+00:01:43.460 --> 00:01:45.539
+But keep in mind, this can change,
+
+00:01:45.540 --> 00:01:48.619
+or they may start charging for that option.
+
+00:01:48.620 --> 00:01:51.419
+Every AI company wants more and more data.
+
+00:01:51.420 --> 00:01:53.779
+They need more and more data to train their models.
+
+00:01:53.780 --> 00:01:56.019
+It is just the way it is.
+
+00:01:56.020 --> 00:01:57.899
+They need more and more information
+
+00:01:57.900 --> 00:02:00.459
+to get it more and more accurate to keep it up to date.
+
+00:02:00.460 --> 00:02:03.219
+There's been a story about Stack Overflow.
+
+00:02:03.220 --> 00:02:05.819
+It has like half the number of queries they had a year ago
+
+00:02:05.820 --> 00:02:07.379
+because people are using AI.
+
+00:02:07.380 --> 00:02:08.579
+The problem with that is now
+
+00:02:08.580 --> 00:02:10.379
+there's less data going to Stack Overflow
+
+00:02:10.380 --> 00:02:12.979
+for the AI to get. vicious cycle,
+
+00:02:12.980 --> 00:02:14.619
+especially when you start looking at
+
+00:02:14.620 --> 00:02:16.579
+newer language like Ruby and stuff like that.
+
+00:02:16.580 --> 00:02:21.419
+So it comes down to being an interesting time.
+
+00:02:21.420 --> 00:02:24.739
+Another reason why to go private AI is your costs are going to vary.
+
+00:02:24.740 --> 00:02:27.019
+Right now, these services are being heavily subsidized.
+
+00:02:27.020 --> 00:02:29.419
+If you're paying Claude $20 a month,
+
+00:02:29.420 --> 00:02:32.579
+it is not costing Claude, those guys $20 a month
+
+00:02:32.580 --> 00:02:34.099
+to host all the infrastructure
+
+00:02:34.100 --> 00:02:35.619
+to build all these data centers.
+
+00:02:35.620 --> 00:02:38.779
+They are severely subsidizing that
+
+00:02:38.780 --> 00:02:41.259
+at a very much a loss right now.
+
+00:02:41.260 --> 00:02:43.659
+When they start charging the real costs plus a profit,
+
+00:02:43.660 --> 00:02:45.499
+it's going to change.
+
+00:02:45.500 --> 00:02:48.019
+Right now, I use a bunch of different services.
+
+00:02:48.020 --> 00:02:50.019
+I've played with Grok and a bunch of other ones.
+
+00:02:50.020 --> 00:02:52.459
+But Grok right now is like $30 a month
+
+00:02:52.460 --> 00:02:54.139
+for a regular Super Grok.
+
+00:02:54.140 --> 00:02:56.419
+When they start charging the real cost of that,
+
+00:02:56.420 --> 00:02:59.819
+it's going to go from $30 to something a great deal more,
+
+00:02:59.820 --> 00:03:02.379
+perhaps, I think, $100 or $200
+
+00:03:02.380 --> 00:03:04.459
+or whatever really turns out to be the cost
+
+00:03:04.460 --> 00:03:06.059
+when you figure everything into it.
+
+00:03:06.060 --> 00:03:07.539
+When you start adding that cost into that,
+
+00:03:07.540 --> 00:03:10.179
+a lot of people are using public AI right now
+
+00:03:10.180 --> 00:03:11.899
+are going to have no option but to move to private AI
+
+00:03:11.900 --> 00:03:16.019
+or give up on AI overall.
+
+00:03:16.020 --> 00:03:18.659
+What do you need to be able to do private AI?
+
+00:03:18.660 --> 00:03:21.179
+If you're going to run your own AI,
+
+00:03:21.180 --> 00:03:23.579
+you're going to need a system with either some cores,
+
+00:03:23.580 --> 00:03:25.699
+a graphics processor unit,
+
+00:03:25.700 --> 00:03:28.339
+or a neural processing unit, a GPU or an NPU.
+
+00:03:28.340 --> 00:03:29.819
+I currently have four systems
+
+00:03:29.820 --> 00:03:32.979
+I'm experimenting with and playing around with on a daily basis.
+
+00:03:32.980 --> 00:03:37.979
+I have a System76 Pangolin AMD Ryzen 7 78040U
+
+00:03:37.980 --> 00:03:41.099
+with a Radeon 7080M integrated graphics card.
+
+00:03:41.100 --> 00:03:42.539
+It's got 32 gigs of RAM.
+
+00:03:42.540 --> 00:03:45.259
+It's a beautiful piece of hardware. I really do like it.
+
+00:03:45.260 --> 00:03:46.499
+I have my main workstation,
+
+00:03:46.500 --> 00:03:50.579
+it's an HP Z620 with dual Intel Xeons
+
+00:03:50.580 --> 00:03:53.179
+with four NVIDIA K2200 graphics cards in it.
+
+00:03:53.180 --> 00:03:56.699
+Why the four NVIDIA K2200 graphics card on it?
+
+00:03:56.700 --> 00:03:59.739
+Because I could buy four of them on eBay for $100
+
+00:03:59.740 --> 00:04:02.379
+and it was still supported by the NVIDIA drivers for Debian.
+
+00:04:02.380 --> 00:04:08.179
+So that's why that is. A MacBook Air with an M1 processor,
+
+00:04:08.180 --> 00:04:10.939
+a very nice piece of kit I picked up a couple years ago,
+
+00:04:10.940 --> 00:04:14.139
+very cheap, but it runs AI surprisingly well,
+
+00:04:14.140 --> 00:04:18.099
+and an Acer Aspire 1 with an AMD Ryzen 5700H in it.
+
+00:04:18.100 --> 00:04:22.099
+This was my old laptop. It was a sturdy beast.
+
+00:04:22.100 --> 00:04:24.379
+It was able to do enough AI to do demos and stuff,
+
+00:04:24.380 --> 00:04:25.859
+and I liked it quite a bit for that.
+
+00:04:25.860 --> 00:04:28.339
+I'm using the Pangolin for this demonstration
+
+00:04:28.340 --> 00:04:30.979
+because it's just better.
+
+00:04:30.980 --> 00:04:37.219
+Apple's M4 chip has 38 teraflops of MPU performance.
+
+00:04:37.220 --> 00:04:40.099
+The Microsoft co-pilots are now requiring
+
+00:04:40.100 --> 00:04:41.459
+45 teraflops of MPU
+
+00:04:41.460 --> 00:04:43.939
+to be able to have the co-pilot badge on it.
+
+00:04:43.940 --> 00:04:48.299
+And Raspberry Pi's new AI top is about 18 teraflops
+
+00:04:48.300 --> 00:04:51.219
+and is $70 on top of the cost of Raspberry Pi 5.
+
+00:04:51.220 --> 00:04:56.059
+Keep in mind Raspberry recently
+
+00:04:56.060 --> 00:04:59.499
+raised the cost of their Pi 5s because of RAM pricing,
+
+00:04:59.500 --> 00:05:00.379
+which is going to be affecting
+
+00:05:00.380 --> 00:05:02.459
+a lot of these types of solutions in the near future.
+
+00:05:02.460 --> 00:05:05.299
+But there's going to be a lot of
+
+00:05:05.300 --> 00:05:06.699
+local power available in the future.
+
+00:05:06.700 --> 00:05:08.219
+That's what it really comes down to.
+
+00:05:08.220 --> 00:05:11.179
+A lot of people are going to have PCs on their desks.
+
+00:05:11.180 --> 00:05:13.459
+They're going to run a decent private AI
+
+00:05:13.460 --> 00:05:18.059
+without much issue. So for Emacs and private AI,
+
+00:05:18.060 --> 00:05:20.139
+there's a couple popular solutions.
+
+00:05:20.140 --> 00:05:22.099
+Gptel, which is the one we're going to talk about.
+
+00:05:22.100 --> 00:05:24.739
+It's a simple interface. It's a minimal interface.
+
+00:05:24.740 --> 00:05:26.579
+It integrates easily into your workflow.
+
+00:05:26.580 --> 00:05:29.019
+It's just, quite honestly, chef's kiss,
+
+00:05:29.020 --> 00:05:31.059
+just a beautifully well-done piece of software.
+
+00:05:31.060 --> 00:05:33.859
+OllamaBuddy has more features,
+
+00:05:33.860 --> 00:05:36.259
+a menu interface, has quick access
+
+00:05:36.260 --> 00:05:37.499
+for things like code refactoring,
+
+00:05:37.500 --> 00:05:38.979
+text-free formatting, et cetera.
+
+00:05:38.980 --> 00:05:41.979
+This is the one that you spend a little more time with,
+
+00:05:41.980 --> 00:05:43.939
+but you also get a little bit more back from it.
+
+00:05:43.940 --> 00:05:49.419
+Elama is another one, has some really good features to it,
+
+00:05:49.420 --> 00:05:51.059
+more different capabilities,
+
+00:05:51.060 --> 00:05:54.979
+but it's a different set of rules and capabilities to it.
+
+00:05:54.980 --> 00:05:59.179
+Itermac, which is programming with your AI and Emacs.
+
+00:05:59.180 --> 00:06:01.219
+The closest thing I can come up
+
+00:06:01.220 --> 00:06:04.139
+to comparing this to is Cursor, except it's an Emacs.
+
+00:06:04.140 --> 00:06:05.659
+It's really quite well done.
+
+00:06:05.660 --> 00:06:07.299
+These are all really quite well done.
+
+00:06:07.300 --> 00:06:08.499
+There's a bunch of other projects out there.
+
+00:06:08.500 --> 00:06:10.819
+If you go out to GitHub, type Emacs AI,
+
+00:06:10.820 --> 00:06:13.219
+you'll find a lot of different options.
+
+00:06:13.220 --> 00:06:18.459
+So what is a minimal viable product that can be done?
+
+00:06:18.460 --> 00:06:23.379
+A minimal viable product to show what an AI Emacs solution is
+
+00:06:23.380 --> 00:06:27.179
+can be done with only needing two pieces of software.
+
+00:06:27.180 --> 00:06:31.179
+Llamafile, this is an amazing piece of software.
+
+00:06:31.180 --> 00:06:32.899
+This is a whole LLM contained in one file.
+
+00:06:32.900 --> 00:06:36.059
+And the same file runs on Mac OS X,
+
+00:06:36.060 --> 00:06:39.379
+Linux, Windows, and the BSDs.
+
+00:06:39.380 --> 00:06:42.179
+It's a wonderful piece of kit
+
+00:06:42.180 --> 00:06:44.179
+based on these people who created
+
+00:06:44.180 --> 00:06:45.899
+this thing called Cosmopolitan
+
+00:06:45.900 --> 00:06:46.779
+that lets you create and execute
+
+00:06:46.780 --> 00:06:48.699
+while it runs on a bunch of different systems.
+
+00:06:48.700 --> 00:06:51.299
+And Gptel, which is an easy plug-in for Emacs,
+
+00:06:51.300 --> 00:06:54.979
+which we talked about in the last slide a bit.
+
+00:06:54.980 --> 00:07:00.179
+So setting up the LLM, you have to just go out
+
+00:07:00.180 --> 00:07:01.699
+and just hit the a page for it
+
+00:07:01.700 --> 00:07:05.099
+and go out and do a wget of it.
+
+00:07:05.100 --> 00:07:07.099
+That's all it takes there.
+
+00:07:07.100 --> 00:07:10.259
+Chmodding it so you can actually execute the executable.
+
+00:07:10.260 --> 00:07:12.939
+And then just go ahead and actually running it.
+
+00:07:12.940 --> 00:07:16.939
+And let's go ahead and do that.
+
+00:07:16.940 --> 00:07:18.899
+I've already downloaded it because I don't want to wait.
+
+00:07:18.900 --> 00:07:21.259
+And let's just take a look at it.
+
+00:07:21.260 --> 00:07:22.899
+I've actually downloaded several of them,
+
+00:07:22.900 --> 00:07:25.699
+but let's go ahead and just run lava 3.2b
+
+00:07:25.700 --> 00:07:31.179
+with the 3 billion instructions. And that's it firing up.
+
+00:07:31.180 --> 00:07:33.899
+And it is nice enough to actually be listening in port 8080,
+
+00:07:33.900 --> 00:07:35.339
+which we'll need in a minute.
+
+00:07:35.340 --> 00:07:43.139
+So once you do that, you have to install gptel and emacs.
+
+00:07:43.140 --> 00:07:45.659
+That's as simple as firing up emacs,
+
+00:07:45.660 --> 00:07:48.339
+doing the meta x install package,
+
+00:07:48.340 --> 00:07:49.779
+and then just typing gptel
+
+00:07:49.780 --> 00:07:51.499
+if you have your repository set up right,
+
+00:07:51.500 --> 00:07:52.299
+which hopefully you do.
+
+00:07:52.300 --> 00:07:54.499
+And then you just go ahead and have it.
+
+00:07:54.500 --> 00:07:58.139
+You also have to set up a config file.
+
+00:07:58.140 --> 00:08:01.739
+Here's my example config file as it currently set up,
+
+00:08:01.740 --> 00:08:04.019
+requiring ensuring Gptel is loaded,
+
+00:08:04.020 --> 00:08:05.899
+defining the Llamafile backend.
+
+00:08:05.900 --> 00:08:07.779
+You can put multiple backends into it,
+
+00:08:07.780 --> 00:08:09.859
+but I just have the one defined on this example.
+
+00:08:09.860 --> 00:08:12.059
+But it's pretty straightforward.
+
+00:08:12.060 --> 00:08:16.739
+Llama local file, name for it, stream, protocol HTTP.
+
+00:08:16.740 --> 00:08:20.859
+If you have HTTPS set up, that's obviously preferable,
+
+00:08:20.860 --> 00:08:22.779
+but a lot of people don't for their home labs.
+
+00:08:22.780 --> 00:08:26.379
+Host is just 127.0.0.1 port 8080.
+
+00:08:26.380 --> 00:08:30.099
+Keep in mind, some of the AIs run on a different port,
+
+00:08:30.100 --> 00:08:31.499
+so you may be 8081
+
+00:08:31.500 --> 00:08:34.619
+if you're running OpenWebView at the same time. The key,
+
+00:08:34.620 --> 00:08:37.019
+we don't need an API key because it's a local server.
+
+00:08:37.020 --> 00:08:40.259
+And the models just, uh, we can put multiple models
+
+00:08:40.260 --> 00:08:41.339
+on there if we want to.
+
+00:08:41.340 --> 00:08:43.699
+So if we create one with additional stuff
+
+00:08:43.700 --> 00:08:45.379
+or like rag and stuff like that,
+
+00:08:45.380 --> 00:08:47.459
+we can actually name those models by their domain,
+
+00:08:47.460 --> 00:08:48.699
+which is really kind of cool.
+
+00:08:48.700 --> 00:08:52.099
+But, uh, that's all that takes.
+
+00:08:52.100 --> 00:09:03.779
+So let's go ahead and go to a quick test of it.
+
+00:09:03.780 --> 00:09:11.019
+Oops. Alt-X, gptel. And we're going to just choose
+
+00:09:11.020 --> 00:09:12.499
+the default buffer to make things easier.
+
+00:09:12.500 --> 00:09:15.339
+Going to resize it up a bit.
+
+00:09:15.340 --> 00:09:19.859
+And usually the go-to question I go to is, who was David Bowie?
+
+00:09:19.860 --> 00:09:24.499
+This one is actually a question
+
+00:09:24.500 --> 00:09:26.219
+that's turned out to be really good
+
+00:09:26.220 --> 00:09:28.019
+for figuring out whether or not AI is complete.
+
+00:09:28.020 --> 00:09:31.139
+This is one that some engines do well on, other ones don't.
+
+00:09:31.140 --> 00:09:33.739
+And we can just do, we can either do
+
+00:09:33.740 --> 00:09:36.059
+the alt X and send the gptel-send,
+
+00:09:36.060 --> 00:09:37.979
+or we can just do control C and hit enter.
+
+00:09:37.980 --> 00:09:39.139
+We'll just do control C and enter.
+
+00:09:39.140 --> 00:09:43.659
+And now it's going ahead and hitting our local AI system
+
+00:09:43.660 --> 00:09:46.659
+running on port 8080. And that looks pretty good,
+
+00:09:46.660 --> 00:09:50.739
+but let's go ahead and say, hey, it's set to terse mode right now.
+
+00:09:50.740 --> 00:10:03.859
+Please expand upon this. And there we go.
+
+00:10:03.860 --> 00:10:05.379
+We're getting a full description
+
+00:10:05.380 --> 00:10:08.739
+of the majority of, uh, about David Bowie's life
+
+00:10:08.740 --> 00:10:10.139
+and other information about him.
+
+00:10:10.140 --> 00:10:21.699
+So very, very happy with that.
+
+00:10:21.700 --> 00:10:23.539
+One thing to keep in mind is you look at things
+
+00:10:23.540 --> 00:10:24.699
+when you're looking for hallucinations,
+
+00:10:24.700 --> 00:10:26.899
+how accurate AI is, how it's compressed
+
+00:10:26.900 --> 00:10:29.259
+is it will tend to screw up on things like
+
+00:10:29.260 --> 00:10:30.859
+how many children he had and stuff like that.
+
+00:10:30.860 --> 00:10:32.459
+Let me see if it gets to that real quick.
+
+00:10:32.460 --> 00:10:39.739
+Is it not actually on this one?
+
+00:10:39.740 --> 00:10:42.179
+Alright, so that's the first question I always ask one.
+
+00:10:42.180 --> 00:10:44.659
+The next one is what are sea monkeys?
+
+00:10:44.660 --> 00:10:48.979
+It gives you an idea of the breadth of the system.
+
+00:10:48.980 --> 00:11:10.619
+It's querying right now. Pulls it back correctly. Yes.
+
+00:11:10.620 --> 00:11:12.339
+And it's smart enough to actually detect David Bowie
+
+00:11:12.340 --> 00:11:15.019
+even referenced see monkeys in the song sea of love,
+
+00:11:15.020 --> 00:11:16.179
+which came at hit single.
+
+00:11:16.180 --> 00:11:18.859
+So it's actually keeping the context alive
+
+00:11:18.860 --> 00:11:20.419
+and that which is very cool feature.
+
+00:11:20.420 --> 00:11:21.459
+I did not see that coming.
+
+00:11:21.460 --> 00:11:24.139
+Here's one that some people say is a really good one
+
+00:11:24.140 --> 00:11:25.739
+to ask ours in strawberry.
+
+00:11:25.740 --> 00:11:46.179
+All right, now she's going off the reservation.
+
+00:11:46.180 --> 00:11:48.139
+She's going in a different direction.
+
+00:11:48.140 --> 00:11:49.979
+Let me go ahead and reopen that again,
+
+00:11:49.980 --> 00:11:52.979
+because it's went down a bad hole there for a second.
+
+00:11:52.980 --> 00:11:58.419
+Let me ask it to do write hello world in Emacs list.
+
+00:11:58.420 --> 00:12:10.419
+Yep, that works. So the point being here,
+
+00:12:10.420 --> 00:12:14.939
+that was like two minutes of setup.
+
+00:12:14.940 --> 00:12:18.019
+And now we have a small AI embedded inside the system.
+
+00:12:18.020 --> 00:12:20.539
+So that gives you an idea just how easy it can be.
+
+00:12:20.540 --> 00:12:22.299
+And it's just running locally on the system.
+
+00:12:22.300 --> 00:12:25.259
+We also have the default system here as well.
+
+00:12:25.260 --> 00:12:32.579
+So not that bad.
+
+00:12:32.580 --> 00:12:35.379
+That's a basic solution, that's a basic setup
+
+00:12:35.380 --> 00:12:37.059
+that will get you to the point where you can go like,
+
+00:12:37.060 --> 00:12:39.859
+it's a party trick, but it's a very cool party trick.
+
+00:12:39.860 --> 00:12:42.859
+The way that Gptel works is it puts it into buffers,
+
+00:12:42.860 --> 00:12:45.099
+it doesn't interfere with your flow that much,
+
+00:12:45.100 --> 00:12:47.179
+it's just an additional window you can pop open
+
+00:12:47.180 --> 00:12:49.019
+to ask questions and get information for,
+
+00:12:49.020 --> 00:12:51.459
+dump code into it and have it refactored.
+
+00:12:51.460 --> 00:12:53.339
+Gptel has a lot of additional options
+
+00:12:53.340 --> 00:12:55.699
+for things that are really cool for that.
+
+00:12:55.700 --> 00:12:57.099
+But if you want a better solution,
+
+00:12:57.100 --> 00:12:59.939
+I recommend Ollama or LM Studio.
+
+00:12:59.940 --> 00:13:01.899
+They're both more capable than llama file.
+
+00:13:01.900 --> 00:13:03.859
+They can accept a lot of different models.
+
+00:13:03.860 --> 00:13:05.739
+You can do things like RAG.
+
+00:13:05.740 --> 00:13:09.219
+You can do loading of things onto the GPU more explicitly.
+
+00:13:09.220 --> 00:13:10.379
+It can speed stuff up.
+
+00:13:10.380 --> 00:13:13.059
+One of the things about the retrieval augmentation is
+
+00:13:13.060 --> 00:13:15.539
+it will let you put your data into the system
+
+00:13:15.540 --> 00:13:17.779
+so you can start uploading your code, your information,
+
+00:13:17.780 --> 00:13:20.139
+and actually being able to do analysis of it.
+
+00:13:20.140 --> 00:13:23.539
+OpenWebUI provides more capabilities.
+
+00:13:23.540 --> 00:13:24.859
+It provides an interface that's similar
+
+00:13:24.860 --> 00:13:25.899
+to what you're used to seeing
+
+00:13:25.900 --> 00:13:28.179
+for chat, GPT, and the other systems.
+
+00:13:28.180 --> 00:13:29.419
+It's really quite well done.
+
+00:13:29.420 --> 00:13:32.539
+And once again, gptel, I have to mention that
+
+00:13:32.540 --> 00:13:34.779
+because that's the one I really kind of like.
+
+00:13:34.780 --> 00:13:36.899
+And OlamaBuddy is also another really nice one.
+
+00:13:36.900 --> 00:13:41.019
+So what about the licensing of these models?
+
+00:13:41.020 --> 00:13:42.299
+Since I'm going out pulling down
+
+00:13:42.300 --> 00:13:43.579
+a model and doing this stuff.
+
+00:13:43.580 --> 00:13:46.579
+Let's take a look at a couple of highlights
+
+00:13:46.580 --> 00:13:49.379
+from the MetaLlama 3 community license scale.
+
+00:13:49.380 --> 00:13:52.579
+If your service exceeds 700 million monthly users,
+
+00:13:52.580 --> 00:13:54.099
+you need additional licensing.
+
+00:13:54.100 --> 00:13:56.099
+Probably not going to be a problem for most of us.
+
+00:13:56.100 --> 00:13:58.379
+There's a competition restriction.
+
+00:13:58.380 --> 00:14:00.899
+You can't use this model to enhance competing models.
+
+00:14:00.900 --> 00:14:04.219
+And there's some limitations on using the Meta trademarks.
+
+00:14:04.220 --> 00:14:05.939
+Not that big a deal.
+
+00:14:05.940 --> 00:14:09.139
+And the other ones are it's a permissive one
+
+00:14:09.140 --> 00:14:10.939
+designed to encourage innovation,
+
+00:14:10.940 --> 00:14:13.779
+open development, commercial use is allowed,
+
+00:14:13.780 --> 00:14:15.219
+but there are some restrictions on it.
+
+00:14:15.220 --> 00:14:17.259
+Yeah, you can modify the model,
+
+00:14:17.260 --> 00:14:20.419
+but you have to rely on the license terms.
+
+00:14:20.420 --> 00:14:22.339
+And you can distribute the model with derivatives.
+
+00:14:22.340 --> 00:14:24.059
+And there are some very cool ones out there.
+
+00:14:24.060 --> 00:14:25.259
+There's people who've done things
+
+00:14:25.260 --> 00:14:29.579
+to try and make the llama bee less, what's the phrase,
+
+00:14:29.580 --> 00:14:31.939
+ethical if you're doing penetration testing research
+
+00:14:31.940 --> 00:14:32.619
+and stuff like that.
+
+00:14:32.620 --> 00:14:34.459
+It has some very nice value there.
+
+00:14:34.460 --> 00:14:37.739
+Keep in mind licenses also vary
+
+00:14:37.740 --> 00:14:39.619
+depending on the model you're using.
+
+00:14:39.620 --> 00:14:42.419
+Mistral AI has the non-production license.
+
+00:14:42.420 --> 00:14:45.219
+It's designed to keep it to research and development.
+
+00:14:45.220 --> 00:14:46.739
+You can't use it commercially.
+
+00:14:46.740 --> 00:14:50.419
+So it's designed to clearly delineate
+
+00:14:50.420 --> 00:14:52.939
+between research and development
+
+00:14:52.940 --> 00:14:54.259
+and somebody trying to actually build
+
+00:14:54.260 --> 00:14:55.379
+something on top of it.
+
+00:14:55.380 --> 00:14:57.979
+And another question I get asked is,
+
+00:14:57.980 --> 00:14:59.899
+are there open source data model options?
+
+00:14:59.900 --> 00:15:02.819
+Yeah, but most of them are small or specialized currently.
+
+00:15:02.820 --> 00:15:05.499
+MoMo is a whole family of them,
+
+00:15:05.500 --> 00:15:07.339
+but there tend to be more specialized,
+
+00:15:07.340 --> 00:15:09.019
+but it's very cool to see where it's going.
+
+00:15:09.020 --> 00:15:11.339
+And it's another thing that's just going forward.
+
+00:15:11.340 --> 00:15:13.379
+It's under the MIT license.
+
+00:15:13.380 --> 00:15:15.819
+Some things to know to help you
+
+00:15:15.820 --> 00:15:17.499
+have a better experience with this.
+
+00:15:17.500 --> 00:15:21.059
+Get a Llama and OpenWebUI working by themselves,
+
+00:15:21.060 --> 00:15:22.659
+then set up your config file.
+
+00:15:22.660 --> 00:15:24.819
+I was fighting both at the same time,
+
+00:15:24.820 --> 00:15:26.699
+and it turned out I had a problem with my LLAMA.
+
+00:15:26.700 --> 00:15:28.899
+I had a conflict, so that was what my problem is.
+
+00:15:28.900 --> 00:15:32.819
+Llamafile, gptel is a great way to start experimenting
+
+00:15:32.820 --> 00:15:34.299
+just to get you an idea of how it works
+
+00:15:34.300 --> 00:15:36.939
+and figure out how the interfaces work. Tremendous.
+
+00:15:36.940 --> 00:15:40.739
+RAG loading documents into it is really easy with open web UI.
+
+00:15:40.740 --> 00:15:43.019
+You can create models, you can put things like
+
+00:15:43.020 --> 00:15:46.419
+help desk developers and stuff like that, breaking it out.
+
+00:15:46.420 --> 00:15:51.019
+The Hacker News has a how to build a $300 AI computer.
+
+00:15:51.020 --> 00:15:52.859
+This is for March 2024,
+
+00:15:52.860 --> 00:15:55.099
+but it still has a lot of great information
+
+00:15:55.100 --> 00:15:56.819
+on how to benchmark the environments,
+
+00:15:56.820 --> 00:16:01.339
+what some values are like the Ryzen 5700U
+
+00:16:01.340 --> 00:16:02.579
+inside my Acer Aspire,
+
+00:16:02.580 --> 00:16:04.419
+that's where I got the idea doing that.
+
+00:16:04.420 --> 00:16:06.739
+Make sure you do the RockM stuff correctly
+
+00:16:06.740 --> 00:16:09.899
+to get the GUI extensions. But it's just really good stuff.
+
+00:16:09.900 --> 00:16:13.059
+You don't need a great GPU or CPU to get started.
+
+00:16:13.060 --> 00:16:14.819
+Smaller models like Tiny Llama
+
+00:16:14.820 --> 00:16:16.179
+can run on very small systems.
+
+00:16:16.180 --> 00:16:18.499
+It gets you the ability to start playing with it
+
+00:16:18.500 --> 00:16:21.619
+and start experimenting and figure out if that's for you
+
+00:16:21.620 --> 00:16:23.379
+and to move forward with it.
+
+00:16:23.380 --> 00:16:29.219
+The AMD Ryzen AI Max 395 plus is a mini PC
+
+00:16:29.220 --> 00:16:31.179
+makes it really nice dedicated host.
+
+00:16:31.180 --> 00:16:34.619
+You used to be able to buy these for about $1200 now
+
+00:16:34.620 --> 00:16:35.579
+with the RAM price increase,
+
+00:16:35.580 --> 00:16:38.779
+you want to get 120 gig when you're pushing two brands so.
+
+00:16:38.780 --> 00:16:40.739
+It gets a little tighter.
+
+00:16:40.740 --> 00:16:44.099
+Macs work remarkably well with AI.
+
+00:16:44.100 --> 00:16:47.659
+My MacBook Air was one of my go-tos for a while,
+
+00:16:47.660 --> 00:16:49.779
+but once I started doing anything AI,
+
+00:16:49.780 --> 00:16:50.779
+I had a five-minute window
+
+00:16:50.780 --> 00:16:52.619
+before the thermal throttling became an issue.
+
+00:16:52.620 --> 00:16:54.619
+Keep in mind that's a MacBook Air,
+
+00:16:54.620 --> 00:16:56.659
+so it doesn't have the greatest ventilation.
+
+00:16:56.660 --> 00:16:58.339
+If you get the MacBook Pros and stuff,
+
+00:16:58.340 --> 00:17:00.139
+they tend to have more ventilation,
+
+00:17:00.140 --> 00:17:02.499
+but still you're going to be pushing against that.
+
+00:17:02.500 --> 00:17:04.939
+So Mac Minis and the Mac Ultras and stuff like that
+
+00:17:04.940 --> 00:17:06.099
+tend to work really well for that.
+
+00:17:06.100 --> 00:17:09.779
+Alex Ziskin on YouTube has a channel.
+
+00:17:09.780 --> 00:17:11.899
+He does a lot of AI performance benchmarking,
+
+00:17:11.900 --> 00:17:14.819
+like I load a 70 billion parameter model
+
+00:17:14.820 --> 00:17:16.699
+on this mini PC and stuff like that.
+
+00:17:16.700 --> 00:17:19.019
+It's a lot of fun and interesting stuff there.
+
+00:17:19.020 --> 00:17:21.219
+And it's influencing my decision
+
+00:17:21.220 --> 00:17:22.979
+to buy my next AI style PC.
+
+00:17:22.980 --> 00:17:27.619
+Small domain specific LLMs are happening.
+
+00:17:27.620 --> 00:17:29.939
+An LLM that has all your code and information,
+
+00:17:29.940 --> 00:17:31.659
+it sounds like a really cool idea.
+
+00:17:31.660 --> 00:17:34.299
+It gives you capabilities to start training stuff
+
+00:17:34.300 --> 00:17:35.899
+that you couldn't do with like the big ones.
+
+00:17:35.900 --> 00:17:38.059
+Even with in terms of fine tuning and stuff,
+
+00:17:38.060 --> 00:17:40.539
+it's remarkable to see where that space is coming along
+
+00:17:40.540 --> 00:17:41.739
+in the next year or so.
+
+00:17:41.740 --> 00:17:46.219
+Hugging Face Co has pointers to tons of AI models.
+
+00:17:46.220 --> 00:17:49.259
+You'll find the one that works for you, hopefully there.
+
+00:17:49.260 --> 00:17:50.539
+If you're doing cybersecurity,
+
+00:17:50.540 --> 00:17:52.059
+there's a whole bunch out there for that,
+
+00:17:52.060 --> 00:17:54.619
+that have certain training on it, information.
+
+00:17:54.620 --> 00:17:56.139
+It's really good.
+
+00:17:56.140 --> 00:18:00.099
+One last thing to keep in mind is hallucinations are real.
+
+00:18:00.100 --> 00:18:02.779
+You will get BS back from the AI occasionally,
+
+00:18:02.780 --> 00:18:05.179
+so do validate everything you get from it.
+
+00:18:05.180 --> 00:18:08.459
+Don't be using it for court cases like some people have
+
+00:18:08.460 --> 00:18:14.539
+and run into those problems. So, That is my talk.
+
+00:18:14.540 --> 00:18:17.219
+What I would like you to get out of that is,
+
+00:18:17.220 --> 00:18:21.859
+if you haven't tried it, give GPTEL and LlamaFile a shot.
+
+00:18:21.860 --> 00:18:23.979
+Fire up a little small AI instance,
+
+00:18:23.980 --> 00:18:27.339
+play around with a little bit inside your Emacs,
+
+00:18:27.340 --> 00:18:30.139
+and see if it makes your life better. Hopefully it will.
+
+00:18:30.140 --> 00:18:32.139
+And I really hope you guys
+
+00:18:32.140 --> 00:18:34.659
+learned something from this talk. And thanks for listening.
+
+00:18:34.660 --> 00:18:38.979
+And the links are at the end of the talk, if you have any questions.
+
+00:18:38.980 --> 00:18:42.739
+Let me see if we got anything you want, Pat. You do.
+
+00:18:42.740 --> 00:18:43.899
+You've got a few questions.
+
+00:18:43.900 --> 00:18:48.059
+Hey, this is Corwin. Thank you so much. Thank you, Aaron.
+
+00:18:48.060 --> 00:18:50.339
+What an awesome talk this was, actually.
+
+00:18:50.340 --> 00:18:52.179
+If you don't have a camera,
+
+00:18:52.180 --> 00:18:54.339
+I can get away with not having one too.
+
+00:18:54.340 --> 00:18:56.299
+I've got, I'll turn the camera on.
+
+00:18:56.300 --> 00:19:01.499
+Okay. All right. I'll turn mine back on. Here I come.
+
+00:19:01.500 --> 00:19:03.139
+Yeah, so there are a few questions,
+
+00:19:03.140 --> 00:19:04.579
+but first let me say thank you
+
+00:19:04.580 --> 00:19:06.339
+for a really captivating talk.
+
+00:19:06.340 --> 00:19:10.939
+I think a lot of people will be empowered from this
+
+00:19:10.940 --> 00:19:15.259
+to try to do more with less, especially locally.
+
+00:19:15.260 --> 00:19:20.179
+concerned about the data center footprint,
+
+00:19:20.180 --> 00:19:23.659
+environmentally concerned
+
+00:19:23.660 --> 00:19:26.979
+about the footprint of LLM inside data centers.
+
+00:19:26.980 --> 00:19:28.219
+So just thinking about how we can
+
+00:19:28.220 --> 00:19:32.419
+put infrastructure we have at home to use
+
+00:19:32.420 --> 00:19:34.019
+and get more done with less.
+
+00:19:34.020 --> 00:19:37.499
+Yeah, the data center impact's interesting
+
+00:19:37.500 --> 00:19:39.979
+because there was a study a while ago.
+
+00:19:39.980 --> 00:19:42.099
+Someone said every time you do a Gemini query,
+
+00:19:42.100 --> 00:19:45.019
+it's like boiling a cup of water.
+
+00:19:45.020 --> 00:19:48.619
+Yeah, I've heard that one too. So do you want to, you know,
+
+00:19:48.620 --> 00:19:51.699
+I don't know how much direction you want.
+
+00:19:51.700 --> 00:19:53.859
+I'd be very happy to read out the questions for you.
+
+00:19:53.860 --> 00:19:55.219
+Yeah, that would be great.
+
+00:19:55.220 --> 00:19:57.619
+I'm having trouble getting to that tab.
+
+00:19:57.620 --> 00:20:02.779
+Okay, I'm there, so I'll put it into our chat too,
+
+00:20:02.780 --> 00:20:07.419
+so you can follow along if you'd like.
+
+00:20:07.420 --> 00:20:11.219
+The first question was, why is the David Bowie question
+
+00:20:11.220 --> 00:20:12.219
+a good one to start with?
+
+00:20:12.220 --> 00:20:14.419
+Does it have interesting failure conditions
+
+00:20:14.420 --> 00:20:17.299
+or what made you choose that?
+
+00:20:17.300 --> 00:20:21.979
+First off, huge fan of David Bowie.
+
+00:20:21.980 --> 00:20:24.499
+But I came down to it really taught me a few things
+
+00:20:24.500 --> 00:20:26.299
+about how old the models work
+
+00:20:26.300 --> 00:20:28.819
+in terms of things like how many kids he had,
+
+00:20:28.820 --> 00:20:31.779
+because deep seek, which is a very popular Chinese model
+
+00:20:31.780 --> 00:20:33.179
+that a lot of people are using now,
+
+00:20:33.180 --> 00:20:35.619
+misidentifies him having three daughters,
+
+00:20:35.620 --> 00:20:38.459
+and he has like one son and one, one, I think,
+
+00:20:38.460 --> 00:20:40.899
+two sons and a daughter or something like that.
+
+00:20:40.900 --> 00:20:43.659
+so there's differences on that and it just goes over
+
+00:20:43.660 --> 00:20:45.299
+there's a whole lot of stuff
+
+00:20:45.300 --> 00:20:47.779
+because his story spans like 60 years
+
+00:20:47.780 --> 00:20:49.659
+so it gives a good good feedback
+
+00:20:49.660 --> 00:20:51.539
+that's the real main reason I asked that question
+
+00:20:51.540 --> 00:20:53.699
+because I just needed one that sea monkeys I just picked
+
+00:20:53.700 --> 00:20:56.579
+because it was obscure and just always have right
+
+00:20:56.580 --> 00:20:58.939
+I used to have it right hello world and forth
+
+00:20:58.940 --> 00:21:01.019
+because I thought was an interesting one as well so
+
+00:21:01.020 --> 00:21:03.899
+It's just picking random ones like that.
+
+00:21:03.900 --> 00:21:06.499
+One question asked, sorry, a lot of models is,
+
+00:21:06.500 --> 00:21:09.419
+what is the closest star to the Earth?
+
+00:21:09.420 --> 00:21:12.019
+Because most of them will say Alpha Centauri
+
+00:21:12.020 --> 00:21:13.739
+or Proxima Centauri and not the sun.
+
+00:21:13.740 --> 00:21:15.899
+And I have a whole nother talk
+
+00:21:15.900 --> 00:21:17.899
+where I just argue with the LLM
+
+00:21:17.900 --> 00:21:20.019
+trying to say, hey, the sun is a star.
+
+00:21:20.020 --> 00:21:26.579
+And he just wouldn't accept it, so. What?
+
+00:21:26.580 --> 00:21:28.419
+Oh, I can hear that.
+
+00:21:28.420 --> 00:21:34.379
+So what specific tasks do you like to use your local AI?
+
+00:21:34.380 --> 00:21:37.459
+I like to load a lot of my code into
+
+00:21:37.460 --> 00:21:39.739
+and actually have it do analysis of it.
+
+00:21:39.740 --> 00:21:42.339
+I was actually going through some code
+
+00:21:42.340 --> 00:21:45.619
+I have for some pen testing, and I was having it modified
+
+00:21:45.620 --> 00:21:47.259
+to update it for the newer version,
+
+00:21:47.260 --> 00:21:48.459
+because I hate to say this,
+
+00:21:48.460 --> 00:21:49.859
+but it was written for Python 2,
+
+00:21:49.860 --> 00:21:51.459
+and I needed to update it for Python 3.
+
+00:21:51.460 --> 00:21:53.859
+And the 2 to 3 tool did not do all of it,
+
+00:21:53.860 --> 00:21:56.659
+but the actual tool was able to do the refactoring.
+
+00:21:56.660 --> 00:21:58.499
+It's part of my laziness.
+
+00:21:58.500 --> 00:22:01.459
+But I use that for anything I don't want to hit the web.
+
+00:22:01.460 --> 00:22:03.259
+And that's a lot of stuff when you start thinking about
+
+00:22:03.260 --> 00:22:04.979
+if you're doing cyber security researching.
+
+00:22:04.980 --> 00:22:06.819
+and you have your white papers
+
+00:22:06.820 --> 00:22:10.779
+and stuff like that and stuff in there.
+
+00:22:10.780 --> 00:22:13.979
+I've got a lot of that loaded into RAG
+
+00:22:13.980 --> 00:22:15.659
+in one model on my OpenWebUI system.
+
+00:22:15.660 --> 00:22:21.059
+Neat. Have you used have you used
+
+00:22:21.060 --> 00:22:25.739
+any small domain specific LLMs? What kind of tasks?
+
+00:22:25.740 --> 00:22:30.419
+If so, what kind of tasks that they specialize in?
+
+00:22:30.420 --> 00:22:32.139
+And you know, how?
+
+00:22:32.140 --> 00:22:34.979
+Not to be honest, but there are some out there like once again,
+
+00:22:34.980 --> 00:22:36.779
+for cybersecurity and stuff like that,
+
+00:22:36.780 --> 00:22:39.739
+that I really need to dig into that's on my to do list.
+
+00:22:39.740 --> 00:22:41.699
+I've got a couple weeks off at the end of the year.
+
+00:22:41.700 --> 00:22:43.779
+And that's a big part of my plan for that.
+
+00:22:43.780 --> 00:22:49.379
+Are the various models updated pretty regularly?
+
+00:22:49.380 --> 00:22:52.059
+Can you add your own data to the pre-built models?
+
+00:22:52.060 --> 00:22:56.699
+Yes. The models are updated pretty reasonably.
+
+00:22:56.700 --> 00:22:59.699
+You can add data to a model in a couple of different ways.
+
+00:22:59.700 --> 00:23:01.099
+You can do something called fine-tuning,
+
+00:23:01.100 --> 00:23:03.819
+which requires a really nice GPU and a lot of CPU time.
+
+00:23:03.820 --> 00:23:05.499
+Probably not going to do that.
+
+00:23:05.500 --> 00:23:07.419
+You can do retrieval augmentation generation,
+
+00:23:07.420 --> 00:23:09.499
+which is you load your data on top of the system
+
+00:23:09.500 --> 00:23:11.299
+and puts inside a database
+
+00:23:11.300 --> 00:23:12.859
+and you can actually scan that and stuff.
+
+00:23:12.860 --> 00:23:14.619
+I have another talk where I go through
+
+00:23:14.620 --> 00:23:16.219
+and I start asking questions about,
+
+00:23:16.220 --> 00:23:18.579
+I load the talk into the engine
+
+00:23:18.580 --> 00:23:20.099
+and I ask questions against that.
+
+00:23:20.100 --> 00:23:22.179
+I would have one more time would have done that
+
+00:23:22.180 --> 00:23:26.499
+but it comes down to how many That's that's rag rag
+
+00:23:26.500 --> 00:23:29.419
+is pretty easy to do through open web UI or LM studio
+
+00:23:29.420 --> 00:23:31.419
+It's a great way you just like point a folder
+
+00:23:31.420 --> 00:23:34.099
+point it to a folder and it just sucks all that state into
+
+00:23:34.100 --> 00:23:35.499
+and it'll hit that data first
+
+00:23:35.500 --> 00:23:36.859
+you have like helpdesk and stuff and
+
+00:23:36.860 --> 00:23:39.619
+The other options there's vector databases,
+
+00:23:39.620 --> 00:23:41.819
+which is like if you use PostgreSQL.
+
+00:23:41.820 --> 00:23:43.699
+It has a PG vector I can do a lot of that stuff.
+
+00:23:43.700 --> 00:23:44.739
+I've not dug into that yet,
+
+00:23:44.740 --> 00:23:46.099
+but that is also on that to-do list
+
+00:23:46.100 --> 00:23:48.459
+I've got a lot of stuff planned for Cool.
+
+00:23:48.460 --> 00:23:51.819
+So what are your experience with rags?
+
+00:23:51.820 --> 00:23:54.339
+I don't even know what that means.
+
+00:23:54.340 --> 00:23:57.419
+Do you know what that means?
+
+00:23:57.420 --> 00:23:59.619
+Do you remember this question again?
+
+00:23:59.620 --> 00:24:03.979
+What is your experience with RAGs? RAGs is great.
+
+00:24:03.980 --> 00:24:07.459
+That's Retrieval Augmentation Generation.
+
+00:24:07.460 --> 00:24:09.739
+That loads your data first, and it hits yours,
+
+00:24:09.740 --> 00:24:11.499
+and it'll actually cite it and stuff.
+
+00:24:11.500 --> 00:24:14.659
+There's a guy who wrote a RAG in 100 lines of Python,
+
+00:24:14.660 --> 00:24:16.899
+and it's an impressive piece of software.
+
+00:24:16.900 --> 00:24:18.779
+I think if you hit one of my site,
+
+00:24:18.780 --> 00:24:22.099
+I've got a private AI talk where I actually refer to that.
+
+00:24:22.100 --> 00:24:25.219
+But retrieval augmentation, it's easy, it's fast,
+
+00:24:25.220 --> 00:24:26.699
+it puts your data into the system,
+
+00:24:26.700 --> 00:24:31.339
+Yeah, start with that and go then iterate on top of that.
+
+00:24:31.340 --> 00:24:32.659
+That's one of the great things about AI,
+
+00:24:32.660 --> 00:24:33.619
+especially private AI,
+
+00:24:33.620 --> 00:24:37.739
+is you can do whatever you want to with it
+
+00:24:37.740 --> 00:24:43.179
+and build up with it as you get more experience.
+
+00:24:43.180 --> 00:24:44.219
+Any thoughts on running things
+
+00:24:44.220 --> 00:24:49.179
+on AWS, DigitalOcean, and so on?
+
+00:24:49.180 --> 00:24:50.619
+AWS is not bad.
+
+00:24:50.620 --> 00:24:52.659
+The DigitalOcean, they have some of their GPUs.
+
+00:24:52.660 --> 00:24:54.379
+I still don't like having the data
+
+00:24:54.380 --> 00:24:57.419
+leave my house, to be honest, or at work,
+
+00:24:57.420 --> 00:24:59.019
+because I tend to do some stuff
+
+00:24:59.020 --> 00:25:01.259
+that I don't want it even hitting that situation.
+
+00:25:01.260 --> 00:25:03.699
+But they have pretty good stuff.
+
+00:25:03.700 --> 00:25:05.579
+Another one to consider is Oracle Cloud.
+
+00:25:05.580 --> 00:25:09.059
+Oracle has their AI infrastructure that's really well done.
+
+00:25:09.060 --> 00:25:12.379
+But I mean, once again, then you start looking at potential
+
+00:25:12.380 --> 00:25:13.779
+is saying your data is private,
+
+00:25:13.780 --> 00:25:14.819
+I don't necessarily trust it.
+
+00:25:14.820 --> 00:25:17.859
+But they do have good stuff, both DigitalOcean, AWS,
+
+00:25:17.860 --> 00:25:20.339
+Oracle Cloud has the free service, which isn't too bad,
+
+00:25:20.340 --> 00:25:21.339
+usually a certain number of stuff.
+
+00:25:21.340 --> 00:25:23.179
+And Google's also has it,
+
+00:25:23.180 --> 00:25:26.739
+but I still tend to keep more stuff on local PCs,
+
+00:25:26.740 --> 00:25:33.299
+because I just paranoid that way. Gotcha.
+
+00:25:33.300 --> 00:25:35.579
+What has your experience been using AI?
+
+00:25:35.580 --> 00:25:40.139
+Do you want to get into that, using AI for cybersecurity?
+
+00:25:40.140 --> 00:25:42.019
+You might have already touched on this.
+
+00:25:42.020 --> 00:25:44.379
+Yeah, really, for cybersecurity,
+
+00:25:44.380 --> 00:25:46.259
+what I've had to do is I've dumped logs
+
+00:25:46.260 --> 00:25:47.299
+to have a due correlation.
+
+00:25:47.300 --> 00:25:49.859
+Keep in mind, the size of that LLAMA file we were using
+
+00:25:49.860 --> 00:25:52.059
+for figuring out David Bowie, writing the hello world,
+
+00:25:52.060 --> 00:25:54.179
+all that stuff, is like six gig.
+
+00:25:54.180 --> 00:25:56.859
+How does it get the entire world in six gig?
+
+00:25:56.860 --> 00:25:59.739
+I still haven't figured that out in terms of quantization.
+
+00:25:59.740 --> 00:26:02.499
+So I'm really interested in seeing the ability
+
+00:26:02.500 --> 00:26:05.139
+to take all this stuff out of all my logs,
+
+00:26:05.140 --> 00:26:06.339
+dump it all in there,
+
+00:26:06.340 --> 00:26:08.459
+and actually be able to do intelligent queries against that.
+
+00:26:08.460 --> 00:26:10.899
+Microsoft has a project called Security Copilot,
+
+00:26:10.900 --> 00:26:12.819
+which is trying to do that in the Cloud.
+
+00:26:12.820 --> 00:26:15.299
+But I want to work on something to do that more locally
+
+00:26:15.300 --> 00:26:19.019
+and be able to actually drive this stuff over that.
+
+00:26:19.020 --> 00:26:21.979
+That's one also on the long-term goals.
+
+00:26:21.980 --> 00:26:26.059
+So we got any other questions or?
+
+00:26:26.060 --> 00:26:29.099
+Those are the questions that I see.
+
+00:26:29.100 --> 00:26:31.179
+I want to just read out a couple of comments
+
+00:26:31.180 --> 00:26:33.419
+that I saw in IRC though.
+
+00:26:33.420 --> 00:26:36.699
+Jay Rutabaga says, it went very well
+
+00:26:36.700 --> 00:26:39.259
+from an audience perspective.
+
+00:26:39.260 --> 00:26:43.619
+And G Gundam says, respect your commitment to privacy.
+
+00:26:43.620 --> 00:26:45.619
+And then somebody is telling us
+
+00:26:45.620 --> 00:26:46.779
+we might have skipped a question.
+
+00:26:46.780 --> 00:26:50.019
+So I'm just going to run back to my list.
+
+00:26:50.020 --> 00:26:52.819
+Updated regularly experience.
+
+00:26:52.820 --> 00:26:57.659
+I just didn't type in the answer here's
+
+00:26:57.660 --> 00:26:59.659
+and there's a couple more questions coming in so
+
+00:26:59.660 --> 00:27:04.699
+Is there a disparity where you go to paid models
+
+00:27:04.700 --> 00:27:08.619
+because they are better and what problems?
+
+00:27:08.620 --> 00:27:14.019
+You know what would drive you to? That's a good question.
+
+00:27:14.020 --> 00:27:17.819
+Paid models, I don't mind them. I think they're good,
+
+00:27:17.820 --> 00:27:21.299
+but I don't think they're actually economically sustainable
+
+00:27:21.300 --> 00:27:22.659
+under their current system.
+
+00:27:22.660 --> 00:27:24.299
+Because right now, if you're paying
+
+00:27:24.300 --> 00:27:26.899
+20 bucks a month for Copilot and that goes up to 200 bucks,
+
+00:27:26.900 --> 00:27:28.499
+I'm not going to be as likely to use it.
+
+00:27:28.500 --> 00:27:29.579
+You know what I mean?
+
+00:27:29.580 --> 00:27:33.059
+But it does do some things in a way that I did not expect.
+
+00:27:33.060 --> 00:27:35.459
+For example, Grok was refactoring
+
+00:27:35.460 --> 00:27:38.019
+some of my code in the comments and dropped an F-bomb.
+
+00:27:38.020 --> 00:27:39.979
+which I did not see coming,
+
+00:27:39.980 --> 00:27:41.619
+but the other code before
+
+00:27:41.620 --> 00:27:43.219
+that I had gotten off GitHub
+
+00:27:43.220 --> 00:27:44.059
+had F bombs in it.
+
+00:27:44.060 --> 00:27:45.899
+So it was just emulating the style,
+
+00:27:45.900 --> 00:27:47.779
+but would that be something
+
+00:27:47.780 --> 00:27:49.979
+I'd want to turn in a pull request? I don't know.
+
+00:27:49.980 --> 00:27:52.139
+But, uh, there's, there's a lot of money
+
+00:27:52.140 --> 00:27:53.899
+going into these AIs and stuff,
+
+00:27:53.900 --> 00:27:56.219
+but in terms of the ability to get a decent one,
+
+00:27:56.220 --> 00:27:57.979
+like the llama, llama three, two,
+
+00:27:57.980 --> 00:28:01.699
+and load your data into it, you can be pretty competitive.
+
+00:28:01.700 --> 00:28:04.779
+You're not going to get all the benefits,
+
+00:28:04.780 --> 00:28:07.299
+but you have more control over it.
+
+00:28:07.300 --> 00:28:11.819
+So it's, it's a, this and that it's a,
+
+00:28:11.820 --> 00:28:13.139
+it's a balancing act.
+
+00:28:13.140 --> 00:28:15.539
+Okay, and I think I see a couple more questions coming in.
+
+00:28:15.540 --> 00:28:19.619
+What is the largest parameter size for local models
+
+00:28:19.620 --> 00:28:22.459
+that you've been able to successfully run locally
+
+00:28:22.460 --> 00:28:26.059
+and do run into issues with limited context window size?
+
+00:28:26.060 --> 00:28:29.659
+The top eight models will tend to have a larger ceiling.
+
+00:28:29.660 --> 00:28:32.859
+Yes, yes, yes, yes, yes.
+
+00:28:32.860 --> 00:28:37.019
+By default, the context size is I think 1024.
+
+00:28:37.020 --> 00:28:44.619
+But I've upped it to 8192 on the on this box, the Pangolin
+
+00:28:44.620 --> 00:28:46.939
+because it seems to be some reason
+
+00:28:46.940 --> 00:28:49.459
+it's just a very working quite well.
+
+00:28:49.460 --> 00:28:52.219
+But the largest ones I've loaded have been in
+
+00:28:52.220 --> 00:28:54.059
+the have not been that huge.
+
+00:28:54.060 --> 00:28:55.699
+I've loaded this the last biggest one I've done.
+
+00:28:55.700 --> 00:28:57.459
+That's the reason why I'm planning
+
+00:28:57.460 --> 00:29:01.339
+on breaking down and buying a Ryzen.
+
+00:29:01.340 --> 00:29:03.619
+Actually, I'm going to buy
+
+00:29:03.620 --> 00:29:06.979
+an Intel i285H with 96 gig of RAM.
+
+00:29:06.980 --> 00:29:08.379
+Then I should be able to load
+
+00:29:08.380 --> 00:29:12.059
+a 70 billion parameter model in that. How fast will it run?
+
+00:29:12.060 --> 00:29:13.819
+It's going to run slow as dog,
+
+00:29:13.820 --> 00:29:15.819
+but it's going to be cool to be able to do it.
+
+00:29:15.820 --> 00:29:17.379
+It's an AI bragging rights thing,
+
+00:29:17.380 --> 00:29:20.019
+but I mostly stick with the smaller size models
+
+00:29:20.020 --> 00:29:22.819
+and the ones that are more quantitized
+
+00:29:22.820 --> 00:29:26.619
+because it just tends to work better for me.
+
+00:29:26.620 --> 00:29:29.179
+We've still got over 10 minutes before we're cutting away,
+
+00:29:29.180 --> 00:29:30.179
+but I'm just anticipating
+
+00:29:30.180 --> 00:29:32.859
+that we're going to be going strong at the 10 minute mark.
+
+00:29:32.860 --> 00:29:34.899
+So I'm just, just letting, you know,
+
+00:29:34.900 --> 00:29:37.379
+we can go as long as we like here at a certain point.
+
+00:29:37.380 --> 00:29:41.059
+I may have to jump away and check in with the next speaker,
+
+00:29:41.060 --> 00:29:44.419
+but we'll post the entirety of this,
+
+00:29:44.420 --> 00:29:47.979
+even if we aren't able to stay with it all.
+
+00:29:47.980 --> 00:29:49.739
+Okay. And we've got 10 minutes
+
+00:29:49.740 --> 00:29:52.379
+where we're still going to stay live.
+
+00:29:52.380 --> 00:30:00.139
+So next question coming in, I see, are there free as in freedom,
+
+00:30:00.140 --> 00:30:05.739
+free as in FSF issues with the data?
+
+00:30:05.740 --> 00:30:11.699
+Yes, where's the data coming from is a huge question with AI.
+
+00:30:11.700 --> 00:30:13.739
+It's astonishing you can ask questions
+
+00:30:13.740 --> 00:30:16.899
+to models that you don't know where it's coming from.
+
+00:30:16.900 --> 00:30:19.979
+That is gonna be one of the big issues long-term.
+
+00:30:19.980 --> 00:30:21.499
+There are people who are working
+
+00:30:21.500 --> 00:30:22.979
+on trying to figure out that stuff,
+
+00:30:22.980 --> 00:30:25.259
+but it's, I mean, if you look at, God,
+
+00:30:25.260 --> 00:30:27.059
+I can't remember who it was.
+
+00:30:27.060 --> 00:30:28.659
+Somebody was actually out torrenting books
+
+00:30:28.660 --> 00:30:30.939
+just to be able to build into their AI system.
+
+00:30:30.940 --> 00:30:32.339
+I think it might've been Meta.
+
+00:30:32.340 --> 00:30:34.819
+So there's a lot of that going on.
+
+00:30:34.820 --> 00:30:38.139
+The open source of the stuff is going to be tough.
+
+00:30:38.140 --> 00:30:39.459
+There's going to be there's some models
+
+00:30:39.460 --> 00:30:41.419
+like the mobile guys have got their own license,
+
+00:30:41.420 --> 00:30:42.739
+but where they're getting their data from,
+
+00:30:42.740 --> 00:30:45.499
+I'm not sure on so that that's a huge question.
+
+00:30:45.500 --> 00:30:47.979
+That's a that's a talk in itself.
+
+00:30:47.980 --> 00:30:51.979
+But yeah, but you if you train on your RAG and your data,
+
+00:30:51.980 --> 00:30:53.499
+you know what it's come, you know,
+
+00:30:53.500 --> 00:30:54.379
+you have a license that
+
+00:30:54.380 --> 00:30:55.139
+but the other stuff is just
+
+00:30:55.140 --> 00:30:56.739
+more lines of supplement
+
+00:30:56.740 --> 00:31:01.379
+if you're using a smaller model,
+
+00:31:01.380 --> 00:31:05.419
+but the comment online, I see a couple of them.
+
+00:31:05.420 --> 00:31:08.339
+I'll read them out in order here. Really interesting stuff.
+
+00:31:08.340 --> 00:31:11.659
+Thank you for your talk. Given that large AI companies
+
+00:31:11.660 --> 00:31:14.899
+are openly stealing intellectual property and copyright
+
+00:31:14.900 --> 00:31:18.939
+and therefore eroding the authority of such laws
+
+00:31:18.940 --> 00:31:21.579
+and maybe obscuring the truth itself,
+
+00:31:21.580 --> 00:31:26.579
+can you see a future where IP and copyright flaw become untenable?
+
+00:31:26.580 --> 00:31:29.619
+I think that's a great question.
+
+00:31:29.620 --> 00:31:34.979
+I'm not a lawyer, but it is really getting complicated.
+
+00:31:34.980 --> 00:31:37.859
+It is getting to the point, I asked a question from,
+
+00:31:37.860 --> 00:31:41.179
+I played with Sora a little bit, and it generated someone,
+
+00:31:41.180 --> 00:31:42.819
+you can go like, oh, that's Jon Hamm,
+
+00:31:42.820 --> 00:31:44.099
+that's Christopher Walken,
+
+00:31:44.100 --> 00:31:45.379
+you start figuring out who the people
+
+00:31:45.380 --> 00:31:47.019
+they're modeling stuff after.
+
+00:31:47.020 --> 00:31:48.979
+There is an apocalypse, something
+
+00:31:48.980 --> 00:31:52.459
+going to happen right now.
+
+00:31:52.460 --> 00:31:53.579
+There is, but this is once again,
+
+00:31:53.580 --> 00:31:56.059
+my personal opinion, and I'm not a lawyer,
+
+00:31:56.060 --> 00:31:57.459
+and I do not have money.
+
+00:31:57.460 --> 00:31:58.859
+So don't sue me, is there's going to be
+
+00:31:58.860 --> 00:32:02.899
+the current administration tends is very AI pro AI.
+
+00:32:02.900 --> 00:32:05.499
+And there's very a great deal of lobbying by those groups.
+
+00:32:05.500 --> 00:32:07.139
+And it's on both sides.
+
+00:32:07.140 --> 00:32:09.699
+And it's going to be, it's gonna be interesting to see
+
+00:32:09.700 --> 00:32:11.699
+what happens to copyright the next 510 years.
+
+00:32:11.700 --> 00:32:13.339
+I just don't know how it keeps up
+
+00:32:13.340 --> 00:32:16.059
+without there being some adjustments and stuff.
+
+00:32:16.060 --> 00:32:20.419
+Okay, and then another comment I saw,
+
+00:32:20.420 --> 00:32:23.219
+file size is not going to be a bottleneck.
+
+00:32:23.220 --> 00:32:25.819
+RAM is. You'll need 16 gigabytes of RAM
+
+00:32:25.820 --> 00:32:28.259
+to run the smallest local models
+
+00:32:28.260 --> 00:32:31.979
+and 512 gigabytes of RAM to run the larger ones.
+
+00:32:31.980 --> 00:32:35.059
+You'll need a GPU with that much memory
+
+00:32:35.060 --> 00:32:39.099
+if you want it to run quickly. Yeah. Oh no.
+
+00:32:39.100 --> 00:32:41.259
+It also depends upon how your memory is laid out.
+
+00:32:41.260 --> 00:32:45.699
+Like example being the Ultra i285H
+
+00:32:45.700 --> 00:32:47.899
+I plan to buy, that has 96 gig of memory.
+
+00:32:47.900 --> 00:32:50.499
+It's unified between the GPU and the CPU share it,
+
+00:32:50.500 --> 00:32:52.739
+but they go over the same bus.
+
+00:32:52.740 --> 00:32:55.779
+So the overall bandwidth of it tends to be a bit less,
+
+00:32:55.780 --> 00:32:57.579
+but you're able to load more of it into memory.
+
+00:32:57.580 --> 00:32:59.419
+So it's able to do some additional stuff with it
+
+00:32:59.420 --> 00:33:00.819
+as opposed to come off disk.
+
+00:33:00.820 --> 00:33:03.699
+It's all balancing act. If you hit Zyskin's website,
+
+00:33:03.700 --> 00:33:05.819
+that guy's done some great work on it.
+
+00:33:05.820 --> 00:33:07.499
+I'm trying to figure out how big a model you can do,
+
+00:33:07.500 --> 00:33:08.619
+what you can do with it.
+
+00:33:08.620 --> 00:33:12.699
+And some of the stuff seems to be not obvious,
+
+00:33:12.700 --> 00:33:15.299
+because like example, being that MacBook Air,
+
+00:33:15.300 --> 00:33:17.619
+for the five minutes I can run the model,
+
+00:33:17.620 --> 00:33:19.379
+it runs it faster than a lot of other things
+
+00:33:19.380 --> 00:33:21.339
+that should be able to run it faster,
+
+00:33:21.340 --> 00:33:24.619
+just because of the way the ARM cores and the unified memory work on it.
+
+00:33:24.620 --> 00:33:26.019
+So it's a learning process.
+
+00:33:26.020 --> 00:33:29.579
+But if you want to, Network Chuck had a great video
+
+00:33:29.580 --> 00:33:30.939
+talking about building his own system
+
+00:33:30.940 --> 00:33:34.379
+with a couple really powerful NVIDIA cards
+
+00:33:34.380 --> 00:33:35.379
+and stuff like that in it.
+
+00:33:35.380 --> 00:33:38.859
+And just actually setting up on his system as a node
+
+00:33:38.860 --> 00:33:41.459
+and using a web UI on it. So there's a lot of stuff there,
+
+00:33:41.460 --> 00:33:43.899
+but it is a process of learning how big your data is,
+
+00:33:43.900 --> 00:33:44.899
+which models you want to use,
+
+00:33:44.900 --> 00:33:46.219
+how much information you need,
+
+00:33:46.220 --> 00:33:48.019
+but it's part of the learning.
+
+00:33:48.020 --> 00:33:52.899
+And you can run models, even as a Raspberry PI fives,
+
+00:33:52.900 --> 00:33:54.499
+if you want to, they'll run slow.
+
+00:33:54.500 --> 00:33:56.459
+Don't get me wrong, but they're possible.
+
+00:33:56.460 --> 00:34:02.179
+Okay, and I think there's other questions coming in too,
+
+00:34:02.180 --> 00:34:04.019
+so I'll just bam for another second.
+
+00:34:04.020 --> 00:34:06.299
+We've got about five minutes before we'll,
+
+00:34:06.300 --> 00:34:09.739
+before we'll be cutting over,
+
+00:34:09.740 --> 00:34:13.179
+but I just want to say in case we get close for time here,
+
+00:34:13.180 --> 00:34:14.859
+how much I appreciate your talk.
+
+00:34:14.860 --> 00:34:15.979
+This is another one that I'm going to
+
+00:34:15.980 --> 00:34:18.339
+have to study after the conference.
+
+00:34:18.340 --> 00:34:21.099
+We greatly appreciate, all of us appreciate
+
+00:34:21.100 --> 00:34:22.459
+you guys putting on the conference.
+
+00:34:22.460 --> 00:34:26.299
+It's a great conference. It's well done.
+
+00:34:26.300 --> 00:34:28.019
+It's an honor to be on the stage
+
+00:34:28.020 --> 00:34:30.899
+with the brains of the project, which is you.
+
+00:34:30.900 --> 00:34:34.699
+So what else we got? Question wise.
+
+00:34:34.700 --> 00:34:39.499
+Okay, so just scanning here.
+
+00:34:39.500 --> 00:34:50.699
+Have you used local models capable of tool calling?
+
+00:34:50.700 --> 00:34:54.779
+I'm, I'm scared of agentic.
+
+00:34:54.780 --> 00:34:58.739
+I, I am, I'm going to be a slow adopter of that.
+
+00:34:58.740 --> 00:35:02.459
+I want to do it, but I just don't have the, uh,
+
+00:35:02.460 --> 00:35:04.339
+four decimal fortitude right now to do it.
+
+00:35:04.340 --> 00:35:07.179
+I, I, I've had to give me the commands,
+
+00:35:07.180 --> 00:35:08.739
+but I still run the commands by hand.
+
+00:35:08.740 --> 00:35:10.539
+I'm looking into it and it's on once again,
+
+00:35:10.540 --> 00:35:14.139
+it's on that list, but I just, that's a big step for me.
+
+00:35:14.140 --> 00:35:23.139
+So. Awesome. All right.
+
+00:35:23.140 --> 00:35:27.179
+Well, maybe it's, let me just scroll through
+
+00:35:27.180 --> 00:35:31.539
+because we might have missed one question. Oh, I see.
+
+00:35:31.540 --> 00:35:36.899
+Here was the piggyback question.
+
+00:35:36.900 --> 00:35:38.419
+Now I see the question that I missed.
+
+00:35:38.420 --> 00:35:41.139
+So this was piggybacking on the question
+
+00:35:41.140 --> 00:35:44.859
+about model updates and adding data.
+
+00:35:44.860 --> 00:35:46.579
+And will models reach out to the web
+
+00:35:46.580 --> 00:35:47.819
+if they need more info?
+
+00:35:47.820 --> 00:35:51.779
+Or have you worked with any models that work that way?
+
+00:35:51.780 --> 00:35:55.259
+No, I've not seen any models to do that
+
+00:35:55.260 --> 00:35:57.739
+There's there was like a group
+
+00:35:57.740 --> 00:35:59.899
+working on something like a package updater
+
+00:35:59.900 --> 00:36:02.499
+that would do different diffs on it,
+
+00:36:02.500 --> 00:36:03.939
+but it's so Models change so much
+
+00:36:03.940 --> 00:36:05.739
+even who make minor changes and fine-tuning.
+
+00:36:05.740 --> 00:36:07.659
+It's hard just to update them in place
+
+00:36:07.660 --> 00:36:10.099
+So I haven't seen one, but that doesn't mean
+
+00:36:10.100 --> 00:36:16.259
+they're not out there. I'm curious topic though Awesome
+
+00:36:16.260 --> 00:36:19.539
+Well, it's probably pretty good timing.
+
+00:36:19.540 --> 00:36:21.299
+Let me just scroll and make sure.
+
+00:36:21.300 --> 00:36:23.499
+And of course, before I can say that,
+
+00:36:23.500 --> 00:36:25.899
+there's one more question. So let's go ahead and have that.
+
+00:36:25.900 --> 00:36:28.299
+I want to make sure while we're still live, though,
+
+00:36:28.300 --> 00:36:31.299
+I give you a chance to offer any closing thoughts.
+
+00:36:31.300 --> 00:36:35.779
+So what scares you most about the agentic tools?
+
+00:36:35.780 --> 00:36:38.419
+How would you think about putting a sandbox around that
+
+00:36:38.420 --> 00:36:42.139
+if you did adopt an agentic workflow?
+
+00:36:42.140 --> 00:36:42.899
+That is a great question.
+
+00:36:42.900 --> 00:36:45.939
+In terms of that, I would just control
+
+00:36:45.940 --> 00:36:48.099
+what it's able to talk to, what machines,
+
+00:36:48.100 --> 00:36:50.059
+I would actually have it be air gap.
+
+00:36:50.060 --> 00:36:52.099
+I work for a defense contractor,
+
+00:36:52.100 --> 00:36:53.819
+and we spend a lot of time dealing with air gap systems,
+
+00:36:53.820 --> 00:36:55.979
+because that's just kind of the way it works out for us.
+
+00:36:55.980 --> 00:36:58.499
+So agentic, it's just going to take a while to get trust.
+
+00:36:58.500 --> 00:37:01.059
+I want to want to see more stuff happening.
+
+00:37:01.060 --> 00:37:02.819
+Humans screw up stuff enough.
+
+00:37:02.820 --> 00:37:04.819
+The last thing we need is to multiply that by 1000.
+
+00:37:04.820 --> 00:37:09.419
+So in terms of that, I would be restricting what it can do.
+
+00:37:09.420 --> 00:37:10.859
+If you look at the capabilities,
+
+00:37:10.860 --> 00:37:13.579
+if I created a user and gave it permissions,
+
+00:37:13.580 --> 00:37:15.299
+I would have a lockdown through sudo,
+
+00:37:15.300 --> 00:37:17.379
+what it's able to do, what the account's able to do.
+
+00:37:17.380 --> 00:37:18.899
+I would do those kind of things,
+
+00:37:18.900 --> 00:37:20.859
+but it's going to be, it's happening.
+
+00:37:20.860 --> 00:37:25.819
+It's just, I'm going to be one of the laggards on that one.
+
+00:37:25.820 --> 00:37:29.259
+So airgab, jail, extremely locked down environments,
+
+00:37:29.260 --> 00:37:34.899
+like we're talking about separate physicals, not Docker.
+
+00:37:34.900 --> 00:37:37.499
+Yeah, hopefully. Right, fair.
+
+00:37:37.500 --> 00:37:39.899
+So tool calling can be read-only,
+
+00:37:39.900 --> 00:37:42.539
+such as giving models the ability to search the web
+
+00:37:42.540 --> 00:37:43.979
+before answering your question,
+
+00:37:43.980 --> 00:37:46.219
+you know, write access, execute access.
+
+00:37:46.220 --> 00:37:49.219
+I'm interested to know if local models
+
+00:37:49.220 --> 00:37:51.419
+are any good at that.
+
+00:37:51.420 --> 00:37:55.579
+Yes, local models can do a lot of that stuff.
+
+00:37:55.580 --> 00:37:56.819
+It's their capabilities.
+
+00:37:56.820 --> 00:37:59.019
+If you load LM studio, you can do a lot of wonderful stuff
+
+00:37:59.020 --> 00:38:02.419
+with that or with open web UI with a llama.
+
+00:38:02.420 --> 00:38:05.739
+It's a lot of capabilities. It's amazing.
+
+00:38:05.740 --> 00:38:08.139
+Open web UI is actually what a lot of companies are using now
+
+00:38:08.140 --> 00:38:10.259
+to put their data behind that.
+
+00:38:10.260 --> 00:38:12.139
+They're curated data and stuff like that. So works well.
+
+00:38:12.140 --> 00:38:15.819
+I can confirm that from my own professional experience.
+
+00:38:15.820 --> 00:38:19.659
+Excellent. Okay, well, our timing should be just perfect
+
+00:38:19.660 --> 00:38:22.659
+if you want to give us like a 30-second, 45-second wrap-up.
+
+00:38:22.660 --> 00:38:24.419
+Aaron, let me squeeze in mine.
+
+00:38:24.420 --> 00:38:26.779
+Thank you again so much for preparing this talk
+
+00:38:26.780 --> 00:38:30.499
+and for entertaining all of our questions.
+
+00:38:30.500 --> 00:38:33.299
+Yeah, let me just thank you guys for the conference again.
+
+00:38:33.300 --> 00:38:35.179
+This is a great one. I've enjoyed a lot of it.
+
+00:38:35.180 --> 00:38:37.339
+I've only had a couple of talks so far,
+
+00:38:37.340 --> 00:38:41.659
+but I'm looking forward to hitting the ones after this and tomorrow.
+
+00:38:41.660 --> 00:38:44.739
+But the AI stuff is coming. Get on board.
+
+00:38:44.740 --> 00:38:46.939
+Definitely recommend it. If you want to just try it out
+
+00:38:46.940 --> 00:38:48.419
+and get a little taste of it,
+
+00:38:48.420 --> 00:38:49.779
+what my minimal viable product
+
+00:38:49.780 --> 00:38:51.619
+with just LlamaFile and GPTEL
+
+00:38:51.620 --> 00:38:53.139
+will get you to the point where you start figuring out.
+
+00:38:53.140 --> 00:38:55.579
+Gptel is an amazing thing. It just gets out of your way,
+
+00:38:55.580 --> 00:39:00.459
+but it works solo with Emacs. Design because it takes
+
+00:39:00.460 --> 00:39:01.699
+doesn't take your hands off the keyboard.
+
+00:39:01.700 --> 00:39:02.499
+It's just another buffer
+
+00:39:02.500 --> 00:39:04.059
+and you just put information in there.
+
+00:39:04.060 --> 00:39:06.979
+It's quite quite a wonderful It's a wonderful time.
+
+00:39:06.980 --> 00:39:10.819
+Let's put that way That's all I got Thank you
+
+00:39:10.820 --> 00:39:14.339
+so much for once again, and we're we're just cut away.
+
+00:39:14.340 --> 00:39:15.779
+So I'll stop the recording
+
+00:39:15.780 --> 00:39:18.259
+and you're on your own recognizance
+
+00:39:18.260 --> 00:39:19.699
+Well, I'm gonna punch out
+
+00:39:19.700 --> 00:39:21.059
+if anybody has any questions or anything
+
+00:39:21.060 --> 00:39:24.699
+my email address is ajgrothe@yahoo.com or at gmail and
+
+00:39:24.700 --> 00:39:26.779
+Thank you all for attending
+
+00:39:26.780 --> 00:39:29.939
+and thanks again for the conference
+
+00:39:29.940 --> 00:39:32.579
+Okay, I'm gonna go ahead and end the room there, thank you.
+
+00:39:32.580 --> 00:39:34.100
+Excellent, thanks, bye.
diff --git a/2025/captions/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--answers.vtt b/2025/captions/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--answers.vtt
new file mode 100644
index 00000000..676fa744
--- /dev/null
+++ b/2025/captions/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--answers.vtt
@@ -0,0 +1,859 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:02.839
+So as we wait for people to drop
+
+00:00:02.840 --> 00:00:04.279
+in their questions and so on,
+
+00:00:04.280 --> 00:00:08.719
+I'll just kind of add a couple of thoughts.
+
+00:00:08.720 --> 00:00:12.039
+I'm not personally much of a Python developer,
+
+00:00:12.040 --> 00:00:17.759
+so I'm just curious as to your thoughts on using Emacs
+
+00:00:17.760 --> 00:00:24.319
+and kind of the development methodology you showed
+
+00:00:24.320 --> 00:00:26.519
+as a way to learn Python.
+
+00:00:26.520 --> 00:00:29.239
+Yeah, I think Emacs is perfect for it.
+
+00:00:29.240 --> 00:00:31.759
+If you're already an Emacs user
+
+00:00:31.760 --> 00:00:35.599
+and you have the keyboard commands
+
+00:00:35.600 --> 00:00:38.719
+and everything uploaded in your brain,
+
+00:00:38.720 --> 00:00:42.599
+then learning Python shouldn't be too difficult,
+
+00:00:42.600 --> 00:00:44.839
+because there's a lot of good packages.
+
+00:00:44.840 --> 00:00:51.319
+For Python, I'm using a thing called elpy,
+
+00:00:51.320 --> 00:00:55.679
+which is really good. for Python development.
+
+00:00:55.680 --> 00:01:00.039
+So you have this connection to a running backend,
+
+00:01:00.040 --> 00:01:06.039
+the Jedi Python backend that will give you autocomplete
+
+00:01:06.040 --> 00:01:09.039
+and some refactoring and things like that.
+
+00:01:09.040 --> 00:01:14.439
+So I think Emacs is really good for Python development.
+
+00:01:14.440 --> 00:01:16.679
+So what are some other...
+
+00:01:16.680 --> 00:01:18.319
+How long have you been using Emacs?
+
+00:01:18.320 --> 00:01:19.599
+Kind of a general question.
+
+00:01:19.600 --> 00:01:23.599
+Sorry if you covered this and I missed it.
+
+00:01:23.600 --> 00:01:26.599
+It's not that long actually.
+
+00:01:26.600 --> 00:01:31.599
+I think it was in 2019 or 2020.
+
+00:01:31.600 --> 00:01:34.799
+It's when I started to, I was really fortunate enough
+
+00:01:34.800 --> 00:01:38.039
+to join a team that had chosen to
+
+00:01:38.040 --> 00:01:42.919
+develop an app in Lisp, in Clojure.
+
+00:01:42.920 --> 00:01:45.039
+yeah and i didn't know anything about it
+
+00:01:45.040 --> 00:01:47.359
+i didn't know lisp at all so it was like brand new
+
+00:01:47.360 --> 00:01:50.639
+so i really had struggling to to learn it
+
+00:01:50.640 --> 00:01:53.559
+but at the same time i was looking for okay
+
+00:01:53.560 --> 00:01:55.279
+which editor should i pick to to do this
+
+00:01:55.280 --> 00:02:00.239
+and i was before that and like an ide person
+
+00:02:00.240 --> 00:02:02.919
+so i do use this big ideas
+
+00:02:02.920 --> 00:02:07.839
+and this time i figured maybe i should try something different.
+
+00:02:07.840 --> 00:02:10.239
+And I read this book about Clojure development
+
+00:02:10.240 --> 00:02:13.239
+and the author was really into Emacs
+
+00:02:13.240 --> 00:02:17.159
+and he was like, Clojure is really good for,
+
+00:02:17.160 --> 00:02:19.159
+Emacs is really good for Clojure development.
+
+00:02:19.160 --> 00:02:20.759
+So that's how I started.
+
+00:02:20.760 --> 00:02:24.479
+So I like to learn, rewired my brain
+
+00:02:24.480 --> 00:02:27.639
+to learn all how Emacs works
+
+00:02:27.640 --> 00:02:30.959
+as opposed to like the mainstream editors out there.
+
+00:02:30.960 --> 00:02:33.519
+So that's how it started. So like five years ago, maybe.
+
+00:02:33.520 --> 00:02:39.519
+Cool. Um, so did you, what were some other,
+
+00:02:39.520 --> 00:02:43.999
+what, what, what editor were you primarily using before you?
+
+00:02:44.000 --> 00:02:49.399
+Um, um, back, back then it was like,
+
+00:02:49.400 --> 00:02:52.719
+I think it was like Sublime Text.
+
+00:02:52.720 --> 00:02:57.719
+And also some IntelliJ, sorry, JetBrains, their tools.
+
+00:02:57.720 --> 00:03:04.599
+And before that, I was in the Microsoft world,
+
+00:03:04.600 --> 00:03:08.199
+so it's like Microsoft toolings basically.
+
+00:03:08.200 --> 00:03:10.879
+So I moved towards open source tooling
+
+00:03:10.880 --> 00:03:16.679
+and also open source development. Very cool.
+
+00:03:16.680 --> 00:03:19.119
+So I see we've got a couple people
+
+00:03:19.120 --> 00:03:23.479
+that have joined on the BBB here with us
+
+00:03:23.480 --> 00:03:24.959
+for the live question.
+
+00:03:24.960 --> 00:03:29.199
+You're welcome to just throw your question in this chat,
+
+00:03:29.200 --> 00:03:32.039
+or if you've got a microphone connected,
+
+00:03:32.040 --> 00:03:34.599
+you're welcome to come off mute
+
+00:03:34.600 --> 00:03:36.759
+and throw a question in that way as well.
+
+00:03:36.760 --> 00:03:40.359
+You can join on liberachat IRC.
+
+00:03:40.360 --> 00:03:44.119
+You can join pound emacs comp hyphen dev,
+
+00:03:44.120 --> 00:03:47.279
+and we would happily take your questions there.
+
+00:03:47.280 --> 00:03:49.479
+Meanwhile, I've got a question
+
+00:03:49.480 --> 00:03:52.719
+coming in on the pad right now, so take that next.
+
+00:03:52.720 --> 00:03:55.239
+I'll just read it out.
+
+00:03:55.240 --> 00:03:58.239
+I don't quite see how your setup works with IPython.
+
+00:03:58.240 --> 00:04:00.279
+Sorry if you already answered this.
+
+00:04:00.280 --> 00:04:03.519
+Do you have your Emacs connect to the IPython kernel
+
+00:04:03.520 --> 00:04:11.919
+over XMPP socket that IPython sets up? Oh, good question.
+
+00:04:11.920 --> 00:04:18.039
+So what I've done is I have two different connections.
+
+00:04:18.040 --> 00:04:21.359
+Like if I'm going to do this regular day-to-day Python work
+
+00:04:21.360 --> 00:04:24.399
+when I want to evaluate code
+
+00:04:24.400 --> 00:04:29.959
+without thinking about the external connection,
+
+00:04:29.960 --> 00:04:31.559
+then I just use IPython
+
+00:04:31.560 --> 00:04:36.799
+and I have my I'm using the LP Python package
+
+00:04:36.800 --> 00:04:39.839
+so that you can set up which of the REPLs
+
+00:04:39.840 --> 00:04:42.799
+you want to start when you evaluate code.
+
+00:04:42.800 --> 00:04:46.759
+So that's IPython. But in the second part of the talk
+
+00:04:46.760 --> 00:04:50.919
+where I connect to an externally running app,
+
+00:04:50.920 --> 00:04:55.839
+then I have set up the same configuration
+
+00:04:55.840 --> 00:05:00.959
+but to start Jupyter, the Jupyter console instead.
+
+00:05:00.960 --> 00:05:04.959
+And when I start it up, it's going to, it's like a dialogue
+
+00:05:04.960 --> 00:05:09.599
+that will ask for the ID of a running kernel.
+
+00:05:09.600 --> 00:05:10.839
+Because if you start a kernel,
+
+00:05:10.840 --> 00:05:12.919
+if you start something in a kernel,
+
+00:05:12.920 --> 00:05:17.079
+you will get this unique ID so you can connect to it.
+
+00:05:17.080 --> 00:05:19.679
+So that's kind of the difference.
+
+00:05:19.680 --> 00:05:21.639
+So I have two different ways
+
+00:05:21.640 --> 00:05:26.599
+of starting up the Python kernel. REPLs, either PyPython,
+
+00:05:26.600 --> 00:05:29.559
+which I do for most of my daily work,
+
+00:05:29.560 --> 00:05:32.239
+or if I want this connection to a running app,
+
+00:05:32.240 --> 00:05:38.479
+I'm using the Jupyter console, basically.
+
+00:05:38.480 --> 00:05:45.199
+Have you explored Org Babel at all?
+
+00:05:45.200 --> 00:05:48.199
+Can you talk about your approach
+
+00:05:48.200 --> 00:05:52.279
+compared to the Babel workflow? Oh, interesting.
+
+00:05:52.280 --> 00:05:54.879
+No, I haven't actually, I haven't done that,
+
+00:05:54.880 --> 00:05:59.119
+but I think it's similar to Jupyter notebooks,
+
+00:05:59.120 --> 00:06:02.359
+so you can do some interactive, you can run Python there,
+
+00:06:02.360 --> 00:06:03.279
+but I haven't,
+
+00:06:03.280 --> 00:06:08.119
+I have too little knowledge about it to elaborate on that.
+
+00:06:08.120 --> 00:06:24.159
+Sorry. Very good. All right.
+
+00:06:24.160 --> 00:06:26.999
+I'm just going to peek over to the other chats
+
+00:06:27.000 --> 00:06:28.839
+and make sure I'm not missing questions.
+
+00:06:28.840 --> 00:06:35.519
+Sorry, I got a lot of screens. A little dance here.
+
+00:06:35.520 --> 00:06:41.239
+All right, and I do see a few people in the chat.
+
+00:06:41.240 --> 00:06:44.559
+I'll just say again, if you've joined us on the BBB,
+
+00:06:44.560 --> 00:06:46.999
+you're more than welcome to jump in with your questions
+
+00:06:47.000 --> 00:06:50.119
+or put questions into the chat here.
+
+00:06:50.120 --> 00:06:52.879
+I'm not a big Python person,
+
+00:06:52.880 --> 00:06:57.599
+so I can't get into the really interesting questions
+
+00:06:57.600 --> 00:07:01.639
+that are probably more relevant,
+
+00:07:01.640 --> 00:07:05.799
+just because a lot of it's kind of over my head.
+
+00:07:05.800 --> 00:07:12.879
+Have you seen the miramo.io notebooks?
+
+00:07:12.880 --> 00:07:15.279
+These use standard Python?
+
+00:07:15.280 --> 00:07:18.119
+Oh, yes, I've seen, I haven't tried it myself,
+
+00:07:18.120 --> 00:07:19.359
+but I've seen it.
+
+00:07:19.360 --> 00:07:22.639
+It's very, I think it's a very interesting approach
+
+00:07:22.640 --> 00:07:26.279
+that probably will solve a lot of these things
+
+00:07:26.280 --> 00:07:28.839
+with interactive development in general,
+
+00:07:28.840 --> 00:07:31.839
+but because I think it's basically Python files
+
+00:07:31.840 --> 00:07:36.439
+and not the, not this other file format that you have
+
+00:07:36.440 --> 00:07:40.799
+for the regular notebook setup.
+
+00:07:40.800 --> 00:07:45.559
+So I have that in my list of things to try out in future,
+
+00:07:45.560 --> 00:08:00.719
+but it looks really, really cool. Awesome.
+
+00:08:00.720 --> 00:08:06.719
+Yeah, I'm hesitant to just ask you really boilerplate questions.
+
+00:08:06.720 --> 00:08:11.239
+You get an expert, a souffle chef,
+
+00:08:11.240 --> 00:08:16.599
+and you ask about making pasta or some other sort of thing.
+
+00:08:16.600 --> 00:08:20.559
+No, go ahead. Go ahead. I'm glad to ask any questions.
+
+00:08:20.560 --> 00:08:25.679
+So just generally about Emacs as a coding developer,
+
+00:08:25.680 --> 00:08:26.999
+what are the features
+
+00:08:27.000 --> 00:08:28.479
+that you tend to lean on more heavily?
+
+00:08:28.480 --> 00:08:34.319
+you know completion or you know what what have you
+
+00:08:34.320 --> 00:08:36.199
+maybe I could put it better
+
+00:08:36.200 --> 00:08:40.079
+as what have you spent more time configuring for Emacs
+
+00:08:40.080 --> 00:08:45.439
+to facilitate development?
+
+00:08:45.440 --> 00:08:49.639
+Yes initially it was basically taking away
+
+00:08:49.640 --> 00:08:51.319
+some of the UI features
+
+00:08:51.320 --> 00:08:56.599
+basically disabling it and and but fairly quickly
+
+00:08:56.600 --> 00:08:58.919
+for for both closure development
+
+00:08:58.920 --> 00:09:04.599
+where i was using cider which is like a really good uh good tool um
+
+00:09:04.600 --> 00:09:08.159
+and for python when i quickly found lp elp
+
+00:09:08.160 --> 00:09:10.599
+i'm not sure how to pronounce it
+
+00:09:10.600 --> 00:09:16.039
+but you you get so much uh good things from these tools
+
+00:09:16.040 --> 00:09:21.719
+so what i've done additionally is like theme
+
+00:09:21.720 --> 00:09:27.159
+and maybe having this environment
+
+00:09:27.160 --> 00:09:31.479
+that is without disturbance.
+
+00:09:31.480 --> 00:09:34.839
+So I really like the code to have my full attention.
+
+00:09:34.840 --> 00:09:41.239
+So I rarely have, maybe I have like a preview sometimes,
+
+00:09:41.240 --> 00:09:45.359
+but mostly it's the window or the buffer where I have my code
+
+00:09:45.360 --> 00:09:49.879
+and I've minimized the running REPL buffer.
+
+00:09:49.880 --> 00:09:53.439
+So sometimes it's, I'm hiding it, but it's still active.
+
+00:09:53.440 --> 00:09:57.679
+So basically that's how I configured,
+
+00:09:57.680 --> 00:10:00.279
+spent my configuration doing that.
+
+00:10:00.280 --> 00:10:04.799
+And also lately, trying out some LLM tools.
+
+00:10:04.800 --> 00:10:09.279
+So I think I have two packages
+
+00:10:09.280 --> 00:10:12.239
+that I'm using actively today.
+
+00:10:12.240 --> 00:10:15.799
+And my favorite is a tool called ECA,
+
+00:10:15.800 --> 00:10:20.199
+which is a LLM chat assistant, which is really good.
+
+00:10:20.200 --> 00:10:24.399
+The developer is also an Emacs enthusiast.
+
+00:10:24.400 --> 00:10:33.639
+So are you the type of person that tends to work with
+
+00:10:33.640 --> 00:10:37.039
+like a master builder, build your own Emacs?
+
+00:10:37.040 --> 00:10:40.799
+Are you using the system packages?
+
+00:10:40.800 --> 00:10:43.615
+What's your approach to just get Emacs
+
+00:10:43.616 --> 00:10:45.368
+up and off the ground for yourself?
+
+00:10:45.369 --> 00:10:52.519
+I'm not there yet with doing my own builds.
+
+00:10:52.520 --> 00:10:55.599
+Currently, I'm on macOS,
+
+00:10:55.600 --> 00:11:00.039
+so I'm installing Emacs through broom basically, homebrew.
+
+00:11:00.040 --> 00:11:04.919
+I've yet so much Emacs things to learn
+
+00:11:04.920 --> 00:11:07.739
+because I'm not even using org yet.
+
+00:11:07.740 --> 00:11:11.559
+I'm exploring the this editor.
+
+00:11:11.560 --> 00:11:14.799
+So I feel like I'm very much a beginner.
+
+00:11:14.800 --> 00:11:17.919
+I'm not using Emacs to its full potential yet.
+
+00:11:17.920 --> 00:11:23.279
+So I'm counting on that I will be more and more using Emacs
+
+00:11:23.280 --> 00:11:29.119
+for more and more different tasks basically.
+
+00:11:29.120 --> 00:11:32.559
+And I'm just seeing a comment.
+
+00:11:32.560 --> 00:11:35.799
+Ed Stallthroat says, thank you
+
+00:11:35.800 --> 00:11:40.839
+for publishing your configuration and offers a link.
+
+00:11:40.840 --> 00:11:41.879
+Oh, great. Great.
+
+00:11:41.880 --> 00:11:46.359
+Yes, those things that I showed in my talk,
+
+00:11:46.360 --> 00:11:49.319
+I haven't made any, I haven't packaged it yet,
+
+00:11:49.320 --> 00:11:51.199
+but everything is on my GitHub,
+
+00:11:51.200 --> 00:11:57.079
+and I've tried to separate each feature
+
+00:11:57.080 --> 00:11:59.639
+in separate LSP files.
+
+00:11:59.640 --> 00:12:04.319
+So it should be, I hope that it's fairly straightforward
+
+00:12:04.320 --> 00:12:08.959
+to understand how it's set up. Very good.
+
+00:12:08.960 --> 00:12:11.119
+Let me just scroll down,
+
+00:12:11.120 --> 00:12:12.999
+make sure I'm not missing questions here.
+
+00:12:13.000 --> 00:12:16.959
+Okay, I think those are the questions that we have.
+
+00:12:16.960 --> 00:12:20.879
+We can take a couple more minutes if you're open to that,
+
+00:12:20.880 --> 00:12:24.039
+just for people to consider.
+
+00:12:24.040 --> 00:12:26.119
+I know we're coming up on the lunch hour,
+
+00:12:26.120 --> 00:12:31.679
+so it may be that people are jogging off to get some food.
+
+00:12:31.680 --> 00:12:36.599
+Yeah, in Sweden, it's dinner time.
+
+00:12:36.600 --> 00:12:40.079
+It's like 6 p.m. soon. That fits.
+
+00:12:40.080 --> 00:12:46.439
+So are you involved with local Emacs meetups?
+
+00:12:46.440 --> 00:12:49.079
+I know that your part of the world
+
+00:12:49.080 --> 00:12:51.799
+has a really brisk community,
+
+00:12:51.800 --> 00:12:55.279
+you know, a lot of, just a lot going on.
+
+00:12:55.280 --> 00:12:58.799
+I'm always seeing in Sacha's Emacs News,
+
+00:12:58.800 --> 00:13:02.319
+all of the different meetups and so on.
+
+00:13:02.320 --> 00:13:03.519
+I'm curious if you're plugged
+
+00:13:03.520 --> 00:13:08.719
+into a local community there at all, No, I haven't.
+
+00:13:08.720 --> 00:13:10.759
+Not in any community. I haven't done that yet,
+
+00:13:10.760 --> 00:13:15.679
+but we are like friends that I've gotten to know
+
+00:13:15.680 --> 00:13:23.439
+through work and through like open source work that also use Emacs.
+
+00:13:23.440 --> 00:13:28.959
+We talk and share our conflicts
+
+00:13:28.960 --> 00:13:30.799
+basically on a regular basis,
+
+00:13:30.800 --> 00:13:35.999
+because we are, at least in the Python community,
+
+00:13:36.000 --> 00:13:37.399
+we're like a minority,
+
+00:13:37.400 --> 00:13:39.799
+like other editors are like the standards.
+
+00:13:39.800 --> 00:13:45.879
+And at work, I'm sharing what I'm doing,
+
+00:13:45.880 --> 00:13:48.679
+just like my talk here to my fellow co-workers
+
+00:13:48.680 --> 00:13:53.999
+that are not on Emacs, but I hope to get their interest up.
+
+00:13:54.000 --> 00:13:58.999
+So many of us Emacs users are Emacs evangelists.
+
+00:13:59.000 --> 00:14:06.201
+Yeah. It's the Venn diagram of Emacs user
+
+00:14:06.202 --> 00:14:08.868
+and Emacs evangelist is a circle, I think.
+
+00:14:08.869 --> 00:14:11.035
+Yeah, I think so too.
+
+00:14:11.036 --> 00:14:16.559
+Well, David, I super appreciate your talk
+
+00:14:16.560 --> 00:14:18.759
+and thank you so much also for...
+
+00:14:18.760 --> 00:14:24.639
+I'm sorry, I saw another question here. Let me cover that.
+
+00:14:24.640 --> 00:14:27.959
+Can you repeat the name of the LLM
+
+00:14:27.960 --> 00:14:30.319
+that you specifically mentioned there?
+
+00:14:30.320 --> 00:14:36.784
+Oh, it's a tool called ECA, E-C-A.
+
+00:14:36.785 --> 00:14:44.076
+It's basically a server and clients,
+
+00:14:44.077 --> 00:14:49.160
+and it's not only Emacs. It has support for other editors,
+
+00:14:49.161 --> 00:14:53.119
+but I think the primary support is for,
+
+00:14:53.120 --> 00:14:57.599
+at least the developer who does it is an Emacs user,
+
+00:14:57.600 --> 00:15:01.039
+and so it's like Emacs first, basically.
+
+00:15:01.040 --> 00:15:04.959
+And his name is Eric Dallo.
+
+00:15:04.960 --> 00:15:09.679
+He's a great developer in the Clojure community.
+
+00:15:09.680 --> 00:15:13.159
+He has done some LSP work in the Clojure world, too.
+
+00:15:13.160 --> 00:15:17.159
+What was the last name? What was Eric's last name?
+
+00:15:17.160 --> 00:15:23.919
+Eric Dallo, D-A-L-L-O. Yeah.
+
+00:15:23.920 --> 00:15:31.879
+So I think that's a great tool, but I also use another tool
+
+00:15:31.880 --> 00:15:38.919
+that for some reason I forgot to have this interactive way of,
+
+00:15:38.920 --> 00:15:43.599
+because I think they are developing that feature too,
+
+00:15:43.600 --> 00:15:46.439
+but I have another LLM that has support
+
+00:15:46.440 --> 00:15:50.599
+for requests and callbacks basically.
+
+00:15:50.600 --> 00:15:53.799
+So you can do something programmatically.
+
+00:15:53.800 --> 00:15:55.919
+So that's how I've solved my LLM thing
+
+00:15:55.920 --> 00:16:00.759
+where I select some Python variables
+
+00:16:00.760 --> 00:16:05.599
+and tell the LLM to populate it with some fake data
+
+00:16:05.600 --> 00:16:08.879
+so I can send that to the REPL.
+
+00:16:08.880 --> 00:16:11.479
+But for some reason, I forgot the name of it.
+
+00:16:11.480 --> 00:16:25.159
+I can look it up. Just give me one minute, sorry.
+
+00:16:25.160 --> 00:16:35.559
+oh yeah gptel gptel that's that's the name of the other tool
+
+00:16:35.560 --> 00:16:37.879
+which is uh also a good tool yeah
+
+00:16:37.880 --> 00:16:41.279
+but ECA is more like a more chat companion
+
+00:16:41.280 --> 00:16:46.679
+and this you can also you can tell it to write code and things like that
+
+00:16:46.680 --> 00:16:51.679
+but i mostly use it for reviews and research
+
+00:16:51.680 --> 00:16:54.599
+and like asking questions
+
+00:16:54.600 --> 00:17:00.279
+because i want to my I don't have a problem with typing code.
+
+00:17:00.280 --> 00:17:01.919
+I don't think that slows me down,
+
+00:17:01.920 --> 00:17:05.639
+but maybe getting some quick feedback
+
+00:17:05.640 --> 00:17:07.479
+on the actual work that I'm doing,
+
+00:17:07.480 --> 00:17:08.999
+that's what I'm using LLM for,
+
+00:17:09.000 --> 00:17:13.519
+on LLM for two, mostly today. That really hits for me.
+
+00:17:13.520 --> 00:17:15.199
+I don't mind typing either.
+
+00:17:15.200 --> 00:17:18.479
+I think somehow having things be so simple
+
+00:17:18.480 --> 00:17:20.879
+and in many cases just automated,
+
+00:17:20.880 --> 00:17:22.719
+Emacs just does the right thing.
+
+00:17:22.720 --> 00:17:26.519
+It makes me hungry to type. I want to type more.
+
+00:17:26.520 --> 00:17:28.559
+It feels like every keystroke does a little more.
+
+00:17:28.560 --> 00:17:33.519
+Speaking of evangelism, thank you. Thank you
+
+00:17:33.520 --> 00:17:35.599
+pop up for the for the question.
+
+00:17:35.600 --> 00:17:39.439
+I'm just going to peek one more time through
+
+00:17:39.440 --> 00:17:41.159
+and I don't see a backlog.
+
+00:17:41.160 --> 00:17:44.519
+There are a couple more comments here
+
+00:17:44.520 --> 00:17:49.319
+linking linking to the ECA Emacs and gptel.
+
+00:17:49.320 --> 00:17:52.239
+Comment also saying very cool setup.
+
+00:17:52.240 --> 00:17:56.959
+So I suppose I'll I'll hand it over to you
+
+00:17:56.960 --> 00:17:59.319
+if you have kind of final thoughts or.
+
+00:17:59.320 --> 00:18:02.079
+additional wisdoms you want to share
+
+00:18:02.080 --> 00:18:05.399
+I really appreciate your taking the time to prepare this presentation
+
+00:18:05.400 --> 00:18:11.079
+especially to do the live Q&A with us. Thank you
+
+00:18:11.080 --> 00:18:13.919
+and I haven't anything more than that I will
+
+00:18:13.920 --> 00:18:19.479
+of course I will continue like have evolving my setup
+
+00:18:19.480 --> 00:18:21.359
+because there's like new tools
+
+00:18:21.360 --> 00:18:24.759
+and maybe new ideas also coming up
+
+00:18:24.760 --> 00:18:28.719
+and my What I'm aiming for in Python development
+
+00:18:28.720 --> 00:18:30.479
+is the great developer experience
+
+00:18:30.480 --> 00:18:34.519
+of what's called Lisp programming, basically.
+
+00:18:34.520 --> 00:18:41.699
+So that's what I'm aiming at for Python 2.
+
+00:18:41.700 --> 00:18:44.359
+Thank you. Thank you so much.
diff --git a/2025/captions/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--main.vtt b/2025/captions/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--main.vtt
new file mode 100644
index 00000000..d63a36c8
--- /dev/null
+++ b/2025/captions/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--main.vtt
@@ -0,0 +1,731 @@
+WEBVTT captioned by sachac
+
+00:00:00.000 --> 00:00:04.439
+Okay, so welcome to this session about interactive Python
+
+00:00:04.440 --> 00:00:09.679
+programming. My name is David Vujic and I live and work in
+
+00:00:09.680 --> 00:00:15.319
+Stockholm, Sweden. a developer and today I focus
+
+00:00:15.320 --> 00:00:20.439
+mainly on Python software development. So I do this at work
+
+00:00:20.440 --> 00:00:25.999
+and I also do this on my spare time in my open source projects.
+
+00:00:26.000 --> 00:00:30.479
+Before that, I've been part of the Lisp community. I've
+
+00:00:30.480 --> 00:00:33.700
+been a Clojure developer, and also, like, way back,
+
+00:00:33.701 --> 00:00:40.279
+I was in the Microsoft world and developed C# and .NET stuff.
+
+00:00:40.280 --> 00:00:45.999
+What I've been doing lately is to try to improve the
+
+00:00:46.000 --> 00:00:52.399
+developer experience when you write Python code. So what I
+
+00:00:52.400 --> 00:00:56.159
+want to talk about is this, but also I want to begin with
+
+00:00:56.160 --> 00:01:00.839
+feedback loops because I think it's very related to this
+
+00:01:00.840 --> 00:01:05.359
+interactive programming style, like having this nice
+
+00:01:05.360 --> 00:01:07.067
+feedback when you write code.
+
+00:01:07.068 --> 00:01:10.533
+So I'm going to begin with that.
+
+NOTE Feedback loops
+
+00:01:10.534 --> 00:01:14.199
+So this image, you know, this circle is supposed to be a
+
+00:01:14.200 --> 00:01:19.879
+visualization of a feedback loop. Let's say we write our
+
+00:01:19.880 --> 00:01:25.239
+code and then we deploy it to production. Then when it's
+
+00:01:25.240 --> 00:01:29.639
+running there, we can check if things work, or if maybe someone
+
+00:01:29.640 --> 00:01:35.319
+else will let us know. Maybe our customers will let us know.
+
+00:01:35.320 --> 00:01:39.639
+That's a pretty slow feedback loop with potential risks of
+
+00:01:39.640 --> 00:01:41.867
+damaging your business or whatever.
+
+00:01:41.868 --> 00:01:44.167
+This is obvious, of course.
+
+00:01:44.168 --> 00:01:50.000
+So a faster feedback loop probably is to have
+
+00:01:50.001 --> 00:01:54.066
+some kind of automation when you do commits
+
+00:01:54.067 --> 00:01:59.733
+or maybe you have this pull request things and even reviews.
+
+00:01:59.734 --> 00:02:02.933
+So maybe not always as fast as deploy,
+
+00:02:02.934 --> 00:02:05.839
+don't deploy directly to production, but
+
+00:02:05.840 --> 00:02:10.539
+it's probably safer and often you get this automated
+
+00:02:10.540 --> 00:02:16.199
+feedback faster anyway. But it's still kind of slow. You
+
+00:02:16.200 --> 00:02:20.239
+have to wait. You have to push things to GitHub maybe and
+
+00:02:20.240 --> 00:02:24.279
+wait. So there's faster ways for sure to get feedback.
+
+00:02:24.280 --> 00:02:27.967
+So a much faster way is to write code,
+
+00:02:27.968 --> 00:02:31.367
+and write some unit tests, and run those unit tests.
+
+00:02:31.368 --> 00:02:33.467
+So then you do everything on your local machine
+
+00:02:33.468 --> 00:02:39.039
+and you will fairly quickly learn if your code does
+
+00:02:39.040 --> 00:02:47.159
+what you think it does or if it doesn't. I want to zoom in to
+
+00:02:47.160 --> 00:02:55.999
+this test write code and test flow a bit. Let's do that.
+
+NOTE Test-driven development
+
+00:02:56.000 --> 00:02:59.759
+As a developer, I have used a thing called test-driven
+
+00:02:59.760 --> 00:03:05.999
+development for quite some time. I find that this way of
+
+00:03:06.000 --> 00:03:11.259
+working is very fast when it comes to getting feedback on
+
+00:03:11.260 --> 00:03:14.519
+what your code does and how you should continue the
+
+00:03:14.520 --> 00:03:19.980
+development. So, test-driven development,
+
+00:03:19.981 --> 00:03:24.220
+basically that you start writing a test for
+
+00:03:24.221 --> 00:03:27.020
+something that you want to develop, and then you continue
+
+00:03:27.021 --> 00:03:31.019
+developing that, and then you go back to the test, and modify
+
+00:03:31.020 --> 00:03:35.079
+and modify the code, and you go back and forth between the
+
+00:03:35.080 --> 00:03:36.959
+tests and the code.
+
+00:03:36.960 --> 00:03:44.419
+It's sort of like a ping-pong game. I find this very
+
+00:03:44.420 --> 00:03:50.519
+effective when you want to get feedback and to know how to
+
+00:03:50.520 --> 00:03:57.233
+continue the development. The most important thing
+
+00:03:57.234 --> 00:04:01.700
+that I feel is that you know what the code does.
+
+00:04:01.701 --> 00:04:05.559
+You learn very quickly.
+
+NOTE REPL-driven development
+
+00:04:05.560 --> 00:04:12.199
+Let's zoom into this TDD flow a little bit. The last couple of
+
+00:04:12.200 --> 00:04:17.379
+years, I've been doing a slightly different thing which is
+
+00:04:17.380 --> 00:04:21.979
+called REPL-driven development. REPL-driven
+
+00:04:21.980 --> 00:04:25.719
+development is very similar to test-driven development,
+
+00:04:25.720 --> 00:04:31.159
+but I find it even quicker. You get feedback even quicker
+
+00:04:31.160 --> 00:04:34.979
+than with a regular TDD setup. So REPL-driven development
+
+00:04:34.980 --> 00:04:41.199
+is about writing and evaluating code in a REPL basically.
+
+00:04:41.200 --> 00:04:46.839
+And you can do experiments and you can refactor and
+
+00:04:46.840 --> 00:04:51.699
+re-evaluate and you get instant feedback on what the code
+
+00:04:51.700 --> 00:04:54.799
+does and what you need to change. So I think that's even
+
+00:04:54.800 --> 00:04:59.519
+faster than test-driven development.
+
+00:04:59.520 --> 00:05:02.899
+Okay, REPL driven development. Let's go back. What's the
+
+00:05:02.900 --> 00:05:10.759
+REPL? Most of developers know what a REPL is. The most common
+
+00:05:10.760 --> 00:05:16.399
+setup is you open this shell and you use the REPL for your
+
+00:05:16.400 --> 00:05:19.359
+programming language. In this case I'm using the Python
+
+00:05:19.360 --> 00:05:25.619
+REPL or the IPython REPL which is an enhanced REPL for Python
+
+00:05:25.620 --> 00:05:30.679
+development. So what happens here is that we start a REPL
+
+00:05:30.680 --> 00:05:34.919
+session in isolation. So this session knows about the
+
+00:05:34.920 --> 00:05:38.119
+Python environment. So it knows about the Python language
+
+00:05:38.120 --> 00:05:42.359
+basically. So as soon as we start writing things, adding
+
+00:05:42.360 --> 00:05:47.359
+variables or creating writing functions or even doing
+
+00:05:47.360 --> 00:05:51.679
+imports. Then the session will be more and more aware of the
+
+00:05:51.680 --> 00:05:55.819
+code so we will add things to the to the session and then that
+
+00:05:55.820 --> 00:06:00.519
+means that we can run functions we can print out these
+
+00:06:00.520 --> 00:06:05.859
+variables and things like that. But with REPL driven
+
+00:06:05.860 --> 00:06:09.839
+development it's not really that well at least not what I
+
+00:06:09.840 --> 00:06:14.039
+mean with REPL driven development. So what I'm thinking of
+
+00:06:14.040 --> 00:06:19.639
+is that you are in your code editor where you have your
+
+00:06:19.640 --> 00:06:22.799
+autocomplete, and you have your syntax highlighting and
+
+00:06:22.800 --> 00:06:30.459
+your favorite theme, color theme, and all of those things. But
+
+00:06:30.460 --> 00:06:34.979
+instead, you have this running REPL in the background or in a
+
+00:06:34.980 --> 00:06:41.139
+smaller window or buffer. So that means that you write code
+
+00:06:41.140 --> 00:06:45.319
+and you can send that code to the running REPL, to the REPL
+
+00:06:45.320 --> 00:06:50.399
+session. You write and do everything as you would do when
+
+00:06:50.400 --> 00:06:55.219
+writing your code basically. In this case, in this
+
+00:06:55.220 --> 00:07:00.599
+example, I have evaluated these two functions. I've sent
+
+00:07:00.600 --> 00:07:05.819
+them to the REPL session so it's aware of these functions.
+
+00:07:05.820 --> 00:07:10.399
+Then I switched to a separate different module and
+
+00:07:10.400 --> 00:07:14.039
+evaluated that one. So the REPL session now knows about
+
+00:07:14.040 --> 00:07:19.039
+these two functions and also these two variables. That
+
+00:07:19.040 --> 00:07:23.999
+means that I can evaluate the state of those variables and
+
+00:07:24.000 --> 00:07:28.999
+change code and re-evaluate and things like that. So in this
+
+00:07:29.000 --> 00:07:33.639
+example if you look in the smaller area there you see that I
+
+00:07:33.640 --> 00:07:39.639
+have evaluated this res variable on line 6 and the output was
+
+00:07:39.640 --> 00:07:42.399
+that it's a dictionary with two keys and two values
+
+00:07:42.400 --> 00:07:51.219
+basically. So this setup works in basically any of your
+
+00:07:51.220 --> 00:07:54.079
+favorite code editors. So you can do this in Visual Studio
+
+00:07:54.080 --> 00:08:01.239
+Code, you can do this in PyCharm or Vim. But what I have done is
+
+00:08:01.240 --> 00:08:07.119
+that... More like what I have missed is that when I write code
+
+00:08:07.120 --> 00:08:10.239
+and do this evaluation, this is really cool, but then I need
+
+00:08:10.240 --> 00:08:15.459
+to switch context if I want to see the result. I have to switch
+
+00:08:15.460 --> 00:08:21.979
+context to this other window. I
+
+00:08:21.980 --> 00:08:25.759
+have my focus on the code and then I have to look in a different
+
+00:08:25.760 --> 00:08:31.799
+place to know the results. And if it's a larger output, then
+
+00:08:31.800 --> 00:08:37.479
+maybe I need to scroll. So I wanted to find out if it was
+
+00:08:37.480 --> 00:08:43.479
+possible to make this even smoother and faster, this
+
+00:08:43.480 --> 00:08:45.479
+feedback loop even faster, so I don't have to switch
+
+00:08:45.480 --> 00:08:52.119
+context. What I've done here is that... I can select a row or a
+
+00:08:52.120 --> 00:08:58.079
+region and I can evaluate and then an overlay, a small pop-up
+
+00:08:58.080 --> 00:09:03.119
+shows up with the evaluated result right next to it. So I can
+
+00:09:03.120 --> 00:09:07.519
+change code and re-evaluate and quickly see the result of it
+
+00:09:07.520 --> 00:09:12.640
+without doing this context switching. So the way I've done
+
+00:09:12.641 --> 00:09:20.679
+it is that I wanted to reuse the existing tooling that I
+
+00:09:20.680 --> 00:09:27.739
+already had. I know that my in-editor REPL, the IPython
+
+00:09:27.740 --> 00:09:31.559
+REPL, already does this evaluation. So I figured maybe I can
+
+00:09:31.560 --> 00:09:35.359
+extract the data and do this visualization as a separate
+
+00:09:35.360 --> 00:09:40.839
+thing. That's how I've done it. What I've done is that
+
+00:09:40.840 --> 00:09:47.199
+I've created this overlay and placed it where my cursor
+
+00:09:47.200 --> 00:09:50.859
+currently is, right next to the code. Then I've
+
+00:09:50.860 --> 00:09:55.719
+extracted the evaluated result and put it in this overlay.
+
+00:09:55.720 --> 00:10:01.039
+I also want this overlay to have this nice looking syntax,
+
+00:10:01.040 --> 00:10:04.759
+so I've set it to this Python mode, so we get this syntax
+
+00:10:04.760 --> 00:10:10.559
+highlighting. Make it look very readable. And as a nice
+
+00:10:10.560 --> 00:10:16.879
+developer experience thing,
+
+00:10:16.880 --> 00:10:20.379
+when you move the cursor, of course you don't want the
+
+00:10:20.380 --> 00:10:25.679
+overlay to be there. You want it to disappear. So those kinds
+
+00:10:25.680 --> 00:10:28.999
+of things I've added. So putting the overlay at the right
+
+00:10:29.000 --> 00:10:33.279
+place and feed it with the evaluated data and then make it
+
+00:10:33.280 --> 00:10:39.839
+disappear when it's not interesting to look at anymore.
+
+00:10:39.840 --> 00:10:44.639
+What I've described so far is something that I use on a
+
+00:10:44.640 --> 00:10:50.639
+daily basis, and it covers most of my needs while doing Python
+
+00:10:50.640 --> 00:10:56.119
+development. But one thing I still miss, and I miss it from my
+
+00:10:56.120 --> 00:11:03.479
+days as a Clojure developer, because over there we could
+
+00:11:03.480 --> 00:11:07.919
+have a running app on our local machine and we can have our
+
+00:11:07.920 --> 00:11:12.719
+editor, and the app and the editor were connected. So when I
+
+00:11:12.720 --> 00:11:17.199
+did some changes in the code, the app would change without
+
+00:11:17.200 --> 00:11:20.559
+any restarts or anything like that. And the same if I would
+
+00:11:20.560 --> 00:11:24.679
+change the state of the app, I can inspect the state from the
+
+00:11:24.680 --> 00:11:28.919
+code. So they were connected. They are connected. So I was
+
+00:11:28.920 --> 00:11:32.839
+thinking, hey, this would be really cool if we could have
+
+00:11:32.840 --> 00:11:39.199
+something like this in Python. And that reminded me of
+
+00:11:39.200 --> 00:11:43.839
+Jupyter and Jupyter notebooks because I think notebooks,
+
+00:11:43.840 --> 00:11:49.659
+the way you do things there, is very similar to what I was
+
+00:11:49.660 --> 00:11:56.879
+trying to achieve. So I was reading up a little bit on how this
+
+00:11:56.880 --> 00:12:00.919
+notebook thing works. It turns out that a notebook is a
+
+00:12:00.920 --> 00:12:05.279
+client that talks to a server, that communicates with a
+
+00:12:05.280 --> 00:12:08.799
+server. It's on the server that all this Python
+
+00:12:08.800 --> 00:12:14.159
+evaluation and all this thing happens. Then what I've
+
+00:12:14.160 --> 00:12:19.659
+done is that instead of starting up IPython in my editor, I
+
+00:12:19.660 --> 00:12:23.519
+start the Jupyter console instead. And then I can give it
+
+00:12:23.520 --> 00:12:27.159
+that unique ID and it will be connected to that running
+
+00:12:27.160 --> 00:12:30.919
+kernel.
+
+NOTE FastAPI CRUD
+
+00:12:30.920 --> 00:12:37.199
+In this example, I've created this FastAPI CRUD app that
+
+00:12:37.200 --> 00:12:41.919
+has this create, read, update, and delete endpoints. It
+
+00:12:41.920 --> 00:12:46.399
+has this, it's locally running, it has this database where
+
+00:12:46.400 --> 00:12:51.639
+you can do all these things. I'm running this FastAPI app
+
+00:12:51.640 --> 00:12:58.059
+in the kernel and then I've connected to, I've connected to
+
+00:12:58.060 --> 00:13:03.239
+the kernel in my editor too. Both of them are connected to
+
+00:13:03.240 --> 00:13:09.719
+the kernel. What I do now is that I want to initially create
+
+00:13:09.720 --> 00:13:15.239
+some data. I'm going to add this, creating this message.
+
+00:13:15.240 --> 00:13:19.899
+What I get back is a message ID. I want to experiment in
+
+00:13:19.900 --> 00:13:24.359
+my browser. What do I get with that message ID? I'm
+
+00:13:24.360 --> 00:13:30.239
+evaluating the read function. I instantly get this
+
+00:13:30.240 --> 00:13:34.779
+evaluated result, which was this hello world text. So what
+
+00:13:34.780 --> 00:13:39.919
+happens if I do some changes in this app? I'm going to grab
+
+00:13:39.920 --> 00:13:49.659
+this message ID and write something else.
+
+00:13:49.660 --> 00:13:53.759
+Now I can evaluate the same thing again, and you can see that
+
+00:13:53.760 --> 00:14:02.399
+the content has changed to this new value. My editor isn't
+
+00:14:02.400 --> 00:14:07.719
+in any debug mode or something like that. It doesn't know
+
+00:14:07.720 --> 00:14:11.239
+what database it is. It doesn't have any environment
+
+00:14:11.240 --> 00:14:14.479
+variables set up or something like that. It is only
+
+00:14:14.480 --> 00:14:17.599
+connected to the kernel, and the kernel is aware of that. It's
+
+00:14:17.600 --> 00:14:20.479
+running the app. It has the connection strings and
+
+00:14:20.480 --> 00:14:28.799
+everything that is needed. So that's how this thing works.
+
+00:14:28.800 --> 00:14:34.199
+Now I want to do some inline hacking because I want to store
+
+00:14:34.200 --> 00:14:37.799
+this input that is sent from this app because I want to work
+
+00:14:37.800 --> 00:14:42.039
+with it afterwards. I can add this dictionary that stores
+
+00:14:42.040 --> 00:14:48.759
+this message. I'm updating the source code of this app, and
+
+00:14:48.760 --> 00:15:03.079
+when I run any of these endpoints again, you will see that
+
+00:15:03.080 --> 00:15:08.759
+the state changes, and the new inputs, I can grab and I can use
+
+00:15:08.760 --> 00:15:14.399
+them for quick evaluation or testing. This example is
+
+00:15:14.400 --> 00:15:18.519
+really simple. It was just an integer. For example, if you
+
+00:15:18.520 --> 00:15:23.519
+are sending a more complex object, maybe a pydantic schema
+
+00:15:23.520 --> 00:15:28.199
+or something, and you want to inspect what's coming in, and if
+
+00:15:28.200 --> 00:15:34.199
+you have some sort of validation that you want to test out.
+
+00:15:34.200 --> 00:15:38.399
+The configuration or the code that I wrote to make this work
+
+00:15:38.400 --> 00:15:44.159
+is a little bit different than just adding an overlay. I'm
+
+00:15:44.160 --> 00:15:50.999
+using this overlay just like with the IPython example, but in
+
+00:15:51.000 --> 00:15:57.839
+this case, when I change code, I have to think about where that
+
+00:15:57.840 --> 00:16:02.159
+code lives, because it's the app that runs the code. So it's
+
+00:16:02.160 --> 00:16:07.039
+in the app context I need to manipulate with the data. If you
+
+00:16:07.040 --> 00:16:11.919
+have started the app from maybe a main function and that
+
+00:16:11.920 --> 00:16:17.879
+module imports namespaces, then you need to, if you want to
+
+00:16:17.880 --> 00:16:22.359
+update a function or something like that, you need to update
+
+00:16:22.360 --> 00:16:26.679
+it in the correct namespace. What I did before in IPython
+
+00:16:26.680 --> 00:16:29.919
+by adding and changing things, everything ends up in the
+
+00:16:29.920 --> 00:16:34.439
+global namespace. But here, if you want the app to actually
+
+00:16:34.440 --> 00:16:38.479
+react to the changes, you need to put it in the right
+
+00:16:38.480 --> 00:16:43.479
+namespace. So that's what I do here. I do some lookups, where
+
+00:16:43.480 --> 00:16:49.139
+is this function, and then I do this reload of this function or
+
+00:16:49.140 --> 00:16:54.799
+module. And when I was developing this, I was thinking, hey,
+
+00:16:54.800 --> 00:16:59.319
+this is really ugly. I'm in this REPL and do some
+
+00:16:59.320 --> 00:17:03.559
+manipulation of the imports and things like that. That
+
+00:17:03.560 --> 00:17:09.759
+didn't feel good. Then I was reminded of the IPython. And
+
+00:17:09.760 --> 00:17:15.519
+IPython has this feature to reload any updated
+
+00:17:15.520 --> 00:17:19.119
+submodules. I was curious how do they do it. I looked in the
+
+00:17:19.120 --> 00:17:24.079
+IPython source code and saw that they also use importlib and
+
+00:17:24.080 --> 00:17:28.359
+reloading of this module. Once I've learned that, then I
+
+00:17:28.360 --> 00:17:32.599
+stopped thinking that my code was hacky. I thought it was
+
+00:17:32.600 --> 00:17:37.159
+good enough at least.
+
+NOTE Testing with an LLM
+
+00:17:37.160 --> 00:17:45.059
+But one thing that has bothered me for a long time is I quite
+
+00:17:45.060 --> 00:17:50.199
+often want to test out and evaluate individual rows that
+
+00:17:50.200 --> 00:17:58.559
+lives in a function. Quite often, this code uses the input
+
+00:17:58.560 --> 00:18:02.639
+to that function like the input parameters. To be able to
+
+00:18:02.640 --> 00:18:07.719
+do that, I need to manually type some fake data and set it to
+
+00:18:07.720 --> 00:18:12.279
+this variable, and then I can evaluate the code. But I think
+
+00:18:12.280 --> 00:18:17.779
+that takes... That slows me down. I was thinking, maybe I can
+
+00:18:17.780 --> 00:18:23.439
+do this in a quicker way, so I have this quicker feedback, so I
+
+00:18:23.440 --> 00:18:27.933
+can run this or evaluate this code much quicker.
+
+00:18:27.934 --> 00:18:29.439
+So my idea was maybe I
+
+00:18:29.440 --> 00:18:35.239
+can use an LLM for this. If I give it the parameters, maybe it
+
+00:18:35.240 --> 00:18:41.119
+can return some random data so I don't have to write it
+
+00:18:41.120 --> 00:18:44.119
+myself. I ended up doing that. I have this source code.
+
+00:18:44.120 --> 00:18:50.399
+I'm loading the REPL with the code. Then I select this
+
+00:18:50.400 --> 00:18:56.719
+function name and the parameters with its data type. I
+
+00:18:56.720 --> 00:19:02.839
+have this prompt that instructs the LLM to come up with fake
+
+00:19:02.840 --> 00:19:06.239
+data based on the tag name and on the data type. And then I can
+
+00:19:06.240 --> 00:19:10.099
+send that to the REPL. I do that with a key command. Then
+
+00:19:10.100 --> 00:19:16.019
+I can proceed by running the code within the function that
+
+00:19:16.020 --> 00:19:21.719
+uses these inputs. This works for all the data types. If
+
+00:19:21.720 --> 00:19:26.279
+there's a custom data type, you need to give the LLM extra
+
+00:19:26.280 --> 00:19:30.399
+context. So that's something to think about. Once it knows
+
+00:19:30.400 --> 00:19:35.679
+the context, it can generate this fake data that very often is
+
+00:19:35.680 --> 00:19:39.839
+good enough just to test out, you know, like I've done here, like
+
+00:19:39.840 --> 00:19:45.399
+string... sorry, list destructuring and parsing and things
+
+00:19:45.400 --> 00:19:51.879
+like that. I think that was all I had, and thank you for
+
+00:19:51.880 --> 00:19:52.920
+listening!
diff --git a/2025/captions/emacsconf-2025-reader--an-introduction-to-the-emacs-reader--divy--answers.vtt b/2025/captions/emacsconf-2025-reader--an-introduction-to-the-emacs-reader--divy--answers.vtt
new file mode 100644
index 00000000..b9dae5b5
--- /dev/null
+++ b/2025/captions/emacsconf-2025-reader--an-introduction-to-the-emacs-reader--divy--answers.vtt
@@ -0,0 +1,1081 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:01.479
+The first question,
+
+00:00:01.480 --> 00:00:03.599
+and I'm reading from the etherpad here,
+
+00:00:03.600 --> 00:00:05.519
+is there a scope for integrating
+
+00:00:05.520 --> 00:00:07.839
+the C library to Emacs itself
+
+00:00:07.840 --> 00:00:13.159
+with MuPDF becoming an optional dependency?
+
+00:00:13.160 --> 00:00:18.719
+Right, so integrating the C library into Emacs itself
+
+00:00:18.720 --> 00:00:24.359
+is like having MuPDF inside Emacs source tree.
+
+00:00:24.360 --> 00:00:27.999
+I don't think Emacs devs would be inclined to do that,
+
+00:00:28.000 --> 00:00:30.079
+and I don't think we really need it.
+
+00:00:30.080 --> 00:00:33.039
+Um, I think as it is, uh, Emacs
+
+00:00:33.040 --> 00:00:36.439
+with doc view needs new tool, which is something you need
+
+00:00:36.440 --> 00:00:38.919
+to install from new PDF anyways.
+
+00:00:38.920 --> 00:00:42.599
+So, um, I think it is almost expected
+
+00:00:42.600 --> 00:00:46.279
+that you install new PDF from system package manager.
+
+00:00:46.280 --> 00:00:49.119
+Um, and I think that as it is, is better
+
+00:00:49.120 --> 00:00:50.999
+because we don't really need to have
+
+00:00:51.000 --> 00:00:53.439
+a whole PDF engine inside Emacs.
+
+00:00:53.440 --> 00:00:59.879
+Um, Next question also from the pad,
+
+00:00:59.880 --> 00:01:01.759
+the dynamic module some great,
+
+00:01:01.760 --> 00:01:06.639
+and it's amazing that they've been there since 2017.
+
+00:01:06.640 --> 00:01:09.839
+Why do you think they've been slowly
+
+00:01:09.840 --> 00:01:11.559
+so slow to get adopted?
+
+00:01:11.560 --> 00:01:14.279
+Is there a prior art with them? Right?
+
+00:01:14.280 --> 00:01:16.359
+That's a good question.
+
+00:01:16.360 --> 00:01:22.119
+Actually, I think 1 of the reasons is that.
+
+00:01:22.120 --> 00:01:24.919
+Most of the time, I think people love Emacs
+
+00:01:24.920 --> 00:01:27.519
+because they can do so much with Elisp.
+
+00:01:27.520 --> 00:01:28.919
+I think certainly there is a bias
+
+00:01:28.920 --> 00:01:31.319
+towards trying to do things with Elisp.
+
+00:01:31.320 --> 00:01:35.039
+I think there's only a sort of specific class of problems
+
+00:01:35.040 --> 00:01:36.879
+that you can solve with dynamic modules,
+
+00:01:36.880 --> 00:01:40.879
+such as this, where you want to use a native library
+
+00:01:40.880 --> 00:01:44.239
+to do something in a faster, better way.
+
+00:01:44.240 --> 00:01:48.959
+I use that quite a lot.
+
+00:01:48.960 --> 00:01:53.319
+There's of course libvterm, which uses a dynamic module
+
+00:01:53.320 --> 00:01:55.119
+and it does it really well.
+
+00:01:55.120 --> 00:02:00.439
+And I think there's another one, a plotting library
+
+00:02:00.440 --> 00:02:05.879
+or package in Emacs that was using something from Python.
+
+00:02:05.880 --> 00:02:07.879
+So, dynamic modules are good,
+
+00:02:07.880 --> 00:02:10.039
+but I think they don't really come
+
+00:02:10.040 --> 00:02:13.974
+to the surface level packages, your day-to-day packages,
+
+00:02:13.975 --> 00:02:17.359
+because most of the day-to-day packages that we use in Emacs
+
+00:02:17.360 --> 00:02:20.879
+can be done with Elisp. So, unless you really need
+
+00:02:20.880 --> 00:02:23.199
+something system-level efficient,
+
+00:02:23.200 --> 00:02:29.519
+Most of the time, you don't want to write C or C++ or something.
+
+00:02:29.520 --> 00:02:34.919
+But there is actually a really nice Rust crate for native modules,
+
+00:02:34.920 --> 00:02:37.239
+and there's a really nice Haskell package.
+
+00:02:37.240 --> 00:02:39.879
+So there's actually really good support
+
+00:02:39.880 --> 00:02:41.279
+for multiple languages.
+
+00:02:41.280 --> 00:02:45.799
+So it's there, it's just not used as much. Yeah.
+
+00:02:45.800 --> 00:02:47.039
+So what you're saying is
+
+00:02:47.040 --> 00:02:51.279
+if Elisp weren't so simple to learn and easy to use
+
+00:02:51.280 --> 00:02:52.879
+and so fully featured,
+
+00:02:52.880 --> 00:02:54.959
+we'd get a lot more mileage
+
+00:02:54.960 --> 00:02:57.799
+out of this super cool dynamic module feature.
+
+00:02:57.800 --> 00:03:02.159
+Yeah. Cool I'll take I'll bring in the next question.
+
+00:03:02.160 --> 00:03:07.399
+How how? How difficult is our PDF tools to install?
+
+00:03:07.400 --> 00:03:10.439
+The questioner is installing it
+
+00:03:10.440 --> 00:03:12.519
+using the built-in package manager
+
+00:03:12.520 --> 00:03:16.679
+looking at the Emacs reader installation instructions
+
+00:03:16.680 --> 00:03:18.479
+It doesn't necessarily cover
+
+00:03:18.480 --> 00:03:20.399
+how how to install that easily
+
+00:03:20.400 --> 00:03:25.679
+person is not using use package or straight and Okay.
+
+00:03:25.680 --> 00:03:27.959
+Oh, and they say that you didn't
+
+00:03:27.960 --> 00:03:32.439
+catch much of this in the presentation.
+
+00:03:32.440 --> 00:03:35.079
+Okay, so you want me to skip that or should I answer?
+
+00:03:35.080 --> 00:03:38.159
+It's your choice. If you would like to say more.
+
+00:03:38.160 --> 00:03:40.519
+Yeah, I think just as a thing,
+
+00:03:40.520 --> 00:03:43.319
+the reason I said PDF tools is difficult
+
+00:03:43.320 --> 00:03:45.839
+is PDF tools has a huge list of dependencies.
+
+00:03:45.840 --> 00:03:47.639
+The only thing Emacs Vita depends
+
+00:03:47.640 --> 00:03:50.599
+on is new PDF, nothing else. There's a single dependency.
+
+00:03:50.600 --> 00:03:54.479
+PDF tools depends on a lot of things
+
+00:03:54.480 --> 00:03:57.759
+and they have their own server,
+
+00:03:57.760 --> 00:04:00.039
+which is packaged as a system package,
+
+00:04:00.040 --> 00:04:02.359
+which you don't really find everywhere.
+
+00:04:02.360 --> 00:04:05.039
+And there's like systems, the new Linux systems
+
+00:04:05.040 --> 00:04:07.359
+where the package is very difficult to build
+
+00:04:07.360 --> 00:04:10.079
+because of so many dependencies.
+
+00:04:10.080 --> 00:04:13.159
+So my goal was to sort of reduce
+
+00:04:13.160 --> 00:04:14.839
+the number of dependencies.
+
+00:04:14.840 --> 00:04:19.559
+And then right now it's very, it's sort of a key
+
+00:04:19.560 --> 00:04:21.119
+to install Emacs Reader.
+
+00:04:21.120 --> 00:04:23.319
+Once we go to GNU Elpa, it's just
+
+00:04:23.320 --> 00:04:25.999
+going to be Emacs package install, just that.
+
+00:04:26.000 --> 00:04:27.919
+Right now you have to do package VC
+
+00:04:27.920 --> 00:04:32.359
+a bit. Boy, we get spoiled as
+
+00:04:32.360 --> 00:04:35.359
+Emacs users. Everything just gets so easy
+
+00:04:35.360 --> 00:04:37.959
+for us. It's like an IDE for our
+
+00:04:37.960 --> 00:04:44.839
+whole machine. What tools did you use to measure the
+
+00:04:44.840 --> 00:04:48.879
+memory usage between the three packages?
+
+00:04:48.880 --> 00:04:50.119
+Yeah, that's a good question.
+
+00:04:50.120 --> 00:04:54.799
+So during my development, I used mostly for debugging
+
+00:04:54.800 --> 00:05:00.119
+purposes Valgrind. So Valgrind is a a set of suite
+
+00:05:00.120 --> 00:05:01.559
+of debugging tools.
+
+00:05:01.560 --> 00:05:03.799
+And one of the tools that it has is Massive.
+
+00:05:03.800 --> 00:05:08.919
+It's a heap analyzer, heap profiler.
+
+00:05:08.920 --> 00:05:10.839
+So Valgrind plus Massive,
+
+00:05:10.840 --> 00:05:14.119
+and then there's a KDE package
+
+00:05:14.120 --> 00:05:15.759
+called Massive Visualizer.
+
+00:05:15.760 --> 00:05:19.839
+So I first get the Massive output using Valgrind,
+
+00:05:19.840 --> 00:05:23.159
+and then put that output into Massive Visualizer.
+
+00:05:23.160 --> 00:05:24.519
+That gives me the grasp.
+
+00:05:24.520 --> 00:05:28.599
+Are there Emacs integrations for those components at all?
+
+00:05:28.600 --> 00:05:30.279
+Does Valgrind have them?
+
+00:05:30.280 --> 00:05:32.399
+I don't think so. I don't think so.
+
+00:05:32.400 --> 00:05:37.319
+There's, yeah, there's I think a few packages
+
+00:05:37.320 --> 00:05:38.879
+which do something with Massive,
+
+00:05:38.880 --> 00:05:42.159
+but I don't think like they're maintained.
+
+00:05:42.160 --> 00:05:47.759
+Yeah. Gotcha. Cool. Awesome opportunity
+
+00:05:47.760 --> 00:05:49.399
+there for someone spunky.
+
+00:05:49.400 --> 00:05:55.399
+How is conversion between Elisp and foreign language types?
+
+00:05:55.400 --> 00:05:59.039
+For example, when interfacing with the C++ library
+
+00:05:59.040 --> 00:06:03.439
+that makes heavy use of the C++ object system and templates.
+
+00:06:03.440 --> 00:06:05.879
+Yeah, that's a good question.
+
+00:06:05.880 --> 00:06:10.519
+So the go-to answer is the blog post that I wrote,
+
+00:06:10.520 --> 00:06:12.199
+which is an extensive explanation
+
+00:06:12.200 --> 00:06:14.679
+on how the internals of dynamic modules work.
+
+00:06:14.680 --> 00:06:21.119
+The short answer is that basically what happens
+
+00:06:21.120 --> 00:06:24.639
+is anything that is compatible with C-ABI
+
+00:06:24.640 --> 00:06:27.759
+When you compile that language code,
+
+00:06:27.760 --> 00:06:33.559
+so when I compile C++ code, I would have a particular API.
+
+00:06:33.560 --> 00:06:35.799
+So we have a dynamic module API,
+
+00:06:35.800 --> 00:06:39.119
+which is the emacs-module.h, the file that I showed.
+
+00:06:39.120 --> 00:06:45.799
+You have to put that into your C++ package program
+
+00:06:45.800 --> 00:06:48.679
+and then link it to...
+
+00:06:48.680 --> 00:06:51.119
+So emacs-module.h is basically going to...
+
+00:06:51.120 --> 00:06:56.799
+like use things in your Emacs installation
+
+00:06:56.800 --> 00:07:04.359
+to interact with this C++ language. So it's basically FFI.
+
+00:07:04.360 --> 00:07:10.959
+And what this gives you is that you can have things in C++.
+
+00:07:10.960 --> 00:07:13.119
+So let's say you want to do multi-threading
+
+00:07:13.120 --> 00:07:15.279
+the way I did system level multi-threading.
+
+00:07:15.280 --> 00:07:20.519
+You can have C++ be responsible for the multi-threading.
+
+00:07:20.520 --> 00:07:22.999
+but you want the output
+
+00:07:23.000 --> 00:07:24.879
+of the multithreading to go into Emacs.
+
+00:07:24.880 --> 00:07:29.039
+So then you write like a piece of C++ function,
+
+00:07:29.040 --> 00:07:31.879
+which is going to be a dynamic module function.
+
+00:07:31.880 --> 00:07:32.919
+A dynamic module function
+
+00:07:32.920 --> 00:07:34.959
+is written in the language that you target,
+
+00:07:34.960 --> 00:07:37.359
+that is C++ or C or Rust.
+
+00:07:37.360 --> 00:07:40.759
+And then that is going to be compiled
+
+00:07:40.760 --> 00:07:43.279
+into a share library like SO.
+
+00:07:43.280 --> 00:07:46.439
+shared object, and then that shared object
+
+00:07:46.440 --> 00:07:50.639
+is going to be loaded into Emacs system using require.
+
+00:07:50.640 --> 00:07:53.119
+So when I do require render core
+
+00:07:53.120 --> 00:07:54.799
+in one of the slides that I showed,
+
+00:07:54.800 --> 00:07:58.439
+I'm basically loading that shared object,
+
+00:07:58.440 --> 00:08:00.516
+and that shared object already has
+
+00:08:00.517 --> 00:08:03.891
+the compiled dynamic module functions and so on.
+
+00:08:03.892 --> 00:08:06.308
+But my blog will explain that better.
+
+00:08:06.309 --> 00:08:10.016
+Gotcha. I thought that was pretty clear.
+
+00:08:10.017 --> 00:08:12.016
+I'm looking forward to seeing that blog post
+
+00:08:12.017 --> 00:08:13.641
+and understanding what I glossed over
+
+00:08:13.642 --> 00:08:15.860
+trying to understand from that explanation.
+
+00:08:15.861 --> 00:08:18.420
+That was great.
+
+00:08:18.421 --> 00:08:22.879
+Can one look at PDF metadata with Emacs Reader?
+
+00:08:22.880 --> 00:08:26.199
+Can you do annotations? Does it understand forms?
+
+00:08:26.200 --> 00:08:29.959
+Can it handle encrypted PDFs?
+
+00:08:29.960 --> 00:08:33.159
+In other words, I think reading between the lines,
+
+00:08:33.160 --> 00:08:34.279
+wow, this is awesome.
+
+00:08:34.280 --> 00:08:39.199
+Is there anything I can't do? You're right.
+
+00:08:39.200 --> 00:08:44.119
+So Emacs Reader will be able to do all of those things.
+
+00:08:44.120 --> 00:08:48.359
+It can do annotations. It will be able to do forms.
+
+00:08:48.360 --> 00:08:52.279
+And we have an issue open for interpret PDFs.
+
+00:08:52.280 --> 00:08:54.839
+The thing is, right now we are struggling with
+
+00:08:54.840 --> 00:08:58.759
+making Emacs Reader be very efficient
+
+00:08:58.760 --> 00:09:02.679
+in terms of highlighting and text selection
+
+00:09:02.680 --> 00:09:05.519
+because of the challenges that I mentioned in the slides,
+
+00:09:05.520 --> 00:09:07.959
+so it will be able to do all that.
+
+00:09:07.960 --> 00:09:10.959
+Once we tackle the basic features
+
+00:09:10.960 --> 00:09:18.599
+down in an efficient manner. Gotcha. Um.
+
+00:09:18.600 --> 00:09:24.119
+Comment or questioner says,
+
+00:09:24.120 --> 00:09:28.799
+I installed Emacs Reader already as promised. Great job.
+
+00:09:28.800 --> 00:09:34.879
+How can I associate ODT files to open with Emacs Reader?
+
+00:09:34.880 --> 00:09:38.479
+You don't really need to do anything.
+
+00:09:38.480 --> 00:09:40.599
+You should be just able to do find file,
+
+00:09:40.600 --> 00:09:42.959
+Control X, Control F, and open.
+
+00:09:42.960 --> 00:09:45.319
+And it should open with Emacs Reader
+
+00:09:45.320 --> 00:09:47.759
+because we have an auto mode list,
+
+00:09:47.760 --> 00:09:51.679
+a list that takes an ODT file
+
+00:09:51.680 --> 00:09:53.199
+and opens it with reader mode.
+
+00:09:53.200 --> 00:09:55.639
+So you should just be able to do find file.
+
+00:09:55.640 --> 00:09:56.879
+If you're not able to do that,
+
+00:09:56.880 --> 00:09:58.199
+you should open Embug report.
+
+00:09:58.200 --> 00:10:00.759
+And I'll just mention
+
+00:10:00.760 --> 00:10:03.239
+we've got about 10 minutes left of our live Q&A,
+
+00:10:03.240 --> 00:10:06.079
+but if you're watching the stream,
+
+00:10:06.080 --> 00:10:08.439
+it's possible that we'll just keep going.
+
+00:10:08.440 --> 00:10:10.799
+The questions just keep coming, which I just love that.
+
+00:10:10.800 --> 00:10:14.519
+So feel free to join the BBB link
+
+00:10:14.520 --> 00:10:17.439
+that should have shown in the IRC chat.
+
+00:10:17.440 --> 00:10:21.559
+Jump in and we can take questions
+
+00:10:21.560 --> 00:10:25.999
+as long as Divya has steam for that.
+
+00:10:26.000 --> 00:10:30.439
+If a PDF file is open in Emacs Reader
+
+00:10:30.440 --> 00:10:33.199
+and I reintegrate the PDF with some changes,
+
+00:10:33.200 --> 00:10:36.519
+does the Emacs Reader refresh the PDF on its own
+
+00:10:36.520 --> 00:10:38.919
+or do I reload it?
+
+00:10:38.920 --> 00:10:41.319
+Right, that's also a really good question.
+
+00:10:41.320 --> 00:10:44.599
+So one answer is that it depends on
+
+00:10:44.600 --> 00:10:46.079
+how you change the PDF.
+
+00:10:46.080 --> 00:10:50.839
+So for example, if I just replaced the PDF
+
+00:10:50.840 --> 00:10:52.639
+with something else of the same name,
+
+00:10:52.640 --> 00:10:55.799
+Emacs will update it immediately.
+
+00:10:55.800 --> 00:10:57.919
+If you have auto revert mode on,
+
+00:10:57.920 --> 00:10:59.119
+it'll just revert the buffer
+
+00:10:59.120 --> 00:11:01.879
+and it'll reload the PDF really nicely.
+
+00:11:01.880 --> 00:11:05.439
+But if you're doing it something like LaTeX,
+
+00:11:05.440 --> 00:11:07.399
+where you're writing something in LaTeX
+
+00:11:07.400 --> 00:11:10.519
+and LaTeX is continuously producing the PDF,
+
+00:11:10.520 --> 00:11:13.279
+that needs SyncTeX integration.
+
+00:11:13.280 --> 00:11:16.159
+Because LaTeX, while it's producing the PDF,
+
+00:11:16.160 --> 00:11:19.159
+it does a lot of funky things.
+
+00:11:19.160 --> 00:11:24.519
+It does not provide a sort of renderable PDF all the time.
+
+00:11:24.520 --> 00:11:28.679
+So Emacs will sort of crash trying to
+
+00:11:28.680 --> 00:11:31.679
+basically render a PDF that is not ready yet.
+
+00:11:31.680 --> 00:11:34.799
+So we need SyncTex to sync
+
+00:11:34.800 --> 00:11:37.279
+with LaTeX to do that really nice.
+
+00:11:37.280 --> 00:11:39.559
+Okay, so we have to do some care
+
+00:11:39.560 --> 00:11:41.319
+and feeding of the exact timing
+
+00:11:41.320 --> 00:11:46.879
+if we have more of a continuous behind the curtains, so to speak.
+
+00:11:46.880 --> 00:11:50.959
+That makes a lot of sense to me. What are the challenges
+
+00:11:50.960 --> 00:11:55.719
+with integrating synctex and AucTex?
+
+00:11:55.720 --> 00:11:58.919
+This would be great to see as PDF handles as well,
+
+00:11:58.920 --> 00:12:02.319
+or PDF tools handles as well. Yeah, yeah.
+
+00:12:02.320 --> 00:12:04.399
+So, we have Synctex and Auctex planned.
+
+00:12:04.400 --> 00:12:06.839
+I don't really see any major obstacles
+
+00:12:06.840 --> 00:12:08.679
+for doing that, to be very honest.
+
+00:12:08.680 --> 00:12:11.519
+I think we can do it in a much simpler way
+
+00:12:11.520 --> 00:12:12.479
+than PDF Tools does.
+
+00:12:12.480 --> 00:12:17.479
+The only reason we haven't done it yet is because, again,
+
+00:12:17.480 --> 00:12:20.479
+we have more important highlighting
+
+00:12:20.480 --> 00:12:24.399
+and text selection and those features planned,
+
+00:12:24.400 --> 00:12:32.919
+but it's anticipated. Yeah. All right. This next question
+
+00:12:32.920 --> 00:12:36.439
+I love your presentation. Will you be giving another talk
+
+00:12:36.440 --> 00:12:39.399
+on the architecture you went over a deep dive on?
+
+00:12:39.400 --> 00:12:44.919
+That would be awesome. I'm not sure if an EmacsConf talk
+
+00:12:44.920 --> 00:12:48.479
+will be appropriate for this, but I do stream bi-weekly.
+
+00:12:48.480 --> 00:12:52.599
+So you're always welcome to come on my stream and ask,
+
+00:12:52.600 --> 00:12:55.359
+and I would be very happy to go deep into this.
+
+00:12:55.360 --> 00:12:58.119
+I'm looking forward to catching that myself.
+
+00:12:58.120 --> 00:13:02.639
+Thank you for the shout. Is there search functionality,
+
+00:13:02.640 --> 00:13:05.319
+something like isearch and occur?
+
+00:13:05.320 --> 00:13:07.599
+Yeah, we don't really have it,
+
+00:13:07.600 --> 00:13:09.599
+but this is the most immediate feature
+
+00:13:09.600 --> 00:13:10.959
+after we have text selection.
+
+00:13:10.960 --> 00:13:12.399
+So once we have text selection,
+
+00:13:12.400 --> 00:13:14.359
+once we're able to select the text,
+
+00:13:14.360 --> 00:13:17.679
+then we can have iSearch so that it can highlight the text.
+
+00:13:17.680 --> 00:13:26.679
+Yeah. Um, all right. And then, um, there's, I'm just gonna,
+
+00:13:26.680 --> 00:13:28.799
+I'll read out this question
+
+00:13:28.800 --> 00:13:30.639
+and then I have to do a little bookkeeping on the pad.
+
+00:13:30.640 --> 00:13:35.639
+Um, does the dynamic module, uh, prevent customization
+
+00:13:35.640 --> 00:13:39.999
+that Emacs usually provides advice, hooks, et cetera,
+
+00:13:40.000 --> 00:13:44.359
+or does everything just kind of
+
+00:13:44.360 --> 00:13:46.559
+No, if you have a dynamic module,
+
+00:13:46.560 --> 00:13:49.279
+it doesn't limit you into doing anything.
+
+00:13:49.280 --> 00:13:52.839
+You can do everything on the Elisp side that you want,
+
+00:13:52.840 --> 00:13:55.719
+and you only take care of certain things
+
+00:13:55.720 --> 00:13:56.879
+on the dynamic module side.
+
+00:13:56.880 --> 00:13:57.999
+If you're asking whether
+
+00:13:58.000 --> 00:14:01.879
+you can do advices, hooks, and all of that
+
+00:14:01.880 --> 00:14:03.879
+on the dynamic module itself,
+
+00:14:03.880 --> 00:14:05.679
+from the dynamic module itself,
+
+00:14:05.680 --> 00:14:09.719
+that's a bit tricky because something like
+
+00:14:09.720 --> 00:14:13.999
+Calling a macro or doing macros and dynamic modules
+
+00:14:14.000 --> 00:14:18.119
+is not really that nice You have to pretty much manually
+
+00:14:18.120 --> 00:14:21.359
+expand the macro yourself in the dynamic module
+
+00:14:21.360 --> 00:14:23.839
+so if you want to do it from the dynamic module,
+
+00:14:23.840 --> 00:14:25.959
+there's not much support right now,
+
+00:14:25.960 --> 00:14:29.479
+but you can do everything on the elisp side
+
+00:14:29.480 --> 00:14:33.399
+without touching the dynamic module. Got it
+
+00:14:33.400 --> 00:14:38.279
+So those are the questions that I see.
+
+00:14:38.280 --> 00:14:39.999
+I'm just going to take a quick peek,
+
+00:14:40.000 --> 00:14:42.639
+but let me invite you if you want to.
+
+00:14:42.640 --> 00:14:45.999
+We've got just about 5 minutes left
+
+00:14:46.000 --> 00:14:48.239
+and I will get carried away sometimes
+
+00:14:48.240 --> 00:14:51.279
+and fail to make this invitation before we cut away live,
+
+00:14:51.280 --> 00:14:54.479
+especially if we do keep going a bit.
+
+00:14:54.480 --> 00:14:57.799
+that you have live onto the stream.
+
+00:14:57.800 --> 00:15:02.599
+Of course, you don't have to do that.
+
+00:15:02.600 --> 00:15:05.799
+You said a lot in your presentation.
+
+00:15:05.800 --> 00:15:12.199
+No, I think mostly that's fine.
+
+00:15:12.200 --> 00:15:13.679
+I'm just really happy
+
+00:15:13.680 --> 00:15:17.079
+that people are interested in the package,
+
+00:15:17.080 --> 00:15:19.879
+and I would be glad to have contributors
+
+00:15:19.880 --> 00:15:25.199
+and viewers or anything. That would be nice. Awesome.
+
+00:15:25.200 --> 00:15:28.879
+So here comes one more question,
+
+00:15:28.880 --> 00:15:31.959
+or actually a couple more questions coming in.
+
+00:15:31.960 --> 00:15:34.239
+Following up on dynamic modules,
+
+00:15:34.240 --> 00:15:38.479
+do you usually create an Elisp shim
+
+00:15:38.480 --> 00:15:40.399
+from foreign function interface
+
+00:15:40.400 --> 00:15:41.559
+and then use them with Elisp?
+
+00:15:41.560 --> 00:15:46.159
+Yeah, so basically how you do is you write,
+
+00:15:46.160 --> 00:15:49.639
+let's say I have a C function
+
+00:15:49.640 --> 00:15:51.399
+that I've written in the dynamic module.
+
+00:15:51.400 --> 00:15:52.879
+It's a dynamic module function.
+
+00:15:52.880 --> 00:15:54.639
+And then when I'm trying to call
+
+00:15:54.640 --> 00:15:56.039
+the dynamic module function,
+
+00:15:56.040 --> 00:15:58.999
+most of the time, I don't call it like that.
+
+00:15:59.000 --> 00:16:01.679
+I wrap it inside a proper Elisp function
+
+00:16:01.680 --> 00:16:03.559
+and then call that Elisp function.
+
+00:16:03.560 --> 00:16:08.279
+So that's how I think it's better to do that because
+
+00:16:08.280 --> 00:16:12.559
+You can take care of certain cases
+
+00:16:12.560 --> 00:16:15.199
+on when you want the dynamic module function to be called.
+
+00:16:15.200 --> 00:16:17.199
+Maybe sometimes you don't want
+
+00:16:17.200 --> 00:16:18.839
+the dynamic module function
+
+00:16:18.840 --> 00:16:19.879
+to be called immediately.
+
+00:16:19.880 --> 00:16:22.159
+So it's better to wrap it.
+
+00:16:22.160 --> 00:16:26.599
+Yeah. Okay. So timing issues. Yeah.
+
+00:16:26.600 --> 00:16:31.679
+For the purposes of managing timing issues,
+
+00:16:31.680 --> 00:16:34.319
+that elisp shim is preferred.
+
+00:16:34.320 --> 00:16:38.959
+Yeah. Makes sense. Um.
+
+00:16:38.960 --> 00:16:44.639
+Uh, so question question here
+
+00:16:44.640 --> 00:16:47.439
+is searching for the person is searching for a roadmap.
+
+00:16:47.440 --> 00:16:49.279
+Is that already available as a feature?
+
+00:16:49.280 --> 00:16:52.239
+Searching is on the roadmap.
+
+00:16:52.240 --> 00:16:56.559
+It is not available yet as a feature, but it's on priority.
+
+00:16:56.560 --> 00:16:59.839
+I think you may have may have touched on that.
+
+00:16:59.840 --> 00:17:06.559
+Sorry. All right. Those are the questions that I see.
+
+00:17:06.560 --> 00:17:08.279
+We've got just a couple of minutes.
+
+00:17:08.280 --> 00:17:10.399
+I'm not sure if you have more you wanted to say,
+
+00:17:10.400 --> 00:17:13.719
+but I have to say how much I appreciate your talk,
+
+00:17:13.720 --> 00:17:16.119
+especially you jumping in live with us
+
+00:17:16.120 --> 00:17:19.079
+and just taking everything on the fly.
+
+00:17:19.080 --> 00:17:24.559
+I think this is a big part of what adds the energy,
+
+00:17:24.560 --> 00:17:28.039
+you in particular, just really dynamic speaker.
+
+00:17:28.040 --> 00:17:31.479
+Thank you. Thank you. Thank you. I enjoyed it as well.
+
+00:17:31.480 --> 00:17:37.159
+A person is, and I think this may have been touched on already,
+
+00:17:37.160 --> 00:17:39.439
+but let's maybe get into it more specifically.
+
+00:17:39.440 --> 00:17:42.159
+We've said that search is kind of
+
+00:17:42.160 --> 00:17:44.719
+a next up type of feature as things,
+
+00:17:44.720 --> 00:17:48.159
+as the current iteration stabilizes.
+
+00:17:48.160 --> 00:17:52.239
+Question was, you know, occur like, how would you?
+
+00:17:52.240 --> 00:17:56.159
+Totally. There will be occur searches.
+
+00:17:56.160 --> 00:17:59.639
+There will be isearch enabled, isearch.
+
+00:17:59.640 --> 00:18:02.879
+used to with PDF tools,
+
+00:18:02.880 --> 00:18:06.439
+we would be like parity with the features,
+
+00:18:06.440 --> 00:18:08.719
+all the features that you're used to with PDF tools.
+
+00:18:08.720 --> 00:18:12.599
+Um, so, uh, certainly occur anything
+
+00:18:12.600 --> 00:18:15.679
+that is important in Emacs with text
+
+00:18:15.680 --> 00:18:17.359
+and that can be done with PDFs.
+
+00:18:17.360 --> 00:18:19.839
+We really want to do that because, um,
+
+00:18:19.840 --> 00:18:22.679
+I want the package to be as knitted
+
+00:18:22.680 --> 00:18:24.959
+into Emacs ecosystem as possible.
+
+00:18:24.960 --> 00:18:28.159
+Okay. We'll see if we can get in this last question here.
+
+00:18:28.160 --> 00:18:30.319
+Do you have a timing expectation for ELPA?
+
+00:18:30.320 --> 00:18:33.199
+Uh, yeah, next major release essentially.
+
+00:18:33.200 --> 00:18:35.279
+So next major release is most likely
+
+00:18:35.280 --> 00:18:37.319
+going to be within a month or two.
+
+00:18:37.320 --> 00:18:39.639
+So once we have the next major release, we're going to be.
+
+00:18:39.640 --> 00:18:43.479
+Uh, timing couldn't be more perfect.
+
+00:18:43.480 --> 00:18:45.519
+Maybe this is a good, good point to break.
+
+00:18:45.520 --> 00:18:47.759
+We'll be cutting away to the next talk
+
+00:18:47.760 --> 00:18:48.879
+in just a couple of minutes.
+
+00:18:48.880 --> 00:18:51.479
+So let me say one more time how much
+
+00:18:51.480 --> 00:18:52.959
+on behalf of all the attendees
+
+00:18:52.960 --> 00:18:54.959
+and all the volunteers and all everybody,
+
+00:18:54.960 --> 00:18:57.079
+um, how much we appreciate your talks
+
+00:18:57.080 --> 00:19:01.299
+and, uh, your awesome contribution to the Emacs world.
+
+00:19:01.300 --> 00:19:02.766
+Thanks, Corwin.
diff --git a/2025/captions/emacsconf-2025-reader--an-introduction-to-the-emacs-reader--divy--main--chapters.vtt b/2025/captions/emacsconf-2025-reader--an-introduction-to-the-emacs-reader--divy--main--chapters.vtt
new file mode 100644
index 00000000..d5b51235
--- /dev/null
+++ b/2025/captions/emacsconf-2025-reader--an-introduction-to-the-emacs-reader--divy--main--chapters.vtt
@@ -0,0 +1,47 @@
+WEBVTT
+
+
+00:00:00.720 --> 00:00:44.759
+An introduction to the Emacs reader
+
+00:00:44.760 --> 00:02:05.759
+Yet another document viewer in Emacs?
+
+00:02:05.760 --> 00:06:00.279
+Architecture of Emacs Reader
+
+00:06:00.280 --> 00:07:39.559
+A word on dynamic modules
+
+00:07:39.560 --> 00:07:56.759
+Features of Emacs Reader
+
+00:07:56.760 --> 00:11:18.719
+Memory efficiency
+
+00:11:18.720 --> 00:14:23.679
+Performance and speed
+
+00:14:23.680 --> 00:17:08.959
+Scanned PDFs
+
+00:17:08.960 --> 00:23:44.239
+System-level multi-threading
+
+00:23:44.240 --> 00:25:10.339
+Native Emacs integrations
+
+00:25:10.340 --> 00:26:01.139
+(Naive) dark mode
+
+00:26:01.140 --> 00:29:14.271
+Challenges and further improvements
+
+00:29:14.272 --> 00:32:32.299
+What Emacs can learn?
+
+00:32:32.300 --> 00:33:35.519
+Contributing to the development
+
+00:33:35.520 --> 00:34:37.280
+Acknowledgements
diff --git a/2025/captions/emacsconf-2025-reader--an-introduction-to-the-emacs-reader--divy--main.vtt b/2025/captions/emacsconf-2025-reader--an-introduction-to-the-emacs-reader--divy--main.vtt
new file mode 100644
index 00000000..2f83bc19
--- /dev/null
+++ b/2025/captions/emacsconf-2025-reader--an-introduction-to-the-emacs-reader--divy--main.vtt
@@ -0,0 +1,2431 @@
+WEBVTT captioned by jay_bird and sachac
+
+NOTE An introduction to the Emacs reader
+
+00:00:00.720 --> 00:00:02.879
+Hello EmacsConf!
+
+00:00:02.880 --> 00:00:06.639
+Today I'm here to introduce you to the Emacs Reader.
+
+00:00:06.640 --> 00:00:08.759
+It is a general-purpose document viewer
+
+00:00:08.760 --> 00:00:12.319
+that lives inside our beloved Emacs.
+
+00:00:12.320 --> 00:00:14.159
+It tries to prioritize memory
+
+00:00:14.160 --> 00:00:17.159
+and performance efficiency as much as possible
+
+00:00:17.160 --> 00:00:20.519
+even when you're using a lower-end hardware.
+
+00:00:20.520 --> 00:00:22.119
+And, most importantly,
+
+00:00:22.120 --> 00:00:25.439
+it tries to do things in an Emacs manner.
+
+00:00:25.440 --> 00:00:26.999
+That is, it tries to integrate
+
+00:00:27.000 --> 00:00:29.719
+with existing packages as much as possible
+
+00:00:29.720 --> 00:00:32.239
+instead of reinventing the wheel.
+
+00:00:32.240 --> 00:00:36.119
+And architecturally, it tries to take the advantage
+
+00:00:36.120 --> 00:00:38.479
+of dynamic or native modules
+
+00:00:38.480 --> 00:00:44.759
+which were introduced back in 2015 into Emacs.
+
+NOTE Yet another document viewer in Emacs?
+
+00:00:44.760 --> 00:00:46.759
+You would ask, why exactly do we need
+
+00:00:46.760 --> 00:00:49.199
+another document viewer in Emacs?
+
+00:00:49.200 --> 00:00:51.839
+Don't we already have the built-in DocView
+
+00:00:51.840 --> 00:00:55.199
+and the notorious pdf-tools?
+
+00:00:55.200 --> 00:00:59.439
+Well, the built-in DocView has unusable latency,
+
+00:00:59.440 --> 00:01:01.399
+and I'm going to show you this later
+
+00:01:01.400 --> 00:01:04.599
+when I compare this with Emacs Reader.
+
+00:01:04.600 --> 00:01:08.079
+The famous pdf-tools has actually multiple issues.
+
+00:01:08.080 --> 00:01:10.639
+One, it is extremely memory-hungry
+
+00:01:10.640 --> 00:01:14.399
+regardless of what kind of PDFs you're reading.
+
+00:01:14.400 --> 00:01:17.939
+And, well, it can only read PDFs.
+
+00:01:17.940 --> 00:01:22.199
+Poppler, the library which pdf-tools uses,
+
+00:01:22.200 --> 00:01:23.879
+is actually sub-optimal,
+
+00:01:23.880 --> 00:01:25.799
+especially relative to MuPDF,
+
+00:01:25.800 --> 00:01:28.559
+which is what Emacs Reader is based on.
+
+00:01:28.560 --> 00:01:31.919
+pdf-tools is also extremely painful to install.
+
+00:01:31.920 --> 00:01:34.279
+If you've ever installed pdf-tools,
+
+00:01:34.280 --> 00:01:38.479
+you know that it has a bunch of dependencies,
+
+00:01:38.480 --> 00:01:42.319
+including a server that is supposedly packaged.
+
+00:01:42.320 --> 00:01:45.061
+across package managers, system package managers.
+
+00:01:45.062 --> 00:01:47.737
+It's extremely difficult to install
+
+00:01:47.738 --> 00:01:50.279
+and painful to install.
+
+00:01:50.280 --> 00:01:52.839
+And of course, pdf-tools
+
+00:01:52.840 --> 00:01:54.559
+since the last couple of years
+
+00:01:54.560 --> 00:01:56.559
+has not been maintained as much.
+
+00:01:56.560 --> 00:02:05.759
+There's huge PRs that have been unnoticed and unmerged.
+
+NOTE Architecture of Emacs Reader
+
+00:02:05.760 --> 00:02:08.999
+Architecturally, Emacs Reader takes a distance
+
+00:02:09.000 --> 00:02:12.559
+from both DocView and pdf-tools.
+
+00:02:12.560 --> 00:02:15.399
+So how DocView works is that
+
+00:02:15.400 --> 00:02:18.679
+it basically wraps around
+
+00:02:18.680 --> 00:02:20.879
+a tool called mutool.
+
+00:02:20.880 --> 00:02:22.319
+mutool is actually
+
+00:02:22.320 --> 00:02:26.119
+a command line tool from MuPDF itself.
+
+00:02:26.120 --> 00:02:28.199
+It relies on mutool and a bunch
+
+00:02:28.200 --> 00:02:30.579
+of other similar command line tools,
+
+00:02:30.580 --> 00:02:34.199
+and basically makes process calls
+
+00:02:34.200 --> 00:02:36.519
+from Elisp to the CLI tools.
+
+00:02:36.520 --> 00:02:38.639
+That's how DocView works,
+
+00:02:38.640 --> 00:02:41.319
+and that's why it sort of has latency issues
+
+00:02:41.320 --> 00:02:42.519
+because that's the best you can do
+
+00:02:42.520 --> 00:02:45.019
+by literally calling CLI tools
+
+00:02:45.020 --> 00:02:50.679
+and outputting the images into Emacs.
+
+00:02:50.680 --> 00:02:55.039
+How pdf-tools works is that it tries
+
+00:02:55.040 --> 00:02:57.479
+to have a server-client model.
+
+00:02:57.480 --> 00:02:58.999
+So the client is Emacs
+
+00:02:59.000 --> 00:03:00.559
+and the server is basically
+
+00:03:00.560 --> 00:03:02.999
+something they call epdfinfo.
+
+00:03:03.000 --> 00:03:07.240
+It's supposed to render the images using Poppler
+
+00:03:07.241 --> 00:03:10.919
+and then send the images to Emacs
+
+00:03:10.920 --> 00:03:13.279
+which then tries to display.
+
+00:03:13.280 --> 00:03:16.279
+I think the server client model is terrible.
+
+00:03:16.280 --> 00:03:18.079
+One, for latency purposes,
+
+00:03:18.080 --> 00:03:19.839
+and two, it makes things
+
+00:03:19.840 --> 00:03:21.799
+unnecessarily more complicated.
+
+00:03:21.800 --> 00:03:24.199
+Here is where we come
+
+00:03:24.200 --> 00:03:26.679
+and introduce dynamic modules.
+
+00:03:26.680 --> 00:03:30.579
+So Emacs Reader is based on
+
+00:03:30.580 --> 00:03:32.279
+the concept of dynamic modules
+
+00:03:32.280 --> 00:03:34.279
+which I'm going to talk about in a bit.
+
+00:03:34.280 --> 00:03:37.159
+But how it works is that we have C modules.
+
+00:03:37.160 --> 00:03:39.039
+So we have the emacs-module.h,
+
+00:03:39.040 --> 00:03:40.679
+that's the dynamic module header
+
+00:03:40.680 --> 00:03:43.159
+which every dynamic module package must have.
+
+00:03:43.160 --> 00:03:45.479
+And then we have our C files.
+
+00:03:45.480 --> 00:03:52.579
+And these C files essentially define functions
+
+00:03:52.580 --> 00:03:56.439
+that are going to be used in Emacs but in C.
+
+00:03:56.440 --> 00:03:59.319
+We then load these C modules
+
+00:03:59.320 --> 00:04:03.799
+using simple (require ...) in our Elisp modules.
+
+00:04:03.800 --> 00:04:05.079
+And then whenever we call
+
+00:04:05.080 --> 00:04:07.119
+something in the Emacs runtime,
+
+00:04:07.120 --> 00:04:09.159
+say I'm going to open
+
+00:04:09.160 --> 00:04:13.559
+PDF files in (find-file) or (reader-open-doc),
+
+00:04:13.560 --> 00:04:15.799
+what it does is that
+
+00:04:15.800 --> 00:04:19.039
+it tries to use one of the functions
+
+00:04:19.040 --> 00:04:20.999
+that is wrapped in Elisp,
+
+00:04:21.000 --> 00:04:24.839
+but actually tries to call a function in C.
+
+00:04:24.840 --> 00:04:26.839
+And then the C module is actually
+
+00:04:26.840 --> 00:04:29.279
+going to make calls to the MuPDF.
+
+00:04:29.280 --> 00:04:31.599
+Here the MuPDF system package,
+
+00:04:31.600 --> 00:04:33.399
+this is actually a system package
+
+00:04:33.400 --> 00:04:35.839
+that is dynamically linked to the C modules.
+
+00:04:35.840 --> 00:04:36.919
+So we're basically
+
+00:04:36.920 --> 00:04:39.799
+just using it as a shared library.
+
+00:04:39.800 --> 00:04:43.359
+So you have the fz_load_page, for example,
+
+00:04:43.360 --> 00:04:44.839
+it's a MuPDF function
+
+00:04:44.840 --> 00:04:47.399
+that we're going to be using in the C modules.
+
+00:04:47.400 --> 00:04:50.079
+So it's going to make
+
+00:04:50.080 --> 00:04:53.279
+a shared dynamic call to MuPDF
+
+00:04:53.280 --> 00:04:55.119
+and then render the page
+
+00:04:55.120 --> 00:04:59.179
+and then show this to Emacs.
+
+00:04:59.180 --> 00:05:01.839
+This pipeline, I argue,
+
+00:05:01.840 --> 00:05:05.599
+is much better and leaner and efficient
+
+00:05:05.600 --> 00:05:07.639
+than a server-client model.
+
+00:05:07.640 --> 00:05:09.479
+One, because we don't really need
+
+00:05:09.480 --> 00:05:10.839
+the server-client model.
+
+00:05:10.840 --> 00:05:12.359
+So back when Politza
+
+00:05:12.360 --> 00:05:14.759
+first introduced pdf-tools,
+
+00:05:14.760 --> 00:05:19.759
+that was like 10 years ago in 2015,
+
+00:05:19.760 --> 00:05:21.240
+the concept of dynamic modules
+
+00:05:21.241 --> 00:05:23.279
+were not integrated into Emacs.
+
+00:05:23.280 --> 00:05:24.359
+I think they came around
+
+00:05:24.360 --> 00:05:28.079
+like one or two years late, 2017.
+
+00:05:28.080 --> 00:05:31.219
+So that's the best he could go with.
+
+00:05:31.220 --> 00:05:33.079
+We don't really have to, today,
+
+00:05:33.080 --> 00:05:35.719
+because, since we can use MuPDF
+
+00:05:35.720 --> 00:05:36.999
+as a shared library
+
+00:05:37.000 --> 00:05:39.479
+which can render things in real-time
+
+00:05:39.480 --> 00:05:41.759
+and just give us the rendered images
+
+00:05:41.760 --> 00:05:43.599
+which we can then display,
+
+00:05:43.600 --> 00:05:49.659
+there's no reason for a server to do things for us.
+
+00:05:49.660 --> 00:05:53.359
+So that's the main architectural difference
+
+00:05:53.360 --> 00:05:55.479
+that Emacs Reader introduces
+
+00:05:55.480 --> 00:06:00.279
+compared to pdf-tools and DocView.
+
+NOTE A word on dynamic modules
+
+00:06:00.280 --> 00:06:02.479
+What exactly are dynamic modules?
+
+00:06:02.480 --> 00:06:04.119
+Well, I can't really give you
+
+00:06:04.120 --> 00:06:06.199
+a full-fledged explanation,
+
+00:06:06.200 --> 00:06:08.639
+but essentially dynamic modules
+
+00:06:08.640 --> 00:06:10.519
+let you evaluate
+
+00:06:10.520 --> 00:06:12.039
+native compiled code
+
+00:06:12.040 --> 00:06:15.119
+in other languages like C, C++, Rust
+
+00:06:15.120 --> 00:06:18.519
+that behaves like regular Emacs Lisp.
+
+00:06:18.520 --> 00:06:23.639
+So when our Emacs C modules,
+
+00:06:23.640 --> 00:06:26.039
+the render-core.c or render-theme.c,
+
+00:06:26.040 --> 00:06:28.299
+when all of these are compiled,
+
+00:06:28.300 --> 00:06:30.839
+and they're called from the Elisp modules.
+
+00:06:30.840 --> 00:06:34.439
+They behave like Elisp even though
+
+00:06:34.440 --> 00:06:37.039
+they're as fast as a C function
+
+00:06:37.040 --> 00:06:39.359
+because they're compiled C code.
+
+00:06:39.360 --> 00:06:41.399
+But you essentially call them
+
+00:06:41.400 --> 00:06:42.759
+just like Elisp functions.
+
+00:06:42.760 --> 00:06:47.819
+You can find them using C-h f and so on.
+
+00:06:47.820 --> 00:06:49.679
+So you can call any function
+
+00:06:49.680 --> 00:06:51.719
+from any language that supports
+
+00:06:51.720 --> 00:06:53.519
+the C ABI, which is virtually everything,
+
+00:06:53.520 --> 00:06:54.919
+without leaving Emacs
+
+00:06:54.920 --> 00:06:56.759
+and without losing any performance.
+
+00:06:56.760 --> 00:06:58.479
+This is extremely helpful
+
+00:06:58.480 --> 00:06:59.919
+when you want to use
+
+00:06:59.920 --> 00:07:02.119
+existing libraries like MuPDF
+
+00:07:02.120 --> 00:07:04.079
+or any other cryptographic library
+
+00:07:04.080 --> 00:07:06.039
+that is written in C
+
+00:07:06.040 --> 00:07:07.037
+and you don't want to rewrite
+
+00:07:07.038 --> 00:07:08.537
+the entire thing in Elisp,
+
+00:07:08.538 --> 00:07:11.739
+but you can just use it as a native library.
+
+00:07:11.740 --> 00:07:13.039
+You can read more
+
+00:07:13.040 --> 00:07:14.679
+on how dynamic modules work
+
+00:07:14.680 --> 00:07:17.759
+and how you can write one in this blog.
+
+00:07:17.760 --> 00:07:19.479
+This is something that I wrote myself
+
+00:07:19.480 --> 00:07:22.239
+just after starting this package
+
+00:07:22.240 --> 00:07:25.439
+and it will give you a bit more guidance
+
+00:07:25.440 --> 00:07:27.519
+on how to use dynamic modules more efficiently.
+
+00:07:27.520 --> 00:07:28.679
+I think dynamic modules
+
+00:07:28.680 --> 00:07:32.299
+should be used more and more in Emacs
+
+00:07:32.300 --> 00:07:34.519
+and I think their advantages
+
+00:07:34.520 --> 00:07:36.079
+have not been exploited
+
+00:07:36.080 --> 00:07:39.559
+as much as they should.
+
+NOTE Features of Emacs Reader
+
+00:07:39.560 --> 00:07:42.319
+Now we're going to talk a bit about
+
+00:07:42.320 --> 00:07:46.719
+the core features of Emacs Reader.
+
+00:07:46.720 --> 00:07:48.879
+And these are the following features
+
+00:07:48.880 --> 00:07:50.399
+that we're going to talk about.
+
+00:07:50.400 --> 00:07:51.959
+And finally, to talk about
+
+00:07:51.960 --> 00:07:56.759
+some challenges that we faced.
+
+NOTE Memory efficiency
+
+00:07:56.760 --> 00:07:58.519
+First is memory efficiency.
+
+00:07:58.520 --> 00:08:00.819
+I already told you that
+
+00:08:00.820 --> 00:08:03.239
+Emacs Reader's first priority
+
+00:08:03.240 --> 00:08:06.439
+is to make sure that we are not slow
+
+00:08:06.440 --> 00:08:07.959
+and we are not taking
+
+00:08:07.960 --> 00:08:10.319
+a bunch of memory unnecessarily.
+
+00:08:10.320 --> 00:08:14.439
+So here's a graph of the heap memory size
+
+00:08:14.440 --> 00:08:17.919
+as it grows for DocView.
+
+00:08:17.920 --> 00:08:20.637
+So this is again in emacs -Q.
+
+00:08:20.638 --> 00:08:22.399
+So this is a fresh Emacs session
+
+00:08:22.400 --> 00:08:25.279
+with just DocView.
+
+00:08:25.280 --> 00:08:27.819
+It grows up to 900MB
+
+00:08:27.820 --> 00:08:31.559
+for a very small PDF that is a LaTeX PDF.
+
+00:08:31.560 --> 00:08:36.779
+No scanned huge PDF. It's a 2MB PDF.
+
+00:08:36.780 --> 00:08:39.679
+But when I scrolled from the beginning
+
+00:08:39.680 --> 00:08:41.619
+of the PDF to the end,
+
+00:08:41.620 --> 00:08:43.639
+it went up to 900MB.
+
+00:08:43.640 --> 00:08:46.819
+That's the memory heap size.
+
+00:08:46.820 --> 00:08:49.699
+Does pdf-tools make this any better?
+
+00:08:49.700 --> 00:08:51.919
+It actually doesn't.
+
+00:08:51.920 --> 00:08:55.039
+So, pdf-tools pretty much
+
+00:08:55.040 --> 00:08:57.219
+does the same thing.
+
+00:08:57.220 --> 00:08:58.439
+if you look at it here
+
+00:08:58.440 --> 00:09:01.359
+just so if you're going to ask me
+
+00:09:01.360 --> 00:09:02.939
+are they two different graphs,
+
+00:09:02.940 --> 00:09:04.839
+or are you just showing me the same graph,
+
+00:09:04.840 --> 00:09:06.119
+they're actually two different graphs,
+
+00:09:06.120 --> 00:09:08.779
+because if you look at the DocView graph
+
+00:09:08.780 --> 00:09:11.559
+it uses cairo and it uses librsvg
+
+00:09:11.560 --> 00:09:13.439
+because docview by default
+
+00:09:13.440 --> 00:09:16.119
+converts the images into SVG.
+
+00:09:16.120 --> 00:09:17.999
+The rendered images are SVGs.
+
+00:09:18.000 --> 00:09:20.559
+pdf-tools doesn't, so you don't see
+
+00:09:20.560 --> 00:09:24.039
+any librsvg calls here or anything
+
+00:09:24.040 --> 00:09:25.439
+So this is pdf-tools
+
+00:09:25.440 --> 00:09:27.079
+and it basically takes up
+
+00:09:27.080 --> 00:09:29.079
+the same amount of memory, 900MB,
+
+00:09:29.080 --> 00:09:30.919
+and exactly the same operation,
+
+00:09:30.920 --> 00:09:32.479
+exactly the same PDF,
+
+00:09:32.480 --> 00:09:36.139
+exactly scrolling from first to the last.
+
+00:09:36.140 --> 00:09:37.719
+Where do we stand?
+
+00:09:37.720 --> 00:09:40.559
+Well, we actually do much better.
+
+00:09:40.560 --> 00:09:42.599
+So let me zoom in this.
+
+00:09:42.600 --> 00:09:46.319
+So if you see, we stand within
+
+00:09:46.320 --> 00:09:49.259
+at a peak of 72MB.
+
+00:09:49.260 --> 00:09:51.279
+Exactly the same PDF,
+
+00:09:51.280 --> 00:09:53.039
+exactly the same operation
+
+00:09:53.040 --> 00:09:54.559
+from the beginning to the end,
+
+00:09:54.560 --> 00:09:57.599
+around 285 pages scrolled.
+
+00:09:57.600 --> 00:10:03.239
+We take much less than 80 MB.
+
+00:10:03.240 --> 00:10:05.071
+And actually, to be very frank,
+
+00:10:05.072 --> 00:10:09.204
+the only memory that we're storing in Emacs,
+
+00:10:09.205 --> 00:10:12.439
+oh, sorry, not in Emacs,
+
+00:10:12.440 --> 00:10:16.599
+in the MuPDF heap is just about 30 MB.
+
+00:10:16.600 --> 00:10:19.119
+It's this dark red one.
+
+00:10:19.120 --> 00:10:22.559
+That's the cache that we're storing.
+
+00:10:22.560 --> 00:10:24.759
+That's the memory that we're interacting with
+
+00:10:24.760 --> 00:10:25.479
+in real time.
+
+00:10:25.480 --> 00:10:29.199
+This is stuff that Emacs adds on top of it
+
+00:10:29.200 --> 00:10:32.919
+and a bit of libmupdf.
+
+00:10:32.920 --> 00:10:35.199
+So you can see, in terms of memory,
+
+00:10:35.200 --> 00:10:37.239
+we're saving...
+
+00:10:37.240 --> 00:10:41.119
+we're literally down,
+
+00:10:41.120 --> 00:10:45.359
+what, a fraction of 10!
+
+00:10:45.360 --> 00:10:48.519
+This was a priority for us
+
+00:10:48.520 --> 00:10:49.279
+since the beginning,
+
+00:10:49.280 --> 00:10:51.999
+because when I was starting to use pdf-tools,
+
+00:10:52.000 --> 00:10:53.359
+it was unusable for me
+
+00:10:53.360 --> 00:10:55.159
+because I was on a lower-end hardware
+
+00:10:55.160 --> 00:10:57.599
+and I thought it should not be
+
+00:10:57.600 --> 00:10:58.959
+really that difficult
+
+00:10:58.960 --> 00:11:00.879
+for a document reader
+
+00:11:00.880 --> 00:11:04.099
+to not take a gigabyte of memory.
+
+00:11:04.100 --> 00:11:05.919
+It really shouldn't because
+
+00:11:05.920 --> 00:11:07.359
+you're not really doing that much,
+
+00:11:07.360 --> 00:11:10.919
+you're just displaying images.
+
+00:11:10.920 --> 00:11:12.239
+So that's how efficient
+
+00:11:12.240 --> 00:11:13.639
+we are in terms of memory.
+
+00:11:13.640 --> 00:11:15.371
+Let's see how efficient
+
+00:11:15.372 --> 00:11:18.719
+we are in terms of speed.
+
+NOTE Performance and speed
+
+00:11:18.720 --> 00:11:21.099
+So Emacs Reader is actually
+
+00:11:21.100 --> 00:11:23.119
+as fast as pdf-tools,
+
+00:11:23.120 --> 00:11:24.079
+and it is actually
+
+00:11:24.080 --> 00:11:27.239
+way more faster than DocView.
+
+00:11:27.240 --> 00:11:28.559
+In some cases,
+
+00:11:28.560 --> 00:11:31.679
+it actually beats existing
+
+00:11:31.680 --> 00:11:34.859
+standalone document readers and browsers.
+
+00:11:34.860 --> 00:11:41.119
+So let's actually see this in action.
+
+00:11:41.120 --> 00:11:42.319
+So here we are with
+
+00:11:42.320 --> 00:11:46.039
+a few emacs -Q sessions.
+
+00:11:46.040 --> 00:11:50.719
+I'm using emacs -Q so as to give you...
+
+00:11:50.720 --> 00:11:52.159
+that this is actually
+
+00:11:52.160 --> 00:11:55.139
+as less overhead possible.
+
+00:11:55.140 --> 00:11:57.359
+So we have first DocView.
+
+00:11:57.360 --> 00:12:01.137
+All of these tests
+
+00:12:01.138 --> 00:12:03.039
+are going to be done on the same PDF.
+
+00:12:03.040 --> 00:12:07.199
+It's the documentation manual from MuPDF.
+
+00:12:07.200 --> 00:12:10.559
+So if I scroll, this is fine.
+
+00:12:10.560 --> 00:12:12.859
+I'm just pressing n
+
+00:12:12.860 --> 00:12:15.159
+and it seems to work fine.
+
+00:12:15.160 --> 00:12:19.519
+If I press and hold n,
+
+00:12:19.520 --> 00:12:21.799
+I have pressed n and I'm holding.
+
+00:12:21.800 --> 00:12:26.419
+And Emacs is stuck.
+
+00:12:26.420 --> 00:12:27.559
+And it's going to stay stuck
+
+00:12:27.560 --> 00:12:28.799
+because it's making calls
+
+00:12:28.800 --> 00:12:31.279
+to the CLI tool that I said, mutool.
+
+00:12:31.280 --> 00:12:35.519
+And after it's done getting stuck,
+
+00:12:35.520 --> 00:12:40.179
+it is going to get back.
+
+00:12:40.180 --> 00:12:43.039
+As you can see, if you go back,
+
+00:12:43.040 --> 00:12:45.079
+you're able to go back fine.
+
+00:12:45.080 --> 00:12:46.199
+It does not get stuck
+
+00:12:46.200 --> 00:12:48.439
+because what Emacs does
+
+00:12:48.440 --> 00:12:51.519
+is it basically calls mutool,
+
+00:12:51.520 --> 00:12:53.239
+like fetches a bunch of pages,
+
+00:12:53.240 --> 00:12:54.919
+essentially all the pages
+
+00:12:54.920 --> 00:12:56.199
+that you asked for it,
+
+00:12:56.200 --> 00:12:59.159
+and it puts them into the memory.
+
+00:12:59.160 --> 00:12:59.879
+And that's it.
+
+00:12:59.880 --> 00:13:01.199
+It puts them into the memory
+
+00:13:01.200 --> 00:13:03.139
+and then scrolls through it.
+
+00:13:03.140 --> 00:13:05.839
+So going back, you will most likely
+
+00:13:05.840 --> 00:13:07.239
+not have any stuck issues.
+
+00:13:07.240 --> 00:13:07.839
+Sometimes you do
+
+00:13:07.840 --> 00:13:10.919
+because some images do get GC'd.
+
+00:13:10.920 --> 00:13:13.599
+But that's the idea.
+
+00:13:13.600 --> 00:13:16.639
+Whenever there's no image in memory,
+
+00:13:16.640 --> 00:13:18.739
+it gets stuck.
+
+00:13:18.740 --> 00:13:21.239
+And it gets stuck good.
+
+00:13:21.240 --> 00:13:23.579
+That's DocView.
+
+00:13:23.580 --> 00:13:25.199
+pdf-tools is actually
+
+00:13:25.200 --> 00:13:27.359
+not problematic here.
+
+00:13:27.360 --> 00:13:29.039
+pdf-tools is extremely efficient
+
+00:13:29.040 --> 00:13:30.199
+and extremely fast.
+
+00:13:30.200 --> 00:13:32.839
+So we can go through the pages
+
+00:13:32.840 --> 00:13:34.479
+without any issues.
+
+00:13:34.480 --> 00:13:37.159
+We can zoom.
+
+00:13:37.160 --> 00:13:39.879
+The zoom did get stuck a bit,
+
+00:13:39.880 --> 00:13:44.039
+but that's relatively fine.
+
+00:13:44.040 --> 00:13:46.959
+Emacs Reader is exactly as fast
+
+00:13:46.960 --> 00:13:49.199
+as pdf-tools here.
+
+00:13:49.200 --> 00:13:50.279
+So this is pdf-view,
+
+00:13:50.280 --> 00:13:51.279
+this is Emacs Reader.
+
+00:13:51.860 --> 00:13:55.759
+Let's scroll through the pages.
+
+00:13:55.760 --> 00:13:59.159
+As you can see, nothing is getting stuck
+
+00:13:59.160 --> 00:14:00.919
+because we're not really waiting
+
+00:14:00.920 --> 00:14:06.359
+for any tool to send us any images.
+
+00:14:06.360 --> 00:14:08.299
+We just have a little cache
+
+00:14:08.300 --> 00:14:09.399
+and we're scrolling through them
+
+00:14:09.400 --> 00:14:13.959
+and rendering images in real time.
+
+00:14:13.960 --> 00:14:17.279
+Zooming also works fine.
+
+00:14:17.280 --> 00:14:19.519
+So, with regards to this,
+
+00:14:19.520 --> 00:14:23.679
+we're in parity with pdf-tools.
+
+NOTE Scanned PDFs
+
+00:14:23.680 --> 00:14:26.319
+Now, where pdf-tools and actually
+
+00:14:26.320 --> 00:14:28.079
+a lot of readers have issues
+
+00:14:28.080 --> 00:14:32.499
+is when they're dealing with scanned PDF.
+
+00:14:32.500 --> 00:14:36.839
+So, we have this PDF which is notorious
+
+00:14:36.840 --> 00:14:40.599
+for being really difficult to render
+
+00:14:40.600 --> 00:14:42.599
+because this is entirely built
+
+00:14:42.600 --> 00:14:43.479
+with scanned images.
+
+00:14:43.480 --> 00:14:44.619
+This is the kind of PDF
+
+00:14:44.620 --> 00:14:46.519
+that you get from Internet Archive.
+
+00:14:46.520 --> 00:14:47.839
+This is essentially someone
+
+00:14:47.840 --> 00:14:50.919
+took photos of the book in a camera
+
+00:14:50.920 --> 00:14:56.659
+and literally turned them into a PDF.
+
+00:14:56.660 --> 00:14:58.719
+Emacs Reader actually does not have
+
+00:14:58.720 --> 00:15:01.079
+any issues rendering this.
+
+00:15:01.080 --> 00:15:05.119
+As you can see, it renders it smoothly
+
+00:15:05.120 --> 00:15:09.679
+and fine without any halts.
+
+00:15:09.680 --> 00:15:13.959
+I can change Emacs even while it's doing so,
+
+00:15:13.960 --> 00:15:17.139
+and it does not have any issues.
+
+00:15:17.140 --> 00:15:20.071
+pdf-tools are the same.
+
+00:15:20.072 --> 00:15:21.759
+PDF also does not have any issues.
+
+00:15:21.760 --> 00:15:26.579
+Sorry. Click pdf-view-mode.
+
+00:15:26.580 --> 00:15:29.859
+pdf-view (pdf-tools) is a bit slower
+
+00:15:29.860 --> 00:15:35.619
+but does not have any issues. It works.
+
+00:15:35.620 --> 00:15:40.700
+Here, actually, pdf-tools and Emacs Reader
+
+00:15:40.701 --> 00:15:46.099
+are more efficient than even browsers.
+
+00:15:46.100 --> 00:15:47.199
+So, if I try to open
+
+00:15:47.200 --> 00:15:50.839
+the same page in a browser,
+
+00:15:50.840 --> 00:15:52.919
+I'm trying to scroll.
+
+00:15:52.920 --> 00:15:54.919
+And after I've scrolled and I leave,
+
+00:15:54.920 --> 00:15:58.119
+scrolling is going to load
+
+00:15:58.120 --> 00:15:59.839
+for a bunch of seconds
+
+00:15:59.840 --> 00:16:03.139
+to give me the page.
+
+00:16:03.140 --> 00:16:04.679
+It's more than five seconds,
+
+00:16:04.680 --> 00:16:05.479
+as you can see,
+
+00:16:05.480 --> 00:16:08.639
+and this is actually totally not usable.
+
+00:16:08.640 --> 00:16:10.199
+If you're going to read this book,
+
+00:16:10.200 --> 00:16:11.999
+an electromagnetics book,
+
+00:16:12.000 --> 00:16:13.599
+you're going to have a terrible time
+
+00:16:13.600 --> 00:16:14.759
+reading this in a browser,
+
+00:16:14.760 --> 00:16:15.479
+which is supposed to be
+
+00:16:15.480 --> 00:16:17.159
+the fastest thing alive.
+
+00:16:17.160 --> 00:16:19.119
+You sort of have the same experience
+
+00:16:19.120 --> 00:16:20.559
+in Okular. So this is Okular.
+
+00:16:20.560 --> 00:16:22.439
+If I try to scroll through this,
+
+00:16:22.440 --> 00:16:25.419
+it will do the same thing.
+
+00:16:25.420 --> 00:16:28.519
+And while it is better than the browser,
+
+00:16:28.520 --> 00:16:31.119
+it still takes a while
+
+00:16:31.120 --> 00:16:34.119
+and it still has, like, if you zoom,
+
+00:16:34.120 --> 00:16:36.799
+you're going to have a bit of a delay.
+
+00:16:36.800 --> 00:16:41.579
+You don't really face that in Emacs Reader.
+
+00:16:41.580 --> 00:16:45.259
+We zoom in and out just fine.
+
+00:16:45.260 --> 00:16:47.239
+And even with using mouse,
+
+00:16:47.240 --> 00:16:51.839
+you can zoom in and out just fine.
+
+00:16:51.840 --> 00:16:54.799
+So this is how Emacs Reader performs
+
+00:16:54.800 --> 00:17:01.119
+in terms of speed with these other tools.
+
+00:17:01.120 --> 00:17:08.959
+Now we will go back to the original presentation.
+
+NOTE System-level multi-threading
+
+00:17:08.960 --> 00:17:11.919
+Now, how exactly is Emacs Reader
+
+00:17:11.920 --> 00:17:14.079
+able to do a lot of this?
+
+00:17:14.080 --> 00:17:17.839
+I wish I could sort of spend
+
+00:17:17.840 --> 00:17:18.999
+an entire session
+
+00:17:19.000 --> 00:17:21.239
+just talking about this, but I can't.
+
+00:17:21.240 --> 00:17:22.919
+So I'm just going to make this short.
+
+00:17:22.920 --> 00:17:24.799
+When you load Emacs Reader,
+
+00:17:24.800 --> 00:17:26.319
+in the standard output,
+
+00:17:26.320 --> 00:17:27.439
+it's going to say this:
+
+00:17:27.440 --> 00:17:29.279
+that eight threads have been initialized.
+
+00:17:29.280 --> 00:17:32.679
+Now, what we did with Emacs here
+
+00:17:32.680 --> 00:17:33.799
+is that we enabled
+
+00:17:33.800 --> 00:17:35.039
+system-level multithreading.
+
+00:17:35.040 --> 00:17:36.639
+Now, Emacs is not multithreaded.
+
+00:17:36.640 --> 00:17:38.199
+We all know that notoriously.
+
+00:17:38.200 --> 00:17:39.519
+It is single-threaded.
+
+00:17:39.520 --> 00:17:41.479
+But we don't really
+
+00:17:41.480 --> 00:17:43.819
+need Emacs to be multithreaded, though.
+
+00:17:43.820 --> 00:17:45.759
+Emacs does not need to be multithreaded.
+
+00:17:45.760 --> 00:17:47.199
+What needs to be multithreaded
+
+00:17:47.200 --> 00:17:48.519
+is the rendering part
+
+00:17:48.520 --> 00:17:50.759
+because that's the most expensive part.
+
+00:17:50.760 --> 00:17:53.519
+In Emacs, we're only just displaying images.
+
+00:17:53.520 --> 00:17:56.479
+Emacs itself does not have a PDF engine
+
+00:17:56.480 --> 00:17:57.919
+that is rendering stuff.
+
+00:17:57.920 --> 00:18:00.559
+MuPDF is supposed to take care of that.
+
+00:18:00.560 --> 00:18:03.199
+So if I can do multithreading
+
+00:18:03.200 --> 00:18:05.079
+in the rendering pipeline,
+
+00:18:05.080 --> 00:18:07.119
+that is when I'm rendering pages
+
+00:18:07.120 --> 00:18:08.719
+instead of displaying them,
+
+00:18:08.720 --> 00:18:10.279
+that's fine for me because
+
+00:18:10.280 --> 00:18:11.679
+the rendering part most of the time,
+
+00:18:11.680 --> 00:18:12.959
+especially in scanned PDFs,
+
+00:18:12.960 --> 00:18:14.679
+is the most expensive part.
+
+00:18:14.680 --> 00:18:16.439
+So if you look at this graph,
+
+00:18:16.440 --> 00:18:17.959
+we have two parts here.
+
+00:18:17.960 --> 00:18:19.679
+We have the display pipeline
+
+00:18:19.680 --> 00:18:22.279
+and we have the rendering pipeline.
+
+00:18:22.280 --> 00:18:23.639
+In the display pipeline,
+
+00:18:23.640 --> 00:18:26.519
+we have just the Emacs session
+
+00:18:26.520 --> 00:18:29.359
+which has the reader loaded
+
+00:18:29.360 --> 00:18:31.579
+and that's the main thread.
+
+00:18:31.580 --> 00:18:33.319
+Then we have the rendering pipeline
+
+00:18:33.320 --> 00:18:35.559
+which has the MuPDF system package
+
+00:18:35.560 --> 00:18:38.459
+dynamically linked.
+
+00:18:38.460 --> 00:18:40.399
+So when you load Emacs Reader,
+
+00:18:40.400 --> 00:18:45.159
+we initialize a thread pool with eight threads.
+
+00:18:45.160 --> 00:18:48.759
+Now what you do is let's say we are at page 50.
+
+00:18:48.760 --> 00:18:51.759
+At page 50, the Emacs Reader
+
+00:18:51.760 --> 00:18:53.999
+maintains a cache.
+
+00:18:54.000 --> 00:18:56.519
+It's like a stack of pages
+
+00:18:56.520 --> 00:18:58.479
+that we keep in memory all the time.
+
+00:18:58.480 --> 00:19:02.519
+This cache is entirely outside of Emacs.
+
+00:19:02.520 --> 00:19:04.559
+It is not inside Emacs environment.
+
+00:19:04.560 --> 00:19:07.570
+It is in the C memory heap,
+
+00:19:07.571 --> 00:19:09.119
+in the MuPDF memory heap
+
+00:19:09.120 --> 00:19:11.119
+that is outside of Emacs environment.
+
+00:19:11.120 --> 00:19:13.839
+It does not make any calls to Emacs anything.
+
+00:19:13.840 --> 00:19:15.799
+It does not have a single Elisp line.
+
+00:19:15.800 --> 00:19:20.119
+So this cache is stored outside.
+
+00:19:20.120 --> 00:19:22.079
+Now when I want to retrieve
+
+00:19:22.080 --> 00:19:23.439
+anything from this cache,
+
+00:19:23.440 --> 00:19:26.199
+let's say, so I have cached
+
+00:19:26.200 --> 00:19:29.359
+up until 55, from 45 to 55.
+
+00:19:29.360 --> 00:19:31.079
+So what happens is that
+
+00:19:31.080 --> 00:19:32.759
+when you're at page 50,
+
+00:19:32.760 --> 00:19:34.359
+you always have a cache
+
+00:19:34.360 --> 00:19:36.719
+that's n + 5 and n - 5.
+
+00:19:36.720 --> 00:19:39.719
+So you have cache of 5 pages forward
+
+00:19:39.720 --> 00:19:41.959
+and 5 pages backward.
+
+00:19:41.960 --> 00:19:44.399
+But let's say I want to go to page 56.
+
+00:19:45.140 --> 00:19:50.079
+So I will ask an Emacs render page 56.
+
+00:19:50.080 --> 00:19:51.399
+And I'm not going to ask it
+
+00:19:51.400 --> 00:19:53.079
+to MuPDF directly.
+
+00:19:53.080 --> 00:19:54.399
+I'm going to ask it
+
+00:19:54.400 --> 00:19:56.719
+to the thread pool that do this job.
+
+00:19:56.720 --> 00:19:58.119
+And thread pool is going to
+
+00:19:58.120 --> 00:19:59.719
+assign one thread to it.
+
+00:19:59.720 --> 00:20:00.959
+Let's say the thread 1
+
+00:20:00.960 --> 00:20:03.239
+which is going to render page 56.
+
+00:20:03.240 --> 00:20:06.559
+So this thread is going to make calls to MuPDF
+
+00:20:06.560 --> 00:20:08.919
+through our code dynamic module.
+
+00:20:08.920 --> 00:20:11.839
+And MuPDF after rendering it
+
+00:20:11.840 --> 00:20:13.439
+is going to store it in the cache.
+
+00:20:13.440 --> 00:20:18.059
+So we're going to add another 56 page to this.
+
+00:20:18.060 --> 00:20:21.759
+Now, while this is happening,
+
+00:20:21.760 --> 00:20:24.679
+Emacs Reader does not, like Emacs itself,
+
+00:20:24.680 --> 00:20:27.379
+the session is not going to be stuck
+
+00:20:27.380 --> 00:20:30.239
+because we just made a call to the thread.
+
+00:20:30.240 --> 00:20:32.279
+We just asked the thread.
+
+00:20:32.280 --> 00:20:35.359
+So like this, this call, like it's done.
+
+00:20:35.360 --> 00:20:38.159
+So you just assign something to a thread
+
+00:20:38.160 --> 00:20:40.959
+and then this is fine.
+
+00:20:40.960 --> 00:20:42.479
+Like, you're not waiting for the thread
+
+00:20:42.480 --> 00:20:43.719
+to complete or anything.
+
+00:20:43.720 --> 00:20:46.519
+Emacs is not waiting for the thread to complete.
+
+00:20:46.520 --> 00:20:48.519
+The dynamic module or the C side
+
+00:20:48.520 --> 00:20:49.479
+might wait to complete
+
+00:20:49.480 --> 00:20:51.279
+but that is entirely different from
+
+00:20:51.280 --> 00:20:52.159
+the Emacs session.
+
+00:20:52.160 --> 00:20:54.839
+So Emacs viewer can continue to
+
+00:20:54.840 --> 00:20:56.279
+display the page 50
+
+00:20:56.280 --> 00:20:58.599
+while the rendering pipeline
+
+00:20:58.600 --> 00:21:01.979
+is still rendering the 56th page.
+
+00:21:01.980 --> 00:21:05.759
+And when Emacs asks to display page 56,
+
+00:21:05.760 --> 00:21:09.619
+it's going to ask it to a thread pool.
+
+00:21:09.620 --> 00:21:11.536
+Then thread pool is going to assign
+
+00:21:11.537 --> 00:21:13.319
+another thread, let's say this one,
+
+00:21:13.320 --> 00:21:16.999
+to retrieve page 56 from the memory cache.
+
+00:21:17.000 --> 00:21:20.039
+And then the 56 page is going to be sent
+
+00:21:20.040 --> 00:21:24.559
+to the Emacs to be displayed.
+
+00:21:24.560 --> 00:21:26.039
+Again, the retrieval part
+
+00:21:26.040 --> 00:21:28.519
+is entirely independent of Emacs.
+
+00:21:28.520 --> 00:21:30.159
+Emacs does not have to wait for it.
+
+00:21:30.160 --> 00:21:34.719
+Emacs only needs to wait to display it.
+
+00:21:34.720 --> 00:21:36.619
+So, the displaying part
+
+00:21:36.620 --> 00:21:37.919
+and the rendering pipeline
+
+00:21:37.920 --> 00:21:41.559
+are entirely asynchronous, so to speak.
+
+00:21:41.560 --> 00:21:43.639
+And in the diagram, if you see,
+
+00:21:43.640 --> 00:21:46.399
+all the arrows that are
+
+00:21:46.400 --> 00:21:48.839
+magenta in color,
+
+00:21:48.840 --> 00:21:51.639
+they are native to the Emacs runtime.
+
+00:21:51.640 --> 00:21:53.959
+That is, they are single-threaded.
+
+00:21:53.960 --> 00:21:55.679
+They are connected to Emacs.
+
+00:21:55.680 --> 00:21:58.759
+And all the arrows that are red in color,
+
+00:21:58.760 --> 00:22:01.859
+they are totally asynchronous.
+
+00:22:01.860 --> 00:22:03.519
+They can be multi-threaded if you want.
+
+00:22:03.520 --> 00:22:05.759
+They are multi-threaded by default
+
+00:22:05.760 --> 00:22:07.679
+because they interact
+
+00:22:07.680 --> 00:22:09.519
+only with the MuPDF shared library
+
+00:22:09.520 --> 00:22:11.399
+and the C heap.
+
+00:22:11.400 --> 00:22:12.719
+They do not touch anything
+
+00:22:12.720 --> 00:22:14.639
+in the Emacs runtime.
+
+00:22:14.640 --> 00:22:18.959
+This is how we're able to switch quickly
+
+00:22:18.960 --> 00:22:22.519
+between these huge scanned PDFs
+
+00:22:22.520 --> 00:22:23.959
+that have huge images
+
+00:22:23.960 --> 00:22:25.359
+in each of their pages
+
+00:22:25.360 --> 00:22:28.079
+because we don't really wait for
+
+00:22:28.080 --> 00:22:31.379
+each page to be rendered.
+
+00:22:31.380 --> 00:22:35.359
+And Emacs does not wait for that.
+
+00:22:35.360 --> 00:22:39.239
+So that's another architectural feature
+
+00:22:39.240 --> 00:22:40.319
+of Emacs Reader
+
+00:22:40.320 --> 00:22:43.199
+that we are system-level multithreaded.
+
+00:22:43.200 --> 00:22:47.399
+Now Emacs viewer also supports
+
+00:22:47.400 --> 00:22:49.319
+almost all document formats.
+
+00:22:49.320 --> 00:22:54.759
+It supports PDF, EPUB, MOBI, XPS, CPZ comics,
+
+00:22:54.760 --> 00:22:56.439
+and it even supports
+
+00:22:56.440 --> 00:22:59.970
+other non-ebook formats
+
+00:22:59.971 --> 00:23:00.839
+like document format,
+
+00:23:00.840 --> 00:23:01.839
+so you can open
+
+00:23:01.840 --> 00:23:04.799
+LibreOffice documents in it,
+
+00:23:04.800 --> 00:23:07.079
+and even stuff like PPT and Excel in it,
+
+00:23:07.080 --> 00:23:08.759
+even though they're not going to be
+
+00:23:08.760 --> 00:23:13.859
+supported in a as nice manner.
+
+00:23:13.860 --> 00:23:16.239
+And we can do that because MuPDF does this.
+
+00:23:16.240 --> 00:23:18.079
+MuPDF has support for all of this
+
+00:23:18.080 --> 00:23:22.679
+and it treats them just as it treats PDF.
+
+00:23:22.680 --> 00:23:24.539
+Nothing special.
+
+00:23:24.540 --> 00:23:26.519
+The only thing that we don't support right now
+
+00:23:26.520 --> 00:23:30.159
+is DejaVu, so that is not supported right now.
+
+00:23:30.160 --> 00:23:33.319
+I'm going to work on making it supported
+
+00:23:33.320 --> 00:23:35.079
+at the upstream MuPDF.
+
+00:23:36.020 --> 00:23:38.439
+That's going to take a long time,
+
+00:23:38.440 --> 00:23:44.239
+but it's in the plans.
+
+NOTE Native Emacs integrations
+
+00:23:44.240 --> 00:23:45.439
+Now with Emacs Reader,
+
+00:23:45.440 --> 00:23:46.679
+we also integrate
+
+00:23:46.680 --> 00:23:48.619
+with existing Emacs packages
+
+00:23:48.620 --> 00:23:50.039
+as much as possible.
+
+00:23:50.040 --> 00:23:52.999
+So bookmarks, C-x r b,
+
+00:23:53.000 --> 00:23:54.359
+you can do it natively.
+
+00:23:54.360 --> 00:23:57.559
+So you can save a page as a bookmark
+
+00:23:57.560 --> 00:23:59.639
+just as you save anything else in Emacs
+
+00:23:59.640 --> 00:24:00.519
+as a bookmark.
+
+00:24:00.520 --> 00:24:02.599
+There's also saveplace integration.
+
+00:24:02.600 --> 00:24:06.159
+So you can scroll a PDF, close it,
+
+00:24:06.160 --> 00:24:07.599
+and then come back to it
+
+00:24:07.600 --> 00:24:10.159
+at the same page that you saved it at.
+
+00:24:10.160 --> 00:24:12.879
+Sorry, that you closed it at.
+
+00:24:12.880 --> 00:24:14.919
+And it's going to work just out of the box
+
+00:24:14.920 --> 00:24:16.399
+because of the saveplace
+
+00:24:16.400 --> 00:24:18.999
+package in Emacs that is built in.
+
+00:24:19.000 --> 00:24:20.919
+We also have imenu integration
+
+00:24:20.920 --> 00:24:22.479
+for table of contents.
+
+00:24:22.480 --> 00:24:26.719
+So if you see this, this is imenu
+
+00:24:26.720 --> 00:24:28.679
+and you can scroll through the contents
+
+00:24:28.680 --> 00:24:30.559
+just like you scroll through any imenu.
+
+00:24:30.560 --> 00:24:39.499
+You can also do it in the menu bar by clicking.
+
+00:24:39.500 --> 00:24:40.679
+It works just as nice.
+
+00:24:40.680 --> 00:24:42.739
+We also have something like
+
+00:24:42.740 --> 00:24:44.799
+the outline mode that pdf-tools has.
+
+00:24:44.800 --> 00:24:48.039
+So if you press O in a document,
+
+00:24:48.040 --> 00:24:49.959
+it's going to give you this outline.
+
+00:24:49.960 --> 00:24:53.399
+And these are buttons that are clickable.
+
+00:24:53.400 --> 00:24:54.439
+You can click them.
+
+00:24:54.440 --> 00:24:56.519
+You can press Enter at them.
+
+00:24:56.520 --> 00:25:00.359
+And this is the menu bar item that I was looking at.
+
+00:25:00.360 --> 00:25:01.999
+If you click here, index,
+
+00:25:02.000 --> 00:25:03.279
+it's going to show you
+
+00:25:03.280 --> 00:25:05.339
+the exact same thing
+
+00:25:05.340 --> 00:25:10.339
+but in a different interface.
+
+NOTE (Naive) dark mode
+
+00:25:10.340 --> 00:25:15.259
+We also have a naive dark mode,
+
+00:25:15.260 --> 00:25:17.799
+which is not really as nice as
+
+00:25:17.800 --> 00:25:18.599
+we would like it to be,
+
+00:25:18.600 --> 00:25:20.799
+and dark mode fanatics
+
+00:25:20.800 --> 00:25:22.199
+I'm sure will have issues with it,
+
+00:25:22.200 --> 00:25:24.199
+but we're going to improve it in time.
+
+00:25:24.200 --> 00:25:27.379
+For now, this is what we have.
+
+00:25:27.380 --> 00:25:30.359
+And it can be enabled per document,
+
+00:25:30.360 --> 00:25:33.099
+so you can have one, like,
+
+00:25:33.100 --> 00:25:34.879
+one document that is in dark mode,
+
+00:25:34.880 --> 00:25:36.439
+but another one that is not.
+
+00:25:36.440 --> 00:25:39.279
+That is nice to have.
+
+00:25:39.280 --> 00:25:42.679
+Eventually we're going to work on more themes.
+
+00:25:42.680 --> 00:25:46.479
+You should be able to actually integrate it
+
+00:25:46.480 --> 00:25:49.439
+with Emacs themes as much as possible.
+
+00:25:49.440 --> 00:25:52.679
+You can make it default so that
+
+00:25:52.680 --> 00:25:54.839
+it inherits colors from the Emacs theme.
+
+00:25:54.840 --> 00:25:56.359
+That is one of the things
+
+00:25:56.360 --> 00:26:01.139
+that we also have planned.
+
+NOTE Challenges and further improvements
+
+00:26:01.140 --> 00:26:03.439
+We did face a bunch of challenges
+
+00:26:03.440 --> 00:26:05.519
+while trying to implement these features.
+
+00:26:05.520 --> 00:26:07.519
+One of the initial challenges was that
+
+00:26:07.520 --> 00:26:09.319
+SVGs were actually a bad idea.
+
+00:26:09.320 --> 00:26:12.159
+They're huge, especially in scanned PDFs,
+
+00:26:12.160 --> 00:26:14.679
+and they make things much slower.
+
+00:26:14.680 --> 00:26:18.119
+So we chose to actually have PPMs,
+
+00:26:18.120 --> 00:26:24.099
+which is the simplest image format ever possible.
+
+00:26:24.100 --> 00:26:26.439
+Now, it was also very difficult
+
+00:26:26.440 --> 00:26:29.559
+to make reader-mode be window-specific.
+
+00:26:29.560 --> 00:26:31.559
+So, you know, while you're scrolling
+
+00:26:31.560 --> 00:26:34.279
+the same document in one window,
+
+00:26:34.280 --> 00:26:36.199
+the other window with the same document
+
+00:26:36.200 --> 00:26:37.039
+should not change.
+
+00:26:37.040 --> 00:26:39.079
+We should be able to have multiple pages
+
+00:26:39.080 --> 00:26:42.319
+in different windows of the same document.
+
+00:26:42.320 --> 00:26:44.679
+That was very difficult
+
+00:26:44.680 --> 00:26:46.679
+because as I told you about the cache,
+
+00:26:46.680 --> 00:26:50.599
+the cache works in an idiosyncratic manner
+
+00:26:50.600 --> 00:26:54.079
+and we needed to make it so that each window
+
+00:26:54.080 --> 00:26:56.559
+will have its own cache
+
+00:26:56.560 --> 00:27:01.199
+instead of having a global cache for each file.
+
+00:27:01.200 --> 00:27:03.799
+That took some rewrite.
+
+00:27:03.800 --> 00:27:06.879
+And now, because we needed to do
+
+00:27:06.880 --> 00:27:07.799
+this sort of multithreading,
+
+00:27:07.800 --> 00:27:08.999
+system-level multithreading,
+
+00:27:09.000 --> 00:27:10.919
+we needed to use
+
+00:27:10.920 --> 00:27:13.039
+a specific package of MuPDF
+
+00:27:13.040 --> 00:27:16.439
+that had a bug for this which got fixed.
+
+00:27:16.440 --> 00:27:20.719
+And that's 1.26.0.
+
+00:27:20.720 --> 00:27:23.336
+Because we did that,
+
+00:27:23.337 --> 00:27:26.462
+a lot of the GNU/Linux distributions did not
+
+00:27:26.463 --> 00:27:28.871
+really have this latest package.
+
+00:27:28.872 --> 00:27:30.771
+So we had to actually
+
+00:27:30.772 --> 00:27:33.804
+package it in-tree.
+
+00:27:33.805 --> 00:27:36.971
+as a git sub-module.
+
+00:27:36.972 --> 00:27:40.737
+That was a horror! But eventually... now
+
+00:27:40.738 --> 00:27:43.604
+I think most GNU/Linux distributions
+
+00:27:43.605 --> 00:27:46.340
+already have this [version].
+
+00:27:46.341 --> 00:27:48.639
+The upcoming features that we have planned
+
+00:27:48.640 --> 00:27:52.799
+are the first one is that we need to rewrite
+
+00:27:52.800 --> 00:27:55.359
+the display mechanism entirely from scratch
+
+00:27:55.360 --> 00:27:57.559
+to use a tiled rendering approach.
+
+00:27:57.560 --> 00:27:59.999
+So right now we just take an image
+
+00:28:00.000 --> 00:28:02.959
+and display it inside an Emacs buffer
+
+00:28:02.960 --> 00:28:03.959
+just like that.
+
+00:28:03.960 --> 00:28:08.759
+But it will be changed so that the image
+
+00:28:08.760 --> 00:28:10.759
+will be displayed in the tiled manner
+
+00:28:10.760 --> 00:28:12.479
+so there will be multiple tiles
+
+00:28:12.480 --> 00:28:14.719
+but it'll be pixel perfect
+
+00:28:14.720 --> 00:28:16.399
+so you won't really see a difference.
+
+00:28:16.400 --> 00:28:19.839
+The reason to do this is to implement features
+
+00:28:19.840 --> 00:28:20.999
+for text selection, actually.
+
+00:28:21.000 --> 00:28:24.239
+So we can't really do text selection
+
+00:28:24.240 --> 00:28:27.079
+without running into a bunch of memory
+
+00:28:27.080 --> 00:28:29.999
+and other issues latency issues
+
+00:28:30.000 --> 00:28:33.019
+if we don't do tiling.
+
+00:28:33.020 --> 00:28:35.679
+So we need to do those two things,
+
+00:28:35.680 --> 00:28:38.879
+they are at the highest priority right now.
+
+00:28:38.880 --> 00:28:40.279
+And then, once we're done with that,
+
+00:28:40.280 --> 00:28:42.279
+we're going to support annotations,
+
+00:28:42.280 --> 00:28:45.439
+highlighting, everything that you're used to
+
+00:28:45.440 --> 00:28:47.319
+in pdf-tools and org-noter.
+
+00:28:47.320 --> 00:28:50.119
+And once we're done with that,
+
+00:28:50.120 --> 00:28:55.019
+we're going to also integrate with AucTeX and SyncTeX.
+
+00:28:55.020 --> 00:28:58.519
+Because right now, when a PDF gets updated,
+
+00:28:58.520 --> 00:29:00.239
+especially a LaTeX PDF,
+
+00:29:00.240 --> 00:29:03.437
+since there is no SyncTeX integration,
+
+00:29:03.438 --> 00:29:05.771
+it can't really do it nicely
+
+00:29:05.772 --> 00:29:08.660
+and it sometimes even crashes Emacs.
+
+00:29:08.661 --> 00:29:11.537
+So that's something that
+
+00:29:11.538 --> 00:29:14.271
+we will be planning to implement.
+
+NOTE What Emacs can learn?
+
+00:29:14.272 --> 00:29:16.159
+Now, from this experiment,
+
+00:29:16.160 --> 00:29:17.919
+what exactly can Emacs,
+
+00:29:17.920 --> 00:29:20.519
+the Emacs core devs and others
+
+00:29:20.520 --> 00:29:22.399
+who are building packages can learn?
+
+00:29:22.400 --> 00:29:24.919
+Well, the first thing is that all of this
+
+00:29:24.920 --> 00:29:27.159
+should not be really this difficult
+
+00:29:27.160 --> 00:29:30.359
+because all we're asking from Emacs
+
+00:29:30.360 --> 00:29:32.439
+is to display images in real-time
+
+00:29:32.440 --> 00:29:36.279
+and update them in real-time.
+
+00:29:36.280 --> 00:29:37.759
+That should not be that difficult
+
+00:29:37.760 --> 00:29:40.279
+of a thing to do, but apparently it is.
+
+00:29:40.280 --> 00:29:43.279
+And that's why Emacs's graphical interface
+
+00:29:43.280 --> 00:29:47.959
+needs to be more modular, more composable,
+
+00:29:47.960 --> 00:29:50.999
+and flexible for real-time graphics.
+
+00:29:51.000 --> 00:29:54.219
+If it is supposed to have things like,
+
+00:29:54.220 --> 00:29:56.179
+again, a document reader,
+
+00:29:56.180 --> 00:29:57.279
+something like a video editor,
+
+00:29:57.280 --> 00:29:58.239
+and something like that,
+
+00:29:58.980 --> 00:30:00.479
+Emacs's graphical interface
+
+00:30:00.480 --> 00:30:05.239
+needs to grow and be more mature.
+
+00:30:05.240 --> 00:30:06.239
+One of the things
+
+00:30:06.240 --> 00:30:08.079
+that's stopping it from doing that
+
+00:30:08.080 --> 00:30:10.319
+is actually Emacs's overlay functionality.
+
+00:30:10.320 --> 00:30:13.939
+So right now, the way we display
+
+00:30:13.940 --> 00:30:16.519
+an image in a buffer
+
+00:30:16.520 --> 00:30:18.900
+is using an overlay,
+
+00:30:18.901 --> 00:30:22.019
+actually multiple overlays.
+
+00:30:22.020 --> 00:30:25.839
+Overlays are static in the sense that
+
+00:30:25.840 --> 00:30:29.739
+if I attach to one image to one overlay,
+
+00:30:29.740 --> 00:30:34.039
+I need to have an entirely different image
+
+00:30:34.040 --> 00:30:37.199
+updated for that overlay.
+
+00:30:37.200 --> 00:30:39.639
+So I need to create another different image,
+
+00:30:39.640 --> 00:30:41.179
+change it in the memory,
+
+00:30:41.180 --> 00:30:43.639
+and then display it to update it.
+
+00:30:43.640 --> 00:30:46.639
+I can't change the image data
+
+00:30:46.640 --> 00:30:49.239
+in real time of the overlay.
+
+00:30:49.240 --> 00:30:53.999
+And that is a big issue.
+
+00:30:54.000 --> 00:30:56.259
+I've actually made an emacs-devel
+
+00:30:56.260 --> 00:30:58.279
+mailing list thread about it.
+
+00:30:58.280 --> 00:31:01.119
+I talked to Eli about it as well.
+
+00:31:01.120 --> 00:31:04.639
+And he said there's a possibility
+
+00:31:04.640 --> 00:31:05.359
+that this can be changed,
+
+00:31:05.360 --> 00:31:06.959
+but it's going to take
+
+00:31:06.960 --> 00:31:09.919
+a certain amount of rewrite.
+
+00:31:09.920 --> 00:31:12.319
+There's also issues with Emacs GC.
+
+00:31:12.320 --> 00:31:14.639
+Emacs GC sometimes leaks memory
+
+00:31:14.640 --> 00:31:16.439
+when you update images too quickly.
+
+00:31:16.440 --> 00:31:18.599
+That is, when you have a bunch of images
+
+00:31:18.600 --> 00:31:21.359
+that are getting churned out too quickly,
+
+00:31:21.360 --> 00:31:23.039
+Emacs GC starts leaking
+
+00:31:23.040 --> 00:31:25.159
+and it just goes up to
+
+00:31:25.160 --> 00:31:29.679
+a huge number of gigabytes in RAM.
+
+00:31:29.680 --> 00:31:32.399
+That's also a huge problem.
+
+00:31:32.400 --> 00:31:33.759
+The dynamic module API,
+
+00:31:33.760 --> 00:31:37.139
+the emacs-module.h header,
+
+00:31:37.140 --> 00:31:38.799
+needs to have more helpers.
+
+00:31:38.800 --> 00:31:41.719
+It's really bare bones,
+
+00:31:41.720 --> 00:31:43.439
+and I like that it is bare bones
+
+00:31:43.440 --> 00:31:44.999
+so that other languages can use it,
+
+00:31:45.000 --> 00:31:46.959
+but at the same time, I think
+
+00:31:46.960 --> 00:31:47.879
+it'll be really good
+
+00:31:47.880 --> 00:31:49.839
+if we can have some helpers
+
+00:31:49.840 --> 00:31:53.879
+that can do better memory interaction,
+
+00:31:53.880 --> 00:31:57.259
+like strings and so on,
+
+00:31:57.260 --> 00:32:00.379
+which we also faced some issues with.
+
+00:32:00.380 --> 00:32:02.319
+Emacs's fractional scaling system
+
+00:32:02.320 --> 00:32:05.359
+seems to be broken across different toolkits.
+
+00:32:05.360 --> 00:32:10.999
+We have bug reports that say in pgtk in Wayland,
+
+00:32:11.000 --> 00:32:13.559
+something seems to render differently
+
+00:32:13.560 --> 00:32:17.259
+because they have fractional scaling enabled.
+
+00:32:17.260 --> 00:32:18.439
+So that's something
+
+00:32:18.440 --> 00:32:21.239
+that I think Emacs, overall,
+
+00:32:21.240 --> 00:32:24.359
+I think Emacs needs to focus on improving
+
+00:32:24.360 --> 00:32:28.239
+the graphical interface pipeline
+
+00:32:28.240 --> 00:32:32.299
+to be a much more mature one.
+
+NOTE Contributing to the development
+
+00:32:32.300 --> 00:32:34.239
+And finally, how can you contribute
+
+00:32:34.240 --> 00:32:35.799
+to the development of Emacs Reader?
+
+00:32:35.800 --> 00:32:37.359
+Well, we are on Codeberg.
+
+00:32:37.360 --> 00:32:40.279
+We are not on GitHub, sorry.
+
+00:32:40.280 --> 00:32:41.639
+You can go there,
+
+00:32:41.640 --> 00:32:43.079
+you can look through the issues
+
+00:32:43.080 --> 00:32:45.279
+and send us a PR if you're interested.
+
+00:32:45.280 --> 00:32:46.879
+The next major release
+
+00:32:46.880 --> 00:32:49.839
+is going to go to GNU ELPA.
+
+00:32:49.840 --> 00:32:52.259
+Finally, we are not yet at GNU ELPA,
+
+00:32:52.260 --> 00:32:54.439
+so you can't really do M-x package-install
+
+00:32:54.440 --> 00:32:56.119
+and install our package.
+
+00:32:56.120 --> 00:32:58.199
+you would need to install it
+
+00:32:58.200 --> 00:33:04.939
+through use-package :vc.
+
+00:33:04.940 --> 00:33:07.499
+And since we're going to go to GNU ELPA,
+
+00:33:07.500 --> 00:33:09.119
+we request you to assign
+
+00:33:09.120 --> 00:33:10.519
+your copyright to Emacs
+
+00:33:10.520 --> 00:33:13.959
+because GNU ELPA is essentially part of GNU Emacs.
+
+00:33:13.960 --> 00:33:16.719
+So you would need to do copyright assignment
+
+00:33:16.720 --> 00:33:20.579
+if you make non-trivial contribution.
+
+00:33:20.580 --> 00:33:22.479
+You can join us at IRC
+
+00:33:22.480 --> 00:33:24.359
+at #phi-mu-lambda.
+
+00:33:24.360 --> 00:33:27.199
+And I also stream the development
+
+00:33:27.200 --> 00:33:28.039
+of this package
+
+00:33:28.040 --> 00:33:29.839
+bi-weekly on Sundays
+
+00:33:29.840 --> 00:33:31.639
+at PeerTube at the following channel.
+
+00:33:31.640 --> 00:33:35.519
+Feel free to join us.
+
+NOTE Acknowledgements
+
+00:33:35.520 --> 00:33:38.499
+Finally, I want to thank Tushar,
+
+00:33:38.500 --> 00:33:40.639
+who has been persistently contributing
+
+00:33:40.640 --> 00:33:42.839
+to the project since 0.1.0,
+
+00:33:42.840 --> 00:33:46.519
+and I'm very, very thankful for him,
+
+00:33:46.520 --> 00:33:47.759
+for his suggestions,
+
+00:33:47.760 --> 00:33:50.879
+and for his code contributions as well.
+
+00:33:50.880 --> 00:33:53.319
+I would also like to thank Prom,
+
+00:33:53.320 --> 00:33:55.799
+who fixed a major bug
+
+00:33:55.800 --> 00:33:56.859
+in the Windows build,
+
+00:33:56.860 --> 00:33:58.839
+since I don't really use Windows anymore,
+
+00:33:58.840 --> 00:33:59.919
+so that was really nice,
+
+00:33:59.920 --> 00:34:05.459
+and for Teeoius, for fixing a pthread bug.
+
+00:34:05.460 --> 00:34:06.919
+I would also like to thank others
+
+00:34:06.920 --> 00:34:09.559
+who helped fix little things,
+
+00:34:09.560 --> 00:34:13.179
+who come to the stream to chat,
+
+00:34:13.180 --> 00:34:16.599
+who sort of see me bang my head
+
+00:34:16.600 --> 00:34:19.239
+across these C memory bugs.
+
+00:34:19.240 --> 00:34:21.599
+So thank you to all of those.
+
+00:34:21.600 --> 00:34:24.399
+And thank you finally to the viewers
+
+00:34:24.400 --> 00:34:28.079
+and to EmacsConf organizers as well.
+
+00:34:28.080 --> 00:34:31.939
+This is a splendid opportunity.
+
+00:34:31.940 --> 00:34:37.280
+Thank you.
diff --git a/2025/captions/emacsconf-2025-reference--emacs-as-a-fullyfledged-reference-manager--vidianos-giannitsis--answers.vtt b/2025/captions/emacsconf-2025-reference--emacs-as-a-fullyfledged-reference-manager--vidianos-giannitsis--answers.vtt
new file mode 100644
index 00000000..c41a24db
--- /dev/null
+++ b/2025/captions/emacsconf-2025-reference--emacs-as-a-fullyfledged-reference-manager--vidianos-giannitsis--answers.vtt
@@ -0,0 +1,1015 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:01.381
+So the first question,
+
+00:00:01.382 --> 00:00:05.461
+have you tried ivy-bibtex or bibtex-completion earlier
+
+00:00:05.462 --> 00:00:06.524
+and how it compares to eBib?
+
+00:00:06.525 --> 00:00:09.941
+Well, I would say that I use both.
+
+00:00:09.942 --> 00:00:14.901
+I don't think there is very much a comparison
+
+00:00:14.902 --> 00:00:18.661
+because for me, they're achieving different goals.
+
+00:00:18.662 --> 00:00:24.501
+When I want to just very quickly find the paper
+
+00:00:24.502 --> 00:00:28.621
+in the entirety of the literature,
+
+00:00:28.622 --> 00:00:34.701
+I can just go here and open ivy-bibtex and see it.
+
+00:00:34.702 --> 00:00:36.661
+Bibtex now needs to parse my bib files,
+
+00:00:36.662 --> 00:00:38.781
+so it may take a second.
+
+00:00:38.782 --> 00:00:41.581
+Yeah, so if I want to just search, I'll do this.
+
+00:00:41.582 --> 00:00:46.461
+If I want a bigger view, then I can open eBib,
+
+00:00:46.462 --> 00:00:49.661
+but I don't use eBib so much as a tool
+
+00:00:49.662 --> 00:00:54.381
+to find just one literature. I use it for other purposes.
+
+00:00:54.382 --> 00:00:58.501
+So I think they're not really mutually exclusive,
+
+00:00:58.502 --> 00:01:00.941
+like you can use both.
+
+00:01:00.942 --> 00:01:04.641
+And they don't think that the features that one provides
+
+00:01:04.642 --> 00:01:08.821
+are something that the other also provides.
+
+00:01:08.822 --> 00:01:13.381
+They're different kind of goals for me.
+
+00:01:13.382 --> 00:01:15.341
+Also, for the answers, is it OK
+
+00:01:15.342 --> 00:01:20.741
+if I don't write anything down and I can just write them
+
+00:01:20.742 --> 00:01:23.741
+After, when I have time, and I'll just talk.
+
+00:01:23.742 --> 00:01:27.861
+Yeah, that's OK. We'll transcribe all the answers later.
+
+00:01:27.862 --> 00:01:32.541
+So you can just go ahead and talk.
+
+00:01:32.542 --> 00:01:34.301
+And do you find showing abstract
+
+00:01:34.302 --> 00:01:36.661
+on your navigation panel helpful?
+
+00:01:36.662 --> 00:01:38.461
+I always delete the abstract info,
+
+00:01:38.462 --> 00:01:40.421
+and my bib files make things more concise.
+
+00:01:40.422 --> 00:01:44.981
+So for me, I think it is helpful to see the abstract.
+
+00:01:44.982 --> 00:01:50.861
+I think that if you're in a regular screen,
+
+00:01:50.862 --> 00:01:52.941
+you have the space to have that.
+
+00:01:52.942 --> 00:01:57.421
+And yeah, for example, if I go again here,
+
+00:01:57.422 --> 00:02:00.021
+it's kind of indeed a bit more,
+
+00:02:00.022 --> 00:02:01.741
+a bit longer than it can be.
+
+00:02:01.742 --> 00:02:09.341
+And also you find a bigger abstract somewhere.
+
+00:02:09.342 --> 00:02:10.421
+It may be more space,
+
+00:02:10.422 --> 00:02:16.381
+but like, for example, this, yeah, this is a big abstract.
+
+00:02:16.382 --> 00:02:19.181
+And for example, yeah, this takes a bit more space,
+
+00:02:19.182 --> 00:02:23.021
+but I find it easy because the only case
+
+00:02:23.022 --> 00:02:25.901
+where I'm actually looking at this panel
+
+00:02:25.902 --> 00:02:30.581
+and trying to see things is when I'm going to be either,
+
+00:02:30.582 --> 00:02:33.861
+is when I'm going to be trying to find something
+
+00:02:33.862 --> 00:02:37.141
+that I don't remember the title to search immediately.
+
+00:02:37.142 --> 00:02:38.581
+And if you don't remember the title
+
+00:02:38.582 --> 00:02:39.781
+and you're trying to search,
+
+00:02:39.782 --> 00:02:43.261
+the abstract will be a way
+
+00:02:43.262 --> 00:02:49.221
+that helps you search better maybe.
+
+00:02:49.222 --> 00:02:51.701
+and also the other thing they use
+
+00:02:51.702 --> 00:02:54.981
+is also the small little descriptions
+
+00:02:54.982 --> 00:02:59.261
+I add in the note entries to help me
+
+00:02:59.262 --> 00:03:03.381
+but I think that the abstract is nice to be there
+
+00:03:03.382 --> 00:03:05.141
+in case you don't remember
+
+00:03:05.142 --> 00:03:07.541
+to find something from the title
+
+00:03:07.542 --> 00:03:08.581
+or from your notes
+
+00:03:08.582 --> 00:03:10.581
+and just need something more general.
+
+00:03:10.582 --> 00:03:16.621
+So yes it can be large and not always convenient,
+
+00:03:16.622 --> 00:03:20.181
+but I generally like it being there
+
+00:03:20.182 --> 00:03:29.421
+in case I need it for anything. Then the next question.
+
+00:03:29.422 --> 00:03:34.381
+Also, if any question is not fully answered by what I'm saying,
+
+00:03:34.382 --> 00:03:36.941
+feel free to add more to your question
+
+00:03:36.942 --> 00:03:39.501
+and we can discuss more. I don't have a problem.
+
+00:03:39.502 --> 00:03:45.621
+So for the next one, yeah, I copied this from IRC
+
+00:03:45.622 --> 00:03:49.141
+because I prefer to answer it orally
+
+00:03:49.142 --> 00:03:53.261
+because it's a bit longer than the others answering in IRC.
+
+00:03:53.262 --> 00:03:55.261
+So it seems that there's a meta problem here.
+
+00:03:55.262 --> 00:03:57.621
+There's too much information.
+
+00:03:57.622 --> 00:04:02.221
+And does this tool reduce the cognitive load?
+
+00:04:02.222 --> 00:04:09.061
+Well, for me, it does reduce the cognitive load because
+
+00:04:09.062 --> 00:04:11.261
+Indeed, there's a lot of information,
+
+00:04:11.262 --> 00:04:18.661
+but that's how managing literature works, essentially.
+
+00:04:18.662 --> 00:04:21.061
+It necessarily has to have a lot of cognitive load,
+
+00:04:21.062 --> 00:04:22.981
+because you are trying to
+
+00:04:22.982 --> 00:04:25.021
+process more information
+
+00:04:25.022 --> 00:04:28.221
+than your brain can process to begin with.
+
+00:04:28.222 --> 00:04:31.301
+So you really need a tool
+
+00:04:31.302 --> 00:04:36.581
+to help you not keep everything in your mind,
+
+00:04:36.582 --> 00:04:40.461
+process the information externally.
+
+00:04:40.462 --> 00:04:44.181
+They do think that the way I do this, for me at least,
+
+00:04:44.182 --> 00:04:49.661
+it does help with reducing cognitive load.
+
+00:04:49.662 --> 00:04:51.061
+Because I'm here, for example,
+
+00:04:51.062 --> 00:04:55.221
+if I'm looking for something, I do not remember,
+
+00:04:55.222 --> 00:05:01.501
+I've read most of these papers not too many months ago,
+
+00:05:01.502 --> 00:05:02.701
+so a lot of them are recent.
+
+00:05:02.702 --> 00:05:06.181
+If I don't look at what I have written for it,
+
+00:05:06.182 --> 00:05:08.821
+I do not remember anything.
+
+00:05:08.822 --> 00:05:11.941
+So indeed, you have this kind of cognitive load
+
+00:05:11.942 --> 00:05:17.341
+that I cannot remember everything.
+
+00:05:17.342 --> 00:05:23.101
+But on the other hand, I think the tool helps
+
+00:05:23.102 --> 00:05:26.861
+because my notes are what keeps, what I want to remember.
+
+00:05:26.862 --> 00:05:30.981
+So it doesn't stay in my mind, it stays in the text.
+
+00:05:30.982 --> 00:05:35.221
+And regarding things like the reading list,
+
+00:05:35.222 --> 00:05:39.021
+I think also for me reduces the cognitive load
+
+00:05:39.022 --> 00:05:42.821
+because I will mostly remember
+
+00:05:42.822 --> 00:05:46.341
+what the papers I have in that list are,
+
+00:05:46.342 --> 00:05:50.901
+but just sorting them by priority helps me
+
+00:05:50.902 --> 00:05:54.621
+Okay, this was the thing I wanted to do next.
+
+00:05:54.622 --> 00:06:00.301
+Oh, sorry. This is the thing I wanted to do next.
+
+00:06:00.302 --> 00:06:02.501
+And I didn't have to remember
+
+00:06:02.502 --> 00:06:03.901
+that this is what I want to do next.
+
+00:06:03.902 --> 00:06:06.821
+I just had it, I saw it there.
+
+00:06:06.822 --> 00:06:11.261
+So for me, it reduces cognitive load,
+
+00:06:11.262 --> 00:06:16.981
+but the problem of too much information is 100% there
+
+00:06:16.982 --> 00:06:19.541
+because there's objectively
+
+00:06:19.542 --> 00:06:21.021
+too much information
+
+00:06:21.022 --> 00:06:23.181
+when you're working with literature
+
+00:06:23.182 --> 00:06:35.221
+that's by nature and yeah essentially that
+
+00:06:35.222 --> 00:06:36.381
+that's for me the thing
+
+00:06:36.382 --> 00:06:41.141
+that i'm i'm just putting this information elsewhere
+
+00:06:41.142 --> 00:06:44.941
+so i don't have to keep it in my mind
+
+00:06:44.942 --> 00:06:52.421
+Okay, so when you download a new article,
+
+00:06:52.422 --> 00:06:54.941
+how do you integrate the file to the database?
+
+00:06:54.942 --> 00:06:58.261
+So, for example, do you remove
+
+00:06:58.262 --> 00:06:59.741
+and rename the file manually?
+
+00:06:59.742 --> 00:07:11.781
+So, for me, I also briefly showed that in the talk,
+
+00:07:11.782 --> 00:07:13.781
+but I did that very quickly,
+
+00:07:13.782 --> 00:07:16.581
+so it's understandable that it wasn't there.
+
+00:07:16.582 --> 00:07:21.501
+Essentially, And when I download the article,
+
+00:07:21.502 --> 00:07:27.421
+then I will open Ivy Bib Tech and find the article.
+
+00:07:27.422 --> 00:07:31.581
+For example, this one is the first.
+
+00:07:31.582 --> 00:07:34.941
+You can open the menu in Ivy Bib Tech.
+
+00:07:34.942 --> 00:07:40.061
+It's with an alt O, and then it will give you this menu.
+
+00:07:40.062 --> 00:07:44.261
+And from here, it will say, add PDF to library.
+
+00:07:44.262 --> 00:07:47.261
+And then it will ask from where do you want to add it?
+
+00:07:47.262 --> 00:07:49.941
+I don't recommend the URL
+
+00:07:49.942 --> 00:07:53.701
+because it doesn't download it properly sometimes.
+
+00:07:53.702 --> 00:07:56.981
+As I also mentioned that with Zotra,
+
+00:07:56.982 --> 00:08:00.301
+the URLs downloading things,
+
+00:08:00.302 --> 00:08:02.141
+especially with academic papers
+
+00:08:02.142 --> 00:08:05.341
+that are sometimes paywalled, it doesn't want to work well.
+
+00:08:05.342 --> 00:08:07.781
+So I will download the paper
+
+00:08:07.782 --> 00:08:10.981
+and then you can just press the F here for file.
+
+00:08:10.982 --> 00:08:13.421
+And then you find the file.
+
+00:08:13.422 --> 00:08:20.861
+and for example for me all my PDFs are in this folder
+
+00:08:20.862 --> 00:08:23.181
+it's still named Zotero PDFs
+
+00:08:23.182 --> 00:08:25.621
+from when it was Zotero saving them now
+
+00:08:25.622 --> 00:08:28.341
+Zotero no longer saves them
+
+00:08:28.342 --> 00:08:30.381
+but I'm too bored to change the name
+
+00:08:30.382 --> 00:08:33.501
+and then you just find the paper you want
+
+00:08:33.502 --> 00:08:37.261
+so you can see there is an endless list of papers here
+
+00:08:37.262 --> 00:08:42.821
+and it then will automatically rename it
+
+00:08:42.822 --> 00:08:56.781
+to have the title of the author, a small title and a date.
+
+00:08:56.782 --> 00:09:01.821
+I believe the naming is also configurable,
+
+00:09:01.822 --> 00:09:08.941
+but I have this notation in my config for many years now
+
+00:09:08.942 --> 00:09:11.181
+because that's how everything
+
+00:09:11.182 --> 00:09:17.981
+expects to find it, essentially. I do not then move it.
+
+00:09:17.982 --> 00:09:19.341
+It's stored in that folder.
+
+00:09:19.342 --> 00:09:22.501
+I store all my PDFs in that specific folder.
+
+00:09:22.502 --> 00:09:27.541
+And then Emacs knows that all PDFs
+
+00:09:27.542 --> 00:09:29.021
+should be found in that folder.
+
+00:09:29.022 --> 00:09:32.581
+And it then just looks for the name
+
+00:09:32.582 --> 00:09:33.981
+that it expects to find.
+
+00:09:33.982 --> 00:09:38.221
+And ivy-bibtex has renamed it automatically to that.
+
+00:09:38.222 --> 00:09:54.381
+Okay, I'll wait a bit to continue with that
+
+00:09:54.382 --> 00:09:59.801
+for moving to the next question.
+
+00:09:59.802 --> 00:10:02.301
+Yeah, ivy-bibtex has that functionality.
+
+00:10:02.302 --> 00:10:08.061
+And then annotations with e-readers.
+
+00:10:08.062 --> 00:10:12.781
+Viewing and taking an Emacs or Reader touchscreen,
+
+00:10:12.782 --> 00:10:16.501
+highlighting notes, noter, think would be an alternative,
+
+00:10:16.502 --> 00:10:18.301
+e-book annotation alternative.
+
+00:10:18.302 --> 00:10:25.981
+So, I do not use an e-reader, personally.
+
+00:10:25.982 --> 00:10:29.781
+The only thing that I have is my tablet,
+
+00:10:29.782 --> 00:10:34.981
+I can actually show you. It's this little thing here.
+
+00:10:34.982 --> 00:10:39.661
+It's a Chromebook.
+
+00:10:39.662 --> 00:10:42.381
+And the reason it's a Chromebook is that
+
+00:10:42.382 --> 00:10:44.621
+when I bought it a few years ago,
+
+00:10:44.622 --> 00:10:48.541
+it was the most viable alternative I could find
+
+00:10:48.542 --> 00:10:52.301
+that can run Linux as a tablet with good touchscreen.
+
+00:10:52.302 --> 00:10:55.021
+That was also a bit budget
+
+00:10:55.022 --> 00:10:57.821
+because there are some Linux tablets,
+
+00:10:57.822 --> 00:11:00.301
+but they were a bit too high cost
+
+00:11:00.302 --> 00:11:02.181
+for what I was looking back then.
+
+00:11:02.182 --> 00:11:07.501
+And this thing runs Linux essentially
+
+00:11:07.502 --> 00:11:10.421
+natively from the Chromebook.
+
+00:11:10.422 --> 00:11:14.581
+And I've installed Emacs there. It has all my config.
+
+00:11:14.582 --> 00:11:21.741
+And so if I want to take touchscreen notes, I do it there.
+
+00:11:21.742 --> 00:11:27.181
+But again, that is in Emacs. And it's mostly with PDFs.
+
+00:11:27.182 --> 00:11:31.181
+I'm not sure if it answers exactly the question.
+
+00:11:31.182 --> 00:11:35.221
+So if it's an e-reader, if it's, for example, a book,
+
+00:11:35.222 --> 00:11:39.661
+I know that if you have an EPUB,
+
+00:11:39.662 --> 00:11:42.221
+I think it's called the format for books,
+
+00:11:42.222 --> 00:11:44.701
+and Org-noter can also read that.
+
+00:11:44.702 --> 00:11:49.741
+So you could also open that file inside Emacs
+
+00:11:49.742 --> 00:11:51.541
+using Org-noter and take notes.
+
+00:11:51.542 --> 00:12:02.941
+But otherwise, If you're not
+
+00:12:02.942 --> 00:12:06.901
+reading everything in Emacs,
+
+00:12:06.902 --> 00:12:09.021
+then it's hard to pass annotations
+
+00:12:09.022 --> 00:12:11.581
+from outside Emacs to inside it,
+
+00:12:11.582 --> 00:12:15.461
+because of course you have less interoperability in that case.
+
+00:12:15.462 --> 00:12:22.621
+but I think Emacs is featureful enough
+
+00:12:22.622 --> 00:12:25.621
+to where you can do all your reading inside it.
+
+00:12:25.622 --> 00:12:30.141
+And Org-noter has a surprising amount of different formats
+
+00:12:30.142 --> 00:12:31.621
+where you can read things actually.
+
+00:12:31.622 --> 00:12:40.141
+I hope it was clear if you want more on that
+
+00:12:40.142 --> 00:12:45.901
+because I know it's a bit more a complex question, I guess,
+
+00:12:45.902 --> 00:12:47.701
+also with e-readers.
+
+00:12:47.702 --> 00:12:52.061
+And if it is in Emacs or not, feel free to add more.
+
+00:12:52.062 --> 00:12:56.901
+And how old do you feel
+
+00:12:56.902 --> 00:13:00.461
+about making notes on websites, PDF, videos?
+
+00:13:00.462 --> 00:13:05.741
+So I will agree with the other question
+
+00:13:05.742 --> 00:13:07.621
+that I answered here.
+
+00:13:07.622 --> 00:13:11.301
+If you can convert something to PDF,
+
+00:13:11.302 --> 00:13:13.621
+I prefer it because then
+
+00:13:13.622 --> 00:13:16.741
+you need to only worry about PDFs
+
+00:13:16.742 --> 00:13:19.941
+and it works better that way
+
+00:13:19.942 --> 00:13:21.981
+than having to annotate websites.
+
+00:13:21.982 --> 00:13:26.181
+There is, I believe, I should have it
+
+00:13:26.182 --> 00:13:27.661
+in my bookmarks somewhere.
+
+00:13:27.662 --> 00:13:32.381
+There is a, the org-roam protocol
+
+00:13:32.382 --> 00:13:36.621
+that allows you to take notes directly out of a website
+
+00:13:36.622 --> 00:13:39.421
+and it saves all the metadata of the website.
+
+00:13:39.422 --> 00:13:42.941
+I did look at it at some point,
+
+00:13:42.942 --> 00:13:47.781
+but I haven't really continued using it too much
+
+00:13:47.782 --> 00:13:53.541
+because I find that I don't often take notes
+
+00:13:53.542 --> 00:14:00.221
+from a website where I want the and more information
+
+00:14:00.222 --> 00:14:02.421
+than just either the link of the website
+
+00:14:02.422 --> 00:14:05.741
+or if I want the full text converting into a PDF.
+
+00:14:05.742 --> 00:14:07.261
+So I haven't really found
+
+00:14:07.262 --> 00:14:08.541
+a very big use case for it,
+
+00:14:08.542 --> 00:14:11.301
+but I know that Org-Roam protocol is a thing.
+
+00:14:11.302 --> 00:14:16.701
+And then for videos is a bit of a longer story
+
+00:14:16.702 --> 00:14:19.901
+because if you want to take notes on videos,
+
+00:14:19.902 --> 00:14:21.541
+that's a bit more complex.
+
+00:14:21.542 --> 00:14:28.181
+And I don't know of a way to do it in Emacs,
+
+00:14:28.182 --> 00:14:30.941
+but I also don't know of an effective way
+
+00:14:30.942 --> 00:14:34.421
+to take notes on videos using other tools.
+
+00:14:34.422 --> 00:14:39.901
+What I typically do if I'm following the video or something
+
+00:14:39.902 --> 00:14:44.461
+is that I will take notes of the more important things.
+
+00:14:44.462 --> 00:14:50.581
+I'll take notes of the more important things
+
+00:14:50.582 --> 00:14:52.381
+that I was listening in the video.
+
+00:14:52.382 --> 00:14:55.101
+And while I'm listening, I will take
+
+00:14:55.102 --> 00:14:57.581
+some ideal crude notes,
+
+00:14:57.582 --> 00:15:00.901
+not because I don't want to lose
+
+00:15:00.902 --> 00:15:03.981
+a lot of my attention during the,
+
+00:15:03.982 --> 00:15:09.781
+what I'm trying to learn by taking very good notes.
+
+00:15:09.782 --> 00:15:11.141
+So most of the time,
+
+00:15:11.142 --> 00:15:13.741
+those kinds of notes will be in paper,
+
+00:15:13.742 --> 00:15:16.181
+even just very simple, crude notes.
+
+00:15:16.182 --> 00:15:20.381
+And then without any timestamps or anything,
+
+00:15:20.382 --> 00:15:23.941
+because that's too complex for what I've done.
+
+00:15:23.942 --> 00:15:28.501
+And after watching, I will try to
+
+00:15:28.502 --> 00:15:31.421
+consolidate all my thoughts that I wrote down
+
+00:15:31.422 --> 00:15:36.061
+into some more permanent notes using Org Roam.
+
+00:15:36.062 --> 00:15:46.181
+And then like move on with that also look online
+
+00:15:46.182 --> 00:15:50.421
+if I noted that I want to look more on on this subject
+
+00:15:50.422 --> 00:15:52.821
+that was mentioned the video
+
+00:15:52.822 --> 00:15:53.821
+and I didn't fully understand it
+
+00:15:53.822 --> 00:15:57.381
+then I will try and look more and things like that
+
+00:15:57.382 --> 00:16:02.981
+so for me that's how I do it because I think that
+
+00:16:02.982 --> 00:16:05.661
+Annotating a video directly with timestamps
+
+00:16:05.662 --> 00:16:07.821
+and everything is a bit too complex.
+
+00:16:07.822 --> 00:16:09.501
+I don't know if you have
+
+00:16:09.502 --> 00:16:12.061
+any suggestions for working with that,
+
+00:16:12.062 --> 00:16:19.381
+but for me, it has been very troublesome.
+
+00:16:19.382 --> 00:16:22.341
+And then how do you add a new article from scratch,
+
+00:16:22.342 --> 00:16:25.301
+a PDF that you did not have in your bib file?
+
+00:16:25.302 --> 00:16:29.661
+How do you generate the bib entry metadata and abstract?
+
+00:16:29.662 --> 00:16:36.941
+So yeah, the package is called Zotra.
+
+00:16:36.942 --> 00:16:44.061
+I can also show it again. Let's find something.
+
+00:16:44.062 --> 00:16:49.861
+and can open up. Let's not do that.
+
+00:16:49.862 --> 00:16:53.981
+If I open it, I need to access it through my institution.
+
+00:16:53.982 --> 00:16:57.621
+So I will not open the link, but I can show you essentially
+
+00:16:57.622 --> 00:17:02.101
+you run Zotra add entry, this function,
+
+00:17:02.102 --> 00:17:10.421
+and it copies what you have currently in your, in your,
+
+00:17:10.422 --> 00:17:12.461
+what you have already copied right now
+
+00:17:12.462 --> 00:17:15.861
+it's the message I copied before for the Q&A
+
+00:17:15.862 --> 00:17:21.861
+but if you open a paper and have the URL copied
+
+00:17:21.862 --> 00:17:26.341
+it will immediately come here and will save everything
+
+00:17:26.342 --> 00:17:28.621
+and also as I mentioned there's the
+
+00:17:28.622 --> 00:17:31.301
+you can also download the patches from there
+
+00:17:31.302 --> 00:17:34.381
+but with paywalled articles doesn't always work well
+
+00:17:34.382 --> 00:17:40.261
+so I just do it manually
+
+00:17:40.262 --> 00:17:45.821
+Oh, system is running low on power. Give me just a second.
+
+00:17:45.822 --> 00:17:59.021
+So the computer doesn't turn off as we're speaking. Yes.
+
+00:17:59.022 --> 00:18:03.541
+So yeah, the, everything is added from scratch.
+
+00:18:03.542 --> 00:18:14.541
+Essentially you copy the URL and give it to Soletrend.
+
+00:18:14.542 --> 00:18:17.381
+It does everything. uh when you fact check every details
+
+00:18:17.382 --> 00:18:26.261
+for a bib entry your open names published journal
+
+00:18:26.262 --> 00:18:29.461
+doi stuff uh so i i generally don't do that
+
+00:18:29.462 --> 00:18:30.861
+oh yeah thanks for the person
+
+00:18:30.862 --> 00:18:35.101
+that added the link to the zocha
+
+00:18:35.102 --> 00:18:38.381
+i i wouldn't say that i fact check the details
+
+00:18:38.382 --> 00:18:40.901
+i assume that When they're added,
+
+00:18:40.902 --> 00:18:44.541
+they're actually correct.
+
+00:18:44.542 --> 00:18:49.741
+Have you actually had trouble with a tool
+
+00:18:49.742 --> 00:18:52.021
+that automatically adds them to add them wrong?
+
+00:18:52.022 --> 00:18:54.861
+I'm curious. I haven't really heard
+
+00:18:54.862 --> 00:18:59.421
+that happening too much.
+
+00:18:59.422 --> 00:19:01.861
+I've always thought that, yeah, if you do it manually,
+
+00:19:01.862 --> 00:19:04.621
+you need to fact check that you did it correctly.
+
+00:19:04.622 --> 00:19:06.461
+But I always assume that if you do it
+
+00:19:06.462 --> 00:19:09.301
+automatically through a tool,
+
+00:19:09.302 --> 00:19:11.661
+It should already be correct.
+
+00:19:11.662 --> 00:19:15.101
+And I don't remember ever having any trouble either
+
+00:19:15.102 --> 00:19:20.221
+when I was using Zotero before or now
+
+00:19:20.222 --> 00:19:24.101
+with the more Emacs based tools.
+
+00:19:24.102 --> 00:19:29.781
+I feel like the big entries are copied correctly.
+
+00:19:29.782 --> 00:19:35.101
+I haven't noticed this being incorrect.
+
+00:19:35.102 --> 00:19:40.181
+But I'm curious, do you have any point
+
+00:19:40.182 --> 00:19:44.661
+On that, I will keep in mind.
+
+00:19:44.662 --> 00:19:48.541
+Sometimes, DOI records are not exactly correct.
+
+00:19:48.542 --> 00:19:52.861
+For example, they can contain some very strange symbols.
+
+00:19:52.862 --> 00:20:01.901
+So that can happen sometimes. OK. Yeah. I don't know.
+
+00:20:01.902 --> 00:20:05.741
+I guess then if you want to fact check,
+
+00:20:05.742 --> 00:20:12.141
+it's probably the best to do it directly as it is added,
+
+00:20:12.142 --> 00:20:14.901
+like it's added, for example, here,
+
+00:20:14.902 --> 00:20:17.941
+and you can just directly, when you add it,
+
+00:20:17.942 --> 00:20:23.501
+find it and say, is everything correct here?
+
+00:20:23.502 --> 00:20:27.661
+Because I think that if you leave it for later,
+
+00:20:27.662 --> 00:20:31.381
+it will be much more of a mess.
+
+00:20:31.382 --> 00:20:33.181
+So for checking, I would just do it directly
+
+00:20:33.182 --> 00:20:47.261
+after I add it to the bit file.
+
+00:20:47.262 --> 00:20:50.621
+And let me see, is there anything else?
+
+00:20:50.622 --> 00:20:53.501
+I think one common way it can fail
+
+00:20:53.502 --> 00:20:56.381
+is when the metadata includes
+
+00:20:56.382 --> 00:20:59.581
+HTML tags for math, for example.
+
+00:20:59.582 --> 00:21:03.501
+And in some papers, for some journals, it can happen.
+
+00:21:03.502 --> 00:21:05.061
+So then you can imagine what happens
+
+00:21:05.062 --> 00:21:06.981
+when you try to put that citation
+
+00:21:06.982 --> 00:21:08.741
+into your references.
+
+00:21:08.742 --> 00:21:12.421
+That's going to be a mess.
+
+00:21:12.422 --> 00:21:17.501
+Yeah, okay. I didn't know, to be honest, so yeah.
+
+00:21:17.502 --> 00:21:27.101
+Thanks for the information.
+
+00:21:27.102 --> 00:21:29.501
+I think our graph has automatic cleaning
+
+00:21:29.502 --> 00:21:30.421
+of certain things
+
+00:21:30.422 --> 00:21:34.741
+for common errors in the metadata.
+
+00:21:34.742 --> 00:21:37.221
+How did you call that?
+
+00:21:37.222 --> 00:21:38.381
+I can note it down also here for the discussion.
+
+00:21:38.382 --> 00:21:45.861
+Oh, our graph. Or graph. Or graph. Yeah.
+
+00:21:45.862 --> 00:22:12.261
+Okay. Okay. I will put it down the pad.
+
+00:22:12.262 --> 00:22:14.141
+And I think the next talk,
+
+00:22:14.142 --> 00:22:18.461
+the live will move in the next minute anyways.
+
+00:22:18.462 --> 00:22:22.141
+And I see we're done with all the questions.
+
+00:22:22.142 --> 00:22:26.141
+So thank you everyone. I hope this was interesting.
+
+00:22:26.142 --> 00:22:28.501
+Thank you for giving me a lot of questions
+
+00:22:28.502 --> 00:22:31.461
+so we had to discuss for the whole time
+
+00:22:31.462 --> 00:22:34.541
+and we weren't just here sitting.
+
+00:22:34.542 --> 00:22:36.182
+And enjoy the rest of EmacsConf.
diff --git a/2025/captions/emacsconf-2025-reference--emacs-as-a-fullyfledged-reference-manager--vidianos-giannitsis--main--chapters.vtt b/2025/captions/emacsconf-2025-reference--emacs-as-a-fullyfledged-reference-manager--vidianos-giannitsis--main--chapters.vtt
new file mode 100644
index 00000000..dbd303e8
--- /dev/null
+++ b/2025/captions/emacsconf-2025-reference--emacs-as-a-fullyfledged-reference-manager--vidianos-giannitsis--main--chapters.vtt
@@ -0,0 +1,32 @@
+WEBVTT
+
+
+00:00:00.820 --> 00:01:43.599
+Introduction
+
+00:01:43.600 --> 00:04:00.919
+Capture
+
+00:04:00.920 --> 00:05:03.478
+Organizing
+
+00:05:03.479 --> 00:07:55.479
+Ebib
+
+00:07:55.480 --> 00:09:36.178
+Filters
+
+00:09:36.179 --> 00:12:50.539
+Dependent databases
+
+00:12:50.540 --> 00:15:02.439
+Reading lists
+
+00:15:02.440 --> 00:18:05.639
+Special org-roam-node-find
+
+00:18:05.640 --> 00:19:21.819
+Annotations
+
+00:19:21.820 --> 00:20:14.000
+Wrapping up
diff --git a/2025/captions/emacsconf-2025-reference--emacs-as-a-fullyfledged-reference-manager--vidianos-giannitsis--main.vtt b/2025/captions/emacsconf-2025-reference--emacs-as-a-fullyfledged-reference-manager--vidianos-giannitsis--main.vtt
new file mode 100644
index 00000000..33a06efa
--- /dev/null
+++ b/2025/captions/emacsconf-2025-reference--emacs-as-a-fullyfledged-reference-manager--vidianos-giannitsis--main.vtt
@@ -0,0 +1,1035 @@
+WEBVTT captioned by vidianos
+
+NOTE Introduction
+
+00:00:00.820 --> 00:00:03.079
+So, hello everyone, welcome to EmacsConf.
+
+00:00:03.080 --> 00:00:06.519
+My name is Vidianos, and I'm a PhD student in KU Leuven,
+
+00:00:06.520 --> 00:00:08.279
+and today I'm going to be showing you
+
+00:00:08.280 --> 00:00:12.679
+how I managed to use Emacs as a reference manager,
+
+00:00:12.680 --> 00:00:17.219
+replacing what was for me Zotero,
+
+00:00:17.220 --> 00:00:24.439
+to a fully fledged approach inside Emacs.
+
+00:00:24.440 --> 00:00:26.639
+So, what is my typical reference workflow?
+
+00:00:26.640 --> 00:00:28.479
+First I need to find literature,
+
+00:00:28.480 --> 00:00:30.439
+then I need to collect and organize it,
+
+00:00:30.440 --> 00:00:32.599
+which I originally did with Zotero,
+
+00:00:32.600 --> 00:00:36.611
+but now with Emacs centered tools
+
+00:00:36.612 --> 00:00:39.879
+such as zotra and ebib.
+
+00:00:39.880 --> 00:00:41.279
+Then I create a reading list.
+
+00:00:41.280 --> 00:00:43.439
+This is a new addition to my workflow
+
+00:00:43.440 --> 00:00:47.679
+I started doing after moving this approach to Emacs
+
+00:00:47.680 --> 00:00:50.119
+because now everything is well integrated.
+
+00:00:50.120 --> 00:00:53.839
+I have made a very nice reading list implementation
+
+00:00:53.840 --> 00:00:57.759
+inside org-roam which I am going to be showing today.
+
+00:00:57.760 --> 00:01:01.199
+Then obviously I need to read the literature, take notes,
+
+00:01:01.200 --> 00:01:04.239
+organize the notes, and ensure I am actually learning
+
+00:01:04.240 --> 00:01:06.539
+from what I am reading. This is then done through packages
+
+00:01:06.540 --> 00:01:09.159
+such as org-noter and org-roam
+
+00:01:09.160 --> 00:01:11.359
+and is not going to be the focus of this talk.
+
+00:01:11.360 --> 00:01:14.239
+I already gave a talk about this part of my workflow,
+
+00:01:14.240 --> 00:01:17.959
+which I've been doing for many years now.
+
+00:01:17.960 --> 00:01:20.439
+You can find that
+
+00:01:20.440 --> 00:01:23.239
+or you can find many other people's approaches
+
+00:01:23.240 --> 00:01:25.999
+to reading literature and taking notes
+
+00:01:26.000 --> 00:01:31.039
+as it is quite a popular topic in the Emacs community.
+
+00:01:31.040 --> 00:01:32.759
+Lastly, I will have a short section
+
+00:01:32.760 --> 00:01:37.039
+about how I ensure that I can recall the knowledge
+
+00:01:37.040 --> 00:01:39.679
+from this literature very easily
+
+00:01:39.680 --> 00:01:43.599
+through this reference management system.
+
+NOTE Capture
+
+00:01:43.600 --> 00:01:48.199
+So, how can we capture an article in Emacs?
+
+00:01:48.200 --> 00:01:52.099
+One of the most commonly known packages is doi-utils
+
+00:01:52.100 --> 00:01:58.879
+where doi-utils has a lot of useful things to do
+
+00:01:58.880 --> 00:02:03.519
+and one of them is to capture a paper,
+
+00:02:03.520 --> 00:02:06.459
+but you need a DOI, and for me, that is a bit inconvenient,
+
+00:02:06.460 --> 00:02:08.879
+because what I want to do is that
+
+00:02:08.880 --> 00:02:11.999
+I have a URL here of a paper,
+
+00:02:12.000 --> 00:02:16.519
+I want to just copy this URL, not copy the DOI,
+
+00:02:16.520 --> 00:02:23.199
+and be able to save it immediately to my bib file.
+
+00:02:23.200 --> 00:02:24.311
+And that can now be done
+
+00:02:24.312 --> 00:02:27.719
+through this function zotra-add-entry.
+
+00:02:27.720 --> 00:02:28.679
+And as you can see here,
+
+00:02:28.680 --> 00:02:31.079
+there is also a zotra-download-attachment
+
+00:02:31.080 --> 00:02:34.159
+that sometimes works, but not always.
+
+00:02:34.160 --> 00:02:35.879
+I don't personally recommend it.
+
+00:02:35.880 --> 00:02:39.599
+But the problem is that due to articles being
+
+00:02:39.600 --> 00:02:42.639
+locked behind paywalls in many cases,
+
+00:02:42.640 --> 00:02:45.639
+downloading attachments doesn't work
+
+00:02:45.640 --> 00:02:47.479
+through Emacs. Sometimes it doesn't work
+
+00:02:47.480 --> 00:02:51.119
+through Zotero. Sometimes you just need to go to the browser,
+
+00:02:51.120 --> 00:02:54.259
+say download PDF, and that's the only solution
+
+00:02:54.260 --> 00:02:58.399
+that will properly work.
+
+00:02:58.400 --> 00:03:01.519
+So how do I then add this to the paper?
+
+00:03:01.520 --> 00:03:04.711
+I need to find this paper that is here
+
+00:03:04.712 --> 00:03:05.879
+through ivy-bibtex.
+
+00:03:05.880 --> 00:03:10.239
+This is the bib file manager I use.
+
+00:03:10.240 --> 00:03:11.759
+There is also others like citar.
+
+00:03:11.760 --> 00:03:15.559
+I think citar has much better coding and integration
+
+00:03:15.560 --> 00:03:18.159
+with other packages, but I haven't really bothered
+
+00:03:18.160 --> 00:03:19.639
+to move from ivy-bibtex
+
+00:03:19.640 --> 00:03:24.439
+because it does basically everything I want perfectly.
+
+00:03:24.440 --> 00:03:28.279
+So I go here, say add pdf to library.
+
+00:03:28.280 --> 00:03:31.719
+I find where I saved it,
+
+00:03:31.720 --> 00:03:35.399
+and it will suggest to automatically name it something
+
+00:03:35.400 --> 00:03:37.445
+which is in full integration
+
+00:03:37.446 --> 00:03:40.919
+with the rest of my Emacs packages,
+
+00:03:40.920 --> 00:03:43.839
+and all the literature management stuff
+
+00:03:43.840 --> 00:03:46.799
+knows to find it with this exact name.
+
+00:03:46.800 --> 00:03:49.045
+So it iss saved and now
+
+00:03:49.046 --> 00:03:53.319
+when I try to create a file from this,
+
+00:03:53.320 --> 00:03:55.199
+which I will show later,
+
+00:03:55.200 --> 00:04:00.919
+you will see that the file will already appear there.
+
+NOTE Organizing
+
+00:04:00.920 --> 00:04:06.519
+So now let's go to organizing.
+
+00:04:06.520 --> 00:04:09.119
+Organizing in Zotero is typically done through a
+
+00:04:09.120 --> 00:04:10.519
+hierarchical folder structure.
+
+00:04:10.520 --> 00:04:14.999
+This is very familiar to most people and generally works,
+
+00:04:15.000 --> 00:04:19.519
+but being someone that takes notes using the Zettelkasten method,
+
+00:04:19.520 --> 00:04:24.319
+which has a fully flat hierarchy, nothing goes in folders,
+
+00:04:24.320 --> 00:04:27.959
+everything is in the same folder,
+
+00:04:27.960 --> 00:04:31.959
+and you find everything because it's connected to other things.
+
+00:04:31.960 --> 00:04:34.839
+We have some basic indexes,
+
+00:04:34.840 --> 00:04:37.799
+from where you can jump to different points.
+
+00:04:37.800 --> 00:04:41.359
+I love this structure, so I also wanted to include it
+
+00:04:41.360 --> 00:04:42.919
+in my bibliography management,
+
+00:04:42.920 --> 00:04:45.579
+because with folders you have problems like,
+
+00:04:45.580 --> 00:04:48.359
+this article can go in that folder, can go in that folder,
+
+00:04:48.360 --> 00:04:51.079
+can go in that folder. Where do I actually put it?
+
+00:04:51.080 --> 00:04:54.439
+Do I put copies of it in different folders?
+
+00:04:54.440 --> 00:04:59.279
+It's just confusing and not really practical in my opinion.
+
+00:04:59.280 --> 00:05:03.478
+So I tried to do this approach inside Emacs.
+
+NOTE Ebib
+
+00:05:03.479 --> 00:05:08.239
+And how? With Ebib.
+
+00:05:08.240 --> 00:05:11.719
+Ebib is an amazing software built inside Emacs.
+
+00:05:11.720 --> 00:05:15.679
+It's a reference manager and it works absolutely amazing
+
+00:05:15.680 --> 00:05:18.199
+if you configure it to your liking.
+
+00:05:18.200 --> 00:05:21.119
+So let's open ebib first.
+
+00:05:21.120 --> 00:05:23.519
+This is the interface you will see when opening.
+
+00:05:23.520 --> 00:05:27.159
+Actually, by default you will not see anything,
+
+00:05:27.160 --> 00:05:30.799
+but I have open three bib files.
+
+00:05:30.800 --> 00:05:36.119
+These are opened by default on boot of ebib for me.
+
+00:05:36.120 --> 00:05:39.839
+These are my three main master bib files.
+
+00:05:39.840 --> 00:05:41.719
+This is the Zotero master bib file,
+
+00:05:41.720 --> 00:05:44.599
+which only Zotero can touch. If I change it,
+
+00:05:44.600 --> 00:05:47.959
+it will be overwritten. This is my new master bib,
+
+00:05:47.960 --> 00:05:53.759
+where I save all the files that I have now started using
+
+00:05:53.760 --> 00:05:55.599
+after switching to this approach.
+
+00:05:55.600 --> 00:05:59.119
+And then this is the master bib file
+
+00:05:59.120 --> 00:06:02.519
+for literature related to my PhD
+
+00:06:02.520 --> 00:06:07.479
+and things that I have already read.
+
+00:06:07.480 --> 00:06:09.759
+It's a very convenient interface.
+
+00:06:09.760 --> 00:06:14.140
+There is also search. There is one searching tool,
+
+00:06:14.141 --> 00:06:16.519
+the jump to entry, ebib-jump-to-entry,
+
+00:06:16.520 --> 00:06:23.039
+which searches through all open bib files for the title.
+
+00:06:23.040 --> 00:06:29.319
+So for example, I can search for membrane fabrication,
+
+00:06:29.320 --> 00:06:35.839
+because that's something I am currently doing,
+
+00:06:35.840 --> 00:06:41.919
+and go to this. There is another searching tool,
+
+00:06:41.920 --> 00:06:45.639
+the ebib-search, which searches through the database
+
+00:06:45.640 --> 00:06:48.359
+that you're on right now
+
+00:06:48.360 --> 00:06:50.399
+and it does a full text search,
+
+00:06:50.400 --> 00:06:53.459
+not only in the titles, but everywhere.
+
+00:06:53.460 --> 00:06:57.039
+So, for example, I see that in this paper
+
+00:06:57.040 --> 00:07:04.759
+if I go to the abstract and search for the word FTIR,
+
+00:07:04.760 --> 00:07:06.879
+which is a chemical analysis,
+
+00:07:06.880 --> 00:07:09.879
+it will tell me that it's here.
+
+00:07:09.880 --> 00:07:16.539
+Can it find it anywhere else? It cannot. That's okay.
+
+00:07:16.540 --> 00:07:18.111
+Let's search for something
+
+00:07:18.112 --> 00:07:21.679
+that we'll be able to find more easily,
+
+00:07:21.680 --> 00:07:24.799
+like, for example, membrane crystallization
+
+00:07:24.800 --> 00:07:27.539
+which is a main focus of my PhD.
+
+00:07:27.540 --> 00:07:30.319
+Then it will be able to find it many times,
+
+00:07:30.320 --> 00:07:35.159
+many, many times.
+
+00:07:35.160 --> 00:07:40.299
+I can also search on the next database
+
+00:07:40.300 --> 00:07:49.479
+or on this database and see where is everything that I want.
+
+00:07:49.480 --> 00:07:55.479
+So this is different searching tools which are very useful.
+
+NOTE Filters
+
+00:07:55.480 --> 00:08:01.700
+Then there's also another tool, that is, filters.
+
+00:08:01.701 --> 00:08:06.199
+So I can filter on any field.
+
+00:08:06.200 --> 00:08:09.739
+Like, for example, let's say on any field,
+
+00:08:09.740 --> 00:08:13.159
+and let's say I'm looking now again
+
+00:08:13.160 --> 00:08:16.279
+for membrane crystallization.
+
+00:08:16.280 --> 00:08:19.879
+This will now filter to all entries.
+
+00:08:19.880 --> 00:08:22.119
+You can see right now there's 18 entries here
+
+00:08:22.120 --> 00:08:28.019
+that mention these two words together in any field.
+
+00:08:28.020 --> 00:08:31.759
+Sometimes this is easier, because this is permanent.
+
+00:08:31.760 --> 00:08:33.699
+It's not like the search that we find one
+
+00:08:33.700 --> 00:08:35.218
+and then if you move, you've lost it,
+
+00:08:35.219 --> 00:08:37.885
+and you need to find it again.
+
+00:08:37.886 --> 00:08:39.679
+This is permanent until I say,
+
+00:08:39.680 --> 00:08:41.799
+okay, cancel the filter.
+
+00:08:41.800 --> 00:08:43.479
+I mostly work with filters,
+
+00:08:43.480 --> 00:08:47.059
+I think they're the most convenient.
+
+00:08:47.060 --> 00:08:49.679
+Then there's also the ebib-list-recent
+
+00:08:49.680 --> 00:08:51.479
+which is another very useful command.
+
+00:08:51.480 --> 00:08:53.359
+It asks you for a number of days
+
+00:08:53.360 --> 00:08:56.559
+and it will show you the files that were added
+
+00:08:56.560 --> 00:08:58.479
+in the most recent.
+
+00:08:58.480 --> 00:09:02.159
+So for example, show me the literature files
+
+00:09:02.160 --> 00:09:05.839
+that were added to this bib file in the last month.
+
+00:09:05.840 --> 00:09:09.799
+I will see five files in this case,
+
+00:09:09.800 --> 00:09:12.699
+because in this bib file, I have mostly entries
+
+00:09:12.700 --> 00:09:15.239
+that I have read, these are the files
+
+00:09:15.240 --> 00:09:18.959
+I have most recently read and added here.
+
+00:09:18.960 --> 00:09:21.599
+While if I go for example here and say that,
+
+00:09:21.600 --> 00:09:25.799
+these are files that maybe I haven't read yet,
+
+00:09:25.800 --> 00:09:31.099
+but I was planning to read. So this is something useful.
+
+00:09:31.100 --> 00:09:32.999
+Although for things I'm planning to read,
+
+00:09:33.000 --> 00:09:34.439
+I mostly use the reading list
+
+00:09:34.440 --> 00:09:36.178
+that I'm going to show next.
+
+NOTE Dependent databases
+
+00:09:36.179 --> 00:09:37.399
+But before that,
+
+00:09:37.400 --> 00:09:41.759
+a few more neat things that you can do in Ebib.
+
+00:09:41.760 --> 00:09:45.019
+So I have a list of dependent databases.
+
+00:09:45.020 --> 00:09:48.819
+For ease, I have already opened them here.
+
+00:09:48.820 --> 00:09:52.599
+These, as you can see, have two brackets here,
+
+00:09:52.600 --> 00:09:59.439
+indicating that they're dependent on phd_literature_1.bib,
+
+00:09:59.440 --> 00:10:06.378
+and these, in my case, act as the sort of index file,
+
+00:10:06.379 --> 00:10:10.911
+where I am tagging things based on the structure
+
+00:10:10.912 --> 00:10:14.651
+that I wanted to have for the organization.
+
+00:10:14.652 --> 00:10:16.478
+So all the organization is flat,
+
+00:10:16.479 --> 00:10:20.145
+all the literature is in phd_literature_1,
+
+00:10:20.146 --> 00:10:23.419
+however, I have this file
+
+00:10:23.420 --> 00:10:25.839
+that has 14 entries.
+
+00:10:25.840 --> 00:10:32.899
+I have another file here that has 20 entries.
+
+00:10:32.900 --> 00:10:35.719
+And these are smaller indexes
+
+00:10:35.720 --> 00:10:38.519
+where I can find things easier,
+
+00:10:38.520 --> 00:10:41.159
+but things are not limited to one of these.
+
+00:10:41.160 --> 00:10:45.599
+Things can be in all of these, or probably not all of these,
+
+00:10:45.600 --> 00:10:50.479
+but can be in three or four of these very easily.
+
+00:10:50.480 --> 00:10:55.219
+And how you add things is that I go here,
+
+00:10:55.220 --> 00:11:00.079
+and I say not r, it's... M for the dependent databases,
+
+00:11:00.080 --> 00:11:02.079
+and I add entry, and it will tell me
+
+00:11:02.080 --> 00:11:03.159
+"Where do you want to add this?"
+
+00:11:03.160 --> 00:11:05.159
+So when I read a new paper,
+
+00:11:05.160 --> 00:11:09.839
+I can say okay, this is related to these three tags,
+
+00:11:09.840 --> 00:11:11.239
+and this is sort of like, again,
+
+00:11:11.240 --> 00:11:13.185
+it's tagging it and it's putting it
+
+00:11:13.186 --> 00:11:15.059
+there, there, and there.
+
+00:11:15.060 --> 00:11:17.599
+And then this creates a flat structure
+
+00:11:17.600 --> 00:11:21.619
+that however has a great organization,
+
+00:11:21.620 --> 00:11:23.799
+similar to how Zettelkasten works
+
+00:11:23.800 --> 00:11:27.879
+and I really like working with something like this,
+
+00:11:27.880 --> 00:11:33.719
+with dependent databases.
+
+00:11:33.720 --> 00:11:36.539
+Another feature that I really like,
+
+00:11:36.540 --> 00:11:41.919
+another feature that exists by default... But if I tag,
+
+00:11:41.920 --> 00:11:45.279
+this tagging is done through "m",
+
+00:11:45.280 --> 00:11:49.019
+and then I can tag different files here,
+
+00:11:49.020 --> 00:11:52.159
+and this is to do different actions with these together,
+
+00:11:52.160 --> 00:11:53.585
+such as, for example,
+
+00:11:53.586 --> 00:11:55.585
+copy them to a different file,
+
+00:11:55.586 --> 00:11:59.459
+with "x" I can export the entries somewhere else,
+
+00:11:59.460 --> 00:12:00.685
+there are many things that you can do
+
+00:12:00.686 --> 00:12:01.439
+when you mark them.
+
+00:12:01.440 --> 00:12:05.319
+By the way, one of them is this function,
+
+00:12:05.320 --> 00:12:08.939
+which sees everything that I have marked
+
+00:12:08.940 --> 00:12:14.785
+and shows me an org-roam-node-find entry
+
+00:12:14.786 --> 00:12:18.052
+that is filtered to just these files.
+
+00:12:18.053 --> 00:12:20.885
+I can select one and it will take me
+
+00:12:20.886 --> 00:12:24.399
+to my notes on this specific paper.
+
+00:12:24.400 --> 00:12:25.719
+I find this very useful,
+
+00:12:25.720 --> 00:12:27.159
+because I can be looking for something
+
+00:12:27.160 --> 00:12:30.018
+and I can say, okay I remember,
+
+00:12:30.019 --> 00:12:31.399
+or I did some filtering,
+
+00:12:31.400 --> 00:12:34.099
+and I know it's in one of these files
+
+00:12:34.100 --> 00:12:37.239
+and now I want to see my in-depth notes on each one
+
+00:12:37.240 --> 00:12:41.079
+to remember where exactly I found it.
+
+00:12:41.080 --> 00:12:43.419
+So I find this kind of filtering,
+
+00:12:43.420 --> 00:12:50.539
+this org-roam related filtering, to be also very effective.
+
+NOTE Reading lists
+
+00:12:50.540 --> 00:12:54.079
+So now let's finally move to reading list.
+
+00:12:54.080 --> 00:12:55.399
+The reading list in ebib
+
+00:12:55.400 --> 00:13:00.259
+reminds me a lot of the philosophy that Emacs uses.
+
+00:13:00.260 --> 00:13:05.119
+By default, it is extremely bare bones, not very usable,
+
+00:13:05.120 --> 00:13:10.719
+but it is so customizable, to where you can do
+
+00:13:10.720 --> 00:13:13.019
+anything that you can imagine through it
+
+00:13:13.020 --> 00:13:16.479
+because the limit truly is your imagination.
+
+00:13:16.480 --> 00:13:21.039
+It's how much you can code into this
+
+00:13:21.040 --> 00:13:22.519
+that actually makes sense
+
+00:13:22.520 --> 00:13:25.479
+and you can actually imagine it working.
+
+00:13:25.480 --> 00:13:31.699
+Besides that, you can do anything really.
+
+00:13:31.700 --> 00:13:36.799
+So we can open ebib and try to find this paper
+
+00:13:36.800 --> 00:13:42.699
+that I just added here.
+
+00:13:42.700 --> 00:13:48.679
+Then we can create a reading list entry from it.
+
+00:13:48.680 --> 00:13:51.999
+Here, my reading list prompts me
+
+00:13:52.000 --> 00:13:53.418
+for a priority for this.
+
+00:13:53.419 --> 00:13:57.239
+How urgent it is for me to read this.
+
+00:13:57.240 --> 00:14:02.219
+It adds a TO-READ, which is a todo entry,
+
+00:14:02.220 --> 00:14:04.479
+which helps with organizing my reading list,
+
+00:14:04.480 --> 00:14:08.679
+because as you may also be able to see, this has an ID,
+
+00:14:08.680 --> 00:14:11.579
+because this is an org-roam node,
+
+00:14:11.580 --> 00:14:16.839
+so the TO-READ allows me to organize it inside org-roam.
+
+00:14:16.840 --> 00:14:21.839
+It saves the citekey, the link to the paper,
+
+00:14:21.840 --> 00:14:25.979
+and also tags it with the parent file node
+
+00:14:25.980 --> 00:14:30.379
+because I don't like having orphan nodes in my Zettelkasten.
+
+00:14:30.380 --> 00:14:33.839
+I like everything to be linked to at least one thing.
+
+00:14:33.840 --> 00:14:35.799
+So everything in the reading list
+
+00:14:35.800 --> 00:14:39.299
+is linked to the parent file.
+
+00:14:39.300 --> 00:14:47.519
+And now I can find this in the org-roam-node-find menu,
+
+00:14:47.520 --> 00:14:53.719
+here. However, that's not very interesting.
+
+00:14:53.720 --> 00:14:56.239
+In practice, my typical org-roam-node-find
+
+00:14:56.240 --> 00:14:59.759
+does not even include these reading list files
+
+00:14:59.760 --> 00:15:02.439
+because I don't really care to have them there.
+
+NOTE Special org-roam-node-find
+
+00:15:02.440 --> 00:15:06.159
+I have a special org-roam-node-find
+
+00:15:06.160 --> 00:15:13.439
+that is designed to find these in particular.
+
+00:15:13.440 --> 00:15:16.459
+And here these have 22. These are the amount of files
+
+00:15:16.460 --> 00:15:21.679
+that are currently in my reading list.
+
+00:15:21.680 --> 00:15:29.899
+So for example, let's try and press here.
+
+00:15:29.900 --> 00:15:33.479
+And magically, this prompts me to select a capture template,
+
+00:15:33.480 --> 00:15:39.119
+because what it's doing is that I selected this,
+
+00:15:39.120 --> 00:15:42.119
+and because of the citekey, it knows
+
+00:15:42.120 --> 00:15:46.539
+that it wants to create a new node for that.
+
+00:15:46.540 --> 00:15:47.959
+So I select the capture template.
+
+00:15:47.960 --> 00:15:56.099
+It knows that it wants to create this new node for this.
+
+00:15:56.100 --> 00:16:01.359
+And now, if I for a second close the reading list,
+
+00:16:01.360 --> 00:16:07.119
+now I can already go ahead and take notes on this.
+
+00:16:07.120 --> 00:16:09.759
+This is org-noter, in particular,
+
+00:16:09.760 --> 00:16:11.599
+and it makes it all very easy
+
+00:16:11.600 --> 00:16:15.719
+because it's all integrated in one place.
+
+00:16:15.720 --> 00:16:22.539
+If I then close this and open a new Emacs,
+
+00:16:22.540 --> 00:16:27.939
+we have this, and the reading list allows me to very quickly
+
+00:16:27.940 --> 00:16:32.539
+go from this being reading this item to initializing it.
+
+00:16:32.540 --> 00:16:35.039
+Another thing that is very useful is that
+
+00:16:35.040 --> 00:16:38.739
+everything is sorted by priority.
+
+00:16:38.740 --> 00:16:41.359
+So I need to increase the font size again
+
+00:16:41.360 --> 00:16:48.899
+because I closed the previous Emacs.
+
+00:16:48.900 --> 00:16:52.319
+So here, I can select what is high priority,
+
+00:16:52.320 --> 00:16:56.399
+what is low priority. I can also change the priority
+
+00:16:56.400 --> 00:16:58.799
+without needing to be in this file.
+
+00:16:58.800 --> 00:17:05.479
+Let's leave this file. I can say, okay, I decided
+
+00:17:05.480 --> 00:17:08.639
+that this file is priority B. It needs to be A,
+
+00:17:08.640 --> 00:17:11.899
+which is more urgent.
+
+00:17:11.900 --> 00:17:16.079
+In my system, there's five different priority levels.
+
+00:17:16.080 --> 00:17:17.999
+You can get away with less
+
+00:17:18.000 --> 00:17:20.959
+but I like to have the very much low ones
+
+00:17:20.960 --> 00:17:22.999
+as this is not urgent at all
+
+00:17:23.000 --> 00:17:27.159
+but I want to keep it somewhere. A is very urgent
+
+00:17:27.160 --> 00:17:31.779
+and B is urgent but just below A.
+
+00:17:31.780 --> 00:17:34.619
+And then the C in the middle is just
+
+00:17:34.620 --> 00:17:35.999
+I will eventually read this
+
+00:17:36.000 --> 00:17:41.919
+but not something I want to focus my attention on right now.
+
+00:17:41.920 --> 00:17:45.439
+So this is mostly about reading list.
+
+00:17:45.440 --> 00:17:46.639
+I can also show, for example,
+
+00:17:46.640 --> 00:17:50.679
+I have this if I finalize something,
+
+00:17:50.680 --> 00:17:56.799
+if I read it. For example, I created a note for this new thing.
+
+00:17:56.800 --> 00:17:59.079
+Let's say I finished reading it.
+
+00:17:59.080 --> 00:18:02.179
+I want to remove from my reading list.
+
+00:18:02.180 --> 00:18:05.639
+It's also just one command and it's done.
+
+NOTE Annotations
+
+00:18:05.640 --> 00:18:08.739
+If we now return to the presentation,
+
+00:18:08.740 --> 00:18:11.699
+the last thing I want to show is annotations.
+
+00:18:11.700 --> 00:18:17.119
+So for annotations, it's the idea that sometimes
+
+00:18:17.120 --> 00:18:23.139
+you just need to find something in Ebib quickly.
+
+00:18:23.140 --> 00:18:26.679
+So I'm here and I'm looking for something.
+
+00:18:26.680 --> 00:18:30.999
+I said I'm here and I'm looking for something.
+
+00:18:31.000 --> 00:18:35.199
+And as you can see, there's the annote file everywhere,
+
+00:18:35.200 --> 00:18:40.839
+the annote entry, which is a very very small description
+
+00:18:40.840 --> 00:18:43.799
+of things that I want to remember for this paper.
+
+00:18:43.800 --> 00:18:48.039
+So I can be scrolling here or scrolling
+
+00:18:48.040 --> 00:18:51.811
+in one of the smaller files
+
+00:18:51.812 --> 00:18:56.859
+and saying this was in this subsection,
+
+00:18:56.860 --> 00:18:59.519
+and which paper was it, and I can scroll,
+
+00:18:59.520 --> 00:19:01.711
+read all these annotes.
+
+00:19:01.712 --> 00:19:04.919
+Each annote takes like 15 seconds to read,
+
+00:19:04.920 --> 00:19:07.359
+and really decide, okay,
+
+00:19:07.360 --> 00:19:09.799
+it was this paper that I wanted, good.
+
+00:19:09.800 --> 00:19:21.819
+Now I can open the note for it, go there, and it's very easy.
+
+NOTE Wrapping up
+
+00:19:21.820 --> 00:19:25.719
+So I think that's all. I would like to thank you for your time.
+
+00:19:25.720 --> 00:19:29.319
+I would love to see your questions either in IRC,
+
+00:19:29.320 --> 00:19:32.199
+I will be, maybe I've already answered
+
+00:19:32.200 --> 00:19:35.039
+some of your questions there in the Etherpad,
+
+00:19:35.040 --> 00:19:37.599
+or right now, we're going to the live Q&A
+
+00:19:37.600 --> 00:19:42.159
+where I'd love to interact with everyone and have a discussion.
+
+00:19:42.160 --> 00:19:44.479
+However, if you don't have any questions right now,
+
+00:19:44.480 --> 00:19:48.559
+but you have a question later on, feel free to send me an email.
+
+00:19:48.560 --> 00:19:51.739
+My mail is also on the site.
+
+00:19:51.740 --> 00:19:54.599
+And if you're curious how all this "magic" worked,
+
+00:19:54.600 --> 00:20:00.839
+feel free to go to my Github and see the ebib section
+
+00:20:00.840 --> 00:20:04.039
+here that will also be linked in the doc page,
+
+00:20:04.040 --> 00:20:06.279
+where you can see all the configuration
+
+00:20:06.280 --> 00:20:10.919
+that I have done in Ebib for everything to work.
+
+00:20:10.920 --> 00:20:14.000
+Thank you again and have a wonderful EmacsConf!
diff --git a/2025/captions/emacsconf-2025-sat-open--saturday-opening-remarks--main--chapters.vtt b/2025/captions/emacsconf-2025-sat-open--saturday-opening-remarks--main--chapters.vtt
new file mode 100644
index 00000000..af2b588c
--- /dev/null
+++ b/2025/captions/emacsconf-2025-sat-open--saturday-opening-remarks--main--chapters.vtt
@@ -0,0 +1,41 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:15.999
+Tracks
+
+00:00:16.000 --> 00:01:00.606
+Watching and participating
+
+00:01:00.607 --> 00:01:10.600
+Other schedule formats
+
+00:01:10.601 --> 00:01:46.035
+BigBlueButton
+
+00:01:46.036 --> 00:02:03.216
+On and off the stream
+
+00:02:03.217 --> 00:02:25.455
+Etherpad and IRC
+
+00:02:25.456 --> 00:02:59.439
+Etherpad
+
+00:02:59.440 --> 00:03:32.777
+IRC
+
+00:03:32.778 --> 00:03:55.237
+Captions
+
+00:03:55.238 --> 00:04:07.281
+status.emacsconf.org
+
+00:04:07.282 --> 00:04:16.019
+Guidelines for conduct
+
+00:04:16.020 --> 00:04:26.775
+Videos
+
+00:04:26.776 --> 00:04:49.323
+Let's get started!
diff --git a/2025/captions/emacsconf-2025-sat-open--saturday-opening-remarks--main.vtt b/2025/captions/emacsconf-2025-sat-open--saturday-opening-remarks--main.vtt
new file mode 100644
index 00000000..d6a7d98c
--- /dev/null
+++ b/2025/captions/emacsconf-2025-sat-open--saturday-opening-remarks--main.vtt
@@ -0,0 +1,376 @@
+WEBVTT
+
+
+NOTE Tracks
+
+00:00:00.000 --> 00:00:02.246
+Welcome to EmacsConf, where we have fun
+
+00:00:02.247 --> 00:00:05.484
+exploring just how much we can do with a text editor.
+
+00:00:05.485 --> 00:00:07.924
+There's a General track and a Development track,
+
+00:00:07.925 --> 00:00:09.483
+but really, you'll probably find
+
+00:00:09.484 --> 00:00:11.078
+interesting things on both tracks
+
+00:00:11.079 --> 00:00:13.215
+no matter what your level of experience is,
+
+00:00:13.216 --> 00:00:15.999
+so don't feel limited to one or the other.
+
+NOTE Watching and participating
+
+00:00:16.000 --> 00:00:19.392
+The best parts of EmacsConf are the conversations.
+
+00:00:19.393 --> 00:00:22.485
+The wiki has a page on how to watch and participate,
+
+00:00:22.486 --> 00:00:24.909
+and I'll give you a quick overview as well.
+
+00:00:24.910 --> 00:00:28.884
+You can watch both streams at live.emacsconf.org
+
+00:00:28.885 --> 00:00:31.185
+using free and open source software.
+
+00:00:31.186 --> 00:00:34.387
+Using a streaming media player like mpv
+
+00:00:34.388 --> 00:00:37.274
+seems to be the best way to watch in terms of performance
+
+00:00:37.275 --> 00:00:39.240
+but there are also web-based players
+
+00:00:39.241 --> 00:00:41.377
+just in case that's all you've got.
+
+00:00:41.378 --> 00:00:44.063
+The schedule shows the General track on top
+
+00:00:44.064 --> 00:00:45.602
+and the Development track on the bottom,
+
+00:00:45.603 --> 00:00:47.819
+so you can see what else is going on.
+
+00:00:47.820 --> 00:00:49.818
+As you're watching the talks,
+
+00:00:49.819 --> 00:00:52.354
+you can refer to the schedule in another window.
+
+00:00:52.355 --> 00:00:55.600
+Hover over the boxes to see the times and titles,
+
+00:00:55.601 --> 00:00:57.613
+and click on the boxes in the schedule
+
+00:00:57.614 --> 00:01:00.606
+to jump to the talk's page for more details.
+
+NOTE Other schedule formats
+
+00:01:00.607 --> 00:01:03.586
+You can also get the schedule as an iCalendar file
+
+00:01:03.587 --> 00:01:05.620
+or as an Org file in different time zones.
+
+00:01:05.621 --> 00:01:08.254
+The Org file has some links to talk resources
+
+00:01:08.255 --> 00:01:10.600
+and might be handy as a starting point for your notes.
+
+NOTE BigBlueButton
+
+00:01:10.601 --> 00:01:12.144
+Many talks will be followed by
+
+00:01:12.145 --> 00:01:14.571
+live Q&A web conferences with the speaker,
+
+00:01:14.572 --> 00:01:17.733
+which will be done in BigBlueButton or BBB.
+
+00:01:17.734 --> 00:01:20.818
+These are indicated with a solid border on the schedule
+
+00:01:20.819 --> 00:01:24.000
+and by Q&A: BBB on the schedule page.
+
+00:01:24.001 --> 00:01:25.900
+You can join the web conference room
+
+00:01:25.901 --> 00:01:27.466
+by clicking on the BBB link
+
+00:01:27.467 --> 00:01:30.175
+on the schedule page or the talk's webpage.
+
+00:01:30.176 --> 00:01:34.214
+Then you can ask your questions yourself when the Q&A starts.
+
+00:01:34.215 --> 00:01:37.210
+To improve performance, please keep your webcam off
+
+00:01:37.211 --> 00:01:39.889
+and stay muted until it's your turn to talk.
+
+00:01:39.890 --> 00:01:41.691
+If you don't like Javascript,
+
+00:01:41.692 --> 00:01:43.642
+you can still ask questions via IRC
+
+00:01:43.643 --> 00:01:46.035
+and the hosts can read them out for you.
+
+NOTE On and off the stream
+
+00:01:46.036 --> 00:01:47.894
+We're probably going to automatically switch
+
+00:01:47.895 --> 00:01:49.482
+between talks and Q&A sessions,
+
+00:01:49.483 --> 00:01:52.896
+so the transitions on the stream might be a little sudden.
+
+00:01:52.897 --> 00:01:54.438
+People in the BigBlueButton room
+
+00:01:54.439 --> 00:01:55.861
+can continue the conversation
+
+00:01:55.862 --> 00:01:58.219
+even after the talk moves off-stream,
+
+00:01:58.220 --> 00:02:00.270
+and you can also reach out to the speakers
+
+00:02:00.271 --> 00:02:03.216
+using the contact information on the talk page.
+
+NOTE Etherpad and IRC
+
+00:02:03.217 --> 00:02:06.301
+Other talks will have Q&A via Etherpad or IRC,
+
+00:02:06.302 --> 00:02:08.541
+depending on what the speakers prefer.
+
+00:02:08.542 --> 00:02:11.379
+This is indicated in the schedule with a dashed border
+
+00:02:11.380 --> 00:02:13.509
+and on the schedule page as well.
+
+00:02:13.510 --> 00:02:16.542
+The schedule pages have quick shortcuts so that you can
+
+00:02:16.543 --> 00:02:19.052
+find out more about talks, open the Etherpads,
+
+00:02:19.053 --> 00:02:21.203
+and join the Q&A sessions.
+
+00:02:21.204 --> 00:02:23.365
+The watch page has more tips
+
+00:02:23.366 --> 00:02:25.455
+on how to make the most of Q&A.
+
+NOTE Etherpad
+
+00:02:25.456 --> 00:02:28.329
+If you can, please add notes and ask questions
+
+00:02:28.330 --> 00:02:30.132
+in the Etherpad for the talk.
+
+00:02:30.133 --> 00:02:31.597
+That makes it easier
+
+00:02:31.598 --> 00:02:33.129
+for everyone to share their notes,
+
+00:02:33.130 --> 00:02:36.354
+and speakers and hosts can read the questions from there.
+
+00:02:36.355 --> 00:02:39.621
+We'll copy the notes to the talk pages afterwards.
+
+00:02:39.622 --> 00:02:41.496
+We have one pad for each talk,
+
+00:02:41.497 --> 00:02:43.772
+so you can follow the links to get to the next one
+
+00:02:43.773 --> 00:02:46.827
+or go back to the schedule and get the link from there.
+
+00:02:46.828 --> 00:02:48.422
+If you have general feedback about
+
+00:02:48.423 --> 00:02:50.667
+the conference itself, please put it in
+
+00:02:50.668 --> 00:02:54.592
+pad.emacsconf.org/emacsconf.
+
+00:02:54.593 --> 00:02:57.549
+You can also use this as a community message board
+
+00:02:57.550 --> 00:02:59.439
+for things like Help Wanted.
+
+NOTE IRC
+
+00:02:59.440 --> 00:03:02.799
+Internet Relay Chat or IRC can be another great way
+
+00:03:02.800 --> 00:03:05.175
+to be part of lots of conversations.
+
+00:03:05.176 --> 00:03:09.450
+You can use chat.emacsconf.org to join the IRC channels
+
+00:03:09.451 --> 00:03:11.045
+through your web browser.
+
+00:03:11.046 --> 00:03:12.856
+The tabs on the left can help you
+
+00:03:12.857 --> 00:03:14.891
+switch between the different channels.
+
+00:03:14.892 --> 00:03:17.610
+There's #emacsconf-gen for the General track
+
+00:03:17.611 --> 00:03:20.489
+and #emacsconf-dev for the Development track.
+
+00:03:20.490 --> 00:03:23.956
+If you need to reach us, you can join #emacsconf-org
+
+00:03:23.957 --> 00:03:29.474
+or e-mail emacsconf-org-private@gnu.org.
+
+00:03:29.475 --> 00:03:32.777
+You can use #emacsconf for hallway conversations.
+
+NOTE Captions
+
+00:03:32.778 --> 00:03:35.587
+Once again, we're going to be streaming with open captions
+
+00:03:35.588 --> 00:03:38.479
+for most of the talks this year, thanks to our speakers and
+
+00:03:38.480 --> 00:03:39.895
+captioning volunteers.
+
+00:03:39.896 --> 00:03:42.522
+The captioned talks are indicated on the schedule,
+
+00:03:42.523 --> 00:03:44.312
+and with any luck, we'll be posting
+
+00:03:44.313 --> 00:03:46.123
+videos and transcripts on talk pages
+
+00:03:46.124 --> 00:03:47.883
+shortly after the talks start.
+
+00:03:47.884 --> 00:03:51.069
+If you need additional accommodations, please let us know
+
+00:03:51.070 --> 00:03:54.016
+in #emacsconf-org and we'll see
+
+00:03:54.017 --> 00:03:55.237
+if we can make things happen.
+
+NOTE status.emacsconf.org
+
+00:03:55.238 --> 00:03:59.917
+If something goes down, we'll update status.emacsconf.org.
+
+00:03:59.918 --> 00:04:01.743
+If it doesn't look like we've noticed yet,
+
+00:04:01.744 --> 00:04:05.262
+please let us know in the #emacsconf-org IRC channel,
+
+00:04:05.263 --> 00:04:07.281
+where we will be quietly panicking.
+
+NOTE Guidelines for conduct
+
+00:04:07.282 --> 00:04:09.704
+In all of these conversations, please keep in mind
+
+00:04:09.705 --> 00:04:11.238
+our guidelines for conduct.
+
+00:04:11.239 --> 00:04:12.619
+You can find them on the wiki,
+
+00:04:12.620 --> 00:04:16.019
+and they basically boil down to: please be nice. Thank you!
+
+NOTE Videos
+
+00:04:16.020 --> 00:04:18.891
+If all goes well, the prerecorded talks and transcripts
+
+00:04:18.892 --> 00:04:20.537
+should be available from the talk pages
+
+00:04:20.538 --> 00:04:22.038
+shortly after they start playing,
+
+00:04:22.039 --> 00:04:24.143
+and we'll post the recordings of live talks
+
+00:04:24.144 --> 00:04:26.775
+and Q&A sessions within the next few weeks.
+
+NOTE Let's get started!
+
+00:04:26.776 --> 00:04:28.247
+All right, let's get going.
+
+00:04:28.248 --> 00:04:31.214
+You might see Leo Vivier, Corwin Brust,
+
+00:04:31.215 --> 00:04:33.953
+and Amin Bandali hosting the various tracks.
+
+00:04:33.954 --> 00:04:35.767
+I will run around mostly backstage,
+
+00:04:35.768 --> 00:04:37.793
+and you'll probably meet us in the closing remarks.
+
+00:04:37.794 --> 00:04:39.243
+That's also where we get to thank
+
+00:04:39.244 --> 00:04:40.659
+all the people and organizations
+
+00:04:40.660 --> 00:04:42.549
+who make EmacsConf possible.
+
+00:04:42.550 --> 00:04:44.462
+Let's have fun at EmacsConf!
diff --git a/2025/captions/emacsconf-2025-schemacs--one-year-progress-update-schemacs-formerly-gypsum--ramin-honary--answers.vtt b/2025/captions/emacsconf-2025-schemacs--one-year-progress-update-schemacs-formerly-gypsum--ramin-honary--answers.vtt
new file mode 100644
index 00000000..738e9779
--- /dev/null
+++ b/2025/captions/emacsconf-2025-schemacs--one-year-progress-update-schemacs-formerly-gypsum--ramin-honary--answers.vtt
@@ -0,0 +1,1531 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:03.839
+[oops, forgot to start] object protocol has a scheme implementation.
+
+00:00:03.840 --> 00:00:07.159
+Does this mean schemacs will be
+
+00:00:07.160 --> 00:00:11.079
+meta object changeable in practice?
+
+00:00:11.080 --> 00:00:16.599
+So I don't actually need the meta object protocol so far.
+
+00:00:16.600 --> 00:00:19.279
+In the reference implementation for Guile,
+
+00:00:19.280 --> 00:00:27.559
+Guile has its own object-oriented system called Goops.
+
+00:00:27.560 --> 00:00:29.239
+I'm sorry, I'm hearing a delay.
+
+00:00:29.240 --> 00:00:32.519
+Anyway, I'm going to turn off my stream quick. There we go.
+
+00:00:32.520 --> 00:00:39.439
+So, um. Yes, uh, I, I don't I wasn't aware of the, um.
+
+00:00:39.440 --> 00:00:43.919
+the meta-object protocol that you have mentioned here,
+
+00:00:43.920 --> 00:00:45.959
+but I will look into it.
+
+00:00:45.960 --> 00:00:48.719
+I know that there isn't really a standard
+
+00:00:48.720 --> 00:00:52.119
+meta-object protocol for Scheme.
+
+00:00:52.120 --> 00:00:53.519
+That was an issue for me
+
+00:00:53.520 --> 00:00:56.919
+because I'm trying to make this cross-platform,
+
+00:00:56.920 --> 00:00:59.639
+and so I've done all of my work so far
+
+00:00:59.640 --> 00:01:00.959
+without a meta-object protocol
+
+00:01:00.960 --> 00:01:02.439
+because that's the easiest way to make it work
+
+00:01:02.440 --> 00:01:04.879
+on multiple Scheme implementations.
+
+00:01:04.880 --> 00:01:07.359
+But if there is a nice portable one
+
+00:01:07.360 --> 00:01:12.559
+that works on many implementations, I would use that, yes.
+
+00:01:12.560 --> 00:01:14.999
+It's just that so far it hasn't been necessary.
+
+00:01:15.000 --> 00:01:19.279
+I've been doing mostly functional reactive programming
+
+00:01:19.280 --> 00:01:21.079
+and React.js-like framework.
+
+00:01:21.080 --> 00:01:23.239
+I've created that for the GUI front end.
+
+00:01:23.240 --> 00:01:26.199
+And that's all the more I've needed so far.
+
+00:01:26.200 --> 00:01:33.399
+So, yeah. Oh, yeah, please, next question. Sure.
+
+00:01:33.400 --> 00:01:39.599
+So how will the GUI display code be R7RS compliant?
+
+00:01:39.600 --> 00:01:45.079
+As far as I know, there's no DL open in R7RS. That's right.
+
+00:01:45.080 --> 00:01:48.879
+Yeah, R7RS small is extremely small
+
+00:01:48.880 --> 00:01:50.439
+and does not have any features at all.
+
+00:01:50.440 --> 00:01:54.799
+But it does provide a conv expand macro.
+
+00:01:54.800 --> 00:01:57.639
+And this allows you to load in different code
+
+00:01:57.640 --> 00:02:00.879
+depending on which scheme implementation you're using.
+
+00:02:00.880 --> 00:02:03.359
+So basically, I'll have to write a different back end
+
+00:02:03.360 --> 00:02:05.279
+for each scheme implementation.
+
+00:02:05.280 --> 00:02:06.639
+And I think that's really
+
+00:02:06.640 --> 00:02:10.919
+the only way is possible at all,
+
+00:02:10.920 --> 00:02:12.719
+because there's no standardization.
+
+00:02:12.720 --> 00:02:14.439
+So essentially, the libraries
+
+00:02:14.440 --> 00:02:15.719
+that I've written for schemacs
+
+00:02:15.720 --> 00:02:22.439
+will become kind of a platform-independent way
+
+00:02:22.440 --> 00:02:25.839
+of writing GUIs for Scheme.
+
+00:02:25.840 --> 00:02:27.119
+It's just a matter of,
+
+00:02:27.120 --> 00:02:28.679
+will your Scheme implementation
+
+00:02:28.680 --> 00:02:32.279
+support the Schemacs GUI protocol?
+
+00:02:32.280 --> 00:02:34.199
+So I've kind of written my own protocol,
+
+00:02:34.200 --> 00:02:36.679
+and it's entirely R7 RSML compliant.
+
+00:02:36.680 --> 00:02:38.239
+It's all done with record,
+
+00:02:38.240 --> 00:02:43.039
+what are they called, record types.
+
+00:02:43.040 --> 00:02:46.519
+Do you think some of the Schemacs
+
+00:02:46.520 --> 00:02:50.679
+could be extracted into SFRIs since you've made it portable
+
+00:02:50.680 --> 00:02:52.879
+between scheme implementations?
+
+00:02:52.880 --> 00:02:55.279
+Yes, I would definitely like to do that.
+
+00:02:55.280 --> 00:02:59.239
+Probably first thing I'll do is start splitting up
+
+00:02:59.240 --> 00:03:01.679
+and publishing independent libraries
+
+00:03:01.680 --> 00:03:04.319
+on the Aku package manager.
+
+00:03:04.320 --> 00:03:07.639
+This is a kind of a package manager ecosystem for Scheme,
+
+00:03:07.640 --> 00:03:11.679
+and in particular R7RS Scheme.
+
+00:03:11.680 --> 00:03:15.239
+And it's also mirrored on the other package manager,
+
+00:03:15.240 --> 00:03:18.279
+Snowfort, just by the way.
+
+00:03:18.280 --> 00:03:21.359
+But yeah, and then I might be also,
+
+00:03:21.360 --> 00:03:25.079
+I've considered creating a SRFI for the lens library,
+
+00:03:25.080 --> 00:03:27.399
+which is based on the Haskell lens library.
+
+00:03:27.400 --> 00:03:29.839
+I don't think that exists yet in Scheme,
+
+00:03:29.840 --> 00:03:34.319
+so I thought that might make a good SRFI.
+
+00:03:34.320 --> 00:03:36.719
+Is there a recommended Scheme implementation?
+
+00:03:36.720 --> 00:03:44.559
+Guile is the reference implementation.
+
+00:03:44.560 --> 00:03:47.279
+It's the only one that works with GUI,
+
+00:03:47.280 --> 00:03:51.359
+but as I demonstrated in my presentation,
+
+00:03:51.360 --> 00:03:52.599
+the Emacs Lisp interpreter
+
+00:03:52.600 --> 00:03:55.079
+works on multiple schemes so far,
+
+00:03:55.080 --> 00:04:00.039
+and I've had trouble with some of the scheme compilers.
+
+00:04:00.040 --> 00:04:04.839
+But yeah, I would recommend Guile.
+
+00:04:04.840 --> 00:04:07.719
+But how would schemacs deal with
+
+00:04:07.720 --> 00:04:10.039
+Emacs's re-display architecture
+
+00:04:10.040 --> 00:04:13.159
+will be having its own display architecture?
+
+00:04:13.160 --> 00:04:15.359
+And if so, how will you handle
+
+00:04:15.360 --> 00:04:18.479
+things like overlays and images?
+
+00:04:18.480 --> 00:04:25.239
+Yeah, definitely. That's to be determined.
+
+00:04:25.240 --> 00:04:31.279
+So basically, the scheme way of doing things
+
+00:04:31.280 --> 00:04:36.639
+So, I've created this React-like programming framework.
+
+00:04:36.640 --> 00:04:40.999
+It's like ReactJS or Vue.js.
+
+00:04:41.000 --> 00:04:45.119
+That is just the API of how you write GUI code in Scheme.
+
+00:04:45.120 --> 00:04:49.719
+And each Scheme implementation
+
+00:04:49.720 --> 00:04:52.279
+will have its own GUI backend,
+
+00:04:52.280 --> 00:04:55.599
+which implements that Protocol.
+
+00:04:55.600 --> 00:04:59.199
+And so when it comes time to link
+
+00:04:59.200 --> 00:05:03.079
+the Emacs Lisp built-in functions
+
+00:05:03.080 --> 00:05:08.279
+that do these things like overlays and so on,
+
+00:05:08.280 --> 00:05:11.079
+we're going to have to come up with some way
+
+00:05:11.080 --> 00:05:12.079
+of modeling that
+
+00:05:12.080 --> 00:05:15.799
+using the scheme framework that I've designed.
+
+00:05:15.800 --> 00:05:17.599
+And I may have to make alterations
+
+00:05:17.600 --> 00:05:22.039
+specifically to support Emacs Lisp.
+
+00:05:22.040 --> 00:05:28.559
+I don't know yet. I haven't got that far.
+
+00:05:28.560 --> 00:05:30.079
+You were saying that you would like
+
+00:05:30.080 --> 00:05:33.479
+to get the most out of the 1300
+
+00:05:33.480 --> 00:05:36.519
+and something Emacs packages that exist.
+
+00:05:36.520 --> 00:05:38.759
+Are there technical blockers to doing them all
+
+00:05:38.760 --> 00:05:44.039
+or just a problem of getting enough people to jump into it?
+
+00:05:44.040 --> 00:05:48.639
+Yeah, it's just a matter of implementing enough
+
+00:05:48.640 --> 00:05:50.839
+of the Emacs built-in functions.
+
+00:05:50.840 --> 00:05:57.079
+Right now, there's kind of a big bug.
+
+00:05:57.080 --> 00:05:59.359
+I mentioned this also in the presentation.
+
+00:05:59.360 --> 00:06:02.599
+The stacks trace that you saw during my presentation,
+
+00:06:02.600 --> 00:06:05.799
+that is the biggest bug right now
+
+00:06:05.800 --> 00:06:08.159
+that's preventing me from running most other code.
+
+00:06:08.160 --> 00:06:10.359
+And I don't think other people
+
+00:06:10.360 --> 00:06:13.039
+will be able to contribute to the code base
+
+00:06:13.040 --> 00:06:14.559
+until I get that bug fixed,
+
+00:06:14.560 --> 00:06:18.679
+because it doesn't capture closures correctly.
+
+00:06:18.680 --> 00:06:22.519
+it doesn't behave like Emacs Lisp does,
+
+00:06:22.520 --> 00:06:26.959
+and that's the big problem.
+
+00:06:26.960 --> 00:06:31.759
+So once I get that worked out,
+
+00:06:31.760 --> 00:06:35.599
+then it's just a matter of implementing enough
+
+00:06:35.600 --> 00:06:37.879
+of the EmacsLisp built-in functions,
+
+00:06:37.880 --> 00:06:40.679
+these are the functions that are mostly implemented in C,
+
+00:06:40.680 --> 00:06:42.879
+implementing those in Scheme.
+
+00:06:42.880 --> 00:06:45.959
+And that, yeah, that's the thing
+
+00:06:45.960 --> 00:06:47.839
+that I'm going to need a lot of help with
+
+00:06:47.840 --> 00:06:49.719
+because there's quite a few of those APIs.
+
+00:06:49.720 --> 00:06:53.519
+But I imagine, I have no idea, no way of knowing,
+
+00:06:53.520 --> 00:06:56.459
+but I imagine we don't need 100% of them
+
+00:06:56.460 --> 00:06:58.167
+in order to run most of Elpa.
+
+00:06:58.168 --> 00:07:05.084
+We probably can get some of the important large Elpa packages
+
+00:07:05.085 --> 00:07:12.719
+like Magit and Org mode with just enough of the Emacs Lisp
+
+00:07:12.720 --> 00:07:14.959
+built-in functions to handle that.
+
+00:07:14.960 --> 00:07:19.279
+But we won't really know until we've tried.
+
+00:07:19.280 --> 00:07:22.519
+So yeah, I'll try to get this bug fixed right away.
+
+00:07:22.520 --> 00:07:24.979
+That way we can all start working on it together, hopefully.
+
+00:07:24.980 --> 00:07:27.126
+Highly relatable answer there.
+
+00:07:27.127 --> 00:07:31.959
+We'll burn that bridge when we're on it or something.
+
+00:07:31.960 --> 00:07:34.559
+What are your thoughts on chicken scheme?
+
+00:07:34.560 --> 00:07:37.199
+Will that be a good fit? Do you think?
+
+00:07:37.200 --> 00:07:41.039
+I think it will be, um, I, I did show
+
+00:07:41.040 --> 00:07:44.959
+trying to run chicken scheme in my, um, presentation
+
+00:07:44.960 --> 00:07:48.839
+and, uh, I ran up against some kind of issue,
+
+00:07:48.840 --> 00:07:51.079
+which I really don't know how to debug.
+
+00:07:51.080 --> 00:07:55.879
+Um, it's probably something to do with the, uh, pattern matcher.
+
+00:07:55.880 --> 00:07:58.919
+Um, I'm using the pattern matcher,
+
+00:07:58.920 --> 00:08:00.599
+uh, written by Alex shin,
+
+00:08:00.600 --> 00:08:02.599
+which seems to be the most portable.
+
+00:08:02.600 --> 00:08:05.919
+Pattern matcher, uh, for our seven RS scheme.
+
+00:08:05.920 --> 00:08:13.519
+But not all scheme compilers implement, what is it called?
+
+00:08:13.520 --> 00:08:19.559
+The macro, I can't remember what it's called.
+
+00:08:19.560 --> 00:08:24.199
+There's the macro expansion system for R7 RS small.
+
+00:08:24.200 --> 00:08:27.199
+All of these scheme implementations
+
+00:08:27.200 --> 00:08:29.319
+seem to have a slightly different take on how they work.
+
+00:08:29.320 --> 00:08:33.919
+And so that macro expander has been, for pattern matching,
+
+00:08:33.920 --> 00:08:35.719
+has been the biggest difficulty
+
+00:08:35.720 --> 00:08:37.359
+in making this code portable.
+
+00:08:37.360 --> 00:08:42.239
+And so I'm thinking of ways of maybe trying to ditch pattern matching,
+
+00:08:42.240 --> 00:08:44.999
+but that's such a useful feature and it's hard.
+
+00:08:45.000 --> 00:08:49.879
+So I don't know, we'll see if I can,
+
+00:08:49.880 --> 00:08:52.439
+if somebody can help me get it to work on chicken team,
+
+00:08:52.440 --> 00:08:56.599
+I'd really appreciate it.
+
+00:08:56.600 --> 00:09:01.799
+Can this implementation be used by Guile's Emacs Lisp mode?
+
+00:09:01.800 --> 00:09:08.199
+Guile's Emacs list mode. Okay. Yeah, good question.
+
+00:09:08.200 --> 00:09:10.919
+I did mention this last year in my presentation.
+
+00:09:10.920 --> 00:09:13.719
+Emacs list in Guile is totally different
+
+00:09:13.720 --> 00:09:16.199
+from what I've done.
+
+00:09:16.200 --> 00:09:21.292
+That implementation was written about 10 or 15 years ago.
+
+00:09:21.293 --> 00:09:26.501
+I can't remember exactly when. It is quite incomplete.
+
+00:09:26.502 --> 00:09:36.542
+I don't think it even runs most of the macro expanding code.
+
+00:09:36.543 --> 00:09:39.679
+Some of the code that is written
+
+00:09:39.680 --> 00:09:42.479
+for GNU Emacs in Emacs Lisp,
+
+00:09:42.480 --> 00:09:45.679
+where GNU Emacs is initializing itself,
+
+00:09:45.680 --> 00:09:51.319
+it can't even get the first file in that code.
+
+00:09:51.320 --> 00:09:53.479
+It hasn't been touched in 10 or 15 years.
+
+00:09:53.480 --> 00:09:57.239
+Initially, when I first started this project,
+
+00:09:57.240 --> 00:09:59.159
+I was using the parser
+
+00:09:59.160 --> 00:10:02.319
+for Guile's Emacs Lisp implementation,
+
+00:10:02.320 --> 00:10:05.319
+but it didn't give me things like source locations,
+
+00:10:05.320 --> 00:10:10.639
+so I had to rewrite that. And also, it wasn't portable.
+
+00:10:10.640 --> 00:10:14.279
+So yeah, because I want it to be portable,
+
+00:10:14.280 --> 00:10:16.919
+it's necessarily going to be not reliant
+
+00:10:16.920 --> 00:10:19.119
+on anything that's inside of the Guile library,
+
+00:10:19.120 --> 00:10:21.479
+including the Emacs LISP interpreter that's there.
+
+00:10:21.480 --> 00:10:24.959
+Maybe I could replace the Emacs LISP interpreter in Guile
+
+00:10:24.960 --> 00:10:29.599
+if Andy Wingo would be interested. All right.
+
+00:10:29.600 --> 00:10:31.599
+And I see we've got a few people
+
+00:10:31.600 --> 00:10:34.039
+that did jump into the BBB.
+
+00:10:34.040 --> 00:10:37.159
+I'm just going to quickly, oops.
+
+00:10:37.160 --> 00:10:40.679
+quickly try to make my text a little bigger
+
+00:10:40.680 --> 00:10:42.799
+so I can read a question that came here.
+
+00:10:42.800 --> 00:10:48.479
+I wonder if we can do some sort of pragmatic analysis
+
+00:10:48.480 --> 00:10:49.959
+on popular Emacs packages
+
+00:10:49.960 --> 00:10:52.399
+to see what list of functions they tend to depend on
+
+00:10:52.400 --> 00:10:54.799
+while a function calls down to the lower level.
+
+00:10:54.800 --> 00:10:57.209
+Yeah, that would be good.
+
+00:10:57.210 --> 00:11:02.251
+Somebody please do that for me. Awesome.
+
+00:11:02.252 --> 00:11:05.439
+Somebody's raising their hand. Divya.
+
+00:11:05.440 --> 00:11:08.799
+Let's see. Yeah, can you hear me?
+
+00:11:08.800 --> 00:11:12.359
+Yes, I can. Yeah, go ahead. Hello, thank you.
+
+00:11:12.360 --> 00:11:14.079
+Yeah, this is really awesome.
+
+00:11:14.080 --> 00:11:16.959
+I use Guile, and I love Guile,
+
+00:11:16.960 --> 00:11:18.919
+and I also love functional programming,
+
+00:11:18.920 --> 00:11:21.599
+so this is really nice that you took
+
+00:11:21.600 --> 00:11:22.719
+the declarative approach.
+
+00:11:22.720 --> 00:11:26.319
+One thing that I'm interested in is,
+
+00:11:26.320 --> 00:11:29.839
+are you also considering Racket in the scheme group?
+
+00:11:29.840 --> 00:11:32.959
+Because I know a lot of people do not consider Racket
+
+00:11:32.960 --> 00:11:36.639
+as a sort of scheme thing, because it grew out of it.
+
+00:11:36.640 --> 00:11:39.519
+Do you think you'll take something from Racket?
+
+00:11:39.520 --> 00:11:42.119
+Because I think Racket has
+
+00:11:42.120 --> 00:11:44.519
+a lot of good ideas that can be used.
+
+00:11:44.520 --> 00:11:48.439
+Yeah, I briefly looked at Racket's GUI library,
+
+00:11:48.440 --> 00:11:51.879
+but it's very, very heavily dependent
+
+00:11:51.880 --> 00:11:53.839
+on Racket's macro expander,
+
+00:11:53.840 --> 00:11:57.679
+which is, well, yeah, the macro expander
+
+00:11:57.680 --> 00:11:59.679
+is extremely complex for Racket,
+
+00:11:59.680 --> 00:12:02.159
+and I don't think it's possible to port it to any other scheme,
+
+00:12:02.160 --> 00:12:07.679
+as far as I know. But Racket is based on SheaScheme.
+
+00:12:07.680 --> 00:12:14.479
+And I am making an effort to port my code to Shea's scheme.
+
+00:12:14.480 --> 00:12:18.639
+I mentioned this earlier,
+
+00:12:18.640 --> 00:12:22.159
+but there's the Gwen Weinholdt Aku system,
+
+00:12:22.160 --> 00:12:25.439
+which allows you to translate R7RS to R6RS.
+
+00:12:25.440 --> 00:12:28.519
+And since Shea is an R6RS compiler,
+
+00:12:28.520 --> 00:12:33.919
+I did at one point get the Emacs Lisp interpreter
+
+00:12:33.920 --> 00:12:34.919
+to compile for Shea,
+
+00:12:34.920 --> 00:12:38.239
+although I think There's been a change
+
+00:12:38.240 --> 00:12:40.479
+either to Aku or somewhere in my own code base.
+
+00:12:40.480 --> 00:12:42.879
+It doesn't build anymore, and I'm not sure why.
+
+00:12:42.880 --> 00:12:47.039
+But I would also very much like to run this on Che.
+
+00:12:47.040 --> 00:12:54.679
+And I guess in that sense, we'll be able to work on Racket as well.
+
+00:12:54.680 --> 00:12:56.199
+There's also one other option.
+
+00:12:56.200 --> 00:13:03.519
+Alexis King has written an R7RS language package for Racket.
+
+00:13:03.520 --> 00:13:05.039
+I have not yet tried.
+
+00:13:05.040 --> 00:13:08.479
+running my package on R7RS for Racket.
+
+00:13:08.480 --> 00:13:11.599
+But that would be something interesting.
+
+00:13:11.600 --> 00:13:12.919
+Yes, I would like to try that.
+
+00:13:12.920 --> 00:13:13.919
+Yeah, it'll be interesting.
+
+00:13:13.920 --> 00:13:15.839
+I do have some experience with chairs.
+
+00:13:15.840 --> 00:13:17.479
+So, uh, if I can find some time,
+
+00:13:17.480 --> 00:13:21.239
+I'll, I'll, I'll certainly like to, I would appreciate.
+
+00:13:21.240 --> 00:13:24.039
+Yes. Yeah. Go ahead. Yeah.
+
+00:13:24.040 --> 00:13:26.079
+Another question I have is, like,
+
+00:13:26.080 --> 00:13:29.199
+what exactly is sort of, like, the, the approach is that
+
+00:13:29.200 --> 00:13:31.479
+you'll 1st want to do the interpreter
+
+00:13:31.480 --> 00:13:33.799
+and then have enough list functions.
+
+00:13:33.800 --> 00:13:36.479
+Uh, getting the max list functions
+
+00:13:36.480 --> 00:13:38.119
+interpreted or interpretable.
+
+00:13:38.120 --> 00:13:40.999
+And then go for GUI or do you want
+
+00:13:41.000 --> 00:13:42.759
+to sort of like go hand in hand
+
+00:13:42.760 --> 00:13:45.679
+is like we have the interpreter working on
+
+00:13:45.680 --> 00:13:46.959
+and we have also the GUI
+
+00:13:46.960 --> 00:13:53.199
+and we sort of use one for the other.
+
+00:13:53.200 --> 00:13:56.479
+Yeah, I consider the two tasks to be parallel.
+
+00:13:56.480 --> 00:13:59.639
+So I'm actually doing the GUI separately.
+
+00:13:59.640 --> 00:14:05.519
+The reason why is because the GUI for Schemacs
+
+00:14:05.520 --> 00:14:10.279
+is really just a clone of the look and feel of Emacs.
+
+00:14:10.280 --> 00:14:14.679
+It's not like an actual clone of the low-level C code
+
+00:14:14.680 --> 00:14:16.039
+that puts everything on screen.
+
+00:14:16.040 --> 00:14:18.679
+And I'm actually not really that interested
+
+00:14:18.680 --> 00:14:21.439
+in the low-level details
+
+00:14:21.440 --> 00:14:23.479
+of how Emacs draws things on screen either.
+
+00:14:23.480 --> 00:14:26.839
+I think it has a lot of historical baggage,
+
+00:14:26.840 --> 00:14:28.839
+and I'm actually trying to move away from that.
+
+00:14:28.840 --> 00:14:31.759
+So that was part of the reason why I started
+
+00:14:31.760 --> 00:14:36.399
+with this React.js or Vue.js-like Reactive GUI framework.
+
+00:14:36.400 --> 00:14:39.519
+So that GUI part is completely separate.
+
+00:14:39.520 --> 00:14:42.239
+And I want to worry about the details
+
+00:14:42.240 --> 00:14:46.719
+of how we make the GUI look and feel
+
+00:14:46.720 --> 00:14:50.319
+similar in Schemacs, similar to GNU Emacs.
+
+00:14:50.320 --> 00:14:54.799
+In Schemacs, using the Emacs programming language,
+
+00:14:54.800 --> 00:14:59.319
+I think that's something that we should worried about
+
+00:14:59.320 --> 00:15:03.399
+after we have enough of the Emacs list implemented.
+
+00:15:03.400 --> 00:15:04.919
+Yeah, that makes sense.
+
+00:15:04.920 --> 00:15:06.679
+There are sort of, I'm a bit worried.
+
+00:15:06.680 --> 00:15:10.599
+So, I don't know if, so one of my presentations
+
+00:15:10.600 --> 00:15:11.479
+is going to be tomorrow.
+
+00:15:11.480 --> 00:15:13.119
+I'm working on something called Emacs Viewer.
+
+00:15:13.120 --> 00:15:15.319
+It's a document viewer in Emacs.
+
+00:15:15.320 --> 00:15:17.679
+And essentially one of the issues that I'm up against
+
+00:15:17.680 --> 00:15:20.359
+is that Emacs's display system
+
+00:15:20.360 --> 00:15:25.439
+is sort of very let's say, not flexible.
+
+00:15:25.440 --> 00:15:31.839
+When trying to analyze where this inflexibility comes from,
+
+00:15:31.840 --> 00:15:35.759
+I don't think it's just the display architecture.
+
+00:15:35.760 --> 00:15:38.319
+I think parts of eLISP itself
+
+00:15:38.320 --> 00:15:43.599
+are connected to the display architecture.
+
+00:15:43.600 --> 00:15:48.399
+The notion of a cell in a buffer,
+
+00:15:48.400 --> 00:15:52.199
+itself is connected tightly to
+
+00:15:52.200 --> 00:15:54.519
+how the re-display architecture works.
+
+00:15:54.520 --> 00:15:57.199
+So I think you'll have to sort of figure out
+
+00:15:57.200 --> 00:16:00.679
+what exactly you can salvage from ELISP
+
+00:16:00.680 --> 00:16:05.199
+without taking the display architecture baggage.
+
+00:16:05.200 --> 00:16:08.001
+That's right. I do anticipate
+
+00:16:08.002 --> 00:16:09.876
+that's going to be fairly challenging.
+
+00:16:09.877 --> 00:16:14.584
+It's all Turing-complete,
+
+00:16:14.585 --> 00:16:17.879
+so I imagine we're probably going to end up
+
+00:16:17.880 --> 00:16:21.039
+creating something like an emulator
+
+00:16:21.040 --> 00:16:24.319
+for the Emacs Lisp display architecture in Scheme
+
+00:16:24.320 --> 00:16:27.559
+that will somehow translate down
+
+00:16:27.560 --> 00:16:30.039
+to the React-like protocol that I've written.
+
+00:16:30.040 --> 00:16:32.719
+But yeah, I don't I haven't that's nice.
+
+00:16:32.720 --> 00:16:36.319
+No, this is this is very exciting. Yeah. Oh Yes, it is.
+
+00:16:36.320 --> 00:16:39.559
+Yeah, I'm glad so like a lot of people have told me
+
+00:16:39.560 --> 00:16:41.679
+that they really Are excited to see this project
+
+00:16:41.680 --> 00:16:42.719
+and this really helps me
+
+00:16:42.720 --> 00:16:46.399
+You know keep focused on this project
+
+00:16:46.400 --> 00:16:48.319
+because a lot of people are very interested.
+
+00:16:48.320 --> 00:16:50.359
+So It's so I'd like to move on
+
+00:16:50.360 --> 00:16:52.159
+to a couple of questions from the past.
+
+00:16:52.160 --> 00:16:54.479
+We're starting to build up a good backlog.
+
+00:16:54.480 --> 00:16:59.719
+Thank you for that. Yeah Next question from the pad I have.
+
+00:16:59.720 --> 00:17:02.239
+Can you tell us more about the show stopping bug?
+
+00:17:02.240 --> 00:17:04.159
+How to squash it? How can people help?
+
+00:17:04.160 --> 00:17:08.799
+OK, well, that one, unfortunately, I think,
+
+00:17:08.800 --> 00:17:11.679
+unless you're really a scheme genius
+
+00:17:11.680 --> 00:17:13.799
+and you can really read my code
+
+00:17:13.800 --> 00:17:15.479
+and immediately understand how it all works,
+
+00:17:15.480 --> 00:17:18.319
+I don't think you'd be able to help.
+
+00:17:18.320 --> 00:17:22.599
+It shouldn't be too difficult for me to fix.
+
+00:17:22.600 --> 00:17:26.639
+So it has to do with how closures work.
+
+00:17:26.640 --> 00:17:30.719
+And a closure is basically an object
+
+00:17:30.720 --> 00:17:33.159
+that can be created with stuff that's on the stack.
+
+00:17:33.160 --> 00:17:37.079
+And this is a feature, I think,
+
+00:17:37.080 --> 00:17:39.679
+that was introduced with Emacs 27.
+
+00:17:39.680 --> 00:17:40.879
+I can't remember exactly,
+
+00:17:40.880 --> 00:17:43.439
+but it's actually a relatively recent feature.
+
+00:17:43.440 --> 00:17:45.879
+It was ever since they introduced
+
+00:17:45.880 --> 00:17:50.999
+lexically scoped variable bindings in Emacs Lisp.
+
+00:17:51.000 --> 00:17:54.519
+And so yeah, the problem is that
+
+00:17:54.520 --> 00:17:59.839
+when you create like a let structure
+
+00:17:59.840 --> 00:18:01.799
+and you could declare a variable in the let.
+
+00:18:01.800 --> 00:18:05.399
+And then you create inside of that a second let structure,
+
+00:18:05.400 --> 00:18:07.239
+and you have a lambda inside of that.
+
+00:18:07.240 --> 00:18:11.319
+And the lambda references or uses a variable
+
+00:18:11.320 --> 00:18:14.399
+that was declared in the outer let binding.
+
+00:18:14.400 --> 00:18:18.279
+That outer let binding is somewhere on the stack.
+
+00:18:18.280 --> 00:18:22.999
+And the lambda you can actually return it as a value.
+
+00:18:23.000 --> 00:18:25.319
+So when you do return that lambda,
+
+00:18:25.320 --> 00:18:27.679
+it has to have a note somewhere inside
+
+00:18:27.680 --> 00:18:31.279
+that says, by the way, I'm using that variable.
+
+00:18:31.280 --> 00:18:34.359
+So you need to capture it and restore it to the stack
+
+00:18:34.360 --> 00:18:38.199
+whenever this lambda is applied, whenever you execute it.
+
+00:18:38.200 --> 00:18:40.959
+And that is where the error is.
+
+00:18:40.960 --> 00:18:44.399
+It's not capturing the stack variable properly.
+
+00:18:44.400 --> 00:18:46.879
+And I think what I'm going to do,
+
+00:18:46.880 --> 00:18:49.759
+I haven't looked into it in detail yet
+
+00:18:49.760 --> 00:18:53.279
+because I've gone back to GUI stuff recently,
+
+00:18:53.280 --> 00:18:55.479
+but what I'm going to do, I think,
+
+00:18:55.480 --> 00:18:57.799
+is just do a static analysis
+
+00:18:57.800 --> 00:18:59.079
+of the code inside of the Lambda
+
+00:18:59.080 --> 00:19:02.919
+and see which symbols are being used,
+
+00:19:02.920 --> 00:19:05.079
+and then just capture all of those
+
+00:19:05.080 --> 00:19:07.559
+and place those into the record type
+
+00:19:07.560 --> 00:19:09.519
+that stores the lambda.
+
+00:19:09.520 --> 00:19:12.679
+That's how I'm going to fix that, I think.
+
+00:19:12.680 --> 00:19:15.999
+I hope anyway that's going to work.
+
+00:19:16.000 --> 00:19:17.239
+You never know with bugs.
+
+00:19:17.240 --> 00:19:21.759
+They're always a little bit tricky. Okay, next question.
+
+00:19:21.760 --> 00:19:23.119
+Are there performance concerns
+
+00:19:23.120 --> 00:19:28.479
+with implementing certain C primitives in PeerScheme?
+
+00:19:28.480 --> 00:19:32.879
+So who is it? The famous computer scientist that said
+
+00:19:32.880 --> 00:19:35.879
+premature optimization is the root of all evil.
+
+00:19:35.880 --> 00:19:39.799
+I think it was the guy who invented the A star algorithm.
+
+00:19:39.800 --> 00:19:42.719
+His name escapes me at the minute.
+
+00:19:42.720 --> 00:19:49.359
+But yeah, I'm not concerned about performance yet,
+
+00:19:49.360 --> 00:19:52.119
+although most of the scheme compilers that I have seen,
+
+00:19:52.120 --> 00:19:56.999
+especially Shea and Gambit
+
+00:19:57.000 --> 00:20:02.039
+have extremely good performance characteristics.
+
+00:20:02.040 --> 00:20:03.679
+And so I think there won't be
+
+00:20:03.680 --> 00:20:05.879
+too much difficulty with performance,
+
+00:20:05.880 --> 00:20:08.759
+even implementing some of the C stuff.
+
+00:20:08.760 --> 00:20:10.759
+And besides, a lot of the GUI stuff
+
+00:20:10.760 --> 00:20:12.719
+is already written in C anyway.
+
+00:20:12.720 --> 00:20:14.399
+I mean, it would be cool
+
+00:20:14.400 --> 00:20:16.879
+if we had a scheme GUI library
+
+00:20:16.880 --> 00:20:18.599
+that painted to a canvas,
+
+00:20:18.600 --> 00:20:21.639
+maybe for a Wayland implementation or something.
+
+00:20:21.640 --> 00:20:29.079
+But I don't know. It's not a concern for me, performance.
+
+00:20:29.080 --> 00:20:32.079
+Okay, there are a few more questions. I do want to mention
+
+00:20:32.080 --> 00:20:33.839
+that the stream has cut away at this point,
+
+00:20:33.840 --> 00:20:36.279
+but we're still recording live.
+
+00:20:36.280 --> 00:20:38.799
+All of this will be put up on the website
+
+00:20:38.800 --> 00:20:40.399
+and so on like that.
+
+00:20:40.400 --> 00:20:44.199
+So, I appreciate all the enthusiastic questions
+
+00:20:44.200 --> 00:20:47.799
+and you're kind of tanking through them all.
+
+00:20:47.800 --> 00:20:52.799
+Me too. I love how many questions I'm getting.
+
+00:20:52.800 --> 00:20:54.039
+This is very encouraging
+
+00:20:54.040 --> 00:20:55.999
+and it really makes me want to keep on working on it.
+
+00:20:56.000 --> 00:20:56.879
+So it's great.
+
+00:20:56.880 --> 00:21:00.199
+I'm so glad to hear that because that's exactly the message
+
+00:21:00.200 --> 00:21:01.439
+I think you should be receiving.
+
+00:21:01.440 --> 00:21:04.159
+This is a fantastic project. Thank you so much.
+
+00:21:04.160 --> 00:21:08.439
+I'll just say so myself. If the project is successful,
+
+00:21:08.440 --> 00:21:11.479
+are you worried about a possible split in the community
+
+00:21:11.480 --> 00:21:15.599
+between Schemacs and GNU Emacs?
+
+00:21:15.600 --> 00:21:18.959
+Oh, I have thought about that.
+
+00:21:18.960 --> 00:21:24.039
+And I really don't know what's going to happen.
+
+00:21:24.040 --> 00:21:26.239
+There seems to be already a huge demand
+
+00:21:26.240 --> 00:21:30.439
+for a scheme-based, a modern scheme-based editor.
+
+00:21:30.440 --> 00:21:33.399
+You know, the Edwin scheme for MIT scheme
+
+00:21:33.400 --> 00:21:37.279
+hasn't been touched since like 1987 or something,
+
+00:21:37.280 --> 00:21:41.439
+maybe 1993 or, but anyway.
+
+00:21:41.440 --> 00:21:43.159
+There seems to be huge demand.
+
+00:21:43.160 --> 00:21:45.119
+And so I guess a lot of people
+
+00:21:45.120 --> 00:21:47.679
+who are currently using GNU Emacs
+
+00:21:47.680 --> 00:21:49.079
+will probably just switch over
+
+00:21:49.080 --> 00:21:50.479
+because they've been wanting
+
+00:21:50.480 --> 00:21:53.159
+something like this for a very long time.
+
+00:21:53.160 --> 00:21:56.559
+And then, I mean, is that going to cause fragmentation?
+
+00:21:56.560 --> 00:21:58.679
+Is it really a big deal, though?
+
+00:21:58.680 --> 00:22:02.479
+I mean, it's all GPL-licensed code.
+
+00:22:02.480 --> 00:22:08.759
+I mean, I think a rising tide raises all the ships at the same time.
+
+00:22:08.760 --> 00:22:13.279
+So, yeah, also, the last thing I want to say about that
+
+00:22:13.280 --> 00:22:18.999
+is I would like to contribute some of what I do in Schemacs
+
+00:22:19.000 --> 00:22:24.399
+back into GNU Emacs, if I can. So, for example, I'm going
+
+00:22:24.400 --> 00:22:25.959
+to be working on like a canvas library
+
+00:22:25.960 --> 00:22:27.879
+where you can have interactive canvases
+
+00:22:27.880 --> 00:22:30.879
+and you know you can actually like draw pictures
+
+00:22:30.880 --> 00:22:33.559
+and put things with the mouse and drag things around.
+
+00:22:33.560 --> 00:22:36.079
+And I was thinking you know
+
+00:22:36.080 --> 00:22:37.667
+if if I can figure out how that works
+
+00:22:37.668 --> 00:22:41.917
+maybe I can write something like that for Emacs
+
+00:22:41.918 --> 00:22:47.759
+or GNU Emacs using the Cairo library, you know,
+
+00:22:47.760 --> 00:22:49.319
+SVG rendering library that they have.
+
+00:22:49.320 --> 00:22:51.319
+So, you know, if I have time,
+
+00:22:51.320 --> 00:22:55.799
+I would like to continue contributing to GNU Emacs as well.
+
+00:22:55.800 --> 00:22:57.839
+I'm sorry, what was the name of the library you mentioned?
+
+00:22:57.840 --> 00:23:01.039
+Oh, Cairo, like Cairo.
+
+00:23:01.040 --> 00:23:07.599
+Oh, Cairo, yeah. Absolutely. I spelled that poorly.
+
+00:23:07.600 --> 00:23:12.519
+The dream of never needing to change to the web browser.
+
+00:23:12.520 --> 00:23:18.376
+Would schemacs bring us closer to that? I hope so.
+
+00:23:18.377 --> 00:23:21.709
+That's also a dream of mine.
+
+00:23:21.710 --> 00:23:26.479
+The part of the reason why I wanted to work, you know,
+
+00:23:26.480 --> 00:23:30.999
+make sure I had a really good workable GUI framework
+
+00:23:31.000 --> 00:23:32.626
+is so that I could, you know,
+
+00:23:32.627 --> 00:23:34.879
+we could write apps like, you know,
+
+00:23:34.880 --> 00:23:38.759
+they have a mastodon client written in Emacs Lisp.
+
+00:23:38.760 --> 00:23:42.199
+that would be so nice to have this, you know,
+
+00:23:42.200 --> 00:23:43.439
+a really nice Mastodon client
+
+00:23:43.440 --> 00:23:47.479
+that was right inside of, you know, our scheme environment
+
+00:23:47.480 --> 00:23:50.039
+where we were doing our text editing and other stuff.
+
+00:23:50.040 --> 00:23:52.079
+I've always wanted something like that,
+
+00:23:52.080 --> 00:23:53.799
+or it would be cool to have
+
+00:23:53.800 --> 00:23:56.319
+just a slightly nicer GUI for Magit.
+
+00:23:56.320 --> 00:24:04.199
+So, yeah, I mean, like, yeah, being able to avoid the web entirely
+
+00:24:04.200 --> 00:24:08.199
+and just be able to like, you know, do social networking
+
+00:24:08.200 --> 00:24:11.439
+and do your GitHub stuff,
+
+00:24:11.440 --> 00:24:14.759
+everything from within Emacs or Schemacs in this case,
+
+00:24:14.760 --> 00:24:16.919
+that's a dream of mine as well.
+
+00:24:16.920 --> 00:24:20.079
+And so I hope that that's where we end up in a couple of years.
+
+00:24:20.080 --> 00:24:29.999
+The sooner the better. Anything, just double checking.
+
+00:24:30.000 --> 00:24:33.319
+Anything specific other than minimalism
+
+00:24:33.320 --> 00:24:35.799
+that made you choose Scheme over Commonwealth?
+
+00:24:35.800 --> 00:24:40.199
+Oh, yeah, it's kind of a philosophical question.
+
+00:24:40.200 --> 00:24:45.559
+So a couple of things. First of all, it was a conversation
+
+00:24:45.560 --> 00:24:47.399
+I had with William Byrd,
+
+00:24:47.400 --> 00:24:50.519
+and he's a guy who makes the Mini Conran framework for Scheme.
+
+00:24:50.520 --> 00:24:52.879
+It was his PhD thesis.
+
+00:24:52.880 --> 00:24:57.119
+He worked with, I'm sorry, I just can't remember his name.
+
+00:24:57.120 --> 00:24:59.679
+He worked at the University of Indiana.
+
+00:24:59.680 --> 00:25:03.839
+Another famous Scheme or Lisp person was there.
+
+00:25:03.840 --> 00:25:06.279
+Friedman, Dan Friedman was his advisor.
+
+00:25:06.280 --> 00:25:09.159
+Yeah, big name in Lisp.
+
+00:25:09.160 --> 00:25:12.839
+Anyway, so I was talking with William Byrd,
+
+00:25:12.840 --> 00:25:14.639
+and I'm a huge Haskell fan,
+
+00:25:14.640 --> 00:25:16.919
+and he told me why he didn't like Haskell at all,
+
+00:25:16.920 --> 00:25:19.639
+and kind of convinced me to try Scheme out.
+
+00:25:19.640 --> 00:25:22.759
+And what I really like about Scheme is,
+
+00:25:22.760 --> 00:25:25.399
+yeah, like you said, the minimalism,
+
+00:25:25.400 --> 00:25:29.839
+but it's more that it is very close
+
+00:25:29.840 --> 00:25:34.879
+to the mathematical framework of lambda calculus.
+
+00:25:34.880 --> 00:25:38.519
+Haskell is probably the most pure
+
+00:25:38.520 --> 00:25:39.919
+lambda calculus that I've ever used,
+
+00:25:39.920 --> 00:25:45.519
+but Scheme is like the simply typed lambda calculus,
+
+00:25:45.520 --> 00:25:47.799
+and That just appeals to me.
+
+00:25:47.800 --> 00:25:50.839
+I think, you know, if you have this tiny, tiny core language
+
+00:25:50.840 --> 00:25:55.599
+from which all of the computing can be defined,
+
+00:25:55.600 --> 00:25:57.119
+I think it's kind of a shame
+
+00:25:57.120 --> 00:26:00.079
+that so far we just haven't explored that space yet.
+
+00:26:00.080 --> 00:26:03.639
+I mean, there's compared to JavaScript or Python,
+
+00:26:03.640 --> 00:26:05.879
+there's very little scheme code out there
+
+00:26:05.880 --> 00:26:08.239
+and it could be doing so much. And I would just like to try
+
+00:26:08.240 --> 00:26:10.159
+and expand the scheme ecosystem
+
+00:26:10.160 --> 00:26:12.999
+and see just what this tiny little language can do.
+
+00:26:13.000 --> 00:26:14.479
+And I think we haven't even seen
+
+00:26:14.480 --> 00:26:16.839
+a fraction of what it can do.
+
+00:26:16.840 --> 00:26:22.399
+That's why I've chosen scheme.
+
+00:26:22.400 --> 00:26:24.719
+Divya, I see you've got a bunch more comments.
+
+00:26:24.720 --> 00:26:26.679
+I think we're just about close to our time here,
+
+00:26:26.680 --> 00:26:28.279
+but if you wanted to jump back in,
+
+00:26:28.280 --> 00:26:30.519
+I'm sorry, I had to cut you off a little before.
+
+00:26:30.520 --> 00:26:33.959
+No, it's fine. No, it's fine.
+
+00:26:33.960 --> 00:26:36.599
+I think I agree with most of what he said.
+
+00:26:36.600 --> 00:26:40.679
+So, yeah, thank you so much.
+
+00:26:40.680 --> 00:26:45.159
+Um, closing thoughts, Ramin.
+
+00:26:45.160 --> 00:26:51.639
+Yeah, I guess everybody, please, if you're interested,
+
+00:26:51.640 --> 00:26:56.719
+keep watching my Mastodon and keep watching my Codeberg.
+
+00:26:56.720 --> 00:27:01.559
+I'm going to try and squash this bug as quickly as I can.
+
+00:27:01.560 --> 00:27:03.279
+I hope early next year,
+
+00:27:03.280 --> 00:27:07.519
+hopefully not much later than February,
+
+00:27:07.520 --> 00:27:12.039
+I'll actually be able to start taking in contributions
+
+00:27:12.040 --> 00:27:16.719
+for some of the Emacs Lisp built-ins in the code base.
+
+00:27:16.720 --> 00:27:21.959
+So, please keep watching. The pace of my development
+
+00:27:21.960 --> 00:27:24.279
+has increased pretty rapidly recently,
+
+00:27:24.280 --> 00:27:25.839
+and I think we're pretty close
+
+00:27:25.840 --> 00:27:29.119
+to getting something that we can all use together.
+
+00:27:29.120 --> 00:27:31.719
+Thank you once again for your amazing talk,
+
+00:27:31.720 --> 00:27:34.039
+for your exceptional work,
+
+00:27:34.040 --> 00:27:36.599
+and for jumping in, doing the live Q&A,
+
+00:27:36.600 --> 00:27:40.039
+rolling with us here as we have yet another
+
+00:27:40.040 --> 00:27:42.079
+We'll See How It Goes conference.
+
+00:27:42.080 --> 00:27:44.279
+It's been just amazing so far,
+
+00:27:44.280 --> 00:27:46.839
+and this talk is no small part of that. Thank you.
+
+00:27:46.840 --> 00:27:50.279
+Oh, thank you so much. Yeah. OK, cool.
+
+00:27:50.280 --> 00:27:51.834
+And thanks for all the questions, everyone.
diff --git a/2025/captions/emacsconf-2025-schemacs--one-year-progress-update-schemacs-formerly-gypsum--ramin-honary--main--chapters.vtt b/2025/captions/emacsconf-2025-schemacs--one-year-progress-update-schemacs-formerly-gypsum--ramin-honary--main--chapters.vtt
new file mode 100644
index 00000000..d266d618
--- /dev/null
+++ b/2025/captions/emacsconf-2025-schemacs--one-year-progress-update-schemacs-formerly-gypsum--ramin-honary--main--chapters.vtt
@@ -0,0 +1,29 @@
+WEBVTT
+
+
+00:02:07.200 --> 00:04:24.759
+The scope of the project
+
+00:04:24.760 --> 00:05:49.719
+Difference with Robin Templeton's project (Guile-Emacs)
+
+00:05:49.720 --> 00:07:28.039
+Progress made since last year
+
+00:07:28.040 --> 00:09:06.039
+Portable React-like GUI
+
+00:09:06.040 --> 00:11:48.699
+Demo
+
+00:11:48.700 --> 00:14:12.019
+Additional changes
+
+00:14:12.020 --> 00:17:06.199
+Other Scheme implementations
+
+00:17:06.200 --> 00:21:51.519
+GUI framework
+
+00:21:51.520 --> 00:23:14.113
+Wrapping up
diff --git a/2025/captions/emacsconf-2025-schemacs--one-year-progress-update-schemacs-formerly-gypsum--ramin-honary--main.vtt b/2025/captions/emacsconf-2025-schemacs--one-year-progress-update-schemacs-formerly-gypsum--ramin-honary--main.vtt
new file mode 100644
index 00000000..ed301c1c
--- /dev/null
+++ b/2025/captions/emacsconf-2025-schemacs--one-year-progress-update-schemacs-formerly-gypsum--ramin-honary--main.vtt
@@ -0,0 +1,1183 @@
+WEBVTT captioned by sachac
+
+00:00:01.060 --> 00:00:05.639
+Hi, EmacsConf 2025. My name is Ramin Honary,
+
+00:00:05.640 --> 00:00:07.559
+and I'd like to talk to you today
+
+00:00:07.560 --> 00:00:10.399
+about my project called Schemacs
+
+00:00:10.400 --> 00:00:12.079
+which I presented last year.
+
+00:00:12.080 --> 00:00:13.879
+Back then it was called "Gypsum"
+
+00:00:13.880 --> 00:00:18.319
+and the name has since changed.
+
+00:00:18.320 --> 00:00:20.239
+So my name is Ramin Honary.
+
+00:00:20.240 --> 00:00:24.999
+I'm an Emacs enthusiast, have been since 2017 or so.
+
+00:00:25.000 --> 00:00:27.759
+I'm a full stack software developer.
+
+00:00:27.760 --> 00:00:29.300
+I love Haskell, Scheme,
+
+00:00:29.301 --> 00:00:31.433
+anything functional programming related,
+
+00:00:31.434 --> 00:00:32.959
+and of course Emacs.
+
+00:00:32.960 --> 00:00:36.199
+I started learning Scheme about three years ago,
+
+00:00:36.200 --> 00:00:37.999
+and this is my third time presenting
+
+00:00:38.000 --> 00:00:40.799
+at EmacsConf.
+
+00:00:40.800 --> 00:00:46.479
+So the Schemacs project that I'm talking to,
+
+00:00:46.480 --> 00:00:48.159
+I'm talking about to you today,
+
+00:00:48.160 --> 00:00:50.279
+was originally called "Gypsum".
+
+00:00:50.280 --> 00:00:53.359
+The reason I did not call it "Schemacs"
+
+00:00:53.360 --> 00:00:58.119
+was that the name "Schemacs" was taken on GitHub.
+
+00:00:58.120 --> 00:00:59.567
+But in the past year,
+
+00:00:59.568 --> 00:01:02.119
+I was able to get the permission
+
+00:01:02.120 --> 00:01:04.479
+of the author of GitHub's Schemacs
+
+00:01:04.480 --> 00:01:08.840
+project to name my project the same thing,
+
+00:01:08.841 --> 00:01:11.320
+even though it's a very similar project.
+
+00:01:11.321 --> 00:01:14.719
+So I changed the name.
+
+00:01:14.720 --> 00:01:19.700
+Let me see if I can quickly show the screen.
+
+00:01:19.701 --> 00:01:24.959
+So yeah, I have archived the old project.
+
+00:01:24.960 --> 00:01:27.719
+It's still there, but there's an explanation in
+
+00:01:27.720 --> 00:01:30.167
+the readme file and a screen grab
+
+00:01:30.168 --> 00:01:31.599
+of the conversation I had
+
+00:01:31.600 --> 00:01:36.119
+with the original author of GitHub Schemacs.
+
+00:01:36.120 --> 00:01:38.679
+My Schemacs is not on GitHub at all.
+
+00:01:38.680 --> 00:01:43.879
+It's only on Codeberg. So please don't get confused.
+
+00:01:43.880 --> 00:01:45.999
+But yes, I received permission
+
+00:01:46.000 --> 00:01:50.199
+to change the name and so I did.
+
+00:01:50.200 --> 00:01:52.839
+And I would like to give a quick shout-out to
+
+00:01:52.840 --> 00:01:57.239
+user "Tusharhero" for helping me with that.
+
+00:01:57.240 --> 00:02:02.639
+This person really helped make that name change happen.
+
+00:02:02.640 --> 00:02:07.199
+So back to the slides.
+
+NOTE The scope of the project
+
+00:02:07.200 --> 00:02:11.319
+And so now I'd like to clarify the scope of the project.
+
+00:02:11.320 --> 00:02:13.000
+I don't think I quite made it clear
+
+00:02:13.001 --> 00:02:14.919
+well enough last year,
+
+00:02:14.920 --> 00:02:18.400
+but... Although I'm definitely cloning
+
+00:02:18.401 --> 00:02:20.167
+the Emacs Lisp programming language,
+
+00:02:20.168 --> 00:02:25.267
+the actual scope of the Schemacs project
+
+00:02:25.268 --> 00:02:29.759
+is to make an Emacs-like app platform for Scheme.
+
+00:02:29.760 --> 00:02:32.959
+I don't consider Emacs to be a text editor.
+
+00:02:32.960 --> 00:02:38.199
+I consider Emacs to be a Lisp app platform.
+
+00:02:38.200 --> 00:02:39.839
+So it's similar to something like the
+
+00:02:39.840 --> 00:02:48.539
+World Wide Web, or Microsoft's .NET app platform, or Java.
+
+00:02:48.540 --> 00:02:52.559
+These are all examples of app platforms.
+
+00:02:52.560 --> 00:02:55.119
+I would like Schemacs to make it easy
+
+00:02:55.120 --> 00:02:59.399
+for not only people to use it for
+
+00:02:59.400 --> 00:03:03.479
+things like editing text or, you know, for
+
+00:03:03.480 --> 00:03:06.439
+using your computer through a command line
+
+00:03:06.440 --> 00:03:10.599
+or manipulating your Git repository.
+
+00:03:10.600 --> 00:03:13.159
+I'd also like you to be able to create simple
+
+00:03:13.160 --> 00:03:16.119
+GUIs or TUIs using Scheme.
+
+00:03:16.120 --> 00:03:19.319
+So that's also one of the goals of this project.
+
+00:03:19.320 --> 00:03:23.079
+It will of course have an Emacs-like text editor,
+
+00:03:23.080 --> 00:03:24.999
+and I will clone Emacs Lisp.
+
+00:03:25.000 --> 00:03:29.879
+So hopefully GNU Emacs users
+
+00:03:29.880 --> 00:03:32.779
+will feel comfortable moving over to Schemacs
+
+00:03:32.780 --> 00:03:35.679
+because they'll be able to use your init.
+
+00:03:35.680 --> 00:03:40.399
+You'll be able to use your init.el file.
+
+00:03:40.400 --> 00:03:43.239
+So configuring and scripting Schemacs
+
+00:03:43.240 --> 00:03:44.479
+should be done in Scheme.
+
+00:03:44.480 --> 00:03:47.679
+I'd like to encourage scripting in Scheme
+
+00:03:47.680 --> 00:03:51.199
+and creating new workflows and macros in Scheme.
+
+00:03:51.200 --> 00:03:54.267
+It will support Emacs Lisp depending on
+
+00:03:54.268 --> 00:03:59.319
+how much of the Emacs Lisp interpreter I can clone.
+
+00:03:59.320 --> 00:04:03.039
+That will be supported but not encouraged.
+
+00:04:03.040 --> 00:04:06.319
+But you should still be able to run your init.el.
+
+00:04:06.320 --> 00:04:08.839
+And I would like it to be good enough,
+
+00:04:08.840 --> 00:04:09.999
+this Emacs Lisp interpreter
+
+00:04:10.000 --> 00:04:12.999
+should be good enough to run packages from ELPA.
+
+00:04:13.000 --> 00:04:15.879
+Although it will probably be some time
+
+00:04:15.880 --> 00:04:17.559
+before it will be able to run
+
+00:04:17.560 --> 00:04:24.759
+something as large as Org Mode or Magit.
+
+NOTE Difference with Robin Templeton's project (Guile-Emacs)
+
+00:04:24.760 --> 00:04:27.439
+It is slightly different from the Guile-Emacs project.
+
+00:04:27.440 --> 00:04:30.333
+This is the work of Robin Templeton
+
+00:04:30.334 --> 00:04:32.219
+who presented last year.
+
+00:04:32.220 --> 00:04:36.033
+Guile-Emacs links the Guile runtime
+
+00:04:36.034 --> 00:04:38.500
+into the Emacs executable.
+
+00:04:38.501 --> 00:04:41.580
+It's not a Scheme application. Emacs,
+
+00:04:41.581 --> 00:04:44.200
+the core of Emacs is written in C.
+
+00:04:44.201 --> 00:04:48.120
+Guile, the core of Guile is written in C.
+
+00:04:48.121 --> 00:04:53.700
+What Robin Templeton has done is, at the C level, linked
+
+00:04:53.701 --> 00:04:56.833
+"libguile.so" into Emacs and then provided
+
+00:04:56.834 --> 00:04:59.500
+a programming layer where you can
+
+00:04:59.501 --> 00:05:04.759
+call the Scheme interpreter from Emacs Lisp
+
+00:05:04.760 --> 00:05:11.279
+so that you can run Scheme programs from within Emacs
+
+00:05:11.280 --> 00:05:13.919
+without having to launch a separate process
+
+00:05:13.920 --> 00:05:18.039
+and communicate over a channel such as a socket.
+
+00:05:18.040 --> 00:05:19.839
+You won't need "SLIME" or anything.
+
+00:05:19.840 --> 00:05:23.419
+The Guile interpreter is just right there inside of Emacs.
+
+00:05:23.420 --> 00:05:25.999
+But my project is not like this at all.
+
+00:05:26.000 --> 00:05:28.879
+Schemacs is written completely from the ground up
+
+00:05:28.880 --> 00:05:34.999
+in R7RS-compliant Scheme. And because it's R7RS-compliant,
+
+00:05:35.000 --> 00:05:37.999
+it's not bound to any one particular Scheme implementation,
+
+00:05:38.000 --> 00:05:39.879
+although Guile is the reference implementation.
+
+00:05:39.880 --> 00:05:42.359
+One goal of this project is to be able to run
+
+00:05:42.360 --> 00:05:49.719
+Schemacs on any R7RS-compliant Scheme implementation.
+
+NOTE Progress made since last year
+
+00:05:49.720 --> 00:05:56.259
+The work that I've done this past year mostly is internal.
+
+00:05:56.260 --> 00:06:00.939
+There's not much that you can see on the surface.
+
+00:06:00.940 --> 00:06:04.519
+But the most... One of the most important things that I
+
+00:06:04.520 --> 00:06:06.839
+did was I rewrote the parser in R7RS Scheme,
+
+00:06:06.840 --> 00:06:07.919
+so it no longer depends on
+
+00:06:07.920 --> 00:06:11.999
+the Guile regular expressions library.
+
+00:06:12.000 --> 00:06:14.959
+The parser now also provides source locations,
+
+00:06:14.960 --> 00:06:18.939
+so if an error occurs in Emacs Lisp,
+
+00:06:18.940 --> 00:06:20.567
+there will be a stack trace
+
+00:06:20.568 --> 00:06:23.633
+and it will show you where in the source code
+
+00:06:23.634 --> 00:06:28.319
+the error occured. This was not possible last year.
+
+00:06:28.320 --> 00:06:30.860
+And because it no longer depends on Guile,
+
+00:06:30.861 --> 00:06:34.520
+I can make it work on multiple Scheme implementations.
+
+00:06:34.521 --> 00:06:36.820
+So far, I've been able to get it to run on
+
+00:06:36.821 --> 00:06:38.920
+the Chibi Scheme interpreter
+
+00:06:38.921 --> 00:06:41.280
+and the Gauche Scheme interpreter, as well as
+
+00:06:41.281 --> 00:06:44.279
+Guile, which is the reference implementation.
+
+00:06:44.280 --> 00:06:48.559
+For a short time, it did work also on Chez Scheme,
+
+00:06:48.560 --> 00:06:53.179
+the Chez Scheme compiler, using Gwen Weinholt's "Akku,"
+
+00:06:53.180 --> 00:06:59.299
+which is a program that translates R7RS Scheme to R6RS Scheme.
+
+00:06:59.300 --> 00:07:04.519
+And with that translation, because Chez Scheme
+
+00:07:04.520 --> 00:07:07.319
+is pretty strictly an R6RS compiler,
+
+00:07:07.320 --> 00:07:11.519
+the translation allows you to run R7RS programs.
+
+00:07:11.520 --> 00:07:15.219
+But due to some change, I'm not sure where,
+
+00:07:15.220 --> 00:07:17.119
+it may have been changed in the Schemacs source code,
+
+00:07:17.120 --> 00:07:19.639
+or it may have been a change to Akku,
+
+00:07:19.640 --> 00:07:21.239
+but it no longer builds on Chez.
+
+00:07:21.240 --> 00:07:28.039
+It did at one point. I'd like to try to fix that.
+
+NOTE Portable React-like GUI
+
+00:07:28.040 --> 00:07:30.719
+The second most important thing that I've worked on is a
+
+00:07:30.720 --> 00:07:36.439
+portable React-like GUI. And so React,
+
+00:07:36.440 --> 00:07:40.999
+for anyone who has done web programming,
+
+00:07:41.000 --> 00:07:46.839
+is a very popular framework for programming web applications.
+
+00:07:46.840 --> 00:07:48.233
+And I've provided something
+
+00:07:48.234 --> 00:07:49.599
+very similar to that in Scheme now.
+
+00:07:49.600 --> 00:07:54.679
+So it works. I have constructed a DOM data structure
+
+00:07:54.680 --> 00:07:59.079
+in Scheme. It's just an ordinary Scheme data structure.
+
+00:07:59.080 --> 00:08:01.519
+It works like the web's "Document Object Model"
+
+00:08:01.520 --> 00:08:03.960
+or the "DOM" data structure.
+
+00:08:03.961 --> 00:08:09.999
+And then this Scheme DOM data structure can be rendered
+
+00:08:10.000 --> 00:08:13.059
+using any GUI framework that is convenient
+
+00:08:13.060 --> 00:08:16.239
+for the Scheme implementation that you're targeting.
+
+00:08:16.240 --> 00:08:18.879
+And you should be able to implement
+
+00:08:18.880 --> 00:08:22.919
+also rendering to a CLI as well.
+
+00:08:22.920 --> 00:08:24.600
+The current reference implementation
+
+00:08:24.601 --> 00:08:27.759
+is using a framework called Guile-GI.
+
+00:08:27.760 --> 00:08:30.639
+This is the "GObject Introspection" framework.
+
+00:08:30.640 --> 00:08:31.967
+It's a very simple
+
+00:08:31.968 --> 00:08:36.119
+GObject Introspection framework for Guile,
+
+00:08:36.120 --> 00:08:40.979
+and it binds to GTK3 on Linux.
+
+00:08:40.980 --> 00:08:42.919
+There's a similar framework called G-Golf
+
+00:08:42.920 --> 00:08:48.359
+which I'd like to begin using as well, also for Guile.
+
+00:08:48.360 --> 00:08:53.739
+G-Golf seems to be a bit more well-maintained, a bit...
+
+00:08:53.740 --> 00:08:57.799
+It has better features. G-Golf may be a
+
+00:08:57.800 --> 00:09:00.039
+better rendering backend for the reference
+
+00:09:00.040 --> 00:09:06.039
+implementation, but I would like to provide both.
+
+NOTE Demo
+
+00:09:06.040 --> 00:09:07.933
+I will give a demo of this now.
+
+00:09:07.934 --> 00:09:12.999
+Unfortunately not a whole lot
+
+00:09:13.000 --> 00:09:18.139
+to see compared to last year.
+
+00:09:18.140 --> 00:09:20.639
+First thing I'd like to show is
+
+00:09:20.640 --> 00:09:24.279
+that I now have a Makefile. You can look inside
+
+00:09:24.280 --> 00:09:28.400
+this Makefile and if you're able to read a Makefile,
+
+00:09:28.401 --> 00:09:31.967
+you can see that I have several targets now available.
+
+00:09:31.968 --> 00:09:35.000
+You can build Schemacs for Guile,
+
+00:09:35.001 --> 00:09:36.667
+you can build Schemacs for Gambit,
+
+00:09:36.668 --> 00:09:40.333
+or Stklos, or Chicken, or Chez,
+
+00:09:40.334 --> 00:09:42.900
+although none of these (except for Guile)
+
+00:09:42.901 --> 00:09:51.167
+currently works. These targets will actually
+
+00:09:51.168 --> 00:09:56.000
+build the source code, but then you would have to
+
+00:09:56.001 --> 00:09:59.433
+load it into the REPL separately.
+
+00:09:59.434 --> 00:10:02.467
+There are targets for launching
+
+00:10:02.468 --> 00:10:06.467
+a Gauche REPL and a Chibi REPL.
+
+00:10:06.468 --> 00:10:10.867
+You can also run the Emacs Lisp tests
+
+00:10:10.868 --> 00:10:13.067
+in Gauche and Chibi.
+
+00:10:13.068 --> 00:10:19.079
+You can also start a Guile REPL through this Makefile.
+
+00:10:19.080 --> 00:10:27.499
+So I will do that right now in the shell.
+
+00:10:27.500 --> 00:10:31.833
+(...make the text larger...there we go...)
+
+00:10:31.834 --> 00:10:38.479
+OK, so we have this directory of the source code.
+
+00:10:38.480 --> 00:10:44.559
+Let's just begin by running "guile.sh".
+
+00:10:44.560 --> 00:10:52.600
+This will launch a REPL and you can load "main-guile".
+
+00:10:52.601 --> 00:10:59.719
+This will launch the GUI. This is the basic
+
+00:10:59.720 --> 00:11:04.800
+proof of concept GUI that uses Guile-GI.
+
+00:11:04.801 --> 00:11:10.519
+So it may be hard to see.
+
+00:11:10.520 --> 00:11:14.559
+I cannot change the size of the text yet.
+
+00:11:14.560 --> 00:11:17.333
+I've implemented the M-: feature
+
+00:11:17.334 --> 00:11:24.067
+where you can eval in a minibuffer some Scheme code.
+
+00:11:24.068 --> 00:11:34.439
+(string-append "hello" ...)
+
+00:11:34.440 --> 00:11:38.279
+It outputs the result in the buffer.
+
+00:11:38.280 --> 00:11:40.959
+This is basically the "*Messages*" buffer.
+
+00:11:40.960 --> 00:11:42.619
+And that's all the more that I have.
+
+00:11:42.620 --> 00:11:45.479
+This is the same state it was in last year.
+
+00:11:45.480 --> 00:11:48.699
+It hasn't changed a whole lot since back then.
+
+NOTE Additional changes
+
+00:11:48.700 --> 00:11:52.819
+But I have made additional changes.
+
+00:11:52.820 --> 00:12:05.379
+So first of all, you can run
+
+00:12:05.380 --> 00:12:10.200
+(let me just go back into the Guile)... you can
+
+00:12:10.201 --> 00:12:16.619
+run the Emacs Lisp interpreter tests, so "elisp-tests".
+
+00:12:16.620 --> 00:12:18.919
+As you can see, it gives you a stack trace.
+
+00:12:18.920 --> 00:12:22.039
+So this is an error that I've been able to reproduce.
+
+00:12:22.040 --> 00:12:24.599
+I know exactly what the cause of this error is.
+
+00:12:24.600 --> 00:12:27.599
+It is not finding a variable
+
+00:12:27.600 --> 00:12:30.319
+because the closure is not correctly
+
+00:12:30.320 --> 00:12:35.199
+capturing its environment. So there should be a variable
+
+00:12:35.200 --> 00:12:38.719
+in the closure, but that variable has not been captured
+
+00:12:38.720 --> 00:12:43.459
+and so it is causing an error.
+
+00:12:43.460 --> 00:12:48.080
+It is currently loading "byte-run.el".
+
+00:12:48.081 --> 00:12:49.820
+Let me show you what code that is here.
+
+00:12:49.821 --> 00:12:53.500
+So I've copied into the source repository
+
+00:12:53.501 --> 00:12:58.760
+for Schemacs some of the Elisp code from GNU Emacs.
+
+00:12:58.761 --> 00:13:04.420
+So I have this "subr.el".
+
+00:13:04.421 --> 00:13:09.860
+This declares most of the core of Emacs Lisp
+
+00:13:09.861 --> 00:13:12.860
+that's not written in C.
+
+00:13:12.861 --> 00:13:18.999
+There's also "byte-run.el". Schemacs Emacs Lisp can now
+
+00:13:19.000 --> 00:13:24.379
+evaluate this. This is where functions like "defun" are
+
+00:13:24.380 --> 00:13:28.359
+defined, and "defmacro". So as you can see,
+
+00:13:28.360 --> 00:13:30.799
+defun itself is a defmacro defined right here.
+
+00:13:30.800 --> 00:13:34.859
+It's written in Emacs Lisp itself,
+
+00:13:34.860 --> 00:13:37.719
+defined in terms of defalias.
+
+00:13:37.720 --> 00:13:40.239
+So I can evaluate "byte-run",
+
+00:13:40.240 --> 00:13:42.739
+I can evaluate "macroexp",
+
+00:13:42.740 --> 00:13:46.019
+and the failure occurs somewhere in "subr.el".
+
+00:13:46.020 --> 00:13:48.959
+Although if you look at the stack trace,
+
+00:13:48.960 --> 00:13:51.159
+it doesn't provide all the necessary information.
+
+00:13:51.160 --> 00:13:56.439
+So it appears to be happening in byte-run.el.
+
+00:13:56.440 --> 00:14:00.619
+Really, it's an error that's occurring inside of a macro,
+
+00:14:00.620 --> 00:14:05.799
+and the macro call site is somewhere in subr.el.
+
+00:14:05.800 --> 00:14:08.639
+Anyway, take note of this stack trace.
+
+00:14:08.640 --> 00:14:12.019
+This was run from within Guile.
+
+NOTE Other Scheme implementations
+
+00:14:12.020 --> 00:14:14.199
+Now what I've done this past year
+
+00:14:14.200 --> 00:14:19.479
+is make it work on other Scheme implementations.
+
+00:14:19.480 --> 00:14:23.833
+Use "make" to launch a Gauche REPL.
+
+00:14:23.834 --> 00:14:25.999
+Now I'm inside of Gauche.
+
+00:14:26.000 --> 00:14:27.233
+This is the command that
+
+00:14:27.234 --> 00:14:30.079
+you would use to launch a Gauche REPL.
+
+00:14:30.080 --> 00:14:38.199
+And I can load the same program (load "elisp-tests.scm").
+
+00:14:38.200 --> 00:14:42.759
+You get the exact same result as Guile.
+
+00:14:42.760 --> 00:14:45.799
+So we have two different Scheme implementations
+
+00:14:45.800 --> 00:14:46.799
+producing the same result.
+
+00:14:46.800 --> 00:14:53.079
+Let's try "make" a Chibi REPL. This is Chibi Scheme.
+
+00:14:53.080 --> 00:15:00.219
+And you can (load "elisp-tests.scm").
+
+00:15:00.220 --> 00:15:04.080
+Chibi is a bit slower, but you get the exact same result.
+
+00:15:04.081 --> 00:15:07.400
+So we have three different Scheme implementations
+
+00:15:07.401 --> 00:15:11.539
+all running Emacs Lisp,
+
+00:15:11.540 --> 00:15:14.039
+and all producing the same result.
+
+00:15:14.040 --> 00:15:14.767
+I think that's...
+
+00:15:14.768 --> 00:15:17.099
+I'm fairly proud of that accomplishment.
+
+00:15:17.100 --> 00:15:21.200
+I was able to get the code written to the point
+
+00:15:21.201 --> 00:15:24.879
+where it actually runs on multiple implementations.
+
+00:15:24.880 --> 00:15:30.599
+You can also try making it for other Scheme compilers
+
+00:15:30.600 --> 00:15:35.959
+like "schemacs-mitscheme" for example,
+
+00:15:35.960 --> 00:15:40.019
+but this will fail.
+
+00:15:40.020 --> 00:15:46.679
+You can try building it for "schemacs-chez",
+
+00:15:46.680 --> 00:15:51.800
+Let's try Chez... there we go.
+
+00:15:51.801 --> 00:15:54.233
+And it will use Akku,
+
+00:15:54.234 --> 00:15:58.000
+and it will fetch the necessary dependencies.
+
+00:15:58.001 --> 00:16:03.433
+But it fails, and I haven't been able to
+
+00:16:03.434 --> 00:16:05.959
+debug that quite yet.
+
+00:16:05.960 --> 00:16:13.139
+Stklos fails for a similar reason.
+
+00:16:13.140 --> 00:16:21.699
+Gambit... Chicken still doesn't build all the way yet.
+
+00:16:21.700 --> 00:16:27.120
+The Makefile at least has places for it.
+
+00:16:27.121 --> 00:16:30.967
+If anyone can help me out and get Schemacs to compile
+
+00:16:30.968 --> 00:16:32.733
+on these other Scheme implementations,
+
+00:16:32.734 --> 00:16:34.000
+I'd appreciate it.
+
+00:16:34.001 --> 00:16:35.467
+I can probably figure it out myself,
+
+00:16:35.468 --> 00:16:37.000
+but that will take more time.
+
+00:16:37.001 --> 00:16:40.120
+And let me just show you quickly
+
+00:16:40.121 --> 00:16:41.720
+the test program.
+
+00:16:41.721 --> 00:16:44.500
+Basically this is the Emacs Lisp test program
+
+00:16:44.501 --> 00:16:48.580
+that I was just running, and it produces an error.
+
+00:16:48.581 --> 00:16:53.220
+All it does is it loads these files here in this order,
+
+00:16:53.221 --> 00:16:55.180
+and it fails right around here.
+
+00:16:55.181 --> 00:16:58.319
+So it's able to load these two.
+
+00:16:58.320 --> 00:17:01.360
+And yeah, that's what I've accomplished
+
+00:17:01.361 --> 00:17:06.199
+on the Emacs Lisp side of things.
+
+NOTE GUI framework
+
+00:17:06.200 --> 00:17:09.119
+The next thing I want to show you is the GUI framework
+
+00:17:09.120 --> 00:17:13.199
+that I've written, which I'm fairly proud of so far.
+
+00:17:13.200 --> 00:17:15.833
+So this is the GUI framework
+
+00:17:15.834 --> 00:17:19.919
+(oops, I better launch it again, OK...)
+
+00:17:19.920 --> 00:17:22.600
+and let me show you the tests.
+
+00:17:22.601 --> 00:17:25.700
+So here in the tests, you can start to see
+
+00:17:25.701 --> 00:17:29.067
+some examples of how you use it.
+
+00:17:29.068 --> 00:17:31.833
+So here is a "counter" test, and this is kind of like
+
+00:17:31.834 --> 00:17:35.940
+the "hello world" of reactive programming frameworks,
+
+00:17:35.941 --> 00:17:38.000
+where you have a state variable,
+
+00:17:38.200 --> 00:17:41.659
+sometimes called an "observable."
+
+00:17:41.660 --> 00:17:43.439
+I'm calling it "number",
+
+00:17:43.440 --> 00:17:47.838
+and it uses "=" to check if the state has updated.
+
+00:17:49.000 --> 00:17:52.820
+If an update occurs and the new value is different
+
+00:17:52.821 --> 00:17:55.032
+from the old value according to the "=" function,
+
+00:17:55.033 --> 00:17:59.232
+then trigger a state update in the GUI as well.
+
+00:17:59.233 --> 00:18:03.099
+Initialize to 0, bound to "number".
+
+00:18:03.100 --> 00:18:06.132
+I have a "button" function which creates a simple button.
+
+00:18:06.133 --> 00:18:07.832
+It takes a label and an action.
+
+00:18:07.833 --> 00:18:10.865
+Right here you see the "div" command.
+
+00:18:10.866 --> 00:18:13.039
+This is what creates a "div".
+
+00:18:13.040 --> 00:18:18.999
+Using the properties, I describe that this div is a
+
+00:18:19.000 --> 00:18:22.599
+push-button and the "on-button-push" is an action.
+
+00:18:22.600 --> 00:18:25.265
+The action is to update the variable "number"
+
+00:18:25.266 --> 00:18:30.399
+using whatever function or lambda was provided to it.
+
+00:18:30.400 --> 00:18:31.965
+And then the content that you see on screen,
+
+00:18:31.966 --> 00:18:34.033
+that you will see on screen when it runs,
+
+00:18:34.034 --> 00:18:38.667
+is here. You create a "div-pack cut-vertical".
+
+00:18:38.668 --> 00:18:43.233
+You declare two buttons and then you declare
+
+00:18:43.234 --> 00:18:46.800
+this "use-vars" which will take the content
+
+00:18:46.801 --> 00:18:48.833
+of this variable here, this observable,
+
+00:18:48.834 --> 00:18:51.733
+and place it into the GUI next to the buttons here.
+
+00:18:51.734 --> 00:18:54.233
+So what you will see on screen is
+
+00:18:54.234 --> 00:18:57.067
+a "plus" button which increments,
+
+00:18:57.068 --> 00:18:59.320
+here is the "increment" function,
+
+00:18:59.321 --> 00:19:02.779
+a "minus" button which decrements,
+
+00:19:02.780 --> 00:19:05.479
+and then the content of the variable that is
+
+00:19:05.480 --> 00:19:09.699
+being incremented and decremented.
+
+00:19:09.700 --> 00:19:11.865
+The advantage of these reactive frameworks is that
+
+00:19:11.866 --> 00:19:13.065
+with very few lines of code
+
+00:19:13.066 --> 00:19:16.032
+you can create fairly complex interfaces.
+
+00:19:16.033 --> 00:19:18.599
+The less code you have to write,
+
+00:19:18.600 --> 00:19:21.232
+the fewer chances you have to make mistakes.
+
+00:19:21.233 --> 00:19:23.967
+So let's just run this program.
+
+00:19:23.968 --> 00:19:33.292
+This was the "counter-test."
+
+00:19:33.293 --> 00:19:35.199
+And that is the debug window. Here's the "counter."
+
+00:19:35.200 --> 00:19:38.452
+I'm sorry it's not much larger than this.
+
+00:19:38.453 --> 00:19:41.132
+But here's the "plus" button, the "minus" button,
+
+00:19:41.133 --> 00:19:43.919
+and here's the "number", 0.
+
+00:19:43.920 --> 00:19:49.792
+And I can increment or decrement as much as I like.
+
+00:19:49.793 --> 00:19:51.100
+So yeah, that's kind of the hello world
+
+00:19:51.101 --> 00:19:55.239
+of reactive programming. (I'll reboot the REPL...)
+
+00:19:55.240 --> 00:19:58.599
+The next thing I want to show you is this layout test.
+
+00:19:58.600 --> 00:20:02.192
+And I'll just run the test first.
+
+00:20:02.193 --> 00:20:05.019
+So here we have basically
+
+00:20:05.020 --> 00:20:08.539
+a tiling window manager kind of thing,
+
+00:20:08.540 --> 00:20:11.279
+where you can resize the tiles
+
+00:20:11.280 --> 00:20:12.933
+and then by clicking on these buttons here,
+
+00:20:12.934 --> 00:20:16.939
+you can change the layout.
+
+00:20:16.940 --> 00:20:20.167
+So you can do two on the right,
+
+00:20:20.168 --> 00:20:27.100
+two up above, or three up above. So, yeah.
+
+00:20:27.101 --> 00:20:30.267
+Those tiling windows, as you can see,
+
+00:20:30.268 --> 00:20:33.000
+once I work this branch into the main branch of Schemacs,
+
+00:20:33.001 --> 00:20:35.273
+I can use that to implement
+
+00:20:35.274 --> 00:20:38.265
+the split window functionality for Schemacs,
+
+00:20:38.266 --> 00:20:42.466
+the editor. So here's what this split...
+
+00:20:42.466 --> 00:20:44.865
+Here's the layout test that you just saw.
+
+00:20:44.866 --> 00:20:46.732
+Let me make it a bit smaller
+
+00:20:46.733 --> 00:20:48.199
+so that it all fits on one screen.
+
+00:20:48.200 --> 00:20:51.365
+So basically we have the "button" command again,
+
+00:20:51.366 --> 00:20:54.132
+and then these are the button actions
+
+00:20:54.133 --> 00:20:56.999
+which basically just changes the layout,
+
+00:20:57.000 --> 00:21:01.459
+and then I have the layout. So this layout is a "div."
+
+00:21:01.460 --> 00:21:04.919
+The first div just places three buttons in a row.
+
+00:21:04.920 --> 00:21:07.532
+The next layout is a div within a div.
+
+00:21:07.533 --> 00:21:12.999
+So we have one div which places the button
+
+00:21:13.000 --> 00:21:18.632
+called "two right" buttons, and the div above it,
+
+00:21:18.633 --> 00:21:21.492
+which places the "three in a row" button
+
+00:21:21.493 --> 00:21:22.660
+or the "two above" buttons.
+
+00:21:22.661 --> 00:21:26.000
+And here's the next... So there's three different
+
+00:21:26.001 --> 00:21:30.600
+layouts, and clicking on one of their associated buttons
+
+00:21:30.601 --> 00:21:32.100
+will just change the layout.
+
+00:21:32.101 --> 00:21:33.433
+As you can see, very little code
+
+00:21:33.434 --> 00:21:38.500
+to create a somewhat complex user interface.
+
+00:21:38.501 --> 00:21:42.867
+That's the advantage of using reactive or declarative
+
+00:21:42.868 --> 00:21:44.233
+UI programming paradigms.
+
+00:21:44.234 --> 00:21:47.232
+So yeah, this has not been merged into Schemacs
+
+00:21:47.233 --> 00:21:48.700
+at the time of this recording,
+
+00:21:48.701 --> 00:21:51.519
+but will be soon hopefully.
+
+NOTE Wrapping up
+
+00:21:51.520 --> 00:21:55.165
+So yeah, I think I've already gone on for 20 minutes.
+
+00:21:55.166 --> 00:21:59.139
+So I guess I'll just end my presentation here.
+
+00:21:59.140 --> 00:22:00.465
+I have lots more to talk about.
+
+00:22:00.466 --> 00:22:03.979
+I guess I will say one last thing before I go:
+
+00:22:03.980 --> 00:22:07.065
+that I would very much like for others
+
+00:22:07.066 --> 00:22:09.199
+to try and contribute to this project.
+
+00:22:09.200 --> 00:22:14.232
+I will do my best to try and help teach anybody
+
+00:22:14.233 --> 00:22:16.832
+or work with anybody, especially even
+
+00:22:16.833 --> 00:22:18.599
+if you don't have much experience with Scheme.
+
+00:22:18.600 --> 00:22:22.759
+I'd like to help everybody try to contribute.
+
+00:22:22.760 --> 00:22:26.239
+Basically I want to get this proof of concept working.
+
+00:22:26.240 --> 00:22:30.673
+I want to get a stable user interface up and running,
+
+00:22:30.674 --> 00:22:33.065
+and then we can start working on
+
+00:22:33.066 --> 00:22:36.699
+improving the Emacs Lisp interpreter all together.
+
+00:22:36.700 --> 00:22:41.065
+There are close to 1,400 built-in functions
+
+00:22:41.066 --> 00:22:43.659
+which need to be implemented.
+
+00:22:43.660 --> 00:22:44.965
+We don't need to get all of them
+
+00:22:44.966 --> 00:22:48.465
+in order to be able to run probably most of ELPA,
+
+00:22:48.466 --> 00:22:50.865
+but as much as possible.
+
+00:22:50.866 --> 00:22:54.799
+We would like to clone Emacs Lisp and I need help.
+
+00:22:54.800 --> 00:23:02.579
+So get a hold of me. My project is on Codeberg.
+
+00:23:02.580 --> 00:23:06.919
+Well, (oh, I can't show this here),
+
+00:23:06.920 --> 00:23:14.113
+but I will end it there. Thank you for listening.
diff --git a/2025/captions/emacsconf-2025-sun-close--sunday-closing-remarks--main.vtt b/2025/captions/emacsconf-2025-sun-close--sunday-closing-remarks--main.vtt
new file mode 100644
index 00000000..d2ad3832
--- /dev/null
+++ b/2025/captions/emacsconf-2025-sun-close--sunday-closing-remarks--main.vtt
@@ -0,0 +1,676 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:17.279
+screen. That screen. Yes. All right. Thank you so much.
+
+00:00:17.280 --> 00:00:22.439
+We have made it thus far. It is the end of EmacsConf 2025.
+
+00:00:22.440 --> 00:00:24.359
+Oh, I better remember to open this
+
+00:00:24.360 --> 00:00:32.999
+in case anyone wants to join me in this room.
+
+00:00:49.460 --> 00:00:51.139
+Hang on a sec. And normally all this stuff
+
+00:00:51.140 --> 00:00:52.959
+gets done automatically by my scripts,
+
+00:00:52.960 --> 00:00:55.250
+so I'm doing it manually. Ah, there you go.
+
+00:00:55.251 --> 00:00:58.125
+Okay, now people can join. Hooray, we made it!
+
+00:00:58.126 --> 00:01:01.439
+Today was great, and yesterday was great too,
+
+00:01:01.440 --> 00:01:06.519
+with so many fascinating talks and conversations.
+
+00:01:06.520 --> 00:01:09.599
+I'm really, really glad that it all worked out,
+
+00:01:09.600 --> 00:01:12.159
+despite some running around
+
+00:01:12.160 --> 00:01:14.679
+and figuring things out on the fly,
+
+00:01:14.680 --> 00:01:18.559
+we all managed to get there.
+
+00:01:18.560 --> 00:01:20.639
+I actually have some of the live
+
+00:01:20.640 --> 00:01:22.959
+talks recordings up already
+
+00:01:22.960 --> 00:01:28.399
+on media.emacsconf.org and YouTube, assuming things work.
+
+00:01:28.400 --> 00:01:33.319
+I'm just going to republish it from Emacs naturally.
+
+00:01:33.320 --> 00:01:36.359
+As you can see, I was e-debugging things
+
+00:01:36.360 --> 00:01:37.479
+to the very last minute.
+
+00:01:37.480 --> 00:01:39.799
+Yeah, feel free to spread the word.
+
+00:01:39.800 --> 00:01:42.519
+I check the Emacs hashtag every week
+
+00:01:42.520 --> 00:01:45.839
+as part of the Emacs news process anyway.
+
+00:01:45.840 --> 00:01:47.839
+So if you have any favorite talks,
+
+00:01:47.840 --> 00:01:52.039
+that's a great way to share the ideas with more people,
+
+00:01:52.040 --> 00:01:54.559
+and then even more conversations can happen.
+
+00:01:54.560 --> 00:01:58.079
+The prerecorded talks, as I mentioned,
+
+00:01:58.080 --> 00:02:00.239
+are already up on the wiki
+
+00:02:00.240 --> 00:02:05.199
+and at the media emacsconf.org slash 2027 website.
+
+00:02:05.200 --> 00:02:10.959
+Sorry, 2025. We're not in the time machine. 2025 site.
+
+00:02:10.960 --> 00:02:13.799
+And they should already be on YouTube as well.
+
+00:02:13.800 --> 00:02:16.399
+I will upload the late submissions
+
+00:02:16.400 --> 00:02:18.999
+and the live talks and the Q&A sessions
+
+00:02:19.000 --> 00:02:20.439
+over the next week or two.
+
+00:02:20.440 --> 00:02:23.199
+I usually get that done very quickly.
+
+00:02:23.200 --> 00:02:27.519
+I didn't even finish this sentence.
+
+00:02:27.520 --> 00:02:31.079
+I'll post an update to the Emacs Conf Discuss mailing list,
+
+00:02:31.080 --> 00:02:34.479
+so feel free to subscribe to that if you'd like an update.
+
+00:02:34.480 --> 00:02:37.559
+If you've got ideas for making things better,
+
+00:02:37.560 --> 00:02:40.959
+then feel free to drop them into the Etherpad
+
+00:02:40.960 --> 00:02:45.759
+so that we can make next year's conference even smoother.
+
+00:02:45.760 --> 00:02:51.119
+I had a lot of people watching, so thank you for that.
+
+00:02:51.120 --> 00:02:53.719
+And of course, thanks to all the speakers
+
+00:02:53.720 --> 00:02:56.359
+who put hours and hours into their presentations,
+
+00:02:56.360 --> 00:03:01.079
+the volunteers who helped both before and during the conference
+
+00:03:01.080 --> 00:03:03.439
+and who will help in the days ahead
+
+00:03:03.440 --> 00:03:08.919
+as we get everything extracted and packaged and transcribed even,
+
+00:03:08.920 --> 00:03:11.239
+and a nice chapter indices on the Q&A
+
+00:03:11.240 --> 00:03:14.399
+so you can jump to when a specific question was answered,
+
+00:03:14.400 --> 00:03:16.519
+all that good stuff.
+
+00:03:16.520 --> 00:03:19.799
+and to all those other people in their lives
+
+00:03:19.800 --> 00:03:23.479
+whose patience and support make all of this possible.
+
+00:03:23.480 --> 00:03:26.919
+So thank you so much for that.
+
+00:03:26.920 --> 00:03:30.199
+This year's host, you saw Corwin and you saw,
+
+00:03:30.200 --> 00:03:32.319
+I mean, what's, why am I,
+
+00:03:32.320 --> 00:03:34.439
+wait, I'm like buzzing all over the place
+
+00:03:34.440 --> 00:03:37.039
+as people are mentioning my nick on IRC.
+
+00:03:37.040 --> 00:03:40.319
+All right, now that I'm in do not disturb mode.
+
+00:03:40.320 --> 00:03:42.199
+So thank you to the hosts
+
+00:03:42.200 --> 00:03:43.839
+and thank you to other volunteers,
+
+00:03:43.840 --> 00:03:49.919
+JC and Trico and James and Amitav and Rodion and Jaybird and Indra.
+
+00:03:49.920 --> 00:03:55.119
+and Yang3, and Bhavin, and Michael, and Ian,
+
+00:03:55.120 --> 00:03:57.879
+and Jamie, and Ihor, and FlowyCoder,
+
+00:03:57.880 --> 00:03:58.839
+and probably other people
+
+00:03:58.840 --> 00:04:02.599
+that I have forgotten to copy out of my conference.org file
+
+00:04:02.600 --> 00:04:05.159
+and into this, but thank you anyway.
+
+00:04:05.160 --> 00:04:08.039
+Thank you to the Free Software Foundation.
+
+00:04:08.040 --> 00:04:12.159
+They host the mailing list, they host the media server,
+
+00:04:12.160 --> 00:04:16.359
+and of course, they've got like Emacs, so that's awesome.
+
+00:04:16.360 --> 00:04:23.479
+To make things easier, our streams are actually not on my computer.
+
+00:04:23.480 --> 00:04:26.279
+We use OBS and a server,
+
+00:04:26.280 --> 00:04:30.279
+a fairly beefy one that Ry P shares with us.
+
+00:04:30.280 --> 00:04:33.279
+So then I can VNC into it and control OBS
+
+00:04:33.280 --> 00:04:36.239
+and stream to IceCast and all that other goodness.
+
+00:04:36.240 --> 00:04:39.719
+And I don't have to worry about my computer stressing out.
+
+00:04:39.720 --> 00:04:43.439
+It's all good. And so we use a whole lot of free
+
+00:04:43.440 --> 00:04:45.519
+and open source software in the stack.
+
+00:04:45.520 --> 00:04:47.119
+So we are very, very grateful
+
+00:04:47.120 --> 00:04:49.159
+for all the users and contributors
+
+00:04:49.160 --> 00:04:50.759
+who make all of that possible.
+
+00:04:50.760 --> 00:04:55.919
+Things like Emacs and Org Mode and ERC and Tramp and Magit
+
+00:04:55.920 --> 00:04:59.159
+and BigBlueButton and Etherpad and IckyWicky and IceCast
+
+00:04:59.160 --> 00:05:02.319
+and OBS and TheLaunch and LiberaChat and FFmpeg
+
+00:05:02.320 --> 00:05:05.719
+and OpenAI Whisper, WhisperX, different interface.
+
+00:05:05.720 --> 00:05:09.639
+The Aeneas forced alignment tool, site transfer for uploads,
+
+00:05:09.640 --> 00:05:11.679
+subed for editing the subtitles,
+
+00:05:11.680 --> 00:05:14.439
+sub-seg for cutting the subtitles into nice chunks
+
+00:05:14.440 --> 00:05:17.399
+so that you're not like trying to read a whole lot in one line,
+
+00:05:17.400 --> 00:05:22.759
+Mozilla Firefox, MPV and TamperMonkey
+
+00:05:22.760 --> 00:05:25.919
+so that everything gets automatically logged in
+
+00:05:25.920 --> 00:05:30.479
+when the stream switches to like a big blue button room, it's handy.
+
+00:05:30.480 --> 00:05:32.999
+and of course, many other tools and services
+
+00:05:33.000 --> 00:05:35.199
+that we use to prepare and host this year's conference.
+
+00:05:35.200 --> 00:05:37.199
+Thanks to Shoshin for the music.
+
+00:05:37.200 --> 00:05:39.479
+He's an Emacs geek as well.
+
+00:05:39.480 --> 00:05:42.159
+If you also have music that you'd like to share with us
+
+00:05:42.160 --> 00:05:44.999
+under the Creative Commons Attribution License,
+
+00:05:45.000 --> 00:05:47.239
+please feel free to let me know
+
+00:05:47.240 --> 00:05:50.679
+or I should put in my email address here.
+
+00:05:50.680 --> 00:05:57.079
+Yeah, sacha@sachachua.com.
+
+00:05:57.080 --> 00:05:59.559
+So let us know in case you have music
+
+00:05:59.560 --> 00:06:01.599
+or other things you want to share.
+
+00:06:01.600 --> 00:06:03.599
+Thanks to the people who donated
+
+00:06:03.600 --> 00:06:06.439
+via the FSF working together program.
+
+00:06:06.440 --> 00:06:09.919
+It costs like I think less than a hundred dollars
+
+00:06:09.920 --> 00:06:11.319
+to run this whole thing
+
+00:06:11.320 --> 00:06:14.879
+that the biggest thing really is people's time.
+
+00:06:14.880 --> 00:06:17.119
+And thank you so much for sharing that with us.
+
+00:06:17.120 --> 00:06:20.719
+So yes, but thank you specifically to Scott and Jonathan
+
+00:06:20.720 --> 00:06:23.039
+and the other anonymous donors
+
+00:06:23.040 --> 00:06:26.479
+through the Working Together program.
+
+00:06:26.480 --> 00:06:30.199
+And that's where we are so far. Feel free to join me.
+
+00:06:30.200 --> 00:06:32.319
+I can be here until the kiddo says
+
+00:06:32.320 --> 00:06:34.719
+I have not given her enough hugs for today.
+
+00:06:34.720 --> 00:06:40.439
+But if you want to like do a quick recap of your favorite talks
+
+00:06:40.440 --> 00:06:43.719
+or how you're excited to take things going forward
+
+00:06:43.720 --> 00:06:45.159
+and all that stuff.
+
+00:06:45.160 --> 00:06:47.719
+You can join me in this as Sunday closing.
+
+00:06:47.720 --> 00:06:49.519
+If you look at the talk page,
+
+00:06:49.520 --> 00:06:51.999
+there's going to be theoretically
+
+00:06:52.000 --> 00:06:54.999
+a big blue button link there that you can join.
+
+00:06:55.000 --> 00:07:04.839
+But thank you for this. And now it's like awkward silence.
+
+00:07:04.840 --> 00:07:07.719
+I'm wondering what you learned most
+
+00:07:07.720 --> 00:07:09.519
+from this conference this year.
+
+00:07:09.520 --> 00:07:11.679
+Because I'm running around so much,
+
+00:07:11.680 --> 00:07:23.839
+I don't get a lot of the live stuff.
+
+00:07:23.840 --> 00:07:30.039
+Like, for example, when I was listening to your Q&A,
+
+00:07:30.040 --> 00:07:34.519
+I had it in one ear and I had Christian's dental casting Q&A in the other ear,
+
+00:07:34.520 --> 00:07:36.879
+so that just in case he had questions also.
+
+00:07:36.880 --> 00:07:39.559
+which kind of just meant I was listening for silences
+
+00:07:39.560 --> 00:07:43.199
+and that meant I had to read the next question out loud.
+
+00:07:43.200 --> 00:07:46.879
+But I love going through the videos and captioning them.
+
+00:07:46.880 --> 00:07:50.599
+And I'm really excited about the kinds of conversations
+
+00:07:50.600 --> 00:07:53.719
+that people have been having on the etherpacks and IRC.
+
+00:07:53.720 --> 00:07:57.039
+So I think the biggest thing that I'm learning
+
+00:07:57.040 --> 00:08:00.999
+is that people are having a lot of fun with Emacs.
+
+00:08:01.000 --> 00:08:05.199
+Which is no surprise, of course.
+
+00:08:05.200 --> 00:08:09.079
+But it's always so exciting to see people bump into other people
+
+00:08:09.080 --> 00:08:11.159
+whose minds work the same way.
+
+00:08:11.160 --> 00:08:17.639
+And then who knows where that will go over the next year, over the next years.
+
+00:08:17.640 --> 00:08:22.039
+That's sort of an interesting topic,
+
+00:08:22.040 --> 00:08:24.279
+is like how to keep the conversations
+
+00:08:24.280 --> 00:08:27.439
+going between the conferences, you know?
+
+00:08:27.440 --> 00:08:33.039
+is where do people hang out and discuss these things?
+
+00:08:33.040 --> 00:08:49.359
+Reddit's one place. IRC. I figure it's... Sorry, go ahead. I'm done.
+
+00:08:49.360 --> 00:08:54.879
+I think it's rather...
+
+00:08:54.880 --> 00:08:59.679
+I like to think of it as the start of the conversation.
+
+00:08:59.680 --> 00:09:08.159
+And so we have around 100 people,
+
+00:09:08.160 --> 00:09:12.639
+more than 100, around 200 people yesterday,
+
+00:09:12.640 --> 00:09:14.999
+around 100 today joining us.
+
+00:09:15.000 --> 00:09:16.999
+And those are a lot of conversations,
+
+00:09:17.000 --> 00:09:18.639
+but then they're the conversations that happen
+
+00:09:18.640 --> 00:09:22.399
+when people look up the videos and the captions
+
+00:09:22.400 --> 00:09:25.399
+and the resources that people have shared.
+
+00:09:25.400 --> 00:09:30.079
+And so I think it gives us a lot of material,
+
+00:09:30.080 --> 00:09:31.679
+a lot of exciting points
+
+00:09:31.680 --> 00:09:34.359
+for plenty of other conversations this year.
+
+00:09:34.360 --> 00:09:41.119
+Yeah, it's a great community. Oh, yes, I should mention,
+
+00:09:41.120 --> 00:09:42.799
+the conversation doesn't stop here
+
+00:09:42.800 --> 00:09:44.399
+because there are mailing lists.
+
+00:09:44.400 --> 00:09:45.999
+Thank you, Rudy, for the reminder.
+
+00:09:46.000 --> 00:09:50.759
+If you're looking for more of this kind of sense of community,
+
+00:09:50.760 --> 00:09:56.879
+there's like, well, Emacs Develop course has a lot of technical discussions going on,
+
+00:09:56.880 --> 00:10:00.559
+but the Org Mode mailing list is very nice.
+
+00:10:00.560 --> 00:10:02.719
+There are also lots of meetups.
+
+00:10:02.720 --> 00:10:05.199
+There's definitely a meetup every month.
+
+00:10:05.200 --> 00:10:10.639
+Org Meetup, in fact, is happening in a couple of days.
+
+00:10:10.640 --> 00:10:13.159
+If you look on the Emacs wiki for user groups,
+
+00:10:13.160 --> 00:10:14.719
+or you check my Emacs news,
+
+00:10:14.720 --> 00:10:16.959
+or you check, if you look for like Emacs calendar,
+
+00:10:16.960 --> 00:10:20.679
+which I think I put on like emacslife.com slash calendar,
+
+00:10:20.680 --> 00:10:22.639
+then you'll find upcoming meetups.
+
+00:10:22.640 --> 00:10:26.999
+so that you can keep reconnecting with people.
+
+00:10:27.000 --> 00:10:29.599
+And if you come up with something cool,
+
+00:10:29.600 --> 00:10:33.759
+you don't have to wait until the next Emacs Con
+
+00:10:33.760 --> 00:10:35.279
+to show it to everybody.
+
+00:10:35.280 --> 00:10:43.079
+You can also go to these meetups and start sharing it
+
+00:10:43.080 --> 00:10:53.319
+and get feedback and make it even better and so on.
+
+00:10:53.320 --> 00:10:56.399
+Great, thank you. Rudy says, the Emacs bugs mailing list
+
+00:10:56.400 --> 00:10:58.599
+is surprisingly interesting as well.
+
+00:10:58.600 --> 00:11:01.439
+Lots of discussion on there, various details
+
+00:11:01.440 --> 00:11:04.159
+and upcoming little features every single day.
+
+00:11:04.160 --> 00:11:37.999
+Oh yes, Maddie would like another shout out for Emacs Carnival
+
+00:11:38.000 --> 00:11:41.319
+which is a monthly blogging people share topics
+
+00:11:41.320 --> 00:11:46.999
+so that people can all write about the same thing
+
+00:11:47.000 --> 00:11:52.439
+and then discover other people's perspectives on it.
+
+00:11:52.440 --> 00:11:54.839
+There have been quite a few now.
+
+00:11:54.840 --> 00:11:57.759
+So if you want, you can go through the Emacs Carnival page
+
+00:11:57.760 --> 00:12:01.239
+in the Emacs wiki and start exploring the past issues.
+
+00:12:01.240 --> 00:12:04.039
+The host will have a list of links
+
+00:12:04.040 --> 00:12:07.079
+to the people who've submitted. So it's a great way to see
+
+00:12:07.080 --> 00:12:09.919
+what other people in the community
+
+00:12:09.920 --> 00:12:11.359
+have been thinking about something.
+
+00:12:11.360 --> 00:12:18.279
+Also, people are very curious about the fonts and templates
+
+00:12:18.280 --> 00:12:20.599
+that people use for their presentations.
+
+00:12:20.600 --> 00:12:22.599
+It's always, that's one of the things
+
+00:12:22.600 --> 00:12:23.959
+I love about presentations.
+
+00:12:23.960 --> 00:12:26.359
+You kind of get this, you pick up so much more
+
+00:12:26.360 --> 00:12:28.599
+when you're looking over someone's shoulder,
+
+00:12:28.600 --> 00:12:32.079
+the things that they would forget to even mention
+
+00:12:32.080 --> 00:12:34.199
+because it's not the point of their talk
+
+00:12:34.200 --> 00:12:36.839
+or they take it for granted.
+
+00:12:36.840 --> 00:12:40.519
+So, yes. if the presenters can share their fonts
+
+00:12:40.520 --> 00:12:44.479
+and setups and themes and stuff like that.
+
+00:12:44.480 --> 00:12:47.279
+Or if you as a viewer have been watching something
+
+00:12:47.280 --> 00:12:50.639
+and you see someone do this really cool keyword shortcut
+
+00:12:50.640 --> 00:12:53.279
+and you have no idea how they did that,
+
+00:12:53.280 --> 00:12:56.119
+because of course, you know, it just flies by too quickly
+
+00:12:56.120 --> 00:12:57.639
+and it's part of their muscle memory,
+
+00:12:57.640 --> 00:12:59.239
+so they don't even explain it anymore.
+
+00:12:59.240 --> 00:13:01.799
+Go ahead and ask the speakers, hey,
+
+00:13:01.800 --> 00:13:05.799
+that command that you did, that just did the magic, how?
+
+00:13:05.800 --> 00:13:11.759
+So yes, please feel free to go back over the videos,
+
+00:13:11.760 --> 00:13:12.679
+look at them slowly,
+
+00:13:12.680 --> 00:13:45.079
+look for interesting things you want to learn more about.
+
+00:13:45.080 --> 00:13:49.159
+All right, it sounds like we are
+
+00:13:49.160 --> 00:13:53.239
+pretty much ready to wrap up.
+
+00:13:53.240 --> 00:13:58.999
+So thank you, everyone, for coming.
+
+00:13:59.000 --> 00:14:01.519
+See you next year and also in the months in between
+
+00:14:01.520 --> 00:14:02.479
+because there are meetups,
+
+00:14:02.480 --> 00:14:04.039
+which you're going to go check out and have fun at.
+
+00:14:04.040 --> 00:14:05.879
+Thank you for this.
+
+00:14:05.880 --> 00:14:07.919
+Yes, thank you for this nice Emacs weekend.
+
+00:14:07.920 --> 00:14:14.319
+Thanks for putting it all together, Sacha and everyone.
+
+00:14:14.320 --> 00:14:19.326
+That's great. Bye!
diff --git a/2025/captions/emacsconf-2025-sun-open--sunday-opening-remarks--main--chapters.vtt b/2025/captions/emacsconf-2025-sun-open--sunday-opening-remarks--main--chapters.vtt
new file mode 100644
index 00000000..af2b588c
--- /dev/null
+++ b/2025/captions/emacsconf-2025-sun-open--sunday-opening-remarks--main--chapters.vtt
@@ -0,0 +1,41 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:15.999
+Tracks
+
+00:00:16.000 --> 00:01:00.606
+Watching and participating
+
+00:01:00.607 --> 00:01:10.600
+Other schedule formats
+
+00:01:10.601 --> 00:01:46.035
+BigBlueButton
+
+00:01:46.036 --> 00:02:03.216
+On and off the stream
+
+00:02:03.217 --> 00:02:25.455
+Etherpad and IRC
+
+00:02:25.456 --> 00:02:59.439
+Etherpad
+
+00:02:59.440 --> 00:03:32.777
+IRC
+
+00:03:32.778 --> 00:03:55.237
+Captions
+
+00:03:55.238 --> 00:04:07.281
+status.emacsconf.org
+
+00:04:07.282 --> 00:04:16.019
+Guidelines for conduct
+
+00:04:16.020 --> 00:04:26.775
+Videos
+
+00:04:26.776 --> 00:04:49.323
+Let's get started!
diff --git a/2025/captions/emacsconf-2025-sun-open--sunday-opening-remarks--main.vtt b/2025/captions/emacsconf-2025-sun-open--sunday-opening-remarks--main.vtt
new file mode 100644
index 00000000..d6a7d98c
--- /dev/null
+++ b/2025/captions/emacsconf-2025-sun-open--sunday-opening-remarks--main.vtt
@@ -0,0 +1,376 @@
+WEBVTT
+
+
+NOTE Tracks
+
+00:00:00.000 --> 00:00:02.246
+Welcome to EmacsConf, where we have fun
+
+00:00:02.247 --> 00:00:05.484
+exploring just how much we can do with a text editor.
+
+00:00:05.485 --> 00:00:07.924
+There's a General track and a Development track,
+
+00:00:07.925 --> 00:00:09.483
+but really, you'll probably find
+
+00:00:09.484 --> 00:00:11.078
+interesting things on both tracks
+
+00:00:11.079 --> 00:00:13.215
+no matter what your level of experience is,
+
+00:00:13.216 --> 00:00:15.999
+so don't feel limited to one or the other.
+
+NOTE Watching and participating
+
+00:00:16.000 --> 00:00:19.392
+The best parts of EmacsConf are the conversations.
+
+00:00:19.393 --> 00:00:22.485
+The wiki has a page on how to watch and participate,
+
+00:00:22.486 --> 00:00:24.909
+and I'll give you a quick overview as well.
+
+00:00:24.910 --> 00:00:28.884
+You can watch both streams at live.emacsconf.org
+
+00:00:28.885 --> 00:00:31.185
+using free and open source software.
+
+00:00:31.186 --> 00:00:34.387
+Using a streaming media player like mpv
+
+00:00:34.388 --> 00:00:37.274
+seems to be the best way to watch in terms of performance
+
+00:00:37.275 --> 00:00:39.240
+but there are also web-based players
+
+00:00:39.241 --> 00:00:41.377
+just in case that's all you've got.
+
+00:00:41.378 --> 00:00:44.063
+The schedule shows the General track on top
+
+00:00:44.064 --> 00:00:45.602
+and the Development track on the bottom,
+
+00:00:45.603 --> 00:00:47.819
+so you can see what else is going on.
+
+00:00:47.820 --> 00:00:49.818
+As you're watching the talks,
+
+00:00:49.819 --> 00:00:52.354
+you can refer to the schedule in another window.
+
+00:00:52.355 --> 00:00:55.600
+Hover over the boxes to see the times and titles,
+
+00:00:55.601 --> 00:00:57.613
+and click on the boxes in the schedule
+
+00:00:57.614 --> 00:01:00.606
+to jump to the talk's page for more details.
+
+NOTE Other schedule formats
+
+00:01:00.607 --> 00:01:03.586
+You can also get the schedule as an iCalendar file
+
+00:01:03.587 --> 00:01:05.620
+or as an Org file in different time zones.
+
+00:01:05.621 --> 00:01:08.254
+The Org file has some links to talk resources
+
+00:01:08.255 --> 00:01:10.600
+and might be handy as a starting point for your notes.
+
+NOTE BigBlueButton
+
+00:01:10.601 --> 00:01:12.144
+Many talks will be followed by
+
+00:01:12.145 --> 00:01:14.571
+live Q&A web conferences with the speaker,
+
+00:01:14.572 --> 00:01:17.733
+which will be done in BigBlueButton or BBB.
+
+00:01:17.734 --> 00:01:20.818
+These are indicated with a solid border on the schedule
+
+00:01:20.819 --> 00:01:24.000
+and by Q&A: BBB on the schedule page.
+
+00:01:24.001 --> 00:01:25.900
+You can join the web conference room
+
+00:01:25.901 --> 00:01:27.466
+by clicking on the BBB link
+
+00:01:27.467 --> 00:01:30.175
+on the schedule page or the talk's webpage.
+
+00:01:30.176 --> 00:01:34.214
+Then you can ask your questions yourself when the Q&A starts.
+
+00:01:34.215 --> 00:01:37.210
+To improve performance, please keep your webcam off
+
+00:01:37.211 --> 00:01:39.889
+and stay muted until it's your turn to talk.
+
+00:01:39.890 --> 00:01:41.691
+If you don't like Javascript,
+
+00:01:41.692 --> 00:01:43.642
+you can still ask questions via IRC
+
+00:01:43.643 --> 00:01:46.035
+and the hosts can read them out for you.
+
+NOTE On and off the stream
+
+00:01:46.036 --> 00:01:47.894
+We're probably going to automatically switch
+
+00:01:47.895 --> 00:01:49.482
+between talks and Q&A sessions,
+
+00:01:49.483 --> 00:01:52.896
+so the transitions on the stream might be a little sudden.
+
+00:01:52.897 --> 00:01:54.438
+People in the BigBlueButton room
+
+00:01:54.439 --> 00:01:55.861
+can continue the conversation
+
+00:01:55.862 --> 00:01:58.219
+even after the talk moves off-stream,
+
+00:01:58.220 --> 00:02:00.270
+and you can also reach out to the speakers
+
+00:02:00.271 --> 00:02:03.216
+using the contact information on the talk page.
+
+NOTE Etherpad and IRC
+
+00:02:03.217 --> 00:02:06.301
+Other talks will have Q&A via Etherpad or IRC,
+
+00:02:06.302 --> 00:02:08.541
+depending on what the speakers prefer.
+
+00:02:08.542 --> 00:02:11.379
+This is indicated in the schedule with a dashed border
+
+00:02:11.380 --> 00:02:13.509
+and on the schedule page as well.
+
+00:02:13.510 --> 00:02:16.542
+The schedule pages have quick shortcuts so that you can
+
+00:02:16.543 --> 00:02:19.052
+find out more about talks, open the Etherpads,
+
+00:02:19.053 --> 00:02:21.203
+and join the Q&A sessions.
+
+00:02:21.204 --> 00:02:23.365
+The watch page has more tips
+
+00:02:23.366 --> 00:02:25.455
+on how to make the most of Q&A.
+
+NOTE Etherpad
+
+00:02:25.456 --> 00:02:28.329
+If you can, please add notes and ask questions
+
+00:02:28.330 --> 00:02:30.132
+in the Etherpad for the talk.
+
+00:02:30.133 --> 00:02:31.597
+That makes it easier
+
+00:02:31.598 --> 00:02:33.129
+for everyone to share their notes,
+
+00:02:33.130 --> 00:02:36.354
+and speakers and hosts can read the questions from there.
+
+00:02:36.355 --> 00:02:39.621
+We'll copy the notes to the talk pages afterwards.
+
+00:02:39.622 --> 00:02:41.496
+We have one pad for each talk,
+
+00:02:41.497 --> 00:02:43.772
+so you can follow the links to get to the next one
+
+00:02:43.773 --> 00:02:46.827
+or go back to the schedule and get the link from there.
+
+00:02:46.828 --> 00:02:48.422
+If you have general feedback about
+
+00:02:48.423 --> 00:02:50.667
+the conference itself, please put it in
+
+00:02:50.668 --> 00:02:54.592
+pad.emacsconf.org/emacsconf.
+
+00:02:54.593 --> 00:02:57.549
+You can also use this as a community message board
+
+00:02:57.550 --> 00:02:59.439
+for things like Help Wanted.
+
+NOTE IRC
+
+00:02:59.440 --> 00:03:02.799
+Internet Relay Chat or IRC can be another great way
+
+00:03:02.800 --> 00:03:05.175
+to be part of lots of conversations.
+
+00:03:05.176 --> 00:03:09.450
+You can use chat.emacsconf.org to join the IRC channels
+
+00:03:09.451 --> 00:03:11.045
+through your web browser.
+
+00:03:11.046 --> 00:03:12.856
+The tabs on the left can help you
+
+00:03:12.857 --> 00:03:14.891
+switch between the different channels.
+
+00:03:14.892 --> 00:03:17.610
+There's #emacsconf-gen for the General track
+
+00:03:17.611 --> 00:03:20.489
+and #emacsconf-dev for the Development track.
+
+00:03:20.490 --> 00:03:23.956
+If you need to reach us, you can join #emacsconf-org
+
+00:03:23.957 --> 00:03:29.474
+or e-mail emacsconf-org-private@gnu.org.
+
+00:03:29.475 --> 00:03:32.777
+You can use #emacsconf for hallway conversations.
+
+NOTE Captions
+
+00:03:32.778 --> 00:03:35.587
+Once again, we're going to be streaming with open captions
+
+00:03:35.588 --> 00:03:38.479
+for most of the talks this year, thanks to our speakers and
+
+00:03:38.480 --> 00:03:39.895
+captioning volunteers.
+
+00:03:39.896 --> 00:03:42.522
+The captioned talks are indicated on the schedule,
+
+00:03:42.523 --> 00:03:44.312
+and with any luck, we'll be posting
+
+00:03:44.313 --> 00:03:46.123
+videos and transcripts on talk pages
+
+00:03:46.124 --> 00:03:47.883
+shortly after the talks start.
+
+00:03:47.884 --> 00:03:51.069
+If you need additional accommodations, please let us know
+
+00:03:51.070 --> 00:03:54.016
+in #emacsconf-org and we'll see
+
+00:03:54.017 --> 00:03:55.237
+if we can make things happen.
+
+NOTE status.emacsconf.org
+
+00:03:55.238 --> 00:03:59.917
+If something goes down, we'll update status.emacsconf.org.
+
+00:03:59.918 --> 00:04:01.743
+If it doesn't look like we've noticed yet,
+
+00:04:01.744 --> 00:04:05.262
+please let us know in the #emacsconf-org IRC channel,
+
+00:04:05.263 --> 00:04:07.281
+where we will be quietly panicking.
+
+NOTE Guidelines for conduct
+
+00:04:07.282 --> 00:04:09.704
+In all of these conversations, please keep in mind
+
+00:04:09.705 --> 00:04:11.238
+our guidelines for conduct.
+
+00:04:11.239 --> 00:04:12.619
+You can find them on the wiki,
+
+00:04:12.620 --> 00:04:16.019
+and they basically boil down to: please be nice. Thank you!
+
+NOTE Videos
+
+00:04:16.020 --> 00:04:18.891
+If all goes well, the prerecorded talks and transcripts
+
+00:04:18.892 --> 00:04:20.537
+should be available from the talk pages
+
+00:04:20.538 --> 00:04:22.038
+shortly after they start playing,
+
+00:04:22.039 --> 00:04:24.143
+and we'll post the recordings of live talks
+
+00:04:24.144 --> 00:04:26.775
+and Q&A sessions within the next few weeks.
+
+NOTE Let's get started!
+
+00:04:26.776 --> 00:04:28.247
+All right, let's get going.
+
+00:04:28.248 --> 00:04:31.214
+You might see Leo Vivier, Corwin Brust,
+
+00:04:31.215 --> 00:04:33.953
+and Amin Bandali hosting the various tracks.
+
+00:04:33.954 --> 00:04:35.767
+I will run around mostly backstage,
+
+00:04:35.768 --> 00:04:37.793
+and you'll probably meet us in the closing remarks.
+
+00:04:37.794 --> 00:04:39.243
+That's also where we get to thank
+
+00:04:39.244 --> 00:04:40.659
+all the people and organizations
+
+00:04:40.660 --> 00:04:42.549
+who make EmacsConf possible.
+
+00:04:42.550 --> 00:04:44.462
+Let's have fun at EmacsConf!
diff --git a/2025/captions/emacsconf-2025-swanky--swanky-python-interactive-development-for-python--scott-zimmermann--main.vtt b/2025/captions/emacsconf-2025-swanky--swanky-python-interactive-development-for-python--scott-zimmermann--main.vtt
new file mode 100644
index 00000000..35eb7ce7
--- /dev/null
+++ b/2025/captions/emacsconf-2025-swanky--swanky-python-interactive-development-for-python--scott-zimmermann--main.vtt
@@ -0,0 +1,1108 @@
+WEBVTT captioned by sachac
+
+00:00:00.880 --> 00:00:02.439
+Hello everyone, I'm Scott
+
+00:00:02.440 --> 00:00:04.239
+and I'll be talking about Swanky Python,
+
+00:00:04.240 --> 00:00:06.199
+which is a development environment for Python
+
+00:00:06.200 --> 00:00:08.319
+based on Emacs' Slime package.
+
+00:00:08.320 --> 00:00:11.679
+So what is that and why might you find it interesting?
+
+00:00:11.680 --> 00:00:15.279
+SLIME is the Superior Lisp Interaction Mode for Emacs.
+
+00:00:15.280 --> 00:00:17.999
+It's an Emacs package for developing Common Lisp,
+
+00:00:18.000 --> 00:00:20.679
+and it's a bit different from the way we develop most languages
+
+00:00:20.680 --> 00:00:22.599
+in that you're always connected
+
+00:00:22.600 --> 00:00:25.399
+to a running instance of your application,
+
+00:00:25.400 --> 00:00:27.959
+and you kind of build up your application, piece by piece,
+
+00:00:27.960 --> 00:00:30.399
+modifying one expression at a time
+
+00:00:30.400 --> 00:00:34.559
+without ever having to restart your application.
+
+00:00:34.560 --> 00:00:36.679
+So why might you want to develop this way?
+
+00:00:36.680 --> 00:00:40.039
+One advantage is that you can get a faster feedback loop.
+
+00:00:40.040 --> 00:00:42.599
+For some kinds of software, it doesn't make a big difference.
+
+00:00:42.600 --> 00:00:43.919
+Like, if you're developing a web backend
+
+00:00:43.920 --> 00:00:48.039
+where all state is stored externally in a database,
+
+00:00:48.040 --> 00:00:50.279
+then you can have a file watcher
+
+00:00:50.280 --> 00:00:52.799
+that just restarts the whole Python process
+
+00:00:52.800 --> 00:00:54.639
+whenever you make any edit,
+
+00:00:54.640 --> 00:00:56.159
+and you're not really losing anything,
+
+00:00:56.160 --> 00:00:59.679
+because all the state is stored outside the Python process
+
+00:00:59.680 --> 00:01:01.719
+in a database. So it works great.
+
+00:01:01.720 --> 00:01:03.559
+But for other kinds of software, like
+
+00:01:03.560 --> 00:01:05.559
+let's say you're developing an Emacs package
+
+00:01:05.560 --> 00:01:07.279
+or a video game,
+
+00:01:07.280 --> 00:01:10.319
+then it can be a real pain to restart the application
+
+00:01:10.320 --> 00:01:12.679
+and recreate the state it was in before
+
+00:01:12.680 --> 00:01:17.279
+just to test the effect of each edit you want to make.
+
+00:01:17.280 --> 00:01:21.359
+Another advantage is the runtime introspection you have available.
+
+00:01:21.360 --> 00:01:22.679
+So since you're always connected
+
+00:01:22.680 --> 00:01:24.999
+to a running instance of your application,
+
+00:01:25.000 --> 00:01:27.799
+you can inspect the values of variables,
+
+00:01:27.800 --> 00:01:30.959
+you can trace functions, and all sorts of other information
+
+00:01:30.960 --> 00:01:36.279
+to help you understand your application better.
+
+00:01:36.280 --> 00:01:39.919
+And lastly, it's just a lot of fun to develop this way,
+
+00:01:39.920 --> 00:01:43.519
+or at least I find it fun developing with SLIME,
+
+00:01:43.520 --> 00:01:45.759
+so I wrote a SLIME backend for Python
+
+00:01:45.760 --> 00:01:48.799
+so I could have more fun when I'm coding in Python.
+
+00:01:48.800 --> 00:01:52.599
+As for the name swanky-python, within SLIME,
+
+00:01:52.600 --> 00:01:56.279
+swank is the name of the Common Lisp backend
+
+00:01:56.280 --> 00:01:59.199
+that runs within your Common Lisp application
+
+00:01:59.200 --> 00:02:02.919
+and connects to Emacs. So I'm not too creative.
+
+00:02:02.920 --> 00:02:07.999
+swanky-python is just a swank implementation in Python.
+
+NOTE Demo
+
+00:02:08.000 --> 00:02:15.279
+So let's see it in action. So we started up with M-x slime.
+
+00:02:15.280 --> 00:02:19.639
+And what that does is it starts a Python process,
+
+00:02:19.640 --> 00:02:25.039
+starts swanky-python within it, and connects to it from Emacs.
+
+00:02:25.040 --> 00:02:29.039
+And you can configure how exactly it runs Python.
+
+00:02:29.040 --> 00:02:32.479
+Or you can start swanky python manually
+
+00:02:32.480 --> 00:02:35.119
+within a Python application running on a remote server
+
+00:02:35.120 --> 00:02:36.313
+and forward the port locally
+
+00:02:36.614 --> 00:02:40.919
+and connect to it in Emacs, from Emacs remotely.
+
+00:02:40.920 --> 00:02:43.239
+Within the README, there's more documentation
+
+00:02:43.240 --> 00:02:45.519
+on other ways to start it.
+
+00:02:45.520 --> 00:02:52.159
+But just M-x slime is the basic way that works most of the time.
+
+00:02:52.160 --> 00:02:55.759
+So within the REPL, the first thing you'll notice is that
+
+00:02:55.760 --> 00:02:58.839
+REPL outputs are clickable buttons,
+
+00:02:58.840 --> 00:03:02.119
+what SLIME calls presentations.
+
+00:03:02.120 --> 00:03:04.759
+So you can do things like inspect them.
+
+00:03:04.760 --> 00:03:09.759
+And for each presentation, in the Python backend,
+
+00:03:09.760 --> 00:03:12.479
+it holds on to the reference to the object.
+
+00:03:12.480 --> 00:03:14.559
+So for an int, it's not too interesting,
+
+00:03:14.560 --> 00:03:20.239
+but let's do a more complex object like a file.
+
+00:03:20.240 --> 00:03:22.519
+Then we can inspect the file.
+
+00:03:22.520 --> 00:03:26.599
+We can describe it, which will bring up documentation
+
+00:03:26.600 --> 00:03:33.759
+on that class. We can use it in further expressions
+
+00:03:33.760 --> 00:03:39.431
+like if we copy it, it will use the actual Python object
+
+00:03:39.432 --> 00:03:43.399
+in this expression.
+
+00:03:43.400 --> 00:03:48.319
+We can assign it to a variable.
+
+00:03:48.320 --> 00:03:50.999
+SLIME uses presentations everywhere
+
+00:03:51.000 --> 00:03:53.239
+that a Python object would be displayed.
+
+00:03:53.240 --> 00:03:56.559
+So instead of just their string representation,
+
+00:03:56.560 --> 00:04:00.239
+when you have a backtrace on an exception,
+
+00:04:00.240 --> 00:04:03.965
+or you... within the inspector or anywhere else really,
+
+00:04:03.966 --> 00:04:06.019
+anywhere that the string representation
+
+00:04:06.020 --> 00:04:07.940
+of an object would be displayed,
+
+00:04:07.941 --> 00:04:10.740
+it displays a presentation that you can go on to
+
+00:04:10.741 --> 00:04:14.960
+inspect, reuse, or send to the REPL and so on.
+
+00:04:14.961 --> 00:04:23.039
+One useful utility function is pp for print presentation.
+
+00:04:23.040 --> 00:04:25.119
+We haven't imported it yet.
+
+00:04:25.120 --> 00:04:29.159
+So when we get a name error exception
+
+00:04:29.160 --> 00:04:33.879
+and SLIME sees that that name is available for import somewhere,
+
+00:04:33.880 --> 00:04:38.279
+it'll give us the option of importing it.
+
+00:04:38.280 --> 00:04:40.599
+Since it's available for import from multiple modules,
+
+00:04:40.600 --> 00:04:43.919
+it'll prompt us for which one we want to import it from.
+
+00:04:43.920 --> 00:04:45.519
+We want to import it from swanky-python,
+
+00:04:45.520 --> 00:04:48.479
+not from the standard library.
+
+00:04:48.480 --> 00:04:52.599
+Then it will print a presentation of that object.
+
+00:04:52.600 --> 00:04:55.559
+Within the REPL, this is not really useful
+
+00:04:55.560 --> 00:04:58.919
+because all REPL outputs are already presentations.
+
+00:04:58.920 --> 00:05:02.799
+But I use this now whenever I would use print debugging,
+
+00:05:02.800 --> 00:05:05.639
+just whenever I would use insert print statements in my program
+
+00:05:05.640 --> 00:05:08.399
+to see what's going on, I have it print a presentation
+
+00:05:08.400 --> 00:05:11.199
+because that way I can go back and inspect it later,
+
+00:05:11.200 --> 00:05:16.599
+copy it to the REPL and further manipulate it and so on.
+
+NOTE Inspector
+
+00:05:16.600 --> 00:05:20.119
+Next up, let's look at the inspector more.
+
+00:05:20.120 --> 00:05:25.579
+If we go back and inspect the file object,
+
+00:05:25.580 --> 00:05:27.239
+you can write custom inspector views
+
+00:05:27.240 --> 00:05:28.839
+for different kinds of objects.
+
+00:05:28.840 --> 00:05:32.519
+So far, I just have a couple. One for sequences,
+
+00:05:32.520 --> 00:05:36.919
+one for mappings, and one for every other kind of object.
+
+00:05:36.920 --> 00:05:45.979
+Like if we inspect a mapping, there's a shortcut
+
+00:05:45.980 --> 00:05:48.639
+inspect last result, which is what I normally use
+
+00:05:48.640 --> 00:05:52.379
+to open the inspector. Then we see the values,
+
+00:05:52.380 --> 00:05:56.319
+and each value in the inspector is a presentation
+
+00:05:56.320 --> 00:05:58.419
+that we can go on to inspect, and so on.
+
+00:05:58.420 --> 00:06:03.979
+Let's go back to inspecting the file object.
+
+00:06:03.980 --> 00:06:06.039
+Again, we can inspect each of the values,
+
+00:06:06.040 --> 00:06:10.239
+we can copy them back to the REPL and so on.
+
+00:06:10.240 --> 00:06:13.839
+It just displays all the attributes for the class
+
+00:06:13.840 --> 00:06:15.399
+and their values.
+
+00:06:15.400 --> 00:06:18.119
+We can configure what attributes we want to show.
+
+00:06:18.120 --> 00:06:21.119
+There's a transient menu where we can toggle
+
+00:06:21.120 --> 00:06:23.359
+if we want to show private attributes, dunder attributes,
+
+00:06:23.360 --> 00:06:26.439
+doc strings, so on, or everything,
+
+00:06:26.440 --> 00:06:28.519
+which is a bit much to show by default.
+
+00:06:28.520 --> 00:06:33.719
+So we'll reset it to the default.
+
+00:06:33.720 --> 00:06:37.839
+In the future, I want to add graphical inspector views
+
+00:06:37.840 --> 00:06:40.679
+for different kinds of objects, and also support
+
+00:06:40.680 --> 00:06:42.999
+showing plots in both the inspector and the REPL,
+
+00:06:43.000 --> 00:06:47.719
+but that's future work I haven't started on yet.
+
+NOTE Evaluating Python
+
+00:06:47.720 --> 00:06:51.999
+Let's look at the different options for evaluating Python.
+
+00:06:52.000 --> 00:06:59.099
+So we can evaluate a whole file.
+
+00:06:59.100 --> 00:07:00.639
+We can evaluate just a class.
+
+00:07:00.640 --> 00:07:03.479
+We can evaluate just the method we're working on.
+
+00:07:03.480 --> 00:07:06.359
+We can evaluate a Python statement,
+
+00:07:06.360 --> 00:07:11.839
+and it will show the result in an overlay next to the cursor.
+
+00:07:11.840 --> 00:07:17.919
+We can select some code and just evaluate the highlighted region.
+
+00:07:17.920 --> 00:07:24.799
+We can sync the REPL to the active file.
+
+00:07:24.800 --> 00:07:27.319
+So now everything we evaluate in the REPL will be in the
+
+00:07:27.320 --> 00:07:29.639
+context of the eval_demo module.
+
+00:07:29.640 --> 00:07:35.399
+We can also set the module that the REPL is in.
+
+00:07:35.400 --> 00:07:38.279
+We can go back to main.
+
+00:07:38.280 --> 00:07:43.679
+But let's go back to the eval_demo module for now.
+
+NOTE Updating
+
+00:07:43.680 --> 00:07:49.799
+One useful thing is when you update a class or a function,
+
+00:07:49.800 --> 00:07:54.539
+it updates old instances of that class or function.
+
+00:07:54.540 --> 00:07:58.479
+So right now, f.bar is foobar.
+
+00:07:58.480 --> 00:08:03.719
+But if we edit that class, it will actually edit the code
+
+00:08:03.720 --> 00:08:05.239
+for the old instance of that class.
+
+00:08:05.240 --> 00:08:07.599
+And that's provided by code I copied
+
+00:08:07.600 --> 00:08:12.079
+from IPython's autoreload extension.
+
+00:08:12.080 --> 00:08:14.639
+It helps when you're trying to develop in Python
+
+00:08:14.640 --> 00:08:16.498
+without having to restart the Python process
+
+00:08:16.499 --> 00:08:20.039
+whenever you make a change.
+
+00:08:20.040 --> 00:08:22.599
+Auto reload in Python is a big topic
+
+00:08:22.600 --> 00:08:26.519
+that I don't really have time to go into here,
+
+00:08:26.520 --> 00:08:29.479
+but right now it is more limited
+
+00:08:29.480 --> 00:08:32.559
+than what is done in Common Lisp.
+
+00:08:32.560 --> 00:08:35.759
+Like for example, if you have a data class in Python
+
+00:08:35.760 --> 00:08:37.619
+and you add a new field to the data class,
+
+00:08:37.620 --> 00:08:41.039
+it won't automatically update old instances
+
+00:08:41.040 --> 00:08:43.399
+of the data class with a new field.
+
+00:08:43.400 --> 00:08:46.599
+So there's more that needs to be done with that,
+
+00:08:46.600 --> 00:08:50.359
+but I am perhaps naively optimistic
+
+00:08:50.360 --> 00:08:54.279
+that Python's runtime is quite dynamic and flexible,
+
+00:08:54.280 --> 00:08:59.799
+and that I can fully implement autoreload in Python,
+
+00:08:59.800 --> 00:09:02.119
+but there's still work to be done,
+
+00:09:02.120 --> 00:09:05.419
+and it's a big topic to go into.
+
+00:09:05.420 --> 00:09:08.959
+Next up, let's look at the backtrace buffer.
+
+00:09:08.960 --> 00:09:12.839
+But as it is right now, autoreload is actually useful.
+
+00:09:12.840 --> 00:09:16.959
+I mostly develop in Python without having to restart the process
+
+00:09:16.960 --> 00:09:19.599
+and without running into issues from old state
+
+00:09:19.600 --> 00:09:22.899
+that hasn't been updated properly.
+
+NOTE Backtraces
+
+00:09:22.900 --> 00:09:25.999
+So if we go on to look at the backtrace buffer,
+
+00:09:26.000 --> 00:09:32.819
+whenever we get an exception in Python...
+
+00:09:32.820 --> 00:09:37.079
+Let's go back to it.
+
+00:09:37.080 --> 00:09:41.419
+Whenever we get an exception, it will...
+
+00:09:41.420 --> 00:09:43.698
+let's change the code so that it actually
+
+00:09:43.699 --> 00:09:49.965
+gets an exception...
+
+00:09:49.966 --> 00:09:52.519
+we will get an interactive backtrace buffer
+
+00:09:52.520 --> 00:09:57.599
+where we can browse the source code for the different stack frames
+
+00:09:57.600 --> 00:10:00.199
+and the local variables within the stack frames,
+
+00:10:00.200 --> 00:10:03.439
+which are all presentations that we can inspect and so on.
+
+00:10:04.340 --> 00:10:10.619
+We can also open a REPL in the context of any stack frame.
+
+00:10:10.620 --> 00:10:16.439
+Or we can, when we go to the source for a given stack frame,
+
+00:10:16.440 --> 00:10:20.359
+we can select some Python code and evaluate it
+
+00:10:20.360 --> 00:10:25.959
+within the context of that stack frame.
+
+00:10:25.960 --> 00:10:30.699
+One major limitation compared to SLIME for Common Lisp
+
+00:10:30.700 --> 00:10:33.759
+is that in Common Lisp, you have the option to
+
+00:10:33.760 --> 00:10:38.159
+restart or resume execution from a given stack frame
+
+00:10:38.160 --> 00:10:42.439
+after an exception happens, where in Python,
+
+00:10:42.440 --> 00:10:45.799
+what we have right now is pretty much equivalent to
+
+00:10:45.800 --> 00:10:47.159
+the postmortem debugger.
+
+00:10:47.160 --> 00:10:50.839
+You can view the state that the call stack was in
+
+00:10:50.840 --> 00:10:51.959
+at the time of the exception,
+
+00:10:51.960 --> 00:10:55.659
+but you can't actually resume execution,
+
+00:10:55.660 --> 00:10:57.559
+which you often might want to do,
+
+00:10:57.560 --> 00:10:59.919
+because when you're coding in a dynamic language,
+
+00:10:59.920 --> 00:11:01.479
+you're going to get runtime errors.
+
+00:11:01.480 --> 00:11:04.119
+So if you're writing a script that does like some sort of
+
+00:11:04.120 --> 00:11:07.999
+long-running computation or processes a ton of files
+
+00:11:08.000 --> 00:11:11.939
+and gets an exception parsing one file halfway through,
+
+00:11:11.940 --> 00:11:16.919
+normally you'd have to fix the script, and then rerun it
+
+00:11:16.920 --> 00:11:19.759
+and have it process all the same files all over again,
+
+00:11:19.760 --> 00:11:23.839
+and lose a bunch of time for every bug you run into
+
+00:11:23.840 --> 00:11:24.879
+and fix you have to make.
+
+00:11:24.880 --> 00:11:28.679
+So right now we've got a kind of mediocre workaround
+
+00:11:28.680 --> 00:11:34.019
+which is you can add the restart decorator to a function
+
+00:11:34.020 --> 00:11:37.239
+and then... where in the case of a script
+
+00:11:37.240 --> 00:11:38.879
+processing a bunch of files,
+
+00:11:38.880 --> 00:11:41.799
+you would add the restart decorator to the function
+
+00:11:41.800 --> 00:11:43.599
+that processes a single file.
+
+00:11:43.600 --> 00:11:45.439
+You'd add it to the function
+
+00:11:45.440 --> 00:11:47.879
+that represents kind of the smallest unit of work
+
+00:11:47.880 --> 00:11:50.219
+that might fail with an exception,
+
+00:11:50.220 --> 00:11:54.359
+Then, when you get an exception,
+
+00:11:54.360 --> 00:11:57.479
+you can actually edit the function.
+
+00:11:57.480 --> 00:12:01.019
+Like, if we edit it so it doesn't throw an error,
+
+00:12:01.020 --> 00:12:07.199
+and then we can resume execution,
+
+00:12:07.200 --> 00:12:12.799
+then it will return from foo using the
+
+00:12:12.800 --> 00:12:15.040
+the new version of baz,
+
+00:12:15.041 --> 00:12:18.559
+without having to run the script from the beginning again.
+
+00:12:18.560 --> 00:12:22.379
+So in the example of a script that processes a bunch of files,
+
+00:12:22.380 --> 00:12:24.299
+that would let you,
+
+00:12:24.300 --> 00:12:27.619
+as you run into files that cause an exception,
+
+00:12:27.620 --> 00:12:29.079
+fix your code to deal with it
+
+00:12:29.080 --> 00:12:31.880
+and resume execution without having to restart the script
+
+00:12:31.881 --> 00:12:33.080
+from the beginning.
+
+00:12:33.081 --> 00:12:36.120
+But this is obviously a pretty terrible hack,
+
+00:12:36.121 --> 00:12:38.840
+having to add the restart decorator to the function.
+
+00:12:38.841 --> 00:12:46.739
+I would like it to be able to restart from any function.
+
+00:12:46.740 --> 00:12:49.631
+without needing the decorator, as you can in Common Lisp,
+
+00:12:49.632 --> 00:12:54.031
+but I think that will require patching CPython
+
+00:12:54.032 --> 00:12:56.579
+and I really have no idea how to do that.
+
+00:12:56.580 --> 00:13:00.531
+So if you do know anything about CPython internals
+
+00:13:00.532 --> 00:13:03.720
+and are interested in helping, please reach out.
+
+NOTE pydumpling
+
+00:13:03.721 --> 00:13:07.119
+Another feature we have with the backtrace buffer is
+
+00:13:07.120 --> 00:13:09.079
+there's this library called PyDumpling
+
+00:13:09.080 --> 00:13:14.659
+which can serialize a traceback and store it to a file.
+
+00:13:14.660 --> 00:13:17.859
+So you can use PyDumpling with your applications running in
+
+00:13:17.860 --> 00:13:21.239
+production to serialize a traceback
+
+00:13:21.240 --> 00:13:24.899
+whenever they have an exception and save it to a file.
+
+00:13:24.900 --> 00:13:28.599
+Then you can transfer the file locally
+
+00:13:28.600 --> 00:13:38.859
+and load it into your local Emacs with slime-py-load-pydumpling.
+
+00:13:38.860 --> 00:13:41.839
+This will load the same backtrace buffer,
+
+00:13:41.840 --> 00:13:44.559
+and you see all the same local variables
+
+00:13:44.560 --> 00:13:45.759
+at the time of the exception.
+
+00:13:45.760 --> 00:13:48.199
+You can inspect them and get a REPL
+
+00:13:48.200 --> 00:13:50.999
+in the context of the stack frame.
+
+00:13:51.000 --> 00:13:54.199
+Well, this will only work for variables
+
+00:13:54.200 --> 00:13:57.619
+that can be serialized with pickle.
+
+00:13:57.620 --> 00:13:59.519
+Or actually, the library uses dill,
+
+00:13:59.520 --> 00:14:03.039
+which can serialize a bit more than pickle can.
+
+00:14:03.040 --> 00:14:10.200
+But yeah so this can help you inspect and debug errors
+
+00:14:10.201 --> 00:14:12.880
+for applications running in production remotely
+
+00:14:12.881 --> 00:14:20.059
+that you don't want to have SLIME connected to 24-7.
+
+NOTE Documentation browser
+
+00:14:20.060 --> 00:14:24.859
+Next up, let's look at the documentation browser.
+
+00:14:24.860 --> 00:14:29.919
+We can bring up documentation for any module,
+
+00:14:29.920 --> 00:14:33.079
+and all this information is generated
+
+00:14:33.080 --> 00:14:34.999
+from runtime introspection,
+
+00:14:35.000 --> 00:14:37.079
+from the doc strings for the module
+
+00:14:37.080 --> 00:14:39.159
+and the classes and so on.
+
+00:14:39.160 --> 00:14:41.879
+So you won't see documentation for libraries
+
+00:14:41.880 --> 00:14:43.159
+that you don't have actually loaded
+
+00:14:43.160 --> 00:14:45.939
+into your running Python process.
+
+00:14:45.940 --> 00:14:50.119
+Then you can go browse to classes.
+
+00:14:50.120 --> 00:14:54.719
+It'll show all the attributes, their methods, and so on.
+
+00:14:54.720 --> 00:14:57.239
+By each method to the right, it will show
+
+00:14:57.240 --> 00:15:02.599
+the base class where the method was originally inherited from.
+
+00:15:02.600 --> 00:15:09.079
+You can also bring up a screen with all the Python packages
+
+00:15:09.080 --> 00:15:14.439
+that are installed, and browse that with imenu,
+
+00:15:14.440 --> 00:15:20.359
+and bring up information on any package and so on.
+
+NOTE Thread view
+
+00:15:20.360 --> 00:15:28.499
+Next up, let's take a look at the thread view.
+
+00:15:28.500 --> 00:15:31.839
+So let's run this and then bring up the thread view
+
+00:15:31.840 --> 00:15:35.559
+and this will show information on all running threads.
+
+00:15:35.560 --> 00:15:38.799
+You can configure it to refresh after a given interval,
+
+00:15:38.800 --> 00:15:41.959
+like every second, but I don't have that set up right now,
+
+00:15:41.960 --> 00:15:45.659
+so I have to manually refresh it.
+
+00:15:45.660 --> 00:15:47.639
+Probably the most useful thing is that
+
+00:15:47.640 --> 00:15:49.739
+you can bring up a backtrace for any thread
+
+00:15:49.740 --> 00:15:51.759
+which won't pause the thread or anything,
+
+00:15:51.760 --> 00:15:53.879
+but will just give you the call stack
+
+00:15:53.880 --> 00:15:55.879
+at the time you requested the backtrace.
+
+00:15:55.880 --> 00:15:59.199
+You can again view the stack frames, local variables,
+
+00:15:59.200 --> 00:16:04.139
+open a REPL in the context of the thread, and so on.
+
+00:16:04.140 --> 00:16:07.839
+There's also a viewer for async tasks,
+
+00:16:07.840 --> 00:16:09.999
+but I'm not going to demo that right now,
+
+00:16:10.000 --> 00:16:14.159
+because for that to work, you have to start swanky-python
+
+00:16:14.160 --> 00:16:16.599
+after the async event loop has started,
+
+00:16:16.600 --> 00:16:18.519
+from within the same thread.
+
+00:16:18.520 --> 00:16:20.279
+If you go to the project readme,
+
+00:16:20.280 --> 00:16:23.919
+there's a demo of how to use the async task viewer
+
+00:16:23.920 --> 00:16:27.439
+with a fastapi project.
+
+NOTE Tracing functions
+
+00:16:27.440 --> 00:16:33.879
+Next up, let's look at tracing functions.
+
+00:16:33.880 --> 00:16:36.279
+So here we got some random error,
+
+00:16:36.280 --> 00:16:39.879
+because this is still very much a work in progress.
+
+00:16:39.880 --> 00:16:42.359
+But it looks like it executed
+
+00:16:42.360 --> 00:16:43.199
+correctly this time.
+
+00:16:43.200 --> 00:16:47.565
+So now let's mark the fibonacci function
+
+00:16:47.566 --> 00:16:50.239
+for tracing and execute it.
+
+00:16:50.240 --> 00:16:56.079
+We can see, every time the function is called,
+
+00:16:56.080 --> 00:16:58.239
+all its arguments and return values.
+
+00:16:58.240 --> 00:17:02.899
+Again, there are presentations that we can inspect and so on.
+
+00:17:02.900 --> 00:17:06.079
+But let's inspect a more complex object, like a file object.
+
+00:17:06.080 --> 00:17:11.339
+If we trace the count_lines function and run that code,
+
+00:17:11.340 --> 00:17:15.319
+then we can inspect the file it was passed, or the file object.
+
+00:17:15.320 --> 00:17:21.039
+One pitfall is that in Python, objects are mutable.
+
+00:17:21.040 --> 00:17:25.559
+So in the trace buffer, the string representation
+
+00:17:25.560 --> 00:17:27.879
+that's printed is the string representation
+
+00:17:27.880 --> 00:17:31.219
+at the time it was passed to the function.
+
+00:17:31.220 --> 00:17:32.639
+But when we go to inspect it,
+
+00:17:32.640 --> 00:17:34.919
+we're inspecting the object as it is right now,
+
+00:17:34.920 --> 00:17:37.639
+which can be different than it was at the time
+
+00:17:37.640 --> 00:17:41.559
+the function saw it. So for this file object, for example,
+
+00:17:41.560 --> 00:17:44.279
+it's closed now, when it was open at the time
+
+00:17:44.280 --> 00:17:47.799
+the function used it.
+
+NOTE AI integrations
+
+00:17:47.800 --> 00:17:50.479
+Next up, let's look at AI integrations.
+
+00:17:50.480 --> 00:17:54.519
+So if you're used to SLIME with Common Lisp,
+
+00:17:54.520 --> 00:18:09.479
+Emacs actually has a built-in AI that can help with the transition.
+
+00:18:09.480 --> 00:18:14.559
+So it's just a joke, I actually really like Python.
+
+00:18:14.560 --> 00:18:18.119
+And for more serious AI integrations,
+
+00:18:18.120 --> 00:18:19.959
+I have some ideas for the future
+
+00:18:19.960 --> 00:18:21.919
+but I haven't implemented anything yet.
+
+00:18:21.920 --> 00:18:27.319
+I think right now, people are mostly passing source code to LLMs
+
+00:18:27.320 --> 00:18:32.679
+but since we're embedded in the Python process at runtime,
+
+00:18:32.680 --> 00:18:35.639
+we have a lot of more information available,
+
+00:18:35.640 --> 00:18:39.439
+like maybe we can trace all calls to functions,
+
+00:18:39.440 --> 00:18:41.799
+and when we have a bug,
+
+00:18:41.800 --> 00:18:46.479
+we can feed the trace to the LLM,
+
+00:18:46.480 --> 00:18:48.719
+and the LLM can point out maybe
+
+00:18:48.720 --> 00:18:51.959
+when this function was called with these arguments,
+
+00:18:51.960 --> 00:18:53.879
+its return value doesn't make sense,
+
+00:18:53.880 --> 00:18:55.679
+so maybe that's the root cause of your bug.
+
+00:18:55.680 --> 00:19:02.359
+If you have any ideas of potential LLM or AI integrations,
+
+00:19:02.360 --> 00:19:05.999
+let me know. I'm happy to discuss.
+
+NOTE LSP-type features
+
+00:19:06.000 --> 00:19:09.919
+Next up, let's look at standard LSP-type features.
+
+00:19:09.920 --> 00:19:14.439
+So we've got completions. It's fuzzy completions right now,
+
+00:19:14.440 --> 00:19:16.319
+so it's showing everything with a PR in the name.
+
+00:19:16.320 --> 00:19:21.779
+We can bring up documentation for each one.
+
+00:19:21.780 --> 00:19:26.759
+When we start calling a method in the minibuffer at the bottom
+
+00:19:26.760 --> 00:19:28.859
+it'll show the signature.
+
+00:19:28.860 --> 00:19:33.719
+There's some refactoring available.
+
+00:19:33.720 --> 00:19:37.399
+We can extract a function or variable,
+
+00:19:37.400 --> 00:19:39.499
+or rename something,
+
+00:19:39.500 --> 00:19:42.919
+like, let's rename fib to fib2,
+
+00:19:42.920 --> 00:19:47.479
+and it will rename all the uses of it.
+
+00:19:47.480 --> 00:19:49.759
+All these features are based on Jedi,
+
+00:19:49.760 --> 00:19:55.399
+which is the Python library used by IPython.
+
+00:19:55.400 --> 00:19:56.999
+But as it is right now,
+
+00:19:57.000 --> 00:20:02.039
+if you want the most complete Python development experience
+
+00:20:02.040 --> 00:20:05.579
+in Emacs, I'd probably recommend using LSP
+
+00:20:05.580 --> 00:20:10.439
+for everything LSP can do, and then just using swanky-python
+
+00:20:10.440 --> 00:20:13.679
+for the object inspector and backtrace buffer,
+
+00:20:13.680 --> 00:20:15.359
+and the interactive features it has
+
+00:20:15.360 --> 00:20:18.031
+that an LSP can't provide.
+
+NOTE Wrapping up
+
+00:20:18.032 --> 00:20:23.339
+And that's it really.
+
+00:20:23.340 --> 00:20:25.865
+Shortly we'll have questions and answers
+
+00:20:25.866 --> 00:20:28.799
+as part of EmacsConf, and later on,
+
+00:20:28.800 --> 00:20:31.199
+if you have any questions, ideas, or issues
+
+00:20:31.200 --> 00:20:34.639
+feel free to reach out over email
+
+00:20:34.640 --> 00:20:37.999
+or create an issue on the repository.
+
+00:20:38.000 --> 00:20:39.331
+I should probably warn you,
+
+00:20:39.332 --> 00:20:41.119
+if you want to try out the project:
+
+00:20:41.120 --> 00:20:45.279
+so far I'm probably the only user of it
+
+00:20:45.280 --> 00:20:48.279
+and I've only tested it on my own Emacs setup,
+
+00:20:48.280 --> 00:20:50.839
+so it's quite likely you'll run into issues
+
+00:20:50.840 --> 00:20:53.479
+trying to get it installed and working.
+
+00:20:53.480 --> 00:20:56.119
+But if you do run into problems, please reach out,
+
+00:20:56.120 --> 00:20:59.279
+let me know. I'm happy to help and try and fix them.
+
+00:20:59.280 --> 00:21:03.640
+So that's it. Thanks for listening.
diff --git a/2025/captions/emacsconf-2025-weights--weightlifting-tracking-with-emacs-on-android--zachary-romero--main.vtt b/2025/captions/emacsconf-2025-weights--weightlifting-tracking-with-emacs-on-android--zachary-romero--main.vtt
new file mode 100644
index 00000000..6d1efa38
--- /dev/null
+++ b/2025/captions/emacsconf-2025-weights--weightlifting-tracking-with-emacs-on-android--zachary-romero--main.vtt
@@ -0,0 +1,1672 @@
+WEBVTT
+
+00:00.000 --> 00:05.819
+And you're ready to go. All right, perfect.
+
+00:05.820 --> 00:07.875
+Hello, my name is Zachary Romero
+
+00:07.876 --> 00:08.879
+and today I'll be giving a talk
+
+00:08.880 --> 00:12.719
+on how I'm using Emacs for Android
+
+00:12.720 --> 00:15.399
+to replace my fitness app I normally use.
+
+00:15.400 --> 00:17.239
+So it goes without saying
+
+00:17.240 --> 00:21.559
+that a lot of the mobile ecosystem these days
+
+00:21.560 --> 00:25.439
+are pretty hostile to the interest of its users.
+
+00:25.440 --> 00:26.999
+So there's privacy policies
+
+00:27.000 --> 00:32.959
+that are constantly collecting your data and selling it.
+
+00:32.960 --> 00:36.399
+without your consent, bombardment of ads.
+
+00:36.400 --> 00:37.999
+And then there's a lot of features that are locked.
+
+00:38.000 --> 00:40.479
+Sometimes features that the app gives you,
+
+00:40.480 --> 00:42.959
+they're put behind paywalls.
+
+00:42.960 --> 00:45.159
+And so a lot of the ecosystem
+
+00:45.160 --> 00:49.119
+isn't in the best interest of users.
+
+00:49.120 --> 00:51.959
+And obviously there are apps like on F-Droid
+
+00:51.960 --> 00:56.799
+and the Android ecosystem that do try to address this,
+
+00:56.800 --> 00:59.159
+but the solutions overall are lagging
+
+00:59.160 --> 01:05.439
+behind maybe desktop computers.
+
+01:05.440 --> 01:14.479
+One option that has come in the past few years
+
+01:14.480 --> 01:17.239
+is Emacs on Android. It's just a normal Emacs build,
+
+01:17.240 --> 01:21.159
+and so it can do everything, in theory, that Emacs can do.
+
+01:21.160 --> 01:24.399
+And so I got to thinking how could I, how I could use Emacs
+
+01:24.400 --> 01:27.039
+to replace some of the proprietary apps
+
+01:27.040 --> 01:28.479
+that I use on a daily basis.
+
+01:28.480 --> 01:31.279
+So I just went thinking about the apps,
+
+01:31.280 --> 01:33.039
+the apps that Emacs can replace.
+
+01:33.040 --> 01:35.119
+Some of them seem quite easy.
+
+01:35.120 --> 01:39.879
+Some of them... maybe might take a little effort but seem doable
+
+01:39.880 --> 01:41.959
+and then obviously there's a whole class of apps
+
+01:41.960 --> 01:47.199
+that would be pretty impossible to emulate on Emacs.
+
+01:47.200 --> 01:52.679
+So I mean besides like to-do lists, note taking, org mode,
+
+01:52.680 --> 01:55.759
+one thing that came to mind was my fitness tracking app.
+
+01:55.760 --> 01:59.239
+This is an app I use pretty often
+
+01:59.240 --> 02:06.719
+and in theory Emacs should be quite usable for this case.
+
+02:06.720 --> 02:09.759
+So weightlifting tracking is,
+
+02:09.760 --> 02:13.599
+so it's normally used to record
+
+02:13.600 --> 02:17.519
+what exercises you do at what intensity
+
+02:17.520 --> 02:20.719
+in order to progress week by week.
+
+02:20.720 --> 02:25.719
+So you might plan on like slowly increasing
+
+02:25.720 --> 02:27.399
+the amount of effort you put into
+
+02:27.400 --> 02:30.159
+your various workouts from week to week,
+
+02:30.160 --> 02:34.079
+and then maybe you'll have put some rest weeks in there.
+
+02:34.080 --> 02:37.439
+And so you want a detailed plan
+
+02:37.440 --> 02:40.439
+and recording of what you do throughout the week.
+
+02:40.440 --> 02:43.919
+And so I guess way back, normally
+
+02:43.920 --> 02:45.919
+this would have been done on pen and paper.
+
+02:45.920 --> 02:48.079
+So you would take your notebook
+
+02:48.080 --> 02:50.999
+and just write down on paper what you did.
+
+02:51.000 --> 02:56.559
+And this obviously works, and a lot of people do do this.
+
+02:56.560 --> 02:59.799
+But these days, there are quite a few apps
+
+02:59.800 --> 03:02.639
+that make this process quite seamless and effortless.
+
+03:02.640 --> 03:06.279
+So just as an example, really fast.
+
+03:06.280 --> 03:09.039
+So this is one of the popular apps out these days
+
+03:09.040 --> 03:10.399
+that has such a feature.
+
+03:10.400 --> 03:13.479
+So you can save all your workout routines
+
+03:13.480 --> 03:14.319
+and this nice interface.
+
+03:14.320 --> 03:18.719
+And so you click a button and then it starts,
+
+03:18.720 --> 03:20.919
+you have the workout interface and then
+
+03:20.920 --> 03:23.439
+You can kind of, you go through your workout
+
+03:23.440 --> 03:25.079
+and then you can input,
+
+03:25.080 --> 03:27.399
+you can input like what things you do.
+
+03:27.400 --> 03:29.119
+And then it has this like fancy timer at the bottom.
+
+03:29.120 --> 03:30.959
+So like, this is kind of like the,
+
+03:30.960 --> 03:35.839
+kind of like what a lot of people use these days,
+
+03:35.840 --> 03:39.319
+just for, just for, to make it as frictionless as possible.
+
+03:39.320 --> 03:44.359
+So obviously you can do like this bare bone text editing in Emacs.
+
+03:44.360 --> 03:46.959
+You just have to open up an org mode file and just right away.
+
+03:46.960 --> 03:48.879
+So, but there are a number of problems with this.
+
+03:48.880 --> 03:50.559
+So like, especially on mobile,
+
+03:50.560 --> 03:52.719
+character by character editing,
+
+03:52.720 --> 03:55.879
+just like writing all these, this text out manually,
+
+03:55.880 --> 03:58.759
+maybe some formatting, it can be pretty tedious
+
+03:58.760 --> 04:01.839
+and not, maybe not something you want to, you want to have to do,
+
+04:01.840 --> 04:04.559
+especially if you're like exhausted or tired.
+
+04:04.560 --> 04:06.479
+So, I mean, there's also like the problem
+
+04:06.480 --> 04:09.439
+of like remembering which, where in your workout you are,
+
+04:09.440 --> 04:11.839
+like how many of these, these, like which,
+
+04:11.840 --> 04:13.479
+which, like where are you, where you are,
+
+04:13.480 --> 04:17.159
+like, um like which set number set number are you on
+
+04:17.160 --> 04:17.679
+are you on the first second
+
+04:17.680 --> 04:19.919
+and then also like maybe you failed
+
+04:19.920 --> 04:22.239
+maybe you weren't able to like perform this
+
+04:22.240 --> 04:24.279
+and maybe you have to make a note that so like
+
+04:24.280 --> 04:28.279
+so that's even more text editing you would have to do
+
+04:28.280 --> 04:30.959
+um also some things like unit conversions
+
+04:30.960 --> 04:31.799
+like you could use calc
+
+04:31.800 --> 04:35.879
+but then you know you'd have to like open up the calc,
+
+04:35.880 --> 04:39.799
+and then number, unit conversion, switch buffers.
+
+04:39.800 --> 04:41.999
+So it's doable, but it takes a little effort.
+
+04:42.000 --> 04:43.439
+And then also the rest timer.
+
+04:43.440 --> 04:45.399
+So if you want to make sure you're resting
+
+04:45.400 --> 04:46.999
+in between these exercises you do,
+
+04:47.000 --> 04:51.079
+you'd have to maybe open up another app,
+
+04:51.080 --> 04:52.439
+or maybe you'd have to bring your watch.
+
+04:52.440 --> 04:53.719
+So that's another thing that
+
+04:53.720 --> 04:58.399
+these apps normally would do for you.
+
+04:58.400 --> 05:02.559
+So writing some Elisp, I created a package
+
+05:02.560 --> 05:04.479
+to try to emulate that experience
+
+05:04.480 --> 05:06.079
+I showed you on that other app.
+
+05:06.080 --> 05:08.159
+So let me just demo this real fast.
+
+05:08.160 --> 05:13.679
+So here, the package is called org-fit.
+
+05:13.680 --> 05:17.359
+And so here, I'm going to start a new workout.
+
+05:17.360 --> 05:19.559
+And then here, I'm prompted by a list of routines
+
+05:19.560 --> 05:22.159
+that I have pre-written in org mode.
+
+05:22.160 --> 05:25.759
+So the header name is the routine name.
+
+05:25.760 --> 05:29.279
+And so I can, out of all these routines I've written,
+
+05:29.280 --> 05:35.959
+I can select one and then also I can have it populate.
+
+05:35.960 --> 05:41.519
+So here it's populating preset weights I had for it.
+
+05:41.520 --> 05:45.839
+So yeah, so basically this is my current attempt
+
+05:45.840 --> 05:47.599
+to emulate that experience.
+
+05:47.600 --> 05:51.039
+So here we can, so here like the arrows and the tabs,
+
+05:51.040 --> 05:55.239
+they only go through like the, editable fields I can so
+
+05:55.240 --> 05:58.119
+on the notes section you see you see here in the table
+
+05:58.120 --> 06:00.439
+this is like the my plan for the day
+
+06:00.440 --> 06:02.159
+so I can press space to easily
+
+06:02.160 --> 06:03.839
+just fill out the data tab
+
+06:03.840 --> 06:06.879
+go the next the next the next set
+
+06:06.880 --> 06:10.239
+I can press quote to copy from above
+
+06:10.240 --> 06:13.359
+There's also some interesting things with Android,
+
+06:13.360 --> 06:15.719
+like you can bind the volume down key.
+
+06:15.720 --> 06:17.319
+So here I have the volume down key
+
+06:17.320 --> 06:21.439
+just like inputting the data automatically
+
+06:21.440 --> 06:22.399
+and going to the next field.
+
+06:22.400 --> 06:26.639
+So you see there it's quite seamless input of information.
+
+06:26.640 --> 06:30.119
+Notice also when all the sets
+
+06:30.120 --> 06:31.839
+of a single exercise are done,
+
+06:31.840 --> 06:34.759
+it marks that heading as done.
+
+06:34.760 --> 06:37.959
+Also, if you notice at the top, on the left,
+
+06:37.960 --> 06:42.239
+you have the session time for the workout.
+
+06:42.240 --> 06:44.199
+And then on here, we have the rest timer.
+
+06:44.200 --> 06:48.519
+So the rest timer is actually just defined as an org mode property.
+
+06:48.520 --> 06:50.839
+So here it's saying that, okay,
+
+06:50.840 --> 06:52.759
+you should start the auto rest timer
+
+06:52.760 --> 06:54.479
+for three minutes every time you do a set.
+
+06:54.480 --> 06:58.279
+So here, let's fill it in, go to the next one.
+
+06:58.280 --> 07:00.639
+And now the rest timer is set for three minutes.
+
+07:00.640 --> 07:03.079
+And so here I have, I can just rest
+
+07:03.080 --> 07:05.879
+I just have the information right here.
+
+07:05.880 --> 07:08.119
+Also, you'll notice here we have
+
+07:08.120 --> 07:09.439
+some calculations at the bottom.
+
+07:09.440 --> 07:12.159
+This is something also that those apps provide,
+
+07:12.160 --> 07:14.319
+like in order to make sure you're tracking
+
+07:14.320 --> 07:16.719
+on certain levels of intensity.
+
+07:16.720 --> 07:22.599
+Let's see, what else do we have?
+
+07:22.600 --> 07:30.879
+We can add warmups, automatic warmup set inserting, unit conversions,
+
+07:30.880 --> 07:33.439
+and then Something else to know
+
+07:33.440 --> 07:35.439
+is that all of these actions I'm doing,
+
+07:35.440 --> 07:37.079
+they're all bound to a single key
+
+07:37.080 --> 07:40.159
+to make things as effortless as possible.
+
+07:40.160 --> 07:43.679
+So yeah, that's the app in a nutshell.
+
+07:43.680 --> 07:47.079
+And then, so how is this done?
+
+07:47.080 --> 07:51.239
+So the philosophy behind this is to use org mode as a base.
+
+07:51.240 --> 07:55.639
+So all the functionality, the timer for the session,
+
+07:55.640 --> 08:00.319
+that's just clock in or clock in.
+
+08:00.320 --> 08:05.159
+The various, all the data you fill in,
+
+08:05.160 --> 08:09.519
+the exercises, routines, those are just org headings,
+
+08:09.520 --> 08:12.159
+like with nested entries.
+
+08:12.160 --> 08:14.959
+So yeah, and then all the movement,
+
+08:14.960 --> 08:16.759
+like a lot of the editing stuff
+
+08:16.760 --> 08:18.559
+is just going off of the org mode API.
+
+08:18.560 --> 08:22.919
+So like here, my upper field, is actually just using the,
+
+08:22.920 --> 08:26.239
+so it's using like the org table go to line function.
+
+08:26.240 --> 08:28.999
+Adding a no is org table put.
+
+08:29.000 --> 08:31.319
+So like all of my functions I'm using,
+
+08:31.320 --> 08:33.239
+they're just building off of the org mode API.
+
+08:33.240 --> 08:38.199
+And I found that this pattern worked work pretty well.
+
+08:38.200 --> 08:41.959
+So you get the benefits of org mode
+
+08:41.960 --> 08:48.839
+and then the ease of using it on mobile.
+
+08:48.840 --> 08:51.919
+And so I guess in the last few minutes of this talk,
+
+08:51.920 --> 08:53.479
+I'll just go over some quick things
+
+08:53.480 --> 08:56.319
+about working with Android that might come up.
+
+08:56.320 --> 08:58.879
+So the first thing is notifications.
+
+08:58.880 --> 09:01.039
+This is actually an interesting feature.
+
+09:01.040 --> 09:03.679
+So In the Android build for Emacs,
+
+09:03.680 --> 09:05.799
+you have the function android notifications notify.
+
+09:05.800 --> 09:09.039
+And so here, this is how you can send a notification.
+
+09:09.040 --> 09:11.999
+So my rest timer, for example, utilizes this function
+
+09:12.000 --> 09:14.399
+to let you know when your rest is over.
+
+09:14.400 --> 09:22.439
+And the cool thing about this is that the build for Emacs
+
+09:22.440 --> 09:29.039
+lets you, so here in the app settings, under notifications,
+
+09:29.040 --> 09:33.039
+so here you can actually pick a notification group,
+
+09:33.040 --> 09:36.639
+which is here set, which is, yeah, so it's set right here
+
+09:36.640 --> 09:37.999
+and you can just customize it.
+
+09:38.000 --> 09:39.599
+So like what sound do you want it to make?
+
+09:39.600 --> 09:40.439
+Do you want it to vibrate?
+
+09:40.440 --> 09:41.679
+Do you want to show on the screen?
+
+09:41.680 --> 09:43.519
+And so this way, like you can easily,
+
+09:43.520 --> 09:46.839
+so if you are resting, you will get a notification.
+
+09:46.840 --> 09:47.879
+It will vibrate.
+
+09:47.880 --> 09:50.079
+it might make a really loud noise if you want it to.
+
+09:50.080 --> 09:51.919
+And so this is all customizable.
+
+09:51.920 --> 09:54.479
+And the cool thing is that if you have other packages
+
+09:54.480 --> 09:55.639
+that utilize these notifications,
+
+09:55.640 --> 09:57.479
+all of the notification groups,
+
+09:57.480 --> 10:01.079
+they're all customizable separately. So, and there we go.
+
+10:01.080 --> 10:02.359
+So that notification you see on the top
+
+10:02.360 --> 10:04.999
+is actually from the Emacs app.
+
+10:05.000 --> 10:07.399
+So you notice here, we're not even running Emacs
+
+10:07.400 --> 10:09.759
+and yet we got that rest timer is over.
+
+10:09.760 --> 10:13.559
+So that's one thing. Next, keyboard.
+
+10:13.560 --> 10:15.039
+So just when working with Emacs,
+
+10:15.040 --> 10:19.079
+I found using the unexpected keyboard, in particular,
+
+10:19.080 --> 10:22.519
+to be really helpful with all the keybinding.
+
+10:22.520 --> 10:25.879
+So if you just want to try out Emacs
+
+10:25.880 --> 10:27.719
+from F-Droid or something,
+
+10:27.720 --> 10:30.239
+I would recommend using a keyboard like this
+
+10:30.240 --> 10:33.999
+to let you use the meta keys and the control keys.
+
+10:34.000 --> 10:37.039
+And then yeah, using this keyboard,
+
+10:37.040 --> 10:39.159
+I haven't really noticed any problems
+
+10:39.160 --> 10:41.679
+with Emacs key bindings.
+
+10:41.680 --> 10:45.159
+And then lastly, just like my setup.
+
+10:45.160 --> 10:49.679
+So SyncThinkFork is another app I rely on heavily.
+
+10:49.680 --> 10:54.399
+So as I mentioned, all the, this is org-fit files,
+
+10:54.400 --> 10:55.719
+they're all org-mode files.
+
+10:55.720 --> 10:57.439
+So I use SyncThinkFork to synchronize them
+
+10:57.440 --> 10:59.879
+between my laptop and my Android.
+
+10:59.880 --> 11:04.479
+And then also like to get this package,
+
+11:04.480 --> 11:06.559
+just syncing a list folder might be helpful
+
+11:06.560 --> 11:09.999
+if you want to easily edit your init file
+
+11:10.000 --> 11:12.319
+on Android on your machine.
+
+11:12.320 --> 11:15.639
+So yeah, SyncThinkPort is another helpful thing
+
+11:15.640 --> 11:17.959
+that you might wanna look into
+
+11:17.960 --> 11:22.919
+if you're exploring Android, the Emacs build of Android.
+
+11:22.920 --> 11:26.239
+So yeah, Emacs on Android does actually have the potential
+
+11:26.240 --> 11:30.959
+to replace a decent number of common use cases.
+
+11:30.960 --> 11:35.759
+And org mode can be a solid foundation
+
+11:35.760 --> 11:39.959
+for any of these applications that you're thinking of.
+
+11:39.960 --> 11:45.639
+And yeah, I highly recommend giving giving Emacs on Android a shot.
+
+11:45.640 --> 11:49.719
+And that concludes this presentation.
+
+11:49.720 --> 11:56.439
+Thank you so much, Zachary. That was an awesome talk,
+
+11:56.440 --> 11:59.599
+and I appreciate your preparing it for us.
+
+11:59.600 --> 12:03.399
+A couple questions on the pad, if anybody wants to jump in
+
+12:03.400 --> 12:05.119
+and throw in your questions or comments.
+
+12:05.120 --> 12:08.599
+Of course, happy to read them out on screen here.
+
+12:08.600 --> 12:12.039
+I think when we were talking backstage before,
+
+12:12.040 --> 12:14.239
+you had asked me to kind of read them out,
+
+12:14.240 --> 12:17.199
+but feel free to jump in and kind of
+
+12:17.200 --> 12:18.999
+take over at any point.
+
+12:19.000 --> 12:25.279
+This is the You Show. I'm kind of...
+
+12:25.280 --> 12:30.199
+So the first question we had was a comment.
+
+12:30.200 --> 12:31.439
+This is very cool.
+
+12:31.440 --> 12:33.519
+It would be nice to build up some
+
+12:33.520 --> 12:38.439
+org rep max calculation formula into calc.
+
+12:38.440 --> 12:42.119
+Is that something that you've thought about?
+
+12:42.120 --> 12:47.159
+Um, well, I mean, um, one rep max. Yeah.
+
+12:47.160 --> 12:48.799
+I mean, not in honesty,
+
+12:48.800 --> 12:52.359
+I'm not sure about the, like the, like, uh,
+
+12:52.360 --> 12:53.839
+extending calc itself.
+
+12:53.840 --> 12:56.799
+Like if there's, you know, if like,
+
+12:56.800 --> 12:59.199
+what are the ways of extending calc itself,
+
+12:59.200 --> 13:01.999
+but this, this package, um, or fit,
+
+13:02.000 --> 13:04.159
+I mean, it does have the one rep max.
+
+13:04.160 --> 13:11.199
+Like I kind of had to dig into that, like, um, uh,
+
+13:11.200 --> 13:20.079
+I can find the code, but yeah, I mean, it does,
+
+13:20.080 --> 13:25.079
+I mean, you know, so this is specifically this package,
+
+13:25.080 --> 13:33.039
+but yeah, you can use the various one rep max formulas for this.
+
+13:33.040 --> 13:37.159
+Extend this clock report. Yes, yeah, exactly.
+
+13:37.160 --> 13:39.199
+Graphical reports. These are all something that,
+
+13:39.200 --> 13:43.439
+It currently doesn't have, and these nice apps do have.
+
+13:43.440 --> 13:45.399
+They have charts of all kinds.
+
+13:45.400 --> 13:48.799
+You can see your progress from week to week
+
+13:48.800 --> 13:49.959
+on various exercise.
+
+13:49.960 --> 13:54.359
+They have like charts galore, all these like fancy apps.
+
+13:54.360 --> 14:00.319
+And in theory, it wouldn't be hard at all to like,
+
+14:00.320 --> 14:03.719
+cause like, you know, there's a GNU plot.
+
+14:03.720 --> 14:07.119
+There's those, and then they have like
+
+14:07.120 --> 14:10.479
+very good packages on any of them.
+
+14:10.480 --> 14:13.919
+So, I mean, I assume integration would be pretty seamless.
+
+14:13.920 --> 14:16.199
+So yes, that is definitely on the list
+
+14:16.200 --> 14:17.759
+of things I want to do.
+
+14:17.760 --> 14:21.599
+Have you ever wanted to modify
+
+14:21.600 --> 14:23.679
+the functionality of your mobile device
+
+14:23.680 --> 14:26.119
+while working out any good
+
+14:26.120 --> 14:28.439
+or challenging experiences or tips with that?
+
+14:28.440 --> 14:30.759
+Yeah, that's actually funny.
+
+14:30.760 --> 14:37.439
+There was a time where, yeah, I mean, like debugging,
+
+14:37.440 --> 14:40.999
+there was like some bug I was having with my code.
+
+14:41.000 --> 14:44.799
+And so I have, in the middle of a workout,
+
+14:44.800 --> 14:48.439
+yeah, start, like, open up the debugger and kind of,
+
+14:48.440 --> 14:50.959
+and the cool thing is that, I mean,
+
+14:50.960 --> 14:53.079
+the biggest thing, like, the biggest thing by far
+
+14:53.080 --> 14:54.599
+is unexpected keyboard.
+
+14:54.600 --> 14:56.359
+Like, I can't state how,
+
+14:56.360 --> 14:58.439
+I don't know how much unexpected keyboard is,
+
+14:58.440 --> 15:01.279
+because, like, with unexpected, with the unexpected,
+
+15:01.280 --> 15:03.599
+with that keyboard, you can literally just, like,
+
+15:03.600 --> 15:06.159
+it's, it's not hard at all to, like,
+
+15:06.160 --> 15:11.159
+you can do meta x or uh control meta x
+
+15:11.160 --> 15:13.639
+or you know control u control meta x
+
+15:13.640 --> 15:15.959
+to like you know debug like you can do all the key bindings
+
+15:15.960 --> 15:18.519
+with unexpected keyboard there's so there's no problem
+
+15:18.520 --> 15:20.279
+whatsoever whatsoever
+
+15:20.280 --> 15:23.599
+with that part the only part is muscle memory like like
+
+15:23.600 --> 15:25.599
+it's because you get the muscle memory
+
+15:25.600 --> 15:26.839
+of like the emacs key binding
+
+15:26.840 --> 15:28.279
+and so you have to kind of like yeah
+
+15:28.280 --> 15:31.639
+i mean that translation is actually kind of
+
+15:31.640 --> 15:35.039
+you have to think about it like, like, okay,
+
+15:35.040 --> 15:36.559
+what was that key binding again?
+
+15:36.560 --> 15:39.559
+And you have to kind of like do it with your fingers.
+
+15:39.560 --> 15:41.359
+And it was like doing it on the, on Android is,
+
+15:41.360 --> 15:44.199
+I mean, it takes a little longer
+
+15:44.200 --> 15:45.439
+and it's just a different, yeah,
+
+15:45.440 --> 15:47.079
+different set of different muscle memory.
+
+15:47.080 --> 15:51.559
+Gotcha. Sorry, if you've covered this,
+
+15:51.560 --> 15:55.439
+does the rest timer end with an audible notification?
+
+15:55.440 --> 15:58.199
+That's the cool thing.
+
+15:58.200 --> 16:02.519
+So with the Emacs, with the Android notification settings,
+
+16:02.520 --> 16:06.159
+you can, I can show that again in more detail.
+
+16:06.160 --> 16:17.079
+So bonus settings, apps, pick the app, notifications.
+
+16:17.080 --> 16:21.159
+And then here we get that Org Fit Restover.
+
+16:21.160 --> 16:22.919
+And so here you can set, for example,
+
+16:22.920 --> 16:24.879
+whether it's a silent notification.
+
+16:24.880 --> 16:27.959
+And so this won't, this won't make it make noise you can do
+
+16:27.960 --> 16:29.559
+or like make it have a noise
+
+16:29.560 --> 16:31.679
+and so you can have it make sure
+
+16:31.680 --> 16:33.119
+it's pop on this way the screen
+
+16:33.120 --> 16:37.039
+and then yeah you can just pick you can just pick whatever ringtone you want
+
+16:37.040 --> 16:38.679
+and you can make it look like yeah
+
+16:38.680 --> 16:42.559
+and then obviously you have like the whole uh volume setting
+
+16:42.560 --> 16:44.559
+so you can like when you're when you're uh when you're working
+
+16:44.560 --> 16:50.519
+you know you can just set the volume pretty high
+
+16:50.520 --> 16:51.679
+so if you set if you do happen
+
+16:51.680 --> 16:55.719
+to set your phone kind of away You set the volume high,
+
+16:55.720 --> 16:57.239
+maybe make a really annoying sound,
+
+16:57.240 --> 17:00.759
+a loud sound you won't miss. And then, yeah, you'll be set.
+
+17:00.760 --> 17:02.159
+So that works.
+
+17:02.160 --> 17:04.639
+That was actually one of the biggest surprises.
+
+17:04.640 --> 17:08.599
+I wasn't expecting that to work so nice.
+
+17:08.600 --> 17:17.279
+One of the next question relates to the unexpected keyboard.
+
+17:17.280 --> 17:19.399
+Question is, have you tried other keyboards,
+
+17:19.400 --> 17:20.399
+such as Hacker's Keyboard?
+
+17:20.400 --> 17:27.119
+Not recently. I haven't, so I couldn't compare them.
+
+17:27.120 --> 17:31.359
+Fair enough. Another keyboard question.
+
+17:31.360 --> 17:34.399
+Have you tried Flickboard on F-Droid?
+
+17:34.400 --> 17:37.959
+The commenter says, this is the craziest keyboard.
+
+17:37.960 --> 17:44.559
+You use one thumb. Oh, that is interesting. Let me see.
+
+17:44.560 --> 17:48.879
+Flickboard. Flickboard. Yeah, I'll have to try that.
+
+17:48.880 --> 17:53.119
+I'm curious to get the key bindings done.
+
+17:53.120 --> 17:57.359
+I wonder if the key bindings and all that work.
+
+17:57.360 --> 18:01.279
+I hope that's interesting. I'll definitely look into that.
+
+18:01.280 --> 18:02.359
+So I'll hold on just a moment
+
+18:02.360 --> 18:04.239
+as people are typing in more questions.
+
+18:04.240 --> 18:06.759
+A good moment to just thank you for the talk.
+
+18:06.760 --> 18:09.719
+It's personally, it's one of my favorite things
+
+18:09.720 --> 18:14.559
+to see at EmacsConf is, you know, a glimpse into a world
+
+18:14.560 --> 18:17.679
+that kind of isn't mine, right?
+
+18:17.680 --> 18:22.799
+but it shows how, you know, Emacs is sort of
+
+18:22.800 --> 18:25.999
+the bazaar in the cathedral
+
+18:26.000 --> 18:28.439
+and bazaar sense of we're all just here
+
+18:28.440 --> 18:31.839
+sort of hauling our bags of toys
+
+18:31.840 --> 18:35.679
+into the center square and, you know, making a,
+
+18:35.680 --> 18:38.439
+you know, I don't know if it's a house of cards
+
+18:38.440 --> 18:40.319
+or what exactly it is,
+
+18:40.320 --> 18:43.559
+but it, you know, it's managing to keep me afloat personally.
+
+18:43.560 --> 18:47.239
+And I just appreciate your, you know,
+
+18:47.240 --> 18:48.519
+kind of expanding my world.
+
+18:48.520 --> 18:53.759
+It's pretty cool. Yeah, definitely. Yeah, I mean, I agree.
+
+18:53.760 --> 19:01.079
+There's a lot of different, yeah. So, next commenter.
+
+19:01.080 --> 19:05.359
+I'm curious, oh, sorry, I skipped one here.
+
+19:05.360 --> 19:07.399
+This user interface is simplified,
+
+19:07.400 --> 19:09.639
+but still keyboard based.
+
+19:09.640 --> 19:11.959
+Have you thought about ways to make it more touch-based?
+
+19:11.960 --> 19:16.039
+Good question. Yeah, yeah, yeah.
+
+19:16.040 --> 19:19.599
+So the only thing currently, I think,
+
+19:19.600 --> 19:22.119
+of specific touch-based functionality I have,
+
+19:22.120 --> 19:25.399
+which, so this is like, so let's see,
+
+19:25.400 --> 19:37.679
+it's Control X, Control Plus,
+
+19:37.680 --> 19:40.159
+I think that's the, okay, that wrong,
+
+19:40.160 --> 19:42.959
+that key binding wrong, what was it? Okay, whatever.
+
+19:42.960 --> 19:45.559
+Yeah, so in terms of touch command,
+
+19:45.560 --> 19:47.839
+so pressing on a headline will actually unfold it
+
+19:47.840 --> 19:50.799
+and move your cursor to the next field that you,
+
+19:50.800 --> 19:54.639
+yeah, so like, yeah, at the beginning of the table.
+
+19:54.640 --> 19:56.959
+So like, there's that, yeah, and so.
+
+19:56.960 --> 20:02.399
+It sounds like that is something you're thinking about.
+
+20:02.400 --> 20:03.639
+Yeah, exactly.
+
+20:03.640 --> 20:05.999
+Like, you know, maybe like a little thing at the bottom,
+
+20:06.000 --> 20:09.559
+like, so this thing has the, this app has this,
+
+20:09.560 --> 20:10.839
+if you notice, like, if you do something,
+
+20:10.840 --> 20:12.479
+it has this rest timer at the bottom.
+
+20:12.480 --> 20:14.639
+So I mean, it wouldn't be,
+
+20:14.640 --> 20:16.599
+it wouldn't be pretty, it wouldn't be,
+
+20:16.600 --> 20:18.799
+it seems quite doable to just have like,
+
+20:18.800 --> 20:19.839
+maybe something at the bottom,
+
+20:19.840 --> 20:21.319
+like for a timer,
+
+20:21.320 --> 20:24.159
+and then you can just like plus 15 seconds or cancel it
+
+20:24.160 --> 20:25.239
+or, you know, just,
+
+20:25.240 --> 20:27.279
+and then those could all be just like touch based.
+
+20:27.280 --> 20:30.559
+And so, yeah. And then obviously just like,
+
+20:30.560 --> 20:36.119
+just like classic Emacs, the Emacs,
+
+20:36.120 --> 20:43.359
+like clicking actions, they just, yeah,
+
+20:43.360 --> 20:44.159
+they work just fine.
+
+20:44.160 --> 20:47.439
+Like, so there's no like weird Android touch thing
+
+20:47.440 --> 20:48.359
+you have to worry about.
+
+20:48.360 --> 20:52.559
+So let me ask a question of my own here.
+
+20:52.560 --> 20:57.199
+Just thinking about that myself, how would you, you know,
+
+20:57.200 --> 21:00.119
+ideally approach that as that you'd most prefer
+
+21:00.120 --> 21:02.879
+to sort of dive into yourself?
+
+21:02.880 --> 21:07.919
+Or would you think about factoring that out into
+
+21:07.920 --> 21:12.159
+like some kind of org touch higher level API or?
+
+21:12.160 --> 21:19.679
+Oh, I mean, personally, personally, I mean, I mean,
+
+21:19.680 --> 21:21.279
+I think just like the clicking
+
+21:21.280 --> 21:28.279
+and just like adding a lambda to it. That works.
+
+21:28.280 --> 21:35.759
+I mean, that feels like it works just fine.
+
+21:35.760 --> 21:41.639
+And you can add the code, like the command right there.
+
+21:41.640 --> 21:45.439
+So it's all like, yeah, it's all, I mean,
+
+21:45.440 --> 21:49.159
+and that's kind of a nice thing is like having everything like close,
+
+21:49.160 --> 21:54.159
+just like not having those, a lot of layers of abstraction.
+
+21:54.160 --> 22:03.279
+It's just like, you have a Lambda to the click and then just do.
+
+22:03.280 --> 22:06.439
+Yeah, just do. That was my experience too.
+
+22:06.440 --> 22:09.599
+This is a few years several years ago at ENAC's conference,
+
+22:09.600 --> 22:13.079
+we were shocked to learn just how usable,
+
+22:13.080 --> 22:18.559
+this is echoing a comment I see from Elip Energo on IRC,
+
+22:18.560 --> 22:21.479
+who says, touch seems so wildly usable nowadays,
+
+22:21.480 --> 22:22.399
+that's so awesome.
+
+22:22.400 --> 22:25.159
+And that was really my experience too with Dungeon.
+
+22:25.160 --> 22:28.719
+We were just working on it, we got the fog of war going,
+
+22:28.720 --> 22:32.439
+and then just took it onto a touchscreen laptop at the time,
+
+22:32.440 --> 22:33.959
+and we're just shocked to learn,
+
+22:33.960 --> 22:37.479
+you know, everything just worked. Yeah.
+
+22:37.480 --> 22:38.639
+Maybe like the hardest thing
+
+22:38.640 --> 22:40.559
+is actually just the default font size.
+
+22:40.560 --> 22:42.559
+You know, you have to like, you can't,
+
+22:42.560 --> 22:44.279
+you can't have your font too small or you'll,
+
+22:44.280 --> 22:46.319
+you'll like, you'll touch, you'll,
+
+22:46.320 --> 22:48.279
+you'll miss touch things a lot. Yeah.
+
+22:48.280 --> 22:50.159
+Well, there's no font size
+
+22:50.160 --> 22:52.999
+large enough to make me, you know,
+
+22:53.000 --> 22:58.159
+to make me comfortable on a smart device, unfortunately.
+
+22:58.160 --> 23:00.599
+But, but that, I think it may be a me problem.
+
+23:00.600 --> 23:04.439
+I think this question we might've missed. So the file sync.
+
+23:04.440 --> 23:12.679
+Yeah, so the file sync in terms of what's worked for me,
+
+23:12.680 --> 23:14.039
+I did have to play around with this a lot.
+
+23:14.040 --> 23:15.999
+Let me go ahead and read it out.
+
+23:16.000 --> 23:18.519
+You mentioned file sync, what have you found works well for you?
+
+23:18.520 --> 23:21.319
+Sorry. Yeah, yeah, yeah.
+
+23:21.320 --> 23:25.319
+So in terms of what, yeah, I did have to play around with this a lot,
+
+23:25.320 --> 23:28.639
+but sync thing fork is what I eventually settled on.
+
+23:28.640 --> 23:34.959
+I mean, this is another thing that, I mean, I don't,
+
+23:34.960 --> 23:36.319
+it wouldn't nearly be as usable,
+
+23:36.320 --> 23:39.679
+like Emacs wouldn't be nearly usable without it.
+
+23:39.680 --> 23:41.319
+So syncing fork essentially, okay.
+
+23:41.320 --> 23:44.559
+And then I also have like a droplet on DigitalOcean,
+
+23:44.560 --> 23:47.399
+just like, so that's kind of like the whole,
+
+23:47.400 --> 23:49.879
+that's kind of like what bridges it together.
+
+23:49.880 --> 23:52.519
+So like, so my Emacs can sync to that,
+
+23:52.520 --> 23:56.559
+and then my machine also syncs to that.
+
+23:56.560 --> 24:00.719
+And so like, I don't have to have them
+
+24:00.720 --> 24:06.359
+both on the same time. It's just there, that copy.
+
+24:06.360 --> 24:09.599
+And so that works pretty well.
+
+24:09.600 --> 24:13.559
+I also found that editing code in general,
+
+24:13.560 --> 24:15.359
+I think this also goes
+
+24:15.360 --> 24:19.919
+with the development experience question.
+
+24:19.920 --> 24:22.639
+So I'm curious about the development experience.
+
+24:22.640 --> 24:24.639
+Do you do everything on the phone? And that's the thing.
+
+24:24.640 --> 24:27.119
+None of my development in general is done on the phone.
+
+24:27.120 --> 24:32.439
+just because, for one, my muscle memory isn't there,
+
+24:32.440 --> 24:38.399
+and two, just in general, typing on a virtual keyboard on the phone,
+
+24:38.400 --> 24:40.119
+it's just really slow.
+
+24:40.120 --> 24:47.159
+So yeah, all the development is done on my machine,
+
+24:47.160 --> 24:52.119
+but then there's the problem of you have to have an init.l in your Android,
+
+24:52.120 --> 24:55.159
+and so you're going to have to write, you know,
+
+24:55.160 --> 24:56.919
+I found like you'd have to like,
+
+24:56.920 --> 24:58.279
+when you first get Emacs set up,
+
+24:58.280 --> 25:01.239
+you might have to like write some, I don't know,
+
+25:01.240 --> 25:03.959
+like you'll kind of have to like get into your init file
+
+25:03.960 --> 25:04.479
+and then just like,
+
+25:04.480 --> 25:06.999
+maybe just like start to put things together.
+
+25:07.000 --> 25:09.759
+But the cool thing is with SyncThinkFork,
+
+25:09.760 --> 25:15.519
+I'm syncing my, I'm setting it to load off of a sync directory.
+
+25:15.520 --> 25:18.559
+Like this, this init file,
+
+25:18.560 --> 25:21.159
+my Android file is synced with my machine.
+
+25:21.160 --> 25:24.319
+So if I wanted to, I could just edit it on my machine
+
+25:24.320 --> 25:25.879
+and just have that synced automatically.
+
+25:25.880 --> 25:28.839
+So that makes like the whole, like in it,
+
+25:28.840 --> 25:31.879
+cause like it's, it's such a, like, that is one of the,
+
+25:31.880 --> 25:33.079
+it's just like getting,
+
+25:33.080 --> 25:36.879
+sit writing your init L and M in Emacs on Android
+
+25:36.880 --> 25:37.839
+is just kind of a.
+
+25:37.840 --> 25:39.359
+We do have one more question.
+
+25:39.360 --> 25:41.479
+I can't help but throw in a comment there.
+
+25:41.480 --> 25:43.759
+I think that's like.
+
+25:43.760 --> 25:47.519
+That's an extremely good tip, right?
+
+25:47.520 --> 25:49.959
+That if we're, as we're exploring Android,
+
+25:49.960 --> 25:52.839
+we want to think about that as
+
+25:52.840 --> 25:55.759
+adding support for another port of Emacs.
+
+25:55.760 --> 25:58.959
+So the whole dance of, oh, I took, you know,
+
+25:58.960 --> 26:01.239
+I took, you know, I took my init
+
+26:01.240 --> 26:04.479
+and I wanted to use it on BSD
+
+26:04.480 --> 26:06.439
+after mostly using GNU Linux.
+
+26:06.440 --> 26:09.119
+Now we're going in and we're looking at our Emacs.
+
+26:09.120 --> 26:11.279
+all of our Emacs and it stuff
+
+26:11.280 --> 26:13.839
+and thinking about compatibility,
+
+26:13.840 --> 26:15.199
+turning features on and off
+
+26:15.200 --> 26:19.959
+based on the OS that we're running underneath and so on.
+
+26:19.960 --> 26:22.119
+I think that's pretty heads up advice.
+
+26:22.120 --> 26:24.759
+Let me read out this other question.
+
+26:24.760 --> 26:28.199
+Have you thought about integrating cardio tracking
+
+26:28.200 --> 26:30.559
+like time runs, bike rides, and so on?
+
+26:30.560 --> 26:34.319
+Yes, I definitely thought about that.
+
+26:34.320 --> 26:36.599
+And that might be another thing
+
+26:36.600 --> 26:38.479
+where a touch interface might be helpful.
+
+26:38.480 --> 26:41.559
+I don't know if I can easily pull it up,
+
+26:41.560 --> 26:47.199
+but the app itself, oh yeah, here it is.
+
+26:47.200 --> 26:50.199
+So you can see kind of how they have,
+
+26:50.200 --> 26:53.279
+and you can kind of see how this fits.
+
+26:53.280 --> 26:55.119
+This is like an org, you can see
+
+26:55.120 --> 26:57.399
+that these are just tables, right?
+
+26:57.400 --> 26:59.239
+This is just like this whole interface in general,
+
+26:59.240 --> 27:02.279
+just like kind of screams like an org mode,
+
+27:02.280 --> 27:05.119
+file with you have you have your different headings
+
+27:05.120 --> 27:06.559
+like here's a warm-up heading
+
+27:06.560 --> 27:07.839
+and then you have the tables
+
+27:07.840 --> 27:09.879
+and you know you could just like envision
+
+27:09.880 --> 27:12.839
+how you could have a org table
+
+27:12.840 --> 27:15.039
+with one of the columns called time
+
+27:15.040 --> 27:18.439
+and then you could just imagine like there'd be a button there
+
+27:18.440 --> 27:21.159
+and you can just just have it click,
+
+27:21.160 --> 27:24.279
+and then you'd have a timer in the background
+
+27:24.280 --> 27:25.799
+that would update this timer.
+
+27:25.800 --> 27:32.599
+It's so, I mean, conceptually, there's nothing really,
+
+27:32.600 --> 27:35.799
+it conceptually maps really well to this.
+
+27:35.800 --> 27:41.559
+So yeah, I mean, that's definitely something.
+
+27:41.560 --> 27:44.439
+That's awesome. Great answer.
+
+27:44.440 --> 27:47.759
+So I think we're just at about 90 seconds left.
+
+27:47.760 --> 27:50.119
+Perfect amount of time, I think, to just wrap up.
+
+27:50.120 --> 27:52.199
+Closing thoughts. I'll share mine first.
+
+27:52.200 --> 27:53.759
+Really appreciate you, Zach.
+
+27:53.760 --> 27:56.639
+Thank you for putting this talk together.
+
+27:56.640 --> 27:59.359
+I think this is the type of talk
+
+27:59.360 --> 28:01.239
+that's really going to tie the room together
+
+28:01.240 --> 28:07.559
+for people that may be, you know, not sure how they can take
+
+28:07.560 --> 28:12.719
+although they've been interested in that,
+
+28:12.720 --> 28:16.399
+this can be a really good way to kind of open up the world.
+
+28:16.400 --> 28:20.319
+Thank you. Thank you for putting it together.
+
+28:20.320 --> 28:22.439
+Yeah, yeah, yeah, yeah, I would just say
+
+28:22.440 --> 28:24.159
+like definitely just try things out.
+
+28:24.160 --> 28:25.359
+Like if you think, you know,
+
+28:25.360 --> 28:26.439
+they're just like random ideas,
+
+28:26.440 --> 28:30.319
+like a book tracking app or like a recipe app,
+
+28:30.320 --> 28:33.479
+like, you know, there's a lot of things
+
+28:33.480 --> 28:35.599
+that you do on your mobile device
+
+28:35.600 --> 28:37.719
+that aren't like banking apps that you could easily,
+
+28:37.720 --> 28:39.759
+that seem like they could be done in Emacs.
+
+28:39.760 --> 28:42.479
+So yeah, just try different things out
+
+28:42.480 --> 28:47.239
+and I would love to hear what other people do. Bravo.
+
+28:47.240 --> 28:52.519
+I appreciate it once again, you're coming together
+
+28:52.520 --> 28:56.639
+and especially you're doing it live.
+
+28:56.640 --> 29:00.079
+I know that as a conference, we have a lot of preference
+
+29:00.080 --> 29:01.479
+for those recorded talks
+
+29:01.480 --> 29:02.759
+and getting the captioning together,
+
+29:02.760 --> 29:05.319
+but I just have a special place in my heart
+
+29:05.320 --> 29:07.679
+for the energy that comes with a live talk
+
+29:07.680 --> 29:12.560
+and I appreciate you doing it. Thanks for putting this on.
diff --git a/2025/captions/emacsconf-2025-zettelkasten--zettelkasten-for-regular-emacs-hackers--christian-tietze--answers.vtt b/2025/captions/emacsconf-2025-zettelkasten--zettelkasten-for-regular-emacs-hackers--christian-tietze--answers.vtt
new file mode 100644
index 00000000..5abfd435
--- /dev/null
+++ b/2025/captions/emacsconf-2025-zettelkasten--zettelkasten-for-regular-emacs-hackers--christian-tietze--answers.vtt
@@ -0,0 +1,3977 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:07.319
+Yes. All right. Take it away. Thank you, Christian. Thank you, too.
+
+00:00:07.320 --> 00:00:09.359
+If you could have the pad open at the same time,
+
+00:00:09.360 --> 00:00:11.319
+you can read the questions.
+
+00:00:11.320 --> 00:00:13.639
+Or I can start reading some to you while I'm here.
+
+00:00:13.640 --> 00:00:14.959
+Oh, no. I can read them.
+
+00:00:14.960 --> 00:00:21.599
+I was wondering whether I should maybe copy them into a new buffer.
+
+00:00:21.600 --> 00:00:30.159
+So they are also on screen. Increase the font size a bit.
+
+00:00:30.160 --> 00:00:39.839
+So I'm trying to do this on the fly.
+
+00:00:39.840 --> 00:00:41.279
+Maybe a bad idea. Let's see.
+
+00:00:41.280 --> 00:00:42.519
+Of course, you're going to capture it
+
+00:00:42.520 --> 00:00:45.879
+into your Zettelkasten then. Is that what's happening?
+
+00:00:45.880 --> 00:00:49.559
+Well, I can start you off.
+
+00:00:49.560 --> 00:00:56.279
+The first question is, I wonder what they use for the fancy animations.
+
+00:00:56.280 --> 00:00:59.559
+I was thinking about this because that's the first question
+
+00:00:59.560 --> 00:01:00.959
+and I was thinking about this
+
+00:01:00.960 --> 00:01:02.599
+while I copied this stuff over.
+
+00:01:02.600 --> 00:01:09.359
+What part is the fancy part?
+
+00:01:09.360 --> 00:01:13.079
+I can recommend books, like if anyone wants to have book recommendations
+
+00:01:13.080 --> 00:01:18.039
+for how to make presentations with PowerPoint-like software
+
+00:01:18.040 --> 00:01:22.999
+in a very simple way, we taught this at university.
+
+00:01:23.000 --> 00:01:25.559
+was it now, some 15 years ago,
+
+00:01:25.560 --> 00:01:28.799
+to students to make animation abuse
+
+00:01:28.800 --> 00:01:32.439
+where everything was flashy and typed in or something.
+
+00:01:32.440 --> 00:01:36.679
+Don't do this, but instead do a couple of very simple tasteful things
+
+00:01:36.680 --> 00:01:41.959
+like fading through colors like filmmakers do, right?
+
+00:01:41.960 --> 00:01:44.199
+Fading through black to make a scene cut
+
+00:01:44.200 --> 00:01:47.839
+or just fade between things, the fanciness.
+
+00:01:47.840 --> 00:01:53.759
+Presentation software stack, the fanciness.
+
+00:01:53.760 --> 00:01:55.079
+I didn't dial fanciness up,
+
+00:01:55.080 --> 00:02:00.239
+I just resorted to a very simple fade animations,
+
+00:02:00.240 --> 00:02:04.719
+like fading stuff in and wipe, I think, for text effects.
+
+00:02:04.720 --> 00:02:06.879
+That was it, more or less.
+
+00:02:06.880 --> 00:02:09.959
+And for the lines, maybe the lines are fancy.
+
+00:02:09.960 --> 00:02:14.679
+I was using Apple Keynote because I'm fastest with that,
+
+00:02:14.680 --> 00:02:19.079
+but I also usually, we taught this workshop with PowerPoint
+
+00:02:19.080 --> 00:02:23.319
+and I think the LibreOffice stack got much better with that
+
+00:02:23.320 --> 00:02:24.239
+as well in the recent years,
+
+00:02:24.240 --> 00:02:26.279
+but I haven't tried that in a long time
+
+00:02:26.280 --> 00:02:31.599
+to like fiddle around and find all the knobs to dial.
+
+00:02:31.600 --> 00:02:34.719
+Because the Apple presentation thingy has this nice feature
+
+00:02:34.720 --> 00:02:37.079
+where you draw an arrow with a tip,
+
+00:02:37.080 --> 00:02:41.039
+and then you have a special animation for line drawing,
+
+00:02:41.040 --> 00:02:42.439
+which is only available for line art.
+
+00:02:42.440 --> 00:02:45.559
+And then it draws the arrow that moves around like that.
+
+00:02:45.560 --> 00:02:48.079
+So yeah, presentation stack, Apple Keynote,
+
+00:02:48.080 --> 00:02:52.559
+probably not of interest for anyone here.
+
+00:02:52.560 --> 00:02:56.439
+I usually don't use plain text presentation stuff, right?
+
+00:02:56.440 --> 00:03:03.319
+So I tried this, I tried this with markdown presentations,
+
+00:03:03.320 --> 00:03:08.319
+slidey things, org presentation.
+
+00:03:08.320 --> 00:03:12.879
+It's always not enough control for the fiddly things
+
+00:03:12.880 --> 00:03:17.959
+that I'm interested in to make the experience great.
+
+00:03:17.960 --> 00:03:20.199
+So I wonder what are the fancy animations.
+
+00:03:20.200 --> 00:03:25.439
+And the stack, the stack is Apple Keynote, sorry.
+
+00:03:25.440 --> 00:03:30.079
+Okay, that's enough. Thank you for capturing.
+
+00:03:30.080 --> 00:03:37.719
+Are you not a fan? Okay. You saw this in the recording.
+
+00:03:37.720 --> 00:03:43.839
+Why on earth is autofill mode not enabled? I don't know.
+
+00:03:43.840 --> 00:03:48.479
+I thought it is the default, but apparently it isn't.
+
+00:03:48.480 --> 00:03:52.039
+I could also use visual line mode.
+
+00:03:52.040 --> 00:03:55.719
+It's built in as well, right? Visual line mode.
+
+00:03:55.720 --> 00:03:57.999
+It's so weird to be in this vanilla setup
+
+00:03:58.000 --> 00:04:00.439
+and not have all my key bindings
+
+00:04:00.440 --> 00:04:04.959
+and my normal stuff ready, so.
+
+00:04:04.960 --> 00:04:08.479
+I am not a fan of using asterisk headings in org mode.
+
+00:04:08.480 --> 00:04:12.359
+It's interesting to see how people have different styles of writing org content.
+
+00:04:12.360 --> 00:04:22.359
+Am I not? What exactly? What did I do?
+
+00:04:22.360 --> 00:04:25.959
+And nodes, just open one of these.
+
+00:04:25.960 --> 00:04:33.519
+Okay. I could see how you could, in examples like this,
+
+00:04:33.520 --> 00:04:36.639
+use org-mode to read-only.
+
+00:04:36.640 --> 00:04:44.599
+Why? How you could use org-mode to use headings for this,
+
+00:04:44.600 --> 00:04:48.159
+because it's an outliner first and foremost,
+
+00:04:48.160 --> 00:04:50.439
+so outlining is very natural.
+
+00:04:50.440 --> 00:04:53.279
+But when I do in my personal setup,
+
+00:04:53.280 --> 00:04:58.079
+I also have this what's called start indentation thingy.
+
+00:04:58.080 --> 00:05:01.079
+enabled, so that means that everything
+
+00:05:01.080 --> 00:05:04.159
+would be indented one level from the start.
+
+00:05:04.160 --> 00:05:05.599
+So I would probably fiddle around
+
+00:05:05.600 --> 00:05:07.799
+with that to not get like crazy.
+
+00:05:07.800 --> 00:05:12.039
+But also, I don't see, I don't see,
+
+00:05:12.040 --> 00:05:13.839
+like really see when I look at this,
+
+00:05:13.840 --> 00:05:17.879
+I didn't see a potential to create subheadings,
+
+00:05:17.880 --> 00:05:19.479
+I mean, or even headings.
+
+00:05:19.480 --> 00:05:21.559
+The only heading here is the title,
+
+00:05:21.560 --> 00:05:24.279
+like in my perception of this node,
+
+00:05:24.280 --> 00:05:27.159
+and it's one, It's two lists.
+
+00:05:27.160 --> 00:05:28.639
+You could group these in headings.
+
+00:05:28.640 --> 00:05:40.319
+I didn't. That's right. Where's another one?
+
+00:05:40.320 --> 00:05:42.679
+I opened the autosave file because I'm stupid.
+
+00:05:42.680 --> 00:05:46.719
+OK. So this one could also be probably subdivided.
+
+00:05:46.720 --> 00:05:48.559
+But I'm also not sure.
+
+00:05:48.560 --> 00:05:52.359
+I'm also not sure if I would gain anything structurally
+
+00:05:52.360 --> 00:05:55.799
+if I do it like this because then I'm in a structural level
+
+00:05:55.800 --> 00:05:58.279
+and the stuff that just flows naturally
+
+00:05:58.280 --> 00:06:01.039
+as a sequence of text paragraphs,
+
+00:06:01.040 --> 00:06:07.119
+this here, it's not disconnected.
+
+00:06:07.120 --> 00:06:10.519
+It wasn't meant to be under organism
+
+00:06:10.520 --> 00:06:16.839
+and I need to create a new same level thing
+
+00:06:16.840 --> 00:06:23.959
+to say, hey, these are, I don't know, details or whatever.
+
+00:06:23.960 --> 00:06:26.119
+So that's maybe the real reason.
+
+00:06:26.120 --> 00:06:28.879
+I'm fine with writing snippets that are self-contained
+
+00:06:28.880 --> 00:06:31.159
+and essentially one or two or three or five or whatever,
+
+00:06:31.160 --> 00:06:32.119
+how many paragraphs,
+
+00:06:32.120 --> 00:06:36.119
+but it's not like, it's always an outline form.
+
+00:06:36.120 --> 00:06:38.679
+So I don't resort to this.
+
+00:06:38.680 --> 00:06:40.999
+My onSettle custom is usually written in Markdown.
+
+00:06:41.000 --> 00:06:43.999
+So I use subheadings for actual headings
+
+00:06:44.000 --> 00:06:47.559
+to subdivide like I would subdivide an essay
+
+00:06:47.560 --> 00:06:49.759
+or an article, blog post.
+
+00:06:49.760 --> 00:06:52.839
+But that's the mode of writing that I'm in here.
+
+00:06:52.840 --> 00:06:54.319
+It's like blog post writing.
+
+00:06:54.320 --> 00:06:56.239
+I wouldn't start with four headings for this.
+
+00:06:56.240 --> 00:06:58.839
+So I'm not doing that. That's a thing.
+
+00:06:58.840 --> 00:07:04.919
+Okay, I guess I'm going to read the questions,
+
+00:07:04.920 --> 00:07:07.519
+but I'm going to stop copying them in because I lose time.
+
+00:07:07.520 --> 00:07:09.439
+I want to reply to you, folks.
+
+00:07:09.440 --> 00:07:11.479
+Didn't see a need for a rack constructor.
+
+00:07:11.480 --> 00:07:13.719
+Thank you for capturing this. Next question.
+
+NOTE Can you use org files and all its features inside Denote?
+
+00:07:13.720 --> 00:07:17.799
+Can you use org files and all its features inside Denote?
+
+00:07:17.800 --> 00:07:22.439
+Yes. Like this is, this is an org file
+
+00:07:22.440 --> 00:07:25.359
+and Denote uses org headings instead of,
+
+00:07:25.360 --> 00:07:28.799
+with Markdown, you get YAML front meta.
+
+00:07:28.800 --> 00:07:32.759
+And with org, you get these attributes,
+
+00:07:32.760 --> 00:07:36.359
+value attribute thingies
+
+00:07:36.360 --> 00:07:40.079
+that are then the metadata for the node.
+
+00:07:40.080 --> 00:07:45.279
+So yeah, the answer is yes. You get everything and on top,
+
+00:07:45.280 --> 00:07:48.159
+a small layer of a link, link management.
+
+00:07:48.160 --> 00:07:48.999
+That's all there is.
+
+NOTE Where or how do you like to capture fleeting notes?
+
+00:07:49.000 --> 00:07:55.319
+Next question is, where or how do you like to capture fleeting notes?
+
+00:07:55.320 --> 00:07:58.479
+Oh, fleeting notes. If you say fleeting notes,
+
+00:07:58.480 --> 00:08:01.079
+you also need to say non-fleeting notes
+
+00:08:01.080 --> 00:08:02.399
+and figure out what these are.
+
+00:08:02.400 --> 00:08:05.079
+And when you say non-fleeting notes,
+
+00:08:05.080 --> 00:08:07.239
+and fleeting notes exist, because it's a distinction,
+
+00:08:07.240 --> 00:08:10.199
+and there's something on both sides of this distinction.
+
+00:08:10.200 --> 00:08:12.119
+If you say there's a distinction, there are two sides,
+
+00:08:12.120 --> 00:08:14.559
+maybe you want to subdivide the non-fleeting notes further,
+
+00:08:14.560 --> 00:08:16.199
+because, well, it's a non-fleeting note
+
+00:08:16.200 --> 00:08:21.159
+isn't very descriptive. So what else do you say there?
+
+00:08:21.160 --> 00:08:24.799
+And people have said a couple of things
+
+00:08:24.800 --> 00:08:28.479
+to define non-fleeting nodes, for example, permanent nodes.
+
+00:08:28.480 --> 00:08:33.199
+I guess that's a Sonke Ahrens,
+
+00:08:33.200 --> 00:08:35.039
+permanent nodes is the most popular.
+
+00:08:35.040 --> 00:08:36.159
+Let's stay with that, stick with that.
+
+00:08:36.160 --> 00:08:38.279
+So if you have permanent nodes and fleeting nodes,
+
+00:08:38.280 --> 00:08:41.599
+now we have two types of nodes. The thing is, in books,
+
+00:08:41.600 --> 00:08:46.319
+the only, when we would talk about note-taking
+
+00:08:46.320 --> 00:08:47.679
+and you would ask me, hey Christian,
+
+00:08:47.680 --> 00:08:49.559
+how do you take fleeting notes?
+
+00:08:49.560 --> 00:08:53.679
+I imagine the discussion would be in German
+
+00:08:53.680 --> 00:08:55.799
+because that's how people usually talk to me.
+
+00:08:55.800 --> 00:08:56.679
+I would pull out a book,
+
+00:08:56.680 --> 00:08:59.799
+this is Object-Oriented Software Engineering,
+
+00:08:59.800 --> 00:09:03.679
+interesting book by Iva Jacobson or Iva, Iva,
+
+00:09:03.680 --> 00:09:06.159
+I'm not sure because, you know,
+
+00:09:06.160 --> 00:09:08.719
+it's an English or American person.
+
+00:09:08.720 --> 00:09:14.419
+And inside I have these fleeting notes like these
+
+00:09:14.420 --> 00:09:18.879
+are actual paper notes square what are these three by something inch
+
+00:09:18.880 --> 00:09:20.999
+American standard size I guess
+
+00:09:21.000 --> 00:09:24.039
+and A6 minus the tariff part
+
+00:09:24.040 --> 00:09:29.439
+from from another notepad these are notes i took engagement notes
+
+00:09:29.440 --> 00:09:32.439
+if you will like engagement notes
+
+00:09:32.440 --> 00:09:34.999
+because the margins of the book don't suffice to take
+
+00:09:35.000 --> 00:09:38.799
+and this is related to i need more space so this is more space
+
+00:09:38.800 --> 00:09:41.119
+these are fleeting
+
+00:09:41.120 --> 00:09:44.999
+and as you see I have them in my pile of books
+
+00:09:45.000 --> 00:09:46.839
+right next to me in the shelf
+
+00:09:46.840 --> 00:09:52.279
+and folded them in this piece of paper,
+
+00:09:52.280 --> 00:09:54.879
+labeled it with the author because I lost them.
+
+00:09:54.880 --> 00:09:57.839
+couple of times they just fell out
+
+00:09:57.840 --> 00:09:58.759
+when I reached for the book
+
+00:09:58.760 --> 00:10:01.479
+and this is an envelope I shove it into the book
+
+00:10:01.480 --> 00:10:04.919
+and then forget about processing the book again
+
+00:10:04.920 --> 00:10:08.599
+for five or ten years. So what do I do with fleeting notes?
+
+00:10:08.600 --> 00:10:11.999
+I do fleeting notes on paper or if I'm using an e-reader
+
+00:10:12.000 --> 00:10:14.879
+maybe with an e-reader software annotation tool
+
+00:10:14.880 --> 00:10:21.639
+but fleeting in the most like simple non contrived sense,
+
+00:10:21.640 --> 00:10:23.839
+fleeting notes are meant as engagement notes
+
+00:10:23.840 --> 00:10:26.039
+and then you do something with them
+
+00:10:26.040 --> 00:10:27.519
+or like I just showed you,
+
+00:10:27.520 --> 00:10:29.879
+you don't because life's short, right?
+
+00:10:29.880 --> 00:10:31.919
+Time runs out, then you need to forget,
+
+00:10:31.920 --> 00:10:33.639
+then you need to remember
+
+00:10:33.640 --> 00:10:36.119
+how to restructure everything in your head
+
+00:10:36.120 --> 00:10:37.519
+to make sense of the notes again
+
+00:10:37.520 --> 00:10:38.359
+because they were fleeting,
+
+00:10:38.360 --> 00:10:40.999
+they were just little scribbles and it's
+
+00:10:41.000 --> 00:10:44.559
+It's basically ballast or waste.
+
+00:10:44.560 --> 00:10:46.679
+I'm just carrying this with me for years
+
+00:10:46.680 --> 00:10:50.879
+and maybe never get around to using these.
+
+00:10:50.880 --> 00:10:53.399
+But also, I put stuff on there, maybe I do.
+
+00:10:53.400 --> 00:10:55.399
+It doesn't hurt to keep them in there.
+
+00:10:55.400 --> 00:10:58.519
+It's just an odd collector's habit I can't get rid of.
+
+00:10:58.520 --> 00:11:03.399
+fleeting notes, I just capture them wherever
+
+00:11:03.400 --> 00:11:05.919
+and then either I process them or try to throw them away
+
+00:11:05.920 --> 00:11:07.079
+or forget about them
+
+00:11:07.080 --> 00:11:10.239
+because they're in some inbox file on a smartphone
+
+00:11:10.240 --> 00:11:13.159
+and then, you know, they might as well not exist,
+
+00:11:13.160 --> 00:11:15.439
+they're just there to engage me during the reading
+
+00:11:15.440 --> 00:11:17.079
+and if I don't process them in time,
+
+00:11:17.080 --> 00:11:21.999
+meh like, chance is up, it sucks
+
+00:11:22.000 --> 00:11:26.319
+Next question, like fleeting notes, permanent notes.
+
+00:11:26.320 --> 00:11:27.799
+I'm not going to talk about these
+
+00:11:27.800 --> 00:11:29.039
+unless someone asks a question.
+
+00:11:29.040 --> 00:11:32.119
+Zettelkasten feels like a very cagey approach
+
+00:11:32.120 --> 00:11:34.079
+to note-taking and knowledge management.
+
+00:11:34.080 --> 00:11:36.519
+Doesn't it restrict one to think in certain ways
+
+00:11:36.520 --> 00:11:38.919
+rather than what feels natural to someone?
+
+00:11:38.920 --> 00:11:45.919
+Well, yes, but so does wearing underwear, right?
+
+00:11:45.920 --> 00:11:50.119
+A bit of personal revelation.
+
+00:11:50.120 --> 00:11:54.079
+When I'm working from home, I'm wearing pants.
+
+00:11:54.080 --> 00:11:57.039
+You don't see them, but I don't need to.
+
+00:11:57.040 --> 00:12:00.079
+But I'm also kind of self-restricting myself in a way
+
+00:12:00.080 --> 00:12:01.239
+because there's a window,
+
+00:12:01.240 --> 00:12:03.479
+it's dark outside, and I'm well lit.
+
+00:12:03.480 --> 00:12:05.479
+And if I just stand up and have no pants on,
+
+00:12:05.480 --> 00:12:12.919
+I don't care that much what the neighbors like 10, 20 meters across think.
+
+00:12:12.920 --> 00:12:15.759
+your mileage may vary then, right?
+
+00:12:15.760 --> 00:12:18.319
+So there are restrictions that make sense
+
+00:12:18.320 --> 00:12:24.439
+to get to some point in your day-to-day life.
+
+00:12:24.440 --> 00:12:25.999
+And in the case of Zettelkasten,
+
+00:12:26.000 --> 00:12:31.639
+I try to tell people the shortest story possible
+
+00:12:31.640 --> 00:12:36.159
+to convey a story there, but also not to cage them in
+
+00:12:36.160 --> 00:12:38.679
+with 20 definitions of different notes.
+
+00:12:38.680 --> 00:12:42.279
+Because all that matters is try to move your thinking
+
+00:12:42.280 --> 00:12:44.039
+into an environment where you can write,
+
+00:12:44.040 --> 00:12:45.719
+where you feel comfortable writing,
+
+00:12:45.720 --> 00:12:47.239
+and where you can keep this stuff.
+
+00:12:47.240 --> 00:12:50.239
+Because I do feel comfortable with a pencil and paper.
+
+00:12:50.240 --> 00:12:54.199
+But what I just showed you, this might as well never have happened.
+
+00:12:54.200 --> 00:12:56.719
+Something has changed in my brain.
+
+00:12:56.720 --> 00:13:01.159
+most likely, when I engaged with a book like this.
+
+00:13:01.160 --> 00:13:04.199
+As far as publications and writing is concerned,
+
+00:13:04.200 --> 00:13:06.079
+this might as well not exist in my life,
+
+00:13:06.080 --> 00:13:10.279
+because I didn't do something with it.
+
+00:13:10.280 --> 00:13:15.239
+I mean, I was reading the book probably on a commute back then, on the train.
+
+00:13:15.240 --> 00:13:18.679
+I didn't take notes on the computer right away.
+
+00:13:18.680 --> 00:13:20.159
+So if you feel caged in,
+
+00:13:20.160 --> 00:13:24.319
+that may be a sign that you went too far on the,
+
+00:13:24.320 --> 00:13:26.479
+I need to do this, I need to do that stage,
+
+00:13:26.480 --> 00:13:28.359
+and lose some of the playfulness.
+
+00:13:28.360 --> 00:13:29.959
+There needs to be playfulness
+
+00:13:29.960 --> 00:13:32.599
+inside of the whole procedure, otherwise it...
+
+00:13:32.600 --> 00:13:36.999
+If you don't enjoy doing it, you won't be doing it.
+
+00:13:37.000 --> 00:13:39.319
+And if you don't do it, then you don't get a benefit.
+
+00:13:39.320 --> 00:13:41.039
+And it's just another chore in your life.
+
+00:13:41.040 --> 00:13:42.479
+Then rather not do it.
+
+00:13:42.480 --> 00:13:46.479
+So try to avoid the feeling of caginess
+
+00:13:46.480 --> 00:13:49.639
+and do whatever you want with it
+
+00:13:49.640 --> 00:13:52.319
+as long as you try to give your best.
+
+00:13:52.320 --> 00:13:55.799
+That's the cage that you will benefit from
+
+00:13:55.800 --> 00:13:58.959
+like really trying maybe not trying hard
+
+00:13:58.960 --> 00:14:02.639
+but trying in earnest to produce
+
+00:14:02.640 --> 00:14:05.079
+something that you can read in a year in a week whatever
+
+00:14:05.080 --> 00:14:10.439
+and then make sense of it like that's that's that's the minimum bar and the rest
+
+00:14:10.440 --> 00:14:13.799
+If you find yourself writing for hours on end,
+
+00:14:13.800 --> 00:14:15.279
+during the nights, during the weekends,
+
+00:14:15.280 --> 00:14:17.759
+whatever, and can't stop,
+
+00:14:17.760 --> 00:14:21.279
+then you can tackle more of the prescriptions, let's say.
+
+00:14:21.280 --> 00:14:22.319
+But everything I showed to you
+
+00:14:22.320 --> 00:14:24.439
+was there are three essential things,
+
+00:14:24.440 --> 00:14:26.199
+and the rest is just add-ons.
+
+00:14:26.200 --> 00:14:28.519
+Add-ons to inspire you to think in certain ways,
+
+00:14:28.520 --> 00:14:31.279
+but you don't have to do them. You can scratch all of this.
+
+00:14:31.280 --> 00:14:33.679
+You just need to write to think,
+
+00:14:33.680 --> 00:14:35.119
+and then you need to connect
+
+00:14:35.120 --> 00:14:37.799
+to make the thinking happen in an organic way.
+
+00:14:37.800 --> 00:14:40.559
+Otherwise, you get a storage that's very hard to navigate
+
+00:14:40.560 --> 00:14:45.999
+and doesn't grow well. Thanks. Yeah, you're welcome.
+
+00:14:46.000 --> 00:14:51.159
+I'm not writing another show. Yeah. Oh, combine the forums.
+
+00:14:51.160 --> 00:14:54.439
+Like it's a Zettelkasten anonymous group there.
+
+00:14:54.440 --> 00:14:56.239
+Like everyone's struggling.
+
+00:14:56.240 --> 00:14:58.479
+Everyone's struggling and it's okay to like,
+
+00:14:58.480 --> 00:15:01.319
+I'm feeling like stuck at this and that.
+
+00:15:01.320 --> 00:15:03.919
+And then other people will be able to relate.
+
+00:15:03.920 --> 00:15:10.279
+I can promise. How does it denote, question mark maybe,
+
+00:15:10.280 --> 00:15:11.639
+compared to org-roam?
+
+00:15:11.640 --> 00:15:18.559
+Roam research was setting a new trend of connectiveness
+
+00:15:18.560 --> 00:15:21.119
+because you could create recursive structures with links
+
+00:15:21.120 --> 00:15:22.199
+and everything is linkable.
+
+00:15:22.200 --> 00:15:25.439
+And it's like you put every sentence in its own org heading
+
+00:15:25.440 --> 00:15:27.679
+and then link to all the headings possibly
+
+00:15:27.680 --> 00:15:31.039
+and then transpile them so you can expand in place
+
+00:15:31.040 --> 00:15:32.239
+where you would link to.
+
+00:15:32.240 --> 00:15:34.959
+I think this was the approach at least.
+
+00:15:34.960 --> 00:15:38.479
+So this was a very interesting transclusion, not transpile.
+
+00:15:38.480 --> 00:15:41.919
+Transclude the contents, like move them in right then and there
+
+00:15:41.920 --> 00:15:45.839
+and not navigate to another page. It was interesting.
+
+00:15:45.840 --> 00:15:47.439
+It never made sense for me
+
+00:15:47.440 --> 00:15:50.239
+when people told their stories of how they used it.
+
+00:15:50.240 --> 00:15:53.439
+I guess you can use this tool for a lot of purposes,
+
+00:15:53.440 --> 00:15:59.199
+but the prevailing story of the Rome style note-taking tools
+
+00:15:59.200 --> 00:16:01.879
+was like, just dump everything in it.
+
+00:16:01.880 --> 00:16:04.439
+And garbage in, garbage out still holds.
+
+00:16:04.440 --> 00:16:07.559
+I do keep my personal journal away
+
+00:16:07.560 --> 00:16:10.279
+from my Zettelkasten nowadays
+
+00:16:10.280 --> 00:16:12.799
+because I want to not restrict myself
+
+00:16:12.800 --> 00:16:14.399
+when I feel the urge to journal,
+
+00:16:14.400 --> 00:16:18.919
+when I want to capture something that, for example, my 15-month-old baby daughter does.
+
+00:16:18.920 --> 00:16:21.239
+Like, first time she pulled a chair
+
+00:16:21.240 --> 00:16:22.679
+out of another room to the next room
+
+00:16:22.680 --> 00:16:25.479
+just to create a ladder to then climb onto another thing.
+
+00:16:25.480 --> 00:16:27.439
+It just was, okay, this is now the time
+
+00:16:27.440 --> 00:16:30.839
+to take note of this. in her life, like you were this
+
+00:16:30.840 --> 00:16:33.159
+and that many months old when you did this.
+
+00:16:33.160 --> 00:16:35.359
+So we have some reference parts. And I could put this kind
+
+00:16:35.360 --> 00:16:37.399
+of factual information, et cetera, custom,
+
+00:16:37.400 --> 00:16:42.199
+but also, like, what if I have a toothache or whatever,
+
+00:16:42.200 --> 00:16:47.479
+and just want to gather data for whatever reason?
+
+00:16:47.480 --> 00:16:52.119
+I don't know. Like this kind of personal stuff.
+
+00:16:52.120 --> 00:16:55.639
+That's too much of the non-useful stuff
+
+00:16:55.640 --> 00:16:58.199
+in a tool that I want to use to think.
+
+00:16:58.200 --> 00:17:00.479
+I do see the appeal there.
+
+00:17:00.480 --> 00:17:04.039
+But anyway, the org-roam, like that's a roam part.
+
+00:17:04.040 --> 00:17:05.879
+You can watch a lot of videos
+
+00:17:05.880 --> 00:17:07.159
+on that to get a feel for this.
+
+00:17:07.160 --> 00:17:10.559
+Org-roam adopted this to make the connection easier
+
+00:17:10.560 --> 00:17:13.479
+and replicate features. As I said, porting tools
+
+00:17:13.480 --> 00:17:16.399
+that exist into Emacs, very nice pastime.
+
+00:17:16.400 --> 00:17:18.079
+A lot of people do this for a lot of things,
+
+00:17:18.080 --> 00:17:20.359
+but it's not a thinking environment.
+
+00:17:20.360 --> 00:17:22.319
+It's just another tool to take notes in
+
+00:17:22.320 --> 00:17:25.279
+that behave weirdly with links or interestingly with links.
+
+00:17:25.280 --> 00:17:29.159
+And Denote does do even less.
+
+00:17:29.160 --> 00:17:31.199
+It only offers you a couple of shortcuts
+
+00:17:31.200 --> 00:17:33.799
+to help you find files quickly.
+
+00:17:33.800 --> 00:17:37.679
+It does, like you see in the bottom here in the mode line,
+
+00:17:37.680 --> 00:17:40.519
+it does just show square brackets D
+
+00:17:40.520 --> 00:17:44.359
+instead of the whole ID, which would be rather long.
+
+00:17:44.360 --> 00:17:48.399
+So you have a buffer list that is bearable and works.
+
+00:17:48.400 --> 00:17:51.439
+You can read this and find the title quickly.
+
+00:17:51.440 --> 00:17:56.199
+Things like that, Denote does things like that.
+
+00:17:56.200 --> 00:17:58.219
+Oh, I closed the wrong.
+
+00:17:58.200 --> 00:18:00.639
+Denote does things like that very well,
+
+00:18:00.640 --> 00:18:02.559
+but it gets out of your way otherwise.
+
+00:18:02.560 --> 00:18:04.079
+Just a couple of conventions
+
+00:18:04.080 --> 00:18:06.239
+to get stuff into your file system.
+
+00:18:06.240 --> 00:18:08.839
+I'm not sure if Org-Roam now,
+
+00:18:08.840 --> 00:18:11.199
+what's the current state there?
+
+00:18:11.200 --> 00:18:13.399
+Do they do ID generation out of the box?
+
+00:18:13.400 --> 00:18:18.319
+Is there a standard popular convention or whatever?
+
+00:18:18.320 --> 00:18:19.879
+not sure, didn't follow,
+
+00:18:19.880 --> 00:18:21.759
+but I'm very happy that org-roam still exists
+
+00:18:21.760 --> 00:18:25.039
+because I think porting tools into emacs is very cool,
+
+00:18:25.040 --> 00:18:27.559
+I guess next question,
+
+00:18:27.560 --> 00:18:31.839
+I noticed that the wikipedia link you wrote
+
+00:18:31.840 --> 00:18:40.279
+was typed wrongly, oh no garbage in, garbage out,
+
+00:18:40.280 --> 00:18:45.079
+I think garbage in, garbage out, garbage well spotted
+
+00:18:45.080 --> 00:18:47.199
+how do you do that oh I typed it
+
+00:18:47.200 --> 00:18:50.679
+I typed it from yeah right i didn't
+
+00:18:50.680 --> 00:18:53.359
+i didn't paste this right yeah yeah
+
+00:18:53.360 --> 00:18:55.879
+this janitorial tasks that's the umbrella term
+
+00:18:55.880 --> 00:18:56.839
+how do you deal with this
+
+00:18:56.840 --> 00:18:59.560
+like if you put stuff like this into into your notes
+
+00:18:59.560 --> 00:19:05.759
+you hopefully get a 404 code from wikipedia
+
+00:19:05.760 --> 00:19:07.559
+because the page doesn't exist
+
+00:19:07.560 --> 00:19:11.999
+let's not check um you get a 404 and then you could write a tool
+
+00:19:12.000 --> 00:19:13.799
+that checks all the links periodically
+
+00:19:13.800 --> 00:19:17.199
+and tells you about broken links like a broken link checker
+
+00:19:17.200 --> 00:19:19.679
+that then looks up maybe automatically
+
+00:19:19.680 --> 00:19:21.919
+the last good version on archive.org
+
+00:19:21.920 --> 00:19:23.319
+and then the Wayback Machine
+
+00:19:23.320 --> 00:19:26.879
+and then corrects the link with the archived version
+
+00:19:26.880 --> 00:19:30.479
+because the live one is gone like this happens all the time on the internet
+
+00:19:30.480 --> 00:19:31.919
+and even if you don't mistype
+
+00:19:31.920 --> 00:19:35.879
+you could you know things go out of out of order so
+
+00:19:35.880 --> 00:19:42.599
+What do you do with that? You need to automate this.
+
+00:19:42.600 --> 00:19:45.119
+I'm not clicking every link manually.
+
+00:19:45.120 --> 00:19:49.279
+I have like, what's it now, 11,000 notes or something.
+
+00:19:49.280 --> 00:19:51.999
+This is not a thing that humans are good at.
+
+00:19:52.000 --> 00:19:52.919
+I'm not good at this.
+
+00:19:52.920 --> 00:19:55.359
+I will never finish anything else if I do this manually.
+
+00:19:55.360 --> 00:19:57.079
+So write a tool, write a script,
+
+00:19:57.080 --> 00:19:58.719
+get a script from the interwebs.
+
+00:19:58.720 --> 00:20:01.919
+There are tools like this plenty that can do it.
+
+00:20:01.920 --> 00:20:06.319
+And then you just need to do the wiring.
+
+00:20:06.320 --> 00:20:07.599
+and that should help.
+
+00:20:07.600 --> 00:20:09.759
+You could automate this in Emacs, of course, right?
+
+00:20:09.760 --> 00:20:12.479
+For every file in my node directory,
+
+00:20:12.480 --> 00:20:14.359
+look if there's a link inside
+
+00:20:14.360 --> 00:20:16.119
+and then check the URL or whatever.
+
+00:20:16.120 --> 00:20:18.319
+Also works for inter-node connections.
+
+00:20:18.320 --> 00:20:21.239
+This could also break if you rename files or remove files
+
+00:20:21.240 --> 00:20:23.959
+and don't use a denote function,
+
+00:20:23.960 --> 00:20:26.879
+which I believe takes care of backlinks and forward links
+
+00:20:26.880 --> 00:20:28.639
+and keeps them organized.
+
+00:20:28.640 --> 00:20:31.399
+If you do this manually on another device,
+
+00:20:31.400 --> 00:20:38.119
+out of denote, out of Emacs, in Vim, I don't know, then yeah, mistakes happen
+
+00:20:38.120 --> 00:20:39.959
+and you need to deal with mistakes
+
+00:20:39.960 --> 00:20:44.359
+and heal and create scar tissue there in some way
+
+00:20:44.360 --> 00:20:48.279
+so write janitorial tools to do that it's also,
+
+00:20:48.280 --> 00:20:50.679
+i'm mentioning the term janitorial tools
+
+00:20:50.680 --> 00:20:51.679
+a couple of times now
+
+00:20:51.680 --> 00:20:55.439
+because that's the term that we in the forums at least
+
+00:20:55.440 --> 00:20:58.199
+usually talk about things like find orphaned notes,
+
+00:20:58.200 --> 00:21:02.119
+notes that no one links to find broken links,
+
+00:21:02.120 --> 00:21:07.479
+clean up references reformat nodes, stuff like this.
+
+00:21:07.480 --> 00:21:10.039
+Find large nodes and then suggest them
+
+00:21:10.040 --> 00:21:11.799
+to the user to break them up.
+
+00:21:11.800 --> 00:21:14.180
+Like these are tasks that you can do mechanically,
+
+00:21:14.160 --> 00:21:21.719
+but also it's better if you use a tool to get started,
+
+00:21:21.720 --> 00:21:27.519
+otherwise you waste a lot of time.
+
+00:21:27.520 --> 00:21:35.199
+Next question, when I complete, next long question.
+
+00:21:35.200 --> 00:21:39.239
+I'm going to copy this over because maybe
+
+00:21:39.240 --> 00:21:42.399
+When I completely reworked my configs from two years ago,
+
+00:21:42.400 --> 00:21:44.839
+I also tried some of these packages for making nodes,
+
+00:21:44.840 --> 00:21:47.119
+but none of them actually fit my purpose,
+
+00:21:47.120 --> 00:21:51.919
+because I do not like the idea of splitting up my ideas.
+
+00:21:51.920 --> 00:21:53.279
+I'm writing prose.
+
+00:21:53.280 --> 00:21:55.639
+I collect material, reading lists, and so on
+
+00:21:55.640 --> 00:21:57.519
+in just one big file. Everything fits in.
+
+00:21:57.520 --> 00:22:00.879
+In this notebook file, I do archiving from time to time.
+
+00:22:00.880 --> 00:22:02.399
+I search these files in Finder
+
+00:22:02.400 --> 00:22:04.439
+to find old notes I would like to go back to.
+
+00:22:04.440 --> 00:22:06.119
+So if I write a paper,
+
+00:22:06.120 --> 00:22:09.199
+it's basically an extract from my old notes
+
+00:22:09.200 --> 00:22:13.719
+that only have one structure.
+
+00:22:13.720 --> 00:22:17.959
+when I took them time structures my thought and my notes
+
+00:22:17.960 --> 00:22:20.359
+but they would get lost if I split them up in a network
+
+00:22:20.360 --> 00:22:22.799
+like structure like a wiki etc custom my two cents
+
+00:22:22.800 --> 00:22:32.239
+by the way I work on legal sociological topics
+
+00:22:32.240 --> 00:22:37.439
+i'm a lawyer by training you know Luhmann was a german german style
+
+00:22:37.440 --> 00:22:40.999
+weird sociologist
+
+00:22:41.000 --> 00:22:43.999
+and sociology studies are like the first four semesters at university,
+
+00:22:44.000 --> 00:22:48.639
+where a lot of, I don't know any of the terms in English,
+
+00:22:48.640 --> 00:22:50.999
+a lot of these things were theories
+
+00:22:51.000 --> 00:22:52.999
+in the loosest and broadest sense.
+
+00:22:53.000 --> 00:22:55.439
+Some were just models of how things might behave,
+
+00:22:55.440 --> 00:22:57.999
+but nobody knew because they were not empirically backed.
+
+00:22:58.000 --> 00:23:00.119
+Some were empirically backed,
+
+00:23:00.120 --> 00:23:01.959
+and then also there was some sense making.
+
+00:23:01.960 --> 00:23:03.599
+And then also in sociology,
+
+00:23:03.600 --> 00:23:08.999
+you have some structure analysis of,
+
+00:23:09.000 --> 00:23:11.239
+like demographics and things like that.
+
+00:23:11.240 --> 00:23:15.559
+So very, very hard fact and statistics heavy things.
+
+00:23:15.560 --> 00:23:20.639
+So broad topic. And there's a lot of interconnections.
+
+00:23:20.640 --> 00:23:22.599
+I can see the approach here.
+
+00:23:22.600 --> 00:23:25.359
+I'm not going to defend Zettelkasten
+
+00:23:25.360 --> 00:23:30.519
+so that you in the end become a Zettelkasten aficionado
+
+00:23:30.520 --> 00:23:33.639
+or whatever I mean, if it works, fine, more power to you like
+
+00:23:33.640 --> 00:23:37.919
+reminds me of Twyla Tharp's like the shoebox approach
+
+00:23:37.920 --> 00:23:39.159
+or whatever it was called
+
+00:23:39.160 --> 00:23:41.959
+where she just dumped everything inside
+
+00:23:41.960 --> 00:23:44.759
+for her next project like an idea box,
+
+00:23:44.760 --> 00:23:47.279
+like real physical things like oh, I want to, I don't know,
+
+00:23:47.280 --> 00:23:50.079
+like this weird 8-bit do controller inside
+
+00:23:50.080 --> 00:23:54.639
+and then eventually she would spread out everything she collected,
+
+00:23:54.640 --> 00:23:59.599
+newspaper clippings and I don't know, maybe toenails or some weird stuff,
+
+00:23:59.600 --> 00:24:01.879
+I don't know what she actually put there
+
+00:24:01.880 --> 00:24:03.359
+and then make sense of this
+
+00:24:03.360 --> 00:24:08.319
+and think of something of putting these sorted pieces into context
+
+00:24:08.320 --> 00:24:12.759
+and if you just dump stuff into a notebook file
+
+00:24:12.760 --> 00:24:20.199
+and then rework the stuff, yeah, fine
+
+00:24:20.200 --> 00:24:22.639
+One answer is Zettelkasten is great for mathematics.
+
+00:24:22.640 --> 00:24:25.239
+Or maybe you can have... Oh, next question.
+
+00:24:25.240 --> 00:24:31.439
+Sorry, I jumped. So my answer is, this was not a question,
+
+00:24:31.440 --> 00:24:34.799
+and I'm happy for you. So that's still an answer.
+
+00:24:34.800 --> 00:24:38.639
+Next question. How Zettelkasten is useful
+
+00:24:38.640 --> 00:24:42.519
+for highly mathematical STEM academic fields
+
+00:24:42.520 --> 00:24:44.839
+like computer science or engineering fields,
+
+00:24:44.840 --> 00:24:48.879
+like when studying a STEM field?
+
+00:24:48.880 --> 00:24:52.999
+I need to unpack the acronym again maybe for the audience.
+
+00:24:53.000 --> 00:24:58.199
+M is mathematics. Engineering is E.
+
+00:24:58.200 --> 00:25:02.519
+Science and tech, tech, techno,
+
+00:25:02.520 --> 00:25:05.599
+I don't know, maybe technical. I could look this up, right?
+
+00:25:05.600 --> 00:25:09.839
+STEM, what was STEM again? I'm doing a bad job.
+
+00:25:09.840 --> 00:25:12.079
+Science, technology, engineering, mathematics.
+
+00:25:12.080 --> 00:25:16.479
+Okay, so probably technology is the computer stuff.
+
+00:25:16.480 --> 00:25:17.159
+Yeah, STEM.
+
+00:25:17.160 --> 00:25:19.399
+Dear audience, that's science, technology,
+
+00:25:19.400 --> 00:25:22.999
+engineering, mathematics, academic fields.
+
+00:25:23.000 --> 00:25:24.799
+What should we make notes of?
+
+00:25:24.800 --> 00:25:27.199
+The important bits are interconnected in a hierarchy,
+
+00:25:27.200 --> 00:25:28.199
+usually chapters of a book.
+
+00:25:28.200 --> 00:25:31.639
+Yes, someone did the job of making the order
+
+00:25:31.640 --> 00:25:33.559
+out of the chaotic findings
+
+00:25:33.560 --> 00:25:35.919
+that people did over hundreds of years for you.
+
+00:25:35.920 --> 00:25:39.479
+That's an order. But there are also many textbooks.
+
+00:25:39.480 --> 00:25:42.759
+So opinions may vary. The presentation may vary.
+
+00:25:42.760 --> 00:25:48.279
+Some textbooks may click with you,
+
+00:25:48.280 --> 00:25:59.359
+while others stay opaque, and you can't get into the meat.
+
+00:25:59.360 --> 00:26:04.599
+Sorry, I'm just typing the answer right now.
+
+00:26:04.600 --> 00:26:13.319
+Copying information to another box is not, yeah.
+
+00:26:13.320 --> 00:26:17.719
+Yeah, let's see what the first answer is.
+
+00:26:17.720 --> 00:26:21.559
+Someone posted that Zettelkasten is great for mathematics,
+
+00:26:21.560 --> 00:26:22.919
+incredible for computer science.
+
+00:26:22.920 --> 00:26:25.439
+With OrgBabel you can have living source code, yes,
+
+00:26:25.440 --> 00:26:26.719
+that you can execute from the node,
+
+00:26:26.720 --> 00:26:28.479
+also true for a formula,
+
+00:26:28.480 --> 00:26:35.239
+and LaTeX in interspersing of images and SVGs.
+
+00:26:35.240 --> 00:26:37.119
+You can even use Agda if you want to.
+
+00:26:37.120 --> 00:26:39.279
+Ah, I think I know who typed the answer.
+
+00:26:39.280 --> 00:26:42.999
+Hello, Oliver. If you want to have living proofs in your nodes,
+
+00:26:43.000 --> 00:26:47.719
+even inline LaTeX is in here. That's, yeah, yeah, yeah.
+
+00:26:47.720 --> 00:26:58.959
+quote the sentence as is and add, yeah, add something,
+
+00:26:58.960 --> 00:27:01.319
+maybe your own summary.
+
+00:27:01.320 --> 00:27:02.959
+I would suggest add your own summary
+
+00:27:02.960 --> 00:27:11.299
+because we're looking at the etherpad, right?
+
+00:27:11.300 --> 00:27:14.639
+Maybe I just copy this over so you can all the either
+
+00:27:14.640 --> 00:27:30.879
+pets indentation is missing with what Org is doing.
+
+00:27:30.880 --> 00:27:36.999
+And the answer was probably submitted by Oliver
+
+00:27:37.000 --> 00:27:40.479
+just in case someone wants to see
+
+00:27:40.480 --> 00:27:47.679
+who that could have been with the Acta reference
+
+00:27:47.680 --> 00:27:49.799
+because nobody uses Acta,
+
+00:27:49.800 --> 00:27:55.999
+nobody in the world maybe so Acta is just a yeah
+
+00:27:56.000 --> 00:28:01.319
+let's say it's good for proofing the code that you type
+
+00:28:01.320 --> 00:28:04.399
+as you type it in the compilation set very weird
+
+00:28:04.400 --> 00:28:07.199
+if you've never heard of this so check that out
+
+00:28:07.200 --> 00:28:13.839
+so question was how Zettelkasten is useful for these kinds of things
+
+00:28:13.840 --> 00:28:16.119
+yeah it sounds like in these kinds of fields
+
+00:28:16.120 --> 00:28:18.359
+that you only deal with facts
+
+00:28:18.360 --> 00:28:24.719
+that's also kind of sort of true for psychology where you have a lot of
+
+00:28:24.720 --> 00:28:29.639
+and also law where you at least in at least in German
+
+00:28:29.640 --> 00:28:33.759
+and our style of law where you have a lot of where you have thick books of law
+
+00:28:33.760 --> 00:28:38.599
+and very very little records,
+
+00:28:38.600 --> 00:28:41.479
+that's not the right phrasing,
+
+00:28:41.480 --> 00:28:48.239
+where you don't rely on the ruling as much as you do in, for example, the USA,
+
+00:28:48.240 --> 00:28:53.919
+where you need to be aware of every court ruling to then put stuff into context
+
+00:28:53.920 --> 00:28:58.999
+and all of this is like the current how you do law.
+
+00:28:59.000 --> 00:29:01.039
+I don't know.
+
+00:29:01.040 --> 00:29:04.039
+I'm not a lawyer and also not good at this in English.
+
+00:29:04.040 --> 00:29:04.839
+So, sorry.
+
+00:29:04.840 --> 00:29:08.159
+If I don't find the cool words and technical terms,
+
+00:29:08.160 --> 00:29:11.079
+you probably all know.
+
+00:29:11.080 --> 00:29:12.639
+What do you do with these kinds of things?
+
+00:29:12.640 --> 00:29:14.719
+You need to collect a lot of stuff.
+
+00:29:14.720 --> 00:29:17.559
+Like the previous questionnaire mentioned,
+
+00:29:17.560 --> 00:29:19.719
+hey, I'm just copying stuff over
+
+00:29:19.720 --> 00:29:22.119
+and then I have a good time and can write about this
+
+00:29:22.120 --> 00:29:24.119
+and create prose in the end.
+
+00:29:24.120 --> 00:29:26.519
+Like with mathematics, you can't.
+
+00:29:26.520 --> 00:29:36.719
+You can't do a lot when you're still working on the foundations.
+
+00:29:36.720 --> 00:29:38.599
+Like, what do you want to do there?
+
+00:29:38.600 --> 00:29:41.959
+You don't innovate there. You just need to learn the stuff.
+
+00:29:41.960 --> 00:29:45.799
+Typing things out and creating your own organization
+
+00:29:45.800 --> 00:29:49.519
+of how things are connected there,
+
+00:29:49.520 --> 00:29:52.079
+that's where the depth of processing increases,
+
+00:29:52.080 --> 00:29:53.839
+like the actual depth of processing
+
+00:29:53.840 --> 00:29:57.759
+so that it takes more effort
+
+00:29:57.760 --> 00:30:01.399
+and affects more parts of your brain, basically,
+
+00:30:01.400 --> 00:30:03.919
+which then helps with remembering stuff.
+
+00:30:03.920 --> 00:30:12.759
+I'm trying not to go into a 10 minute tangent here, but
+
+00:30:12.760 --> 00:30:18.439
+If you've ever tried to memorize stuff with flashcards
+
+00:30:18.440 --> 00:30:20.879
+and you put a, I don't know, coffee stain
+
+00:30:20.880 --> 00:30:24.559
+or a weird scribble or spilled something on one of these cards,
+
+00:30:24.560 --> 00:30:26.639
+actual physical cards there,
+
+00:30:26.640 --> 00:30:29.119
+this card now has another piece of information
+
+00:30:29.120 --> 00:30:32.519
+that is actually important
+
+00:30:32.520 --> 00:30:36.119
+because it makes the card stand out
+
+00:30:36.120 --> 00:30:41.279
+more and more worthy of being remembered
+
+00:30:41.280 --> 00:30:42.639
+because now one of these cards
+
+00:30:42.640 --> 00:30:44.679
+has this coffee circle thingy
+
+00:30:44.680 --> 00:30:46.959
+and all the others don't so this one stands out
+
+00:30:46.960 --> 00:30:49.079
+and this may actually improve
+
+00:30:49.080 --> 00:30:51.519
+how you learn this particular fact
+
+00:30:51.520 --> 00:30:57.839
+that you want to remember or memorize
+
+00:30:57.840 --> 00:31:00.839
+Similar, like what kind of principle
+
+00:31:00.840 --> 00:31:04.439
+do people postulate is at play here?
+
+00:31:04.440 --> 00:31:06.399
+Again, last time I went into
+
+00:31:06.400 --> 00:31:08.079
+this kind of stuff was at university,
+
+00:31:08.080 --> 00:31:11.719
+so I'm not sure if there's something new
+
+00:31:11.720 --> 00:31:15.319
+in the field of flashcard learning.
+
+00:31:15.320 --> 00:31:18.919
+I'm not aware of anything, let's say.
+
+00:31:18.920 --> 00:31:23.279
+And the idea back then that we spread
+
+00:31:23.280 --> 00:31:25.360
+and that was taught to us was like this.
+
+00:31:27.540 --> 00:31:32.599
+That more information and more context and more stimuli
+
+00:31:32.600 --> 00:31:34.759
+and making things more interesting,
+
+00:31:34.760 --> 00:31:39.340
+that's what makes it memorable.
+
+00:31:39.341 --> 00:31:43.799
+if you go for a walk and then associate things with places.
+
+00:31:43.800 --> 00:31:47.359
+Going for a walk is a different activity
+
+00:31:47.360 --> 00:31:48.839
+than imagining going for a walk.
+
+00:31:48.840 --> 00:31:52.079
+It's also different from not doing anything
+
+00:31:52.080 --> 00:31:54.399
+and just sitting in your chair
+
+00:31:54.400 --> 00:31:56.519
+and relaxing because you're not engaged.
+
+00:31:56.520 --> 00:31:58.919
+You're losing, like you're using
+
+00:31:58.920 --> 00:32:01.959
+a bit of your brain matter to do the work
+
+00:32:01.960 --> 00:32:04.399
+while the rest of your body is stagnant.
+
+00:32:04.400 --> 00:32:07.759
+You don't smell anything different.
+
+00:32:07.760 --> 00:32:09.239
+You don't hear, see, feel on your skin,
+
+00:32:09.240 --> 00:32:11.399
+everything's constant,
+
+00:32:11.400 --> 00:32:15.239
+like you're in a, what are these called?
+
+00:32:15.240 --> 00:32:18.639
+These chambers where you're locked
+
+00:32:18.640 --> 00:32:21.479
+into very salty water, I think.
+
+00:32:21.480 --> 00:32:24.639
+Floating chambers, so sensual deprivation chambers.
+
+00:32:24.640 --> 00:32:29.519
+You're depriving yourself of a lot of sensual input
+
+00:32:29.520 --> 00:32:31.519
+if you just try to really focus
+
+00:32:31.520 --> 00:32:33.479
+into everything with your head.
+
+00:32:33.480 --> 00:32:34.999
+If you engage more of your body,
+
+00:32:35.000 --> 00:32:36.007
+if you engage more of your senses,
+
+00:32:36.008 --> 00:32:37.674
+then you have an easier time there.
+
+00:32:37.675 --> 00:32:40.590
+What does it have to do with this answer?
+
+00:32:40.560 --> 00:32:46.799
+My answer would be the value is in rephrasing,
+
+00:32:46.800 --> 00:32:51.799
+in making your own connections eventually.
+
+00:32:51.800 --> 00:32:56.439
+I don't know, the foundational laws of geometry,
+
+00:32:56.440 --> 00:32:58.119
+there's no room for innovation,
+
+00:32:58.120 --> 00:33:00.159
+but there's maybe a room for association.
+
+00:33:00.160 --> 00:33:03.759
+Like, hey, I remember this, like, if you can't figure out
+
+00:33:03.760 --> 00:33:09.759
+what the name of a certain axiom, lemma, whatever it is, and it has a name,
+
+00:33:09.760 --> 00:33:12.679
+adding your own story to the note doesn't hurt.
+
+00:33:12.680 --> 00:33:14.839
+If you say, hey, this is what my grandfather
+
+00:33:14.840 --> 00:33:18.719
+taught me with wire and sticks when we tried to measure
+
+00:33:18.720 --> 00:33:22.839
+whatever in the sand on a vacation one day.
+
+00:33:22.840 --> 00:33:26.199
+And these kinds of things make it more memorable.
+
+00:33:26.200 --> 00:33:31.039
+And that's at least something that you could need to then,
+
+00:33:31.040 --> 00:33:33.999
+which is the ultimate purpose of STEM at university,
+
+00:33:34.000 --> 00:33:39.559
+then you can pass the tests. Like that's it.
+
+00:33:39.560 --> 00:33:42.999
+You either, and eventually you embody the knowledge, right?
+
+00:33:43.000 --> 00:33:44.679
+If you do this stuff over and over again,
+
+00:33:44.680 --> 00:33:45.839
+then you don't need to look up
+
+00:33:45.840 --> 00:33:47.599
+how to do a certain kind of proof.
+
+00:33:47.600 --> 00:33:50.759
+And you just do the proof when you need to do the proof.
+
+00:33:50.760 --> 00:33:53.919
+But maybe you forget all the kinds of weird proofs
+
+00:33:53.920 --> 00:33:55.079
+that you encountered in your life
+
+00:33:55.080 --> 00:33:57.159
+because you only remember the 10 most weird ones,
+
+00:33:57.160 --> 00:33:58.519
+but you had 15 in your life.
+
+00:33:58.520 --> 00:34:00.399
+And what's about the, what do you do
+
+00:34:00.400 --> 00:34:02.800
+with the five missing ones? They just fade away.
+
+00:34:02.800 --> 00:34:05.279
+But if you capture them in some way or another,
+
+00:34:05.280 --> 00:34:08.559
+as superficial as it may be,
+
+00:34:08.560 --> 00:34:10.479
+and you still have access to this later
+
+00:34:10.480 --> 00:34:21.799
+when you need to check your personal inventory
+
+00:34:21.800 --> 00:34:30.519
+of mathematical proofs so my answer would be
+
+00:34:30.520 --> 00:34:33.119
+let's type in my answer
+
+00:34:33.120 --> 00:34:46.199
+on either pad would be I'm not able to type.
+
+00:34:46.200 --> 00:34:52.599
+Sorry. My answer would be this.
+
+00:34:52.600 --> 00:35:05.239
+Foundational knowledge is important for tests mostly
+
+00:35:05.240 --> 00:35:13.300
+and eventually becomes your inventory of skills.
+
+00:35:23.200 --> 00:35:25.879
+Synth programming, like I don't need to look up for loops,
+
+00:35:25.880 --> 00:35:29.519
+I just do for loops and that's it, right?
+
+00:35:29.520 --> 00:35:32.999
+But still, I do have notes about for loops, I think,
+
+00:35:33.000 --> 00:35:34.839
+in different languages, like Python,
+
+00:35:34.840 --> 00:35:37.679
+the, what is it called, list comprehension.
+
+00:35:37.680 --> 00:35:39.919
+I'm not using Python, but it's so quirky.
+
+00:35:39.920 --> 00:35:42.879
+It's quirky and I captured this on a note
+
+00:35:42.880 --> 00:35:45.879
+because I needed to get myself used to the pieces
+
+00:35:45.880 --> 00:35:48.159
+and I needed to look at the syntax anyway,
+
+00:35:48.160 --> 00:35:50.719
+and then this is that part and this goes there.
+
+00:35:50.720 --> 00:35:55.799
+And I did this work, like this separation stuff on a note
+
+00:35:55.800 --> 00:36:01.159
+to then do the work with more engagement,
+
+00:36:01.160 --> 00:36:04.599
+like engage more so I can remember more later.
+
+00:36:04.600 --> 00:36:06.079
+I don't remember all the details,
+
+00:36:06.080 --> 00:36:08.079
+but I do remember there were different parts,
+
+00:36:08.080 --> 00:36:09.519
+and then I can look up the note.
+
+00:36:09.520 --> 00:36:12.799
+And it helps me refresh my memory rather quickly,
+
+00:36:12.800 --> 00:36:15.399
+because it's written by me for me
+
+00:36:15.400 --> 00:36:17.199
+in a way that I'm writing these notes
+
+00:36:17.200 --> 00:36:18.599
+for 15 years or something.
+
+00:36:18.600 --> 00:36:27.119
+16, at least, 16 years or something.
+
+00:36:27.120 --> 00:36:30.439
+So it's much better than looking, especially now,
+
+00:36:30.440 --> 00:36:31.759
+it's much better than going to the web
+
+00:36:31.760 --> 00:36:33.399
+and doing a web search for the same topic,
+
+00:36:33.400 --> 00:36:37.199
+because I will probably not get the useful resource
+
+00:36:37.200 --> 00:36:40.199
+that I relied on some eight years ago anyway,
+
+00:36:40.200 --> 00:36:41.599
+but some garbage instead,
+
+00:36:41.600 --> 00:36:44.919
+maybe AI generated stuff, I don't know.
+
+00:36:44.920 --> 00:36:48.319
+So I have my personal copy of this
+
+00:36:48.320 --> 00:36:50.639
+and it's not just copying the thing into a box,
+
+00:36:50.640 --> 00:36:51.759
+like from one box into another,
+
+00:36:51.760 --> 00:36:53.879
+from the public internet box into my own buffer,
+
+00:36:53.880 --> 00:36:56.399
+that's a custom that's closer to me,
+
+00:36:56.400 --> 00:36:58.559
+like a fridge is closer to my kitchen
+
+00:36:58.560 --> 00:37:01.359
+and where I want to eat when I'm hungry
+
+00:37:01.360 --> 00:37:02.399
+than going to the supermarket
+
+00:37:02.400 --> 00:37:04.279
+or out into the wild and hunt animals,
+
+00:37:04.280 --> 00:37:06.199
+like this is all about proximity
+
+00:37:06.200 --> 00:37:10.759
+and also brought about ownership, like I own these notes
+
+00:37:10.760 --> 00:37:13.199
+and I still take responsibility
+
+00:37:13.200 --> 00:37:14.599
+for what I put on them to some degree
+
+00:37:14.600 --> 00:37:15.959
+like sometimes they're really bad
+
+00:37:15.960 --> 00:37:17.319
+and I want to distance myself,
+
+00:37:17.320 --> 00:37:23.919
+but still yeah, so that's it, I'm just I'm leaving,
+
+00:37:23.920 --> 00:37:29.639
+I'm not typing this out, I'm leaving copy box fridge,
+
+00:37:29.640 --> 00:37:32.119
+there was a term for this, wait a second,
+
+00:37:32.120 --> 00:37:38.839
+setup custom fridge can be fridge-like buffer of knowledge
+
+00:37:38.840 --> 00:37:48.079
+I'm just, let me just try to copy this note verbatim into the etherpad
+
+00:37:48.080 --> 00:37:51.879
+and then see whether you folks can do something with it.
+
+00:37:51.880 --> 00:38:00.959
+The formatting. See appendix A. I am doing this here.
+
+00:38:00.960 --> 00:38:10.319
+Appendix A. I'm not going to read this,
+
+00:38:10.320 --> 00:38:13.679
+but then you have a FridgeLab buffer of knowledge.
+
+00:38:13.680 --> 00:38:16.839
+Local link in the supply chain. That was the term.
+
+00:38:16.840 --> 00:38:18.199
+Didn't remember that one.
+
+00:38:18.200 --> 00:38:28.119
+It's at least a local link in supply chain.
+
+00:38:28.120 --> 00:38:36.079
+Also, engagement doing the work of not copying,
+
+00:38:36.080 --> 00:38:38.439
+but rephrasing, organizing,
+
+00:38:38.440 --> 00:38:46.399
+but sometimes also just typing the stuff in
+
+00:38:46.400 --> 00:38:51.759
+that's how people romanticize learning a basic
+
+00:38:51.760 --> 00:38:54.999
+like there were magazines with a lot of code listings
+
+00:38:55.000 --> 00:38:58.839
+and they just typed the code it was quite some effort
+
+00:38:58.840 --> 00:39:00.879
+you eventually got better at this
+
+00:39:00.880 --> 00:39:03.799
+but you did do mistakes and then you needed to correct
+
+00:39:03.800 --> 00:39:06.799
+and look through the source code carefully to spot the typo
+
+00:39:06.800 --> 00:39:11.839
+That's apparently virtue, at least people claim it's a virtue.
+
+00:39:11.840 --> 00:39:15.759
+I don't deny it's a virtue because I went through the same kind of crap
+
+00:39:15.760 --> 00:39:20.919
+and I believe it strengthened my character, for sure, but still.
+
+00:39:20.920 --> 00:39:26.639
+Maybe it's not that useful, but maybe it is. I don't know.
+
+00:39:26.640 --> 00:39:27.759
+There's studies I remember,
+
+00:39:27.760 --> 00:39:30.519
+but I don't remember any interesting results.
+
+00:39:30.520 --> 00:39:32.839
+It's not like it's a 10x improvement
+
+00:39:32.840 --> 00:39:36.959
+of recall if you type this, but it may be significant.
+
+00:39:36.960 --> 00:39:39.319
+Just check it out for yourself. I'm not sure.
+
+00:39:39.320 --> 00:39:40.959
+Next question, sorry.
+
+00:39:40.960 --> 00:39:45.639
+In your experience, would you say that you reuse most of your nodes?
+
+00:39:45.640 --> 00:39:47.959
+Watching your demo, I thought that more nodes you create,
+
+00:39:47.960 --> 00:39:51.279
+the less you might reuse them. Yes, that's true.
+
+00:39:51.280 --> 00:39:54.879
+I have 11,000 nodes or something,
+
+00:39:54.880 --> 00:39:57.239
+and I don't use 11,000 nodes every day.
+
+00:39:57.240 --> 00:39:59.879
+I can only use a fraction of them.
+
+00:39:59.880 --> 00:40:06.439
+But let's say you have the Feynman Darling nodes,
+
+00:40:06.440 --> 00:40:08.479
+then you would probably use these.
+
+00:40:08.480 --> 00:40:11.479
+Imagine you have the same 12 Darlings for a year.
+
+00:40:11.480 --> 00:40:15.559
+Then you use these 12 thingies for one year more often.
+
+00:40:15.560 --> 00:40:17.919
+than most of your other nodes,
+
+00:40:17.920 --> 00:40:19.999
+because these become your entry points
+
+00:40:20.000 --> 00:40:21.999
+into what's in my Zettelkasten today.
+
+00:40:22.000 --> 00:40:23.559
+These become your entry points
+
+00:40:23.560 --> 00:40:24.999
+of what do I want to work on today?
+
+00:40:25.000 --> 00:40:27.719
+These become your, where can I put
+
+00:40:27.720 --> 00:40:29.199
+the weird stuff that I just found?
+
+00:40:29.200 --> 00:40:31.119
+Does it stick to any of these surfaces?
+
+00:40:31.120 --> 00:40:33.719
+Entry point into the process.
+
+00:40:33.720 --> 00:40:41.839
+But let's say, five years later,
+
+00:40:41.840 --> 00:40:45.399
+maybe these 12 Feynman darlings were your darlings
+
+00:40:45.400 --> 00:40:47.719
+during university studies for STEM field,
+
+00:40:47.720 --> 00:40:49.479
+where you had a hard time figuring out
+
+00:40:49.480 --> 00:40:52.479
+how the technical system works for your benefit.
+
+00:40:52.480 --> 00:40:56.279
+And then five years later, you're in a job and you don't need all of them
+
+00:40:56.280 --> 00:41:00.799
+because your subject matters from university, they're gone.
+
+00:41:00.800 --> 00:41:03.119
+you're not at a day job and you have different darlings
+
+00:41:03.120 --> 00:41:04.319
+whatever your day job is
+
+00:41:04.320 --> 00:41:09.399
+maybe you're a mathematician at an insurance company
+
+00:41:09.400 --> 00:41:14.319
+so you will probably have insurance related domain darlings pouring in
+
+00:41:14.320 --> 00:41:18.119
+and some academic darlings falling off the bandwagon
+
+00:41:18.120 --> 00:41:21.119
+because no time for these maybe other hobbies come in
+
+00:41:21.120 --> 00:41:25.919
+like i didn't have anything related to child Rearing,
+
+00:41:25.920 --> 00:41:28.999
+bearing is when you produce them
+
+00:41:29.000 --> 00:41:30.199
+and put them into the wild, right?
+
+00:41:30.200 --> 00:41:34.639
+Rearing is when you let them grow up, I don't know
+
+00:41:34.640 --> 00:41:36.959
+Like when you have children and make them not die
+
+00:41:36.960 --> 00:41:42.039
+and get larger and do stuff, right?
+
+00:41:42.040 --> 00:41:44.079
+I did have a couple of things in advance, but
+
+00:41:44.080 --> 00:41:47.919
+That was not a daily concern. Now it is.
+
+00:41:47.920 --> 00:41:50.999
+Now I'm a father and that's a new concern in my life.
+
+00:41:51.000 --> 00:41:54.599
+Getting things done also tackled this, right?
+
+00:41:54.600 --> 00:41:56.239
+If you remember getting things done, everyone,
+
+00:41:56.240 --> 00:41:58.559
+you had areas of responsibility.
+
+00:41:58.560 --> 00:42:00.999
+It's a new area of responsibility and you could represent,
+
+00:42:01.000 --> 00:42:06.599
+sorry, you could represent these in your Zettelkasten,
+
+00:42:06.600 --> 00:42:10.239
+if you find that you can spell out your areas of responsibility
+
+00:42:10.240 --> 00:42:12.799
+well, then you can see, well, I've learned something new,
+
+00:42:12.800 --> 00:42:14.719
+can I become a better person
+
+00:42:14.720 --> 00:42:16.879
+in one of my core areas of responsibility?
+
+00:42:16.880 --> 00:42:18.679
+Yes or no? Why not?
+
+00:42:18.680 --> 00:42:21.279
+Then you will use these more than the other notes.
+
+00:42:21.280 --> 00:42:25.159
+Like the weird thing you found last month.
+
+00:42:25.160 --> 00:42:29.079
+Last month, you will probably not reference that weird thing every day.
+
+00:42:29.080 --> 00:42:32.359
+Natural process. But it's there.
+
+00:42:32.360 --> 00:42:34.799
+And eventually you get back to something,
+
+00:42:34.800 --> 00:42:38.999
+and then you serve access to this like that's the that
+
+00:42:39.000 --> 00:42:43.599
+and whatever this changes like going through these processes
+
+00:42:43.600 --> 00:42:51.399
+change you if I if I spend a month getting nerd sniped on
+
+00:42:51.400 --> 00:42:56.679
+I don't know chocolate manufacturing or something
+
+00:42:56.680 --> 00:43:00.759
+then I don't need this ever these things ever again most likely
+
+00:43:00.760 --> 00:43:02.999
+but going through the procedure of
+
+00:43:03.000 --> 00:43:06.199
+becoming the master chocolate manufacturer of my town,
+
+00:43:06.200 --> 00:43:10.159
+at least in theory, will do something with me
+
+00:43:10.160 --> 00:43:12.719
+when I encounter the next topic.
+
+00:43:12.720 --> 00:43:14.959
+I will think of chocolate manufacturing.
+
+00:43:14.960 --> 00:43:17.359
+I wouldn't have thought of chocolate manufacturing before.
+
+00:43:17.360 --> 00:43:18.919
+In fact, I didn't think about chocolate
+
+00:43:18.920 --> 00:43:21.719
+manufacturing yesterday. I just made this up on the spot.
+
+00:43:21.720 --> 00:43:23.679
+What does this say about me today?
+
+00:43:23.680 --> 00:43:26.159
+Maybe because we were out of chocolate,
+
+00:43:26.160 --> 00:43:30.279
+maybe because I don't know,
+
+00:43:30.280 --> 00:43:33.159
+maybe there's nothing that looks like chocolate here
+
+00:43:33.160 --> 00:43:36.359
+I don't know so it just came up and now it's there
+
+00:43:36.360 --> 00:43:39.159
+and things have changed for the better,
+
+00:43:39.160 --> 00:43:41.359
+for the worse, I don't know but they've changed
+
+00:43:41.360 --> 00:43:43.719
+and that's the real takeaway there
+
+00:43:43.720 --> 00:43:44.959
+where do you put the effort?
+
+00:43:44.960 --> 00:43:48.759
+where do you want to put the effort? and will it pay off?
+
+00:43:48.760 --> 00:43:54.479
+maybe if not, then maybe spend the time on something else
+
+00:43:54.480 --> 00:43:57.119
+like don't try to exactly customize something you hate
+
+00:43:57.120 --> 00:43:59.519
+just to I don't know,
+
+00:43:59.520 --> 00:44:04.479
+do your due diligence if you don't want to
+
+00:44:04.480 --> 00:44:06.719
+because then you'll hate the process
+
+00:44:06.720 --> 00:44:15.279
+that's worse than not using nodes a lot next questions,
+
+00:44:15.280 --> 00:44:17.719
+how are nodes structured and accessed
+
+00:44:17.720 --> 00:44:20.639
+when the nodes grow from 10k to 100k nodes?
+
+00:44:20.640 --> 00:44:22.119
+yes, that's a field of exploration,
+
+00:44:22.120 --> 00:44:25.919
+I mean that the lower realm there I don't know anybody
+
+00:44:25.920 --> 00:44:32.359
+who's using a hyperlinked 100k node archive.
+
+00:44:32.360 --> 00:44:37.239
+I do know people who have a lot of text files
+
+00:44:37.240 --> 00:44:38.919
+like the Evernote style
+
+00:44:38.920 --> 00:44:42.799
+they capture everything and put the verbatim copy into their stuff
+
+00:44:42.800 --> 00:44:47.519
+and then they have a lot more items of course
+
+00:44:47.520 --> 00:44:51.359
+but these don't really count,
+
+00:44:51.360 --> 00:44:54.599
+these are like web clippings of websites themselves
+
+00:44:54.600 --> 00:44:58.119
+I've read how many hundreds of websites today
+
+00:44:58.120 --> 00:45:02.919
+I could have captured everything automatically,
+
+00:45:02.920 --> 00:45:07.119
+but they wouldn't, like the files there, the clippings,
+
+00:45:07.120 --> 00:45:10.559
+they wouldn't have contributed
+
+00:45:10.560 --> 00:45:12.439
+anything meaningfully to my knowledge base,
+
+00:45:12.440 --> 00:45:14.479
+because I'm not thinking about the stuff,
+
+00:45:14.480 --> 00:45:16.399
+I'm thinking about the stuff that I'm spending time on.
+
+00:45:16.400 --> 00:45:18.839
+What about that?
+
+00:45:18.840 --> 00:45:20.639
+Yeah, how are nodes structured and accessed
+
+00:45:20.640 --> 00:45:22.919
+when the nodes go from one to 100k?
+
+00:45:22.920 --> 00:45:31.399
+I will imagine that it becomes a matter that's speculation.
+
+00:45:31.400 --> 00:45:34.759
+We'll see. My speculation is this.
+
+00:45:34.760 --> 00:45:40.639
+it's going to be self-similar, like Mandelbrot images,
+
+00:45:40.640 --> 00:45:43.199
+where you have recursive patterns.
+
+00:45:43.200 --> 00:45:46.519
+First, you have a couple of nodes.
+
+00:45:46.520 --> 00:45:49.759
+You can leave through them digitally or physically easily.
+
+00:45:49.760 --> 00:45:52.559
+And then eventually, you need to rely on structures
+
+00:45:52.560 --> 00:45:54.079
+or some kinds of entry points,
+
+00:45:54.080 --> 00:45:55.679
+which we usually call structures,
+
+00:45:55.680 --> 00:46:03.359
+thanks to Sascha. Perfect. Thank you.
+
+00:46:03.360 --> 00:46:04.799
+And the clue there is,
+
+00:46:04.800 --> 00:46:10.159
+Eventually, you have hundreds or maybe thousands,
+
+00:46:10.160 --> 00:46:12.359
+not hundreds or thousands, of structure nodes.
+
+00:46:12.360 --> 00:46:13.959
+And then you have the same problem
+
+00:46:13.960 --> 00:46:16.039
+that you had on the lower base layer.
+
+00:46:16.040 --> 00:46:19.199
+And now you will probably look for another tool.
+
+00:46:19.200 --> 00:46:22.759
+But there is nothing else that's not also a structure node
+
+00:46:22.760 --> 00:46:25.799
+but is structuring other structures mostly
+
+00:46:25.800 --> 00:46:28.119
+instead of structuring the low-level nodes.
+
+00:46:28.120 --> 00:46:31.719
+But this distinction, I want to point out, doesn't pay off.
+
+00:46:31.720 --> 00:46:34.879
+it seems like it doesn't pay off
+
+00:46:34.880 --> 00:46:37.319
+to say hey i have these foundational permanent nodes
+
+00:46:37.320 --> 00:46:38.759
+and then i have these meta nodes
+
+00:46:38.760 --> 00:46:40.519
+these these maps and structures
+
+00:46:40.520 --> 00:46:42.759
+and then i have these super mega structures
+
+00:46:42.760 --> 00:46:44.159
+which are not permanent
+
+00:46:44.160 --> 00:46:45.519
+which are not structures which are not
+
+00:46:45.520 --> 00:46:47.919
+I don't know this doesn't seem to pay off
+
+00:46:47.920 --> 00:46:51.079
+because eventually there is another level and another level
+
+00:46:51.080 --> 00:46:53.519
+and also sometimes you want to talk
+
+00:46:53.520 --> 00:46:56.159
+about a structure as a data point
+
+00:46:56.160 --> 00:46:58.079
+like hey I did this writing project
+
+00:46:58.080 --> 00:47:00.159
+once it was really cool link to writing project
+
+00:47:00.160 --> 00:47:04.959
+and the writing project is a table of contents huge hierarchy or whatever.
+
+00:47:04.960 --> 00:47:06.959
+Is it not a link to a thing?
+
+00:47:06.960 --> 00:47:10.759
+Back then you get into all these weird academic questions
+
+00:47:10.760 --> 00:47:12.799
+about the nature of links
+
+00:47:12.800 --> 00:47:17.719
+and there's no gold at the end of that rainbow, let's say.
+
+00:47:17.720 --> 00:47:21.159
+At least I've never seen anyone come back with any gold.
+
+00:47:21.160 --> 00:47:24.199
+I've seen people come back with very long faces
+
+00:47:24.200 --> 00:47:26.559
+and sadness in their eyes
+
+00:47:26.560 --> 00:47:31.239
+because all the effort, all the metadata was for naught.
+
+00:47:31.240 --> 00:47:32.919
+So, how do you do this?
+
+00:47:32.920 --> 00:47:36.119
+You figure out, when you get to 10k,
+
+00:47:36.120 --> 00:47:37.759
+you will probably have figured,
+
+00:47:37.760 --> 00:47:40.839
+and if you do 10k, not like web clippings,
+
+00:47:40.840 --> 00:47:42.759
+but really like you did put in effort to get there
+
+00:47:42.760 --> 00:47:46.879
+and type everything yourself in one way or another
+
+00:47:46.880 --> 00:47:47.999
+you would have figured out something
+
+00:47:48.000 --> 00:47:52.599
+that kind of sort of works for you around that milestone.
+
+00:47:52.600 --> 00:47:53.439
+And then I believe in you,
+
+00:47:53.440 --> 00:47:58.839
+you will be equipped to get to 20k, 30k,
+
+00:47:58.840 --> 00:48:00.799
+because you feel comfortable in your notes.
+
+00:48:00.800 --> 00:48:02.399
+And then you can expand further.
+
+00:48:02.400 --> 00:48:03.719
+And it will probably look different
+
+00:48:03.720 --> 00:48:06.639
+for someone in STEM fields than for an artist.
+
+00:48:06.640 --> 00:48:09.079
+Maybe, maybe not. I don't know.
+
+00:48:09.080 --> 00:48:14.639
+Maybe a fine arts artist would woodcrafter,
+
+00:48:14.640 --> 00:48:17.359
+maybe these kinds of folks will have different structures
+
+00:48:17.360 --> 00:48:22.519
+and rely more on visuals, schemas,
+
+00:48:22.520 --> 00:48:28.559
+whole part relationships, whereas mathematicians may not.
+
+00:48:28.560 --> 00:48:31.359
+but I don't know, I don't know, we need to compare
+
+00:48:31.360 --> 00:48:33.639
+and this will be the interesting like
+
+00:48:33.640 --> 00:48:36.159
+if the internet survives and we all survive
+
+00:48:36.160 --> 00:48:40.239
+and also Zettelkasten as an idea sticks on
+
+00:48:40.240 --> 00:48:43.039
+I hope we can have this discussion
+
+00:48:43.040 --> 00:48:44.839
+every year in five years, in ten years
+
+00:48:44.840 --> 00:48:50.039
+and then see how people transparently evolve
+
+00:48:50.040 --> 00:48:55.159
+their gardens, their processes, their note-taking systems
+
+00:48:55.160 --> 00:49:00.319
+next question not a question but i would be very interested
+
+00:49:00.320 --> 00:49:01.559
+in your thoughts on this video
+
+00:49:01.560 --> 00:49:07.039
+by westenberg okay it's it's this is not spam
+
+00:49:07.040 --> 00:49:13.959
+i i don't uh there's joe westenberg's uh youtube channel
+
+00:49:13.960 --> 00:49:15.319
+why i deleted my second brain
+
+00:49:15.320 --> 00:49:22.679
+a journey back to real thinking uh
+
+00:49:22.680 --> 00:49:30.319
+I think I didn't watch the video but read an article.
+
+00:49:30.320 --> 00:49:34.360
+Not sure where. Let me check my Zettelkasten.
+
+00:49:34.383 --> 00:49:36.215
+It's not on screen sharing. That was stupid.
+
+00:49:36.216 --> 00:49:48.239
+I'm probably not going to watch it right now with everyone here,
+
+00:49:48.240 --> 00:49:53.479
+so my thoughts on deleting and stuff like that.
+
+00:49:53.480 --> 00:49:58.679
+I do remember there was a very cleverly written, well-written post
+
+00:49:58.680 --> 00:50:02.719
+and the claim was, from my perspective,
+
+00:50:02.720 --> 00:50:04.919
+and that's not doing the work of
+
+00:50:04.920 --> 00:50:13.199
+It's not doing the work of the author justice.
+
+00:50:13.200 --> 00:50:19.839
+But the shortest summary is that there seems to be false contradiction,
+
+00:50:19.840 --> 00:50:24.759
+where the contradiction stems from how the opposite side,
+
+00:50:24.760 --> 00:50:27.079
+the note taking, the deliberate note taking,
+
+00:50:27.080 --> 00:50:28.159
+taking a lot of notes,
+
+00:50:28.160 --> 00:50:31.479
+all the notes every time, stuff, like how this is presented.
+
+00:50:31.480 --> 00:50:34.639
+I would say this is more on the collecting
+
+00:50:34.640 --> 00:50:36.519
+and not on the connecting side of things.
+
+00:50:36.520 --> 00:50:42.119
+So like I mentioned for the, some 30 minutes ago
+
+00:50:42.120 --> 00:50:45.039
+when I talked about Roam, Roam Research.
+
+00:50:45.040 --> 00:50:47.439
+If you start your day with a daily note,
+
+00:50:47.440 --> 00:50:50.679
+journal style, and then branch out from there,
+
+00:50:50.680 --> 00:50:53.759
+you do at least have time as a structure
+
+00:50:53.760 --> 00:50:57.039
+that helps you to organize what you put in.
+
+00:50:57.040 --> 00:50:59.319
+But also, it can get very messy
+
+00:50:59.320 --> 00:51:01.239
+and very weirdly interconnected,
+
+00:51:01.240 --> 00:51:04.239
+like this meme of the with a guy
+
+00:51:04.240 --> 00:51:10.919
+standing in front of a board
+
+00:51:10.920 --> 00:51:14.439
+with all these lines connecting things
+
+00:51:14.440 --> 00:51:17.239
+and just, you know, with the madness in his eyes
+
+00:51:17.240 --> 00:51:23.439
+you can do a lot of stuff in there.
+
+00:51:23.440 --> 00:51:27.839
+But at a certain point, it gets hard
+
+00:51:27.840 --> 00:51:30.799
+to also get out of your own head, let's say.
+
+00:51:30.800 --> 00:51:33.079
+If you do it in this kind of style,
+
+00:51:33.080 --> 00:51:35.679
+it can get hard to get off your own head.
+
+00:51:35.680 --> 00:51:39.919
+And one litmus test that you may find enjoyable
+
+00:51:39.920 --> 00:51:41.119
+if you struggle with this
+
+00:51:41.120 --> 00:51:46.199
+is to publish more. Because having access
+
+00:51:46.200 --> 00:51:49.199
+to a very deeply interconnected web of stuff
+
+00:51:49.200 --> 00:51:52.919
+thoughts, ideas, notes, wisdoms, whatever
+
+00:51:52.920 --> 00:51:55.079
+very deeply connected,
+
+00:51:55.080 --> 00:52:02.359
+like not a pile, yarn, wool, what's the ball?
+
+00:52:02.360 --> 00:52:06.519
+Ball of yarn? No, that's boring.
+
+00:52:06.520 --> 00:52:09.239
+Let's say like you have a lot of yarn
+
+00:52:09.240 --> 00:52:11.519
+and then you just create chaos and entropy
+
+00:52:11.520 --> 00:52:13.239
+and can't untangle it. It's a very tangled mess.
+
+00:52:13.240 --> 00:52:15.479
+So it's a very dense, dense thingy
+
+00:52:15.480 --> 00:52:18.639
+that's now its own kind of structure. Like if you have this
+
+00:52:18.640 --> 00:52:21.519
+And in your head, when you think about your notes,
+
+00:52:21.520 --> 00:52:24.639
+you may have some interesting pathways there.
+
+00:52:24.640 --> 00:52:28.999
+But you need to serialize and put into a linear order
+
+00:52:29.000 --> 00:52:30.079
+in order to communicate.
+
+00:52:30.080 --> 00:52:32.799
+Otherwise, people cannot follow your thought.
+
+00:52:32.800 --> 00:52:36.119
+it's a pity because we still rely
+
+00:52:36.120 --> 00:52:39.159
+on the book style of writing
+
+00:52:39.160 --> 00:52:42.639
+and also hypertext which is making navigation easy
+
+00:52:42.640 --> 00:52:47.439
+but not telling a story easier in our modern times
+
+00:52:47.440 --> 00:52:49.999
+but we still rely a lot on books
+
+00:52:50.000 --> 00:52:54.199
+which take take a lot of intertwined stuff,
+
+00:52:54.200 --> 00:52:58.759
+put it into one order so you can read from start to finish.
+
+00:52:58.760 --> 00:53:01.319
+But then, in order for you to make sense of this,
+
+00:53:01.320 --> 00:53:02.439
+you need to chop it up,
+
+00:53:02.440 --> 00:53:04.439
+associate with things you already know,
+
+00:53:04.440 --> 00:53:07.159
+and then attach things and create a new kind of structure
+
+00:53:07.160 --> 00:53:08.399
+through the narrative,
+
+00:53:08.400 --> 00:53:11.079
+because it's only one kind of presentation
+
+00:53:11.080 --> 00:53:12.079
+that's given to you.
+
+00:53:12.080 --> 00:53:14.919
+And there may also be different kinds of presentations,
+
+00:53:14.920 --> 00:53:16.599
+like I also mentioned for the STEM fields,
+
+00:53:16.600 --> 00:53:18.359
+where you have different textbooks
+
+00:53:18.360 --> 00:53:21.199
+from different eras of mathematics foundations,
+
+00:53:21.200 --> 00:53:24.140
+and then you see, hey, this one clicks, this one doesn't.
+
+00:53:24.120 --> 00:53:27.879
+Why? It's the same stuff, but they present it differently.
+
+00:53:27.880 --> 00:53:30.639
+And the presentation matters. The presentation matters.
+
+00:53:30.640 --> 00:53:33.119
+And if you only deal with the chaos,
+
+00:53:33.120 --> 00:53:34.399
+the weird entanglement,
+
+00:53:34.400 --> 00:53:36.479
+if you capture everything and anything,
+
+00:53:36.480 --> 00:53:41.239
+how many, I don't know, how many hairs you lost that day or whatever.
+
+00:53:41.240 --> 00:53:43.559
+If you capture everything in there,
+
+00:53:43.560 --> 00:53:45.119
+you don't create the kind of value
+
+00:53:45.120 --> 00:53:47.159
+that is linearizable into thought,
+
+00:53:47.160 --> 00:53:49.599
+which also makes reading your own stuff later,
+
+00:53:49.600 --> 00:53:55.839
+maybe unbearable, maybe at least hard and making sense.
+
+00:53:55.840 --> 00:53:57.719
+Now we come back to one of the earlier questions,
+
+00:53:57.720 --> 00:54:00.399
+like, why do I not use outlines?
+
+00:54:00.400 --> 00:54:03.039
+Because OrgNode allows me to do outlines.
+
+00:54:03.040 --> 00:54:06.319
+Well, I try to write my notes as blog posts,
+
+00:54:06.320 --> 00:54:09.599
+very short blog posts, microblogging, if you will,
+
+00:54:09.600 --> 00:54:11.439
+paragraphs, a couple of paragraphs.
+
+00:54:11.440 --> 00:54:14.279
+Maybe it's also more nested because it's a huge topic.
+
+00:54:14.280 --> 00:54:16.199
+It's a complex topic. That also happens.
+
+00:54:16.200 --> 00:54:18.039
+But then it's more like an article,
+
+00:54:18.040 --> 00:54:21.279
+a long blog post, or an essay,
+
+00:54:21.280 --> 00:54:26.279
+but never just vomiting thought out onto the page,
+
+00:54:26.280 --> 00:54:28.559
+because then you will get back to the note
+
+00:54:28.560 --> 00:54:31.199
+and you will find, hey, there's a lot of vomit.
+
+00:54:31.200 --> 00:54:36.759
+But you never follow this kind of phrase with nice.
+
+00:54:36.760 --> 00:54:40.880
+I enjoyed reading that. It's always me.
+
+00:54:40.880 --> 00:54:43.239
+Oppressing because of its mass,
+
+00:54:43.240 --> 00:54:46.279
+it's also getting in the way of having new ideas
+
+00:54:46.280 --> 00:54:48.719
+because whatever is there and you need to tangle it
+
+00:54:48.720 --> 00:54:52.759
+and then you lost your new genuine idea,
+
+00:54:52.760 --> 00:54:56.319
+this can also happen.
+
+00:54:56.320 --> 00:55:00.759
+So I'm not sure what the Westenberg video contains,
+
+00:55:00.760 --> 00:55:03.799
+but the sentiment there of deleting everything,
+
+00:55:03.800 --> 00:55:06.999
+it makes sense if you find yourself in a situation
+
+00:55:07.000 --> 00:55:09.359
+where you don't have a productive system.
+
+00:55:09.360 --> 00:55:13.199
+and the notes from 2009 in my own Zettelkasten
+
+00:55:13.200 --> 00:55:15.159
+aren't of the highest quality standards
+
+00:55:15.160 --> 00:55:17.959
+I rewrite most of them when I encounter them,
+
+00:55:17.960 --> 00:55:23.399
+but I can still use a couple as is and sometimes they're just garbage,
+
+00:55:23.400 --> 00:55:28.119
+but as Luhmann said garbage like trickles to the ground
+
+00:55:28.120 --> 00:55:34.599
+and forms a nice sediment layer there in the septic tank of your thought machine,
+
+00:55:34.600 --> 00:55:36.439
+your thought thinking environment.
+
+00:55:36.440 --> 00:55:40.319
+But clear water separates and then rises to the top
+
+00:55:40.320 --> 00:55:42.439
+and that's what you work with.
+
+00:55:42.440 --> 00:55:47.759
+it's never going to be 100% useful. But if it's 90% garbage
+
+00:55:47.760 --> 00:55:51.479
+and if the water is, if the septic tank is never clearing,
+
+00:55:51.480 --> 00:55:54.399
+then you probably need to start
+
+00:55:54.400 --> 00:55:55.559
+over and rethink your approach.
+
+00:55:55.560 --> 00:55:57.319
+Maybe there was just too much garbage,
+
+00:55:57.320 --> 00:56:01.559
+too much toxic waste in there, whatever that means, right?
+
+00:56:01.560 --> 00:56:07.839
+So I do understand this, but also I would say
+
+00:56:07.840 --> 00:56:11.479
+maybe maybe they tried to do too much with a different mindset
+
+00:56:11.480 --> 00:56:24.839
+and it just didn't click and then they,
+
+00:56:24.840 --> 00:56:27.199
+you know next question is there a danger?
+
+00:56:27.200 --> 00:56:41.959
+also, wait a second, answer do not probably a lot of collection,
+
+00:56:41.960 --> 00:56:52.359
+not a lot of stinking in the Zettelkasten to some purpose.
+
+00:56:52.360 --> 00:56:58.700
+Usually. Conflation was the word I was fishing for.
+
+00:56:58.701 --> 00:57:02.840
+Usually posts videos like this.
+
+00:57:02.841 --> 00:57:10.090
+Conflate note taking as a dumping ground
+
+00:57:10.091 --> 00:57:22.174
+for stuff with something that is valuable in the long term.
+
+00:57:22.175 --> 00:57:27.599
+Also if this was our dear friend Westenberg
+
+00:57:27.600 --> 00:57:30.439
+I think the note count also was higher,
+
+00:57:30.440 --> 00:57:33.519
+but I might confuse them with someone else.
+
+00:57:33.520 --> 00:57:36.959
+The note count was way higher than mine. Note count.
+
+00:57:36.960 --> 00:57:41.239
+But then also, you know, there's the sign
+
+00:57:41.240 --> 00:57:44.159
+of going for quantity in...
+
+00:57:44.160 --> 00:57:47.719
+just capture anything, like capturing,
+
+00:57:47.720 --> 00:57:48.799
+that's not the bottleneck.
+
+00:57:48.800 --> 00:57:52.479
+The bottleneck is finding, making connections happen,
+
+00:57:52.480 --> 00:57:55.919
+having thoughts and working on problems
+
+00:57:55.920 --> 00:57:57.279
+you really want to solve in the long term.
+
+00:57:57.280 --> 00:57:59.159
+So next question.
+
+00:57:59.160 --> 00:58:02.359
+Is there a danger that with the settled custom process,
+
+00:58:02.360 --> 00:58:05.679
+that the process gets a bit in the way of the content?
+
+00:58:05.680 --> 00:58:12.279
+yes, especially if you do it like old school style
+
+00:58:12.280 --> 00:58:14.639
+if you find that your handwriting sucks
+
+00:58:14.640 --> 00:58:16.079
+and you want to type things
+
+00:58:16.080 --> 00:58:19.199
+on a typewriter like that kind of process
+
+00:58:19.200 --> 00:58:20.479
+definitely gets in the way
+
+00:58:20.480 --> 00:58:21.759
+that's going to be your bottleneck
+
+00:58:21.760 --> 00:58:24.679
+you can't find black paper
+
+00:58:24.680 --> 00:58:30.759
+and put it into your typewriter and then like that's not the speed of thought
+
+00:58:30.760 --> 00:58:35.959
+that's the speed of, I don't know, my long deceased grandmother
+
+00:58:35.960 --> 00:58:54.479
+but yeah it's not like a strive for speed of thought tools
+
+00:58:54.480 --> 00:59:00.439
+not needing a typewriter
+
+00:59:00.440 --> 00:59:10.519
+and then next step reduce ritual reduce rituals and ceremony
+
+00:59:10.520 --> 00:59:15.239
+What I mean by that is if you find yourself doing the same moves
+
+00:59:15.240 --> 00:59:16.799
+or similar moves over and over again,
+
+00:59:16.800 --> 00:59:19.439
+but they don't contribute
+
+00:59:19.440 --> 00:59:23.479
+to having more cool ideas per week, then maybe ditch these,
+
+00:59:23.480 --> 00:59:26.639
+apart from the day timestamp,
+
+00:59:26.640 --> 00:59:28.479
+having a title, hashtags, and content,
+
+00:59:28.480 --> 00:59:32.399
+and also being very, very careful about quoting my sources.
+
+00:59:32.400 --> 00:59:35.639
+I don't do much with my et cetera.
+
+00:59:35.640 --> 00:59:37.679
+I cannot give up quoting my sources
+
+00:59:37.680 --> 00:59:39.399
+because then I'm plagiarizing, stealing,
+
+00:59:39.400 --> 00:59:41.879
+forgetting where I get ideas from and confuse.
+
+00:59:41.880 --> 00:59:44.599
+And I get out because I'm aware of the problem there.
+
+00:59:44.600 --> 00:59:47.599
+I'm also not trusting my own notes anymore.
+
+00:59:47.600 --> 00:59:51.159
+would not be trusting my own notes anymore
+
+00:59:51.160 --> 00:59:53.919
+i need to properly cite so then i can see hey
+
+00:59:53.920 --> 00:59:56.559
+this block has no quotations that's mine
+
+00:59:56.560 --> 01:00:00.559
+and i can trust this it's not like hey this is maybe mine
+
+01:00:00.560 --> 01:00:04.039
+maybe this is a verbatim quote from a book like this
+
+01:00:04.040 --> 01:00:05.799
+is not helping that's a ceremony
+
+01:00:05.800 --> 01:00:09.039
+that's paying off in the long term also
+
+01:00:09.040 --> 01:00:11.319
+so that when you write something
+
+01:00:11.320 --> 01:00:15.159
+you have all the sources at hand
+
+01:00:15.160 --> 01:00:17.279
+that's a useful ceremony title
+
+01:00:17.280 --> 01:00:20.799
+is just a way of summarizing the content
+
+01:00:20.800 --> 01:00:25.119
+do it like an excerpt, right?
+
+01:00:25.120 --> 01:00:26.919
+you have the whole content, that's your etc.
+
+01:00:26.920 --> 01:00:29.879
+do a short summary, that may be your introduction.
+
+01:00:29.880 --> 01:00:33.239
+So have a way to quickly get a glimpse of the relevance
+
+01:00:33.240 --> 01:00:35.919
+before having to read the whole settle
+
+01:00:35.920 --> 01:00:38.719
+when you encounter it years from now.
+
+01:00:38.720 --> 01:00:41.319
+And then have a one, that's one sentence summary,
+
+01:00:41.320 --> 01:00:44.159
+and then have an even more condensed form that's a title.
+
+01:00:44.160 --> 01:00:45.679
+The title is basically your API,
+
+01:00:45.680 --> 01:00:49.359
+the interface for you and your nodes.
+
+01:00:49.360 --> 01:00:54.879
+And it needs to uphold some kind of contract.
+
+01:00:54.880 --> 01:00:57.319
+And if it just is, like, this is my second note,
+
+01:00:57.320 --> 01:01:00.239
+that's not useful. This is just a technical limitation
+
+01:01:00.240 --> 01:01:02.839
+because you can't have the same file name twice.
+
+01:01:02.840 --> 01:01:05.639
+That's not going to be useful.
+
+01:01:05.640 --> 01:01:09.519
+But if you give yourself the permission to take time
+
+01:01:09.520 --> 01:01:12.919
+of titling your notes in one way and also changing titles,
+
+01:01:12.920 --> 01:01:16.199
+because you will know from writing introductions
+
+01:01:16.200 --> 01:01:18.679
+the further you get along,
+
+01:01:18.680 --> 01:01:22.279
+the more and more you need to rewrite your introductions
+
+01:01:22.280 --> 01:01:24.639
+because your understanding changes same for titles
+
+01:01:24.640 --> 01:01:28.319
+titles don't always stay consistent or constant
+
+01:01:28.320 --> 01:01:31.079
+that's why I don't link by title, because I would then need
+
+01:01:31.080 --> 01:01:34.279
+to go through my node archive and also need to go to
+
+01:01:34.280 --> 01:01:39.999
+my node archive and need to correct all the links
+
+01:01:40.000 --> 01:01:44.039
+that's a janitorial task I like to not do, if I can
+
+01:01:44.040 --> 01:01:49.759
+So answer here, less ceremony, fewer ceremonies, plural.
+
+01:01:49.760 --> 01:01:54.359
+Try to only do the minimum possible, minimum viable thing.
+
+01:01:54.360 --> 01:01:57.599
+And using Emacs and D-Node, you get a lot of defaults.
+
+01:01:57.600 --> 01:01:58.719
+And then you need to worry
+
+01:01:58.720 --> 01:02:01.199
+not about IDs and tags that much,
+
+01:02:01.200 --> 01:02:04.159
+or where to put them and how to put them.
+
+01:02:04.160 --> 01:02:06.439
+You can omit keywords. You can leave keywords out.
+
+01:02:06.440 --> 01:02:08.159
+They don't scale anyway.
+
+01:02:08.160 --> 01:02:12.079
+But they may be interesting as a way to group,
+
+01:02:12.080 --> 01:02:19.959
+but also Sascha from zettelkasten.de, from our website,
+
+01:02:19.960 --> 01:02:23.279
+Sascha also found that, I believe, he,
+
+01:02:23.280 --> 01:02:28.119
+structures win in the long term.
+
+01:02:28.120 --> 01:02:30.719
+Manual created hubs and overviews
+
+01:02:30.720 --> 01:02:34.639
+win over machine generated lumps.
+
+01:02:34.640 --> 01:02:37.959
+Because you need to reorient yourself
+
+01:02:37.960 --> 01:02:42.239
+in the search results all the time.
+
+01:02:42.240 --> 01:02:45.679
+That's not as useful as having a pathway
+
+01:02:45.680 --> 01:02:49.559
+through your nodes that you can follow.
+
+01:02:49.560 --> 01:02:52.039
+It may not be a pathway through all of your nodes, of course,
+
+01:02:52.040 --> 01:02:56.159
+but it may be a pathway from entry point into some topic.
+
+01:02:56.160 --> 01:03:01.839
+That's why some things are essential and others aren't.
+
+01:03:01.840 --> 01:03:06.239
+And the essential stuff, try to do it quickly, get better at it,
+
+01:03:06.240 --> 01:03:08.799
+practice the movements, then they get out of the way,
+
+01:03:08.800 --> 01:03:10.919
+and then you can focus on having ideas
+
+01:03:10.920 --> 01:03:12.119
+and typing them at speed of thought,
+
+01:03:12.120 --> 01:03:15.239
+more or less, and then you're good.
+
+01:03:15.240 --> 01:03:20.639
+I hope. Wishing you all the best. Next and last question.
+
+01:03:20.640 --> 01:03:24.519
+How do you navigate looking at all posts with a certain text?
+
+01:03:24.520 --> 01:03:26.679
+This might be an emacs, already new to emacs.
+
+01:03:26.680 --> 01:03:28.679
+I just may have answered this.
+
+01:03:28.680 --> 01:03:40.159
+How do you navigate looking at all posts with a certain text?
+
+01:03:40.160 --> 01:03:42.959
+Let me go to my actual node archive.
+
+01:03:42.960 --> 01:03:55.919
+and then php no language learning ah
+
+01:03:55.920 --> 01:03:59.319
+this is not my setup I'm very clumsy
+
+01:03:59.320 --> 01:04:03.119
+I'm sorry, I don't know swift language learning
+
+01:04:03.120 --> 01:04:28.465
+ah that's that's a boring one php By this time, I could have also,
+
+01:04:28.466 --> 01:04:35.299
+ah, there's the model. This would be an entry point
+
+01:04:35.300 --> 01:04:39.159
+into my PHP atom molecule organism learning journey
+
+01:04:39.160 --> 01:04:43.159
+where I tried to practice, what's visual line mode, sorry,
+
+01:04:43.160 --> 01:04:48.919
+where I tried to practice this atom molecule thing on something new.
+
+01:04:48.920 --> 01:04:51.879
+I haven't used PHP in a long time
+
+01:04:51.880 --> 01:04:59.199
+and found that I wasn't, yeah, you can see it on the screen also
+
+01:04:59.200 --> 01:05:01.439
+like language primitives are the atoms,
+
+01:05:01.440 --> 01:05:08.759
+I think molecules are more like idioms or patterns that are PHP special in PHP
+
+01:05:08.760 --> 01:05:10.599
+and different in other languages in Python
+
+01:05:10.600 --> 01:05:13.759
+would be list comprehension that's in a molecule
+
+01:05:13.760 --> 01:05:16.319
+and but also you can make a point for hey,
+
+01:05:16.320 --> 01:05:18.519
+this comprehension is more like a syntactical thing,
+
+01:05:18.520 --> 01:05:23.439
+no no get out of here, like the for loop is the syntactical atom
+
+01:05:23.440 --> 01:05:25.039
+and the molecule is using the for loop
+
+01:05:25.040 --> 01:05:26.559
+with weird other stuff
+
+01:05:26.560 --> 01:05:28.199
+to then make the list comprehension happen.
+
+01:05:28.200 --> 01:05:33.679
+That's my argument there, okay? So what do we do with this?
+
+01:05:33.680 --> 01:05:38.519
+I use this as an entry point if I want to see,
+
+01:05:38.520 --> 01:05:41.639
+hey, what kind of stuff did I take notes on
+
+01:05:41.640 --> 01:05:43.439
+to get a better understanding
+
+01:05:43.440 --> 01:05:45.239
+on multiple levels of the language.
+
+01:05:45.240 --> 01:05:47.479
+And project structure conventions
+
+01:05:47.480 --> 01:05:49.319
+and usually another language
+
+01:05:49.320 --> 01:05:53.239
+that I use more here would be, but I can't remember now.
+
+01:05:53.240 --> 01:05:57.479
+Funny, right? I can't remember how I would need to look,
+
+01:05:57.480 --> 01:05:58.959
+but I think I'm too clumsy in Emacs
+
+01:05:58.960 --> 01:06:00.639
+to do it live on camera, sorry.
+
+01:06:00.640 --> 01:06:05.759
+But the organisms part here would also be like my own inventions,
+
+01:06:05.760 --> 01:06:06.559
+let's say in code,
+
+01:06:06.560 --> 01:06:11.119
+like my own discoveries where I found that in Swift, for example,
+
+01:06:11.120 --> 01:06:13.359
+you can express things on the type level
+
+01:06:13.360 --> 01:06:15.639
+in a very sexy way sometimes.
+
+01:06:15.640 --> 01:06:19.439
+And then I would put these there as well.
+
+01:06:19.440 --> 01:06:20.959
+So these are also,
+
+01:06:20.960 --> 01:06:26.559
+There are organisms to discover in the language reference,
+
+01:06:26.560 --> 01:06:30.599
+but there are also organisms to discover in the world,
+
+01:06:30.600 --> 01:06:32.559
+and then they are your own inventions,
+
+01:06:32.560 --> 01:06:36.519
+discoveries, more or less. And that's a sign of mastery.
+
+01:06:36.520 --> 01:06:38.719
+If you work more on these things,
+
+01:06:38.720 --> 01:06:40.959
+then you don't need to worry
+
+01:06:40.960 --> 01:06:42.399
+about the basics of the language anymore.
+
+01:06:42.400 --> 01:06:46.239
+So I can use this as an entry point
+
+01:06:46.240 --> 01:06:51.039
+to get into things that are very PHP-esque.
+
+01:06:51.040 --> 01:06:54.359
+When do I need this? When I want to talk about PHP,
+
+01:06:54.360 --> 01:06:55.359
+like I do now.
+
+01:06:55.360 --> 01:06:59.359
+Why do I show this when the question is about tags?
+
+01:06:59.360 --> 01:07:10.919
+Because if I search for... Which one do I take?
+
+01:07:10.920 --> 01:07:22.719
+Let's try grep. php. Yep, grep exited the anomaly.
+
+01:07:22.720 --> 01:07:28.039
+Dang, why? Option requires an argument.
+
+01:07:28.040 --> 01:07:36.159
+Yes, eshell is there.
+
+01:07:36.160 --> 01:07:43.919
+So let's just use rg, ripgrep and then ripgrep for php.
+
+01:07:43.920 --> 01:07:50.879
+And you see I get, I can do filenames only, right?
+
+01:07:50.880 --> 01:07:56.599
+Let's not worry. I get a lot of, let's just scroll up.
+
+01:07:56.600 --> 01:08:03.239
+I get a lot more hits here for the PHP tech,
+
+01:08:03.240 --> 01:08:06.759
+which is only about PHP specific things,
+
+01:08:06.760 --> 01:08:09.559
+not about anything that I do in PHP.
+
+01:08:09.560 --> 01:08:15.279
+Like, I don't know, I don't take Laravel or Filament,
+
+01:08:15.280 --> 01:08:17.879
+which are frameworks, libraries in PHP,
+
+01:08:17.880 --> 01:08:21.199
+the Zend library or whatever, I don't know many.
+
+01:08:21.200 --> 01:08:23.199
+Like I wouldn't take everything
+
+01:08:23.200 --> 01:08:26.999
+and anything that is related to the php ecosystem
+
+01:08:27.000 --> 01:08:28.399
+with the php hashtag.
+
+01:08:28.400 --> 01:08:30.679
+Why? Because then the tag becomes useless.
+
+01:08:30.680 --> 01:08:33.439
+I only tag things that are about the language.
+
+01:08:33.440 --> 01:08:39.159
+Like how do I pass variables to php includes that's php related.
+
+01:08:39.160 --> 01:08:44.879
+And you see these are... I'm still not at the top.
+
+01:08:44.880 --> 01:08:48.399
+now i'm at the top these are a lot more findings than you could
+
+01:08:48.400 --> 01:08:49.879
+these don't fit on the screen
+
+01:08:49.880 --> 01:08:51.919
+these are three pages i believe
+
+01:08:51.920 --> 01:08:55.039
+and the note about my language learning journey was
+
+01:08:55.040 --> 01:08:58.999
+wasn't even one full page here's white space
+
+01:08:59.000 --> 01:09:02.799
+there wasn't okay right but still there's much more stuff
+
+01:09:02.800 --> 01:09:07.479
+the hashtag I don't use for navigating.
+
+01:09:07.480 --> 01:09:10.839
+I only use this, let's say, the shotgun approach.
+
+01:09:10.840 --> 01:09:14.239
+I think Sascha on our Zettelkasten blog post,
+
+01:09:14.240 --> 01:09:16.359
+don't remember which post, mentioned this as well.
+
+01:09:16.360 --> 01:09:18.079
+Sometimes you need a sniper rifle.
+
+01:09:18.080 --> 01:09:21.319
+Sometimes you need a shotgun.
+
+01:09:21.320 --> 01:09:27.199
+And the hashtag-based search would be I don't know what I'm looking for.
+
+01:09:27.200 --> 01:09:32.959
+It was PHP related. I hope I use the hashtag correctly
+
+01:09:32.960 --> 01:09:36.879
+and then kill all these nodes from my archive.
+
+01:09:36.880 --> 01:09:38.959
+The metaphor doesn't work that way,
+
+01:09:38.960 --> 01:09:41.279
+but still you get a lot of results here
+
+01:09:41.280 --> 01:09:45.959
+and you could use this as a way to filter from 11,000 nodes
+
+01:09:45.960 --> 01:09:53.559
+down to 50 or so, maybe less.
+
+01:09:53.560 --> 01:09:58.999
+And if you got this far, then you can start to do it in a mechanical way again.
+
+01:09:59.000 --> 01:10:05.279
+But wait, if you have 100 or 1000 nodes in the results there,
+
+01:10:05.280 --> 01:10:08.279
+then you can't mechanically go through all the nodes again.
+
+01:10:08.280 --> 01:10:09.919
+You can maybe skim and look
+
+01:10:09.920 --> 01:10:11.159
+for something that catches your eye,
+
+01:10:11.160 --> 01:10:14.159
+if you're lucky, and if that's the thing
+
+01:10:14.160 --> 01:10:15.039
+that works for you.
+
+01:10:15.040 --> 01:10:21.319
+but usually no, like usually the text become useless
+
+01:10:21.320 --> 01:10:24.079
+then maybe tag groups become more useful
+
+01:10:24.080 --> 01:10:28.039
+like PHP and LSP which is on screen here
+
+01:10:28.040 --> 01:10:30.799
+like then maybe the combination of two tags
+
+01:10:30.800 --> 01:10:32.519
+that reduces the search terms enough
+
+01:10:32.520 --> 01:10:36.639
+like this is basically glorified full text search
+
+01:10:36.640 --> 01:10:41.359
+where you highlight certain terms of importance that's it,
+
+01:10:41.360 --> 01:10:44.999
+I wouldn't use I wouldn't put more effort in there
+
+01:10:45.000 --> 01:10:48.639
+It's also maybe useful to group things by topic.
+
+01:10:48.640 --> 01:10:52.399
+For example, study notes like, I don't know,
+
+01:10:52.400 --> 01:10:56.759
+this is my undergrad, third semester,
+
+01:10:56.760 --> 01:11:01.279
+what do you do in the third semester, I don't know,
+
+01:11:01.280 --> 01:11:06.399
+history of philosophy of science of birds,
+
+01:11:06.400 --> 01:11:10.959
+very long course name, and then week 10.
+
+01:11:10.960 --> 01:11:13.199
+And then you assemble everything
+
+01:11:13.200 --> 01:11:15.479
+with this very technical tagging.
+
+01:11:15.480 --> 01:11:18.239
+Then you can use these folders
+
+01:11:18.240 --> 01:11:20.999
+to loosely group stuff together
+
+01:11:21.000 --> 01:11:23.119
+that happened during that week.
+
+01:11:23.120 --> 01:11:26.519
+And if you have 10 required readings and then do five of them,
+
+01:11:26.520 --> 01:11:28.879
+but they're also not closely interrelated,
+
+01:11:28.880 --> 01:11:33.639
+you will have read five to 10 different sources that you could process.
+
+01:11:33.640 --> 01:11:36.319
+You could maybe then also create an overview node
+
+01:11:36.320 --> 01:11:38.359
+as a preparation for the seminar
+
+01:11:38.360 --> 01:11:44.799
+whatever happens at university.
+
+01:11:44.800 --> 01:11:51.199
+Then the hashtag becomes just a way to group things.
+
+01:11:51.200 --> 01:11:52.479
+But once you create the structure node,
+
+01:11:52.480 --> 01:11:55.039
+you don't need the hashtags to navigate anymore.
+
+01:11:55.040 --> 01:11:57.679
+You could then maybe use the hashtags not to navigate
+
+01:11:57.680 --> 01:12:02.919
+but to to clump, to create collections,
+
+01:12:02.920 --> 01:12:07.759
+pre-assembled to some degree collections of things that exist already,
+
+01:12:07.760 --> 01:12:09.559
+get them out there and then review them.
+
+01:12:09.560 --> 01:12:13.319
+Like Twyla Tharp again, dumping all the notes on a table,
+
+01:12:13.320 --> 01:12:15.519
+all the stuff on the table,
+
+01:12:15.520 --> 01:12:17.759
+not just notes, all the clippings and so on and so on,
+
+01:12:17.760 --> 01:12:18.959
+and then making sense of them.
+
+01:12:18.960 --> 01:12:21.639
+That's what you can use a hashtag search for in the longterm.
+
+01:12:21.640 --> 01:12:27.799
+And I'm not convinced about navigational use in the longterm.
+
+01:12:27.800 --> 01:12:31.439
+which doesn't mean that it won't work for you,
+
+01:12:31.440 --> 01:12:32.799
+but I can't recommend it.
+
+01:12:32.800 --> 01:12:34.899
+I can't recommend trying to do it that way.
+
+01:12:34.900 --> 01:12:37.882
+So my answer is going to be, how do you navigate
+
+01:12:37.883 --> 01:12:45.507
+looking at all posts with certain tags? I don't.
+
+01:12:45.508 --> 01:12:53.439
+Tags are just a way to loosely group notes and stuff in general
+
+01:12:53.440 --> 01:13:05.519
+so that you can find potentially, PP, why doesn't P work?
+
+01:13:05.520 --> 01:13:14.919
+Potentially relevant pieces of information more quickly.
+
+01:13:14.920 --> 01:13:34.959
+Navigational aids. Create navigational aids
+
+01:13:34.960 --> 01:13:38.049
+things that help you navigate like this is for a week
+
+01:13:38.050 --> 01:13:42.479
+what did I say 10 of semester three
+
+01:13:42.480 --> 01:13:44.632
+uh the history of the sociology
+
+01:13:44.633 --> 01:13:46.799
+of the philosophy of science of birds
+
+01:13:46.800 --> 01:13:51.559
+or something lump things together there then you have a
+
+01:13:51.560 --> 01:13:54.119
+then you have a scratch pad to think on you do this
+
+01:13:54.120 --> 01:13:59.279
+did do this when you went to university with paper anyway, right?
+
+01:13:59.280 --> 01:14:01.039
+You would get your college book or whatever
+
+01:14:01.040 --> 01:14:04.439
+and then you would take notes and these like that location
+
+01:14:04.440 --> 01:14:07.159
+of that piece of paper in your college book
+
+01:14:07.160 --> 01:14:09.959
+in your whatever notes folder
+
+01:14:09.960 --> 01:14:15.039
+that's the important piece of information
+
+01:14:15.040 --> 01:14:20.079
+and the scratchpad, the thinking environment for this course
+
+01:14:20.080 --> 01:14:22.679
+and if you have all the other things
+
+01:14:22.680 --> 01:14:24.679
+that you ever did at your disposal as well
+
+01:14:24.680 --> 01:14:26.839
+maybe pull them in maybe pull them in
+
+01:14:26.840 --> 01:14:28.759
+and then bring them to the discussion
+
+01:14:28.760 --> 01:14:31.479
+with your professor or your teaching assistant
+
+01:14:31.480 --> 01:14:35.199
+and asking about, well, I read these five books
+
+01:14:35.200 --> 01:14:37.159
+that you recommended for this week.
+
+01:14:37.160 --> 01:14:40.439
+Thank you for recommending five whole books
+
+01:14:40.440 --> 01:14:45.399
+for one week of reading. I really enjoyed that. Long pause.
+
+01:14:45.400 --> 01:14:50.599
+And then you say, I also thought about other topics
+
+01:14:50.600 --> 01:14:54.359
+and brought them into a, I don't know, dialectic or position.
+
+01:14:54.360 --> 01:14:58.959
+What do you think about foxes in that regard
+
+01:14:58.960 --> 01:15:01.599
+and their own history and subjectivity
+
+01:15:01.600 --> 01:15:08.639
+when it comes to the bird's point of view or something, right?
+
+01:15:08.640 --> 01:15:10.999
+You can only do this if you either know this by heart
+
+01:15:11.000 --> 01:15:12.999
+because you do this a lot,
+
+01:15:13.000 --> 01:15:15.279
+think a lot about this stuff or you do this,
+
+01:15:15.280 --> 01:15:18.799
+you stumble upon this and then look for oppositions,
+
+01:15:18.800 --> 01:15:19.959
+look for certain patterns in your notes
+
+01:15:19.960 --> 01:15:22.479
+and then try to pull them in and represent them again
+
+01:15:22.480 --> 01:15:26.239
+so they actually do exist and then you can work with this,
+
+01:15:26.240 --> 01:15:27.399
+you can get on people's nerves
+
+01:15:27.400 --> 01:15:30.959
+you can write weird papers, essays
+
+01:15:30.960 --> 01:15:33.719
+and then get through your university studies quickly
+
+01:15:33.720 --> 01:15:35.959
+maybe also become an interesting columnist,
+
+01:15:35.960 --> 01:15:39.319
+I don't know, I've never been a columnist Right.
+
+01:15:39.320 --> 01:15:44.079
+I think these are all the questions.
+
+01:15:44.080 --> 01:15:47.159
+I'm going to delete the leftover ones.
+
+01:15:47.160 --> 01:15:52.439
+I hope you enjoyed some of the answers.
+
+01:15:52.440 --> 01:15:58.159
+Thank you so much. Thank you. That's a lot.
+
+01:15:58.160 --> 01:16:02.759
+We'll go back and get everything transcribed as well
+
+01:16:02.760 --> 01:16:08.599
+and then you can turn that into other articles in the future
+
+01:16:08.600 --> 01:16:10.119
+because that's how this all works, right?
+
+01:16:10.120 --> 01:16:14.319
+It all turns into writing. It all does.
+
+01:16:14.320 --> 01:16:15.999
+All the rest is garbage.
+
+01:16:16.000 --> 01:16:20.799
+I don't know why we invented anything else.
+
+01:16:20.800 --> 01:16:23.919
+It's only useful to transfer language before writing,
+
+01:16:23.920 --> 01:16:26.279
+but now you can just read.
+
+01:16:26.280 --> 01:16:29.719
+We have two people in the big blue button room
+
+01:16:29.720 --> 01:16:33.799
+who are still around, but I think they've got their, like,
+
+01:16:33.800 --> 01:16:35.719
+they don't have microphones set up.
+
+01:16:35.720 --> 01:16:40.679
+So I don't know if you want to just, like, CryptKNFL,
+
+01:16:40.680 --> 01:16:44.339
+if you want to just follow up through the etherpad,
+
+01:16:44.340 --> 01:16:47.639
+or email, I guess, in case you have further questions.
+
+01:16:47.640 --> 01:16:50.119
+But yeah, if you want to wrap up,
+
+01:16:50.120 --> 01:16:52.799
+I know it's getting a little bit late over there,
+
+01:16:52.800 --> 01:16:55.919
+you're in your time zone. Thank you so much.
+
+01:16:55.920 --> 01:16:59.679
+Yeah, all right. Thank you. You're welcome.
+
+01:16:59.680 --> 01:17:02.719
+Thanks for joining and listening.
+
+01:17:02.720 --> 01:17:07.640
+Okay, I'll wrap it up here then.
diff --git a/2025/captions/emacsconf-2025-zettelkasten--zettelkasten-for-regular-emacs-hackers--christian-tietze--main--chapters.vtt b/2025/captions/emacsconf-2025-zettelkasten--zettelkasten-for-regular-emacs-hackers--christian-tietze--main--chapters.vtt
new file mode 100644
index 00000000..6c0f7fed
--- /dev/null
+++ b/2025/captions/emacsconf-2025-zettelkasten--zettelkasten-for-regular-emacs-hackers--christian-tietze--main--chapters.vtt
@@ -0,0 +1,47 @@
+WEBVTT
+
+
+00:00:01.400 --> 00:01:25.533
+Introduction
+
+00:01:25.534 --> 00:02:29.679
+Advocating Freedoms
+
+00:02:29.680 --> 00:04:36.533
+What Is This About?
+
+00:04:36.534 --> 00:05:09.600
+Write - Essential Mechanic
+
+00:05:09.601 --> 00:05:34.267
+Connect - Essential Mechanic
+
+00:05:34.268 --> 00:06:49.433
+Correct - Essential Habit
+
+00:06:49.434 --> 00:07:43.919
+Design for Use - Habit
+
+00:07:43.920 --> 00:08:47.967
+Create Structure - Mechanic
+
+00:08:47.968 --> 00:09:32.400
+Start in the Zettelkasten - Mechanic
+
+00:09:32.401 --> 00:09:54.567
+Start with a Link - Mechanic
+
+00:09:54.568 --> 00:13:22.033
+Recap
+
+00:13:22.034 --> 00:14:46.139
+Facilitate Growth
+
+00:14:46.140 --> 00:20:39.067
+Emacs demo
+
+00:20:39.068 --> 00:22:45.296
+Learn, Share, Grow
+
+00:22:45.297 --> 00:23:18.360
+Outro
diff --git a/2025/captions/emacsconf-2025-zettelkasten--zettelkasten-for-regular-emacs-hackers--christian-tietze--main.vtt b/2025/captions/emacsconf-2025-zettelkasten--zettelkasten-for-regular-emacs-hackers--christian-tietze--main.vtt
new file mode 100644
index 00000000..c90596e8
--- /dev/null
+++ b/2025/captions/emacsconf-2025-zettelkasten--zettelkasten-for-regular-emacs-hackers--christian-tietze--main.vtt
@@ -0,0 +1,1492 @@
+WEBVTT captioned by sachac
+
+NOTE Introduction
+
+00:00:01.400 --> 00:00:03.938
+Hello there, fellow basement dwellers.
+
+00:00:03.939 --> 00:00:05.958
+I'm Christian and you are watching "
+
+00:00:05.959 --> 00:00:08.519
+Zettelkasten for Regular Emacs Hackers,"
+
+00:00:08.520 --> 00:00:12.920
+my Emacs Conference 2025 talk submission.
+
+00:00:12.921 --> 00:00:14.000
+In this presentation,
+
+00:00:14.001 --> 00:00:15.700
+I'll be showing you a couple of things
+
+00:00:15.701 --> 00:00:18.701
+about Zettelkasten, very basic mechanics and habits
+
+00:00:18.702 --> 00:00:21.622
+that you can pick up and implement in Emacs,
+
+00:00:21.623 --> 00:00:24.442
+the most malleable of all environments,
+
+00:00:24.443 --> 00:00:27.823
+to make a thinking environment happen in your life
+
+00:00:27.824 --> 00:00:32.434
+that stays with you potentially forever.
+
+00:00:32.435 --> 00:00:36.055
+The subtitle "For Regular Emacs Hackers" implies at least
+
+00:00:36.056 --> 00:00:38.356
+the possibility of irregular Emacs hackers
+
+00:00:38.357 --> 00:00:42.498
+and regular Emacs non-hackers, so the target audience here
+
+00:00:42.499 --> 00:00:45.119
+is people who are comfortable tweaking their setup
+
+00:00:45.120 --> 00:00:47.980
+when they run into issues and use Emacs to write,
+
+00:00:47.981 --> 00:00:49.980
+no matter if it's prose or code.
+
+00:00:49.981 --> 00:00:53.631
+So that's regular Emacs hacking.
+
+00:00:53.632 --> 00:00:55.614
+You don't need to be an irregular Emacs hacker,
+
+00:00:55.615 --> 00:00:58.759
+for example, being a core maintainer or whatever.
+
+00:00:58.760 --> 00:01:01.243
+You just need to be a normal user
+
+00:01:01.244 --> 00:01:06.679
+who also modifies the setup.
+
+00:01:06.680 --> 00:01:10.301
+However, you should probably not be an Emacs non-hacker.
+
+00:01:10.302 --> 00:01:12.781
+Or maybe you shouldn't stay an Emacs non-hacker,
+
+00:01:12.782 --> 00:01:16.002
+someone who is not tweaking their setup ever.
+
+00:01:16.003 --> 00:01:18.820
+So, if you just open your application
+
+00:01:18.821 --> 00:01:20.240
+to write with a double click,
+
+00:01:20.241 --> 00:01:23.283
+and it happens to be Emacs, this may not be for you,
+
+00:01:23.284 --> 00:01:25.533
+but you ultimately be the judge there.
+
+NOTE Advocating Freedoms
+
+00:01:25.534 --> 00:01:28.744
+It is my sacred duty to, of course,
+
+00:01:28.745 --> 00:01:32.665
+advocate all the essential freedoms during this presentation.
+
+00:01:32.666 --> 00:01:34.507
+These are the following.
+
+00:01:34.508 --> 00:01:37.389
+You shall not be shackled by a proprietary tool.
+
+00:01:37.390 --> 00:01:40.791
+(You shall be shackled by Emacs. (Which is free software.))
+
+00:01:40.792 --> 00:01:44.114
+You shall also not be shackled by an esoteric method
+
+00:01:44.115 --> 00:01:45.275
+that turns out to be a grift
+
+00:01:45.276 --> 00:01:47.897
+where you need to visit annual workshops, walk on broken glass
+
+00:01:47.898 --> 00:01:50.399
+and stuff to be a true ""knower"".
+
+00:01:50.400 --> 00:01:52.880
+You shall be empowered to do great things
+
+00:01:52.881 --> 00:01:55.883
+for the rest of your life after this session alone.
+
+00:01:55.884 --> 00:01:58.870
+This is not a sales pitch.
+
+00:01:58.871 --> 00:02:00.651
+Finally, you should also not be shackled
+
+00:02:00.652 --> 00:02:05.039
+by whichever sources of information you rely on in the future.
+
+00:02:05.040 --> 00:02:07.853
+You shall be free to think and explore new ideas,
+
+00:02:07.854 --> 00:02:12.175
+ideally forever, in an environment you built to your liking,
+
+00:02:12.176 --> 00:02:15.796
+without the degrading web searches and the dead internet
+
+00:02:15.797 --> 00:02:18.857
+getting in your way. No libraries, no dead trees.
+
+00:02:18.858 --> 00:02:21.538
+It's you and your knowledge base
+
+00:02:21.539 --> 00:02:29.679
+that can truly produce magnificent things.
+
+NOTE What Is This About?
+
+00:02:29.680 --> 00:02:33.586
+So what is this about? In the teaser text for this session,
+
+00:02:33.587 --> 00:02:36.148
+I brought up that when people talk about Emacs
+
+00:02:36.149 --> 00:02:38.931
+pulling in everything that people do on their computer,
+
+00:02:38.932 --> 00:02:42.614
+it's usually things they used other software for in the past.
+
+00:02:42.615 --> 00:02:46.057
+Like email, chat, playing music, browsing the web,
+
+00:02:46.058 --> 00:02:48.819
+managing tasks, you know, stuff like that.
+
+00:02:48.820 --> 00:02:51.761
+We don't have a good blueprint for thinking environments though.
+
+00:02:51.762 --> 00:02:53.263
+So it's not a trivial task,
+
+00:02:53.264 --> 00:02:54.744
+just port this or that to Emacs
+
+00:02:54.745 --> 00:02:56.705
+and then you'll be happy and productive.
+
+00:02:56.706 --> 00:02:58.199
+That's different from doing your emails
+
+00:02:58.200 --> 00:03:00.328
+or task management or writing in Emacs,
+
+00:03:00.329 --> 00:03:02.950
+where we have a lot of experience with existing software
+
+00:03:02.951 --> 00:03:06.413
+to adapt and deviate from, where we can essentially
+
+00:03:06.414 --> 00:03:09.855
+port the task to Emacs. We can practice to think,
+
+00:03:09.856 --> 00:03:12.998
+purposefully and productively, on complex things
+
+00:03:12.999 --> 00:03:14.459
+over long periods of time
+
+00:03:14.460 --> 00:03:19.059
+when we create bespoke environments that help with that.
+
+00:03:19.060 --> 00:03:20.467
+The first assumption is this:
+
+00:03:20.468 --> 00:03:24.058
+Writing is very important to form complex thought.
+
+00:03:24.059 --> 00:03:26.279
+Without writing, you won't be able to cross
+
+00:03:26.280 --> 00:03:28.760
+a certain complexity threshold.
+
+00:03:28.761 --> 00:03:31.921
+Thinking in your head alone without any externalization
+
+00:03:31.922 --> 00:03:34.261
+makes you prone to loops, repetitions,
+
+00:03:34.262 --> 00:03:36.142
+and worst of all: jumps.
+
+00:03:36.143 --> 00:03:38.562
+Jumps that get you to a point,
+
+00:03:38.563 --> 00:03:40.723
+but not backed by reason or argument.
+
+00:03:40.724 --> 00:03:46.501
+So you and your future and others cannot follow.
+
+00:03:46.502 --> 00:03:48.362
+Written words direct thought.
+
+00:03:48.363 --> 00:03:51.984
+The linearization or sequence-making of thoughts
+
+00:03:51.985 --> 00:03:55.306
+frames your next idea. That's the same for reading,
+
+00:03:55.307 --> 00:03:57.307
+which enables you to pick up existing ideas
+
+00:03:57.308 --> 00:04:00.249
+and continue to write about them later.
+
+00:04:00.250 --> 00:04:02.810
+So for "good thinking", writing, reading,
+
+00:04:02.811 --> 00:04:05.072
+and writing is mandatory.
+
+00:04:05.073 --> 00:04:07.193
+Emacs is good at showing text to read.
+
+00:04:07.194 --> 00:04:09.634
+It's good at processing keyboard inputs to write.
+
+00:04:09.635 --> 00:04:13.176
+So let's go. Let's set up an environment within Emacs
+
+00:04:13.177 --> 00:04:16.319
+to make this thinking thing happen.
+
+00:04:16.320 --> 00:04:18.059
+I'll walk you through some mechanics
+
+00:04:18.060 --> 00:04:20.881
+of the Zettelkasten machine and habits for you,
+
+00:04:20.882 --> 00:04:22.900
+dear thinker and regular Emacs hacker.
+
+00:04:22.901 --> 00:04:25.885
+And for your reference, highlight these things
+
+00:04:25.886 --> 00:04:30.468
+as I present them in the bottom left corner of the screen.
+
+00:04:30.469 --> 00:04:33.190
+So working with Zettelkasten as a thinking environment
+
+00:04:33.191 --> 00:04:36.533
+only requires very simple mechanics.
+
+NOTE Write - Essential Mechanic
+
+00:04:36.534 --> 00:04:39.639
+First one is to write. I mentioned this.
+
+00:04:39.640 --> 00:04:42.488
+It could be one large text file, could be many small ones.
+
+00:04:42.489 --> 00:04:46.359
+We use the power of Emacs and small files because Emacs is cool,
+
+00:04:46.360 --> 00:04:49.354
+and individual files put boundaries around ideas
+
+00:04:49.355 --> 00:04:52.662
+that force you to decide what goes where.
+
+00:04:52.663 --> 00:04:55.686
+Most importantly though, write like you mean it.
+
+00:04:55.687 --> 00:04:58.510
+The principle of "garbage in and garbage out" holds.
+
+00:04:58.511 --> 00:05:01.374
+You don't need to use your novelist voice when taking notes,
+
+00:05:01.375 --> 00:05:04.137
+but it also shouldn't be shorthand only,
+
+00:05:04.138 --> 00:05:06.794
+so that your future you has an easy time
+
+00:05:06.795 --> 00:05:09.600
+reading and digesting what you wrote.
+
+NOTE Connect - Essential Mechanic
+
+00:05:09.601 --> 00:05:13.524
+Next mechanic, which is also essential, is to connect.
+
+00:05:13.525 --> 00:05:14.999
+We think in associations.
+
+00:05:15.000 --> 00:05:18.639
+Connect notes to capture the associations that come to mind
+
+00:05:18.640 --> 00:05:20.916
+and that you want the reader, which is the future you,
+
+00:05:20.917 --> 00:05:24.074
+to make. Traveling a path of connections
+
+00:05:24.075 --> 00:05:25.835
+indirectly via tags or keywords
+
+00:05:25.836 --> 00:05:27.096
+and directly with links
+
+00:05:27.097 --> 00:05:30.720
+can feel like reading an essay you make up as you go.
+
+00:05:30.721 --> 00:05:34.267
+That's where connections show their power.
+
+NOTE Correct - Essential Habit
+
+00:05:34.268 --> 00:05:38.260
+The next essential habit is to read and correct
+
+00:05:38.261 --> 00:05:40.180
+and reconnect as you go.
+
+00:05:40.181 --> 00:05:42.311
+You spend time and effort at the writing stage,
+
+00:05:42.312 --> 00:05:43.792
+you are the primary audience,
+
+00:05:43.793 --> 00:05:46.895
+so do your past self a favor and read what you wrote.
+
+00:05:46.896 --> 00:05:50.478
+And then as you read it, make it better.
+
+00:05:50.479 --> 00:05:52.340
+Make it better, continuously make things better
+
+00:05:52.341 --> 00:05:55.222
+and capture new ideas as they come up as you read.
+
+00:05:55.223 --> 00:05:57.784
+And things you can only now remember
+
+00:05:57.785 --> 00:06:00.927
+because you learned about things in the meantime.
+
+00:06:00.928 --> 00:06:03.429
+You'll also get better at this whole thing with practice.
+
+00:06:03.430 --> 00:06:05.866
+So improve old notes when you find them lacking in detail,
+
+00:06:05.867 --> 00:06:08.575
+their tone pretentious, their mere existence
+
+00:06:08.576 --> 00:06:10.895
+an insult to your intelligence.
+
+00:06:10.896 --> 00:06:11.735
+Pay [knocks on table] attention [knocks again]
+
+00:06:11.736 --> 00:06:13.639
+to pain points in using notes.
+
+00:06:13.640 --> 00:06:16.559
+Yes, I knocked on my desk to emphasize.
+
+00:06:16.560 --> 00:06:18.601
+And fix things on the fly.
+
+00:06:18.602 --> 00:06:19.802
+From this principle follows
+
+00:06:19.803 --> 00:06:22.063
+a lot of common practices and tips.
+
+00:06:22.064 --> 00:06:24.125
+This principle truly is essential.
+
+00:06:24.126 --> 00:06:25.546
+Too long and you didn't read it?
+
+00:06:25.547 --> 00:06:27.227
+Add a summary at the beginning.
+
+00:06:27.228 --> 00:06:30.089
+You can't understand what you wrote a year ago?
+
+00:06:30.090 --> 00:06:32.511
+Do your best to rewrite it in your own words.
+
+00:06:32.512 --> 00:06:35.099
+It only gets worse if you wait longer.
+
+00:06:35.100 --> 00:06:37.115
+Can't find anything in the mess?
+
+00:06:37.116 --> 00:06:39.137
+Collect links to what you could find
+
+00:06:39.138 --> 00:06:41.659
+in a new "meta" note so next time,
+
+00:06:41.660 --> 00:06:43.240
+you have a navigational help.
+
+00:06:43.241 --> 00:06:44.861
+This practice will form the basis
+
+00:06:44.862 --> 00:06:46.733
+for structure notes, maps, and overviews,
+
+00:06:46.734 --> 00:06:49.433
+which we will come to later.
+
+NOTE Design for Use - Habit
+
+00:06:49.434 --> 00:06:52.071
+The next habit, non-essential though,
+
+00:06:52.072 --> 00:06:55.332
+is to create notes with intent to use them.
+
+00:06:55.333 --> 00:06:58.133
+It's one thing to write about facts, capture information,
+
+00:06:58.134 --> 00:07:01.354
+but all this is just collecting stuff.
+
+00:07:01.355 --> 00:07:03.615
+It's another thing altogether to write about
+
+00:07:03.616 --> 00:07:06.556
+a train of thought, about an argument you found compelling,
+
+00:07:06.557 --> 00:07:09.858
+about a model to understand the world, or yourself,
+
+00:07:09.859 --> 00:07:12.899
+in a better way. So collect to remember,
+
+00:07:12.900 --> 00:07:16.260
+but work in your Zettelkasten to think.
+
+00:07:16.261 --> 00:07:18.221
+What does that even mean, though?
+
+00:07:18.222 --> 00:07:19.822
+Recreate how intriguing books
+
+00:07:19.823 --> 00:07:21.803
+lay out their premises and arguments, for example.
+
+00:07:21.804 --> 00:07:24.885
+First this, then that, also that supports the premise,
+
+00:07:24.886 --> 00:07:27.407
+and so on. That's the structure of an argument.
+
+00:07:27.408 --> 00:07:30.549
+You can recreate it in list form, as a graph,
+
+00:07:30.550 --> 00:07:33.500
+you can draw and import the image, whatever.
+
+00:07:33.501 --> 00:07:36.112
+The structure of that argument is one thing,
+
+00:07:36.113 --> 00:07:38.333
+and the details, like the evidence for each claim,
+
+00:07:38.334 --> 00:07:39.999
+can be separate things.
+
+00:07:40.000 --> 00:07:43.919
+These can become their own sub-networks over time.
+
+NOTE Create Structure - Mechanic
+
+00:07:43.920 --> 00:07:45.470
+To facilitate all that,
+
+00:07:45.471 --> 00:07:47.931
+you will be needing to create structures.
+
+00:07:47.932 --> 00:07:50.612
+You've connected notes, so links already leave trails
+
+00:07:50.613 --> 00:07:52.519
+to traverse between your notes.
+
+00:07:52.520 --> 00:07:55.929
+Structures can emerge from these with a sheer volume,
+
+00:07:55.930 --> 00:07:58.616
+but they also can be designed by you to be
+
+00:07:58.617 --> 00:08:02.258
+navigational hubs of similar shape and form over time.
+
+00:08:02.259 --> 00:08:04.240
+Patterns like that reduce confusion
+
+00:08:04.241 --> 00:08:05.800
+and improve feeling at home
+
+00:08:05.801 --> 00:08:09.222
+and finding your way around, so that's worth investing in.
+
+00:08:09.223 --> 00:08:13.404
+For example, use outlines for complex topics.
+
+00:08:13.405 --> 00:08:15.247
+Tables of contents of a book, for example,
+
+00:08:15.248 --> 00:08:17.319
+that you love and processed in great detail.
+
+00:08:17.320 --> 00:08:19.492
+Just recreate the table of contents,
+
+00:08:19.493 --> 00:08:23.037
+the nested structure of it, in your notes,
+
+00:08:23.038 --> 00:08:28.196
+and then you have something to hang your future thoughts onto.
+
+00:08:28.197 --> 00:08:31.517
+Another example is a pro/contra table or list
+
+00:08:31.518 --> 00:08:35.478
+to discuss opposing facets and perspective of a thing.
+
+00:08:35.479 --> 00:08:37.830
+Another example would be models or metaphors
+
+00:08:37.831 --> 00:08:39.060
+like the iceberg model
+
+00:08:39.061 --> 00:08:42.181
+where you point out something has a hidden depth to it
+
+00:08:42.182 --> 00:08:44.381
+or the metaphor of a tree to model a thing
+
+00:08:44.382 --> 00:08:47.967
+as a branching and growing idea.
+
+NOTE Start in the Zettelkasten - Mechanic
+
+00:08:47.968 --> 00:08:50.434
+Another habit which is also not essential
+
+00:08:50.435 --> 00:08:52.454
+is to start in your Zettelkasten.
+
+00:08:52.455 --> 00:08:55.255
+Starting in your Zettelkasten removes the cost of deciding
+
+00:08:55.256 --> 00:08:57.516
+what goes in there and what doesn't.
+
+00:08:57.517 --> 00:08:59.636
+It gets you moving and up to speed
+
+00:08:59.637 --> 00:09:03.277
+with the method and the tool much easier.
+
+00:09:03.278 --> 00:09:05.078
+Importing stuff later into the Zettelkasten
+
+00:09:05.079 --> 00:09:06.198
+can feel like a chore,
+
+00:09:06.199 --> 00:09:09.259
+but starting the work you need to do anyway in it?
+
+00:09:09.260 --> 00:09:11.560
+That reduces the mental hurdle.
+
+00:09:11.561 --> 00:09:12.921
+As a regular Emacs hacker,
+
+00:09:12.922 --> 00:09:14.582
+you'll eventually develop your own tools
+
+00:09:14.583 --> 00:09:17.303
+to make initial exploration smoother over time,
+
+00:09:17.304 --> 00:09:19.544
+like do you start in a particular place
+
+00:09:19.545 --> 00:09:22.519
+or just create a new note from scratch somewhere.
+
+00:09:22.520 --> 00:09:25.026
+You won't know this until you experience this stuff
+
+00:09:25.027 --> 00:09:26.867
+for a while and try different things.
+
+00:09:26.868 --> 00:09:32.400
+So don't worry and be open for change.
+
+NOTE Start with a Link - Mechanic
+
+00:09:32.401 --> 00:09:36.369
+The final habit, also non-essential, is to start with a link
+
+00:09:36.370 --> 00:09:38.451
+and not with the creation of a new file.
+
+00:09:38.452 --> 00:09:40.512
+Start with a link, create the file later.
+
+00:09:40.513 --> 00:09:42.473
+This avoids orphaned notes.
+
+00:09:42.474 --> 00:09:45.896
+Orphaned notes are those no others are linking to.
+
+00:09:45.897 --> 00:09:48.457
+To these you can only get with a full-text search
+
+00:09:48.458 --> 00:09:51.299
+or maybe by accident when you browse your notes,
+
+00:09:51.300 --> 00:09:54.567
+but there is no orderly way to get to them.
+
+NOTE Recap
+
+00:09:54.568 --> 00:09:58.533
+To recap: Write. Don't be sloppy.
+
+00:09:58.534 --> 00:10:00.600
+Put in effort early to get faster at this.
+
+00:10:00.601 --> 00:10:04.159
+This is essential, because without putting effort
+
+00:10:04.160 --> 00:10:08.133
+into writing, you won't have anything to use.
+
+00:10:08.134 --> 00:10:10.500
+Connect and leave trails to navigate.
+
+00:10:10.501 --> 00:10:13.619
+That can tell a story when you traverse the trail later.
+
+00:10:13.620 --> 00:10:16.540
+This is essential because without connection,
+
+00:10:16.541 --> 00:10:18.600
+you will not get anywhere.
+
+00:10:18.601 --> 00:10:20.300
+Correct and improve things as you go.
+
+00:10:20.301 --> 00:10:21.839
+The last essential thing: well,
+
+00:10:21.840 --> 00:10:24.141
+don't worry about perfection, and then,
+
+00:10:24.142 --> 00:10:25.802
+be gentle to your past self.
+
+00:10:25.803 --> 00:10:27.976
+Adapt to what you learn along the way.
+
+00:10:27.977 --> 00:10:31.124
+It's essential, because without this attitude,
+
+00:10:31.125 --> 00:10:33.745
+you can easily get stuck in analysis paralysis,
+
+00:10:33.746 --> 00:10:35.039
+like where do I need to put this,
+
+00:10:35.040 --> 00:10:37.367
+or what would be the perfect way to phrase this.
+
+00:10:37.368 --> 00:10:40.733
+Design for use. This helps both finding your voice,
+
+00:10:40.734 --> 00:10:42.819
+and to have criteria for selecting
+
+00:10:42.820 --> 00:10:45.233
+what to spend time and effort on in the first place.
+
+00:10:45.234 --> 00:10:47.349
+It takes into account the opportunity cost
+
+00:10:47.350 --> 00:10:50.250
+of high quality work from writing and connecting.
+
+00:10:50.251 --> 00:10:53.333
+Create structures. You won't be able to scale
+
+00:10:53.334 --> 00:10:55.876
+and stay organized and find your way around
+
+00:10:55.877 --> 00:10:58.539
+without structures. You can practice this early
+
+00:10:58.540 --> 00:11:00.599
+and design structures deliberately,
+
+00:11:00.600 --> 00:11:03.984
+but it's also okay to ignore this for a while and wing it.
+
+00:11:03.985 --> 00:11:05.746
+So it's not marked essential,
+
+00:11:05.747 --> 00:11:08.939
+although it may hurt you sooner than later.
+
+00:11:08.940 --> 00:11:10.891
+The habit to start in the Zettelkasten?
+
+00:11:10.892 --> 00:11:13.793
+Well, do the work you need to do in a place
+
+00:11:13.794 --> 00:11:15.479
+that can pay back dividends
+
+00:11:15.480 --> 00:11:16.715
+on the effort you put in.
+
+00:11:16.716 --> 00:11:19.257
+That's powerful, but also not essential.
+
+00:11:19.258 --> 00:11:21.619
+You could just as well continue to write and think
+
+00:11:21.620 --> 00:11:23.460
+and scribble somewhere else,
+
+00:11:23.461 --> 00:11:27.423
+and then do the Zettelkasten importing stuff later.
+
+00:11:27.424 --> 00:11:28.439
+Start with a link.
+
+00:11:28.440 --> 00:11:30.245
+That's really useful practice,
+
+00:11:30.246 --> 00:11:33.206
+but more like a lifehack and not an essential habit.
+
+00:11:33.207 --> 00:11:35.347
+So you can also create new files from scratch
+
+00:11:35.348 --> 00:11:38.049
+for ideas that come up as they come up
+
+00:11:38.050 --> 00:11:39.610
+and then try to connect them later.
+
+00:11:39.611 --> 00:11:42.731
+Well, that's better than not writing at all, right?
+
+00:11:42.732 --> 00:11:44.747
+So if you look at this, you may ask yourself,
+
+00:11:44.748 --> 00:11:48.319
+why is this create structure thing a mechanic and not a habit?
+
+00:11:48.320 --> 00:11:50.876
+What's the difference? It seems kind of random.
+
+00:11:50.877 --> 00:11:53.918
+Well, do create structures as an imperative
+
+00:11:53.919 --> 00:11:55.279
+is a good habit, yes.
+
+00:11:55.280 --> 00:11:57.981
+Structures facilitate growth of the Zettelkasten
+
+00:11:57.982 --> 00:11:59.562
+and help you discover useful patterns
+
+00:11:59.563 --> 00:12:00.679
+and the things you care about.
+
+00:12:00.680 --> 00:12:03.444
+Patterns that work for you personally,
+
+00:12:03.445 --> 00:12:04.724
+which make navigation easier
+
+00:12:04.725 --> 00:12:07.605
+because they fit your personal expectations
+
+00:12:07.606 --> 00:12:10.586
+for what is and what is not.
+
+00:12:10.587 --> 00:12:13.847
+That's something for you to do. That's a process.
+
+00:12:13.848 --> 00:12:18.148
+But from the perspective of the Zettelkasten as a system,
+
+00:12:18.149 --> 00:12:20.609
+that's a mechanic or rather dynamic,
+
+00:12:20.610 --> 00:12:23.149
+the Zettelkasten grows organically.
+
+00:12:23.150 --> 00:12:25.310
+Thanks to your constant intervention and usage of course.
+
+00:12:25.311 --> 00:12:27.631
+That's how time passes in your Zettelkasten.
+
+00:12:27.632 --> 00:12:32.272
+That's how a process of transformation enters the system.
+
+00:12:32.273 --> 00:12:34.800
+The transformation affects the network.
+
+00:12:34.801 --> 00:12:36.255
+Every new or updated note,
+
+00:12:36.256 --> 00:12:38.557
+every new connection changes the network.
+
+00:12:38.558 --> 00:12:40.718
+The existing network then imposes demands
+
+00:12:40.719 --> 00:12:43.679
+for new stuff to fit in, slowly solidifying
+
+00:12:43.680 --> 00:12:47.363
+how things are organized to be perceived as orderly.
+
+00:12:47.364 --> 00:12:49.084
+This is calcifying.
+
+00:12:49.085 --> 00:12:52.326
+That's emergent creation of structure from use.
+
+00:12:52.327 --> 00:12:56.268
+Structure here is expectation for what could come next.
+
+00:12:56.269 --> 00:12:58.649
+On top of this interplay of emergent structure
+
+00:12:58.650 --> 00:13:00.190
+in your notes and processes
+
+00:13:00.191 --> 00:13:01.871
+that operate these constraints,
+
+00:13:01.872 --> 00:13:04.372
+you can design and influence and architect
+
+00:13:04.373 --> 00:13:06.873
+and have explicit structures and patterns,
+
+00:13:06.874 --> 00:13:09.633
+and therefore you can influence what is expected,
+
+00:13:09.634 --> 00:13:11.836
+what is unexpected and what fits
+
+00:13:11.837 --> 00:13:14.257
+and what needs to change to fit in.
+
+00:13:14.258 --> 00:13:18.139
+So the time you spend designing these things
+
+00:13:18.140 --> 00:13:20.300
+will influence how the Zettelkasten
+
+00:13:20.301 --> 00:13:22.033
+will behave in the future.
+
+NOTE Facilitate Growth
+
+00:13:22.034 --> 00:13:24.061
+To prepare for growth
+
+00:13:24.062 --> 00:13:27.533
+you will probably encounter thresholds along your journey.
+
+00:13:27.534 --> 00:13:29.267
+Like 1-10 notes, well,
+
+00:13:29.268 --> 00:13:31.300
+you can easily remember all of them.
+
+00:13:31.301 --> 00:13:34.333
+10-100, you will have forgotten some details,
+
+00:13:34.334 --> 00:13:37.067
+but will probably remember writing most of these notes
+
+00:13:37.068 --> 00:13:40.239
+in some way. 100-1000?
+
+00:13:40.240 --> 00:13:42.919
+Bad luck, you will have a hard time going through everything
+
+00:13:42.920 --> 00:13:46.439
+one by one to find what you have. You will have to rely on
+
+00:13:46.440 --> 00:13:50.087
+filtering results. For example, with a full text search,
+
+00:13:50.088 --> 00:13:53.492
+you will crave to use tags and keywords more
+
+00:13:53.493 --> 00:14:02.039
+to group notes into more manageable departments or collections.
+
+00:14:02.040 --> 00:14:05.879
+By this mark, search results produce way too many results.
+
+00:14:05.880 --> 00:14:07.967
+Popular tags become overcrowded,
+
+00:14:07.968 --> 00:14:10.069
+and you have the same problem you had in the last stage,
+
+00:14:10.070 --> 00:14:12.519
+but for each of these tags.
+
+00:14:12.520 --> 00:14:15.779
+So manual structures will take you through this.
+
+00:14:15.780 --> 00:14:18.919
+Anticipate growth pains by starting from structures.
+
+00:14:18.920 --> 00:14:22.119
+That's the recommendation here. Design your entry points
+
+00:14:22.120 --> 00:14:24.167
+into your current projects and research topics
+
+00:14:24.168 --> 00:14:28.159
+and interests as 'departments' of your Zettelkasten.
+
+00:14:28.160 --> 00:14:31.161
+Keep a list of, for example, 12 darlings,
+
+00:14:31.162 --> 00:14:34.124
+like Feynman did: a list of 12 things
+
+00:14:34.125 --> 00:14:35.485
+that you can check mechanically
+
+00:14:35.486 --> 00:14:36.926
+where you capture something new,
+
+00:14:36.927 --> 00:14:39.889
+and then you can see whether the newfound knowledge
+
+00:14:39.890 --> 00:14:46.139
+can also push one of your darling projects forward.
+
+NOTE Emacs demo
+
+00:14:46.140 --> 00:14:50.222
+Now, finally, let's get to the demonstration in Emacs.
+
+00:14:50.223 --> 00:14:52.334
+Here is a very minimal init file.
+
+00:14:52.335 --> 00:14:55.738
+I will share it with you in the show notes.
+
+00:14:55.739 --> 00:14:59.539
+And this is the Denote default configuration.
+
+00:14:59.540 --> 00:15:02.439
+Here I'm using the shortcut to create a new note
+
+00:15:02.440 --> 00:15:08.594
+immediately for this talk. And there you see.
+
+00:15:08.595 --> 00:15:10.496
+That's an empty new note. Here,
+
+00:15:10.497 --> 00:15:16.420
+sped up like two or three times the normal typing speed of me,
+
+00:15:16.421 --> 00:15:21.785
+is how I would process this very Emacs conference talk.
+
+00:15:21.786 --> 00:15:25.668
+The essential mechanics and habits, additional habits,
+
+00:15:25.669 --> 00:15:30.111
+mechanics, and then from there after I capture everything.
+
+00:15:30.112 --> 00:15:32.053
+Make sure that I have a reference.
+
+00:15:32.054 --> 00:15:36.136
+This is not a thought-out implementation in Emacs,
+
+00:15:36.137 --> 00:15:39.039
+so this is just plain text. Christian Tietze,
+
+00:15:39.040 --> 00:15:42.146
+Zettelkasten for Regular Emacs Hackers at the bottom.
+
+00:15:42.147 --> 00:15:46.585
+You can use reference management systems that you like,
+
+00:15:46.586 --> 00:15:49.233
+but I don't want to get into these details.
+
+00:15:49.234 --> 00:15:54.367
+Here I'm creating a note with the denote shortcut.
+
+00:15:54.368 --> 00:15:56.399
+Based on the selected text,
+
+00:15:56.400 --> 00:16:01.099
+I'm starting a link. This link is creating the note for me.
+
+00:16:01.100 --> 00:16:04.640
+It's also default Denote functionality
+
+00:16:04.641 --> 00:16:05.720
+and garbage in garbage out.
+
+00:16:05.721 --> 00:16:08.022
+I needed to edit the title because the selected text
+
+00:16:08.023 --> 00:16:10.043
+became the note title. Didn't want that.
+
+00:16:10.044 --> 00:16:13.335
+That was the abbreviation.
+
+00:16:13.336 --> 00:16:16.220
+Notice that the default configuration does not in fact
+
+00:16:16.221 --> 00:16:20.527
+include auto-fill-mode, so the lines get infinitely long.
+
+00:16:20.528 --> 00:16:23.653
+Looks a bit weird. Just garbage in, garbage out.
+
+00:16:23.654 --> 00:16:27.920
+Processing this from Wikipedia.
+
+00:16:27.921 --> 00:16:31.863
+So we have a detail note from this overview.
+
+00:16:31.864 --> 00:16:34.265
+So that's an overview with one link already.
+
+00:16:34.266 --> 00:16:38.668
+Starting from here, now I want to write more about my talk.
+
+00:16:38.669 --> 00:16:43.772
+And next we create structure, types of structures, etc.
+
+00:16:43.773 --> 00:16:46.835
+It creates a weird link, but I can edit this easily
+
+00:16:46.836 --> 00:16:51.922
+thanks to Emacs being so nice to work with.
+
+00:16:51.923 --> 00:16:55.323
+A couple of examples. I mentioned some of these
+
+00:16:55.324 --> 00:16:58.604
+in previous minutes of this conference talk,
+
+00:16:58.605 --> 00:17:00.584
+like position pair, one note for the pair,
+
+00:17:00.585 --> 00:17:03.921
+one note per pro and contra, table of contents,
+
+00:17:03.922 --> 00:17:06.405
+like lists of things you like,
+
+00:17:06.406 --> 00:17:10.607
+to talk about recreating a book's content,
+
+00:17:10.608 --> 00:17:14.308
+table of contents so you can process the book in detail,
+
+00:17:14.309 --> 00:17:16.839
+argument structures, I believe I mentioned these.
+
+00:17:16.840 --> 00:17:19.370
+Look at this up if you're not into arguments,
+
+00:17:19.371 --> 00:17:22.912
+but arguments are very well structured, usually.
+
+00:17:22.913 --> 00:17:26.133
+A table of things like two-dimensional table or grid.
+
+00:17:26.134 --> 00:17:28.334
+Graphics. You can also include graphics, images,
+
+00:17:28.335 --> 00:17:31.636
+and then write about these. And then there are metaphors.
+
+00:17:31.637 --> 00:17:33.797
+And into one metaphor that I'm presenting here,
+
+00:17:33.798 --> 00:17:37.538
+iceberg, black box, and then atom, molecule, and organism,
+
+00:17:37.539 --> 00:17:40.400
+I want to get into this. Atom, molecule, organism.
+
+00:17:40.401 --> 00:17:43.923
+That's a composition and recursion
+
+00:17:43.924 --> 00:17:47.799
+because I have Big Ideas there. Atom, smallest part;
+
+00:17:47.800 --> 00:17:49.567
+molecule, comprised of atoms;
+
+00:17:49.568 --> 00:17:51.968
+and organism is comprised of molecules.
+
+00:17:51.969 --> 00:17:56.432
+Different level of analysis. Because this is irreducible.
+
+00:17:56.433 --> 00:17:59.154
+In fact, if you have no clue about reducibility,
+
+00:17:59.155 --> 00:18:02.196
+irreducibility -- that doesn't mean much to you? --
+
+00:18:02.197 --> 00:18:05.978
+but look this up. You can go very deep
+
+00:18:05.979 --> 00:18:10.617
+with this kind of stuff. It's basically that if you
+
+00:18:10.618 --> 00:18:12.522
+decompose organs into atoms,
+
+00:18:12.523 --> 00:18:14.125
+you cannot get back to the organs.
+
+00:18:14.126 --> 00:18:17.072
+You just have a bunch of atoms. There's information loss,
+
+00:18:17.073 --> 00:18:19.879
+more or less.
+
+00:18:19.880 --> 00:18:24.246
+Here you see that I create a new thing at the end
+
+00:18:24.247 --> 00:18:26.949
+so that I can write about Denote. The tool doesn't matter,
+
+00:18:26.950 --> 00:18:31.834
+but when you use Emacs, use Denote because, well, why?
+
+00:18:31.835 --> 00:18:35.457
+Let's get into this. Fix the link.
+
+00:18:35.458 --> 00:18:37.279
+These are good reasons to use Denote.
+
+00:18:37.280 --> 00:18:44.379
+Denote is very simple. Denote has a couple of sane defaults.
+
+00:18:44.380 --> 00:18:47.078
+That makes life easier. Backlinks.
+
+00:18:47.079 --> 00:18:51.140
+We will see a backlink view at the end.
+
+00:18:51.141 --> 00:18:52.397
+I have to create a couple of things.
+
+00:18:52.398 --> 00:18:55.964
+I'm copying the source code there, the Elisp source,
+
+00:18:55.965 --> 00:19:01.667
+so that you can see, hey, this is just an Org Mode file.
+
+00:19:01.668 --> 00:19:03.629
+You can style it to your liking
+
+00:19:03.630 --> 00:19:06.751
+and then you can even execute the code if you want.
+
+00:19:06.752 --> 00:19:13.294
+Very powerful. Create notes as links first to avoid orphans.
+
+00:19:13.295 --> 00:19:14.675
+Forward link again.
+
+00:19:14.676 --> 00:19:16.015
+At least I wanted to create a forward link.
+
+00:19:16.016 --> 00:19:17.036
+I pressed the wrong shortcut.
+
+00:19:17.037 --> 00:19:19.737
+But anyway, I can fix this easily.
+
+00:19:19.738 --> 00:19:23.479
+You see, there's no link. Dammit.
+
+00:19:23.480 --> 00:19:26.761
+Now I need to create the link after the fact.
+
+00:19:26.762 --> 00:19:33.279
+Here's a list of shortcuts. The denote keymap.
+
+00:19:33.280 --> 00:19:35.165
+It's a recommended practice by me,
+
+00:19:35.166 --> 00:19:36.766
+starting your note with a link.
+
+00:19:36.767 --> 00:19:40.639
+You've heard this all just a couple of minutes ago.
+
+00:19:40.640 --> 00:19:42.854
+It reduces orphans and supposedly teaches you
+
+00:19:42.855 --> 00:19:45.574
+about thinking in connections early.
+
+00:19:45.575 --> 00:19:53.099
+It's a good practice to practice.
+
+00:19:53.100 --> 00:19:55.938
+So with that note, trying to switch back.
+
+00:19:55.939 --> 00:20:00.119
+Denote note switching, that wasn't as smooth,
+
+00:20:00.120 --> 00:20:01.319
+but inserting links is.
+
+00:20:01.320 --> 00:20:10.179
+And there you go. Here's a backlink view. And that's it.
+
+00:20:10.180 --> 00:20:12.651
+In a somewhat self-documenting way,
+
+00:20:12.652 --> 00:20:14.867
+here you see a structure note
+
+00:20:14.868 --> 00:20:17.682
+which is an overview that represents the gist
+
+00:20:17.683 --> 00:20:19.563
+of this Emacs conference talk,
+
+00:20:19.564 --> 00:20:21.839
+with a couple of links to details.
+
+00:20:21.840 --> 00:20:24.107
+From these details, as you've seen,
+
+00:20:24.108 --> 00:20:27.891
+you can go into even more detail. That's all there is to it.
+
+00:20:27.892 --> 00:20:30.133
+Repeat this for infinity,
+
+00:20:30.134 --> 00:20:32.875
+and you get really really complex networks
+
+00:20:32.876 --> 00:20:35.858
+and can do a lot of amazing things in parallel
+
+00:20:35.859 --> 00:20:39.067
+without interference.
+
+NOTE Learn, Share, Grow
+
+00:20:39.068 --> 00:20:42.439
+I just want to stress that the Zettelkasten
+
+00:20:42.440 --> 00:20:47.032
+can help you to learn when you publish, when you share,
+
+00:20:47.033 --> 00:20:51.181
+and when you grow it and yourself in the process.
+
+00:20:51.182 --> 00:20:54.083
+Again, design the Zettelkasten to be used.
+
+00:20:54.084 --> 00:20:58.159
+Publish something, write a blog, share stuff with co-workers.
+
+00:20:58.160 --> 00:21:00.485
+That's powerful and that's so rewarding.
+
+00:21:00.486 --> 00:21:04.039
+This can in turn influence how you do it
+
+00:21:04.040 --> 00:21:06.033
+the next time in your Zettelkasten,
+
+00:21:06.034 --> 00:21:09.380
+because now you can anticipate these kinds of arguments,
+
+00:21:09.381 --> 00:21:11.979
+maybe I can do this early on,
+
+00:21:11.980 --> 00:21:15.133
+and then you're prepared even more for the future
+
+00:21:15.134 --> 00:21:17.479
+to share what you learn.
+
+00:21:17.480 --> 00:21:20.159
+You are also invited very warmly to our
+
+00:21:20.160 --> 00:21:23.319
+community of practice in the Zettelkasten forums.
+
+00:21:23.320 --> 00:21:26.155
+Just share your journey, write about your projects,
+
+00:21:26.156 --> 00:21:29.793
+ask questions. Everyone's welcome, newbie to pro.
+
+00:21:29.794 --> 00:21:32.674
+Just get in touch with people, talk about the processes,
+
+00:21:32.675 --> 00:21:35.361
+improve them, and eventually you'll figure out, well,
+
+00:21:35.362 --> 00:21:39.979
+reaching enlightenment in that regard may not be that hard after all,
+
+00:21:39.980 --> 00:21:42.953
+and then you're fine and good to go for the next projects
+
+00:21:42.954 --> 00:21:48.559
+that you tackle. Most importantly is to make this thing your own.
+
+00:21:48.560 --> 00:21:50.746
+The Zettelkasten, the method, the environment.
+
+00:21:50.747 --> 00:21:53.474
+Create a thinking environment for you.
+
+00:21:53.475 --> 00:21:56.877
+Create your own tools to think with.
+
+00:21:56.878 --> 00:21:59.378
+This goes back to the meme of Shuhari,
+
+00:21:59.379 --> 00:22:02.800
+which is basically imitate and then deviate and innovate.
+
+00:22:02.801 --> 00:22:07.123
+And this invitation here is to imitate what I just laid out.
+
+00:22:07.124 --> 00:22:10.586
+Imitate for a couple of years. One, two, three years.
+
+00:22:10.587 --> 00:22:12.927
+The time goes by faster [snaps fingers] than you think.
+
+00:22:12.928 --> 00:22:16.448
+And then figure out ways to deviate from the doctrine,
+
+00:22:16.449 --> 00:22:18.909
+to figure out ways to improve
+
+00:22:18.910 --> 00:22:22.030
+and change the processes to fit you better.
+
+00:22:22.031 --> 00:22:24.451
+But you need to try to manifest
+
+00:22:24.452 --> 00:22:26.652
+the best practices in your life first,
+
+00:22:26.653 --> 00:22:28.833
+for a while, to then figure out, well,
+
+00:22:28.834 --> 00:22:30.853
+they are not that best after all
+
+00:22:30.854 --> 00:22:33.054
+and I need to change some of them.
+
+00:22:33.055 --> 00:22:37.064
+But you wouldn't know if you didn't try. So do try.
+
+00:22:37.065 --> 00:22:38.639
+Yeah, and with that I want to thank you.
+
+00:22:38.640 --> 00:22:40.249
+Thank you so much for watching. That's it.
+
+00:22:40.250 --> 00:22:41.531
+That was the conference talk,
+
+00:22:41.532 --> 00:22:45.296
+my short introduction to the Zettelkasten mechanics and habits.
+
+NOTE Outro
+
+00:22:45.297 --> 00:22:46.678
+I want to thank you so much for watching
+
+00:22:46.679 --> 00:22:48.380
+and spending time with me on this topic,
+
+00:22:48.381 --> 00:22:50.143
+on these two topics actually,
+
+00:22:50.144 --> 00:22:52.546
+that are very near and dear to my heart.
+
+00:22:52.547 --> 00:22:55.399
+Do share questions, ask questions in the etherpad.
+
+00:22:55.400 --> 00:22:57.608
+And if you watch this after the conference
+
+00:22:57.609 --> 00:23:01.190
+and all the live participation is long over,
+
+00:23:01.191 --> 00:23:04.632
+step into the forums and ask around there.
+
+00:23:04.633 --> 00:23:09.234
+Thanks also to Sacha and team for organizing EmacsConf 2025,
+
+00:23:09.235 --> 00:23:11.595
+for having me. Well, I'm looking forward to hearing from
+
+00:23:11.596 --> 00:23:14.256
+every one of you. So that's it.
+
+00:23:14.257 --> 00:23:18.360
+Peace out and see you in the next one.